From c9137ae2166ae40261af295c71bc4c60337c8bbf Mon Sep 17 00:00:00 2001 From: Chance Strickland Date: Mon, 3 Nov 2025 14:08:01 -0800 Subject: [PATCH 01/11] Add test apps --- apps/test-next/.gitignore | 41 + apps/test-next/README.md | 36 + apps/test-next/app/favicon.ico | Bin 0 -> 25931 bytes apps/test-next/app/globals.css | 13 + apps/test-next/app/layout.tsx | 19 + apps/test-next/app/page.tsx | 3 + apps/test-next/eslint.config.mjs | 18 + apps/test-next/next.config.ts | 7 + apps/test-next/package.json | 26 + apps/test-next/postcss.config.mjs | 5 + apps/test-next/public/favicon.ico | Bin 0 -> 25931 bytes apps/test-next/tsconfig.json | 34 + apps/test-react-router-rsc/.gitignore | 7 + apps/test-react-router-rsc/README.md | 60 + apps/test-react-router-rsc/app/globals.css | 13 + apps/test-react-router-rsc/app/root.tsx | 64 + apps/test-react-router-rsc/app/routes.ts | 3 + .../test-react-router-rsc/app/routes/home.tsx | 12 + apps/test-react-router-rsc/eslint.config.js | 5 + apps/test-react-router-rsc/package.json | 37 + apps/test-react-router-rsc/public/favicon.ico | Bin 0 -> 15086 bytes .../react-router.config.ts | 5 + apps/test-react-router-rsc/tsconfig.json | 23 + apps/test-react-router-rsc/vite.config.ts | 9 + apps/test-react-router/.dockerignore | 4 + apps/test-react-router/.gitignore | 7 + apps/test-react-router/Dockerfile | 22 + apps/test-react-router/README.md | 82 + apps/test-react-router/app/globals.css | 13 + apps/test-react-router/app/root.tsx | 72 + apps/test-react-router/app/routes.ts | 3 + apps/test-react-router/app/routes/home.tsx | 12 + .../app/welcome/logo-dark.svg | 23 + .../app/welcome/logo-light.svg | 23 + .../test-react-router/app/welcome/welcome.tsx | 89 + apps/test-react-router/eslint.config.js | 5 + apps/test-react-router/package.json | 35 + apps/test-react-router/public/favicon.ico | Bin 0 -> 15086 bytes apps/test-react-router/react-router.config.ts | 7 + apps/test-react-router/tsconfig.json | 27 + apps/test-react-router/vite.config.ts | 8 + apps/test-vite-react-17/.gitignore | 24 + apps/test-vite-react-17/README.md | 73 + apps/test-vite-react-17/eslint.config.js | 5 + apps/test-vite-react-17/index.html | 13 + apps/test-vite-react-17/package.json | 29 + apps/test-vite-react-17/public/vite.svg | 1 + apps/test-vite-react-17/src/app.tsx | 3 + apps/test-vite-react-17/src/assets/react.svg | 1 + apps/test-vite-react-17/src/globals.css | 13 + apps/test-vite-react-17/src/main.tsx | 14 + apps/test-vite-react-17/tsconfig.app.json | 28 + apps/test-vite-react-17/tsconfig.json | 7 + apps/test-vite-react-17/tsconfig.node.json | 26 + apps/test-vite-react-17/vite.config.ts | 7 + apps/test-vite-react-18/.gitignore | 24 + apps/test-vite-react-18/README.md | 73 + apps/test-vite-react-18/eslint.config.js | 5 + apps/test-vite-react-18/index.html | 13 + apps/test-vite-react-18/package.json | 29 + apps/test-vite-react-18/public/vite.svg | 1 + apps/test-vite-react-18/src/app.tsx | 3 + apps/test-vite-react-18/src/assets/react.svg | 1 + apps/test-vite-react-18/src/globals.css | 13 + apps/test-vite-react-18/src/main.tsx | 10 + apps/test-vite-react-18/tsconfig.app.json | 28 + apps/test-vite-react-18/tsconfig.json | 7 + apps/test-vite-react-18/tsconfig.node.json | 26 + apps/test-vite-react-18/vite.config.ts | 7 + apps/test-vite-react-19/.gitignore | 24 + apps/test-vite-react-19/README.md | 73 + apps/test-vite-react-19/eslint.config.js | 5 + apps/test-vite-react-19/index.html | 13 + apps/test-vite-react-19/package.json | 29 + apps/test-vite-react-19/public/vite.svg | 1 + apps/test-vite-react-19/src/app.tsx | 3 + apps/test-vite-react-19/src/assets/react.svg | 1 + apps/test-vite-react-19/src/globals.css | 13 + apps/test-vite-react-19/src/main.tsx | 10 + apps/test-vite-react-19/tsconfig.app.json | 28 + apps/test-vite-react-19/tsconfig.json | 7 + apps/test-vite-react-19/tsconfig.node.json | 26 + apps/test-vite-react-19/vite.config.ts | 7 + internal/test-styles/colors.css | 123 + internal/test-styles/package.json | 12 + internal/test-styles/resets.css | 202 ++ package.json | 6 + pnpm-lock.yaml | 3114 ++++++++++++++++- 88 files changed, 4966 insertions(+), 87 deletions(-) create mode 100644 apps/test-next/.gitignore create mode 100644 apps/test-next/README.md create mode 100644 apps/test-next/app/favicon.ico create mode 100644 apps/test-next/app/globals.css create mode 100644 apps/test-next/app/layout.tsx create mode 100644 apps/test-next/app/page.tsx create mode 100644 apps/test-next/eslint.config.mjs create mode 100644 apps/test-next/next.config.ts create mode 100644 apps/test-next/package.json create mode 100644 apps/test-next/postcss.config.mjs create mode 100644 apps/test-next/public/favicon.ico create mode 100644 apps/test-next/tsconfig.json create mode 100644 apps/test-react-router-rsc/.gitignore create mode 100644 apps/test-react-router-rsc/README.md create mode 100644 apps/test-react-router-rsc/app/globals.css create mode 100644 apps/test-react-router-rsc/app/root.tsx create mode 100644 apps/test-react-router-rsc/app/routes.ts create mode 100644 apps/test-react-router-rsc/app/routes/home.tsx create mode 100644 apps/test-react-router-rsc/eslint.config.js create mode 100644 apps/test-react-router-rsc/package.json create mode 100644 apps/test-react-router-rsc/public/favicon.ico create mode 100644 apps/test-react-router-rsc/react-router.config.ts create mode 100644 apps/test-react-router-rsc/tsconfig.json create mode 100644 apps/test-react-router-rsc/vite.config.ts create mode 100644 apps/test-react-router/.dockerignore create mode 100644 apps/test-react-router/.gitignore create mode 100644 apps/test-react-router/Dockerfile create mode 100644 apps/test-react-router/README.md create mode 100644 apps/test-react-router/app/globals.css create mode 100644 apps/test-react-router/app/root.tsx create mode 100644 apps/test-react-router/app/routes.ts create mode 100644 apps/test-react-router/app/routes/home.tsx create mode 100644 apps/test-react-router/app/welcome/logo-dark.svg create mode 100644 apps/test-react-router/app/welcome/logo-light.svg create mode 100644 apps/test-react-router/app/welcome/welcome.tsx create mode 100644 apps/test-react-router/eslint.config.js create mode 100644 apps/test-react-router/package.json create mode 100644 apps/test-react-router/public/favicon.ico create mode 100644 apps/test-react-router/react-router.config.ts create mode 100644 apps/test-react-router/tsconfig.json create mode 100644 apps/test-react-router/vite.config.ts create mode 100644 apps/test-vite-react-17/.gitignore create mode 100644 apps/test-vite-react-17/README.md create mode 100644 apps/test-vite-react-17/eslint.config.js create mode 100644 apps/test-vite-react-17/index.html create mode 100644 apps/test-vite-react-17/package.json create mode 100644 apps/test-vite-react-17/public/vite.svg create mode 100644 apps/test-vite-react-17/src/app.tsx create mode 100644 apps/test-vite-react-17/src/assets/react.svg create mode 100644 apps/test-vite-react-17/src/globals.css create mode 100644 apps/test-vite-react-17/src/main.tsx create mode 100644 apps/test-vite-react-17/tsconfig.app.json create mode 100644 apps/test-vite-react-17/tsconfig.json create mode 100644 apps/test-vite-react-17/tsconfig.node.json create mode 100644 apps/test-vite-react-17/vite.config.ts create mode 100644 apps/test-vite-react-18/.gitignore create mode 100644 apps/test-vite-react-18/README.md create mode 100644 apps/test-vite-react-18/eslint.config.js create mode 100644 apps/test-vite-react-18/index.html create mode 100644 apps/test-vite-react-18/package.json create mode 100644 apps/test-vite-react-18/public/vite.svg create mode 100644 apps/test-vite-react-18/src/app.tsx create mode 100644 apps/test-vite-react-18/src/assets/react.svg create mode 100644 apps/test-vite-react-18/src/globals.css create mode 100644 apps/test-vite-react-18/src/main.tsx create mode 100644 apps/test-vite-react-18/tsconfig.app.json create mode 100644 apps/test-vite-react-18/tsconfig.json create mode 100644 apps/test-vite-react-18/tsconfig.node.json create mode 100644 apps/test-vite-react-18/vite.config.ts create mode 100644 apps/test-vite-react-19/.gitignore create mode 100644 apps/test-vite-react-19/README.md create mode 100644 apps/test-vite-react-19/eslint.config.js create mode 100644 apps/test-vite-react-19/index.html create mode 100644 apps/test-vite-react-19/package.json create mode 100644 apps/test-vite-react-19/public/vite.svg create mode 100644 apps/test-vite-react-19/src/app.tsx create mode 100644 apps/test-vite-react-19/src/assets/react.svg create mode 100644 apps/test-vite-react-19/src/globals.css create mode 100644 apps/test-vite-react-19/src/main.tsx create mode 100644 apps/test-vite-react-19/tsconfig.app.json create mode 100644 apps/test-vite-react-19/tsconfig.json create mode 100644 apps/test-vite-react-19/tsconfig.node.json create mode 100644 apps/test-vite-react-19/vite.config.ts create mode 100644 internal/test-styles/colors.css create mode 100644 internal/test-styles/package.json create mode 100644 internal/test-styles/resets.css diff --git a/apps/test-next/.gitignore b/apps/test-next/.gitignore new file mode 100644 index 000000000..5ef6a5207 --- /dev/null +++ b/apps/test-next/.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/apps/test-next/README.md b/apps/test-next/README.md new file mode 100644 index 000000000..e215bc4cc --- /dev/null +++ b/apps/test-next/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/apps/test-next/app/favicon.ico b/apps/test-next/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/apps/test-next/app/globals.css b/apps/test-next/app/globals.css new file mode 100644 index 000000000..946a5ed8e --- /dev/null +++ b/apps/test-next/app/globals.css @@ -0,0 +1,13 @@ +@import '@repo/test-styles/resets.css'; +@import '@repo/test-styles/colors.css'; + +html, +body { + min-height: 100vh; + min-height: 100svh; + height: 100%; + color-scheme: light dark; + @media (prefers-color-scheme: dark) { + color-scheme: dark; + } +} diff --git a/apps/test-next/app/layout.tsx b/apps/test-next/app/layout.tsx new file mode 100644 index 000000000..f3d497856 --- /dev/null +++ b/apps/test-next/app/layout.tsx @@ -0,0 +1,19 @@ +import type { Metadata } from 'next'; +import './globals.css'; + +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/apps/test-next/app/page.tsx b/apps/test-next/app/page.tsx new file mode 100644 index 000000000..aa5883279 --- /dev/null +++ b/apps/test-next/app/page.tsx @@ -0,0 +1,3 @@ +export default function Home() { + return
Home
; +} diff --git a/apps/test-next/eslint.config.mjs b/apps/test-next/eslint.config.mjs new file mode 100644 index 000000000..05e726d1b --- /dev/null +++ b/apps/test-next/eslint.config.mjs @@ -0,0 +1,18 @@ +import { defineConfig, globalIgnores } from "eslint/config"; +import nextVitals from "eslint-config-next/core-web-vitals"; +import nextTs from "eslint-config-next/typescript"; + +const eslintConfig = defineConfig([ + ...nextVitals, + ...nextTs, + // Override default ignores of eslint-config-next. + globalIgnores([ + // Default ignores of eslint-config-next: + ".next/**", + "out/**", + "build/**", + "next-env.d.ts", + ]), +]); + +export default eslintConfig; diff --git a/apps/test-next/next.config.ts b/apps/test-next/next.config.ts new file mode 100644 index 000000000..e9ffa3083 --- /dev/null +++ b/apps/test-next/next.config.ts @@ -0,0 +1,7 @@ +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { + /* config options here */ +}; + +export default nextConfig; diff --git a/apps/test-next/package.json b/apps/test-next/package.json new file mode 100644 index 000000000..d7da9a874 --- /dev/null +++ b/apps/test-next/package.json @@ -0,0 +1,26 @@ +{ + "name": "@repo/test-next", + "version": "0.0.0", + "private": true, + "scripts": { + "dev": "next dev -p 3003", + "build": "next build", + "start": "next start", + "lint": "eslint" + }, + "dependencies": { + "@repo/test-data": "workspace:*", + "@repo/test-styles": "workspace:*", + "next": "16.0.1", + "react": "19.2.0", + "react-dom": "19.2.0" + }, + "devDependencies": { + "@types/node": "^22", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "eslint": "^9.38.0", + "eslint-config-next": "16.0.1", + "typescript": "^5.9.3" + } +} diff --git a/apps/test-next/postcss.config.mjs b/apps/test-next/postcss.config.mjs new file mode 100644 index 000000000..8aa71477f --- /dev/null +++ b/apps/test-next/postcss.config.mjs @@ -0,0 +1,5 @@ +const config = { + plugins: {}, +}; + +export default config; diff --git a/apps/test-next/public/favicon.ico b/apps/test-next/public/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/apps/test-next/tsconfig.json b/apps/test-next/tsconfig.json new file mode 100644 index 000000000..3a13f90a7 --- /dev/null +++ b/apps/test-next/tsconfig.json @@ -0,0 +1,34 @@ +{ + "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": "react-jsx", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts", + "**/*.mts" + ], + "exclude": ["node_modules"] +} diff --git a/apps/test-react-router-rsc/.gitignore b/apps/test-react-router-rsc/.gitignore new file mode 100644 index 000000000..039ee62d2 --- /dev/null +++ b/apps/test-react-router-rsc/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +.env +/node_modules/ + +# React Router +/.react-router/ +/build/ diff --git a/apps/test-react-router-rsc/README.md b/apps/test-react-router-rsc/README.md new file mode 100644 index 000000000..5dc961e94 --- /dev/null +++ b/apps/test-react-router-rsc/README.md @@ -0,0 +1,60 @@ +# Welcome to React Router! (Experimental RSC) + +โš ๏ธ **EXPERIMENTAL**: This template demonstrates React Server Components with React Router. This is experimental technology and not recommended for production use. + +A modern template for exploring React Server Components (RSC) with React Router, powered by Vite. + +## Features + +- ๐Ÿงช **Experimental React Server Components** +- ๐Ÿš€ Server-side rendering with RSC +- โšก๏ธ Hot Module Replacement (HMR) +- ๐Ÿ“ฆ Asset bundling and optimization with Vite +- ๐Ÿ”„ Data loading and mutations +- ๐Ÿ”’ TypeScript by default +- ๐Ÿ“– [React Router docs](https://reactrouter.com/) +- ๐Ÿ“š [React Server Components guide](https://reactrouter.com/how-to/react-server-components) + +## Getting Started + +### Installation + +Install the dependencies: + +```bash +npm install +``` + +### Development + +Start the development server with HMR: + +```bash +npm run dev +``` + +Your application will be available at `http://localhost:5173`. + +## Building for Production + +Create a production build: + +```bash +npm run build +``` + +## Running Production Build + +Run the production server: + +```bash +npm start +``` + +## Understanding React Server Components + +Learn more about React Server Components with React Router in our [comprehensive guide](https://reactrouter.com/how-to/react-server-components). + +--- + +Built with โค๏ธ using React Router. diff --git a/apps/test-react-router-rsc/app/globals.css b/apps/test-react-router-rsc/app/globals.css new file mode 100644 index 000000000..946a5ed8e --- /dev/null +++ b/apps/test-react-router-rsc/app/globals.css @@ -0,0 +1,13 @@ +@import '@repo/test-styles/resets.css'; +@import '@repo/test-styles/colors.css'; + +html, +body { + min-height: 100vh; + min-height: 100svh; + height: 100%; + color-scheme: light dark; + @media (prefers-color-scheme: dark) { + color-scheme: dark; + } +} diff --git a/apps/test-react-router-rsc/app/root.tsx b/apps/test-react-router-rsc/app/root.tsx new file mode 100644 index 000000000..26e42c5e5 --- /dev/null +++ b/apps/test-react-router-rsc/app/root.tsx @@ -0,0 +1,64 @@ +import { isRouteErrorResponse, Links, Meta, Outlet, ScrollRestoration } from 'react-router'; +import type { Route } from './+types/root'; +import './globals.css'; + +export const links: Route.LinksFunction = () => [ + { rel: 'preconnect', href: 'https://fonts.googleapis.com' }, + { + rel: 'preconnect', + href: 'https://fonts.gstatic.com', + crossOrigin: 'anonymous', + }, + { + rel: 'stylesheet', + href: 'https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap', + }, +]; + +export function Layout({ children }: { children: React.ReactNode }) { + return ( + + + + + + + + + {children} + + + + ); +} + +export default function App() { + return ; +} + +export function ErrorBoundary({ error }: Route.ErrorBoundaryProps) { + let message = 'Oops!'; + let details = 'An unexpected error occurred.'; + let stack: string | undefined; + + if (isRouteErrorResponse(error)) { + message = error.status === 404 ? '404' : 'Error'; + details = + error.status === 404 ? 'The requested page could not be found.' : error.statusText || details; + } else if (import.meta.env.DEV && error && error instanceof Error) { + details = error.message; + stack = error.stack; + } + + return ( +
+

{message}

+

{details}

+ {stack && ( +
+          {stack}
+        
+ )} +
+ ); +} diff --git a/apps/test-react-router-rsc/app/routes.ts b/apps/test-react-router-rsc/app/routes.ts new file mode 100644 index 000000000..102b40258 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes.ts @@ -0,0 +1,3 @@ +import { type RouteConfig, index } from "@react-router/dev/routes"; + +export default [index("routes/home.tsx")] satisfies RouteConfig; diff --git a/apps/test-react-router-rsc/app/routes/home.tsx b/apps/test-react-router-rsc/app/routes/home.tsx new file mode 100644 index 000000000..c07db4a95 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/home.tsx @@ -0,0 +1,12 @@ +import type { Route } from './+types/home'; + +export function meta({}: Route.MetaArgs) { + return [ + { title: 'New React Router App' }, + { name: 'description', content: 'Welcome to React Router!' }, + ]; +} + +export function ServerComponent() { + return
Home
; +} diff --git a/apps/test-react-router-rsc/eslint.config.js b/apps/test-react-router-rsc/eslint.config.js new file mode 100644 index 000000000..90a46a235 --- /dev/null +++ b/apps/test-react-router-rsc/eslint.config.js @@ -0,0 +1,5 @@ +// @ts-check +import { defineConfig, globalIgnores } from 'eslint/config'; +import { configs } from '@repo/eslint-config/vite'; + +export default defineConfig([globalIgnores(['dist']), ...configs]); diff --git a/apps/test-react-router-rsc/package.json b/apps/test-react-router-rsc/package.json new file mode 100644 index 000000000..e713ba552 --- /dev/null +++ b/apps/test-react-router-rsc/package.json @@ -0,0 +1,37 @@ +{ + "name": "test-react-router-rsc", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "build": "react-router build", + "dev": "react-router dev -p 3005", + "start": "react-router-serve build/server/index.js", + "typecheck": "react-router typegen && tsc" + }, + "dependencies": { + "@react-router/serve": "7.9.2", + "@remix-run/node-fetch-server": "0.9.0", + "@repo/test-data": "workspace:*", + "@repo/test-styles": "workspace:*", + "isbot": "^5.1.32", + "react": "19.2.0", + "react-dom": "19.2.0", + "react-router": "7.9.2" + }, + "devDependencies": { + "@react-router/dev": "7.9.2", + "@react-router/fs-routes": "7.9.2", + "@repo/eslint-config": "workspace:*", + "@types/node": "^22", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "@vitejs/plugin-rsc": "0.4.31", + "eslint": "^9.38.0", + "eslint-plugin-react-refresh": "^0.4.22", + "typescript": "5.9.3", + "vite": "7.1.6", + "vite-plugin-devtools-json": "^1.0.0", + "vite-tsconfig-paths": "5.1.4" + } +} diff --git a/apps/test-react-router-rsc/public/favicon.ico b/apps/test-react-router-rsc/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5dbdfcddcb14182535f6d32d1c900681321b1aa3 GIT binary patch literal 15086 zcmeI33v3ic7{|AFEmuJ-;v>ep_G*NPi6KM`qNryCe1PIJ8siIN1WZ(7qVa)RVtmC% z)Ch?tN+afMKm;5@rvorJk zcXnoOc4q51HBQnQH_jn!cAg&XI1?PlX>Kl^k8qq0;zkha`kY$Fxt#=KNJAE9CMdpW zqr4#g8`nTw191(+H4xW8Tmyru2I^3=J1G3emPxkPXA=3{vvuvse_WWSshqaqls^-m zgB7q8&Vk*aYRe?sn$n53dGH#%3y%^vxv{pL*-h0Z4bmb_(k6{FL7HWIz(V*HT#IcS z-wE{)+0x1U!RUPt3gB97%p}@oHxF4|6S*+Yw=_tLtxZ~`S=z6J?O^AfU>7qOX`JNBbV&8+bO0%@fhQitKIJ^O^ zpgIa__qD_y07t@DFlBJ)8SP_#^j{6jpaXt{U%=dx!qu=4u7^21lWEYHPPY5U3TcoQ zX_7W+lvZi>TapNk_X>k-KO%MC9iZp>1E`N34gHKd9tK&){jq2~7OsJ>!G0FzxQFw6G zm&Vb(2#-T|rM|n3>uAsG_hnbvUKFf3#ay@u4uTzia~NY%XgCHfx4^To4BDU@)HlV? z@EN=g^ymETa1sQK{kRwyE4Ax8?wT&GvaG@ASO}{&a17&^v`y z!oPdiSiia^oov(Z)QhG2&|FgE{M9_4hJROGbnj>#$~ZF$-G^|zPj*QApltKe?;u;uKHJ~-V!=VLkg7Kgct)l7u39f@%VG8e3f$N-B zAu3a4%ZGf)r+jPAYCSLt73m_J3}p>}6Tx0j(wg4vvKhP!DzgiWANiE;Ppvp}P2W@m z-VbYn+NXFF?6ngef5CfY6ZwKnWvNV4z6s^~yMXw2i5mv}jC$6$46g?G|CPAu{W5qF zDobS=zb2ILX9D827g*NtGe5w;>frjanY{f)hrBP_2ehBt1?`~ypvg_Ot4x1V+43P@Ve8>qd)9NX_jWdLo`Zfy zoeam9)@Dpym{4m@+LNxXBPjPKA7{3a&H+~xQvr>C_A;7=JrfK~$M2pCh>|xLz>W6SCs4qC|#V`)# z)0C|?$o>jzh<|-cpf

K7osU{Xp5PG4-K+L2G=)c3f&}H&M3wo7TlO_UJjQ-Oq&_ zjAc9=nNIYz{c3zxOiS5UfcE1}8#iI4@uy;$Q7>}u`j+OU0N<*Ezx$k{x_27+{s2Eg z`^=rhtIzCm!_UcJ?Db~Lh-=_))PT3{Q0{Mwdq;0>ZL%l3+;B&4!&xm#%HYAK|;b456Iv&&f$VQHf` z>$*K9w8T+paVwc7fLfMlhQ4)*zL_SG{~v4QR;IuX-(oRtYAhWOlh`NLoX0k$RUYMi z2Y!bqpdN}wz8q`-%>&Le@q|jFw92ErW-hma-le?S z-@OZt2EEUm4wLsuEMkt4zlyy29_3S50JAcQHTtgTC{P~%-mvCTzrjXOc|{}N`Cz`W zSj7CrXfa7lcsU0J(0uSX6G`54t^7}+OLM0n(|g4waOQ}bd3%!XLh?NX9|8G_|06Ie zD5F1)w5I~!et7lA{G^;uf7aqT`KE&2qx9|~O;s6t!gb`+zVLJyT2T)l*8l(j literal 0 HcmV?d00001 diff --git a/apps/test-react-router-rsc/react-router.config.ts b/apps/test-react-router-rsc/react-router.config.ts new file mode 100644 index 000000000..9c6ea1173 --- /dev/null +++ b/apps/test-react-router-rsc/react-router.config.ts @@ -0,0 +1,5 @@ +import type { Config } from "@react-router/dev/config"; + +export default { + // Config options... +} satisfies Config; diff --git a/apps/test-react-router-rsc/tsconfig.json b/apps/test-react-router-rsc/tsconfig.json new file mode 100644 index 000000000..b5c602b52 --- /dev/null +++ b/apps/test-react-router-rsc/tsconfig.json @@ -0,0 +1,23 @@ +{ + "include": ["**/*.ts", "**/*.tsx", "./.react-router/types/**/*"], + "compilerOptions": { + "allowImportingTsExtensions": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "skipLibCheck": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "moduleResolution": "Bundler", + "module": "ESNext", + "target": "ESNext", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "types": ["vite/client", "@vitejs/plugin-rsc/types"], + "jsx": "react-jsx", + "rootDirs": [".", "./.react-router/types"], + "baseUrl": ".", + "paths": { + "~/*": ["./app/*"] + } + } +} diff --git a/apps/test-react-router-rsc/vite.config.ts b/apps/test-react-router-rsc/vite.config.ts new file mode 100644 index 000000000..dcf1d639c --- /dev/null +++ b/apps/test-react-router-rsc/vite.config.ts @@ -0,0 +1,9 @@ +import { unstable_reactRouterRSC as reactRouterRSC } from '@react-router/dev/vite'; +import rsc from '@vitejs/plugin-rsc'; +import { defineConfig } from 'vite'; +import devtoolsJson from 'vite-plugin-devtools-json'; +import tsconfigPaths from 'vite-tsconfig-paths'; + +export default defineConfig({ + plugins: [tsconfigPaths(), reactRouterRSC(), rsc(), devtoolsJson()], +}); diff --git a/apps/test-react-router/.dockerignore b/apps/test-react-router/.dockerignore new file mode 100644 index 000000000..9b8d51471 --- /dev/null +++ b/apps/test-react-router/.dockerignore @@ -0,0 +1,4 @@ +.react-router +build +node_modules +README.md \ No newline at end of file diff --git a/apps/test-react-router/.gitignore b/apps/test-react-router/.gitignore new file mode 100644 index 000000000..039ee62d2 --- /dev/null +++ b/apps/test-react-router/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +.env +/node_modules/ + +# React Router +/.react-router/ +/build/ diff --git a/apps/test-react-router/Dockerfile b/apps/test-react-router/Dockerfile new file mode 100644 index 000000000..207bf937e --- /dev/null +++ b/apps/test-react-router/Dockerfile @@ -0,0 +1,22 @@ +FROM node:20-alpine AS development-dependencies-env +COPY . /app +WORKDIR /app +RUN npm ci + +FROM node:20-alpine AS production-dependencies-env +COPY ./package.json package-lock.json /app/ +WORKDIR /app +RUN npm ci --omit=dev + +FROM node:20-alpine AS build-env +COPY . /app/ +COPY --from=development-dependencies-env /app/node_modules /app/node_modules +WORKDIR /app +RUN npm run build + +FROM node:20-alpine +COPY ./package.json package-lock.json /app/ +COPY --from=production-dependencies-env /app/node_modules /app/node_modules +COPY --from=build-env /app/build /app/build +WORKDIR /app +CMD ["npm", "run", "start"] \ No newline at end of file diff --git a/apps/test-react-router/README.md b/apps/test-react-router/README.md new file mode 100644 index 000000000..efcc4d645 --- /dev/null +++ b/apps/test-react-router/README.md @@ -0,0 +1,82 @@ +# Welcome to React Router! + +A modern, production-ready template for building full-stack React applications using React Router. + +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/remix-run/react-router-templates/tree/main/default) + +## Features + +- ๐Ÿš€ Server-side rendering +- โšก๏ธ Hot Module Replacement (HMR) +- ๐Ÿ“ฆ Asset bundling and optimization +- ๐Ÿ”„ Data loading and mutations +- ๐Ÿ”’ TypeScript by default +- ๐Ÿ“– [React Router docs](https://reactrouter.com/) + +## Getting Started + +### Installation + +Install the dependencies: + +```bash +npm install +``` + +### Development + +Start the development server with HMR: + +```bash +npm run dev +``` + +Your application will be available at `http://localhost:5173`. + +## Building for Production + +Create a production build: + +```bash +npm run build +``` + +## Deployment + +### Docker Deployment + +To build and run using Docker: + +```bash +docker build -t my-app . + +# Run the container +docker run -p 3000:3000 my-app +``` + +The containerized application can be deployed to any platform that supports Docker, including: + +- AWS ECS +- Google Cloud Run +- Azure Container Apps +- Digital Ocean App Platform +- Fly.io +- Railway + +### DIY Deployment + +If you're familiar with deploying Node applications, the built-in app server is production-ready. + +Make sure to deploy the output of `npm run build` + +``` +โ”œโ”€โ”€ package.json +โ”œโ”€โ”€ package-lock.json (or pnpm-lock.yaml, or bun.lockb) +โ”œโ”€โ”€ build/ +โ”‚ โ”œโ”€โ”€ client/ # Static assets +โ”‚ โ””โ”€โ”€ server/ # Server-side code +``` + +--- + +Built with โค๏ธ using React Router. diff --git a/apps/test-react-router/app/globals.css b/apps/test-react-router/app/globals.css new file mode 100644 index 000000000..946a5ed8e --- /dev/null +++ b/apps/test-react-router/app/globals.css @@ -0,0 +1,13 @@ +@import '@repo/test-styles/resets.css'; +@import '@repo/test-styles/colors.css'; + +html, +body { + min-height: 100vh; + min-height: 100svh; + height: 100%; + color-scheme: light dark; + @media (prefers-color-scheme: dark) { + color-scheme: dark; + } +} diff --git a/apps/test-react-router/app/root.tsx b/apps/test-react-router/app/root.tsx new file mode 100644 index 000000000..8380d8297 --- /dev/null +++ b/apps/test-react-router/app/root.tsx @@ -0,0 +1,72 @@ +import { + isRouteErrorResponse, + Links, + Meta, + Outlet, + Scripts, + ScrollRestoration, +} from 'react-router'; +import type { Route } from './+types/root'; +import './globals.css'; + +export const links: Route.LinksFunction = () => [ + { rel: 'preconnect', href: 'https://fonts.googleapis.com' }, + { + rel: 'preconnect', + href: 'https://fonts.gstatic.com', + crossOrigin: 'anonymous', + }, + { + rel: 'stylesheet', + href: 'https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap', + }, +]; + +export function Layout({ children }: { children: React.ReactNode }) { + return ( + + + + + + + + + {children} + + + + + ); +} + +export default function App() { + return ; +} + +export function ErrorBoundary({ error }: Route.ErrorBoundaryProps) { + let message = 'Oops!'; + let details = 'An unexpected error occurred.'; + let stack: string | undefined; + + if (isRouteErrorResponse(error)) { + message = error.status === 404 ? '404' : 'Error'; + details = + error.status === 404 ? 'The requested page could not be found.' : error.statusText || details; + } else if (import.meta.env.DEV && error && error instanceof Error) { + details = error.message; + stack = error.stack; + } + + return ( +

+

{message}

+

{details}

+ {stack && ( +
+          {stack}
+        
+ )} +
+ ); +} diff --git a/apps/test-react-router/app/routes.ts b/apps/test-react-router/app/routes.ts new file mode 100644 index 000000000..102b40258 --- /dev/null +++ b/apps/test-react-router/app/routes.ts @@ -0,0 +1,3 @@ +import { type RouteConfig, index } from "@react-router/dev/routes"; + +export default [index("routes/home.tsx")] satisfies RouteConfig; diff --git a/apps/test-react-router/app/routes/home.tsx b/apps/test-react-router/app/routes/home.tsx new file mode 100644 index 000000000..3e9fb3f62 --- /dev/null +++ b/apps/test-react-router/app/routes/home.tsx @@ -0,0 +1,12 @@ +import type { Route } from './+types/home'; + +export function meta({}: Route.MetaArgs) { + return [ + { title: 'New React Router App' }, + { name: 'description', content: 'Welcome to React Router!' }, + ]; +} + +export default function Home() { + return
Home
; +} diff --git a/apps/test-react-router/app/welcome/logo-dark.svg b/apps/test-react-router/app/welcome/logo-dark.svg new file mode 100644 index 000000000..dd8202894 --- /dev/null +++ b/apps/test-react-router/app/welcome/logo-dark.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/test-react-router/app/welcome/logo-light.svg b/apps/test-react-router/app/welcome/logo-light.svg new file mode 100644 index 000000000..73284929d --- /dev/null +++ b/apps/test-react-router/app/welcome/logo-light.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/test-react-router/app/welcome/welcome.tsx b/apps/test-react-router/app/welcome/welcome.tsx new file mode 100644 index 000000000..8ac6e1d30 --- /dev/null +++ b/apps/test-react-router/app/welcome/welcome.tsx @@ -0,0 +1,89 @@ +import logoDark from "./logo-dark.svg"; +import logoLight from "./logo-light.svg"; + +export function Welcome() { + return ( +
+
+
+
+ React Router + React Router +
+
+
+ +
+
+
+ ); +} + +const resources = [ + { + href: "https://reactrouter.com/docs", + text: "React Router Docs", + icon: ( + + + + ), + }, + { + href: "https://rmx.as/discord", + text: "Join Discord", + icon: ( + + + + ), + }, +]; diff --git a/apps/test-react-router/eslint.config.js b/apps/test-react-router/eslint.config.js new file mode 100644 index 000000000..90a46a235 --- /dev/null +++ b/apps/test-react-router/eslint.config.js @@ -0,0 +1,5 @@ +// @ts-check +import { defineConfig, globalIgnores } from 'eslint/config'; +import { configs } from '@repo/eslint-config/vite'; + +export default defineConfig([globalIgnores(['dist']), ...configs]); diff --git a/apps/test-react-router/package.json b/apps/test-react-router/package.json new file mode 100644 index 000000000..e8cb606ba --- /dev/null +++ b/apps/test-react-router/package.json @@ -0,0 +1,35 @@ +{ + "name": "test-react-router", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "build": "react-router build", + "dev": "react-router dev -p 3004", + "start": "react-router-serve ./build/server/index.js", + "typecheck": "react-router typegen && tsc" + }, + "dependencies": { + "@react-router/node": "^7.9.5", + "@react-router/serve": "^7.9.5", + "@repo/test-data": "workspace:*", + "@repo/test-styles": "workspace:*", + "isbot": "^5.1.32", + "react": "^19.1.1", + "react-dom": "^19.1.1", + "react-router": "^7.9.5" + }, + "devDependencies": { + "@react-router/dev": "^7.9.5", + "@repo/eslint-config": "workspace:*", + "@types/node": "^22", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "eslint": "^9.38.0", + "eslint-plugin-react-refresh": "^0.4.22", + "typescript": "^5.9.3", + "vite": "^7.1.12", + "vite-plugin-devtools-json": "^1.0.0", + "vite-tsconfig-paths": "^5.1.4" + } +} diff --git a/apps/test-react-router/public/favicon.ico b/apps/test-react-router/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5dbdfcddcb14182535f6d32d1c900681321b1aa3 GIT binary patch literal 15086 zcmeI33v3ic7{|AFEmuJ-;v>ep_G*NPi6KM`qNryCe1PIJ8siIN1WZ(7qVa)RVtmC% z)Ch?tN+afMKm;5@rvorJk zcXnoOc4q51HBQnQH_jn!cAg&XI1?PlX>Kl^k8qq0;zkha`kY$Fxt#=KNJAE9CMdpW zqr4#g8`nTw191(+H4xW8Tmyru2I^3=J1G3emPxkPXA=3{vvuvse_WWSshqaqls^-m zgB7q8&Vk*aYRe?sn$n53dGH#%3y%^vxv{pL*-h0Z4bmb_(k6{FL7HWIz(V*HT#IcS z-wE{)+0x1U!RUPt3gB97%p}@oHxF4|6S*+Yw=_tLtxZ~`S=z6J?O^AfU>7qOX`JNBbV&8+bO0%@fhQitKIJ^O^ zpgIa__qD_y07t@DFlBJ)8SP_#^j{6jpaXt{U%=dx!qu=4u7^21lWEYHPPY5U3TcoQ zX_7W+lvZi>TapNk_X>k-KO%MC9iZp>1E`N34gHKd9tK&){jq2~7OsJ>!G0FzxQFw6G zm&Vb(2#-T|rM|n3>uAsG_hnbvUKFf3#ay@u4uTzia~NY%XgCHfx4^To4BDU@)HlV? z@EN=g^ymETa1sQK{kRwyE4Ax8?wT&GvaG@ASO}{&a17&^v`y z!oPdiSiia^oov(Z)QhG2&|FgE{M9_4hJROGbnj>#$~ZF$-G^|zPj*QApltKe?;u;uKHJ~-V!=VLkg7Kgct)l7u39f@%VG8e3f$N-B zAu3a4%ZGf)r+jPAYCSLt73m_J3}p>}6Tx0j(wg4vvKhP!DzgiWANiE;Ppvp}P2W@m z-VbYn+NXFF?6ngef5CfY6ZwKnWvNV4z6s^~yMXw2i5mv}jC$6$46g?G|CPAu{W5qF zDobS=zb2ILX9D827g*NtGe5w;>frjanY{f)hrBP_2ehBt1?`~ypvg_Ot4x1V+43P@Ve8>qd)9NX_jWdLo`Zfy zoeam9)@Dpym{4m@+LNxXBPjPKA7{3a&H+~xQvr>C_A;7=JrfK~$M2pCh>|xLz>W6SCs4qC|#V`)# z)0C|?$o>jzh<|-cpf

K7osU{Xp5PG4-K+L2G=)c3f&}H&M3wo7TlO_UJjQ-Oq&_ zjAc9=nNIYz{c3zxOiS5UfcE1}8#iI4@uy;$Q7>}u`j+OU0N<*Ezx$k{x_27+{s2Eg z`^=rhtIzCm!_UcJ?Db~Lh-=_))PT3{Q0{Mwdq;0>ZL%l3+;B&4!&xm#%HYAK|;b456Iv&&f$VQHf` z>$*K9w8T+paVwc7fLfMlhQ4)*zL_SG{~v4QR;IuX-(oRtYAhWOlh`NLoX0k$RUYMi z2Y!bqpdN}wz8q`-%>&Le@q|jFw92ErW-hma-le?S z-@OZt2EEUm4wLsuEMkt4zlyy29_3S50JAcQHTtgTC{P~%-mvCTzrjXOc|{}N`Cz`W zSj7CrXfa7lcsU0J(0uSX6G`54t^7}+OLM0n(|g4waOQ}bd3%!XLh?NX9|8G_|06Ie zD5F1)w5I~!et7lA{G^;uf7aqT`KE&2qx9|~O;s6t!gb`+zVLJyT2T)l*8l(j literal 0 HcmV?d00001 diff --git a/apps/test-react-router/react-router.config.ts b/apps/test-react-router/react-router.config.ts new file mode 100644 index 000000000..6ff16f917 --- /dev/null +++ b/apps/test-react-router/react-router.config.ts @@ -0,0 +1,7 @@ +import type { Config } from "@react-router/dev/config"; + +export default { + // Config options... + // Server-side render by default, to enable SPA mode set this to `false` + ssr: true, +} satisfies Config; diff --git a/apps/test-react-router/tsconfig.json b/apps/test-react-router/tsconfig.json new file mode 100644 index 000000000..dc391a45f --- /dev/null +++ b/apps/test-react-router/tsconfig.json @@ -0,0 +1,27 @@ +{ + "include": [ + "**/*", + "**/.server/**/*", + "**/.client/**/*", + ".react-router/types/**/*" + ], + "compilerOptions": { + "lib": ["DOM", "DOM.Iterable", "ES2022"], + "types": ["node", "vite/client"], + "target": "ES2022", + "module": "ES2022", + "moduleResolution": "bundler", + "jsx": "react-jsx", + "rootDirs": [".", "./.react-router/types"], + "baseUrl": ".", + "paths": { + "~/*": ["./app/*"] + }, + "esModuleInterop": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true + } +} diff --git a/apps/test-react-router/vite.config.ts b/apps/test-react-router/vite.config.ts new file mode 100644 index 000000000..b91e8a413 --- /dev/null +++ b/apps/test-react-router/vite.config.ts @@ -0,0 +1,8 @@ +import { reactRouter } from '@react-router/dev/vite'; +import { defineConfig } from 'vite'; +import devtoolsJson from 'vite-plugin-devtools-json'; +import tsconfigPaths from 'vite-tsconfig-paths'; + +export default defineConfig({ + plugins: [reactRouter(), tsconfigPaths(), devtoolsJson()], +}); diff --git a/apps/test-vite-react-17/.gitignore b/apps/test-vite-react-17/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/apps/test-vite-react-17/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/apps/test-vite-react-17/README.md b/apps/test-vite-react-17/README.md new file mode 100644 index 000000000..d2e77611f --- /dev/null +++ b/apps/test-vite-react-17/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/apps/test-vite-react-17/eslint.config.js b/apps/test-vite-react-17/eslint.config.js new file mode 100644 index 000000000..90a46a235 --- /dev/null +++ b/apps/test-vite-react-17/eslint.config.js @@ -0,0 +1,5 @@ +// @ts-check +import { defineConfig, globalIgnores } from 'eslint/config'; +import { configs } from '@repo/eslint-config/vite'; + +export default defineConfig([globalIgnores(['dist']), ...configs]); diff --git a/apps/test-vite-react-17/index.html b/apps/test-vite-react-17/index.html new file mode 100644 index 000000000..f621db35a --- /dev/null +++ b/apps/test-vite-react-17/index.html @@ -0,0 +1,13 @@ + + + + + + + test-vite-react-17 + + +

+ + + diff --git a/apps/test-vite-react-17/package.json b/apps/test-vite-react-17/package.json new file mode 100644 index 000000000..e61a8b7d5 --- /dev/null +++ b/apps/test-vite-react-17/package.json @@ -0,0 +1,29 @@ +{ + "name": "test-vite-react-17", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite -p 3006", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@repo/test-data": "workspace:*", + "@repo/test-styles": "workspace:*", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@types/node": "^22", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "@vitejs/plugin-react": "^5.0.4", + "eslint": "^9.38.0", + "eslint-plugin-react-refresh": "^0.4.22", + "typescript": "~5.9.3", + "vite": "^7.1.12" + } +} diff --git a/apps/test-vite-react-17/public/vite.svg b/apps/test-vite-react-17/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/apps/test-vite-react-17/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/test-vite-react-17/src/app.tsx b/apps/test-vite-react-17/src/app.tsx new file mode 100644 index 000000000..388ce36dd --- /dev/null +++ b/apps/test-vite-react-17/src/app.tsx @@ -0,0 +1,3 @@ +export function App() { + return
Home
; +} diff --git a/apps/test-vite-react-17/src/assets/react.svg b/apps/test-vite-react-17/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/apps/test-vite-react-17/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/test-vite-react-17/src/globals.css b/apps/test-vite-react-17/src/globals.css new file mode 100644 index 000000000..946a5ed8e --- /dev/null +++ b/apps/test-vite-react-17/src/globals.css @@ -0,0 +1,13 @@ +@import '@repo/test-styles/resets.css'; +@import '@repo/test-styles/colors.css'; + +html, +body { + min-height: 100vh; + min-height: 100svh; + height: 100%; + color-scheme: light dark; + @media (prefers-color-scheme: dark) { + color-scheme: dark; + } +} diff --git a/apps/test-vite-react-17/src/main.tsx b/apps/test-vite-react-17/src/main.tsx new file mode 100644 index 000000000..071905a46 --- /dev/null +++ b/apps/test-vite-react-17/src/main.tsx @@ -0,0 +1,14 @@ +import * as React from 'react'; +import * as ReactDOM from 'react-dom'; +import { App } from './app.tsx'; +import './globals.css'; + +const rootElement = document.getElementById('root')!; +// @ts-expect-error +// eslint-disable-next-line react/no-deprecated +ReactDOM.render( + + + , + rootElement, +); diff --git a/apps/test-vite-react-17/tsconfig.app.json b/apps/test-vite-react-17/tsconfig.app.json new file mode 100644 index 000000000..a9b5a59ca --- /dev/null +++ b/apps/test-vite-react-17/tsconfig.app.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/apps/test-vite-react-17/tsconfig.json b/apps/test-vite-react-17/tsconfig.json new file mode 100644 index 000000000..1ffef600d --- /dev/null +++ b/apps/test-vite-react-17/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/apps/test-vite-react-17/tsconfig.node.json b/apps/test-vite-react-17/tsconfig.node.json new file mode 100644 index 000000000..8a67f62f4 --- /dev/null +++ b/apps/test-vite-react-17/tsconfig.node.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/apps/test-vite-react-17/vite.config.ts b/apps/test-vite-react-17/vite.config.ts new file mode 100644 index 000000000..8b0f57b91 --- /dev/null +++ b/apps/test-vite-react-17/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) diff --git a/apps/test-vite-react-18/.gitignore b/apps/test-vite-react-18/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/apps/test-vite-react-18/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/apps/test-vite-react-18/README.md b/apps/test-vite-react-18/README.md new file mode 100644 index 000000000..d2e77611f --- /dev/null +++ b/apps/test-vite-react-18/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/apps/test-vite-react-18/eslint.config.js b/apps/test-vite-react-18/eslint.config.js new file mode 100644 index 000000000..90a46a235 --- /dev/null +++ b/apps/test-vite-react-18/eslint.config.js @@ -0,0 +1,5 @@ +// @ts-check +import { defineConfig, globalIgnores } from 'eslint/config'; +import { configs } from '@repo/eslint-config/vite'; + +export default defineConfig([globalIgnores(['dist']), ...configs]); diff --git a/apps/test-vite-react-18/index.html b/apps/test-vite-react-18/index.html new file mode 100644 index 000000000..7bc904ec6 --- /dev/null +++ b/apps/test-vite-react-18/index.html @@ -0,0 +1,13 @@ + + + + + + + test-vite-react-18 + + +
+ + + diff --git a/apps/test-vite-react-18/package.json b/apps/test-vite-react-18/package.json new file mode 100644 index 000000000..98cc8f9de --- /dev/null +++ b/apps/test-vite-react-18/package.json @@ -0,0 +1,29 @@ +{ + "name": "test-vite-react-18", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite -p 3007", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@repo/test-data": "workspace:*", + "@repo/test-styles": "workspace:*", + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@types/node": "^22", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "@vitejs/plugin-react": "^5.0.4", + "eslint": "^9.38.0", + "eslint-plugin-react-refresh": "^0.4.22", + "typescript": "~5.9.3", + "vite": "^7.1.12" + } +} diff --git a/apps/test-vite-react-18/public/vite.svg b/apps/test-vite-react-18/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/apps/test-vite-react-18/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/test-vite-react-18/src/app.tsx b/apps/test-vite-react-18/src/app.tsx new file mode 100644 index 000000000..388ce36dd --- /dev/null +++ b/apps/test-vite-react-18/src/app.tsx @@ -0,0 +1,3 @@ +export function App() { + return
Home
; +} diff --git a/apps/test-vite-react-18/src/assets/react.svg b/apps/test-vite-react-18/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/apps/test-vite-react-18/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/test-vite-react-18/src/globals.css b/apps/test-vite-react-18/src/globals.css new file mode 100644 index 000000000..946a5ed8e --- /dev/null +++ b/apps/test-vite-react-18/src/globals.css @@ -0,0 +1,13 @@ +@import '@repo/test-styles/resets.css'; +@import '@repo/test-styles/colors.css'; + +html, +body { + min-height: 100vh; + min-height: 100svh; + height: 100%; + color-scheme: light dark; + @media (prefers-color-scheme: dark) { + color-scheme: dark; + } +} diff --git a/apps/test-vite-react-18/src/main.tsx b/apps/test-vite-react-18/src/main.tsx new file mode 100644 index 000000000..df6f3a83e --- /dev/null +++ b/apps/test-vite-react-18/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import { App } from './app.tsx'; +import './globals.css'; + +createRoot(document.getElementById('root')!).render( + + + , +); diff --git a/apps/test-vite-react-18/tsconfig.app.json b/apps/test-vite-react-18/tsconfig.app.json new file mode 100644 index 000000000..a9b5a59ca --- /dev/null +++ b/apps/test-vite-react-18/tsconfig.app.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/apps/test-vite-react-18/tsconfig.json b/apps/test-vite-react-18/tsconfig.json new file mode 100644 index 000000000..1ffef600d --- /dev/null +++ b/apps/test-vite-react-18/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/apps/test-vite-react-18/tsconfig.node.json b/apps/test-vite-react-18/tsconfig.node.json new file mode 100644 index 000000000..8a67f62f4 --- /dev/null +++ b/apps/test-vite-react-18/tsconfig.node.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/apps/test-vite-react-18/vite.config.ts b/apps/test-vite-react-18/vite.config.ts new file mode 100644 index 000000000..8b0f57b91 --- /dev/null +++ b/apps/test-vite-react-18/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) diff --git a/apps/test-vite-react-19/.gitignore b/apps/test-vite-react-19/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/apps/test-vite-react-19/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/apps/test-vite-react-19/README.md b/apps/test-vite-react-19/README.md new file mode 100644 index 000000000..d2e77611f --- /dev/null +++ b/apps/test-vite-react-19/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/apps/test-vite-react-19/eslint.config.js b/apps/test-vite-react-19/eslint.config.js new file mode 100644 index 000000000..90a46a235 --- /dev/null +++ b/apps/test-vite-react-19/eslint.config.js @@ -0,0 +1,5 @@ +// @ts-check +import { defineConfig, globalIgnores } from 'eslint/config'; +import { configs } from '@repo/eslint-config/vite'; + +export default defineConfig([globalIgnores(['dist']), ...configs]); diff --git a/apps/test-vite-react-19/index.html b/apps/test-vite-react-19/index.html new file mode 100644 index 000000000..c2c866da3 --- /dev/null +++ b/apps/test-vite-react-19/index.html @@ -0,0 +1,13 @@ + + + + + + + test-vite-react-19 + + +
+ + + diff --git a/apps/test-vite-react-19/package.json b/apps/test-vite-react-19/package.json new file mode 100644 index 000000000..f2860c72a --- /dev/null +++ b/apps/test-vite-react-19/package.json @@ -0,0 +1,29 @@ +{ + "name": "test-vite-react-19", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite -p 3008", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@repo/test-data": "workspace:*", + "@repo/test-styles": "workspace:*", + "react": "^19.1.1", + "react-dom": "^19.1.1" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@types/node": "^22", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "@vitejs/plugin-react": "^5.0.4", + "eslint": "^9.38.0", + "eslint-plugin-react-refresh": "^0.4.22", + "typescript": "~5.9.3", + "vite": "^7.1.12" + } +} diff --git a/apps/test-vite-react-19/public/vite.svg b/apps/test-vite-react-19/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/apps/test-vite-react-19/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/test-vite-react-19/src/app.tsx b/apps/test-vite-react-19/src/app.tsx new file mode 100644 index 000000000..388ce36dd --- /dev/null +++ b/apps/test-vite-react-19/src/app.tsx @@ -0,0 +1,3 @@ +export function App() { + return
Home
; +} diff --git a/apps/test-vite-react-19/src/assets/react.svg b/apps/test-vite-react-19/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/apps/test-vite-react-19/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/test-vite-react-19/src/globals.css b/apps/test-vite-react-19/src/globals.css new file mode 100644 index 000000000..946a5ed8e --- /dev/null +++ b/apps/test-vite-react-19/src/globals.css @@ -0,0 +1,13 @@ +@import '@repo/test-styles/resets.css'; +@import '@repo/test-styles/colors.css'; + +html, +body { + min-height: 100vh; + min-height: 100svh; + height: 100%; + color-scheme: light dark; + @media (prefers-color-scheme: dark) { + color-scheme: dark; + } +} diff --git a/apps/test-vite-react-19/src/main.tsx b/apps/test-vite-react-19/src/main.tsx new file mode 100644 index 000000000..df6f3a83e --- /dev/null +++ b/apps/test-vite-react-19/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import { App } from './app.tsx'; +import './globals.css'; + +createRoot(document.getElementById('root')!).render( + + + , +); diff --git a/apps/test-vite-react-19/tsconfig.app.json b/apps/test-vite-react-19/tsconfig.app.json new file mode 100644 index 000000000..a9b5a59ca --- /dev/null +++ b/apps/test-vite-react-19/tsconfig.app.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/apps/test-vite-react-19/tsconfig.json b/apps/test-vite-react-19/tsconfig.json new file mode 100644 index 000000000..1ffef600d --- /dev/null +++ b/apps/test-vite-react-19/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/apps/test-vite-react-19/tsconfig.node.json b/apps/test-vite-react-19/tsconfig.node.json new file mode 100644 index 000000000..8a67f62f4 --- /dev/null +++ b/apps/test-vite-react-19/tsconfig.node.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/apps/test-vite-react-19/vite.config.ts b/apps/test-vite-react-19/vite.config.ts new file mode 100644 index 000000000..8b0f57b91 --- /dev/null +++ b/apps/test-vite-react-19/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) diff --git a/internal/test-styles/colors.css b/internal/test-styles/colors.css new file mode 100644 index 000000000..ceba5b0ec --- /dev/null +++ b/internal/test-styles/colors.css @@ -0,0 +1,123 @@ +@import '@radix-ui/colors/gray.css'; +@import '@radix-ui/colors/gray-alpha.css'; +@import '@radix-ui/colors/gray-dark.css'; +@import '@radix-ui/colors/gray-dark-alpha.css'; +@import '@radix-ui/colors/mauve.css'; +@import '@radix-ui/colors/mauve-alpha.css'; +@import '@radix-ui/colors/mauve-dark.css'; +@import '@radix-ui/colors/mauve-dark-alpha.css'; +@import '@radix-ui/colors/slate.css'; +@import '@radix-ui/colors/slate-alpha.css'; +@import '@radix-ui/colors/slate-dark.css'; +@import '@radix-ui/colors/slate-dark-alpha.css'; +@import '@radix-ui/colors/sage.css'; +@import '@radix-ui/colors/sage-alpha.css'; +@import '@radix-ui/colors/sage-dark.css'; +@import '@radix-ui/colors/sage-dark-alpha.css'; +@import '@radix-ui/colors/olive.css'; +@import '@radix-ui/colors/olive-alpha.css'; +@import '@radix-ui/colors/olive-dark.css'; +@import '@radix-ui/colors/olive-dark-alpha.css'; +@import '@radix-ui/colors/sand.css'; +@import '@radix-ui/colors/sand-alpha.css'; +@import '@radix-ui/colors/sand-dark.css'; +@import '@radix-ui/colors/sand-dark-alpha.css'; +@import '@radix-ui/colors/gold.css'; +@import '@radix-ui/colors/gold-alpha.css'; +@import '@radix-ui/colors/gold-dark.css'; +@import '@radix-ui/colors/gold-dark-alpha.css'; +@import '@radix-ui/colors/bronze.css'; +@import '@radix-ui/colors/bronze-alpha.css'; +@import '@radix-ui/colors/bronze-dark.css'; +@import '@radix-ui/colors/bronze-dark-alpha.css'; +@import '@radix-ui/colors/brown.css'; +@import '@radix-ui/colors/brown-alpha.css'; +@import '@radix-ui/colors/brown-dark.css'; +@import '@radix-ui/colors/brown-dark-alpha.css'; +@import '@radix-ui/colors/yellow.css'; +@import '@radix-ui/colors/yellow-alpha.css'; +@import '@radix-ui/colors/yellow-dark.css'; +@import '@radix-ui/colors/yellow-dark-alpha.css'; +@import '@radix-ui/colors/amber.css'; +@import '@radix-ui/colors/amber-alpha.css'; +@import '@radix-ui/colors/amber-dark.css'; +@import '@radix-ui/colors/amber-dark-alpha.css'; +@import '@radix-ui/colors/orange.css'; +@import '@radix-ui/colors/orange-alpha.css'; +@import '@radix-ui/colors/orange-dark.css'; +@import '@radix-ui/colors/orange-dark-alpha.css'; +@import '@radix-ui/colors/tomato.css'; +@import '@radix-ui/colors/tomato-alpha.css'; +@import '@radix-ui/colors/tomato-dark.css'; +@import '@radix-ui/colors/tomato-dark-alpha.css'; +@import '@radix-ui/colors/red.css'; +@import '@radix-ui/colors/red-alpha.css'; +@import '@radix-ui/colors/red-dark.css'; +@import '@radix-ui/colors/red-dark-alpha.css'; +@import '@radix-ui/colors/ruby.css'; +@import '@radix-ui/colors/ruby-alpha.css'; +@import '@radix-ui/colors/ruby-dark.css'; +@import '@radix-ui/colors/ruby-dark-alpha.css'; +@import '@radix-ui/colors/crimson.css'; +@import '@radix-ui/colors/crimson-alpha.css'; +@import '@radix-ui/colors/crimson-dark.css'; +@import '@radix-ui/colors/crimson-dark-alpha.css'; +@import '@radix-ui/colors/pink.css'; +@import '@radix-ui/colors/pink-alpha.css'; +@import '@radix-ui/colors/pink-dark.css'; +@import '@radix-ui/colors/pink-dark-alpha.css'; +@import '@radix-ui/colors/plum.css'; +@import '@radix-ui/colors/plum-alpha.css'; +@import '@radix-ui/colors/plum-dark.css'; +@import '@radix-ui/colors/plum-dark-alpha.css'; +@import '@radix-ui/colors/purple.css'; +@import '@radix-ui/colors/purple-alpha.css'; +@import '@radix-ui/colors/purple-dark.css'; +@import '@radix-ui/colors/purple-dark-alpha.css'; +@import '@radix-ui/colors/violet.css'; +@import '@radix-ui/colors/violet-alpha.css'; +@import '@radix-ui/colors/violet-dark.css'; +@import '@radix-ui/colors/violet-dark-alpha.css'; +@import '@radix-ui/colors/iris.css'; +@import '@radix-ui/colors/iris-alpha.css'; +@import '@radix-ui/colors/iris-dark.css'; +@import '@radix-ui/colors/iris-dark-alpha.css'; +@import '@radix-ui/colors/indigo.css'; +@import '@radix-ui/colors/indigo-alpha.css'; +@import '@radix-ui/colors/indigo-dark.css'; +@import '@radix-ui/colors/indigo-dark-alpha.css'; +@import '@radix-ui/colors/blue.css'; +@import '@radix-ui/colors/blue-alpha.css'; +@import '@radix-ui/colors/blue-dark.css'; +@import '@radix-ui/colors/blue-dark-alpha.css'; +@import '@radix-ui/colors/cyan.css'; +@import '@radix-ui/colors/cyan-alpha.css'; +@import '@radix-ui/colors/cyan-dark.css'; +@import '@radix-ui/colors/cyan-dark-alpha.css'; +@import '@radix-ui/colors/teal.css'; +@import '@radix-ui/colors/teal-alpha.css'; +@import '@radix-ui/colors/teal-dark.css'; +@import '@radix-ui/colors/teal-dark-alpha.css'; +@import '@radix-ui/colors/jade.css'; +@import '@radix-ui/colors/jade-alpha.css'; +@import '@radix-ui/colors/jade-dark.css'; +@import '@radix-ui/colors/jade-dark-alpha.css'; +@import '@radix-ui/colors/green.css'; +@import '@radix-ui/colors/green-alpha.css'; +@import '@radix-ui/colors/green-dark.css'; +@import '@radix-ui/colors/green-dark-alpha.css'; +@import '@radix-ui/colors/grass.css'; +@import '@radix-ui/colors/grass-alpha.css'; +@import '@radix-ui/colors/grass-dark.css'; +@import '@radix-ui/colors/grass-dark-alpha.css'; +@import '@radix-ui/colors/lime.css'; +@import '@radix-ui/colors/lime-alpha.css'; +@import '@radix-ui/colors/lime-dark.css'; +@import '@radix-ui/colors/lime-dark-alpha.css'; +@import '@radix-ui/colors/mint.css'; +@import '@radix-ui/colors/mint-alpha.css'; +@import '@radix-ui/colors/mint-dark.css'; +@import '@radix-ui/colors/mint-dark-alpha.css'; +@import '@radix-ui/colors/sky-alpha.css'; +@import '@radix-ui/colors/sky-dark.css'; +@import '@radix-ui/colors/sky-dark-alpha.css'; diff --git a/internal/test-styles/package.json b/internal/test-styles/package.json new file mode 100644 index 000000000..cb266cdc9 --- /dev/null +++ b/internal/test-styles/package.json @@ -0,0 +1,12 @@ +{ + "name": "@repo/test-styles", + "version": "0.0.0", + "private": true, + "license": "MIT", + "type": "module", + "dependencies": { + "@radix-ui/colors": "^3.0.0" + }, + "devDependencies": {}, + "scripts": {} +} diff --git a/internal/test-styles/resets.css b/internal/test-styles/resets.css new file mode 100644 index 000000000..f64145ca6 --- /dev/null +++ b/internal/test-styles/resets.css @@ -0,0 +1,202 @@ +* { + box-sizing: border-box; + margin: 0; + padding: 0; + border: 0 solid hsl(0deg 0% 40%); +} + +*::before, +*::after { + box-sizing: inherit; +} + +:host, +html { + font-size: 16px; + line-height: 1.5; + font-family: + var(--font-family-root, ui-sans-serif), + system-ui, + sans-serif, + Apple Color Emoji, + Segoe UI Emoji, + Segoe UI Symbol, + Noto Color Emoji; + font-feature-settings: normal; + font-synthesis: none; + font-variation-settings: normal; + tab-size: 4; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: transparent; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + height: 100%; +} + +body { + line-height: inherit; + height: 100%; +} + +button, +input:where([type='button']), +input:where([type='reset']), +input:where([type='submit']) { + appearance: button; + background-color: initial; + background-image: none; +} + +button, +input, +optgroup, +select, +textarea { + font: inherit; + font-feature-settings: inherit; + line-height: inherit; + text-align: inherit; + text-transform: none; + letter-spacing: inherit; + color: inherit; + border: 0; + background: 0; + box-shadow: none; +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +[type='search'] { + appearance: textfield; + outline-offset: -2px; +} + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +progress { + vertical-align: initial; +} + +a { + color: inherit; + text-decoration: inherit; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font: inherit; +} + +hr { + height: 0; + color: inherit; + border-top-width: 1px; +} + +code, +kbd, +pre, +samp { + font-family: var(--font-family-mono, ui-monospace), monospace; + font-feature-settings: normal; + font-variation-settings: normal; + font-size: 1em; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: initial; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +audio, +canvas, +embed, +iframe, +img, +object, +svg, +video { + display: block; + vertical-align: middle; +} + +img, +video { + max-width: 100%; + height: auto; +} + +table { + text-indent: 0; + border-color: inherit; + border-collapse: collapse; +} + +menu, +ol, +ul { + list-style: none; +} + +summary { + display: list-item; +} + +:-moz-focusring { + outline: auto; +} + +:-moz-ui-invalid { + box-shadow: none; +} + +[hidden] { + display: none; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} diff --git a/package.json b/package.json index ac2193f71..63f9442f1 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,12 @@ "cypress:dev": "cypress open", "dev": "pnpm run storybook", "dev:ssr": "pnpm --filter=@repo/ssr-testing dev", + "dev:react-router": "pnpm --filter=test-react-router dev", + "dev:react-router-rsc": "pnpm --filter=test-react-router-rsc dev", + "dev:vite-react-17": "pnpm --filter=test-vite-react-17 dev", + "dev:vite-react-18": "pnpm --filter=test-vite-react-18 dev", + "dev:vite-react-19": "pnpm --filter=test-vite-react-19 dev", + "dev:next": "pnpm --filter=test-next dev", "build-storybook": "pnpm --filter=@repo/storybook run build", "build": "pnpm -r --parallel --filter \"./packages/**/*\" run build", "clean": "pnpm -r run clean", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ef3d64c0..fd5c2c83c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -223,6 +223,300 @@ importers: specifier: ^5.9.3 version: 5.9.3 + apps/test-next: + dependencies: + '@repo/test-data': + specifier: workspace:* + version: link:../../internal/test-data + '@repo/test-styles': + specifier: workspace:* + version: link:../../internal/test-styles + next: + specifier: 16.0.1 + version: 16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: + specifier: 19.2.0 + version: 19.2.0 + react-dom: + specifier: 19.2.0 + version: 19.2.0(react@19.2.0) + devDependencies: + '@types/node': + specifier: ^22 + version: 22.14.0 + '@types/react': + specifier: ^19.2.2 + version: 19.2.2 + '@types/react-dom': + specifier: ^19.2.2 + version: 19.2.2(@types/react@19.2.2) + eslint: + specifier: ^9.38.0 + version: 9.38.0 + eslint-config-next: + specifier: 16.0.1 + version: 16.0.1(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0)(typescript@5.9.3) + typescript: + specifier: ^5.9.3 + version: 5.9.3 + + apps/test-react-router: + dependencies: + '@react-router/node': + specifier: ^7.9.5 + version: 7.9.5(react-router@7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) + '@react-router/serve': + specifier: ^7.9.5 + version: 7.9.5(react-router@7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) + '@repo/test-data': + specifier: workspace:* + version: link:../../internal/test-data + '@repo/test-styles': + specifier: workspace:* + version: link:../../internal/test-styles + isbot: + specifier: ^5.1.32 + version: 5.1.32 + react: + specifier: ^19.1.1 + version: 19.2.0 + react-dom: + specifier: ^19.1.1 + version: 19.2.0(react@19.2.0) + react-router: + specifier: ^7.9.5 + version: 7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + devDependencies: + '@react-router/dev': + specifier: ^7.9.5 + version: 7.9.5(@react-router/serve@7.9.5(react-router@7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@22.14.0)(@vitejs/plugin-rsc@0.4.31(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0)))(react-router@7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.39.0)(typescript@5.9.3)(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0)) + '@repo/eslint-config': + specifier: workspace:* + version: link:../../internal/eslint-config + '@types/node': + specifier: ^22 + version: 22.14.0 + '@types/react': + specifier: ^19.2.2 + version: 19.2.2 + '@types/react-dom': + specifier: ^19.2.2 + version: 19.2.2(@types/react@19.2.2) + eslint: + specifier: ^9.38.0 + version: 9.38.0 + eslint-plugin-react-refresh: + specifier: ^0.4.22 + version: 0.4.24(eslint@9.38.0) + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vite: + specifier: ^7.1.12 + version: 7.1.12(@types/node@22.14.0)(terser@5.39.0) + vite-plugin-devtools-json: + specifier: ^1.0.0 + version: 1.0.0(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0)) + vite-tsconfig-paths: + specifier: ^5.1.4 + version: 5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0)) + + apps/test-react-router-rsc: + dependencies: + '@react-router/serve': + specifier: 7.9.2 + version: 7.9.2(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) + '@remix-run/node-fetch-server': + specifier: 0.9.0 + version: 0.9.0 + '@repo/test-data': + specifier: workspace:* + version: link:../../internal/test-data + '@repo/test-styles': + specifier: workspace:* + version: link:../../internal/test-styles + isbot: + specifier: ^5.1.32 + version: 5.1.32 + react: + specifier: 19.2.0 + version: 19.2.0 + react-dom: + specifier: 19.2.0 + version: 19.2.0(react@19.2.0) + react-router: + specifier: 7.9.2 + version: 7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + devDependencies: + '@react-router/dev': + specifier: 7.9.2 + version: 7.9.2(@react-router/serve@7.9.2(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@22.14.0)(@vitejs/plugin-rsc@0.4.31(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)))(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.39.0)(typescript@5.9.3)(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)) + '@react-router/fs-routes': + specifier: 7.9.2 + version: 7.9.2(@react-router/dev@7.9.2(@react-router/serve@7.9.2(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@22.14.0)(@vitejs/plugin-rsc@0.4.31(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)))(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.39.0)(typescript@5.9.3)(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)))(typescript@5.9.3) + '@repo/eslint-config': + specifier: workspace:* + version: link:../../internal/eslint-config + '@types/node': + specifier: ^22 + version: 22.14.0 + '@types/react': + specifier: ^19.2.2 + version: 19.2.2 + '@types/react-dom': + specifier: ^19.2.2 + version: 19.2.2(@types/react@19.2.2) + '@vitejs/plugin-rsc': + specifier: 0.4.31 + version: 0.4.31(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)) + eslint: + specifier: ^9.38.0 + version: 9.38.0 + eslint-plugin-react-refresh: + specifier: ^0.4.22 + version: 0.4.24(eslint@9.38.0) + typescript: + specifier: 5.9.3 + version: 5.9.3 + vite: + specifier: 7.1.6 + version: 7.1.6(@types/node@22.14.0)(terser@5.39.0) + vite-plugin-devtools-json: + specifier: ^1.0.0 + version: 1.0.0(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)) + vite-tsconfig-paths: + specifier: 5.1.4 + version: 5.1.4(typescript@5.9.3)(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)) + + apps/test-vite-react-17: + dependencies: + '@repo/test-data': + specifier: workspace:* + version: link:../../internal/test-data + '@repo/test-styles': + specifier: workspace:* + version: link:../../internal/test-styles + react: + specifier: ^17.0.2 + version: 17.0.2 + react-dom: + specifier: ^17.0.2 + version: 17.0.2(react@17.0.2) + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../../internal/eslint-config + '@types/node': + specifier: ^22 + version: 22.14.0 + '@types/react': + specifier: ^19.2.2 + version: 19.2.2 + '@types/react-dom': + specifier: ^19.2.2 + version: 19.2.2(@types/react@19.2.2) + '@vitejs/plugin-react': + specifier: ^5.0.4 + version: 5.1.0(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0)) + eslint: + specifier: ^9.38.0 + version: 9.38.0 + eslint-plugin-react-refresh: + specifier: ^0.4.22 + version: 0.4.24(eslint@9.38.0) + typescript: + specifier: ~5.9.3 + version: 5.9.3 + vite: + specifier: ^7.1.12 + version: 7.1.12(@types/node@22.14.0)(terser@5.39.0) + + apps/test-vite-react-18: + dependencies: + '@repo/test-data': + specifier: workspace:* + version: link:../../internal/test-data + '@repo/test-styles': + specifier: workspace:* + version: link:../../internal/test-styles + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../../internal/eslint-config + '@types/node': + specifier: ^22 + version: 22.14.0 + '@types/react': + specifier: ^19.2.2 + version: 19.2.2 + '@types/react-dom': + specifier: ^19.2.2 + version: 19.2.2(@types/react@19.2.2) + '@vitejs/plugin-react': + specifier: ^5.0.4 + version: 5.1.0(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0)) + eslint: + specifier: ^9.38.0 + version: 9.38.0 + eslint-plugin-react-refresh: + specifier: ^0.4.22 + version: 0.4.24(eslint@9.38.0) + typescript: + specifier: ~5.9.3 + version: 5.9.3 + vite: + specifier: ^7.1.12 + version: 7.1.12(@types/node@22.14.0)(terser@5.39.0) + + apps/test-vite-react-19: + dependencies: + '@repo/test-data': + specifier: workspace:* + version: link:../../internal/test-data + '@repo/test-styles': + specifier: workspace:* + version: link:../../internal/test-styles + react: + specifier: ^19.1.1 + version: 19.2.0 + react-dom: + specifier: ^19.1.1 + version: 19.2.0(react@19.2.0) + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../../internal/eslint-config + '@types/node': + specifier: ^22 + version: 22.14.0 + '@types/react': + specifier: ^19.2.2 + version: 19.2.2 + '@types/react-dom': + specifier: ^19.2.2 + version: 19.2.2(@types/react@19.2.2) + '@vitejs/plugin-react': + specifier: ^5.0.4 + version: 5.1.0(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0)) + eslint: + specifier: ^9.38.0 + version: 9.38.0 + eslint-plugin-react-refresh: + specifier: ^0.4.22 + version: 0.4.24(eslint@9.38.0) + typescript: + specifier: ~5.9.3 + version: 5.9.3 + vite: + specifier: ^7.1.12 + version: 7.1.12(@types/node@22.14.0)(terser@5.39.0) + internal/builder: dependencies: esbuild: @@ -273,6 +567,12 @@ importers: specifier: ^5.9.3 version: 5.9.3 + internal/test-styles: + dependencies: + '@radix-ui/colors': + specifier: ^3.0.0 + version: 3.0.0 + internal/typescript-config: {} packages/core/number: @@ -3327,14 +3627,28 @@ packages: resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.27.2': resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.28.5': + resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-globals@7.28.0': resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.27.1': resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} @@ -3345,6 +3659,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -3366,6 +3698,48 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.27.1': + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.27.1': + resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.28.5': + resolution: {integrity: sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-typescript@7.28.5': + resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.27.0': resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} engines: {node: '>=6.9.0'} @@ -3489,9 +3863,18 @@ packages: '@cypress/xvfb@1.2.4': resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} + '@emnapi/core@1.7.0': + resolution: {integrity: sha512-pJdKGq/1iquWYtv1RRSljZklxHCOCAJFJrImO5ZLKPJVJlVUcs8yFwNQlqS0Lo8xT1VAXXTCZocF9n26FWEKsw==} + '@emnapi/runtime@1.4.0': resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==} + '@emnapi/runtime@1.7.0': + resolution: {integrity: sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==} + + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@esbuild/aix-ppc64@0.25.11': resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} engines: {node: '>=18'} @@ -3756,45 +4139,91 @@ packages: resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} engines: {node: '>=18.18'} + '@img/colour@1.0.0': + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + engines: {node: '>=18'} + '@img/sharp-darwin-arm64@0.34.1': resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] + '@img/sharp-darwin-arm64@0.34.4': + resolution: {integrity: sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + '@img/sharp-darwin-x64@0.34.1': resolution: {integrity: sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] + '@img/sharp-darwin-x64@0.34.4': + resolution: {integrity: sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + '@img/sharp-libvips-darwin-arm64@1.1.0': resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} cpu: [arm64] os: [darwin] + '@img/sharp-libvips-darwin-arm64@1.2.3': + resolution: {integrity: sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==} + cpu: [arm64] + os: [darwin] + '@img/sharp-libvips-darwin-x64@1.1.0': resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} cpu: [x64] os: [darwin] + '@img/sharp-libvips-darwin-x64@1.2.3': + resolution: {integrity: sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==} + cpu: [x64] + os: [darwin] + '@img/sharp-libvips-linux-arm64@1.1.0': resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} cpu: [arm64] os: [linux] + '@img/sharp-libvips-linux-arm64@1.2.3': + resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==} + cpu: [arm64] + os: [linux] + '@img/sharp-libvips-linux-arm@1.1.0': resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} cpu: [arm] os: [linux] + '@img/sharp-libvips-linux-arm@1.2.3': + resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==} + cpu: [arm] + os: [linux] + '@img/sharp-libvips-linux-ppc64@1.1.0': resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} cpu: [ppc64] os: [linux] - '@img/sharp-libvips-linux-s390x@1.1.0': - resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} + '@img/sharp-libvips-linux-ppc64@1.2.3': + resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.1.0': + resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.3': + resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==} cpu: [s390x] os: [linux] @@ -3803,69 +4232,149 @@ packages: cpu: [x64] os: [linux] + '@img/sharp-libvips-linux-x64@1.2.3': + resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==} + cpu: [x64] + os: [linux] + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} cpu: [arm64] os: [linux] + '@img/sharp-libvips-linuxmusl-arm64@1.2.3': + resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==} + cpu: [arm64] + os: [linux] + '@img/sharp-libvips-linuxmusl-x64@1.1.0': resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} cpu: [x64] os: [linux] + '@img/sharp-libvips-linuxmusl-x64@1.2.3': + resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==} + cpu: [x64] + os: [linux] + '@img/sharp-linux-arm64@0.34.1': resolution: {integrity: sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + '@img/sharp-linux-arm64@0.34.4': + resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + '@img/sharp-linux-arm@0.34.1': resolution: {integrity: sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + '@img/sharp-linux-arm@0.34.4': + resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.4': + resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + '@img/sharp-linux-s390x@0.34.1': resolution: {integrity: sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + '@img/sharp-linux-s390x@0.34.4': + resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + '@img/sharp-linux-x64@0.34.1': resolution: {integrity: sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + '@img/sharp-linux-x64@0.34.4': + resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + '@img/sharp-linuxmusl-arm64@0.34.1': resolution: {integrity: sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + '@img/sharp-linuxmusl-arm64@0.34.4': + resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + '@img/sharp-linuxmusl-x64@0.34.1': resolution: {integrity: sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + '@img/sharp-linuxmusl-x64@0.34.4': + resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + '@img/sharp-wasm32@0.34.1': resolution: {integrity: sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] + '@img/sharp-wasm32@0.34.4': + resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.4': + resolution: {integrity: sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + '@img/sharp-win32-ia32@0.34.1': resolution: {integrity: sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] + '@img/sharp-win32-ia32@0.34.4': + resolution: {integrity: sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + '@img/sharp-win32-x64@0.34.1': resolution: {integrity: sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] + '@img/sharp-win32-x64@0.34.4': + resolution: {integrity: sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@inquirer/external-editor@1.0.2': resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} engines: {node: '>=18'} @@ -3924,60 +4433,120 @@ packages: '@types/react': '>=16' react: '>=16' + '@mjackson/node-fetch-server@0.2.0': + resolution: {integrity: sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng==} + + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@neoconfetti/react@1.0.0': resolution: {integrity: sha512-klcSooChXXOzIm+SE5IISIAn3bYzYfPjbX7D7HoqZL84oAfgREeSg5vSIaSFH+DaGzzvImTyWe1OyrJ67vik4A==} '@next/env@15.3.1': resolution: {integrity: sha512-cwK27QdzrMblHSn9DZRV+DQscHXRuJv6MydlJRpFSqJWZrTYMLzKDeyueJNN9MGd8NNiUKzDQADAf+dMLXX7YQ==} + '@next/env@16.0.1': + resolution: {integrity: sha512-LFvlK0TG2L3fEOX77OC35KowL8D7DlFF45C0OvKMC4hy8c/md1RC4UMNDlUGJqfCoCS2VWrZ4dSE6OjaX5+8mw==} + + '@next/eslint-plugin-next@16.0.1': + resolution: {integrity: sha512-g4Cqmv/gyFEXNeVB2HkqDlYKfy+YrlM2k8AVIO/YQVEPfhVruH1VA99uT1zELLnPLIeOnx8IZ6Ddso0asfTIdw==} + '@next/swc-darwin-arm64@15.3.1': resolution: {integrity: sha512-hjDw4f4/nla+6wysBL07z52Gs55Gttp5Bsk5/8AncQLJoisvTBP0pRIBK/B16/KqQyH+uN4Ww8KkcAqJODYH3w==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] + '@next/swc-darwin-arm64@16.0.1': + resolution: {integrity: sha512-R0YxRp6/4W7yG1nKbfu41bp3d96a0EalonQXiMe+1H9GTHfKxGNCGFNWUho18avRBPsO8T3RmdWuzmfurlQPbg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + '@next/swc-darwin-x64@15.3.1': resolution: {integrity: sha512-q+aw+cJ2ooVYdCEqZVk+T4Ni10jF6Fo5DfpEV51OupMaV5XL6pf3GCzrk6kSSZBsMKZtVC1Zm/xaNBFpA6bJ2g==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] + '@next/swc-darwin-x64@16.0.1': + resolution: {integrity: sha512-kETZBocRux3xITiZtOtVoVvXyQLB7VBxN7L6EPqgI5paZiUlnsgYv4q8diTNYeHmF9EiehydOBo20lTttCbHAg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + '@next/swc-linux-arm64-gnu@15.3.1': resolution: {integrity: sha512-wBQ+jGUI3N0QZyWmmvRHjXjTWFy8o+zPFLSOyAyGFI94oJi+kK/LIZFJXeykvgXUk1NLDAEFDZw/NVINhdk9FQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@next/swc-linux-arm64-gnu@16.0.1': + resolution: {integrity: sha512-hWg3BtsxQuSKhfe0LunJoqxjO4NEpBmKkE+P2Sroos7yB//OOX3jD5ISP2wv8QdUwtRehMdwYz6VB50mY6hqAg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@next/swc-linux-arm64-musl@15.3.1': resolution: {integrity: sha512-IIxXEXRti/AulO9lWRHiCpUUR8AR/ZYLPALgiIg/9ENzMzLn3l0NSxVdva7R/VDcuSEBo0eGVCe3evSIHNz0Hg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@next/swc-linux-arm64-musl@16.0.1': + resolution: {integrity: sha512-UPnOvYg+fjAhP3b1iQStcYPWeBFRLrugEyK/lDKGk7kLNua8t5/DvDbAEFotfV1YfcOY6bru76qN9qnjLoyHCQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@next/swc-linux-x64-gnu@15.3.1': resolution: {integrity: sha512-bfI4AMhySJbyXQIKH5rmLJ5/BP7bPwuxauTvVEiJ/ADoddaA9fgyNNCcsbu9SlqfHDoZmfI6g2EjzLwbsVTr5A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@next/swc-linux-x64-gnu@16.0.1': + resolution: {integrity: sha512-Et81SdWkcRqAJziIgFtsFyJizHoWne4fzJkvjd6V4wEkWTB4MX6J0uByUb0peiJQ4WeAt6GGmMszE5KrXK6WKg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@next/swc-linux-x64-musl@15.3.1': resolution: {integrity: sha512-FeAbR7FYMWR+Z+M5iSGytVryKHiAsc0x3Nc3J+FD5NVbD5Mqz7fTSy8CYliXinn7T26nDMbpExRUI/4ekTvoiA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@next/swc-linux-x64-musl@16.0.1': + resolution: {integrity: sha512-qBbgYEBRrC1egcG03FZaVfVxrJm8wBl7vr8UFKplnxNRprctdP26xEv9nJ07Ggq4y1adwa0nz2mz83CELY7N6Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@next/swc-win32-arm64-msvc@15.3.1': resolution: {integrity: sha512-yP7FueWjphQEPpJQ2oKmshk/ppOt+0/bB8JC8svPUZNy0Pi3KbPx2Llkzv1p8CoQa+D2wknINlJpHf3vtChVBw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] + '@next/swc-win32-arm64-msvc@16.0.1': + resolution: {integrity: sha512-cPuBjYP6I699/RdbHJonb3BiRNEDm5CKEBuJ6SD8k3oLam2fDRMKAvmrli4QMDgT2ixyRJ0+DTkiODbIQhRkeQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + '@next/swc-win32-x64-msvc@15.3.1': resolution: {integrity: sha512-3PMvF2zRJAifcRNni9uMk/gulWfWS+qVI/pagd+4yLF5bcXPZPPH2xlYRYOsUjmCJOXSTAC2PjRzbhsRzR2fDQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] + '@next/swc-win32-x64-msvc@16.0.1': + resolution: {integrity: sha512-XeEUJsE4JYtfrXe/LaJn3z1pD19fK0Q6Er8Qoufi+HqvdO4LEPyCxLUt4rxA+4RfYo6S9gMlmzCMU2F+AatFqQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -3990,6 +4559,22 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + + '@npmcli/git@4.1.0': + resolution: {integrity: sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/package-json@4.0.1': + resolution: {integrity: sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/promise-spawn@6.0.2': + resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -4001,6 +4586,123 @@ packages: '@radix-ui/colors@3.0.0': resolution: {integrity: sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==} + '@react-router/dev@7.9.2': + resolution: {integrity: sha512-uGDupa6S64Yv9pAtEWchPKQTyl9Ab59ztqyPilNAFYnktMEweOHTBfN4tMUinnxAJQByB6hAoLQmHcy0u6RdTA==} + engines: {node: '>=20.0.0'} + hasBin: true + peerDependencies: + '@react-router/serve': ^7.9.2 + '@vitejs/plugin-rsc': '*' + react-router: ^7.9.2 + typescript: ^5.1.0 + vite: ^5.1.0 || ^6.0.0 || ^7.0.0 + wrangler: ^3.28.2 || ^4.0.0 + peerDependenciesMeta: + '@react-router/serve': + optional: true + '@vitejs/plugin-rsc': + optional: true + typescript: + optional: true + wrangler: + optional: true + + '@react-router/dev@7.9.5': + resolution: {integrity: sha512-MkWI4zN7VbQ0tteuJtX5hmDINNS26IW236a8lM8+o1344xdnT/ZsBvcUh8AkzDdCRYEz1blgzgirpj0Wc1gmXg==} + engines: {node: '>=20.0.0'} + hasBin: true + peerDependencies: + '@react-router/serve': ^7.9.5 + '@vitejs/plugin-rsc': '*' + react-router: ^7.9.5 + typescript: ^5.1.0 + vite: ^5.1.0 || ^6.0.0 || ^7.0.0 + wrangler: ^3.28.2 || ^4.0.0 + peerDependenciesMeta: + '@react-router/serve': + optional: true + '@vitejs/plugin-rsc': + optional: true + typescript: + optional: true + wrangler: + optional: true + + '@react-router/express@7.9.2': + resolution: {integrity: sha512-8mAkthF+0oNg9eK6qiWM/VGhhbDZrK6l3IEH7B1lB8yRJArHu6BJsafzFKR2jBE0NCws4bB0STP6zJZMjztfFw==} + engines: {node: '>=20.0.0'} + peerDependencies: + express: ^4.17.1 || ^5 + react-router: 7.9.2 + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + + '@react-router/express@7.9.5': + resolution: {integrity: sha512-Mg94Tw9JSaRuwkvIC6PaODRzsLs6mo70ppz5qdIK/G3iotSxsH08TDNdzot7CaXXevk/pIiD/+Tbn0H/asHsYA==} + engines: {node: '>=20.0.0'} + peerDependencies: + express: ^4.17.1 || ^5 + react-router: 7.9.5 + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + + '@react-router/fs-routes@7.9.2': + resolution: {integrity: sha512-HgweLCJRkNtyKEAz18vxGCF4n+46pmxbY/WjvnWmtm4Q9WwvbxZ5MBIQevjwoTWzjXfuTVNwT+t/o8nmCmTUSA==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@react-router/dev': ^7.9.2 + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + + '@react-router/node@7.9.2': + resolution: {integrity: sha512-mGqpEXVWs1XmwpJdbESE2fzvS3a43EdMCuiL2U3Nmm1IuGdSjc60gQK/IeKWjNGdgj1pZEyyQK17fYXPqjp5Uw==} + engines: {node: '>=20.0.0'} + peerDependencies: + react-router: 7.9.2 + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + + '@react-router/node@7.9.5': + resolution: {integrity: sha512-3mDd32mXh3gEkG0cLPnUaoLkY1pApsTPqn7O1j+P8aLf997uYz5lYDjt33vtMhaotlRM0x+5JziAKtz/76YBpQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + react-router: 7.9.5 + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + + '@react-router/serve@7.9.2': + resolution: {integrity: sha512-EknsRlsSVavDH3/rTiThxQWFINfQJ04ctswXigX0e2wTMLyIBqS6XfdznrmUIwdb7r7xHocNcLJcGErdaOha8w==} + engines: {node: '>=20.0.0'} + hasBin: true + peerDependencies: + react-router: 7.9.2 + + '@react-router/serve@7.9.5': + resolution: {integrity: sha512-sww8oDNqz8SgaXEQ3maqTuMlibCMpmWvLE0s5zyEyOQb1G99clYMcXceQ2HNU2jtXJkp+P5XI1CngpGpngyTnw==} + engines: {node: '>=20.0.0'} + hasBin: true + peerDependencies: + react-router: 7.9.5 + + '@remix-run/node-fetch-server@0.8.1': + resolution: {integrity: sha512-J1dev372wtJqmqn9U/qbpbZxbJSQrogNN2+Qv1lKlpATpe/WQ9aCZfl/xSb9d2Rgh1IyLSvNxZAXPZxruO6Xig==} + + '@remix-run/node-fetch-server@0.9.0': + resolution: {integrity: sha512-SoLMv7dbH+njWzXnOY6fI08dFMI5+/dQ+vY3n8RnnbdG7MdJEgiP28Xj/xWlnRnED/aB6SFw56Zop+LbmaaKqA==} + + '@rolldown/pluginutils@1.0.0-beta.43': + resolution: {integrity: sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==} + '@rollup/rollup-android-arm-eabi@4.52.5': resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} cpu: [arm] @@ -4111,6 +4813,9 @@ packages: cpu: [x64] os: [win32] + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -4323,6 +5028,9 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -4371,6 +5079,9 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/jsonfile@6.1.4': resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} @@ -4426,6 +5137,14 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/eslint-plugin@8.46.3': + resolution: {integrity: sha512-sbaQ27XBUopBkRiuY/P9sWGOWUW4rl8fDoHIUmLpZd8uldsTyB4/Zg6bWTegPoTLnKj9Hqgn3QD6cjPNB32Odw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.46.3 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser@8.29.1': resolution: {integrity: sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4433,10 +5152,33 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/parser@8.46.3': + resolution: {integrity: sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.46.3': + resolution: {integrity: sha512-Fz8yFXsp2wDFeUElO88S9n4w1I4CWDTXDqDr9gYvZgUpwXQqmZBr9+NTTql5R3J7+hrJZPdpiWaB9VNhAKYLuQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/scope-manager@8.29.1': resolution: {integrity: sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.46.3': + resolution: {integrity: sha512-FCi7Y1zgrmxp3DfWfr+3m9ansUUFoy8dkEdeQSgA9gbm8DaHYvZCdkFRQrtKiedFf3Ha6VmoqoAaP68+i+22kg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.46.3': + resolution: {integrity: sha512-GLupljMniHNIROP0zE7nCcybptolcH8QZfXOpCfhQDAdwJ/ZTlcaBOYebSOZotpti/3HrHSw7D3PZm75gYFsOA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.29.1': resolution: {integrity: sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4444,16 +5186,33 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/type-utils@8.46.3': + resolution: {integrity: sha512-ZPCADbr+qfz3aiTTYNNkCbUt+cjNwI/5McyANNrFBpVxPt7GqpEYz5ZfdwuFyGUnJ9FdDXbGODUu6iRCI6XRXw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/types@8.29.1': resolution: {integrity: sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.46.3': + resolution: {integrity: sha512-G7Ok9WN/ggW7e/tOf8TQYMaxgID3Iujn231hfi0Pc7ZheztIJVpO44ekY00b7akqc6nZcvregk0Jpah3kep6hA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.29.1': resolution: {integrity: sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/typescript-estree@8.46.3': + resolution: {integrity: sha512-f/NvtRjOm80BtNM5OQtlaBdM5BRFUv7gf381j9wygDNL+qOYSNOgtQ/DCndiYi80iIOv76QqaTmp4fa9hwI0OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.29.1': resolution: {integrity: sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4461,65 +5220,184 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/utils@8.46.3': + resolution: {integrity: sha512-VXw7qmdkucEx9WkmR3ld/u6VhRyKeiF1uxWwCy/iuNfokjJ7VhsgLSOTjsol8BunSw190zABzpwdNsze2Kpo4g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/visitor-keys@8.29.1': resolution: {integrity: sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vitest/eslint-plugin@1.1.39': - resolution: {integrity: sha512-l5/MUFCYI8nxwr62JHlWwXfeQNS8E7xy71lSLGQ3CrjGjBdWLs1Rtee+BvYwy2m4YVPwYqUwdcAIOaZOwPUpfg==} - peerDependencies: - '@typescript-eslint/utils': ^8.24.0 - eslint: '>= 8.57.0' - typescript: '>= 5.0.0' - vitest: '*' - peerDependenciesMeta: - typescript: - optional: true - vitest: - optional: true + '@typescript-eslint/visitor-keys@8.46.3': + resolution: {integrity: sha512-uk574k8IU0rOF/AjniX8qbLSGURJVUCeM5e4MIMKBFFi8weeiLrG1fyQejyLXQpRZbU/1BuQasleV/RfHC3hHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vitest/expect@3.2.4': - resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} + cpu: [arm] + os: [android] - '@vitest/expect@4.0.4': - resolution: {integrity: sha512-0ioMscWJtfpyH7+P82sGpAi3Si30OVV73jD+tEqXm5+rIx9LgnfdaOn45uaFkKOncABi/PHL00Yn0oW/wK4cXw==} + '@unrs/resolver-binding-android-arm64@1.11.1': + resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} + cpu: [arm64] + os: [android] - '@vitest/mocker@3.2.4': - resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true + '@unrs/resolver-binding-darwin-arm64@1.11.1': + resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} + cpu: [arm64] + os: [darwin] - '@vitest/mocker@4.0.4': - resolution: {integrity: sha512-UTtKgpjWj+pvn3lUM55nSg34098obGhSHH+KlJcXesky8b5wCUgg7s60epxrS6yAG8slZ9W8T9jGWg4PisMf5Q==} - peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true + '@unrs/resolver-binding-darwin-x64@1.11.1': + resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} + cpu: [x64] + os: [darwin] - '@vitest/pretty-format@3.1.1': - resolution: {integrity: sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==} + '@unrs/resolver-binding-freebsd-x64@1.11.1': + resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} + cpu: [x64] + os: [freebsd] - '@vitest/pretty-format@3.2.4': - resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} + cpu: [arm] + os: [linux] - '@vitest/pretty-format@4.0.4': - resolution: {integrity: sha512-lHI2rbyrLVSd1TiHGJYyEtbOBo2SDndIsN3qY4o4xe2pBxoJLD6IICghNCvD7P+BFin6jeyHXiUICXqgl6vEaQ==} + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} + cpu: [arm] + os: [linux] - '@vitest/runner@4.0.4': - resolution: {integrity: sha512-99EDqiCkncCmvIZj3qJXBZbyoQ35ghOwVWNnQ5nj0Hnsv4Qm40HmrMJrceewjLVvsxV/JSU4qyx2CGcfMBmXJw==} + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} + cpu: [arm64] + os: [linux] - '@vitest/snapshot@4.0.4': - resolution: {integrity: sha512-XICqf5Gi4648FGoBIeRgnHWSNDp+7R5tpclGosFaUUFzY6SfcpsfHNMnC7oDu/iOLBxYfxVzaQpylEvpgii3zw==} + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} + cpu: [ppc64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} + cpu: [s390x] + os: [linux] + + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} + cpu: [x64] + os: [win32] + + '@vitejs/plugin-react@5.1.0': + resolution: {integrity: sha512-4LuWrg7EKWgQaMJfnN+wcmbAW+VSsCmqGohftWjuct47bv8uE4n/nPpq4XjJPsxgq00GGG5J8dvBczp8uxScew==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + + '@vitejs/plugin-rsc@0.4.31': + resolution: {integrity: sha512-SCPMB5gXm/hmzQrM4TLV1breRtR0RFz73BpdFyFwqgWZDO+gDbz/05TafNtD9cMbDjX9Kx+8LfQJHeMUG/KCUw==} + peerDependencies: + react: '*' + react-dom: '*' + vite: '*' + + '@vitest/eslint-plugin@1.1.39': + resolution: {integrity: sha512-l5/MUFCYI8nxwr62JHlWwXfeQNS8E7xy71lSLGQ3CrjGjBdWLs1Rtee+BvYwy2m4YVPwYqUwdcAIOaZOwPUpfg==} + peerDependencies: + '@typescript-eslint/utils': ^8.24.0 + eslint: '>= 8.57.0' + typescript: '>= 5.0.0' + vitest: '*' + peerDependenciesMeta: + typescript: + optional: true + vitest: + optional: true + + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + + '@vitest/expect@4.0.4': + resolution: {integrity: sha512-0ioMscWJtfpyH7+P82sGpAi3Si30OVV73jD+tEqXm5+rIx9LgnfdaOn45uaFkKOncABi/PHL00Yn0oW/wK4cXw==} + + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/mocker@4.0.4': + resolution: {integrity: sha512-UTtKgpjWj+pvn3lUM55nSg34098obGhSHH+KlJcXesky8b5wCUgg7s60epxrS6yAG8slZ9W8T9jGWg4PisMf5Q==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.1.1': + resolution: {integrity: sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==} + + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/pretty-format@4.0.4': + resolution: {integrity: sha512-lHI2rbyrLVSd1TiHGJYyEtbOBo2SDndIsN3qY4o4xe2pBxoJLD6IICghNCvD7P+BFin6jeyHXiUICXqgl6vEaQ==} + + '@vitest/runner@4.0.4': + resolution: {integrity: sha512-99EDqiCkncCmvIZj3qJXBZbyoQ35ghOwVWNnQ5nj0Hnsv4Qm40HmrMJrceewjLVvsxV/JSU4qyx2CGcfMBmXJw==} + + '@vitest/snapshot@4.0.4': + resolution: {integrity: sha512-XICqf5Gi4648FGoBIeRgnHWSNDp+7R5tpclGosFaUUFzY6SfcpsfHNMnC7oDu/iOLBxYfxVzaQpylEvpgii3zw==} '@vitest/spy@3.2.4': resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} @@ -4587,6 +5465,10 @@ packages: '@zeit/schemas@2.36.0': resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==} + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + acorn-import-phases@1.0.4: resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} engines: {node: '>=10.13.0'} @@ -4710,10 +5592,17 @@ packages: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + array-includes@3.1.8: resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} + array-includes@3.1.9: + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} + engines: {node: '>= 0.4'} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -4722,6 +5611,10 @@ packages: resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} engines: {node: '>= 0.4'} + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + array.prototype.flat@1.3.3: resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} engines: {node: '>= 0.4'} @@ -4792,6 +5685,9 @@ packages: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} + babel-dead-code-elimination@1.0.10: + resolution: {integrity: sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -4802,6 +5698,10 @@ packages: resolution: {integrity: sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==} hasBin: true + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} @@ -4826,6 +5726,10 @@ packages: bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -5098,9 +6002,28 @@ packages: resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} engines: {node: '>= 0.6'} + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -5241,6 +6164,14 @@ packages: dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dedent@1.7.0: + resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -5272,10 +6203,18 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -5284,6 +6223,10 @@ packages: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} @@ -5337,6 +6280,9 @@ packages: ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + electron-to-chromium@1.5.134: resolution: {integrity: sha512-zSwzrLg3jNP3bwsLqWHmS5z2nIOQ5ngMnfMZOWWtXnqqQkPVyOipxK98w+1beLw1TB+EImPNcG8wVP/cLVs2Og==} @@ -5349,6 +6295,14 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} @@ -5370,6 +6324,9 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -5377,6 +6334,10 @@ packages: resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} engines: {node: '>= 0.4'} + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + engines: {node: '>= 0.4'} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -5425,6 +6386,9 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -5433,11 +6397,67 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + eslint-config-next@16.0.1: + resolution: {integrity: sha512-wNuHw5gNOxwLUvpg0cu6IL0crrVC9hAwdS/7UwleNkwyaMiWIOAwf8yzXVqBBzL3c9A7jVRngJxjoSpPP1aEhg==} + peerDependencies: + eslint: '>=9.0.0' + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.10.1: + resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.12.1: + resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + eslint-plugin-cypress@5.2.0: resolution: {integrity: sha512-vuCUBQloUSILxtJrUWV39vNIQPlbg0L7cTunEAzvaUzv9LFZZym+KFLH18n9j2cZuFPdlxOqTubCvg5se0DyGw==} peerDependencies: eslint: '>=9' + eslint-plugin-import@2.32.0: + resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint-plugin-jsx-a11y@6.10.2: resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} engines: {node: '>=4.0'} @@ -5450,6 +6470,12 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + eslint-plugin-react-hooks@7.0.1: + resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + eslint-plugin-react-refresh@0.4.24: resolution: {integrity: sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==} peerDependencies: @@ -5540,6 +6566,10 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + event-stream@3.3.4: resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} @@ -5566,10 +6596,18 @@ packages: resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} engines: {node: '>=4'} + exit-hook@2.2.1: + resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} + engines: {node: '>=6'} + expect-type@1.2.2: resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} engines: {node: '>=12.0.0'} + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -5588,6 +6626,10 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -5636,6 +6678,10 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + find-cache-dir@3.3.2: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} @@ -5700,6 +6746,14 @@ packages: form-serialize@0.7.2: resolution: {integrity: sha512-ohEA4Crzd/+hSREjGf4kSsy73WhAtQ7H+blGEz2DVd+JCi0TV5nZBSn9PaPlvrl9m29fa6xclAfpRkqZ57b1bw==} + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + from@0.1.7: resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} @@ -5756,6 +6810,10 @@ packages: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} + get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -5776,6 +6834,9 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} @@ -5822,6 +6883,9 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -5867,6 +6931,16 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + + hosted-git-info@6.1.3: + resolution: {integrity: sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + html-encoding-sniffer@4.0.0: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} @@ -5894,6 +6968,10 @@ packages: htmlparser2@6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -5922,6 +7000,10 @@ packages: resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} engines: {node: '>=18.18.0'} + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -5977,6 +7059,10 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + is-array-buffer@3.0.5: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} @@ -6006,6 +7092,9 @@ packages: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} + is-bun-module@2.0.0: + resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -6055,6 +7144,10 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -6078,6 +7171,9 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -6148,6 +7244,10 @@ packages: isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isbot@5.1.32: + resolution: {integrity: sha512-VNfjM73zz2IBZmdShMfAUg10prm6t7HFUQmNAEOAVS4YH92ZrZcvkMcGX6cIgBJAzWDzPent/EeAtYEHNPNPBQ==} + engines: {node: '>=18'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -6205,6 +7305,11 @@ packages: canvas: optional: true + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -6216,6 +7321,10 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -6231,6 +7340,10 @@ packages: json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -6353,6 +7466,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -6377,10 +7494,17 @@ packages: mdn-data@2.12.2: resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + memfs@3.5.3: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -6388,6 +7512,10 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -6408,6 +7536,11 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -6433,6 +7566,10 @@ packages: mlly@1.8.0: resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + morgan@1.10.1: + resolution: {integrity: sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==} + engines: {node: '>= 0.8.0'} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -6451,9 +7588,18 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + napi-postinstall@0.3.4: + resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + hasBin: true + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + negotiator@0.6.4: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} @@ -6482,6 +7628,27 @@ packages: sass: optional: true + next@16.0.1: + resolution: {integrity: sha512-e9RLSssZwd35p7/vOa+hoDFggUZIUbZhIUSLZuETCwrCVvxOs87NamoUzT+vbcNAL8Ld9GobBnWOA6SbV/arOw==} + engines: {node: '>=20.9.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + 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 + no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} @@ -6494,10 +7661,30 @@ packages: node-releases@2.0.26: resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==} + normalize-package-data@5.0.0: + resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + npm-install-checks@6.3.0: + resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-package-arg@10.1.0: + resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-pick-manifest@8.0.2: + resolution: {integrity: sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -6536,6 +7723,10 @@ packages: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + object.values@1.2.1: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} @@ -6543,6 +7734,14 @@ packages: objectorarray@1.0.5: resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} + on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + on-headers@1.1.0: resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} engines: {node: '>= 0.8'} @@ -6608,6 +7807,10 @@ packages: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} + p-map@7.0.3: + resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + engines: {node: '>=18'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -6639,6 +7842,10 @@ packages: parse5@8.0.0: resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} @@ -6672,6 +7879,9 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + path-to-regexp@3.3.0: resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} @@ -6679,6 +7889,9 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -6695,6 +7908,9 @@ packages: performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + periscopic@4.0.2: + resolution: {integrity: sha512-sqpQDUy8vgB7ycLkendSKS6HnVz1Rneoc3Rc+ZBUCe2pbqlVuCC5vF52l0NJ1aiMg/r1qfYF9/myz8CZeI2rjA==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -6822,13 +8038,33 @@ packages: peerDependencies: prettier: ^3.0.0 + proc-log@3.0.0: + resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + proxy-from-env@1.0.0: resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==} @@ -6847,6 +8083,10 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + qs@6.14.0: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} @@ -6868,6 +8108,10 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -6881,6 +8125,16 @@ packages: resolution: {integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==} engines: {node: '>=16.14.0'} + react-dom@17.0.2: + resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} + peerDependencies: + react: 17.0.2 + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + react-dom@19.2.0: resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} peerDependencies: @@ -6895,6 +8149,14 @@ packages: react-is@19.2.0: resolution: {integrity: sha512-x3Ax3kNSMIIkyVYhWPyO09bu0uttcAIoecO/um/rKGQ4EltYWVYtyiGkS/3xMynrbVQdS69Jhlv8FXUEZehlzA==} + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react-refresh@0.18.0: + resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} + engines: {node: '>=0.10.0'} + react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -6915,6 +8177,26 @@ packages: '@types/react': optional: true + react-router@7.9.2: + resolution: {integrity: sha512-i2TPp4dgaqrOqiRGLZmqh2WXmbdFknUyiCRmSKs0hf6fWXkTKg5h56b+9F22NbGRAMxjYfqQnpi63egzD2SuZA==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + + react-router@7.9.5: + resolution: {integrity: sha512-JmxqrnBZ6E9hWmf02jzNn9Jm3UqyeimyiwzD69NjxGySG6lIz/1LVPsoTCwN7NBX2XjCEa1LIX5EMz1j2b6u6A==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + react-style-singleton@2.2.3: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} @@ -6930,6 +8212,14 @@ packages: peerDependencies: react: ^19.2.0 + react@17.0.2: + resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} + engines: {node: '>=0.10.0'} + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + react@19.2.0: resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} engines: {node: '>=0.10.0'} @@ -6998,6 +8288,9 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} @@ -7011,6 +8304,10 @@ packages: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -7041,6 +8338,9 @@ packages: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -7059,6 +8359,12 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} + scheduler@0.20.2: + resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -7079,17 +8385,33 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} serve-handler@6.1.6: resolution: {integrity: sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==} + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + serve@14.2.5: resolution: {integrity: sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA==} engines: {node: '>= 14'} hasBin: true + set-cookie-parser@2.7.2: + resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -7102,10 +8424,17 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + sharp@0.34.1: resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + sharp@0.34.4: + resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -7174,6 +8503,18 @@ packages: spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.22: + resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + split@0.3.3: resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} @@ -7185,6 +8526,9 @@ packages: engines: {node: '>=0.10.0'} hasBin: true + stable-hash@0.0.5: + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -7193,9 +8537,17 @@ packages: engines: {node: '>=16'} hasBin: true + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + storybook@9.1.15: resolution: {integrity: sha512-es7uDdEwRVVUAt7XLAZZ1hicOq9r4ov5NFeFPpa2YEyAsyHYOCr0CTlHBfslWG6D5EVNWK3kVIIuW8GHB6hEig==} hasBin: true @@ -7419,6 +8771,10 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + tough-cookie@5.1.2: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} @@ -7455,6 +8811,19 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + tsconfck@3.1.6: + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsconfig-paths@4.2.0: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} @@ -7484,6 +8853,9 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + turbo-stream@3.1.0: + resolution: {integrity: sha512-tVI25WEXl4fckNEmrq70xU1XumxUwEx/FZD5AgEcV8ri7Wvrg2o7GEq8U7htrNx3CajciGm+kDyhRf5JB6t7/A==} + tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} @@ -7503,6 +8875,10 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -7519,6 +8895,13 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} + typescript-eslint@8.46.3: + resolution: {integrity: sha512-bAfgMavTuGo+8n6/QQDVQz4tZ4f7Soqg53RbrlZQEoAltYop/XR4RAts/I0BrO3TTClTSTFJ0wYbla+P8cEWJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} @@ -7550,10 +8933,17 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + unplugin@1.16.1: resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} engines: {node: '>=14.0.0'} + unrs-resolver@1.11.1: + resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} + untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} @@ -7607,10 +8997,41 @@ packages: utila@0.4.0: resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + valibot@0.41.0: + resolution: {integrity: sha512-igDBb8CTYr8YTQlOKgaN9nSS0Be7z+WRuaeYqGf3Cjz3aKmSnqEmYnkfVjzIuumGqfHpa3fLIvMEAfhrpqN8ng==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + + valibot@1.1.0: + resolution: {integrity: sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -7619,6 +9040,24 @@ packages: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite-plugin-devtools-json@1.0.0: + resolution: {integrity: sha512-MobvwqX76Vqt/O4AbnNMNWoXWGrKUqZbphCUle/J2KXH82yKQiunOeKnz/nqEPosPsoWWPP9FtNuPBSYpiiwkw==} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + + vite-tsconfig-paths@5.1.4: + resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} + peerDependencies: + vite: '*' + peerDependenciesMeta: + vite: + optional: true + vite@7.1.12: resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} engines: {node: ^20.19.0 || >=22.12.0} @@ -7659,6 +9098,54 @@ packages: yaml: optional: true + vite@7.1.6: + resolution: {integrity: sha512-SRYIB8t/isTwNn8vMB3MR6E+EQZM/WG1aKmmIUCfDXfVvKfc20ZpamngWHKzAmmu9ppsgxsg4b2I7c90JZudIQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitefu@1.1.1: + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + vite: + optional: true + vitest-axe@1.0.0-pre.5: resolution: {integrity: sha512-eUGxjpXnceha9lkqIVyMgOUeDmWU9LVjNiLTjAjDtMew0WbaBDtixoUvdftOhZfqRI03G2Ay4ZxaU1KG6jNCiQ==} peerDependencies: @@ -7791,6 +9278,11 @@ packages: engines: {node: '>= 8'} hasBin: true + which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} @@ -7872,6 +9364,18 @@ packages: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} + zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + + zod@4.1.12: + resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} + snapshots: '@adobe/css-tools@4.4.2': {} @@ -7941,6 +9445,10 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.28.5 + '@babel/helper-compilation-targets@7.27.2': dependencies: '@babel/compat-data': 7.28.5 @@ -7949,8 +9457,28 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.5 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/helper-globals@7.28.0': {} + '@babel/helper-member-expression-to-functions@7.28.5': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.27.1': dependencies: '@babel/traverse': 7.28.5 @@ -7967,6 +9495,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.28.5 + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.28.5': {} @@ -7982,6 +9532,56 @@ snapshots: dependencies: '@babel/types': 7.28.5 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) + transitivePeerDependencies: + - supports-color + '@babel/runtime@7.27.0': dependencies: regenerator-runtime: 0.14.1 @@ -8254,11 +9854,27 @@ snapshots: transitivePeerDependencies: - supports-color + '@emnapi/core@1.7.0': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.4.0': dependencies: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.7.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild/aix-ppc64@0.25.11': optional: true @@ -8438,84 +10054,173 @@ snapshots: '@humanwhocodes/retry@0.4.2': {} + '@img/colour@1.0.0': + optional: true + '@img/sharp-darwin-arm64@0.34.1': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.1.0 optional: true + '@img/sharp-darwin-arm64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.3 + optional: true + '@img/sharp-darwin-x64@0.34.1': optionalDependencies: '@img/sharp-libvips-darwin-x64': 1.1.0 optional: true + '@img/sharp-darwin-x64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.3 + optional: true + '@img/sharp-libvips-darwin-arm64@1.1.0': optional: true + '@img/sharp-libvips-darwin-arm64@1.2.3': + optional: true + '@img/sharp-libvips-darwin-x64@1.1.0': optional: true + '@img/sharp-libvips-darwin-x64@1.2.3': + optional: true + '@img/sharp-libvips-linux-arm64@1.1.0': optional: true + '@img/sharp-libvips-linux-arm64@1.2.3': + optional: true + '@img/sharp-libvips-linux-arm@1.1.0': optional: true + '@img/sharp-libvips-linux-arm@1.2.3': + optional: true + '@img/sharp-libvips-linux-ppc64@1.1.0': optional: true + '@img/sharp-libvips-linux-ppc64@1.2.3': + optional: true + '@img/sharp-libvips-linux-s390x@1.1.0': optional: true + '@img/sharp-libvips-linux-s390x@1.2.3': + optional: true + '@img/sharp-libvips-linux-x64@1.1.0': optional: true + '@img/sharp-libvips-linux-x64@1.2.3': + optional: true + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': optional: true + '@img/sharp-libvips-linuxmusl-arm64@1.2.3': + optional: true + '@img/sharp-libvips-linuxmusl-x64@1.1.0': optional: true + '@img/sharp-libvips-linuxmusl-x64@1.2.3': + optional: true + '@img/sharp-linux-arm64@0.34.1': optionalDependencies: '@img/sharp-libvips-linux-arm64': 1.1.0 optional: true + '@img/sharp-linux-arm64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.3 + optional: true + '@img/sharp-linux-arm@0.34.1': optionalDependencies: '@img/sharp-libvips-linux-arm': 1.1.0 optional: true + '@img/sharp-linux-arm@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.3 + optional: true + + '@img/sharp-linux-ppc64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.3 + optional: true + '@img/sharp-linux-s390x@0.34.1': optionalDependencies: '@img/sharp-libvips-linux-s390x': 1.1.0 optional: true + '@img/sharp-linux-s390x@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.3 + optional: true + '@img/sharp-linux-x64@0.34.1': optionalDependencies: '@img/sharp-libvips-linux-x64': 1.1.0 optional: true + '@img/sharp-linux-x64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.3 + optional: true + '@img/sharp-linuxmusl-arm64@0.34.1': optionalDependencies: '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 optional: true + '@img/sharp-linuxmusl-arm64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 + optional: true + '@img/sharp-linuxmusl-x64@0.34.1': optionalDependencies: '@img/sharp-libvips-linuxmusl-x64': 1.1.0 optional: true + '@img/sharp-linuxmusl-x64@0.34.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.3 + optional: true + '@img/sharp-wasm32@0.34.1': dependencies: '@emnapi/runtime': 1.4.0 optional: true + '@img/sharp-wasm32@0.34.4': + dependencies: + '@emnapi/runtime': 1.7.0 + optional: true + + '@img/sharp-win32-arm64@0.34.4': + optional: true + '@img/sharp-win32-ia32@0.34.1': optional: true + '@img/sharp-win32-ia32@0.34.4': + optional: true + '@img/sharp-win32-x64@0.34.1': optional: true + '@img/sharp-win32-x64@0.34.4': + optional: true + '@inquirer/external-editor@1.0.2(@types/node@22.14.0)': dependencies: chardet: 2.1.0 @@ -8593,34 +10298,73 @@ snapshots: '@types/react': 19.2.2 react: 19.2.0 + '@mjackson/node-fetch-server@0.2.0': {} + + '@napi-rs/wasm-runtime@0.2.12': + dependencies: + '@emnapi/core': 1.7.0 + '@emnapi/runtime': 1.7.0 + '@tybys/wasm-util': 0.10.1 + optional: true + '@neoconfetti/react@1.0.0': {} '@next/env@15.3.1': {} + '@next/env@16.0.1': {} + + '@next/eslint-plugin-next@16.0.1': + dependencies: + fast-glob: 3.3.1 + '@next/swc-darwin-arm64@15.3.1': optional: true + '@next/swc-darwin-arm64@16.0.1': + optional: true + '@next/swc-darwin-x64@15.3.1': optional: true + '@next/swc-darwin-x64@16.0.1': + optional: true + '@next/swc-linux-arm64-gnu@15.3.1': optional: true + '@next/swc-linux-arm64-gnu@16.0.1': + optional: true + '@next/swc-linux-arm64-musl@15.3.1': optional: true + '@next/swc-linux-arm64-musl@16.0.1': + optional: true + '@next/swc-linux-x64-gnu@15.3.1': optional: true + '@next/swc-linux-x64-gnu@16.0.1': + optional: true + '@next/swc-linux-x64-musl@15.3.1': optional: true + '@next/swc-linux-x64-musl@16.0.1': + optional: true + '@next/swc-win32-arm64-msvc@15.3.1': optional: true + '@next/swc-win32-arm64-msvc@16.0.1': + optional: true + '@next/swc-win32-x64-msvc@15.3.1': optional: true + '@next/swc-win32-x64-msvc@16.0.1': + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8633,6 +10377,37 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 + '@nolyfill/is-core-module@1.0.39': {} + + '@npmcli/git@4.1.0': + dependencies: + '@npmcli/promise-spawn': 6.0.2 + lru-cache: 7.18.3 + npm-pick-manifest: 8.0.2 + proc-log: 3.0.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.7.1 + which: 3.0.1 + transitivePeerDependencies: + - bluebird + + '@npmcli/package-json@4.0.1': + dependencies: + '@npmcli/git': 4.1.0 + glob: 10.4.5 + hosted-git-info: 6.1.3 + json-parse-even-better-errors: 3.0.2 + normalize-package-data: 5.0.0 + proc-log: 3.0.0 + semver: 7.7.1 + transitivePeerDependencies: + - bluebird + + '@npmcli/promise-spawn@6.0.2': + dependencies: + which: 3.0.1 + '@pkgjs/parseargs@0.11.0': optional: true @@ -8640,6 +10415,182 @@ snapshots: '@radix-ui/colors@3.0.0': {} + '@react-router/dev@7.9.2(@react-router/serve@7.9.2(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@22.14.0)(@vitejs/plugin-rsc@0.4.31(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)))(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.39.0)(typescript@5.9.3)(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0))': + dependencies: + '@babel/core': 7.28.5 + '@babel/generator': 7.28.5 + '@babel/parser': 7.28.5 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/preset-typescript': 7.28.5(@babel/core@7.28.5) + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + '@npmcli/package-json': 4.0.1 + '@react-router/node': 7.9.2(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) + '@remix-run/node-fetch-server': 0.9.0 + arg: 5.0.2 + babel-dead-code-elimination: 1.0.10 + chokidar: 4.0.3 + dedent: 1.7.0 + es-module-lexer: 1.7.0 + exit-hook: 2.2.1 + isbot: 5.1.32 + jsesc: 3.0.2 + lodash: 4.17.21 + pathe: 1.1.2 + picocolors: 1.1.1 + prettier: 3.6.2 + react-refresh: 0.14.2 + react-router: 7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + semver: 7.7.3 + tinyglobby: 0.2.15 + valibot: 0.41.0(typescript@5.9.3) + vite: 7.1.6(@types/node@22.14.0)(terser@5.39.0) + vite-node: 3.2.4(@types/node@22.14.0)(terser@5.39.0) + optionalDependencies: + '@react-router/serve': 7.9.2(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) + '@vitejs/plugin-rsc': 0.4.31(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)) + typescript: 5.9.3 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - bluebird + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + '@react-router/dev@7.9.5(@react-router/serve@7.9.5(react-router@7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@22.14.0)(@vitejs/plugin-rsc@0.4.31(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0)))(react-router@7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.39.0)(typescript@5.9.3)(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0))': + dependencies: + '@babel/core': 7.28.5 + '@babel/generator': 7.28.5 + '@babel/parser': 7.28.5 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/preset-typescript': 7.28.5(@babel/core@7.28.5) + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + '@npmcli/package-json': 4.0.1 + '@react-router/node': 7.9.5(react-router@7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) + '@remix-run/node-fetch-server': 0.9.0 + arg: 5.0.2 + babel-dead-code-elimination: 1.0.10 + chokidar: 4.0.3 + dedent: 1.7.0 + es-module-lexer: 1.7.0 + exit-hook: 2.2.1 + isbot: 5.1.32 + jsesc: 3.0.2 + lodash: 4.17.21 + p-map: 7.0.3 + pathe: 1.1.2 + picocolors: 1.1.1 + prettier: 3.6.2 + react-refresh: 0.14.2 + react-router: 7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + semver: 7.7.1 + tinyglobby: 0.2.15 + valibot: 1.1.0(typescript@5.9.3) + vite: 7.1.12(@types/node@22.14.0)(terser@5.39.0) + vite-node: 3.2.4(@types/node@22.14.0)(terser@5.39.0) + optionalDependencies: + '@react-router/serve': 7.9.5(react-router@7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) + '@vitejs/plugin-rsc': 0.4.31(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0)) + typescript: 5.9.3 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - bluebird + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + '@react-router/express@7.9.2(express@4.21.2)(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)': + dependencies: + '@react-router/node': 7.9.2(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) + express: 4.21.2 + react-router: 7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + optionalDependencies: + typescript: 5.9.3 + + '@react-router/express@7.9.5(express@4.21.2)(react-router@7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)': + dependencies: + '@react-router/node': 7.9.5(react-router@7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) + express: 4.21.2 + react-router: 7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + optionalDependencies: + typescript: 5.9.3 + + '@react-router/fs-routes@7.9.2(@react-router/dev@7.9.2(@react-router/serve@7.9.2(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@22.14.0)(@vitejs/plugin-rsc@0.4.31(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)))(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.39.0)(typescript@5.9.3)(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)))(typescript@5.9.3)': + dependencies: + '@react-router/dev': 7.9.2(@react-router/serve@7.9.2(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@22.14.0)(@vitejs/plugin-rsc@0.4.31(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)))(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.39.0)(typescript@5.9.3)(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)) + minimatch: 9.0.5 + optionalDependencies: + typescript: 5.9.3 + + '@react-router/node@7.9.2(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)': + dependencies: + '@mjackson/node-fetch-server': 0.2.0 + react-router: 7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + optionalDependencies: + typescript: 5.9.3 + + '@react-router/node@7.9.5(react-router@7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)': + dependencies: + '@mjackson/node-fetch-server': 0.2.0 + react-router: 7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + optionalDependencies: + typescript: 5.9.3 + + '@react-router/serve@7.9.2(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)': + dependencies: + '@mjackson/node-fetch-server': 0.2.0 + '@react-router/express': 7.9.2(express@4.21.2)(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) + '@react-router/node': 7.9.2(react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) + compression: 1.8.1 + express: 4.21.2 + get-port: 5.1.1 + morgan: 1.10.1 + react-router: 7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + source-map-support: 0.5.21 + transitivePeerDependencies: + - supports-color + - typescript + + '@react-router/serve@7.9.5(react-router@7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)': + dependencies: + '@mjackson/node-fetch-server': 0.2.0 + '@react-router/express': 7.9.5(express@4.21.2)(react-router@7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) + '@react-router/node': 7.9.5(react-router@7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) + compression: 1.8.1 + express: 4.21.2 + get-port: 5.1.1 + morgan: 1.10.1 + react-router: 7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + source-map-support: 0.5.21 + transitivePeerDependencies: + - supports-color + - typescript + + '@remix-run/node-fetch-server@0.8.1': {} + + '@remix-run/node-fetch-server@0.9.0': {} + + '@rolldown/pluginutils@1.0.0-beta.43': {} + '@rollup/rollup-android-arm-eabi@4.52.5': optional: true @@ -8706,6 +10657,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.52.5': optional: true + '@rtsao/scc@1.1.0': {} + '@sec-ant/readable-stream@0.4.1': {} '@sindresorhus/merge-streams@4.0.0': {} @@ -8946,6 +10899,11 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': @@ -9003,6 +10961,8 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/json5@0.0.29': {} + '@types/jsonfile@6.1.4': dependencies: '@types/node': 22.14.0 @@ -9063,6 +11023,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.46.3(eslint@9.38.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.3 + '@typescript-eslint/type-utils': 8.46.3(eslint@9.38.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.3(eslint@9.38.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.3 + eslint: 9.38.0 + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.29.1(eslint@9.38.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.29.1 @@ -9075,53 +11052,227 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.29.1': - dependencies: - '@typescript-eslint/types': 8.29.1 - '@typescript-eslint/visitor-keys': 8.29.1 + '@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.46.3 + '@typescript-eslint/types': 8.46.3 + '@typescript-eslint/typescript-estree': 8.46.3(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.3 + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.38.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.46.3(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.46.3(typescript@5.9.3) + '@typescript-eslint/types': 8.46.3 + debug: 4.4.3(supports-color@8.1.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.29.1': + dependencies: + '@typescript-eslint/types': 8.29.1 + '@typescript-eslint/visitor-keys': 8.29.1 + + '@typescript-eslint/scope-manager@8.46.3': + dependencies: + '@typescript-eslint/types': 8.46.3 + '@typescript-eslint/visitor-keys': 8.46.3 + + '@typescript-eslint/tsconfig-utils@8.46.3(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.29.1(eslint@9.38.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.29.1(eslint@9.38.0)(typescript@5.9.3) + debug: 4.4.0 + eslint: 9.38.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.46.3(eslint@9.38.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.46.3 + '@typescript-eslint/typescript-estree': 8.46.3(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.3(eslint@9.38.0)(typescript@5.9.3) + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.38.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.29.1': {} + + '@typescript-eslint/types@8.46.3': {} + + '@typescript-eslint/typescript-estree@8.29.1(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.29.1 + '@typescript-eslint/visitor-keys': 8.29.1 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.46.3(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.46.3(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.3(typescript@5.9.3) + '@typescript-eslint/types': 8.46.3 + '@typescript-eslint/visitor-keys': 8.46.3 + debug: 4.4.3(supports-color@8.1.1) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.29.1(eslint@9.38.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.38.0) + '@typescript-eslint/scope-manager': 8.29.1 + '@typescript-eslint/types': 8.29.1 + '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.9.3) + eslint: 9.38.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.46.3(eslint@9.38.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0) + '@typescript-eslint/scope-manager': 8.46.3 + '@typescript-eslint/types': 8.46.3 + '@typescript-eslint/typescript-estree': 8.46.3(typescript@5.9.3) + eslint: 9.38.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.29.1': + dependencies: + '@typescript-eslint/types': 8.29.1 + eslint-visitor-keys: 4.2.0 + + '@typescript-eslint/visitor-keys@8.46.3': + dependencies: + '@typescript-eslint/types': 8.46.3 + eslint-visitor-keys: 4.2.1 + + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + optional: true + + '@unrs/resolver-binding-android-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + optional: true - '@typescript-eslint/type-utils@8.29.1(eslint@9.38.0)(typescript@5.9.3)': + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': dependencies: - '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.29.1(eslint@9.38.0)(typescript@5.9.3) - debug: 4.4.0 - eslint: 9.38.0 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color + '@napi-rs/wasm-runtime': 0.2.12 + optional: true - '@typescript-eslint/types@8.29.1': {} + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + optional: true - '@typescript-eslint/typescript-estree@8.29.1(typescript@5.9.3)': + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + optional: true + + '@vitejs/plugin-react@5.1.0(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0))': dependencies: - '@typescript-eslint/types': 8.29.1 - '@typescript-eslint/visitor-keys': 8.29.1 - debug: 4.4.0 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 + '@babel/core': 7.28.5 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) + '@rolldown/pluginutils': 1.0.0-beta.43 + '@types/babel__core': 7.20.5 + react-refresh: 0.18.0 + vite: 7.1.12(@types/node@22.14.0)(terser@5.39.0) transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.29.1(eslint@9.38.0)(typescript@5.9.3)': + '@vitejs/plugin-rsc@0.4.31(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0))': dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.38.0) - '@typescript-eslint/scope-manager': 8.29.1 - '@typescript-eslint/types': 8.29.1 - '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.9.3) - eslint: 9.38.0 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color + '@remix-run/node-fetch-server': 0.8.1 + es-module-lexer: 1.7.0 + estree-walker: 3.0.3 + magic-string: 0.30.21 + periscopic: 4.0.2 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + turbo-stream: 3.1.0 + vite: 7.1.12(@types/node@22.14.0)(terser@5.39.0) + vitefu: 1.1.1(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0)) + optional: true - '@typescript-eslint/visitor-keys@8.29.1': + '@vitejs/plugin-rsc@0.4.31(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0))': dependencies: - '@typescript-eslint/types': 8.29.1 - eslint-visitor-keys: 4.2.0 + '@remix-run/node-fetch-server': 0.8.1 + es-module-lexer: 1.7.0 + estree-walker: 3.0.3 + magic-string: 0.30.21 + periscopic: 4.0.2 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + turbo-stream: 3.1.0 + vite: 7.1.6(@types/node@22.14.0)(terser@5.39.0) + vitefu: 1.1.1(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)) '@vitest/eslint-plugin@1.1.39(@typescript-eslint/utils@8.29.1(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0)(typescript@5.9.3)(vitest@4.0.4(@types/node@22.14.0)(jsdom@26.1.0)(terser@5.39.0))': dependencies: @@ -9294,6 +11445,11 @@ snapshots: '@zeit/schemas@2.36.0': {} + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + acorn-import-phases@1.0.4(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -9400,6 +11556,8 @@ snapshots: call-bound: 1.0.4 is-array-buffer: 3.0.5 + array-flatten@1.1.1: {} + array-includes@3.1.8: dependencies: call-bind: 1.0.8 @@ -9409,6 +11567,17 @@ snapshots: get-intrinsic: 1.3.0 is-string: 1.1.1 + array-includes@3.1.9: + 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-union@2.1.0: {} array.prototype.findlast@1.2.5: @@ -9420,6 +11589,16 @@ snapshots: es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 + array.prototype.findlastindex@1.2.6: + 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.3: dependencies: call-bind: 1.0.8 @@ -9494,12 +11673,25 @@ snapshots: axobject-query@4.1.0: {} + babel-dead-code-elimination@1.0.10: + dependencies: + '@babel/core': 7.28.5 + '@babel/parser': 7.28.5 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + balanced-match@1.0.2: {} base64-js@1.5.1: {} baseline-browser-mapping@2.8.20: {} + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 + bcrypt-pbkdf@1.0.2: dependencies: tweetnacl: 0.14.5 @@ -9523,6 +11715,23 @@ snapshots: bluebird@3.7.2: {} + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + boolbase@1.0.0: {} boxen@7.0.0: @@ -9775,8 +11984,20 @@ snapshots: content-disposition@0.5.2: {} + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + convert-source-map@2.0.0: {} + cookie-signature@1.0.6: {} + + cookie@0.7.1: {} + + cookie@1.0.2: {} + core-util-is@1.0.2: {} cosmiconfig@7.1.0: @@ -9958,6 +12179,8 @@ snapshots: dedent@0.7.0: {} + dedent@1.7.0: {} + deep-eql@5.0.2: {} deep-extend@0.6.0: {} @@ -9982,13 +12205,20 @@ snapshots: delayed-stream@1.0.0: {} + depd@2.0.0: {} + dequal@2.0.3: {} + destroy@1.2.0: {} + detect-indent@6.1.0: {} detect-libc@2.0.3: optional: true + detect-libc@2.1.2: + optional: true + detect-node-es@1.1.0: {} dir-glob@3.0.1: @@ -10049,6 +12279,8 @@ snapshots: jsbn: 0.1.1 safer-buffer: 2.1.2 + ee-first@1.1.1: {} + electron-to-chromium@1.5.134: {} electron-to-chromium@1.5.241: {} @@ -10057,6 +12289,10 @@ snapshots: emoji-regex@9.2.2: {} + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + end-of-stream@1.4.4: dependencies: once: 1.4.0 @@ -10081,6 +12317,8 @@ snapshots: entities@6.0.1: {} + err-code@2.0.3: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -10139,6 +12377,63 @@ snapshots: unbox-primitive: 1.1.0 which-typed-array: 1.1.19 + es-abstract@1.24.0: + 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.1: {} es-errors@1.3.0: {} @@ -10225,15 +12520,100 @@ snapshots: escalade@3.2.0: {} + escape-html@1.0.3: {} + escape-string-regexp@1.0.5: {} escape-string-regexp@4.0.0: {} + eslint-config-next@16.0.1(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0)(typescript@5.9.3): + dependencies: + '@next/eslint-plugin-next': 16.0.1 + eslint: 9.38.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0))(eslint@9.38.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0))(eslint@9.38.0))(eslint@9.38.0) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.38.0) + eslint-plugin-react: 7.37.5(eslint@9.38.0) + eslint-plugin-react-hooks: 7.0.1(eslint@9.38.0) + globals: 16.4.0 + typescript-eslint: 8.46.3(eslint@9.38.0)(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7(supports-color@8.1.1) + is-core-module: 2.16.1 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0))(eslint@9.38.0): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.38.0 + get-tsconfig: 4.13.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.15 + unrs-resolver: 1.11.1 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0))(eslint@9.38.0))(eslint@9.38.0) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0))(eslint@9.38.0))(eslint@9.38.0): + dependencies: + debug: 3.2.7(supports-color@8.1.1) + optionalDependencies: + '@typescript-eslint/parser': 8.46.3(eslint@9.38.0)(typescript@5.9.3) + eslint: 9.38.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0))(eslint@9.38.0) + transitivePeerDependencies: + - supports-color + eslint-plugin-cypress@5.2.0(eslint@9.38.0): dependencies: eslint: 9.38.0 globals: 16.4.0 + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0))(eslint@9.38.0))(eslint@9.38.0): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7(supports-color@8.1.1) + doctrine: 2.1.0 + eslint: 9.38.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0))(eslint@9.38.0))(eslint@9.38.0) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.46.3(eslint@9.38.0)(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + eslint-plugin-jsx-a11y@6.10.2(eslint@9.38.0): dependencies: aria-query: 5.3.2 @@ -10257,6 +12637,17 @@ snapshots: dependencies: eslint: 9.38.0 + eslint-plugin-react-hooks@7.0.1(eslint@9.38.0): + dependencies: + '@babel/core': 7.28.5 + '@babel/parser': 7.28.5 + eslint: 9.38.0 + hermes-parser: 0.25.1 + zod: 4.1.12 + zod-validation-error: 4.0.2(zod@4.1.12) + transitivePeerDependencies: + - supports-color + eslint-plugin-react-refresh@0.4.24(eslint@9.38.0): dependencies: eslint: 9.38.0 @@ -10388,6 +12779,8 @@ snapshots: esutils@2.0.3: {} + etag@1.8.1: {} + event-stream@3.3.4: dependencies: duplexer: 0.1.2 @@ -10445,8 +12838,46 @@ snapshots: dependencies: pify: 2.3.0 + exit-hook@2.2.1: {} + expect-type@1.2.2: {} + express@4.21.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + extend@3.0.2: {} extendable-error@0.1.7: {} @@ -10465,6 +12896,14 @@ snapshots: fast-deep-equal@3.1.3: {} + fast-glob@3.3.1: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -10509,6 +12948,18 @@ snapshots: dependencies: to-regex-range: 5.0.1 + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + find-cache-dir@3.3.2: dependencies: commondir: 1.0.1 @@ -10592,6 +13043,10 @@ snapshots: form-serialize@0.7.2: {} + forwarded@0.2.0: {} + + fresh@0.5.2: {} + from@0.1.7: {} fs-extra@10.1.0: @@ -10662,6 +13117,8 @@ snapshots: get-nonce@1.0.1: {} + get-port@5.1.1: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -10684,6 +13141,10 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 + get-tsconfig@4.13.0: + dependencies: + resolve-pkg-maps: 1.0.0 + getpass@0.1.7: dependencies: assert-plus: 1.0.0 @@ -10740,6 +13201,8 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 + globrex@0.1.2: {} + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -10775,6 +13238,16 @@ snapshots: he@1.2.0: {} + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + + hosted-git-info@6.1.3: + dependencies: + lru-cache: 7.18.3 + html-encoding-sniffer@4.0.0: dependencies: whatwg-encoding: 3.1.1 @@ -10808,6 +13281,14 @@ snapshots: domutils: 2.8.0 entities: 2.2.0 + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 @@ -10836,6 +13317,10 @@ snapshots: human-signals@8.0.1: {} + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -10880,6 +13365,8 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 + ipaddr.js@1.9.1: {} + is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 @@ -10914,6 +13401,10 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 + is-bun-module@2.0.0: + dependencies: + semver: 7.7.1 + is-callable@1.2.7: {} is-core-module@2.16.1: @@ -10959,6 +13450,8 @@ snapshots: is-map@2.0.3: {} + is-negative-zero@2.0.3: {} + is-number-object@1.1.1: dependencies: call-bound: 1.0.4 @@ -10974,6 +13467,10 @@ snapshots: is-potential-custom-element-name@1.0.1: {} + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.8 + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -11035,6 +13532,8 @@ snapshots: isarray@2.0.5: {} + isbot@5.1.32: {} + isexe@2.0.0: {} isstream@0.1.2: {} @@ -11141,12 +13640,16 @@ snapshots: - utf-8-validate optional: true + jsesc@3.0.2: {} + jsesc@3.1.0: {} json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} + json-parse-even-better-errors@3.0.2: {} + json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -11157,6 +13660,10 @@ snapshots: json-stringify-safe@5.0.1: {} + json5@1.0.2: + dependencies: + minimist: 1.2.8 + json5@2.2.3: {} jsonfile@4.0.0: @@ -11278,6 +13785,8 @@ snapshots: dependencies: yallist: 3.1.1 + lru-cache@7.18.3: {} + lz-string@1.5.0: {} magic-string@0.30.17: @@ -11299,14 +13808,20 @@ snapshots: mdn-data@2.12.2: optional: true + media-typer@0.3.0: {} + memfs@3.5.3: dependencies: fs-monkey: 1.1.0 + merge-descriptors@1.0.3: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} + methods@1.1.2: {} + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -11324,6 +13839,8 @@ snapshots: dependencies: mime-db: 1.52.0 + mime@1.6.0: {} + mimic-fn@2.1.0: {} min-indent@1.0.1: {} @@ -11347,6 +13864,16 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.1 + morgan@1.10.1: + dependencies: + basic-auth: 2.0.1 + debug: 2.6.9 + depd: 2.0.0 + on-finished: 2.3.0 + on-headers: 1.1.0 + transitivePeerDependencies: + - supports-color + mri@1.2.0: {} ms@2.0.0: {} @@ -11361,8 +13888,12 @@ snapshots: nanoid@3.3.11: {} + napi-postinstall@0.3.4: {} + natural-compare@1.4.0: {} + negotiator@0.6.3: {} + negotiator@0.6.4: {} neo-async@2.6.2: {} @@ -11392,6 +13923,29 @@ snapshots: - '@babel/core' - babel-plugin-macros + next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + dependencies: + '@next/env': 16.0.1 + '@swc/helpers': 0.5.15 + caniuse-lite: 1.0.30001751 + postcss: 8.4.31 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + styled-jsx: 5.1.6(react@19.2.0) + optionalDependencies: + '@next/swc-darwin-arm64': 16.0.1 + '@next/swc-darwin-x64': 16.0.1 + '@next/swc-linux-arm64-gnu': 16.0.1 + '@next/swc-linux-arm64-musl': 16.0.1 + '@next/swc-linux-x64-gnu': 16.0.1 + '@next/swc-linux-x64-musl': 16.0.1 + '@next/swc-win32-arm64-msvc': 16.0.1 + '@next/swc-win32-x64-msvc': 16.0.1 + sharp: 0.34.4 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + no-case@3.0.4: dependencies: lower-case: 2.0.2 @@ -11403,8 +13957,35 @@ snapshots: node-releases@2.0.26: {} + normalize-package-data@5.0.0: + dependencies: + hosted-git-info: 6.1.3 + is-core-module: 2.16.1 + semver: 7.7.1 + validate-npm-package-license: 3.0.4 + normalize-path@3.0.0: {} + npm-install-checks@6.3.0: + dependencies: + semver: 7.7.1 + + npm-normalize-package-bin@3.0.1: {} + + npm-package-arg@10.1.0: + dependencies: + hosted-git-info: 6.1.3 + proc-log: 3.0.0 + semver: 7.7.1 + validate-npm-package-name: 5.0.1 + + npm-pick-manifest@8.0.2: + dependencies: + npm-install-checks: 6.3.0 + npm-normalize-package-bin: 3.0.1 + npm-package-arg: 10.1.0 + semver: 7.7.1 + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -11449,6 +14030,12 @@ snapshots: es-abstract: 1.23.9 es-object-atoms: 1.1.1 + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + object.values@1.2.1: dependencies: call-bind: 1.0.8 @@ -11458,6 +14045,14 @@ snapshots: objectorarray@1.0.5: {} + on-finished@2.3.0: + dependencies: + ee-first: 1.1.1 + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + on-headers@1.1.0: {} once@1.4.0: @@ -11527,6 +14122,8 @@ snapshots: dependencies: aggregate-error: 3.1.0 + p-map@7.0.3: {} + p-try@2.2.0: {} package-json-from-dist@1.0.1: {} @@ -11562,6 +14159,8 @@ snapshots: entities: 6.0.1 optional: true + parseurl@1.3.3: {} + pascal-case@3.1.2: dependencies: no-case: 3.0.4 @@ -11586,10 +14185,14 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-to-regexp@0.1.12: {} + path-to-regexp@3.3.0: {} path-type@4.0.0: {} + pathe@1.1.2: {} + pathe@2.0.3: {} pathval@2.0.0: {} @@ -11602,6 +14205,12 @@ snapshots: performance-now@2.1.0: {} + periscopic@4.0.2: + dependencies: + '@types/estree': 1.0.8 + is-reference: 3.0.3 + zimmerframe: 1.1.4 + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -11706,14 +14315,28 @@ snapshots: tinyexec: 0.3.2 tslib: 2.8.1 + proc-log@3.0.0: {} + process@0.11.10: {} + promise-inflight@1.0.1: {} + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + proxy-from-env@1.0.0: {} proxy-from-env@1.1.0: {} @@ -11729,6 +14352,10 @@ snapshots: punycode@2.3.1: {} + qs@6.13.0: + dependencies: + side-channel: 1.1.0 + qs@6.14.0: dependencies: side-channel: 1.1.0 @@ -11745,6 +14372,13 @@ snapshots: range-parser@1.2.1: {} + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -11771,6 +14405,19 @@ snapshots: transitivePeerDependencies: - supports-color + react-dom@17.0.2(react@17.0.2): + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react: 17.0.2 + scheduler: 0.20.2 + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + react-dom@19.2.0(react@19.2.0): dependencies: react: 19.2.0 @@ -11782,6 +14429,10 @@ snapshots: react-is@19.2.0: {} + react-refresh@0.14.2: {} + + react-refresh@0.18.0: {} + react-remove-scroll-bar@2.3.8(@types/react@19.2.2)(react@19.2.0): dependencies: react: 19.2.0 @@ -11801,6 +14452,22 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 + react-router@7.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + dependencies: + cookie: 1.0.2 + react: 19.2.0 + set-cookie-parser: 2.7.2 + optionalDependencies: + react-dom: 19.2.0(react@19.2.0) + + react-router@7.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + dependencies: + cookie: 1.0.2 + react: 19.2.0 + set-cookie-parser: 2.7.2 + optionalDependencies: + react-dom: 19.2.0(react@19.2.0) + react-style-singleton@2.2.3(@types/react@19.2.2)(react@19.2.0): dependencies: get-nonce: 1.0.1 @@ -11815,6 +14482,15 @@ snapshots: react-is: 19.2.0 scheduler: 0.27.0 + react@17.0.2: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + react@19.2.0: {} read-yaml-file@1.1.0: @@ -11902,6 +14578,8 @@ snapshots: resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} + resolve@1.22.10: dependencies: is-core-module: 2.16.1 @@ -11919,6 +14597,8 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 + retry@0.12.0: {} + reusify@1.1.0: {} rfdc@1.4.1: {} @@ -11973,6 +14653,8 @@ snapshots: has-symbols: 1.1.0 isarray: 2.0.5 + safe-buffer@5.1.2: {} + safe-buffer@5.2.1: {} safe-push-apply@1.0.0: @@ -11992,6 +14674,15 @@ snapshots: dependencies: xmlchars: 2.2.0 + scheduler@0.20.2: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + scheduler@0.27.0: {} schema-utils@3.3.0: @@ -12011,6 +14702,26 @@ snapshots: semver@7.7.1: {} + semver@7.7.3: {} + + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 @@ -12025,6 +14736,15 @@ snapshots: path-to-regexp: 3.3.0 range-parser: 1.2.0 + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + serve@14.2.5: dependencies: '@zeit/schemas': 2.36.0 @@ -12041,6 +14761,8 @@ snapshots: transitivePeerDependencies: - supports-color + set-cookie-parser@2.7.2: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -12063,6 +14785,8 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 + setprototypeof@1.2.0: {} + sharp@0.34.1: dependencies: color: 4.2.3 @@ -12091,6 +14815,36 @@ snapshots: '@img/sharp-win32-x64': 0.34.1 optional: true + sharp@0.34.4: + dependencies: + '@img/colour': 1.0.0 + detect-libc: 2.1.2 + semver: 7.7.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.4 + '@img/sharp-darwin-x64': 0.34.4 + '@img/sharp-libvips-darwin-arm64': 1.2.3 + '@img/sharp-libvips-darwin-x64': 1.2.3 + '@img/sharp-libvips-linux-arm': 1.2.3 + '@img/sharp-libvips-linux-arm64': 1.2.3 + '@img/sharp-libvips-linux-ppc64': 1.2.3 + '@img/sharp-libvips-linux-s390x': 1.2.3 + '@img/sharp-libvips-linux-x64': 1.2.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 + '@img/sharp-libvips-linuxmusl-x64': 1.2.3 + '@img/sharp-linux-arm': 0.34.4 + '@img/sharp-linux-arm64': 0.34.4 + '@img/sharp-linux-ppc64': 0.34.4 + '@img/sharp-linux-s390x': 0.34.4 + '@img/sharp-linux-x64': 0.34.4 + '@img/sharp-linuxmusl-arm64': 0.34.4 + '@img/sharp-linuxmusl-x64': 0.34.4 + '@img/sharp-wasm32': 0.34.4 + '@img/sharp-win32-arm64': 0.34.4 + '@img/sharp-win32-ia32': 0.34.4 + '@img/sharp-win32-x64': 0.34.4 + optional: true + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -12168,6 +14922,20 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.22 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.22 + + spdx-license-ids@3.0.22: {} + split@0.3.3: dependencies: through: 2.3.8 @@ -12186,6 +14954,8 @@ snapshots: safer-buffer: 2.1.2 tweetnacl: 0.14.5 + stable-hash@0.0.5: {} + stackback@0.0.2: {} start-server-and-test@2.1.2: @@ -12201,8 +14971,15 @@ snapshots: transitivePeerDependencies: - supports-color + statuses@2.0.1: {} + std-env@3.9.0: {} + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + storybook@9.1.15(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0)): dependencies: '@storybook/global': 5.0.0 @@ -12432,6 +15209,8 @@ snapshots: dependencies: is-number: 7.0.0 + toidentifier@1.0.1: {} + tough-cookie@5.1.2: dependencies: tldts: 6.1.85 @@ -12464,6 +15243,17 @@ snapshots: ts-interface-checker@0.1.13: {} + tsconfck@3.1.6(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + tsconfig-paths@4.2.0: dependencies: json5: 2.2.3 @@ -12505,6 +15295,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 + turbo-stream@3.1.0: {} + tweetnacl@0.14.5: {} type-check@0.4.0: @@ -12517,6 +15309,11 @@ snapshots: type-fest@2.19.0: {} + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -12550,6 +15347,17 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 + typescript-eslint@8.46.3(eslint@9.38.0)(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.3(eslint@9.38.0)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.46.3(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.3(eslint@9.38.0)(typescript@5.9.3) + eslint: 9.38.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + typescript@5.9.3: {} ufo@1.6.1: {} @@ -12571,11 +15379,37 @@ snapshots: universalify@2.0.1: {} + unpipe@1.0.0: {} + unplugin@1.16.1: dependencies: acorn: 8.14.1 webpack-virtual-modules: 0.6.2 + unrs-resolver@1.11.1: + dependencies: + napi-postinstall: 0.3.4 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.11.1 + '@unrs/resolver-binding-android-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-x64': 1.11.1 + '@unrs/resolver-binding-freebsd-x64': 1.11.1 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 + '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-musl': 1.11.1 + '@unrs/resolver-binding-wasm32-wasi': 1.11.1 + '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 + '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 + '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + untildify@4.0.0: {} update-browserslist-db@1.1.3(browserslist@4.24.4): @@ -12622,8 +15456,27 @@ snapshots: utila@0.4.0: {} + utils-merge@1.0.1: {} + + uuid@11.1.0: {} + uuid@8.3.2: {} + valibot@0.41.0(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + + valibot@1.1.0(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + validate-npm-package-name@5.0.1: {} + vary@1.1.2: {} verror@1.10.0: @@ -12632,6 +15485,59 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 + vite-node@3.2.4(@types/node@22.14.0)(terser@5.39.0): + dependencies: + cac: 6.7.14 + debug: 4.4.3(supports-color@8.1.1) + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 7.1.12(@types/node@22.14.0)(terser@5.39.0) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite-plugin-devtools-json@1.0.0(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0)): + dependencies: + uuid: 11.1.0 + vite: 7.1.12(@types/node@22.14.0)(terser@5.39.0) + + vite-plugin-devtools-json@1.0.0(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)): + dependencies: + uuid: 11.1.0 + vite: 7.1.6(@types/node@22.14.0)(terser@5.39.0) + + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0)): + dependencies: + debug: 4.4.3(supports-color@8.1.1) + globrex: 0.1.2 + tsconfck: 3.1.6(typescript@5.9.3) + optionalDependencies: + vite: 7.1.12(@types/node@22.14.0)(terser@5.39.0) + transitivePeerDependencies: + - supports-color + - typescript + + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)): + dependencies: + debug: 4.4.3(supports-color@8.1.1) + globrex: 0.1.2 + tsconfck: 3.1.6(typescript@5.9.3) + optionalDependencies: + vite: 7.1.6(@types/node@22.14.0)(terser@5.39.0) + transitivePeerDependencies: + - supports-color + - typescript + vite@7.1.12(@types/node@22.14.0)(terser@5.39.0): dependencies: esbuild: 0.25.11 @@ -12645,6 +15551,28 @@ snapshots: fsevents: 2.3.3 terser: 5.39.0 + vite@7.1.6(@types/node@22.14.0)(terser@5.39.0): + dependencies: + esbuild: 0.25.11 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.52.5 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 22.14.0 + fsevents: 2.3.3 + terser: 5.39.0 + + vitefu@1.1.1(vite@7.1.12(@types/node@22.14.0)(terser@5.39.0)): + optionalDependencies: + vite: 7.1.12(@types/node@22.14.0)(terser@5.39.0) + optional: true + + vitefu@1.1.1(vite@7.1.6(@types/node@22.14.0)(terser@5.39.0)): + optionalDependencies: + vite: 7.1.6(@types/node@22.14.0)(terser@5.39.0) + vitest-axe@1.0.0-pre.5(vitest@4.0.4(@types/node@22.14.0)(jsdom@26.1.0)(terser@5.39.0)): dependencies: '@vitest/pretty-format': 3.1.1 @@ -12878,6 +15806,10 @@ snapshots: dependencies: isexe: 2.0.0 + which@3.0.1: + dependencies: + isexe: 2.0.0 + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 @@ -12931,3 +15863,11 @@ snapshots: yocto-queue@1.2.1: {} yoctocolors@2.1.1: {} + + zimmerframe@1.1.4: {} + + zod-validation-error@4.0.2(zod@4.1.12): + dependencies: + zod: 4.1.12 + + zod@4.1.12: {} From 407acc2bec0f84ab7363e0aa7c7e785a8770ace1 Mon Sep 17 00:00:00 2001 From: Chance Strickland Date: Mon, 3 Nov 2025 14:13:17 -0800 Subject: [PATCH 02/11] update readmes --- apps/test-next/README.md | 8 +--- apps/test-react-router-rsc/README.md | 8 ++-- apps/test-react-router/README.md | 8 ++-- apps/test-vite-react-17/README.md | 72 ++++------------------------ apps/test-vite-react-18/README.md | 72 ++++------------------------ apps/test-vite-react-19/README.md | 72 ++++------------------------ 6 files changed, 42 insertions(+), 198 deletions(-) diff --git a/apps/test-next/README.md b/apps/test-next/README.md index e215bc4cc..b1159d554 100644 --- a/apps/test-next/README.md +++ b/apps/test-next/README.md @@ -5,13 +5,9 @@ This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next- First, run the development server: ```bash -npm run dev -# or -yarn dev -# or pnpm dev -# or -bun dev +# or from the root of the repo +pnpm dev:next ``` Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. diff --git a/apps/test-react-router-rsc/README.md b/apps/test-react-router-rsc/README.md index 5dc961e94..ee739101c 100644 --- a/apps/test-react-router-rsc/README.md +++ b/apps/test-react-router-rsc/README.md @@ -22,7 +22,7 @@ A modern template for exploring React Server Components (RSC) with React Router, Install the dependencies: ```bash -npm install +pnpm install ``` ### Development @@ -30,7 +30,9 @@ npm install Start the development server with HMR: ```bash -npm run dev +pnpm dev +# or from the root of the repo +pnpm dev:react-router-rsc ``` Your application will be available at `http://localhost:5173`. @@ -40,7 +42,7 @@ Your application will be available at `http://localhost:5173`. Create a production build: ```bash -npm run build +pnpm build ``` ## Running Production Build diff --git a/apps/test-react-router/README.md b/apps/test-react-router/README.md index efcc4d645..a0aa12441 100644 --- a/apps/test-react-router/README.md +++ b/apps/test-react-router/README.md @@ -20,7 +20,7 @@ A modern, production-ready template for building full-stack React applications u Install the dependencies: ```bash -npm install +pnpm install ``` ### Development @@ -28,7 +28,9 @@ npm install Start the development server with HMR: ```bash -npm run dev +pnpm dev +# or from the root of the repo +pnpm dev:react-router ``` Your application will be available at `http://localhost:5173`. @@ -38,7 +40,7 @@ Your application will be available at `http://localhost:5173`. Create a production build: ```bash -npm run build +pnpm build ``` ## Deployment diff --git a/apps/test-vite-react-17/README.md b/apps/test-vite-react-17/README.md index d2e77611f..c4579af55 100644 --- a/apps/test-vite-react-17/README.md +++ b/apps/test-vite-react-17/README.md @@ -2,72 +2,20 @@ This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. -Currently, two official plugins are available: +## Installation -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh +Install the dependencies: -## React Compiler - -The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). - -## Expanding the ESLint configuration - -If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: - -```js -export default defineConfig([ - globalIgnores(['dist']), - { - files: ['**/*.{ts,tsx}'], - extends: [ - // Other configs... - - // Remove tseslint.configs.recommended and replace with this - tseslint.configs.recommendedTypeChecked, - // Alternatively, use this for stricter rules - tseslint.configs.strictTypeChecked, - // Optionally, add this for stylistic rules - tseslint.configs.stylisticTypeChecked, - - // Other configs... - ], - languageOptions: { - parserOptions: { - project: ['./tsconfig.node.json', './tsconfig.app.json'], - tsconfigRootDir: import.meta.dirname, - }, - // other options... - }, - }, -]) +```bash +pnpm install ``` -You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: +## Development -```js -// eslint.config.js -import reactX from 'eslint-plugin-react-x' -import reactDom from 'eslint-plugin-react-dom' +Start the development server with HMR: -export default defineConfig([ - globalIgnores(['dist']), - { - files: ['**/*.{ts,tsx}'], - extends: [ - // Other configs... - // Enable lint rules for React - reactX.configs['recommended-typescript'], - // Enable lint rules for React DOM - reactDom.configs.recommended, - ], - languageOptions: { - parserOptions: { - project: ['./tsconfig.node.json', './tsconfig.app.json'], - tsconfigRootDir: import.meta.dirname, - }, - // other options... - }, - }, -]) +```bash +pnpm dev +# or from the root of the repo +pnpm dev:vite-react-17 ``` diff --git a/apps/test-vite-react-18/README.md b/apps/test-vite-react-18/README.md index d2e77611f..baf67d8b3 100644 --- a/apps/test-vite-react-18/README.md +++ b/apps/test-vite-react-18/README.md @@ -2,72 +2,20 @@ This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. -Currently, two official plugins are available: +## Installation -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh +Install the dependencies: -## React Compiler - -The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). - -## Expanding the ESLint configuration - -If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: - -```js -export default defineConfig([ - globalIgnores(['dist']), - { - files: ['**/*.{ts,tsx}'], - extends: [ - // Other configs... - - // Remove tseslint.configs.recommended and replace with this - tseslint.configs.recommendedTypeChecked, - // Alternatively, use this for stricter rules - tseslint.configs.strictTypeChecked, - // Optionally, add this for stylistic rules - tseslint.configs.stylisticTypeChecked, - - // Other configs... - ], - languageOptions: { - parserOptions: { - project: ['./tsconfig.node.json', './tsconfig.app.json'], - tsconfigRootDir: import.meta.dirname, - }, - // other options... - }, - }, -]) +```bash +pnpm install ``` -You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: +## Development -```js -// eslint.config.js -import reactX from 'eslint-plugin-react-x' -import reactDom from 'eslint-plugin-react-dom' +Start the development server with HMR: -export default defineConfig([ - globalIgnores(['dist']), - { - files: ['**/*.{ts,tsx}'], - extends: [ - // Other configs... - // Enable lint rules for React - reactX.configs['recommended-typescript'], - // Enable lint rules for React DOM - reactDom.configs.recommended, - ], - languageOptions: { - parserOptions: { - project: ['./tsconfig.node.json', './tsconfig.app.json'], - tsconfigRootDir: import.meta.dirname, - }, - // other options... - }, - }, -]) +```bash +pnpm dev +# or from the root of the repo +pnpm dev:vite-react-18 ``` diff --git a/apps/test-vite-react-19/README.md b/apps/test-vite-react-19/README.md index d2e77611f..a7f7c36d4 100644 --- a/apps/test-vite-react-19/README.md +++ b/apps/test-vite-react-19/README.md @@ -2,72 +2,20 @@ This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. -Currently, two official plugins are available: +## Installation -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh +Install the dependencies: -## React Compiler - -The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). - -## Expanding the ESLint configuration - -If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: - -```js -export default defineConfig([ - globalIgnores(['dist']), - { - files: ['**/*.{ts,tsx}'], - extends: [ - // Other configs... - - // Remove tseslint.configs.recommended and replace with this - tseslint.configs.recommendedTypeChecked, - // Alternatively, use this for stricter rules - tseslint.configs.strictTypeChecked, - // Optionally, add this for stylistic rules - tseslint.configs.stylisticTypeChecked, - - // Other configs... - ], - languageOptions: { - parserOptions: { - project: ['./tsconfig.node.json', './tsconfig.app.json'], - tsconfigRootDir: import.meta.dirname, - }, - // other options... - }, - }, -]) +```bash +pnpm install ``` -You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: +## Development -```js -// eslint.config.js -import reactX from 'eslint-plugin-react-x' -import reactDom from 'eslint-plugin-react-dom' +Start the development server with HMR: -export default defineConfig([ - globalIgnores(['dist']), - { - files: ['**/*.{ts,tsx}'], - extends: [ - // Other configs... - // Enable lint rules for React - reactX.configs['recommended-typescript'], - // Enable lint rules for React DOM - reactDom.configs.recommended, - ], - languageOptions: { - parserOptions: { - project: ['./tsconfig.node.json', './tsconfig.app.json'], - tsconfigRootDir: import.meta.dirname, - }, - // other options... - }, - }, -]) +```bash +pnpm dev +# or from the root of the repo +pnpm dev:vite-react-19 ``` From c4b2c7b9f9c3466ca247f6597d6227cf855e6798 Mon Sep 17 00:00:00 2001 From: Chance Strickland Date: Tue, 4 Nov 2025 11:39:48 -0800 Subject: [PATCH 03/11] add next pages --- apps/test-next/app/accessible-icon/page.tsx | 5 + apps/test-next/app/accordion/page.tsx | 5 + apps/test-next/app/alert-dialog/page.tsx | 5 + apps/test-next/app/arrow/page.tsx | 5 + apps/test-next/app/aspect-ratio/page.tsx | 5 + apps/test-next/app/avatar/page.tsx | 5 + apps/test-next/app/checkbox/page.tsx | 5 + apps/test-next/app/collapsible/page.tsx | 5 + apps/test-next/app/collection/page.tsx | 27 ++ apps/test-next/app/context-menu/page.tsx | 5 + apps/test-next/app/dialog/page.tsx | 5 + apps/test-next/app/direction/page.tsx | 11 + .../dismissable-layer.client.tsx | 64 +++ apps/test-next/app/dismissable-layer/page.tsx | 5 + apps/test-next/app/dropdown-menu/page.tsx | 5 + apps/test-next/app/focus-guards/page.tsx | 6 + apps/test-next/app/focus-scope/page.tsx | 12 + apps/test-next/app/form/page.tsx | 6 + apps/test-next/app/hover-card/page.tsx | 6 + apps/test-next/app/label/page.tsx | 6 + apps/test-next/app/layout.tsx | 31 +- apps/test-next/app/menu/page.tsx | 15 + apps/test-next/app/menubar/page.tsx | 6 + apps/test-next/app/navigation-menu/page.tsx | 5 + .../app/one-time-password-field/page.tsx | 5 + apps/test-next/app/page.tsx | 2 +- .../app/password-toggle-field/page.tsx | 5 + apps/test-next/app/popover/page.tsx | 5 + apps/test-next/app/popper/page.tsx | 15 + apps/test-next/app/portal/page.tsx | 13 + apps/test-next/app/progress/page.tsx | 5 + apps/test-next/app/radio-group/page.tsx | 5 + apps/test-next/app/roving-focus/page.tsx | 13 + apps/test-next/app/scroll-area/page.tsx | 5 + apps/test-next/app/select/page.tsx | 5 + apps/test-next/app/separator/page.tsx | 5 + apps/test-next/app/slider/page.tsx | 5 + apps/test-next/app/slot/page.tsx | 6 + apps/test-next/app/switch/page.tsx | 5 + apps/test-next/app/tabs/page.tsx | 5 + apps/test-next/app/toast/page.tsx | 5 + apps/test-next/app/toggle-group/page.tsx | 5 + apps/test-next/app/toggle/page.tsx | 5 + apps/test-next/app/toolbar/page.tsx | 5 + apps/test-next/app/tooltip/page.tsx | 5 + apps/test-next/app/visually-hidden/page.tsx | 5 + apps/test-next/eslint.config.mjs | 19 +- apps/test-next/package.json | 3 + apps/test-react-router-rsc/package.json | 3 + apps/test-react-router/package.json | 3 + apps/test-vite-react-17/package.json | 3 + apps/test-vite-react-18/package.json | 3 + apps/test-vite-react-19/package.json | 3 + .../components/accessible-icon.tsx | 12 + .../test-registry/components/accordion.tsx | 47 +++ .../test-registry/components/alert-dialog.tsx | 21 + internal/test-registry/components/arrow.tsx | 6 + .../test-registry/components/aspect-ratio.tsx | 24 ++ internal/test-registry/components/avatar.tsx | 11 + .../test-registry/components/checkbox.tsx | 10 + .../test-registry/components/collapsible.tsx | 11 + .../test-registry/components/collection.tsx | 103 +++++ .../test-registry/components/context-menu.tsx | 20 + internal/test-registry/components/dialog.tsx | 18 + .../test-registry/components/direction.tsx | 16 + .../components/dismissable-layer.tsx | 64 +++ .../components/dropdown-menu.tsx | 21 + .../test-registry/components/focus-guards.tsx | 27 ++ .../test-registry/components/focus-scope.tsx | 263 ++++++++++++ internal/test-registry/components/form.tsx | 15 + .../test-registry/components/hover-card.tsx | 16 + internal/test-registry/components/label.tsx | 6 + internal/test-registry/components/menu.tsx | 393 ++++++++++++++++++ internal/test-registry/components/menubar.tsx | 21 + .../components/navigation-menu.tsx | 21 + .../components/one-time-password-field.tsx | 28 ++ .../components/password-toggle-field.tsx | 61 +++ internal/test-registry/components/popover.tsx | 16 + internal/test-registry/components/popper.tsx | 144 +++++++ internal/test-registry/components/portal.tsx | 61 +++ .../test-registry/components/progress.tsx | 10 + .../test-registry/components/radio-group.tsx | 35 ++ .../test-registry/components/roving-focus.tsx | 202 +++++++++ .../test-registry/components/scroll-area.tsx | 77 ++++ internal/test-registry/components/select.tsx | 64 +++ .../test-registry/components/separator.tsx | 6 + internal/test-registry/components/slider.tsx | 52 +++ internal/test-registry/components/slot.tsx | 13 + internal/test-registry/components/switch.tsx | 10 + internal/test-registry/components/tabs.tsx | 24 ++ internal/test-registry/components/toast.tsx | 16 + .../test-registry/components/toggle-group.tsx | 11 + internal/test-registry/components/toggle.tsx | 11 + internal/test-registry/components/toolbar.tsx | 12 + internal/test-registry/components/tooltip.tsx | 18 + .../components/visually-hidden.tsx | 11 + internal/test-registry/eslint.config.js | 4 + internal/test-registry/package.json | 27 ++ internal/test-registry/test-registry.ts | 50 +++ internal/test-registry/tsconfig.json | 9 + pnpm-lock.yaml | 96 +++++ 101 files changed, 2626 insertions(+), 14 deletions(-) create mode 100644 apps/test-next/app/accessible-icon/page.tsx create mode 100644 apps/test-next/app/accordion/page.tsx create mode 100644 apps/test-next/app/alert-dialog/page.tsx create mode 100644 apps/test-next/app/arrow/page.tsx create mode 100644 apps/test-next/app/aspect-ratio/page.tsx create mode 100644 apps/test-next/app/avatar/page.tsx create mode 100644 apps/test-next/app/checkbox/page.tsx create mode 100644 apps/test-next/app/collapsible/page.tsx create mode 100644 apps/test-next/app/collection/page.tsx create mode 100644 apps/test-next/app/context-menu/page.tsx create mode 100644 apps/test-next/app/dialog/page.tsx create mode 100644 apps/test-next/app/direction/page.tsx create mode 100644 apps/test-next/app/dismissable-layer/dismissable-layer.client.tsx create mode 100644 apps/test-next/app/dismissable-layer/page.tsx create mode 100644 apps/test-next/app/dropdown-menu/page.tsx create mode 100644 apps/test-next/app/focus-guards/page.tsx create mode 100644 apps/test-next/app/focus-scope/page.tsx create mode 100644 apps/test-next/app/form/page.tsx create mode 100644 apps/test-next/app/hover-card/page.tsx create mode 100644 apps/test-next/app/label/page.tsx create mode 100644 apps/test-next/app/menu/page.tsx create mode 100644 apps/test-next/app/menubar/page.tsx create mode 100644 apps/test-next/app/navigation-menu/page.tsx create mode 100644 apps/test-next/app/one-time-password-field/page.tsx create mode 100644 apps/test-next/app/password-toggle-field/page.tsx create mode 100644 apps/test-next/app/popover/page.tsx create mode 100644 apps/test-next/app/popper/page.tsx create mode 100644 apps/test-next/app/portal/page.tsx create mode 100644 apps/test-next/app/progress/page.tsx create mode 100644 apps/test-next/app/radio-group/page.tsx create mode 100644 apps/test-next/app/roving-focus/page.tsx create mode 100644 apps/test-next/app/scroll-area/page.tsx create mode 100644 apps/test-next/app/select/page.tsx create mode 100644 apps/test-next/app/separator/page.tsx create mode 100644 apps/test-next/app/slider/page.tsx create mode 100644 apps/test-next/app/slot/page.tsx create mode 100644 apps/test-next/app/switch/page.tsx create mode 100644 apps/test-next/app/tabs/page.tsx create mode 100644 apps/test-next/app/toast/page.tsx create mode 100644 apps/test-next/app/toggle-group/page.tsx create mode 100644 apps/test-next/app/toggle/page.tsx create mode 100644 apps/test-next/app/toolbar/page.tsx create mode 100644 apps/test-next/app/tooltip/page.tsx create mode 100644 apps/test-next/app/visually-hidden/page.tsx create mode 100644 internal/test-registry/components/accessible-icon.tsx create mode 100644 internal/test-registry/components/accordion.tsx create mode 100644 internal/test-registry/components/alert-dialog.tsx create mode 100644 internal/test-registry/components/arrow.tsx create mode 100644 internal/test-registry/components/aspect-ratio.tsx create mode 100644 internal/test-registry/components/avatar.tsx create mode 100644 internal/test-registry/components/checkbox.tsx create mode 100644 internal/test-registry/components/collapsible.tsx create mode 100644 internal/test-registry/components/collection.tsx create mode 100644 internal/test-registry/components/context-menu.tsx create mode 100644 internal/test-registry/components/dialog.tsx create mode 100644 internal/test-registry/components/direction.tsx create mode 100644 internal/test-registry/components/dismissable-layer.tsx create mode 100644 internal/test-registry/components/dropdown-menu.tsx create mode 100644 internal/test-registry/components/focus-guards.tsx create mode 100644 internal/test-registry/components/focus-scope.tsx create mode 100644 internal/test-registry/components/form.tsx create mode 100644 internal/test-registry/components/hover-card.tsx create mode 100644 internal/test-registry/components/label.tsx create mode 100644 internal/test-registry/components/menu.tsx create mode 100644 internal/test-registry/components/menubar.tsx create mode 100644 internal/test-registry/components/navigation-menu.tsx create mode 100644 internal/test-registry/components/one-time-password-field.tsx create mode 100644 internal/test-registry/components/password-toggle-field.tsx create mode 100644 internal/test-registry/components/popover.tsx create mode 100644 internal/test-registry/components/popper.tsx create mode 100644 internal/test-registry/components/portal.tsx create mode 100644 internal/test-registry/components/progress.tsx create mode 100644 internal/test-registry/components/radio-group.tsx create mode 100644 internal/test-registry/components/roving-focus.tsx create mode 100644 internal/test-registry/components/scroll-area.tsx create mode 100644 internal/test-registry/components/select.tsx create mode 100644 internal/test-registry/components/separator.tsx create mode 100644 internal/test-registry/components/slider.tsx create mode 100644 internal/test-registry/components/slot.tsx create mode 100644 internal/test-registry/components/switch.tsx create mode 100644 internal/test-registry/components/tabs.tsx create mode 100644 internal/test-registry/components/toast.tsx create mode 100644 internal/test-registry/components/toggle-group.tsx create mode 100644 internal/test-registry/components/toggle.tsx create mode 100644 internal/test-registry/components/toolbar.tsx create mode 100644 internal/test-registry/components/tooltip.tsx create mode 100644 internal/test-registry/components/visually-hidden.tsx create mode 100644 internal/test-registry/eslint.config.js create mode 100644 internal/test-registry/package.json create mode 100644 internal/test-registry/test-registry.ts create mode 100644 internal/test-registry/tsconfig.json diff --git a/apps/test-next/app/accessible-icon/page.tsx b/apps/test-next/app/accessible-icon/page.tsx new file mode 100644 index 000000000..32b248e40 --- /dev/null +++ b/apps/test-next/app/accessible-icon/page.tsx @@ -0,0 +1,5 @@ +import * as AccessibleIcon from '@repo/test-registry/components/accessible-icon'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/accordion/page.tsx b/apps/test-next/app/accordion/page.tsx new file mode 100644 index 000000000..8b1ea7973 --- /dev/null +++ b/apps/test-next/app/accordion/page.tsx @@ -0,0 +1,5 @@ +import * as Accordion from '@repo/test-registry/components/accordion'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/alert-dialog/page.tsx b/apps/test-next/app/alert-dialog/page.tsx new file mode 100644 index 000000000..3d978ac60 --- /dev/null +++ b/apps/test-next/app/alert-dialog/page.tsx @@ -0,0 +1,5 @@ +import * as AlertDialog from '@repo/test-registry/components/alert-dialog'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/arrow/page.tsx b/apps/test-next/app/arrow/page.tsx new file mode 100644 index 000000000..a889e8b7a --- /dev/null +++ b/apps/test-next/app/arrow/page.tsx @@ -0,0 +1,5 @@ +import * as Arrow from '@repo/test-registry/components/arrow'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/aspect-ratio/page.tsx b/apps/test-next/app/aspect-ratio/page.tsx new file mode 100644 index 000000000..6a91fd4f3 --- /dev/null +++ b/apps/test-next/app/aspect-ratio/page.tsx @@ -0,0 +1,5 @@ +import * as AspectRatio from '@repo/test-registry/components/aspect-ratio'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/avatar/page.tsx b/apps/test-next/app/avatar/page.tsx new file mode 100644 index 000000000..75e98cfdf --- /dev/null +++ b/apps/test-next/app/avatar/page.tsx @@ -0,0 +1,5 @@ +import * as Avatar from '@repo/test-registry/components/avatar'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/checkbox/page.tsx b/apps/test-next/app/checkbox/page.tsx new file mode 100644 index 000000000..64f74ec0d --- /dev/null +++ b/apps/test-next/app/checkbox/page.tsx @@ -0,0 +1,5 @@ +import * as Checkbox from '@repo/test-registry/components/checkbox'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/collapsible/page.tsx b/apps/test-next/app/collapsible/page.tsx new file mode 100644 index 000000000..75b50f9f2 --- /dev/null +++ b/apps/test-next/app/collapsible/page.tsx @@ -0,0 +1,5 @@ +import * as Collapsible from '@repo/test-registry/components/collapsible'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/collection/page.tsx b/apps/test-next/app/collection/page.tsx new file mode 100644 index 000000000..daa473458 --- /dev/null +++ b/apps/test-next/app/collection/page.tsx @@ -0,0 +1,27 @@ +import * as React from 'react'; +import { + Unstable, + UnstableItem, + Stable, + StableItem, +} from '@repo/test-registry/components/collection'; + +export default function Page() { + return ( +
+

Unstable Collection

+ + Item 1 + Item 2 + Item 3 + +
+

Stable Collection

+ + Item 1 + Item 2 + Item 3 + +
+ ); +} diff --git a/apps/test-next/app/context-menu/page.tsx b/apps/test-next/app/context-menu/page.tsx new file mode 100644 index 000000000..b40cbe3e3 --- /dev/null +++ b/apps/test-next/app/context-menu/page.tsx @@ -0,0 +1,5 @@ +import * as ContextMenu from '@repo/test-registry/components/context-menu'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/dialog/page.tsx b/apps/test-next/app/dialog/page.tsx new file mode 100644 index 000000000..d7698910a --- /dev/null +++ b/apps/test-next/app/dialog/page.tsx @@ -0,0 +1,5 @@ +import * as Dialog from '@repo/test-registry/components/dialog'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/direction/page.tsx b/apps/test-next/app/direction/page.tsx new file mode 100644 index 000000000..c7ccfd91f --- /dev/null +++ b/apps/test-next/app/direction/page.tsx @@ -0,0 +1,11 @@ +import * as React from 'react'; +import * as Direction from '@repo/test-registry/components/direction'; + +export default function Page() { + return ( +
+ + +
+ ); +} diff --git a/apps/test-next/app/dismissable-layer/dismissable-layer.client.tsx b/apps/test-next/app/dismissable-layer/dismissable-layer.client.tsx new file mode 100644 index 000000000..055c86a36 --- /dev/null +++ b/apps/test-next/app/dismissable-layer/dismissable-layer.client.tsx @@ -0,0 +1,64 @@ +'use client'; +import * as React from 'react'; +import { DismissableLayer as DismissableLayerPrimitive } from 'radix-ui/internal'; + +function DismissableLayerImpl() { + const [disableOutsidePointerEvents, setDisableOutsidePointerEvents] = React.useState(false); + const [dismissed, setDismissed] = React.useState(false); + return ( +
+ {dismissed &&

Dismissed!

} + +
+ { + console.log('escape key down', event); + }} + onPointerDownOutside={(event) => { + console.log('pointer down outside', event); + }} + onFocusOutside={(event) => { + console.log('focus outside', event); + }} + onInteractOutside={(event) => { + console.log('interact outside', event); + }} + onDismiss={() => { + setDismissed(true); + console.log('dismiss'); + }} + > +
+

Hello!

+ +
+
+
+ ); +} + +export function DismissableLayer() { + const [key, setKey] = React.useState(''); + return ( +
+ +
+ +
+ ); +} diff --git a/apps/test-next/app/dismissable-layer/page.tsx b/apps/test-next/app/dismissable-layer/page.tsx new file mode 100644 index 000000000..cffa1af51 --- /dev/null +++ b/apps/test-next/app/dismissable-layer/page.tsx @@ -0,0 +1,5 @@ +import * as DismissableLayer from '@repo/test-registry/components/dismissable-layer'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/dropdown-menu/page.tsx b/apps/test-next/app/dropdown-menu/page.tsx new file mode 100644 index 000000000..d221b4aa8 --- /dev/null +++ b/apps/test-next/app/dropdown-menu/page.tsx @@ -0,0 +1,5 @@ +import * as DropdownMenu from '@repo/test-registry/components/dropdown-menu'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/focus-guards/page.tsx b/apps/test-next/app/focus-guards/page.tsx new file mode 100644 index 000000000..6ed83543e --- /dev/null +++ b/apps/test-next/app/focus-guards/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as FocusGuards from '@repo/test-registry/components/focus-guards'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/focus-scope/page.tsx b/apps/test-next/app/focus-scope/page.tsx new file mode 100644 index 000000000..7414dded4 --- /dev/null +++ b/apps/test-next/app/focus-scope/page.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import * as FocusScope from '@repo/test-registry/components/focus-scope'; + +export default function Page() { + return ( +
+ +
+ +
+ ); +} diff --git a/apps/test-next/app/form/page.tsx b/apps/test-next/app/form/page.tsx new file mode 100644 index 000000000..81118cf9e --- /dev/null +++ b/apps/test-next/app/form/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as Form from '@repo/test-registry/components/form'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/hover-card/page.tsx b/apps/test-next/app/hover-card/page.tsx new file mode 100644 index 000000000..08776e123 --- /dev/null +++ b/apps/test-next/app/hover-card/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as HoverCard from '@repo/test-registry/components/hover-card'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/label/page.tsx b/apps/test-next/app/label/page.tsx new file mode 100644 index 000000000..eeeee3c83 --- /dev/null +++ b/apps/test-next/app/label/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as Label from '@repo/test-registry/components/label'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/layout.tsx b/apps/test-next/app/layout.tsx index f3d497856..de7134241 100644 --- a/apps/test-next/app/layout.tsx +++ b/apps/test-next/app/layout.tsx @@ -1,4 +1,7 @@ +import type * as React from 'react'; import type { Metadata } from 'next'; +import { primitives } from '@repo/test-registry'; +import Link from 'next/link'; import './globals.css'; export const metadata: Metadata = { @@ -6,14 +9,30 @@ export const metadata: Metadata = { description: 'Generated by create next app', }; -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { +export default function Layout({ children }: { children: React.ReactNode }) { return ( - {children} + +

Next.js testing

+
+
+

Public APIs

+ {primitives.public.map((primitive) => ( + + {primitive.name} + + ))} +
+

Internal APIs

+ {primitives.internal.map((primitive) => ( + + {primitive.name} + + ))} +
+
{children}
+
+ ); } diff --git a/apps/test-next/app/menu/page.tsx b/apps/test-next/app/menu/page.tsx new file mode 100644 index 000000000..b6d40386b --- /dev/null +++ b/apps/test-next/app/menu/page.tsx @@ -0,0 +1,15 @@ +import * as Menu from '@repo/test-registry/components/menu'; + +export default function Page() { + return ( +
+ +
+ +
+ +
+ +
+ ); +} diff --git a/apps/test-next/app/menubar/page.tsx b/apps/test-next/app/menubar/page.tsx new file mode 100644 index 000000000..1e256aaf9 --- /dev/null +++ b/apps/test-next/app/menubar/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as Menubar from '@repo/test-registry/components/menubar'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/navigation-menu/page.tsx b/apps/test-next/app/navigation-menu/page.tsx new file mode 100644 index 000000000..1cdfb0d84 --- /dev/null +++ b/apps/test-next/app/navigation-menu/page.tsx @@ -0,0 +1,5 @@ +import * as NavigationMenu from '@repo/test-registry/components/navigation-menu'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/one-time-password-field/page.tsx b/apps/test-next/app/one-time-password-field/page.tsx new file mode 100644 index 000000000..756d1d8ab --- /dev/null +++ b/apps/test-next/app/one-time-password-field/page.tsx @@ -0,0 +1,5 @@ +import * as OneTimePasswordField from '@repo/test-registry/components/one-time-password-field'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/page.tsx b/apps/test-next/app/page.tsx index aa5883279..bdf0e1fd2 100644 --- a/apps/test-next/app/page.tsx +++ b/apps/test-next/app/page.tsx @@ -1,3 +1,3 @@ export default function Home() { - return
Home
; + return
Please select a primitive from the sidebar
; } diff --git a/apps/test-next/app/password-toggle-field/page.tsx b/apps/test-next/app/password-toggle-field/page.tsx new file mode 100644 index 000000000..637a53c7a --- /dev/null +++ b/apps/test-next/app/password-toggle-field/page.tsx @@ -0,0 +1,5 @@ +import * as PasswordToggleField from '@repo/test-registry/components/password-toggle-field'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/popover/page.tsx b/apps/test-next/app/popover/page.tsx new file mode 100644 index 000000000..69df924b5 --- /dev/null +++ b/apps/test-next/app/popover/page.tsx @@ -0,0 +1,5 @@ +import * as Popover from '@repo/test-registry/components/popover'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/popper/page.tsx b/apps/test-next/app/popper/page.tsx new file mode 100644 index 000000000..1445cb5c4 --- /dev/null +++ b/apps/test-next/app/popper/page.tsx @@ -0,0 +1,15 @@ +import * as Popper from '@repo/test-registry/components/popper'; + +export default function Page() { + return ( +
+ +
+ +
+ +
+ +
+ ); +} diff --git a/apps/test-next/app/portal/page.tsx b/apps/test-next/app/portal/page.tsx new file mode 100644 index 000000000..a869cfdcd --- /dev/null +++ b/apps/test-next/app/portal/page.tsx @@ -0,0 +1,13 @@ +import * as Portal from '@repo/test-registry/components/portal'; + +export default function Page() { + return ( +
+ +
+ +
+ +
+ ); +} diff --git a/apps/test-next/app/progress/page.tsx b/apps/test-next/app/progress/page.tsx new file mode 100644 index 000000000..1c3788f23 --- /dev/null +++ b/apps/test-next/app/progress/page.tsx @@ -0,0 +1,5 @@ +import * as Progress from '@repo/test-registry/components/progress'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/radio-group/page.tsx b/apps/test-next/app/radio-group/page.tsx new file mode 100644 index 000000000..4737c444a --- /dev/null +++ b/apps/test-next/app/radio-group/page.tsx @@ -0,0 +1,5 @@ +import * as RadioGroup from '@repo/test-registry/components/radio-group'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/roving-focus/page.tsx b/apps/test-next/app/roving-focus/page.tsx new file mode 100644 index 000000000..e9fd86bb8 --- /dev/null +++ b/apps/test-next/app/roving-focus/page.tsx @@ -0,0 +1,13 @@ +import * as React from 'react'; +import * as RovingFocus from '@repo/test-registry/components/roving-focus'; + +export default function Page() { + return ( + <> +

Basic

+ +

Nested

+ + + ); +} diff --git a/apps/test-next/app/scroll-area/page.tsx b/apps/test-next/app/scroll-area/page.tsx new file mode 100644 index 000000000..2975e1500 --- /dev/null +++ b/apps/test-next/app/scroll-area/page.tsx @@ -0,0 +1,5 @@ +import * as ScrollArea from '@repo/test-registry/components/scroll-area'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/select/page.tsx b/apps/test-next/app/select/page.tsx new file mode 100644 index 000000000..ebab62853 --- /dev/null +++ b/apps/test-next/app/select/page.tsx @@ -0,0 +1,5 @@ +import * as Select from '@repo/test-registry/components/select'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/separator/page.tsx b/apps/test-next/app/separator/page.tsx new file mode 100644 index 000000000..befc17592 --- /dev/null +++ b/apps/test-next/app/separator/page.tsx @@ -0,0 +1,5 @@ +import * as Separator from '@repo/test-registry/components/separator'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/slider/page.tsx b/apps/test-next/app/slider/page.tsx new file mode 100644 index 000000000..f44843a0f --- /dev/null +++ b/apps/test-next/app/slider/page.tsx @@ -0,0 +1,5 @@ +import * as Slider from '@repo/test-registry/components/slider'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/slot/page.tsx b/apps/test-next/app/slot/page.tsx new file mode 100644 index 000000000..9ee17eeb0 --- /dev/null +++ b/apps/test-next/app/slot/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as Slot from '@repo/test-registry/components/slot'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/switch/page.tsx b/apps/test-next/app/switch/page.tsx new file mode 100644 index 000000000..7a331ff84 --- /dev/null +++ b/apps/test-next/app/switch/page.tsx @@ -0,0 +1,5 @@ +import * as Switch from '@repo/test-registry/components/switch'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/tabs/page.tsx b/apps/test-next/app/tabs/page.tsx new file mode 100644 index 000000000..aa763ecde --- /dev/null +++ b/apps/test-next/app/tabs/page.tsx @@ -0,0 +1,5 @@ +import * as Tabs from '@repo/test-registry/components/tabs'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/toast/page.tsx b/apps/test-next/app/toast/page.tsx new file mode 100644 index 000000000..e5a76bb8b --- /dev/null +++ b/apps/test-next/app/toast/page.tsx @@ -0,0 +1,5 @@ +import * as Toast from '@repo/test-registry/components/toast'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/toggle-group/page.tsx b/apps/test-next/app/toggle-group/page.tsx new file mode 100644 index 000000000..a7bea7f0e --- /dev/null +++ b/apps/test-next/app/toggle-group/page.tsx @@ -0,0 +1,5 @@ +import * as ToggleGroup from '@repo/test-registry/components/toggle-group'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/toggle/page.tsx b/apps/test-next/app/toggle/page.tsx new file mode 100644 index 000000000..df722f71c --- /dev/null +++ b/apps/test-next/app/toggle/page.tsx @@ -0,0 +1,5 @@ +import * as Toggle from '@repo/test-registry/components/toggle'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/toolbar/page.tsx b/apps/test-next/app/toolbar/page.tsx new file mode 100644 index 000000000..31024ad77 --- /dev/null +++ b/apps/test-next/app/toolbar/page.tsx @@ -0,0 +1,5 @@ +import * as Toolbar from '@repo/test-registry/components/toolbar'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/tooltip/page.tsx b/apps/test-next/app/tooltip/page.tsx new file mode 100644 index 000000000..efe77a52e --- /dev/null +++ b/apps/test-next/app/tooltip/page.tsx @@ -0,0 +1,5 @@ +import * as Tooltip from '@repo/test-registry/components/tooltip'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/app/visually-hidden/page.tsx b/apps/test-next/app/visually-hidden/page.tsx new file mode 100644 index 000000000..e20db888d --- /dev/null +++ b/apps/test-next/app/visually-hidden/page.tsx @@ -0,0 +1,5 @@ +import * as VisuallyHidden from '@repo/test-registry/components/visually-hidden'; + +export default function Page() { + return ; +} diff --git a/apps/test-next/eslint.config.mjs b/apps/test-next/eslint.config.mjs index 05e726d1b..475c68fbf 100644 --- a/apps/test-next/eslint.config.mjs +++ b/apps/test-next/eslint.config.mjs @@ -1,6 +1,6 @@ -import { defineConfig, globalIgnores } from "eslint/config"; -import nextVitals from "eslint-config-next/core-web-vitals"; -import nextTs from "eslint-config-next/typescript"; +import { defineConfig, globalIgnores } from 'eslint/config'; +import nextVitals from 'eslint-config-next/core-web-vitals'; +import nextTs from 'eslint-config-next/typescript'; const eslintConfig = defineConfig([ ...nextVitals, @@ -8,11 +8,16 @@ const eslintConfig = defineConfig([ // Override default ignores of eslint-config-next. globalIgnores([ // Default ignores of eslint-config-next: - ".next/**", - "out/**", - "build/**", - "next-env.d.ts", + '.next/**', + 'out/**', + 'build/**', + 'next-env.d.ts', ]), + { + rules: { + '@next/next/no-img-element': 'off', + }, + }, ]); export default eslintConfig; diff --git a/apps/test-next/package.json b/apps/test-next/package.json index d7da9a874..1352797d0 100644 --- a/apps/test-next/package.json +++ b/apps/test-next/package.json @@ -9,10 +9,13 @@ "lint": "eslint" }, "dependencies": { + "@radix-ui/react-icons": "^1.3.2", "@repo/test-data": "workspace:*", + "@repo/test-registry": "workspace:*", "@repo/test-styles": "workspace:*", "next": "16.0.1", "react": "19.2.0", + "radix-ui": "workspace:*", "react-dom": "19.2.0" }, "devDependencies": { diff --git a/apps/test-react-router-rsc/package.json b/apps/test-react-router-rsc/package.json index e713ba552..e0344e63c 100644 --- a/apps/test-react-router-rsc/package.json +++ b/apps/test-react-router-rsc/package.json @@ -10,11 +10,14 @@ "typecheck": "react-router typegen && tsc" }, "dependencies": { + "@radix-ui/react-icons": "^1.3.2", "@react-router/serve": "7.9.2", "@remix-run/node-fetch-server": "0.9.0", "@repo/test-data": "workspace:*", + "@repo/test-registry": "workspace:*", "@repo/test-styles": "workspace:*", "isbot": "^5.1.32", + "radix-ui": "workspace:*", "react": "19.2.0", "react-dom": "19.2.0", "react-router": "7.9.2" diff --git a/apps/test-react-router/package.json b/apps/test-react-router/package.json index e8cb606ba..6759dca6c 100644 --- a/apps/test-react-router/package.json +++ b/apps/test-react-router/package.json @@ -10,11 +10,14 @@ "typecheck": "react-router typegen && tsc" }, "dependencies": { + "@radix-ui/react-icons": "^1.3.2", "@react-router/node": "^7.9.5", "@react-router/serve": "^7.9.5", "@repo/test-data": "workspace:*", + "@repo/test-registry": "workspace:*", "@repo/test-styles": "workspace:*", "isbot": "^5.1.32", + "radix-ui": "workspace:*", "react": "^19.1.1", "react-dom": "^19.1.1", "react-router": "^7.9.5" diff --git a/apps/test-vite-react-17/package.json b/apps/test-vite-react-17/package.json index e61a8b7d5..e67cc0079 100644 --- a/apps/test-vite-react-17/package.json +++ b/apps/test-vite-react-17/package.json @@ -10,8 +10,11 @@ "preview": "vite preview" }, "dependencies": { + "@radix-ui/react-icons": "^1.3.2", "@repo/test-data": "workspace:*", + "@repo/test-registry": "workspace:*", "@repo/test-styles": "workspace:*", + "radix-ui": "workspace:*", "react": "^17.0.2", "react-dom": "^17.0.2" }, diff --git a/apps/test-vite-react-18/package.json b/apps/test-vite-react-18/package.json index 98cc8f9de..bc4fbe239 100644 --- a/apps/test-vite-react-18/package.json +++ b/apps/test-vite-react-18/package.json @@ -10,8 +10,11 @@ "preview": "vite preview" }, "dependencies": { + "@radix-ui/react-icons": "^1.3.2", "@repo/test-data": "workspace:*", + "@repo/test-registry": "workspace:*", "@repo/test-styles": "workspace:*", + "radix-ui": "workspace:*", "react": "^18.3.1", "react-dom": "^18.3.1" }, diff --git a/apps/test-vite-react-19/package.json b/apps/test-vite-react-19/package.json index f2860c72a..1bb149e4a 100644 --- a/apps/test-vite-react-19/package.json +++ b/apps/test-vite-react-19/package.json @@ -10,8 +10,11 @@ "preview": "vite preview" }, "dependencies": { + "@radix-ui/react-icons": "^1.3.2", "@repo/test-data": "workspace:*", + "@repo/test-registry": "workspace:*", "@repo/test-styles": "workspace:*", + "radix-ui": "workspace:*", "react": "^19.1.1", "react-dom": "^19.1.1" }, diff --git a/internal/test-registry/components/accessible-icon.tsx b/internal/test-registry/components/accessible-icon.tsx new file mode 100644 index 000000000..d1114ae06 --- /dev/null +++ b/internal/test-registry/components/accessible-icon.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { AccessibleIcon } from 'radix-ui'; + +export function Basic() { + return ( + + ); +} diff --git a/internal/test-registry/components/accordion.tsx b/internal/test-registry/components/accordion.tsx new file mode 100644 index 000000000..ce99094d4 --- /dev/null +++ b/internal/test-registry/components/accordion.tsx @@ -0,0 +1,47 @@ +import * as React from 'react'; +import { Accordion } from 'radix-ui'; + +export function Basic() { + return ( + + + + One + + + Per erat orci nostra luctus sociosqu mus risus penatibus, duis elit vulputate viverra + integer ullamcorper congue curabitur sociis, nisi malesuada scelerisque quam suscipit + habitant sed. + + + + + Two + + + Cursus sed mattis commodo fermentum conubia ipsum pulvinar sagittis, diam eget bibendum + porta nascetur ac dictum, leo tellus dis integer platea ultrices mi. + + + + + Three (disabled) + + + Sociis hac sapien turpis conubia sagittis justo dui, inceptos penatibus feugiat himenaeos + euismod magna, nec tempor pulvinar eu etiam mattis. + + + + + Four + + + Odio placerat quisque sapien sagittis non sociis ligula penatibus dignissim vitae, enim + vulputate nullam semper potenti etiam volutpat libero. + + + + + ); +} diff --git a/internal/test-registry/components/alert-dialog.tsx b/internal/test-registry/components/alert-dialog.tsx new file mode 100644 index 000000000..bd79d9532 --- /dev/null +++ b/internal/test-registry/components/alert-dialog.tsx @@ -0,0 +1,21 @@ +import * as React from 'react'; +import { AlertDialog } from 'radix-ui'; + +export function Basic() { + return ( + + delete everything + + + + Are you sure? + + This will do a very dangerous thing. Thar be dragons! + + yolo, do it + maybe not + + + + ); +} diff --git a/internal/test-registry/components/arrow.tsx b/internal/test-registry/components/arrow.tsx new file mode 100644 index 000000000..9a4c2eb31 --- /dev/null +++ b/internal/test-registry/components/arrow.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import { Arrow } from 'radix-ui/internal'; + +export function Basic() { + return ; +} diff --git a/internal/test-registry/components/aspect-ratio.tsx b/internal/test-registry/components/aspect-ratio.tsx new file mode 100644 index 000000000..ce477b7d8 --- /dev/null +++ b/internal/test-registry/components/aspect-ratio.tsx @@ -0,0 +1,24 @@ +import * as React from 'react'; +import { AspectRatio } from 'radix-ui'; + +export function Basic() { + return ( +
+ + Landscape photograph by Tobias Tullius + +
+ ); +} diff --git a/internal/test-registry/components/avatar.tsx b/internal/test-registry/components/avatar.tsx new file mode 100644 index 000000000..bc84b67f1 --- /dev/null +++ b/internal/test-registry/components/avatar.tsx @@ -0,0 +1,11 @@ +import * as React from 'react'; +import { Avatar } from 'radix-ui'; + +export function Basic() { + return ( + + A + + + ); +} diff --git a/internal/test-registry/components/checkbox.tsx b/internal/test-registry/components/checkbox.tsx new file mode 100644 index 000000000..66f29158b --- /dev/null +++ b/internal/test-registry/components/checkbox.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import { Checkbox } from 'radix-ui'; + +export function Basic() { + return ( + + [ โœ” ] + + ); +} diff --git a/internal/test-registry/components/collapsible.tsx b/internal/test-registry/components/collapsible.tsx new file mode 100644 index 000000000..d4545eace --- /dev/null +++ b/internal/test-registry/components/collapsible.tsx @@ -0,0 +1,11 @@ +import * as React from 'react'; +import { Collapsible } from 'radix-ui'; + +export function Basic() { + return ( + + Trigger + Content + + ); +} diff --git a/internal/test-registry/components/collection.tsx b/internal/test-registry/components/collection.tsx new file mode 100644 index 000000000..29060e37a --- /dev/null +++ b/internal/test-registry/components/collection.tsx @@ -0,0 +1,103 @@ +'use client'; +import * as React from 'react'; +import { Collection as CollectionPrimitive } from 'radix-ui/internal'; +import type { Context } from 'radix-ui/internal'; + +const ElementHashMap = new WeakMap(); + +const [ + UnstableCollection, + { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + useCollection: useUnstableCollection, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + createCollectionScope: createUnstableCollectionScope, + useInitCollection: useInitUnstableCollection, + }, +] = CollectionPrimitive.unstable_createCollection< + HTMLDivElement, + { + test: number; + // TODO: remove when package is updated to extend BaseItemData internally + id?: string; + } +>('UNSTABLE'); + +const [ + Collection, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + useCollection, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + createCollectionScope, +] = CollectionPrimitive.createCollection('STABLE'); + +type ScopedProps

= P & { __scopeCollection?: Context.Scope }; + +export function Unstable(props: ScopedProps<{ children: React.ReactNode }>) { + const collectionState = useInitUnstableCollection(); + const [collection] = collectionState; + + return ( +

+ {collection.size ? ( +
+ {Array.from(collection).map(([element, { element: _, ...data }]) => { + let key = ElementHashMap.get(element); + if (!key) { + key = crypto.randomUUID(); + } + return ( + +
Item content: {element.textContent}
+
Item data: {JSON.stringify(data)}
+
+ ); + })} +
+ ) : ( +

No items in collection

+ )} +
+ + +
{props.children}
+
+
+
+ ); +} + +export function UnstableItem(props: ScopedProps<{ children: React.ReactNode }>) { + return ( + +
{props.children}
+
+ ); +} + +export function Stable(props: ScopedProps<{ children: React.ReactNode }>) { + return ( + + +
{props.children}
+
+
+ ); +} + +export function StableItem(props: ScopedProps<{ children: React.ReactNode }>) { + return ( + +
{props.children}
+
+ ); +} + +function getElementKey(element: HTMLDivElement) { + let key = ElementHashMap.get(element); + if (!key) { + key = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); + ElementHashMap.set(element, key); + } + return key; +} diff --git a/internal/test-registry/components/context-menu.tsx b/internal/test-registry/components/context-menu.tsx new file mode 100644 index 000000000..0169cd0c3 --- /dev/null +++ b/internal/test-registry/components/context-menu.tsx @@ -0,0 +1,20 @@ +import * as React from 'react'; +import { ContextMenu } from 'radix-ui'; + +export function Basic() { + return ( + + Right click here + + + Undo + Redo + + Cut + Copy + Paste + + + + ); +} diff --git a/internal/test-registry/components/dialog.tsx b/internal/test-registry/components/dialog.tsx new file mode 100644 index 000000000..a15587e75 --- /dev/null +++ b/internal/test-registry/components/dialog.tsx @@ -0,0 +1,18 @@ +import * as React from 'react'; +import { Dialog } from 'radix-ui'; + +export function Basic() { + return ( + + open + + + + Title + Description + close + + + + ); +} diff --git a/internal/test-registry/components/direction.tsx b/internal/test-registry/components/direction.tsx new file mode 100644 index 000000000..3d2a9bb47 --- /dev/null +++ b/internal/test-registry/components/direction.tsx @@ -0,0 +1,16 @@ +'use client'; +import * as React from 'react'; +import { Direction } from 'radix-ui'; + +export function Basic({ dir }: { dir: 'ltr' | 'rtl' }) { + return ( + + + + ); +} + +function DirectionReader() { + const dir = Direction.useDirection(); + return
Direction is {dir}
; +} diff --git a/internal/test-registry/components/dismissable-layer.tsx b/internal/test-registry/components/dismissable-layer.tsx new file mode 100644 index 000000000..c8b3041cc --- /dev/null +++ b/internal/test-registry/components/dismissable-layer.tsx @@ -0,0 +1,64 @@ +'use client'; +import * as React from 'react'; +import { DismissableLayer as DismissableLayerPrimitive } from 'radix-ui/internal'; + +export function Basic() { + const [key, setKey] = React.useState(''); + return ( +
+ +
+ +
+ ); +} + +function DismissableLayerImpl() { + const [disableOutsidePointerEvents, setDisableOutsidePointerEvents] = React.useState(false); + const [dismissed, setDismissed] = React.useState(false); + return ( +
+ {dismissed &&

Dismissed!

} + +
+ { + console.log('escape key down', event); + }} + onPointerDownOutside={(event) => { + console.log('pointer down outside', event); + }} + onFocusOutside={(event) => { + console.log('focus outside', event); + }} + onInteractOutside={(event) => { + console.log('interact outside', event); + }} + onDismiss={() => { + setDismissed(true); + console.log('dismiss'); + }} + > +
+

Hello!

+ +
+
+
+ ); +} diff --git a/internal/test-registry/components/dropdown-menu.tsx b/internal/test-registry/components/dropdown-menu.tsx new file mode 100644 index 000000000..b5cf8a897 --- /dev/null +++ b/internal/test-registry/components/dropdown-menu.tsx @@ -0,0 +1,21 @@ +import * as React from 'react'; +import { DropdownMenu } from 'radix-ui'; + +export function Basic() { + return ( + + Open + + + Undo + Redo + + Cut + Copy + Paste + + + + + ); +} diff --git a/internal/test-registry/components/focus-guards.tsx b/internal/test-registry/components/focus-guards.tsx new file mode 100644 index 000000000..8d782690b --- /dev/null +++ b/internal/test-registry/components/focus-guards.tsx @@ -0,0 +1,27 @@ +'use client'; +import * as React from 'react'; +import { FocusGuards as FocusGuardsPrimitive } from 'radix-ui/internal'; + +export function Basic() { + const [disabled, setDisabled] = React.useState(false); + return ( +
+ + +
+

Hello!

+
+
+
+ ); +} + +function FocusGuards({ children, disabled }: { children: React.ReactNode; disabled: boolean }) { + return disabled ? ( + children + ) : ( + {children} + ); +} diff --git a/internal/test-registry/components/focus-scope.tsx b/internal/test-registry/components/focus-scope.tsx new file mode 100644 index 000000000..b52934ca2 --- /dev/null +++ b/internal/test-registry/components/focus-scope.tsx @@ -0,0 +1,263 @@ +'use client'; +import React from 'react'; +import { FocusScope } from 'radix-ui/internal'; + +export function Basic() { + const [trapped, setTrapped] = React.useState(false); + const [hasDestroyButton, setHasDestroyButton] = React.useState(true); + + return ( + <> +
+ {' '} + +
+ {trapped ? ( + +
+ + + + {hasDestroyButton && ( +
+ +
+ )} + +
+
+ ) : null} +
+ +
+ + ); +} + +export function Multiple() { + const [trapped1, setTrapped1] = React.useState(false); + const [trapped2, setTrapped2] = React.useState(false); + + return ( +
+
+ +
+ {trapped1 ? ( + +
+

One

+ + + + +
+
+ ) : null} + +
+ +
+ {trapped2 ? ( + +
+

Two

+ + + + +
+
+ ) : null} +
+ +
+
+ ); +} + +// true => default focus, false => no focus, ref => focus element +type FocusParam = boolean | React.RefObject; + +export const WithOptions = () => { + const [open, setOpen] = React.useState(false); + const [isEmptyForm, setIsEmptyForm] = React.useState(false); + + const [trapFocus, setTrapFocus] = React.useState(false); + const [focusOnMount, setFocusOnMount] = React.useState(false); + const [focusOnUnmount, setFocusOnUnmount] = React.useState(false); + + const ageFieldRef = React.useRef(null); + const nextButtonRef = React.useRef(null); + + return ( +
+

FocusScope

+ +
+ + + {focusOnMount !== false && !isEmptyForm && ( + + )} + {focusOnMount !== false && ( + + )} + + {focusOnUnmount !== false && ( + + )} +
+ +
+ +
+ + + + {open ? ( + { + if (focusOnMount !== true) { + event.preventDefault(); + if (focusOnMount) focusOnMount.current?.focus(); + } + }} + onUnmountAutoFocus={(event) => { + if (focusOnUnmount !== true) { + event.preventDefault(); + if (focusOnUnmount) focusOnUnmount.current?.focus(); + } + }} + > +
+ {!isEmptyForm && ( + <> + + + + + + )} +
+
+ ) : null} + + +
+ ); +}; diff --git a/internal/test-registry/components/form.tsx b/internal/test-registry/components/form.tsx new file mode 100644 index 000000000..ea62cea12 --- /dev/null +++ b/internal/test-registry/components/form.tsx @@ -0,0 +1,15 @@ +import * as React from 'react'; +import { Form } from 'radix-ui'; + +export function Basic() { + return ( + + + Email + + Value is missing + Email is invalid + + + ); +} diff --git a/internal/test-registry/components/hover-card.tsx b/internal/test-registry/components/hover-card.tsx new file mode 100644 index 000000000..de6c9620f --- /dev/null +++ b/internal/test-registry/components/hover-card.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import { HoverCard } from 'radix-ui'; + +export function Basic() { + return ( + + Hover me + + + + Nicely done! + + + + ); +} diff --git a/internal/test-registry/components/label.tsx b/internal/test-registry/components/label.tsx new file mode 100644 index 000000000..62dc3938b --- /dev/null +++ b/internal/test-registry/components/label.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import { Label } from 'radix-ui'; + +export function Basic() { + return Label; +} diff --git a/internal/test-registry/components/menu.tsx b/internal/test-registry/components/menu.tsx new file mode 100644 index 000000000..d2915e1e8 --- /dev/null +++ b/internal/test-registry/components/menu.tsx @@ -0,0 +1,393 @@ +'use client'; +import * as React from 'react'; +import { Direction } from 'radix-ui'; +import { Menu } from 'radix-ui/internal'; +import { foodGroups } from '@repo/test-data/foods'; + +export function Basic() { + const [animated, setAnimated] = React.useState(false); + return ( +
+ +
+ + window.alert('undo')}> + Undo + + window.alert('redo')}> + Redo + + + window.alert('cut')}> + Cut + + window.alert('copy')}> + Copy + + window.alert('paste')}> + Paste + + +
+ ); +} + +export function Submenus() { + const [open1, setOpen1] = React.useState(false); + const [open2, setOpen2] = React.useState(false); + const [open3, setOpen3] = React.useState(false); + const [open4, setOpen4] = React.useState(false); + const [rtl, setRtl] = React.useState(false); + const [animated, setAnimated] = React.useState(false); + + React.useEffect(() => { + if (rtl) { + document.documentElement.setAttribute('dir', 'rtl'); + return () => document.documentElement.removeAttribute('dir'); + } + }, [rtl]); + + return ( + +
+ + +
+ + window.alert('undo')}> + Undo + + + + Disabled + + window.alert('one')}> + One + + + window.alert('one')}> + One + + window.alert('two')}> + Two + + window.alert('three')}> + Three + + window.alert('four')}> + Four + + window.alert('five')}> + Five + + window.alert('six')}> + Six + + + + window.alert('one')}> + One + + window.alert('two')}> + Two + + window.alert('three')}> + Three + + + window.alert('two')}>Two + + window.alert('one')}> + One + + window.alert('two')}> + Two + + window.alert('three')}> + Three + + + window.alert('three')}> + Three + + + + + window.alert('cut')}> + Cut + + window.alert('copy')}> + Copy + + window.alert('paste')}> + Paste + + +
+ ); +} + +export function WithLabels() { + return ( + + {foodGroups.map((foodGroup, index) => ( + + {foodGroup.label && ( + + {foodGroup.label} + + )} + {foodGroup.foods.map((food) => ( + window.alert(food.label)} + className="MenuItem" + > + {food.label} + + ))} + {index < foodGroups.length - 1 && } + + ))} + + ); +} + +const suits = [ + { emoji: 'โ™ฅ๏ธ', label: 'Hearts' }, + { emoji: 'โ™ ๏ธ', label: 'Spades' }, + { emoji: 'โ™ฆ๏ธ', label: 'Diamonds' }, + { emoji: 'โ™ฃ๏ธ', label: 'Clubs' }, +]; + +export function Typeahead() { + return ( + <> +

Testing ground for typeahead behavior

+
+
+

Text labels

+
+

For comparison try the closed select below

+ +
+ +
+ +
+

Complex children

+

(relying on `.textContent` โ€” default)

+ + {suits.map((suit) => ( + + {suit.label} + + {suit.emoji} + + + ))} + +
+ +
+

Complex children

+

(with explicit `textValue` prop)

+ + {suits.map((suit) => ( + + + {suit.emoji} + + {suit.label} + + ))} + +
+
+ + ); +} + +export function CheckboxItems() { + const options = ['Crows', 'Ravens', 'Magpies', 'Jackdaws']; + + const [selection, setSelection] = React.useState([]); + + const handleSelectAll = () => { + setSelection((currentSelection) => (currentSelection.length === options.length ? [] : options)); + }; + + return ( + + + Select all + + {selection.length === options.length ? : 'โ€”'} + + + + {options.map((option) => ( + + setSelection((current) => + current.includes(option) + ? current.filter((el) => el !== option) + : current.concat(option), + ) + } + > + {option} + + + + + ))} + + ); +} + +export function RadioItems() { + const files = ['README.md', 'index.js', 'page.css']; + const [file, setFile] = React.useState(files[1]); + + return ( + + window.alert('minimize')}> + Minimize window + + window.alert('zoom')}> + Zoom + + window.alert('smaller')}> + Smaller + + + + {files.map((file) => ( + + {file} + + + + + ))} + + + ); +} + +type MenuProps = Omit< + React.ComponentProps & + React.ComponentProps & { animated?: boolean }, + 'trapFocus' | 'onCloseAutoFocus' | 'disableOutsidePointerEvents' | 'disableOutsideScroll' +>; + +function MenuWithAnchor(props: MenuProps) { + const { open = true, children, animated, ...contentProps } = props; + return ( + {}} modal={false}> + {/* inline-block allows anchor to move when rtl changes on document */} + + + event.preventDefault()} + align="start" + data-animated={animated || undefined} + {...contentProps} + className={['MenuContent', contentProps.className].filter(Boolean).join(' ')} + > + {children} + + + + ); +} + +function Submenu(props: MenuProps & { animated: boolean; disabled?: boolean; heading?: string }) { + const { + heading = 'Submenu', + open = true, + onOpenChange, + children, + animated, + disabled, + ...contentProps + } = props; + return ( + + + {heading} โ†’ + + + + {children} + + + + ); +} + +function TickIcon() { + return ( + + + + ); +} diff --git a/internal/test-registry/components/menubar.tsx b/internal/test-registry/components/menubar.tsx new file mode 100644 index 000000000..68a9bac05 --- /dev/null +++ b/internal/test-registry/components/menubar.tsx @@ -0,0 +1,21 @@ +import * as React from 'react'; +import { Menubar } from 'radix-ui'; + +export function Basic() { + return ( + + + Open + + + Menu + Item 1 + Item 2 + Item 3 + + + + + + ); +} diff --git a/internal/test-registry/components/navigation-menu.tsx b/internal/test-registry/components/navigation-menu.tsx new file mode 100644 index 000000000..22bcb104c --- /dev/null +++ b/internal/test-registry/components/navigation-menu.tsx @@ -0,0 +1,21 @@ +import * as React from 'react'; +import { NavigationMenu } from 'radix-ui'; + +export function Basic() { + return ( + + + + Nav Menu Item 1 + + Link + + + + + Nav Menu Item 2 + + + + ); +} diff --git a/internal/test-registry/components/one-time-password-field.tsx b/internal/test-registry/components/one-time-password-field.tsx new file mode 100644 index 000000000..ca60e72ae --- /dev/null +++ b/internal/test-registry/components/one-time-password-field.tsx @@ -0,0 +1,28 @@ +import * as React from 'react'; +import { unstable_OneTimePasswordField as OneTimePasswordField } from 'radix-ui'; + +export function Basic() { + return ( +
+ + + + + + + + + +

With indices

+ + + + + + + + + +
+ ); +} diff --git a/internal/test-registry/components/password-toggle-field.tsx b/internal/test-registry/components/password-toggle-field.tsx new file mode 100644 index 000000000..436f0565b --- /dev/null +++ b/internal/test-registry/components/password-toggle-field.tsx @@ -0,0 +1,61 @@ +import * as React from 'react'; +import { unstable_PasswordToggleField as PasswordToggleField } from 'radix-ui'; + +export function Basic() { + return ( +
+
+ + + + + +
+
+ + + + } hidden={} /> + + +
+
+ ); +} + +function EyeClosedIcon() { + return ( + + + + ); +} + +function EyeOpenIcon() { + return ( + + + + ); +} diff --git a/internal/test-registry/components/popover.tsx b/internal/test-registry/components/popover.tsx new file mode 100644 index 000000000..588d7bd10 --- /dev/null +++ b/internal/test-registry/components/popover.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import { Popover } from 'radix-ui'; + +export function Basic() { + return ( + + open + + + close + + + + + ); +} diff --git a/internal/test-registry/components/popper.tsx b/internal/test-registry/components/popper.tsx new file mode 100644 index 000000000..8e1c01251 --- /dev/null +++ b/internal/test-registry/components/popper.tsx @@ -0,0 +1,144 @@ +'use client'; +import * as React from 'react'; +import { Portal } from 'radix-ui'; +import { Popper } from 'radix-ui/internal'; + +export function Basic() { + const [open, setOpen] = React.useState(false); + const [animated, setAnimated] = React.useState(false); + return ( +
+ +
+ + + setOpen(true)}> + open + + + {open && ( + + + + + )} + + +
+ ); +} + +export const WithCustomArrow = () => { + const [open, setOpen] = React.useState(false); + return ( + + + setOpen(true)}> + open + + + {open && ( + + + +
+ + + )} + + + ); +}; + +export function WithPortal() { + const [open, setOpen] = React.useState(false); + return ( + + + setOpen(true)}> + open + + + {open && ( + + + + + + + )} + + + ); +} + +export function WithUpdatePositionStrategyAlways() { + const [open, setOpen] = React.useState(false); + const [left, setLeft] = React.useState(0); + React.useEffect(() => { + const intervalId = setInterval(() => { + setLeft((prev) => (prev + 50) % 300); + }, 500); + return () => clearInterval(intervalId); + }, []); + return ( + + + setOpen(true)} + style={{ marginLeft: left }} + > + open + + + {open && ( + + + + + + + )} + + + ); +} + +function Scrollable(props: React.HTMLAttributes) { + return ( +
+ ); +} diff --git a/internal/test-registry/components/portal.tsx b/internal/test-registry/components/portal.tsx new file mode 100644 index 000000000..05b25e0e7 --- /dev/null +++ b/internal/test-registry/components/portal.tsx @@ -0,0 +1,61 @@ +'use client'; +import * as React from 'react'; +import { Portal } from 'radix-ui'; + +export function Basic() { + return ( +
+

This content is rendered in the main DOM tree

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Quos porro, est ex quia itaque + facere fugit necessitatibus aut enim. Nisi rerum quae, repellat in perspiciatis explicabo + laboriosam necessitatibus eius pariatur. +

+ + +

This content is rendered in a portal (another DOM tree)

+

+ Because of the portal, it can appear in a different DOM tree from the main one (by default + a new element inside the body), even though it is part of the same React tree. +

+
+
+ ); +} + +export function Custom() { + const [container, setContainer] = React.useState(null); + return ( +
+ + + This content is rendered in a custom container + +
+ ); +} + +export function Conditional() { + const [container, setContainer] = React.useState(null); + const [open, setOpen] = React.useState(false); + return ( +
+ + + {open && ( + + This content is rendered in a custom container + + )} +
+ ); +} diff --git a/internal/test-registry/components/progress.tsx b/internal/test-registry/components/progress.tsx new file mode 100644 index 000000000..a142e2bb7 --- /dev/null +++ b/internal/test-registry/components/progress.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import { Progress } from 'radix-ui'; + +export function Basic() { + return ( + + Progress + + ); +} diff --git a/internal/test-registry/components/radio-group.tsx b/internal/test-registry/components/radio-group.tsx new file mode 100644 index 000000000..36e50a00a --- /dev/null +++ b/internal/test-registry/components/radio-group.tsx @@ -0,0 +1,35 @@ +import * as React from 'react'; +import { Label, RadioGroup } from 'radix-ui'; + +export function Basic() { + return ( + + Favourite pet + + + + [ X ] + + Cat + +
+ + + + [ X ] + + Dog + +
+ + + + [ X ] + + Rabbit + +
+
+
+ ); +} diff --git a/internal/test-registry/components/roving-focus.tsx b/internal/test-registry/components/roving-focus.tsx new file mode 100644 index 000000000..63709645e --- /dev/null +++ b/internal/test-registry/components/roving-focus.tsx @@ -0,0 +1,202 @@ +'use client'; +import * as React from 'react'; +import { composeEventHandlers, RovingFocus } from 'radix-ui/internal'; + +export function Basic() { + return ( + +
+ +
+ +

no orientation (both) + no looping

+ + + + + + + + +

no orientation (both) + looping

+ + + + + + + + +

horizontal orientation + no looping

+ + + + + + + + +

horizontal orientation + looping

+ + + + + + + + +

vertical orientation + no looping

+ + + + + + + + +

vertical orientation + looping

+ + + + + + + +
+ ); +} + +export function Nested() { + return ( + + + +
+ + + + + + + + +
+ + + +
+ ); +} + +type Direction = 'ltr' | 'rtl'; + +const RovingFocusContext = React.createContext<{ + dir: 'ltr' | 'rtl'; + setDir: React.Dispatch>; +}>({ + dir: 'ltr', + setDir: () => void 0, +}); +RovingFocusContext.displayName = 'RovingFocusContext'; + +function RovingFocusProvider({ children }: { children: React.ReactNode }) { + const [dir, setDir] = React.useState('ltr'); + return ( +
+ {children} +
+ ); +} + +function RovingFocusToggle() { + const { dir, setDir } = React.use(RovingFocusContext); + return ( + + ); +} + +const ButtonGroupContext = React.createContext<{ + value: string | undefined; + setValue: React.Dispatch>; +}>({ + value: undefined, + setValue: () => void 0, +}); + +type ButtonGroupProps = Omit, 'defaultValue'> & + RovingFocus.RovingFocusGroupProps & { defaultValue?: string }; + +function ButtonGroup({ defaultValue, ...props }: ButtonGroupProps) { + const [value, setValue] = React.useState(defaultValue); + const { dir } = React.use(RovingFocusContext); + return ( + + + + ); +} + +type ButtonProps = Omit, 'value'> & { value?: string }; + +function Button(props: ButtonProps) { + const { value: contextValue, setValue } = React.use(ButtonGroupContext); + const isSelected = + contextValue !== undefined && props.value !== undefined && contextValue === props.value; + + return ( + + +
+ +
+ ); +} diff --git a/apps/test-react-router-rsc/app/routes/dismissable-layer/page.tsx b/apps/test-react-router-rsc/app/routes/dismissable-layer/page.tsx new file mode 100644 index 000000000..cffa1af51 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/dismissable-layer/page.tsx @@ -0,0 +1,5 @@ +import * as DismissableLayer from '@repo/test-registry/components/dismissable-layer'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/dropdown-menu/page.tsx b/apps/test-react-router-rsc/app/routes/dropdown-menu/page.tsx new file mode 100644 index 000000000..d221b4aa8 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/dropdown-menu/page.tsx @@ -0,0 +1,5 @@ +import * as DropdownMenu from '@repo/test-registry/components/dropdown-menu'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/focus-guards/page.tsx b/apps/test-react-router-rsc/app/routes/focus-guards/page.tsx new file mode 100644 index 000000000..6ed83543e --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/focus-guards/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as FocusGuards from '@repo/test-registry/components/focus-guards'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/focus-scope/page.tsx b/apps/test-react-router-rsc/app/routes/focus-scope/page.tsx new file mode 100644 index 000000000..7414dded4 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/focus-scope/page.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import * as FocusScope from '@repo/test-registry/components/focus-scope'; + +export default function Page() { + return ( +
+ +
+ +
+ ); +} diff --git a/apps/test-react-router-rsc/app/routes/form/page.tsx b/apps/test-react-router-rsc/app/routes/form/page.tsx new file mode 100644 index 000000000..81118cf9e --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/form/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as Form from '@repo/test-registry/components/form'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/hover-card/page.tsx b/apps/test-react-router-rsc/app/routes/hover-card/page.tsx new file mode 100644 index 000000000..08776e123 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/hover-card/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as HoverCard from '@repo/test-registry/components/hover-card'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/label/page.tsx b/apps/test-react-router-rsc/app/routes/label/page.tsx new file mode 100644 index 000000000..eeeee3c83 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/label/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as Label from '@repo/test-registry/components/label'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/menu/page.tsx b/apps/test-react-router-rsc/app/routes/menu/page.tsx new file mode 100644 index 000000000..b6d40386b --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/menu/page.tsx @@ -0,0 +1,15 @@ +import * as Menu from '@repo/test-registry/components/menu'; + +export default function Page() { + return ( +
+ +
+ +
+ +
+ +
+ ); +} diff --git a/apps/test-react-router-rsc/app/routes/menubar/page.tsx b/apps/test-react-router-rsc/app/routes/menubar/page.tsx new file mode 100644 index 000000000..1e256aaf9 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/menubar/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as Menubar from '@repo/test-registry/components/menubar'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/navigation-menu/page.tsx b/apps/test-react-router-rsc/app/routes/navigation-menu/page.tsx new file mode 100644 index 000000000..1cdfb0d84 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/navigation-menu/page.tsx @@ -0,0 +1,5 @@ +import * as NavigationMenu from '@repo/test-registry/components/navigation-menu'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/one-time-password-field/page.tsx b/apps/test-react-router-rsc/app/routes/one-time-password-field/page.tsx new file mode 100644 index 000000000..756d1d8ab --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/one-time-password-field/page.tsx @@ -0,0 +1,5 @@ +import * as OneTimePasswordField from '@repo/test-registry/components/one-time-password-field'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/home.tsx b/apps/test-react-router-rsc/app/routes/page.tsx similarity index 65% rename from apps/test-react-router/app/routes/home.tsx rename to apps/test-react-router-rsc/app/routes/page.tsx index 3e9fb3f62..6c620d0bb 100644 --- a/apps/test-react-router/app/routes/home.tsx +++ b/apps/test-react-router-rsc/app/routes/page.tsx @@ -1,4 +1,4 @@ -import type { Route } from './+types/home'; +import type { Route } from './+types/page'; export function meta({}: Route.MetaArgs) { return [ @@ -8,5 +8,5 @@ export function meta({}: Route.MetaArgs) { } export default function Home() { - return
Home
; + return
Please select a primitive from the sidebar
; } diff --git a/apps/test-react-router-rsc/app/routes/password-toggle-field/page.tsx b/apps/test-react-router-rsc/app/routes/password-toggle-field/page.tsx new file mode 100644 index 000000000..637a53c7a --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/password-toggle-field/page.tsx @@ -0,0 +1,5 @@ +import * as PasswordToggleField from '@repo/test-registry/components/password-toggle-field'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/popover/page.tsx b/apps/test-react-router-rsc/app/routes/popover/page.tsx new file mode 100644 index 000000000..69df924b5 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/popover/page.tsx @@ -0,0 +1,5 @@ +import * as Popover from '@repo/test-registry/components/popover'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/popper/page.tsx b/apps/test-react-router-rsc/app/routes/popper/page.tsx new file mode 100644 index 000000000..1445cb5c4 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/popper/page.tsx @@ -0,0 +1,15 @@ +import * as Popper from '@repo/test-registry/components/popper'; + +export default function Page() { + return ( +
+ +
+ +
+ +
+ +
+ ); +} diff --git a/apps/test-react-router-rsc/app/routes/portal/page.tsx b/apps/test-react-router-rsc/app/routes/portal/page.tsx new file mode 100644 index 000000000..a869cfdcd --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/portal/page.tsx @@ -0,0 +1,13 @@ +import * as Portal from '@repo/test-registry/components/portal'; + +export default function Page() { + return ( +
+ +
+ +
+ +
+ ); +} diff --git a/apps/test-react-router-rsc/app/routes/progress/page.tsx b/apps/test-react-router-rsc/app/routes/progress/page.tsx new file mode 100644 index 000000000..1c3788f23 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/progress/page.tsx @@ -0,0 +1,5 @@ +import * as Progress from '@repo/test-registry/components/progress'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/radio-group/page.tsx b/apps/test-react-router-rsc/app/routes/radio-group/page.tsx new file mode 100644 index 000000000..4737c444a --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/radio-group/page.tsx @@ -0,0 +1,5 @@ +import * as RadioGroup from '@repo/test-registry/components/radio-group'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/roving-focus/page.tsx b/apps/test-react-router-rsc/app/routes/roving-focus/page.tsx new file mode 100644 index 000000000..e9fd86bb8 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/roving-focus/page.tsx @@ -0,0 +1,13 @@ +import * as React from 'react'; +import * as RovingFocus from '@repo/test-registry/components/roving-focus'; + +export default function Page() { + return ( + <> +

Basic

+ +

Nested

+ + + ); +} diff --git a/apps/test-react-router-rsc/app/routes/scroll-area/page.tsx b/apps/test-react-router-rsc/app/routes/scroll-area/page.tsx new file mode 100644 index 000000000..2975e1500 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/scroll-area/page.tsx @@ -0,0 +1,5 @@ +import * as ScrollArea from '@repo/test-registry/components/scroll-area'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/select/page.tsx b/apps/test-react-router-rsc/app/routes/select/page.tsx new file mode 100644 index 000000000..ebab62853 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/select/page.tsx @@ -0,0 +1,5 @@ +import * as Select from '@repo/test-registry/components/select'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/separator/page.tsx b/apps/test-react-router-rsc/app/routes/separator/page.tsx new file mode 100644 index 000000000..befc17592 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/separator/page.tsx @@ -0,0 +1,5 @@ +import * as Separator from '@repo/test-registry/components/separator'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/slider/page.tsx b/apps/test-react-router-rsc/app/routes/slider/page.tsx new file mode 100644 index 000000000..f44843a0f --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/slider/page.tsx @@ -0,0 +1,5 @@ +import * as Slider from '@repo/test-registry/components/slider'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/slot/page.tsx b/apps/test-react-router-rsc/app/routes/slot/page.tsx new file mode 100644 index 000000000..9ee17eeb0 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/slot/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as Slot from '@repo/test-registry/components/slot'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/switch/page.tsx b/apps/test-react-router-rsc/app/routes/switch/page.tsx new file mode 100644 index 000000000..7a331ff84 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/switch/page.tsx @@ -0,0 +1,5 @@ +import * as Switch from '@repo/test-registry/components/switch'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/tabs/page.tsx b/apps/test-react-router-rsc/app/routes/tabs/page.tsx new file mode 100644 index 000000000..aa763ecde --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/tabs/page.tsx @@ -0,0 +1,5 @@ +import * as Tabs from '@repo/test-registry/components/tabs'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/toast/page.tsx b/apps/test-react-router-rsc/app/routes/toast/page.tsx new file mode 100644 index 000000000..e5a76bb8b --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/toast/page.tsx @@ -0,0 +1,5 @@ +import * as Toast from '@repo/test-registry/components/toast'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/toggle-group/page.tsx b/apps/test-react-router-rsc/app/routes/toggle-group/page.tsx new file mode 100644 index 000000000..a7bea7f0e --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/toggle-group/page.tsx @@ -0,0 +1,5 @@ +import * as ToggleGroup from '@repo/test-registry/components/toggle-group'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/toggle/page.tsx b/apps/test-react-router-rsc/app/routes/toggle/page.tsx new file mode 100644 index 000000000..df722f71c --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/toggle/page.tsx @@ -0,0 +1,5 @@ +import * as Toggle from '@repo/test-registry/components/toggle'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/toolbar/page.tsx b/apps/test-react-router-rsc/app/routes/toolbar/page.tsx new file mode 100644 index 000000000..31024ad77 --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/toolbar/page.tsx @@ -0,0 +1,5 @@ +import * as Toolbar from '@repo/test-registry/components/toolbar'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/tooltip/page.tsx b/apps/test-react-router-rsc/app/routes/tooltip/page.tsx new file mode 100644 index 000000000..efe77a52e --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/tooltip/page.tsx @@ -0,0 +1,5 @@ +import * as Tooltip from '@repo/test-registry/components/tooltip'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/visually-hidden/page.tsx b/apps/test-react-router-rsc/app/routes/visually-hidden/page.tsx new file mode 100644 index 000000000..e20db888d --- /dev/null +++ b/apps/test-react-router-rsc/app/routes/visually-hidden/page.tsx @@ -0,0 +1,5 @@ +import * as VisuallyHidden from '@repo/test-registry/components/visually-hidden'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/eslint.config.js b/apps/test-react-router-rsc/eslint.config.js index 90a46a235..726acba12 100644 --- a/apps/test-react-router-rsc/eslint.config.js +++ b/apps/test-react-router-rsc/eslint.config.js @@ -2,4 +2,30 @@ import { defineConfig, globalIgnores } from 'eslint/config'; import { configs } from '@repo/eslint-config/vite'; -export default defineConfig([globalIgnores(['dist']), ...configs]); +export default defineConfig([ + globalIgnores(['dist']), + ...configs, + { + rules: { + 'react-refresh/only-export-components': [ + 'error', + { + allowExportNames: [ + // https://reactrouter.com/start/framework/route-module + 'middleware', + 'clientMiddleware', + 'loader', + 'clientLoader', + 'action', + 'clientAction', + 'headers', + 'handle', + 'links', + 'meta', + 'shouldRevalidate', + ], + }, + ], + }, + }, +]); diff --git a/apps/test-react-router/app/root.tsx b/apps/test-react-router/app/root.tsx index 8380d8297..3fa4e5315 100644 --- a/apps/test-react-router/app/root.tsx +++ b/apps/test-react-router/app/root.tsx @@ -1,11 +1,13 @@ import { isRouteErrorResponse, + NavLink, Links, Meta, Outlet, Scripts, ScrollRestoration, } from 'react-router'; +import { primitives } from '@repo/test-registry'; import type { Route } from './+types/root'; import './globals.css'; @@ -32,7 +34,25 @@ export function Layout({ children }: { children: React.ReactNode }) { - {children} +

React Router testing

+
+
+

Public APIs

+ {primitives.public.map((primitive) => ( + + {primitive.name} + + ))} +
+

Internal APIs

+ {primitives.internal.map((primitive) => ( + + {primitive.name} + + ))} +
+
{children}
+
diff --git a/apps/test-react-router/app/routes.ts b/apps/test-react-router/app/routes.ts index 102b40258..9490f3a25 100644 --- a/apps/test-react-router/app/routes.ts +++ b/apps/test-react-router/app/routes.ts @@ -1,3 +1,10 @@ -import { type RouteConfig, index } from "@react-router/dev/routes"; +import { type RouteConfig, index, route } from '@react-router/dev/routes'; +import { primitives } from '@repo/test-registry'; -export default [index("routes/home.tsx")] satisfies RouteConfig; +export default [ + index('routes/page.tsx'), + // Public APIs + ...primitives.public.map((primitive) => route(primitive.id, `routes/${primitive.id}/page.tsx`)), + // Internal APIs + ...primitives.internal.map((primitive) => route(primitive.id, `routes/${primitive.id}/page.tsx`)), +] satisfies RouteConfig; diff --git a/apps/test-react-router/app/routes/accessible-icon/page.tsx b/apps/test-react-router/app/routes/accessible-icon/page.tsx new file mode 100644 index 000000000..32b248e40 --- /dev/null +++ b/apps/test-react-router/app/routes/accessible-icon/page.tsx @@ -0,0 +1,5 @@ +import * as AccessibleIcon from '@repo/test-registry/components/accessible-icon'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/accordion/page.tsx b/apps/test-react-router/app/routes/accordion/page.tsx new file mode 100644 index 000000000..8b1ea7973 --- /dev/null +++ b/apps/test-react-router/app/routes/accordion/page.tsx @@ -0,0 +1,5 @@ +import * as Accordion from '@repo/test-registry/components/accordion'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/alert-dialog/page.tsx b/apps/test-react-router/app/routes/alert-dialog/page.tsx new file mode 100644 index 000000000..3d978ac60 --- /dev/null +++ b/apps/test-react-router/app/routes/alert-dialog/page.tsx @@ -0,0 +1,5 @@ +import * as AlertDialog from '@repo/test-registry/components/alert-dialog'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/arrow/page.tsx b/apps/test-react-router/app/routes/arrow/page.tsx new file mode 100644 index 000000000..a889e8b7a --- /dev/null +++ b/apps/test-react-router/app/routes/arrow/page.tsx @@ -0,0 +1,5 @@ +import * as Arrow from '@repo/test-registry/components/arrow'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/aspect-ratio/page.tsx b/apps/test-react-router/app/routes/aspect-ratio/page.tsx new file mode 100644 index 000000000..6a91fd4f3 --- /dev/null +++ b/apps/test-react-router/app/routes/aspect-ratio/page.tsx @@ -0,0 +1,5 @@ +import * as AspectRatio from '@repo/test-registry/components/aspect-ratio'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/avatar/page.tsx b/apps/test-react-router/app/routes/avatar/page.tsx new file mode 100644 index 000000000..75e98cfdf --- /dev/null +++ b/apps/test-react-router/app/routes/avatar/page.tsx @@ -0,0 +1,5 @@ +import * as Avatar from '@repo/test-registry/components/avatar'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/checkbox/page.tsx b/apps/test-react-router/app/routes/checkbox/page.tsx new file mode 100644 index 000000000..64f74ec0d --- /dev/null +++ b/apps/test-react-router/app/routes/checkbox/page.tsx @@ -0,0 +1,5 @@ +import * as Checkbox from '@repo/test-registry/components/checkbox'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/collapsible/page.tsx b/apps/test-react-router/app/routes/collapsible/page.tsx new file mode 100644 index 000000000..75b50f9f2 --- /dev/null +++ b/apps/test-react-router/app/routes/collapsible/page.tsx @@ -0,0 +1,5 @@ +import * as Collapsible from '@repo/test-registry/components/collapsible'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/collection/page.tsx b/apps/test-react-router/app/routes/collection/page.tsx new file mode 100644 index 000000000..daa473458 --- /dev/null +++ b/apps/test-react-router/app/routes/collection/page.tsx @@ -0,0 +1,27 @@ +import * as React from 'react'; +import { + Unstable, + UnstableItem, + Stable, + StableItem, +} from '@repo/test-registry/components/collection'; + +export default function Page() { + return ( +
+

Unstable Collection

+ + Item 1 + Item 2 + Item 3 + +
+

Stable Collection

+ + Item 1 + Item 2 + Item 3 + +
+ ); +} diff --git a/apps/test-react-router/app/routes/context-menu/page.tsx b/apps/test-react-router/app/routes/context-menu/page.tsx new file mode 100644 index 000000000..b40cbe3e3 --- /dev/null +++ b/apps/test-react-router/app/routes/context-menu/page.tsx @@ -0,0 +1,5 @@ +import * as ContextMenu from '@repo/test-registry/components/context-menu'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/dialog/page.tsx b/apps/test-react-router/app/routes/dialog/page.tsx new file mode 100644 index 000000000..d7698910a --- /dev/null +++ b/apps/test-react-router/app/routes/dialog/page.tsx @@ -0,0 +1,5 @@ +import * as Dialog from '@repo/test-registry/components/dialog'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/direction/page.tsx b/apps/test-react-router/app/routes/direction/page.tsx new file mode 100644 index 000000000..c7ccfd91f --- /dev/null +++ b/apps/test-react-router/app/routes/direction/page.tsx @@ -0,0 +1,11 @@ +import * as React from 'react'; +import * as Direction from '@repo/test-registry/components/direction'; + +export default function Page() { + return ( +
+ + +
+ ); +} diff --git a/apps/test-react-router/app/routes/dismissable-layer/dismissable-layer.client.tsx b/apps/test-react-router/app/routes/dismissable-layer/dismissable-layer.client.tsx new file mode 100644 index 000000000..055c86a36 --- /dev/null +++ b/apps/test-react-router/app/routes/dismissable-layer/dismissable-layer.client.tsx @@ -0,0 +1,64 @@ +'use client'; +import * as React from 'react'; +import { DismissableLayer as DismissableLayerPrimitive } from 'radix-ui/internal'; + +function DismissableLayerImpl() { + const [disableOutsidePointerEvents, setDisableOutsidePointerEvents] = React.useState(false); + const [dismissed, setDismissed] = React.useState(false); + return ( +
+ {dismissed &&

Dismissed!

} + +
+ { + console.log('escape key down', event); + }} + onPointerDownOutside={(event) => { + console.log('pointer down outside', event); + }} + onFocusOutside={(event) => { + console.log('focus outside', event); + }} + onInteractOutside={(event) => { + console.log('interact outside', event); + }} + onDismiss={() => { + setDismissed(true); + console.log('dismiss'); + }} + > +
+

Hello!

+ +
+
+
+ ); +} + +export function DismissableLayer() { + const [key, setKey] = React.useState(''); + return ( +
+ +
+ +
+ ); +} diff --git a/apps/test-react-router/app/routes/dismissable-layer/page.tsx b/apps/test-react-router/app/routes/dismissable-layer/page.tsx new file mode 100644 index 000000000..cffa1af51 --- /dev/null +++ b/apps/test-react-router/app/routes/dismissable-layer/page.tsx @@ -0,0 +1,5 @@ +import * as DismissableLayer from '@repo/test-registry/components/dismissable-layer'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/dropdown-menu/page.tsx b/apps/test-react-router/app/routes/dropdown-menu/page.tsx new file mode 100644 index 000000000..d221b4aa8 --- /dev/null +++ b/apps/test-react-router/app/routes/dropdown-menu/page.tsx @@ -0,0 +1,5 @@ +import * as DropdownMenu from '@repo/test-registry/components/dropdown-menu'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/focus-guards/page.tsx b/apps/test-react-router/app/routes/focus-guards/page.tsx new file mode 100644 index 000000000..6ed83543e --- /dev/null +++ b/apps/test-react-router/app/routes/focus-guards/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as FocusGuards from '@repo/test-registry/components/focus-guards'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/focus-scope/page.tsx b/apps/test-react-router/app/routes/focus-scope/page.tsx new file mode 100644 index 000000000..7414dded4 --- /dev/null +++ b/apps/test-react-router/app/routes/focus-scope/page.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import * as FocusScope from '@repo/test-registry/components/focus-scope'; + +export default function Page() { + return ( +
+ +
+ +
+ ); +} diff --git a/apps/test-react-router/app/routes/form/page.tsx b/apps/test-react-router/app/routes/form/page.tsx new file mode 100644 index 000000000..81118cf9e --- /dev/null +++ b/apps/test-react-router/app/routes/form/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as Form from '@repo/test-registry/components/form'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/hover-card/page.tsx b/apps/test-react-router/app/routes/hover-card/page.tsx new file mode 100644 index 000000000..08776e123 --- /dev/null +++ b/apps/test-react-router/app/routes/hover-card/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as HoverCard from '@repo/test-registry/components/hover-card'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/label/page.tsx b/apps/test-react-router/app/routes/label/page.tsx new file mode 100644 index 000000000..eeeee3c83 --- /dev/null +++ b/apps/test-react-router/app/routes/label/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as Label from '@repo/test-registry/components/label'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/menu/page.tsx b/apps/test-react-router/app/routes/menu/page.tsx new file mode 100644 index 000000000..b6d40386b --- /dev/null +++ b/apps/test-react-router/app/routes/menu/page.tsx @@ -0,0 +1,15 @@ +import * as Menu from '@repo/test-registry/components/menu'; + +export default function Page() { + return ( +
+ +
+ +
+ +
+ +
+ ); +} diff --git a/apps/test-react-router/app/routes/menubar/page.tsx b/apps/test-react-router/app/routes/menubar/page.tsx new file mode 100644 index 000000000..1e256aaf9 --- /dev/null +++ b/apps/test-react-router/app/routes/menubar/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as Menubar from '@repo/test-registry/components/menubar'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/navigation-menu/page.tsx b/apps/test-react-router/app/routes/navigation-menu/page.tsx new file mode 100644 index 000000000..1cdfb0d84 --- /dev/null +++ b/apps/test-react-router/app/routes/navigation-menu/page.tsx @@ -0,0 +1,5 @@ +import * as NavigationMenu from '@repo/test-registry/components/navigation-menu'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/one-time-password-field/page.tsx b/apps/test-react-router/app/routes/one-time-password-field/page.tsx new file mode 100644 index 000000000..756d1d8ab --- /dev/null +++ b/apps/test-react-router/app/routes/one-time-password-field/page.tsx @@ -0,0 +1,5 @@ +import * as OneTimePasswordField from '@repo/test-registry/components/one-time-password-field'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router-rsc/app/routes/home.tsx b/apps/test-react-router/app/routes/page.tsx similarity index 54% rename from apps/test-react-router-rsc/app/routes/home.tsx rename to apps/test-react-router/app/routes/page.tsx index c07db4a95..6c620d0bb 100644 --- a/apps/test-react-router-rsc/app/routes/home.tsx +++ b/apps/test-react-router/app/routes/page.tsx @@ -1,4 +1,4 @@ -import type { Route } from './+types/home'; +import type { Route } from './+types/page'; export function meta({}: Route.MetaArgs) { return [ @@ -7,6 +7,6 @@ export function meta({}: Route.MetaArgs) { ]; } -export function ServerComponent() { - return
Home
; +export default function Home() { + return
Please select a primitive from the sidebar
; } diff --git a/apps/test-react-router/app/routes/password-toggle-field/page.tsx b/apps/test-react-router/app/routes/password-toggle-field/page.tsx new file mode 100644 index 000000000..637a53c7a --- /dev/null +++ b/apps/test-react-router/app/routes/password-toggle-field/page.tsx @@ -0,0 +1,5 @@ +import * as PasswordToggleField from '@repo/test-registry/components/password-toggle-field'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/popover/page.tsx b/apps/test-react-router/app/routes/popover/page.tsx new file mode 100644 index 000000000..69df924b5 --- /dev/null +++ b/apps/test-react-router/app/routes/popover/page.tsx @@ -0,0 +1,5 @@ +import * as Popover from '@repo/test-registry/components/popover'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/popper/page.tsx b/apps/test-react-router/app/routes/popper/page.tsx new file mode 100644 index 000000000..1445cb5c4 --- /dev/null +++ b/apps/test-react-router/app/routes/popper/page.tsx @@ -0,0 +1,15 @@ +import * as Popper from '@repo/test-registry/components/popper'; + +export default function Page() { + return ( +
+ +
+ +
+ +
+ +
+ ); +} diff --git a/apps/test-react-router/app/routes/portal/page.tsx b/apps/test-react-router/app/routes/portal/page.tsx new file mode 100644 index 000000000..a869cfdcd --- /dev/null +++ b/apps/test-react-router/app/routes/portal/page.tsx @@ -0,0 +1,13 @@ +import * as Portal from '@repo/test-registry/components/portal'; + +export default function Page() { + return ( +
+ +
+ +
+ +
+ ); +} diff --git a/apps/test-react-router/app/routes/progress/page.tsx b/apps/test-react-router/app/routes/progress/page.tsx new file mode 100644 index 000000000..1c3788f23 --- /dev/null +++ b/apps/test-react-router/app/routes/progress/page.tsx @@ -0,0 +1,5 @@ +import * as Progress from '@repo/test-registry/components/progress'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/radio-group/page.tsx b/apps/test-react-router/app/routes/radio-group/page.tsx new file mode 100644 index 000000000..4737c444a --- /dev/null +++ b/apps/test-react-router/app/routes/radio-group/page.tsx @@ -0,0 +1,5 @@ +import * as RadioGroup from '@repo/test-registry/components/radio-group'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/roving-focus/page.tsx b/apps/test-react-router/app/routes/roving-focus/page.tsx new file mode 100644 index 000000000..e9fd86bb8 --- /dev/null +++ b/apps/test-react-router/app/routes/roving-focus/page.tsx @@ -0,0 +1,13 @@ +import * as React from 'react'; +import * as RovingFocus from '@repo/test-registry/components/roving-focus'; + +export default function Page() { + return ( + <> +

Basic

+ +

Nested

+ + + ); +} diff --git a/apps/test-react-router/app/routes/scroll-area/page.tsx b/apps/test-react-router/app/routes/scroll-area/page.tsx new file mode 100644 index 000000000..2975e1500 --- /dev/null +++ b/apps/test-react-router/app/routes/scroll-area/page.tsx @@ -0,0 +1,5 @@ +import * as ScrollArea from '@repo/test-registry/components/scroll-area'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/select/page.tsx b/apps/test-react-router/app/routes/select/page.tsx new file mode 100644 index 000000000..ebab62853 --- /dev/null +++ b/apps/test-react-router/app/routes/select/page.tsx @@ -0,0 +1,5 @@ +import * as Select from '@repo/test-registry/components/select'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/separator/page.tsx b/apps/test-react-router/app/routes/separator/page.tsx new file mode 100644 index 000000000..befc17592 --- /dev/null +++ b/apps/test-react-router/app/routes/separator/page.tsx @@ -0,0 +1,5 @@ +import * as Separator from '@repo/test-registry/components/separator'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/slider/page.tsx b/apps/test-react-router/app/routes/slider/page.tsx new file mode 100644 index 000000000..f44843a0f --- /dev/null +++ b/apps/test-react-router/app/routes/slider/page.tsx @@ -0,0 +1,5 @@ +import * as Slider from '@repo/test-registry/components/slider'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/slot/page.tsx b/apps/test-react-router/app/routes/slot/page.tsx new file mode 100644 index 000000000..9ee17eeb0 --- /dev/null +++ b/apps/test-react-router/app/routes/slot/page.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import * as Slot from '@repo/test-registry/components/slot'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/switch/page.tsx b/apps/test-react-router/app/routes/switch/page.tsx new file mode 100644 index 000000000..7a331ff84 --- /dev/null +++ b/apps/test-react-router/app/routes/switch/page.tsx @@ -0,0 +1,5 @@ +import * as Switch from '@repo/test-registry/components/switch'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/tabs/page.tsx b/apps/test-react-router/app/routes/tabs/page.tsx new file mode 100644 index 000000000..aa763ecde --- /dev/null +++ b/apps/test-react-router/app/routes/tabs/page.tsx @@ -0,0 +1,5 @@ +import * as Tabs from '@repo/test-registry/components/tabs'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/toast/page.tsx b/apps/test-react-router/app/routes/toast/page.tsx new file mode 100644 index 000000000..e5a76bb8b --- /dev/null +++ b/apps/test-react-router/app/routes/toast/page.tsx @@ -0,0 +1,5 @@ +import * as Toast from '@repo/test-registry/components/toast'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/toggle-group/page.tsx b/apps/test-react-router/app/routes/toggle-group/page.tsx new file mode 100644 index 000000000..a7bea7f0e --- /dev/null +++ b/apps/test-react-router/app/routes/toggle-group/page.tsx @@ -0,0 +1,5 @@ +import * as ToggleGroup from '@repo/test-registry/components/toggle-group'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/toggle/page.tsx b/apps/test-react-router/app/routes/toggle/page.tsx new file mode 100644 index 000000000..df722f71c --- /dev/null +++ b/apps/test-react-router/app/routes/toggle/page.tsx @@ -0,0 +1,5 @@ +import * as Toggle from '@repo/test-registry/components/toggle'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/toolbar/page.tsx b/apps/test-react-router/app/routes/toolbar/page.tsx new file mode 100644 index 000000000..31024ad77 --- /dev/null +++ b/apps/test-react-router/app/routes/toolbar/page.tsx @@ -0,0 +1,5 @@ +import * as Toolbar from '@repo/test-registry/components/toolbar'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/tooltip/page.tsx b/apps/test-react-router/app/routes/tooltip/page.tsx new file mode 100644 index 000000000..efe77a52e --- /dev/null +++ b/apps/test-react-router/app/routes/tooltip/page.tsx @@ -0,0 +1,5 @@ +import * as Tooltip from '@repo/test-registry/components/tooltip'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/routes/visually-hidden/page.tsx b/apps/test-react-router/app/routes/visually-hidden/page.tsx new file mode 100644 index 000000000..e20db888d --- /dev/null +++ b/apps/test-react-router/app/routes/visually-hidden/page.tsx @@ -0,0 +1,5 @@ +import * as VisuallyHidden from '@repo/test-registry/components/visually-hidden'; + +export default function Page() { + return ; +} diff --git a/apps/test-react-router/app/welcome/logo-dark.svg b/apps/test-react-router/app/welcome/logo-dark.svg deleted file mode 100644 index dd8202894..000000000 --- a/apps/test-react-router/app/welcome/logo-dark.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/test-react-router/app/welcome/logo-light.svg b/apps/test-react-router/app/welcome/logo-light.svg deleted file mode 100644 index 73284929d..000000000 --- a/apps/test-react-router/app/welcome/logo-light.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/test-react-router/app/welcome/welcome.tsx b/apps/test-react-router/app/welcome/welcome.tsx deleted file mode 100644 index 8ac6e1d30..000000000 --- a/apps/test-react-router/app/welcome/welcome.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import logoDark from "./logo-dark.svg"; -import logoLight from "./logo-light.svg"; - -export function Welcome() { - return ( -
-
-
-
- React Router - React Router -
-
-
- -
-
-
- ); -} - -const resources = [ - { - href: "https://reactrouter.com/docs", - text: "React Router Docs", - icon: ( - - - - ), - }, - { - href: "https://rmx.as/discord", - text: "Join Discord", - icon: ( - - - - ), - }, -]; diff --git a/apps/test-react-router/eslint.config.js b/apps/test-react-router/eslint.config.js index 90a46a235..726acba12 100644 --- a/apps/test-react-router/eslint.config.js +++ b/apps/test-react-router/eslint.config.js @@ -2,4 +2,30 @@ import { defineConfig, globalIgnores } from 'eslint/config'; import { configs } from '@repo/eslint-config/vite'; -export default defineConfig([globalIgnores(['dist']), ...configs]); +export default defineConfig([ + globalIgnores(['dist']), + ...configs, + { + rules: { + 'react-refresh/only-export-components': [ + 'error', + { + allowExportNames: [ + // https://reactrouter.com/start/framework/route-module + 'middleware', + 'clientMiddleware', + 'loader', + 'clientLoader', + 'action', + 'clientAction', + 'headers', + 'handle', + 'links', + 'meta', + 'shouldRevalidate', + ], + }, + ], + }, + }, +]); From 4f7703363cad7f1da0c0df36976f0f995c66ac73 Mon Sep 17 00:00:00 2001 From: Chance Strickland Date: Tue, 4 Nov 2025 11:59:30 -0800 Subject: [PATCH 05/11] revert component changes --- packages/react/collection/src/collection.tsx | 12 ++++++------ packages/react/direction/src/index.ts | 1 - 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/react/collection/src/collection.tsx b/packages/react/collection/src/collection.tsx index 2728cecfc..cf76f1e6d 100644 --- a/packages/react/collection/src/collection.tsx +++ b/packages/react/collection/src/collection.tsx @@ -56,8 +56,8 @@ function createCollection, - SetItemMap: React.Dispatch>>, + ItemMap: ItemMap, + SetItemMap: React.Dispatch>>, ]; const CollectionProvider: React.FC<{ @@ -167,7 +167,7 @@ function createCollection>(new OrderedDict()); + return React.useState>(new OrderedDict()); } /* ----------------------------------------------------------------------------------------------- diff --git a/packages/react/direction/src/index.ts b/packages/react/direction/src/index.ts index b5009c1dd..56908e494 100644 --- a/packages/react/direction/src/index.ts +++ b/packages/react/direction/src/index.ts @@ -1,4 +1,3 @@ -'use client'; export { useDirection, // From 634da6a836bc541dfdf4e1e0353a14632a07e8f7 Mon Sep 17 00:00:00 2001 From: Chance Strickland Date: Tue, 4 Nov 2025 12:04:46 -0800 Subject: [PATCH 06/11] update RR route exports --- apps/test-react-router-rsc/app/routes/accessible-icon/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/accordion/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/alert-dialog/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/arrow/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/aspect-ratio/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/avatar/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/checkbox/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/collapsible/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/collection/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/context-menu/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/dialog/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/direction/page.tsx | 3 +-- .../app/routes/dismissable-layer/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/dropdown-menu/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/focus-guards/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/focus-scope/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/form/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/hover-card/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/label/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/menu/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/menubar/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/navigation-menu/page.tsx | 2 +- .../app/routes/one-time-password-field/page.tsx | 2 +- .../app/routes/password-toggle-field/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/popover/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/popper/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/portal/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/progress/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/radio-group/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/roving-focus/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/scroll-area/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/select/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/separator/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/slider/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/slot/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/switch/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/tabs/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/toast/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/toggle-group/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/toggle/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/toolbar/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/tooltip/page.tsx | 2 +- apps/test-react-router-rsc/app/routes/visually-hidden/page.tsx | 2 +- 43 files changed, 43 insertions(+), 44 deletions(-) diff --git a/apps/test-react-router-rsc/app/routes/accessible-icon/page.tsx b/apps/test-react-router-rsc/app/routes/accessible-icon/page.tsx index 32b248e40..96a755c58 100644 --- a/apps/test-react-router-rsc/app/routes/accessible-icon/page.tsx +++ b/apps/test-react-router-rsc/app/routes/accessible-icon/page.tsx @@ -1,5 +1,5 @@ import * as AccessibleIcon from '@repo/test-registry/components/accessible-icon'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/accordion/page.tsx b/apps/test-react-router-rsc/app/routes/accordion/page.tsx index 8b1ea7973..9987a30b4 100644 --- a/apps/test-react-router-rsc/app/routes/accordion/page.tsx +++ b/apps/test-react-router-rsc/app/routes/accordion/page.tsx @@ -1,5 +1,5 @@ import * as Accordion from '@repo/test-registry/components/accordion'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/alert-dialog/page.tsx b/apps/test-react-router-rsc/app/routes/alert-dialog/page.tsx index 3d978ac60..575cff7dc 100644 --- a/apps/test-react-router-rsc/app/routes/alert-dialog/page.tsx +++ b/apps/test-react-router-rsc/app/routes/alert-dialog/page.tsx @@ -1,5 +1,5 @@ import * as AlertDialog from '@repo/test-registry/components/alert-dialog'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/arrow/page.tsx b/apps/test-react-router-rsc/app/routes/arrow/page.tsx index a889e8b7a..a8269259e 100644 --- a/apps/test-react-router-rsc/app/routes/arrow/page.tsx +++ b/apps/test-react-router-rsc/app/routes/arrow/page.tsx @@ -1,5 +1,5 @@ import * as Arrow from '@repo/test-registry/components/arrow'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/aspect-ratio/page.tsx b/apps/test-react-router-rsc/app/routes/aspect-ratio/page.tsx index 6a91fd4f3..bb1be25fb 100644 --- a/apps/test-react-router-rsc/app/routes/aspect-ratio/page.tsx +++ b/apps/test-react-router-rsc/app/routes/aspect-ratio/page.tsx @@ -1,5 +1,5 @@ import * as AspectRatio from '@repo/test-registry/components/aspect-ratio'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/avatar/page.tsx b/apps/test-react-router-rsc/app/routes/avatar/page.tsx index 75e98cfdf..1e6d3c650 100644 --- a/apps/test-react-router-rsc/app/routes/avatar/page.tsx +++ b/apps/test-react-router-rsc/app/routes/avatar/page.tsx @@ -1,5 +1,5 @@ import * as Avatar from '@repo/test-registry/components/avatar'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/checkbox/page.tsx b/apps/test-react-router-rsc/app/routes/checkbox/page.tsx index 64f74ec0d..b62e7a7be 100644 --- a/apps/test-react-router-rsc/app/routes/checkbox/page.tsx +++ b/apps/test-react-router-rsc/app/routes/checkbox/page.tsx @@ -1,5 +1,5 @@ import * as Checkbox from '@repo/test-registry/components/checkbox'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/collapsible/page.tsx b/apps/test-react-router-rsc/app/routes/collapsible/page.tsx index 75b50f9f2..9699f299f 100644 --- a/apps/test-react-router-rsc/app/routes/collapsible/page.tsx +++ b/apps/test-react-router-rsc/app/routes/collapsible/page.tsx @@ -1,5 +1,5 @@ import * as Collapsible from '@repo/test-registry/components/collapsible'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/collection/page.tsx b/apps/test-react-router-rsc/app/routes/collection/page.tsx index daa473458..aaa837f86 100644 --- a/apps/test-react-router-rsc/app/routes/collection/page.tsx +++ b/apps/test-react-router-rsc/app/routes/collection/page.tsx @@ -6,7 +6,7 @@ import { StableItem, } from '@repo/test-registry/components/collection'; -export default function Page() { +export async function ServerComponent() { return (

Unstable Collection

diff --git a/apps/test-react-router-rsc/app/routes/context-menu/page.tsx b/apps/test-react-router-rsc/app/routes/context-menu/page.tsx index b40cbe3e3..84cc2b429 100644 --- a/apps/test-react-router-rsc/app/routes/context-menu/page.tsx +++ b/apps/test-react-router-rsc/app/routes/context-menu/page.tsx @@ -1,5 +1,5 @@ import * as ContextMenu from '@repo/test-registry/components/context-menu'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/dialog/page.tsx b/apps/test-react-router-rsc/app/routes/dialog/page.tsx index d7698910a..4fffaea34 100644 --- a/apps/test-react-router-rsc/app/routes/dialog/page.tsx +++ b/apps/test-react-router-rsc/app/routes/dialog/page.tsx @@ -1,5 +1,5 @@ import * as Dialog from '@repo/test-registry/components/dialog'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/direction/page.tsx b/apps/test-react-router-rsc/app/routes/direction/page.tsx index c7ccfd91f..5ed63e6ba 100644 --- a/apps/test-react-router-rsc/app/routes/direction/page.tsx +++ b/apps/test-react-router-rsc/app/routes/direction/page.tsx @@ -1,7 +1,6 @@ -import * as React from 'react'; import * as Direction from '@repo/test-registry/components/direction'; -export default function Page() { +export async function ServerComponent() { return (
diff --git a/apps/test-react-router-rsc/app/routes/dismissable-layer/page.tsx b/apps/test-react-router-rsc/app/routes/dismissable-layer/page.tsx index cffa1af51..719f9981e 100644 --- a/apps/test-react-router-rsc/app/routes/dismissable-layer/page.tsx +++ b/apps/test-react-router-rsc/app/routes/dismissable-layer/page.tsx @@ -1,5 +1,5 @@ import * as DismissableLayer from '@repo/test-registry/components/dismissable-layer'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/dropdown-menu/page.tsx b/apps/test-react-router-rsc/app/routes/dropdown-menu/page.tsx index d221b4aa8..759d736af 100644 --- a/apps/test-react-router-rsc/app/routes/dropdown-menu/page.tsx +++ b/apps/test-react-router-rsc/app/routes/dropdown-menu/page.tsx @@ -1,5 +1,5 @@ import * as DropdownMenu from '@repo/test-registry/components/dropdown-menu'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/focus-guards/page.tsx b/apps/test-react-router-rsc/app/routes/focus-guards/page.tsx index 6ed83543e..389687b47 100644 --- a/apps/test-react-router-rsc/app/routes/focus-guards/page.tsx +++ b/apps/test-react-router-rsc/app/routes/focus-guards/page.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import * as FocusGuards from '@repo/test-registry/components/focus-guards'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/focus-scope/page.tsx b/apps/test-react-router-rsc/app/routes/focus-scope/page.tsx index 7414dded4..9406d823f 100644 --- a/apps/test-react-router-rsc/app/routes/focus-scope/page.tsx +++ b/apps/test-react-router-rsc/app/routes/focus-scope/page.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import * as FocusScope from '@repo/test-registry/components/focus-scope'; -export default function Page() { +export async function ServerComponent() { return (
diff --git a/apps/test-react-router-rsc/app/routes/form/page.tsx b/apps/test-react-router-rsc/app/routes/form/page.tsx index 81118cf9e..83a5724b7 100644 --- a/apps/test-react-router-rsc/app/routes/form/page.tsx +++ b/apps/test-react-router-rsc/app/routes/form/page.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import * as Form from '@repo/test-registry/components/form'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/hover-card/page.tsx b/apps/test-react-router-rsc/app/routes/hover-card/page.tsx index 08776e123..f7b42003c 100644 --- a/apps/test-react-router-rsc/app/routes/hover-card/page.tsx +++ b/apps/test-react-router-rsc/app/routes/hover-card/page.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import * as HoverCard from '@repo/test-registry/components/hover-card'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/label/page.tsx b/apps/test-react-router-rsc/app/routes/label/page.tsx index eeeee3c83..53234a083 100644 --- a/apps/test-react-router-rsc/app/routes/label/page.tsx +++ b/apps/test-react-router-rsc/app/routes/label/page.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import * as Label from '@repo/test-registry/components/label'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/menu/page.tsx b/apps/test-react-router-rsc/app/routes/menu/page.tsx index b6d40386b..31ee3adf7 100644 --- a/apps/test-react-router-rsc/app/routes/menu/page.tsx +++ b/apps/test-react-router-rsc/app/routes/menu/page.tsx @@ -1,6 +1,6 @@ import * as Menu from '@repo/test-registry/components/menu'; -export default function Page() { +export async function ServerComponent() { return (
diff --git a/apps/test-react-router-rsc/app/routes/menubar/page.tsx b/apps/test-react-router-rsc/app/routes/menubar/page.tsx index 1e256aaf9..3a193df7b 100644 --- a/apps/test-react-router-rsc/app/routes/menubar/page.tsx +++ b/apps/test-react-router-rsc/app/routes/menubar/page.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import * as Menubar from '@repo/test-registry/components/menubar'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/navigation-menu/page.tsx b/apps/test-react-router-rsc/app/routes/navigation-menu/page.tsx index 1cdfb0d84..c89989d05 100644 --- a/apps/test-react-router-rsc/app/routes/navigation-menu/page.tsx +++ b/apps/test-react-router-rsc/app/routes/navigation-menu/page.tsx @@ -1,5 +1,5 @@ import * as NavigationMenu from '@repo/test-registry/components/navigation-menu'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/one-time-password-field/page.tsx b/apps/test-react-router-rsc/app/routes/one-time-password-field/page.tsx index 756d1d8ab..f5fedc764 100644 --- a/apps/test-react-router-rsc/app/routes/one-time-password-field/page.tsx +++ b/apps/test-react-router-rsc/app/routes/one-time-password-field/page.tsx @@ -1,5 +1,5 @@ import * as OneTimePasswordField from '@repo/test-registry/components/one-time-password-field'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/password-toggle-field/page.tsx b/apps/test-react-router-rsc/app/routes/password-toggle-field/page.tsx index 637a53c7a..251cb8358 100644 --- a/apps/test-react-router-rsc/app/routes/password-toggle-field/page.tsx +++ b/apps/test-react-router-rsc/app/routes/password-toggle-field/page.tsx @@ -1,5 +1,5 @@ import * as PasswordToggleField from '@repo/test-registry/components/password-toggle-field'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/popover/page.tsx b/apps/test-react-router-rsc/app/routes/popover/page.tsx index 69df924b5..738c7ae6f 100644 --- a/apps/test-react-router-rsc/app/routes/popover/page.tsx +++ b/apps/test-react-router-rsc/app/routes/popover/page.tsx @@ -1,5 +1,5 @@ import * as Popover from '@repo/test-registry/components/popover'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/popper/page.tsx b/apps/test-react-router-rsc/app/routes/popper/page.tsx index 1445cb5c4..4dea36a0c 100644 --- a/apps/test-react-router-rsc/app/routes/popper/page.tsx +++ b/apps/test-react-router-rsc/app/routes/popper/page.tsx @@ -1,6 +1,6 @@ import * as Popper from '@repo/test-registry/components/popper'; -export default function Page() { +export async function ServerComponent() { return (
diff --git a/apps/test-react-router-rsc/app/routes/portal/page.tsx b/apps/test-react-router-rsc/app/routes/portal/page.tsx index a869cfdcd..6ec768d0e 100644 --- a/apps/test-react-router-rsc/app/routes/portal/page.tsx +++ b/apps/test-react-router-rsc/app/routes/portal/page.tsx @@ -1,6 +1,6 @@ import * as Portal from '@repo/test-registry/components/portal'; -export default function Page() { +export async function ServerComponent() { return (
diff --git a/apps/test-react-router-rsc/app/routes/progress/page.tsx b/apps/test-react-router-rsc/app/routes/progress/page.tsx index 1c3788f23..2ed436ed8 100644 --- a/apps/test-react-router-rsc/app/routes/progress/page.tsx +++ b/apps/test-react-router-rsc/app/routes/progress/page.tsx @@ -1,5 +1,5 @@ import * as Progress from '@repo/test-registry/components/progress'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/radio-group/page.tsx b/apps/test-react-router-rsc/app/routes/radio-group/page.tsx index 4737c444a..ef28fd98a 100644 --- a/apps/test-react-router-rsc/app/routes/radio-group/page.tsx +++ b/apps/test-react-router-rsc/app/routes/radio-group/page.tsx @@ -1,5 +1,5 @@ import * as RadioGroup from '@repo/test-registry/components/radio-group'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/roving-focus/page.tsx b/apps/test-react-router-rsc/app/routes/roving-focus/page.tsx index e9fd86bb8..3b9255a88 100644 --- a/apps/test-react-router-rsc/app/routes/roving-focus/page.tsx +++ b/apps/test-react-router-rsc/app/routes/roving-focus/page.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import * as RovingFocus from '@repo/test-registry/components/roving-focus'; -export default function Page() { +export async function ServerComponent() { return ( <>

Basic

diff --git a/apps/test-react-router-rsc/app/routes/scroll-area/page.tsx b/apps/test-react-router-rsc/app/routes/scroll-area/page.tsx index 2975e1500..d775b735a 100644 --- a/apps/test-react-router-rsc/app/routes/scroll-area/page.tsx +++ b/apps/test-react-router-rsc/app/routes/scroll-area/page.tsx @@ -1,5 +1,5 @@ import * as ScrollArea from '@repo/test-registry/components/scroll-area'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/select/page.tsx b/apps/test-react-router-rsc/app/routes/select/page.tsx index ebab62853..539eef138 100644 --- a/apps/test-react-router-rsc/app/routes/select/page.tsx +++ b/apps/test-react-router-rsc/app/routes/select/page.tsx @@ -1,5 +1,5 @@ import * as Select from '@repo/test-registry/components/select'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/separator/page.tsx b/apps/test-react-router-rsc/app/routes/separator/page.tsx index befc17592..6e00362d3 100644 --- a/apps/test-react-router-rsc/app/routes/separator/page.tsx +++ b/apps/test-react-router-rsc/app/routes/separator/page.tsx @@ -1,5 +1,5 @@ import * as Separator from '@repo/test-registry/components/separator'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/slider/page.tsx b/apps/test-react-router-rsc/app/routes/slider/page.tsx index f44843a0f..e1099a9c0 100644 --- a/apps/test-react-router-rsc/app/routes/slider/page.tsx +++ b/apps/test-react-router-rsc/app/routes/slider/page.tsx @@ -1,5 +1,5 @@ import * as Slider from '@repo/test-registry/components/slider'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/slot/page.tsx b/apps/test-react-router-rsc/app/routes/slot/page.tsx index 9ee17eeb0..e726eaf0e 100644 --- a/apps/test-react-router-rsc/app/routes/slot/page.tsx +++ b/apps/test-react-router-rsc/app/routes/slot/page.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import * as Slot from '@repo/test-registry/components/slot'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/switch/page.tsx b/apps/test-react-router-rsc/app/routes/switch/page.tsx index 7a331ff84..b0a0b0d4f 100644 --- a/apps/test-react-router-rsc/app/routes/switch/page.tsx +++ b/apps/test-react-router-rsc/app/routes/switch/page.tsx @@ -1,5 +1,5 @@ import * as Switch from '@repo/test-registry/components/switch'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/tabs/page.tsx b/apps/test-react-router-rsc/app/routes/tabs/page.tsx index aa763ecde..52565b7f2 100644 --- a/apps/test-react-router-rsc/app/routes/tabs/page.tsx +++ b/apps/test-react-router-rsc/app/routes/tabs/page.tsx @@ -1,5 +1,5 @@ import * as Tabs from '@repo/test-registry/components/tabs'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/toast/page.tsx b/apps/test-react-router-rsc/app/routes/toast/page.tsx index e5a76bb8b..b4c5150b3 100644 --- a/apps/test-react-router-rsc/app/routes/toast/page.tsx +++ b/apps/test-react-router-rsc/app/routes/toast/page.tsx @@ -1,5 +1,5 @@ import * as Toast from '@repo/test-registry/components/toast'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/toggle-group/page.tsx b/apps/test-react-router-rsc/app/routes/toggle-group/page.tsx index a7bea7f0e..48821f77f 100644 --- a/apps/test-react-router-rsc/app/routes/toggle-group/page.tsx +++ b/apps/test-react-router-rsc/app/routes/toggle-group/page.tsx @@ -1,5 +1,5 @@ import * as ToggleGroup from '@repo/test-registry/components/toggle-group'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/toggle/page.tsx b/apps/test-react-router-rsc/app/routes/toggle/page.tsx index df722f71c..574eade2d 100644 --- a/apps/test-react-router-rsc/app/routes/toggle/page.tsx +++ b/apps/test-react-router-rsc/app/routes/toggle/page.tsx @@ -1,5 +1,5 @@ import * as Toggle from '@repo/test-registry/components/toggle'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/toolbar/page.tsx b/apps/test-react-router-rsc/app/routes/toolbar/page.tsx index 31024ad77..0985e3022 100644 --- a/apps/test-react-router-rsc/app/routes/toolbar/page.tsx +++ b/apps/test-react-router-rsc/app/routes/toolbar/page.tsx @@ -1,5 +1,5 @@ import * as Toolbar from '@repo/test-registry/components/toolbar'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/tooltip/page.tsx b/apps/test-react-router-rsc/app/routes/tooltip/page.tsx index efe77a52e..d1b4e9702 100644 --- a/apps/test-react-router-rsc/app/routes/tooltip/page.tsx +++ b/apps/test-react-router-rsc/app/routes/tooltip/page.tsx @@ -1,5 +1,5 @@ import * as Tooltip from '@repo/test-registry/components/tooltip'; -export default function Page() { +export async function ServerComponent() { return ; } diff --git a/apps/test-react-router-rsc/app/routes/visually-hidden/page.tsx b/apps/test-react-router-rsc/app/routes/visually-hidden/page.tsx index e20db888d..fff4ad3f8 100644 --- a/apps/test-react-router-rsc/app/routes/visually-hidden/page.tsx +++ b/apps/test-react-router-rsc/app/routes/visually-hidden/page.tsx @@ -1,5 +1,5 @@ import * as VisuallyHidden from '@repo/test-registry/components/visually-hidden'; -export default function Page() { +export async function ServerComponent() { return ; } From 5a409d9be61b71b6c8f6069eef0e344ddcae0463 Mon Sep 17 00:00:00 2001 From: Chance Strickland Date: Tue, 4 Nov 2025 13:25:32 -0800 Subject: [PATCH 07/11] revert --- packages/react/collection/src/collection.tsx | 12 ++++++------ packages/react/direction/src/index.ts | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/react/collection/src/collection.tsx b/packages/react/collection/src/collection.tsx index cf76f1e6d..2728cecfc 100644 --- a/packages/react/collection/src/collection.tsx +++ b/packages/react/collection/src/collection.tsx @@ -56,8 +56,8 @@ function createCollection, - SetItemMap: React.Dispatch>>, + ItemMap: ItemMap, + SetItemMap: React.Dispatch>>, ]; const CollectionProvider: React.FC<{ @@ -167,7 +167,7 @@ function createCollection>(new OrderedDict()); + return React.useState>(new OrderedDict()); } /* ----------------------------------------------------------------------------------------------- diff --git a/packages/react/direction/src/index.ts b/packages/react/direction/src/index.ts index 56908e494..b5009c1dd 100644 --- a/packages/react/direction/src/index.ts +++ b/packages/react/direction/src/index.ts @@ -1,3 +1,4 @@ +'use client'; export { useDirection, // From 91915cbd67ebd8ef686e3d6cedcc23cfc5741187 Mon Sep 17 00:00:00 2001 From: Chance Strickland Date: Tue, 4 Nov 2025 13:34:58 -0800 Subject: [PATCH 08/11] remove ssr testing workspace --- .changeset/config.json | 2 +- apps/ssr-testing/.gitignore | 32 -- apps/ssr-testing/README.md | 11 - apps/ssr-testing/app/accessible-icon/page.tsx | 12 - apps/ssr-testing/app/accordion/page.tsx | 47 -- apps/ssr-testing/app/alert-dialog/page.tsx | 21 - apps/ssr-testing/app/avatar/page.tsx | 11 - apps/ssr-testing/app/checkbox/page.tsx | 10 - apps/ssr-testing/app/collapsible/page.tsx | 11 - apps/ssr-testing/app/context-menu/page.tsx | 20 - apps/ssr-testing/app/dialog/page.tsx | 18 - apps/ssr-testing/app/dropdown-menu/page.tsx | 21 - apps/ssr-testing/app/form/page.tsx | 15 - apps/ssr-testing/app/hover-card/page.tsx | 16 - apps/ssr-testing/app/label/page.tsx | 6 - apps/ssr-testing/app/layout.tsx | 58 --- apps/ssr-testing/app/menubar/page.tsx | 21 - apps/ssr-testing/app/navigation-menu/page.tsx | 21 - .../app/one-time-password-field/page.tsx | 28 -- apps/ssr-testing/app/page.tsx | 3 - .../app/password-toggle-field/page.tsx | 61 --- apps/ssr-testing/app/popover/page.tsx | 16 - .../app/portal/conditional-portal.tsx | 20 - .../app/portal/custom-portal-container.tsx | 16 - apps/ssr-testing/app/portal/page.tsx | 40 -- apps/ssr-testing/app/progress/page.tsx | 10 - apps/ssr-testing/app/radio-group/page.tsx | 35 -- .../app/roving-focus-group/page.tsx | 106 ----- .../roving-focus.client.tsx | 95 ---- apps/ssr-testing/app/scroll-area/page.tsx | 77 --- apps/ssr-testing/app/select/page.tsx | 64 --- apps/ssr-testing/app/separator/page.tsx | 6 - apps/ssr-testing/app/slider/page.tsx | 52 --- apps/ssr-testing/app/slot/page.tsx | 13 - apps/ssr-testing/app/switch/page.tsx | 10 - apps/ssr-testing/app/tabs/page.tsx | 24 - apps/ssr-testing/app/toast/page.tsx | 17 - apps/ssr-testing/app/toggle-group/page.tsx | 11 - apps/ssr-testing/app/toolbar/page.tsx | 12 - apps/ssr-testing/app/tooltip/page.tsx | 18 - apps/ssr-testing/app/visually-hidden/page.tsx | 11 - apps/ssr-testing/next-env.d.ts | 5 - apps/ssr-testing/next.config.js | 5 - apps/ssr-testing/package.json | 24 - apps/ssr-testing/public/favicon.ico | Bin 15086 -> 0 bytes apps/ssr-testing/tsconfig.json | 8 - apps/test-react-router-rsc/package.json | 2 +- apps/test-react-router/package.json | 2 +- apps/test-vite-react-17/package.json | 2 +- apps/test-vite-react-18/package.json | 2 +- apps/test-vite-react-19/package.json | 2 +- package.json | 1 - pnpm-lock.yaml | 439 ------------------ 53 files changed, 6 insertions(+), 1584 deletions(-) delete mode 100644 apps/ssr-testing/.gitignore delete mode 100644 apps/ssr-testing/README.md delete mode 100644 apps/ssr-testing/app/accessible-icon/page.tsx delete mode 100644 apps/ssr-testing/app/accordion/page.tsx delete mode 100644 apps/ssr-testing/app/alert-dialog/page.tsx delete mode 100644 apps/ssr-testing/app/avatar/page.tsx delete mode 100644 apps/ssr-testing/app/checkbox/page.tsx delete mode 100644 apps/ssr-testing/app/collapsible/page.tsx delete mode 100644 apps/ssr-testing/app/context-menu/page.tsx delete mode 100644 apps/ssr-testing/app/dialog/page.tsx delete mode 100644 apps/ssr-testing/app/dropdown-menu/page.tsx delete mode 100644 apps/ssr-testing/app/form/page.tsx delete mode 100644 apps/ssr-testing/app/hover-card/page.tsx delete mode 100644 apps/ssr-testing/app/label/page.tsx delete mode 100644 apps/ssr-testing/app/layout.tsx delete mode 100644 apps/ssr-testing/app/menubar/page.tsx delete mode 100644 apps/ssr-testing/app/navigation-menu/page.tsx delete mode 100644 apps/ssr-testing/app/one-time-password-field/page.tsx delete mode 100644 apps/ssr-testing/app/page.tsx delete mode 100644 apps/ssr-testing/app/password-toggle-field/page.tsx delete mode 100644 apps/ssr-testing/app/popover/page.tsx delete mode 100644 apps/ssr-testing/app/portal/conditional-portal.tsx delete mode 100644 apps/ssr-testing/app/portal/custom-portal-container.tsx delete mode 100644 apps/ssr-testing/app/portal/page.tsx delete mode 100644 apps/ssr-testing/app/progress/page.tsx delete mode 100644 apps/ssr-testing/app/radio-group/page.tsx delete mode 100644 apps/ssr-testing/app/roving-focus-group/page.tsx delete mode 100644 apps/ssr-testing/app/roving-focus-group/roving-focus.client.tsx delete mode 100644 apps/ssr-testing/app/scroll-area/page.tsx delete mode 100644 apps/ssr-testing/app/select/page.tsx delete mode 100644 apps/ssr-testing/app/separator/page.tsx delete mode 100644 apps/ssr-testing/app/slider/page.tsx delete mode 100644 apps/ssr-testing/app/slot/page.tsx delete mode 100644 apps/ssr-testing/app/switch/page.tsx delete mode 100644 apps/ssr-testing/app/tabs/page.tsx delete mode 100644 apps/ssr-testing/app/toast/page.tsx delete mode 100644 apps/ssr-testing/app/toggle-group/page.tsx delete mode 100644 apps/ssr-testing/app/toolbar/page.tsx delete mode 100644 apps/ssr-testing/app/tooltip/page.tsx delete mode 100644 apps/ssr-testing/app/visually-hidden/page.tsx delete mode 100644 apps/ssr-testing/next-env.d.ts delete mode 100644 apps/ssr-testing/next.config.js delete mode 100644 apps/ssr-testing/package.json delete mode 100644 apps/ssr-testing/public/favicon.ico delete mode 100644 apps/ssr-testing/tsconfig.json diff --git a/.changeset/config.json b/.changeset/config.json index de0b18171..ca32e1a41 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -11,5 +11,5 @@ "useCalculatedVersion": true, "prereleaseTemplate": "rc.{timestamp}" }, - "ignore": ["@repo/ssr-testing", "@repo/storybook"] + "ignore": ["@repo/*"] } diff --git a/apps/ssr-testing/.gitignore b/apps/ssr-testing/.gitignore deleted file mode 100644 index 6ea2d6e18..000000000 --- a/apps/ssr-testing/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -*.log* - -# local env files -.env.local -.env.development.local -.env.test.local -.env.production.local - -# vercel -.vercel diff --git a/apps/ssr-testing/README.md b/apps/ssr-testing/README.md deleted file mode 100644 index 2464eab64..000000000 --- a/apps/ssr-testing/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# `@repo/ssr-testing` - -This is a testing playground for SSR support in our primitives using a [Next.js](https://nextjs.org/) project. - -## Getting Started - -From the root of the repo, run the development server: - -```sh -pnpm dev:ssr -``` diff --git a/apps/ssr-testing/app/accessible-icon/page.tsx b/apps/ssr-testing/app/accessible-icon/page.tsx deleted file mode 100644 index b6ad8fe79..000000000 --- a/apps/ssr-testing/app/accessible-icon/page.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import * as React from 'react'; -import { AccessibleIcon } from 'radix-ui'; - -export default function Page() { - return ( - - ); -} diff --git a/apps/ssr-testing/app/accordion/page.tsx b/apps/ssr-testing/app/accordion/page.tsx deleted file mode 100644 index af20e290d..000000000 --- a/apps/ssr-testing/app/accordion/page.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import * as React from 'react'; -import { Accordion } from 'radix-ui'; - -export default function Page() { - return ( - - - - One - - - Per erat orci nostra luctus sociosqu mus risus penatibus, duis elit vulputate viverra - integer ullamcorper congue curabitur sociis, nisi malesuada scelerisque quam suscipit - habitant sed. - - - - - Two - - - Cursus sed mattis commodo fermentum conubia ipsum pulvinar sagittis, diam eget bibendum - porta nascetur ac dictum, leo tellus dis integer platea ultrices mi. - - - - - Three (disabled) - - - Sociis hac sapien turpis conubia sagittis justo dui, inceptos penatibus feugiat himenaeos - euismod magna, nec tempor pulvinar eu etiam mattis. - - - - - Four - - - Odio placerat quisque sapien sagittis non sociis ligula penatibus dignissim vitae, enim - vulputate nullam semper potenti etiam volutpat libero. - - - - - ); -} diff --git a/apps/ssr-testing/app/alert-dialog/page.tsx b/apps/ssr-testing/app/alert-dialog/page.tsx deleted file mode 100644 index be897f8ea..000000000 --- a/apps/ssr-testing/app/alert-dialog/page.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import * as React from 'react'; -import { AlertDialog } from 'radix-ui'; - -export default function Page() { - return ( - - delete everything - - - - Are you sure? - - This will do a very dangerous thing. Thar be dragons! - - yolo, do it - maybe not - - - - ); -} diff --git a/apps/ssr-testing/app/avatar/page.tsx b/apps/ssr-testing/app/avatar/page.tsx deleted file mode 100644 index 64faea3bc..000000000 --- a/apps/ssr-testing/app/avatar/page.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import * as React from 'react'; -import { Avatar } from 'radix-ui'; - -export default function Page() { - return ( - - A - - - ); -} diff --git a/apps/ssr-testing/app/checkbox/page.tsx b/apps/ssr-testing/app/checkbox/page.tsx deleted file mode 100644 index 5d76ebb2b..000000000 --- a/apps/ssr-testing/app/checkbox/page.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import * as React from 'react'; -import { Checkbox } from 'radix-ui'; - -export default function Page() { - return ( - - [ โœ” ] - - ); -} diff --git a/apps/ssr-testing/app/collapsible/page.tsx b/apps/ssr-testing/app/collapsible/page.tsx deleted file mode 100644 index 53c0ead32..000000000 --- a/apps/ssr-testing/app/collapsible/page.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import * as React from 'react'; -import { Collapsible } from 'radix-ui'; - -export default function Page() { - return ( - - Trigger - Content - - ); -} diff --git a/apps/ssr-testing/app/context-menu/page.tsx b/apps/ssr-testing/app/context-menu/page.tsx deleted file mode 100644 index 5dc7fd0bb..000000000 --- a/apps/ssr-testing/app/context-menu/page.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import * as React from 'react'; -import { ContextMenu } from 'radix-ui'; - -export default function Page() { - return ( - - Right click here - - - Undo - Redo - - Cut - Copy - Paste - - - - ); -} diff --git a/apps/ssr-testing/app/dialog/page.tsx b/apps/ssr-testing/app/dialog/page.tsx deleted file mode 100644 index 7df2aa8b3..000000000 --- a/apps/ssr-testing/app/dialog/page.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import * as React from 'react'; -import { Dialog } from 'radix-ui'; - -export default function Page() { - return ( - - open - - - - Title - Description - close - - - - ); -} diff --git a/apps/ssr-testing/app/dropdown-menu/page.tsx b/apps/ssr-testing/app/dropdown-menu/page.tsx deleted file mode 100644 index 2a0d494f9..000000000 --- a/apps/ssr-testing/app/dropdown-menu/page.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import * as React from 'react'; -import { DropdownMenu } from 'radix-ui'; - -export default function Page() { - return ( - - Open - - - Undo - Redo - - Cut - Copy - Paste - - - - - ); -} diff --git a/apps/ssr-testing/app/form/page.tsx b/apps/ssr-testing/app/form/page.tsx deleted file mode 100644 index 119722f48..000000000 --- a/apps/ssr-testing/app/form/page.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import * as React from 'react'; -import { Form } from 'radix-ui'; - -export default function Page() { - return ( - - - Email - - Value is missing - Email is invalid - - - ); -} diff --git a/apps/ssr-testing/app/hover-card/page.tsx b/apps/ssr-testing/app/hover-card/page.tsx deleted file mode 100644 index 2f4da36ea..000000000 --- a/apps/ssr-testing/app/hover-card/page.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import * as React from 'react'; -import { HoverCard } from 'radix-ui'; - -export default function Page() { - return ( - - Hover me - - - - Nicely done! - - - - ); -} diff --git a/apps/ssr-testing/app/label/page.tsx b/apps/ssr-testing/app/label/page.tsx deleted file mode 100644 index 2ca477956..000000000 --- a/apps/ssr-testing/app/label/page.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from 'react'; -import { Label } from 'radix-ui'; - -export default function Page() { - return Label; -} diff --git a/apps/ssr-testing/app/layout.tsx b/apps/ssr-testing/app/layout.tsx deleted file mode 100644 index d197088b3..000000000 --- a/apps/ssr-testing/app/layout.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import * as React from 'react'; -import type { Metadata } from 'next'; -import Link from 'next/link'; - -export default function Layout({ children }: { children: React.ReactNode }) { - return ( - - - -

SSR / RSC testing

-
-
- AccessibleIcon - Accordion - AlertDialog - Avatar - Checkbox - Collapsible - ContextMenu - Dialog - DropdownMenu - Form - HoverCard - Label - Menubar - NavigationMenu - OneTimePasswordField - PasswordToggleField - Popover - Portal - Progress - RadioGroup - RovingFocusGroup - ScrollArea - Select - Separator - Slider - Slot - Switch - Tabs - Toast - ToggleGroup - Toolbar - Tooltip - VisuallyHidden -
- -
{children}
-
- - -
- ); -} - -export const metadata: Metadata = { - title: 'SSR testing', -}; diff --git a/apps/ssr-testing/app/menubar/page.tsx b/apps/ssr-testing/app/menubar/page.tsx deleted file mode 100644 index 0d1c0f425..000000000 --- a/apps/ssr-testing/app/menubar/page.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import * as React from 'react'; -import { Menubar } from 'radix-ui'; - -export default function Page() { - return ( - - - Open - - - Menu - Item 1 - Item 2 - Item 3 - - - - - - ); -} diff --git a/apps/ssr-testing/app/navigation-menu/page.tsx b/apps/ssr-testing/app/navigation-menu/page.tsx deleted file mode 100644 index 6593c09a9..000000000 --- a/apps/ssr-testing/app/navigation-menu/page.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import * as React from 'react'; -import { NavigationMenu } from 'radix-ui'; - -export default function Page() { - return ( - - - - Nav Menu Item 1 - - Link - - - - - Nav Menu Item 2 - - - - ); -} diff --git a/apps/ssr-testing/app/one-time-password-field/page.tsx b/apps/ssr-testing/app/one-time-password-field/page.tsx deleted file mode 100644 index 70746a5ed..000000000 --- a/apps/ssr-testing/app/one-time-password-field/page.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import * as React from 'react'; -import { unstable_OneTimePasswordField as OneTimePasswordField } from 'radix-ui'; - -export default function Page() { - return ( -
- - - - - - - - - -

With indices

- - - - - - - - - -
- ); -} diff --git a/apps/ssr-testing/app/page.tsx b/apps/ssr-testing/app/page.tsx deleted file mode 100644 index 67e085913..000000000 --- a/apps/ssr-testing/app/page.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function Page() { - return null; -} diff --git a/apps/ssr-testing/app/password-toggle-field/page.tsx b/apps/ssr-testing/app/password-toggle-field/page.tsx deleted file mode 100644 index 4b6ce5610..000000000 --- a/apps/ssr-testing/app/password-toggle-field/page.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import * as React from 'react'; -import { unstable_PasswordToggleField as PasswordToggleField } from 'radix-ui'; - -export default function Page() { - return ( -
-
- - - - - -
-
- - - - } hidden={} /> - - -
-
- ); -} - -function EyeClosedIcon() { - return ( - - - - ); -} - -function EyeOpenIcon() { - return ( - - - - ); -} diff --git a/apps/ssr-testing/app/popover/page.tsx b/apps/ssr-testing/app/popover/page.tsx deleted file mode 100644 index 6e2d0f2fb..000000000 --- a/apps/ssr-testing/app/popover/page.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import * as React from 'react'; -import { Popover } from 'radix-ui'; - -export default function Page() { - return ( - - open - - - close - - - - - ); -} diff --git a/apps/ssr-testing/app/portal/conditional-portal.tsx b/apps/ssr-testing/app/portal/conditional-portal.tsx deleted file mode 100644 index 7c7190adb..000000000 --- a/apps/ssr-testing/app/portal/conditional-portal.tsx +++ /dev/null @@ -1,20 +0,0 @@ -'use client'; - -import * as React from 'react'; -import { Portal } from 'radix-ui'; - -export const ConditionalPortal = () => { - const [container, setContainer] = React.useState(null); - const [open, setOpen] = React.useState(false); - return ( -
- - - {open && ( - - This content is rendered in a custom container - - )} -
- ); -}; diff --git a/apps/ssr-testing/app/portal/custom-portal-container.tsx b/apps/ssr-testing/app/portal/custom-portal-container.tsx deleted file mode 100644 index 7645c2fbd..000000000 --- a/apps/ssr-testing/app/portal/custom-portal-container.tsx +++ /dev/null @@ -1,16 +0,0 @@ -'use client'; - -import * as React from 'react'; -import { Portal } from 'radix-ui'; - -export const CustomPortalContainer = () => { - const [container, setContainer] = React.useState(null); - return ( -
- - - This content is rendered in a custom container - -
- ); -}; diff --git a/apps/ssr-testing/app/portal/page.tsx b/apps/ssr-testing/app/portal/page.tsx deleted file mode 100644 index 2aa83b84d..000000000 --- a/apps/ssr-testing/app/portal/page.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import * as React from 'react'; -import { Portal } from 'radix-ui'; -import { CustomPortalContainer } from './custom-portal-container'; -import { ConditionalPortal } from './conditional-portal'; - -export default function Page() { - return ( -
-
-

This content is rendered in the main DOM tree

-

- Lorem ipsum dolor sit amet consectetur adipisicing elit. Quos porro, est ex quia itaque - facere fugit necessitatibus aut enim. Nisi rerum quae, repellat in perspiciatis explicabo - laboriosam necessitatibus eius pariatur. -

- - -

This content is rendered in a portal (another DOM tree)

-

- Because of the portal, it can appear in a different DOM tree from the main one (by - default a new element inside the body), even though it is part of the same React tree. -

-
-
- -
- - -
- -
- ); -} diff --git a/apps/ssr-testing/app/progress/page.tsx b/apps/ssr-testing/app/progress/page.tsx deleted file mode 100644 index 3d5613412..000000000 --- a/apps/ssr-testing/app/progress/page.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import * as React from 'react'; -import { Progress } from 'radix-ui'; - -export default function Page() { - return ( - - Progress - - ); -} diff --git a/apps/ssr-testing/app/radio-group/page.tsx b/apps/ssr-testing/app/radio-group/page.tsx deleted file mode 100644 index bc7b1f015..000000000 --- a/apps/ssr-testing/app/radio-group/page.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import * as React from 'react'; -import { Label, RadioGroup } from 'radix-ui'; - -export default function Page() { - return ( - - Favourite pet - - - - [ X ] - - Cat - -
- - - - [ X ] - - Dog - -
- - - - [ X ] - - Rabbit - -
-
-
- ); -} diff --git a/apps/ssr-testing/app/roving-focus-group/page.tsx b/apps/ssr-testing/app/roving-focus-group/page.tsx deleted file mode 100644 index ab491b678..000000000 --- a/apps/ssr-testing/app/roving-focus-group/page.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import * as React from 'react'; -import { RovingFocusProvider, RovingFocusToggle, ButtonGroup, Button } from './roving-focus.client'; - -export default function Page() { - return ( - <> -

Basic

- -
- -
- -

no orientation (both) + no looping

- - - - - - - - -

no orientation (both) + looping

- - - - - - - - -

horizontal orientation + no looping

- - - - - - - - -

horizontal orientation + looping

- - - - - - - - -

vertical orientation + no looping

- - - - - - - - -

vertical orientation + looping

- - - - - - - -
- -

Nested

- - - -
- - - - - - - - -
- - - -
- - ); -} diff --git a/apps/ssr-testing/app/roving-focus-group/roving-focus.client.tsx b/apps/ssr-testing/app/roving-focus-group/roving-focus.client.tsx deleted file mode 100644 index 2112a7d26..000000000 --- a/apps/ssr-testing/app/roving-focus-group/roving-focus.client.tsx +++ /dev/null @@ -1,95 +0,0 @@ -'use client'; -import * as React from 'react'; -import { composeEventHandlers, RovingFocus } from 'radix-ui/internal'; - -type Direction = 'ltr' | 'rtl'; - -const RovingFocusContext = React.createContext<{ - dir: 'ltr' | 'rtl'; - setDir: React.Dispatch>; -}>({ - dir: 'ltr', - setDir: () => void 0, -}); -RovingFocusContext.displayName = 'RovingFocusContext'; - -export function RovingFocusProvider({ children }: { children: React.ReactNode }) { - const [dir, setDir] = React.useState('ltr'); - return ( -
- {children} -
- ); -} - -export function RovingFocusToggle() { - const { dir, setDir } = React.use(RovingFocusContext); - return ( - - ); -} - -const ButtonGroupContext = React.createContext<{ - value?: string; - setValue: React.Dispatch>; -}>({} as any); - -type ButtonGroupProps = Omit, 'defaultValue'> & - RovingFocus.RovingFocusGroupProps & { defaultValue?: string }; - -export function ButtonGroup({ defaultValue, ...props }: ButtonGroupProps) { - const [value, setValue] = React.useState(defaultValue); - const { dir } = React.use(RovingFocusContext); - return ( - - - - ); -} - -type ButtonProps = Omit, 'value'> & { value?: string }; - -export function Button(props: ButtonProps) { - const { value: contextValue, setValue } = React.use(ButtonGroupContext); - const isSelected = - contextValue !== undefined && props.value !== undefined && contextValue === props.value; - - return ( - - -
- -
- ); -} diff --git a/apps/test-react-router-rsc/app/routes/dropdown-menu/page.tsx b/apps/test-react-router-rsc/app/routes/dropdown-menu.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/dropdown-menu/page.tsx rename to apps/test-react-router-rsc/app/routes/dropdown-menu.tsx diff --git a/apps/test-react-router-rsc/app/routes/focus-guards/page.tsx b/apps/test-react-router-rsc/app/routes/focus-guards.tsx similarity index 82% rename from apps/test-react-router-rsc/app/routes/focus-guards/page.tsx rename to apps/test-react-router-rsc/app/routes/focus-guards.tsx index 389687b47..ea3b04e11 100644 --- a/apps/test-react-router-rsc/app/routes/focus-guards/page.tsx +++ b/apps/test-react-router-rsc/app/routes/focus-guards.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as FocusGuards from '@repo/test-registry/components/focus-guards'; export async function ServerComponent() { diff --git a/apps/test-react-router-rsc/app/routes/focus-scope/page.tsx b/apps/test-react-router-rsc/app/routes/focus-scope.tsx similarity index 87% rename from apps/test-react-router-rsc/app/routes/focus-scope/page.tsx rename to apps/test-react-router-rsc/app/routes/focus-scope.tsx index 9406d823f..3d8e80c61 100644 --- a/apps/test-react-router-rsc/app/routes/focus-scope/page.tsx +++ b/apps/test-react-router-rsc/app/routes/focus-scope.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as FocusScope from '@repo/test-registry/components/focus-scope'; export async function ServerComponent() { diff --git a/apps/test-react-router-rsc/app/routes/form/page.tsx b/apps/test-react-router-rsc/app/routes/form.tsx similarity index 80% rename from apps/test-react-router-rsc/app/routes/form/page.tsx rename to apps/test-react-router-rsc/app/routes/form.tsx index 83a5724b7..f612508ca 100644 --- a/apps/test-react-router-rsc/app/routes/form/page.tsx +++ b/apps/test-react-router-rsc/app/routes/form.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as Form from '@repo/test-registry/components/form'; export async function ServerComponent() { diff --git a/apps/test-react-router-rsc/app/routes/hover-card/page.tsx b/apps/test-react-router-rsc/app/routes/hover-card.tsx similarity index 82% rename from apps/test-react-router-rsc/app/routes/hover-card/page.tsx rename to apps/test-react-router-rsc/app/routes/hover-card.tsx index f7b42003c..86a9022cd 100644 --- a/apps/test-react-router-rsc/app/routes/hover-card/page.tsx +++ b/apps/test-react-router-rsc/app/routes/hover-card.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as HoverCard from '@repo/test-registry/components/hover-card'; export async function ServerComponent() { diff --git a/apps/test-react-router-rsc/app/routes/page.tsx b/apps/test-react-router-rsc/app/routes/index.tsx similarity index 71% rename from apps/test-react-router-rsc/app/routes/page.tsx rename to apps/test-react-router-rsc/app/routes/index.tsx index 6c620d0bb..265138491 100644 --- a/apps/test-react-router-rsc/app/routes/page.tsx +++ b/apps/test-react-router-rsc/app/routes/index.tsx @@ -1,6 +1,6 @@ -import type { Route } from './+types/page'; +import type { Route } from './+types/index'; -export function meta({}: Route.MetaArgs) { +export function meta(_args: Route.MetaArgs) { return [ { title: 'New React Router App' }, { name: 'description', content: 'Welcome to React Router!' }, diff --git a/apps/test-react-router-rsc/app/routes/label/page.tsx b/apps/test-react-router-rsc/app/routes/label.tsx similarity index 80% rename from apps/test-react-router-rsc/app/routes/label/page.tsx rename to apps/test-react-router-rsc/app/routes/label.tsx index 53234a083..e092e7ced 100644 --- a/apps/test-react-router-rsc/app/routes/label/page.tsx +++ b/apps/test-react-router-rsc/app/routes/label.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as Label from '@repo/test-registry/components/label'; export async function ServerComponent() { diff --git a/apps/test-react-router-rsc/app/routes/menu/page.tsx b/apps/test-react-router-rsc/app/routes/menu.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/menu/page.tsx rename to apps/test-react-router-rsc/app/routes/menu.tsx diff --git a/apps/test-react-router-rsc/app/routes/menubar/page.tsx b/apps/test-react-router-rsc/app/routes/menubar.tsx similarity index 81% rename from apps/test-react-router-rsc/app/routes/menubar/page.tsx rename to apps/test-react-router-rsc/app/routes/menubar.tsx index 3a193df7b..325cc2ceb 100644 --- a/apps/test-react-router-rsc/app/routes/menubar/page.tsx +++ b/apps/test-react-router-rsc/app/routes/menubar.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as Menubar from '@repo/test-registry/components/menubar'; export async function ServerComponent() { diff --git a/apps/test-react-router-rsc/app/routes/navigation-menu/page.tsx b/apps/test-react-router-rsc/app/routes/navigation-menu.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/navigation-menu/page.tsx rename to apps/test-react-router-rsc/app/routes/navigation-menu.tsx diff --git a/apps/test-react-router-rsc/app/routes/one-time-password-field/page.tsx b/apps/test-react-router-rsc/app/routes/one-time-password-field.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/one-time-password-field/page.tsx rename to apps/test-react-router-rsc/app/routes/one-time-password-field.tsx diff --git a/apps/test-react-router-rsc/app/routes/password-toggle-field/page.tsx b/apps/test-react-router-rsc/app/routes/password-toggle-field.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/password-toggle-field/page.tsx rename to apps/test-react-router-rsc/app/routes/password-toggle-field.tsx diff --git a/apps/test-react-router-rsc/app/routes/popover/page.tsx b/apps/test-react-router-rsc/app/routes/popover.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/popover/page.tsx rename to apps/test-react-router-rsc/app/routes/popover.tsx diff --git a/apps/test-react-router-rsc/app/routes/popper/page.tsx b/apps/test-react-router-rsc/app/routes/popper.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/popper/page.tsx rename to apps/test-react-router-rsc/app/routes/popper.tsx diff --git a/apps/test-react-router-rsc/app/routes/portal/page.tsx b/apps/test-react-router-rsc/app/routes/portal.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/portal/page.tsx rename to apps/test-react-router-rsc/app/routes/portal.tsx diff --git a/apps/test-react-router-rsc/app/routes/progress/page.tsx b/apps/test-react-router-rsc/app/routes/progress.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/progress/page.tsx rename to apps/test-react-router-rsc/app/routes/progress.tsx diff --git a/apps/test-react-router-rsc/app/routes/radio-group/page.tsx b/apps/test-react-router-rsc/app/routes/radio-group.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/radio-group/page.tsx rename to apps/test-react-router-rsc/app/routes/radio-group.tsx diff --git a/apps/test-react-router-rsc/app/routes/roving-focus/page.tsx b/apps/test-react-router-rsc/app/routes/roving-focus.tsx similarity index 88% rename from apps/test-react-router-rsc/app/routes/roving-focus/page.tsx rename to apps/test-react-router-rsc/app/routes/roving-focus.tsx index 3b9255a88..79a2aeb34 100644 --- a/apps/test-react-router-rsc/app/routes/roving-focus/page.tsx +++ b/apps/test-react-router-rsc/app/routes/roving-focus.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as RovingFocus from '@repo/test-registry/components/roving-focus'; export async function ServerComponent() { diff --git a/apps/test-react-router-rsc/app/routes/scroll-area/page.tsx b/apps/test-react-router-rsc/app/routes/scroll-area.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/scroll-area/page.tsx rename to apps/test-react-router-rsc/app/routes/scroll-area.tsx diff --git a/apps/test-react-router-rsc/app/routes/select/page.tsx b/apps/test-react-router-rsc/app/routes/select.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/select/page.tsx rename to apps/test-react-router-rsc/app/routes/select.tsx diff --git a/apps/test-react-router-rsc/app/routes/separator/page.tsx b/apps/test-react-router-rsc/app/routes/separator.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/separator/page.tsx rename to apps/test-react-router-rsc/app/routes/separator.tsx diff --git a/apps/test-react-router-rsc/app/routes/slider/page.tsx b/apps/test-react-router-rsc/app/routes/slider.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/slider/page.tsx rename to apps/test-react-router-rsc/app/routes/slider.tsx diff --git a/apps/test-react-router-rsc/app/routes/slot/page.tsx b/apps/test-react-router-rsc/app/routes/slot.tsx similarity index 80% rename from apps/test-react-router-rsc/app/routes/slot/page.tsx rename to apps/test-react-router-rsc/app/routes/slot.tsx index e726eaf0e..d96e5e2d1 100644 --- a/apps/test-react-router-rsc/app/routes/slot/page.tsx +++ b/apps/test-react-router-rsc/app/routes/slot.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as Slot from '@repo/test-registry/components/slot'; export async function ServerComponent() { diff --git a/apps/test-react-router-rsc/app/routes/switch/page.tsx b/apps/test-react-router-rsc/app/routes/switch.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/switch/page.tsx rename to apps/test-react-router-rsc/app/routes/switch.tsx diff --git a/apps/test-react-router-rsc/app/routes/tabs/page.tsx b/apps/test-react-router-rsc/app/routes/tabs.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/tabs/page.tsx rename to apps/test-react-router-rsc/app/routes/tabs.tsx diff --git a/apps/test-react-router-rsc/app/routes/toast/page.tsx b/apps/test-react-router-rsc/app/routes/toast.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/toast/page.tsx rename to apps/test-react-router-rsc/app/routes/toast.tsx diff --git a/apps/test-react-router-rsc/app/routes/toggle-group/page.tsx b/apps/test-react-router-rsc/app/routes/toggle-group.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/toggle-group/page.tsx rename to apps/test-react-router-rsc/app/routes/toggle-group.tsx diff --git a/apps/test-react-router-rsc/app/routes/toggle/page.tsx b/apps/test-react-router-rsc/app/routes/toggle.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/toggle/page.tsx rename to apps/test-react-router-rsc/app/routes/toggle.tsx diff --git a/apps/test-react-router-rsc/app/routes/toolbar/page.tsx b/apps/test-react-router-rsc/app/routes/toolbar.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/toolbar/page.tsx rename to apps/test-react-router-rsc/app/routes/toolbar.tsx diff --git a/apps/test-react-router-rsc/app/routes/tooltip/page.tsx b/apps/test-react-router-rsc/app/routes/tooltip.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/tooltip/page.tsx rename to apps/test-react-router-rsc/app/routes/tooltip.tsx diff --git a/apps/test-react-router-rsc/app/routes/visually-hidden/page.tsx b/apps/test-react-router-rsc/app/routes/visually-hidden.tsx similarity index 100% rename from apps/test-react-router-rsc/app/routes/visually-hidden/page.tsx rename to apps/test-react-router-rsc/app/routes/visually-hidden.tsx diff --git a/apps/test-react-router/app/globals.css b/apps/test-react-router/app/globals.css index 946a5ed8e..9fbccd9b0 100644 --- a/apps/test-react-router/app/globals.css +++ b/apps/test-react-router/app/globals.css @@ -1,13 +1,4 @@ @import '@repo/test-styles/resets.css'; @import '@repo/test-styles/colors.css'; - -html, -body { - min-height: 100vh; - min-height: 100svh; - height: 100%; - color-scheme: light dark; - @media (prefers-color-scheme: dark) { - color-scheme: dark; - } -} +@import '@repo/test-styles/global.css'; +@import '@repo/test-styles/components.css'; diff --git a/apps/test-react-router/app/routes.ts b/apps/test-react-router/app/routes.ts index 9490f3a25..ca9af6722 100644 --- a/apps/test-react-router/app/routes.ts +++ b/apps/test-react-router/app/routes.ts @@ -2,9 +2,9 @@ import { type RouteConfig, index, route } from '@react-router/dev/routes'; import { primitives } from '@repo/test-registry'; export default [ - index('routes/page.tsx'), + index('routes/index.tsx'), // Public APIs - ...primitives.public.map((primitive) => route(primitive.id, `routes/${primitive.id}/page.tsx`)), + ...primitives.public.map((primitive) => route(primitive.id, `routes/${primitive.id}.tsx`)), // Internal APIs - ...primitives.internal.map((primitive) => route(primitive.id, `routes/${primitive.id}/page.tsx`)), + ...primitives.internal.map((primitive) => route(primitive.id, `routes/${primitive.id}.tsx`)), ] satisfies RouteConfig; diff --git a/apps/test-react-router/app/routes/accessible-icon/page.tsx b/apps/test-react-router/app/routes/accessible-icon.tsx similarity index 100% rename from apps/test-react-router/app/routes/accessible-icon/page.tsx rename to apps/test-react-router/app/routes/accessible-icon.tsx diff --git a/apps/test-react-router/app/routes/accordion/page.tsx b/apps/test-react-router/app/routes/accordion.tsx similarity index 100% rename from apps/test-react-router/app/routes/accordion/page.tsx rename to apps/test-react-router/app/routes/accordion.tsx diff --git a/apps/test-react-router/app/routes/alert-dialog/page.tsx b/apps/test-react-router/app/routes/alert-dialog.tsx similarity index 100% rename from apps/test-react-router/app/routes/alert-dialog/page.tsx rename to apps/test-react-router/app/routes/alert-dialog.tsx diff --git a/apps/test-react-router/app/routes/arrow/page.tsx b/apps/test-react-router/app/routes/arrow.tsx similarity index 100% rename from apps/test-react-router/app/routes/arrow/page.tsx rename to apps/test-react-router/app/routes/arrow.tsx diff --git a/apps/test-react-router/app/routes/aspect-ratio/page.tsx b/apps/test-react-router/app/routes/aspect-ratio.tsx similarity index 100% rename from apps/test-react-router/app/routes/aspect-ratio/page.tsx rename to apps/test-react-router/app/routes/aspect-ratio.tsx diff --git a/apps/test-react-router/app/routes/avatar/page.tsx b/apps/test-react-router/app/routes/avatar.tsx similarity index 100% rename from apps/test-react-router/app/routes/avatar/page.tsx rename to apps/test-react-router/app/routes/avatar.tsx diff --git a/apps/test-react-router/app/routes/checkbox/page.tsx b/apps/test-react-router/app/routes/checkbox.tsx similarity index 100% rename from apps/test-react-router/app/routes/checkbox/page.tsx rename to apps/test-react-router/app/routes/checkbox.tsx diff --git a/apps/test-react-router/app/routes/collapsible/page.tsx b/apps/test-react-router/app/routes/collapsible.tsx similarity index 100% rename from apps/test-react-router/app/routes/collapsible/page.tsx rename to apps/test-react-router/app/routes/collapsible.tsx diff --git a/apps/test-react-router/app/routes/collection/page.tsx b/apps/test-react-router/app/routes/collection.tsx similarity index 94% rename from apps/test-react-router/app/routes/collection/page.tsx rename to apps/test-react-router/app/routes/collection.tsx index daa473458..1d4a406c1 100644 --- a/apps/test-react-router/app/routes/collection/page.tsx +++ b/apps/test-react-router/app/routes/collection.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import { Unstable, UnstableItem, diff --git a/apps/test-react-router/app/routes/context-menu/page.tsx b/apps/test-react-router/app/routes/context-menu.tsx similarity index 100% rename from apps/test-react-router/app/routes/context-menu/page.tsx rename to apps/test-react-router/app/routes/context-menu.tsx diff --git a/apps/test-react-router/app/routes/dialog/page.tsx b/apps/test-react-router/app/routes/dialog.tsx similarity index 100% rename from apps/test-react-router/app/routes/dialog/page.tsx rename to apps/test-react-router/app/routes/dialog.tsx diff --git a/apps/test-react-router/app/routes/direction/page.tsx b/apps/test-react-router/app/routes/direction.tsx similarity index 89% rename from apps/test-react-router/app/routes/direction/page.tsx rename to apps/test-react-router/app/routes/direction.tsx index c7ccfd91f..219ba966e 100644 --- a/apps/test-react-router/app/routes/direction/page.tsx +++ b/apps/test-react-router/app/routes/direction.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as Direction from '@repo/test-registry/components/direction'; export default function Page() { diff --git a/apps/test-react-router/app/routes/dismissable-layer/page.tsx b/apps/test-react-router/app/routes/dismissable-layer.tsx similarity index 100% rename from apps/test-react-router/app/routes/dismissable-layer/page.tsx rename to apps/test-react-router/app/routes/dismissable-layer.tsx diff --git a/apps/test-react-router/app/routes/dismissable-layer/dismissable-layer.client.tsx b/apps/test-react-router/app/routes/dismissable-layer/dismissable-layer.client.tsx deleted file mode 100644 index 055c86a36..000000000 --- a/apps/test-react-router/app/routes/dismissable-layer/dismissable-layer.client.tsx +++ /dev/null @@ -1,64 +0,0 @@ -'use client'; -import * as React from 'react'; -import { DismissableLayer as DismissableLayerPrimitive } from 'radix-ui/internal'; - -function DismissableLayerImpl() { - const [disableOutsidePointerEvents, setDisableOutsidePointerEvents] = React.useState(false); - const [dismissed, setDismissed] = React.useState(false); - return ( -
- {dismissed &&

Dismissed!

} - -
- { - console.log('escape key down', event); - }} - onPointerDownOutside={(event) => { - console.log('pointer down outside', event); - }} - onFocusOutside={(event) => { - console.log('focus outside', event); - }} - onInteractOutside={(event) => { - console.log('interact outside', event); - }} - onDismiss={() => { - setDismissed(true); - console.log('dismiss'); - }} - > -
-

Hello!

- -
-
-
- ); -} - -export function DismissableLayer() { - const [key, setKey] = React.useState(''); - return ( -
- -
- -
- ); -} diff --git a/apps/test-react-router/app/routes/dropdown-menu/page.tsx b/apps/test-react-router/app/routes/dropdown-menu.tsx similarity index 100% rename from apps/test-react-router/app/routes/dropdown-menu/page.tsx rename to apps/test-react-router/app/routes/dropdown-menu.tsx diff --git a/apps/test-react-router/app/routes/focus-guards/page.tsx b/apps/test-react-router/app/routes/focus-guards.tsx similarity index 81% rename from apps/test-react-router/app/routes/focus-guards/page.tsx rename to apps/test-react-router/app/routes/focus-guards.tsx index 6ed83543e..9d3845352 100644 --- a/apps/test-react-router/app/routes/focus-guards/page.tsx +++ b/apps/test-react-router/app/routes/focus-guards.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as FocusGuards from '@repo/test-registry/components/focus-guards'; export default function Page() { diff --git a/apps/test-react-router/app/routes/focus-scope/page.tsx b/apps/test-react-router/app/routes/focus-scope.tsx similarity index 87% rename from apps/test-react-router/app/routes/focus-scope/page.tsx rename to apps/test-react-router/app/routes/focus-scope.tsx index 7414dded4..21ca07db5 100644 --- a/apps/test-react-router/app/routes/focus-scope/page.tsx +++ b/apps/test-react-router/app/routes/focus-scope.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as FocusScope from '@repo/test-registry/components/focus-scope'; export default function Page() { diff --git a/apps/test-react-router/app/routes/form/page.tsx b/apps/test-react-router/app/routes/form.tsx similarity index 79% rename from apps/test-react-router/app/routes/form/page.tsx rename to apps/test-react-router/app/routes/form.tsx index 81118cf9e..c5c16502d 100644 --- a/apps/test-react-router/app/routes/form/page.tsx +++ b/apps/test-react-router/app/routes/form.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as Form from '@repo/test-registry/components/form'; export default function Page() { diff --git a/apps/test-react-router/app/routes/hover-card/page.tsx b/apps/test-react-router/app/routes/hover-card.tsx similarity index 81% rename from apps/test-react-router/app/routes/hover-card/page.tsx rename to apps/test-react-router/app/routes/hover-card.tsx index 08776e123..c20fbfd51 100644 --- a/apps/test-react-router/app/routes/hover-card/page.tsx +++ b/apps/test-react-router/app/routes/hover-card.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as HoverCard from '@repo/test-registry/components/hover-card'; export default function Page() { diff --git a/apps/test-react-router/app/routes/page.tsx b/apps/test-react-router/app/routes/index.tsx similarity index 71% rename from apps/test-react-router/app/routes/page.tsx rename to apps/test-react-router/app/routes/index.tsx index 6c620d0bb..265138491 100644 --- a/apps/test-react-router/app/routes/page.tsx +++ b/apps/test-react-router/app/routes/index.tsx @@ -1,6 +1,6 @@ -import type { Route } from './+types/page'; +import type { Route } from './+types/index'; -export function meta({}: Route.MetaArgs) { +export function meta(_args: Route.MetaArgs) { return [ { title: 'New React Router App' }, { name: 'description', content: 'Welcome to React Router!' }, diff --git a/apps/test-react-router/app/routes/label/page.tsx b/apps/test-react-router/app/routes/label.tsx similarity index 79% rename from apps/test-react-router/app/routes/label/page.tsx rename to apps/test-react-router/app/routes/label.tsx index eeeee3c83..24aac9352 100644 --- a/apps/test-react-router/app/routes/label/page.tsx +++ b/apps/test-react-router/app/routes/label.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as Label from '@repo/test-registry/components/label'; export default function Page() { diff --git a/apps/test-react-router/app/routes/menu/page.tsx b/apps/test-react-router/app/routes/menu.tsx similarity index 100% rename from apps/test-react-router/app/routes/menu/page.tsx rename to apps/test-react-router/app/routes/menu.tsx diff --git a/apps/test-react-router/app/routes/menubar/page.tsx b/apps/test-react-router/app/routes/menubar.tsx similarity index 80% rename from apps/test-react-router/app/routes/menubar/page.tsx rename to apps/test-react-router/app/routes/menubar.tsx index 1e256aaf9..f55666a4c 100644 --- a/apps/test-react-router/app/routes/menubar/page.tsx +++ b/apps/test-react-router/app/routes/menubar.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as Menubar from '@repo/test-registry/components/menubar'; export default function Page() { diff --git a/apps/test-react-router/app/routes/navigation-menu/page.tsx b/apps/test-react-router/app/routes/navigation-menu.tsx similarity index 100% rename from apps/test-react-router/app/routes/navigation-menu/page.tsx rename to apps/test-react-router/app/routes/navigation-menu.tsx diff --git a/apps/test-react-router/app/routes/one-time-password-field/page.tsx b/apps/test-react-router/app/routes/one-time-password-field.tsx similarity index 100% rename from apps/test-react-router/app/routes/one-time-password-field/page.tsx rename to apps/test-react-router/app/routes/one-time-password-field.tsx diff --git a/apps/test-react-router/app/routes/password-toggle-field/page.tsx b/apps/test-react-router/app/routes/password-toggle-field.tsx similarity index 100% rename from apps/test-react-router/app/routes/password-toggle-field/page.tsx rename to apps/test-react-router/app/routes/password-toggle-field.tsx diff --git a/apps/test-react-router/app/routes/popover/page.tsx b/apps/test-react-router/app/routes/popover.tsx similarity index 100% rename from apps/test-react-router/app/routes/popover/page.tsx rename to apps/test-react-router/app/routes/popover.tsx diff --git a/apps/test-react-router/app/routes/popper/page.tsx b/apps/test-react-router/app/routes/popper.tsx similarity index 100% rename from apps/test-react-router/app/routes/popper/page.tsx rename to apps/test-react-router/app/routes/popper.tsx diff --git a/apps/test-react-router/app/routes/portal/page.tsx b/apps/test-react-router/app/routes/portal.tsx similarity index 100% rename from apps/test-react-router/app/routes/portal/page.tsx rename to apps/test-react-router/app/routes/portal.tsx diff --git a/apps/test-react-router/app/routes/progress/page.tsx b/apps/test-react-router/app/routes/progress.tsx similarity index 100% rename from apps/test-react-router/app/routes/progress/page.tsx rename to apps/test-react-router/app/routes/progress.tsx diff --git a/apps/test-react-router/app/routes/radio-group/page.tsx b/apps/test-react-router/app/routes/radio-group.tsx similarity index 100% rename from apps/test-react-router/app/routes/radio-group/page.tsx rename to apps/test-react-router/app/routes/radio-group.tsx diff --git a/apps/test-react-router/app/routes/roving-focus/page.tsx b/apps/test-react-router/app/routes/roving-focus.tsx similarity index 88% rename from apps/test-react-router/app/routes/roving-focus/page.tsx rename to apps/test-react-router/app/routes/roving-focus.tsx index e9fd86bb8..66e1cec87 100644 --- a/apps/test-react-router/app/routes/roving-focus/page.tsx +++ b/apps/test-react-router/app/routes/roving-focus.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as RovingFocus from '@repo/test-registry/components/roving-focus'; export default function Page() { diff --git a/apps/test-react-router/app/routes/scroll-area/page.tsx b/apps/test-react-router/app/routes/scroll-area.tsx similarity index 100% rename from apps/test-react-router/app/routes/scroll-area/page.tsx rename to apps/test-react-router/app/routes/scroll-area.tsx diff --git a/apps/test-react-router/app/routes/select/page.tsx b/apps/test-react-router/app/routes/select.tsx similarity index 100% rename from apps/test-react-router/app/routes/select/page.tsx rename to apps/test-react-router/app/routes/select.tsx diff --git a/apps/test-react-router/app/routes/separator/page.tsx b/apps/test-react-router/app/routes/separator.tsx similarity index 100% rename from apps/test-react-router/app/routes/separator/page.tsx rename to apps/test-react-router/app/routes/separator.tsx diff --git a/apps/test-react-router/app/routes/slider/page.tsx b/apps/test-react-router/app/routes/slider.tsx similarity index 100% rename from apps/test-react-router/app/routes/slider/page.tsx rename to apps/test-react-router/app/routes/slider.tsx diff --git a/apps/test-react-router/app/routes/slot/page.tsx b/apps/test-react-router/app/routes/slot.tsx similarity index 79% rename from apps/test-react-router/app/routes/slot/page.tsx rename to apps/test-react-router/app/routes/slot.tsx index 9ee17eeb0..68d54c208 100644 --- a/apps/test-react-router/app/routes/slot/page.tsx +++ b/apps/test-react-router/app/routes/slot.tsx @@ -1,4 +1,3 @@ -import * as React from 'react'; import * as Slot from '@repo/test-registry/components/slot'; export default function Page() { diff --git a/apps/test-react-router/app/routes/switch/page.tsx b/apps/test-react-router/app/routes/switch.tsx similarity index 100% rename from apps/test-react-router/app/routes/switch/page.tsx rename to apps/test-react-router/app/routes/switch.tsx diff --git a/apps/test-react-router/app/routes/tabs/page.tsx b/apps/test-react-router/app/routes/tabs.tsx similarity index 100% rename from apps/test-react-router/app/routes/tabs/page.tsx rename to apps/test-react-router/app/routes/tabs.tsx diff --git a/apps/test-react-router/app/routes/toast/page.tsx b/apps/test-react-router/app/routes/toast.tsx similarity index 100% rename from apps/test-react-router/app/routes/toast/page.tsx rename to apps/test-react-router/app/routes/toast.tsx diff --git a/apps/test-react-router/app/routes/toggle-group/page.tsx b/apps/test-react-router/app/routes/toggle-group.tsx similarity index 100% rename from apps/test-react-router/app/routes/toggle-group/page.tsx rename to apps/test-react-router/app/routes/toggle-group.tsx diff --git a/apps/test-react-router/app/routes/toggle/page.tsx b/apps/test-react-router/app/routes/toggle.tsx similarity index 100% rename from apps/test-react-router/app/routes/toggle/page.tsx rename to apps/test-react-router/app/routes/toggle.tsx diff --git a/apps/test-react-router/app/routes/toolbar/page.tsx b/apps/test-react-router/app/routes/toolbar.tsx similarity index 100% rename from apps/test-react-router/app/routes/toolbar/page.tsx rename to apps/test-react-router/app/routes/toolbar.tsx diff --git a/apps/test-react-router/app/routes/tooltip/page.tsx b/apps/test-react-router/app/routes/tooltip.tsx similarity index 100% rename from apps/test-react-router/app/routes/tooltip/page.tsx rename to apps/test-react-router/app/routes/tooltip.tsx diff --git a/apps/test-react-router/app/routes/visually-hidden/page.tsx b/apps/test-react-router/app/routes/visually-hidden.tsx similarity index 100% rename from apps/test-react-router/app/routes/visually-hidden/page.tsx rename to apps/test-react-router/app/routes/visually-hidden.tsx diff --git a/apps/test-vite-react-17/src/globals.css b/apps/test-vite-react-17/src/globals.css index 946a5ed8e..9fbccd9b0 100644 --- a/apps/test-vite-react-17/src/globals.css +++ b/apps/test-vite-react-17/src/globals.css @@ -1,13 +1,4 @@ @import '@repo/test-styles/resets.css'; @import '@repo/test-styles/colors.css'; - -html, -body { - min-height: 100vh; - min-height: 100svh; - height: 100%; - color-scheme: light dark; - @media (prefers-color-scheme: dark) { - color-scheme: dark; - } -} +@import '@repo/test-styles/global.css'; +@import '@repo/test-styles/components.css'; diff --git a/apps/test-vite-react-18/src/globals.css b/apps/test-vite-react-18/src/globals.css index 946a5ed8e..9fbccd9b0 100644 --- a/apps/test-vite-react-18/src/globals.css +++ b/apps/test-vite-react-18/src/globals.css @@ -1,13 +1,4 @@ @import '@repo/test-styles/resets.css'; @import '@repo/test-styles/colors.css'; - -html, -body { - min-height: 100vh; - min-height: 100svh; - height: 100%; - color-scheme: light dark; - @media (prefers-color-scheme: dark) { - color-scheme: dark; - } -} +@import '@repo/test-styles/global.css'; +@import '@repo/test-styles/components.css'; diff --git a/apps/test-vite-react-19/src/globals.css b/apps/test-vite-react-19/src/globals.css index 946a5ed8e..9fbccd9b0 100644 --- a/apps/test-vite-react-19/src/globals.css +++ b/apps/test-vite-react-19/src/globals.css @@ -1,13 +1,4 @@ @import '@repo/test-styles/resets.css'; @import '@repo/test-styles/colors.css'; - -html, -body { - min-height: 100vh; - min-height: 100svh; - height: 100%; - color-scheme: light dark; - @media (prefers-color-scheme: dark) { - color-scheme: dark; - } -} +@import '@repo/test-styles/global.css'; +@import '@repo/test-styles/components.css'; diff --git a/internal/test-registry/components/accessible-icon.tsx b/internal/test-registry/components/accessible-icon.tsx index d1114ae06..bda1c1789 100644 --- a/internal/test-registry/components/accessible-icon.tsx +++ b/internal/test-registry/components/accessible-icon.tsx @@ -1,11 +1,12 @@ import * as React from 'react'; +import { Cross1Icon } from '@radix-ui/react-icons'; import { AccessibleIcon } from 'radix-ui'; export function Basic() { return ( ); diff --git a/internal/test-registry/components/accordion.tsx b/internal/test-registry/components/accordion.tsx index ce99094d4..14f8b9f4f 100644 --- a/internal/test-registry/components/accordion.tsx +++ b/internal/test-registry/components/accordion.tsx @@ -3,40 +3,40 @@ import { Accordion } from 'radix-ui'; export function Basic() { return ( - - - - One + + + + One - + Per erat orci nostra luctus sociosqu mus risus penatibus, duis elit vulputate viverra integer ullamcorper congue curabitur sociis, nisi malesuada scelerisque quam suscipit habitant sed. - - - Two + + + Two - + Cursus sed mattis commodo fermentum conubia ipsum pulvinar sagittis, diam eget bibendum porta nascetur ac dictum, leo tellus dis integer platea ultrices mi. - - - Three (disabled) + + + Three (disabled) - + Sociis hac sapien turpis conubia sagittis justo dui, inceptos penatibus feugiat himenaeos euismod magna, nec tempor pulvinar eu etiam mattis. - - - Four + + + Four - + Odio placerat quisque sapien sagittis non sociis ligula penatibus dignissim vitae, enim vulputate nullam semper potenti etiam volutpat libero. diff --git a/internal/test-styles/colors.css b/internal/test-styles/colors.css index ceba5b0ec..0679819e7 100644 --- a/internal/test-styles/colors.css +++ b/internal/test-styles/colors.css @@ -2,6 +2,8 @@ @import '@radix-ui/colors/gray-alpha.css'; @import '@radix-ui/colors/gray-dark.css'; @import '@radix-ui/colors/gray-dark-alpha.css'; +@import '@radix-ui/colors/black-alpha.css'; +@import '@radix-ui/colors/white-alpha.css'; @import '@radix-ui/colors/mauve.css'; @import '@radix-ui/colors/mauve-alpha.css'; @import '@radix-ui/colors/mauve-dark.css'; @@ -121,3 +123,961 @@ @import '@radix-ui/colors/sky-alpha.css'; @import '@radix-ui/colors/sky-dark.css'; @import '@radix-ui/colors/sky-dark-alpha.css'; + +:root { + --black-a0: #0000; + --black-a13: #000; + --white-a0: #fff0; + --white-a13: #fff; +} + +:root, +.light, +.light-theme { + --gray-a0: #0000; + --gray-a13: #000; + --gray-0: #fff; + --gray-13: #000; +} + +.dark, +.dark-theme { + --gray-a0: #0000; + --gray-a13: #fff; + --gray-0: #000; + --gray-13: #fff; +} + +@supports (color: color(display-p3 1 1 1)) { + @media (color-gamut: p3) { + :root { + --black-a0: color(display-p3 0 0 0 / 0); + --black-a13: color(display-p3 0 0 0 / 1); + --white-a0: color(display-p3 1 1 1 / 0); + --white-a13: color(display-p3 1 1 1 / 1); + } + + :root, + .light, + .light-theme { + --gray-a0: color(display-p3 0 0 0 / 0); + --gray-a13: color(display-p3 0 0 0 / 1); + --gray-0: color(display-p3 1 1 1 / 1); + --gray-13: color(display-p3 0 0 0 / 1); + } + + .dark, + .dark-theme { + --gray-a0: color(display-p3 1 1 1 / 0); + --gray-a13: color(display-p3 1 1 1 / 1); + --gray-0: color(display-p3 0 0 0 / 1); + --gray-13: color(display-p3 1 1 1 / 1); + } + } +} + +/* aliases */ +:root { + /* gray */ + --color-gray-0: var(--gray-0); + --color-gray-1: var(--gray-1); + --color-gray-2: var(--gray-2); + --color-gray-3: var(--gray-3); + --color-gray-4: var(--gray-4); + --color-gray-5: var(--gray-5); + --color-gray-6: var(--gray-6); + --color-gray-7: var(--gray-7); + --color-gray-8: var(--gray-8); + --color-gray-9: var(--gray-9); + --color-gray-10: var(--gray-10); + --color-gray-11: var(--gray-11); + --color-gray-12: var(--gray-12); + --color-gray-13: var(--gray-13); + /* gray alpha */ + --color-gray-a0: var(--gray-a0); + --color-gray-a1: var(--gray-a1); + --color-gray-a2: var(--gray-a2); + --color-gray-a3: var(--gray-a3); + --color-gray-a4: var(--gray-a4); + --color-gray-a5: var(--gray-a5); + --color-gray-a6: var(--gray-a6); + --color-gray-a7: var(--gray-a7); + --color-gray-a8: var(--gray-a8); + --color-gray-a9: var(--gray-a9); + --color-gray-a10: var(--gray-a10); + --color-gray-a11: var(--gray-a11); + --color-gray-a12: var(--gray-a12); + --color-gray-a13: var(--gray-a13); + + /* black alpha */ + --color-black-a0: var(--black-a0); + --color-black-a1: var(--black-a1); + --color-black-a2: var(--black-a2); + --color-black-a3: var(--black-a3); + --color-black-a4: var(--black-a4); + --color-black-a5: var(--black-a5); + --color-black-a6: var(--black-a6); + --color-black-a7: var(--black-a7); + --color-black-a8: var(--black-a8); + --color-black-a9: var(--black-a9); + --color-black-a10: var(--black-a10); + --color-black-a11: var(--black-a11); + --color-black-a12: var(--black-a12); + --color-black-a13: var(--black-a13); + + /* white alpha */ + --color-white-a0: var(--white-a0); + --color-white-a1: var(--white-a1); + --color-white-a2: var(--white-a2); + --color-white-a3: var(--white-a3); + --color-white-a4: var(--white-a4); + --color-white-a5: var(--white-a5); + --color-white-a6: var(--white-a6); + --color-white-a7: var(--white-a7); + --color-white-a8: var(--white-a8); + --color-white-a9: var(--white-a9); + --color-white-a10: var(--white-a10); + --color-white-a11: var(--white-a11); + --color-white-a12: var(--white-a12); + --color-white-a13: var(--white-a13); + + /* amber */ + --color-amber-1: var(--amber-1); + --color-amber-2: var(--amber-2); + --color-amber-3: var(--amber-3); + --color-amber-4: var(--amber-4); + --color-amber-5: var(--amber-5); + --color-amber-6: var(--amber-6); + --color-amber-7: var(--amber-7); + --color-amber-8: var(--amber-8); + --color-amber-9: var(--amber-9); + --color-amber-10: var(--amber-10); + --color-amber-11: var(--amber-11); + --color-amber-12: var(--amber-12); + + /* amber alpha */ + --color-amber-a1: var(--amber-a1); + --color-amber-a2: var(--amber-a2); + --color-amber-a3: var(--amber-a3); + --color-amber-a4: var(--amber-a4); + --color-amber-a5: var(--amber-a5); + --color-amber-a6: var(--amber-a6); + --color-amber-a7: var(--amber-a7); + --color-amber-a8: var(--amber-a8); + --color-amber-a9: var(--amber-a9); + --color-amber-a10: var(--amber-a10); + --color-amber-a11: var(--amber-a11); + --color-amber-a12: var(--amber-a12); + + /* blue */ + --color-blue-1: var(--blue-1); + --color-blue-2: var(--blue-2); + --color-blue-3: var(--blue-3); + --color-blue-4: var(--blue-4); + --color-blue-5: var(--blue-5); + --color-blue-6: var(--blue-6); + --color-blue-7: var(--blue-7); + --color-blue-8: var(--blue-8); + --color-blue-9: var(--blue-9); + --color-blue-10: var(--blue-10); + --color-blue-11: var(--blue-11); + --color-blue-12: var(--blue-12); + + /* blue alpha */ + --color-blue-a1: var(--blue-a1); + --color-blue-a2: var(--blue-a2); + --color-blue-a3: var(--blue-a3); + --color-blue-a4: var(--blue-a4); + --color-blue-a5: var(--blue-a5); + --color-blue-a6: var(--blue-a6); + --color-blue-a7: var(--blue-a7); + --color-blue-a8: var(--blue-a8); + --color-blue-a9: var(--blue-a9); + --color-blue-a10: var(--blue-a10); + --color-blue-a11: var(--blue-a11); + --color-blue-a12: var(--blue-a12); + + /* bronze */ + --color-bronze-1: var(--bronze-1); + --color-bronze-2: var(--bronze-2); + --color-bronze-3: var(--bronze-3); + --color-bronze-4: var(--bronze-4); + --color-bronze-5: var(--bronze-5); + --color-bronze-6: var(--bronze-6); + --color-bronze-7: var(--bronze-7); + --color-bronze-8: var(--bronze-8); + --color-bronze-9: var(--bronze-9); + --color-bronze-10: var(--bronze-10); + --color-bronze-11: var(--bronze-11); + --color-bronze-12: var(--bronze-12); + + /* bronze alpha */ + --color-bronze-a1: var(--bronze-a1); + --color-bronze-a2: var(--bronze-a2); + --color-bronze-a3: var(--bronze-a3); + --color-bronze-a4: var(--bronze-a4); + --color-bronze-a5: var(--bronze-a5); + --color-bronze-a6: var(--bronze-a6); + --color-bronze-a7: var(--bronze-a7); + --color-bronze-a8: var(--bronze-a8); + --color-bronze-a9: var(--bronze-a9); + --color-bronze-a10: var(--bronze-a10); + --color-bronze-a11: var(--bronze-a11); + --color-bronze-a12: var(--bronze-a12); + + /* brown */ + --color-brown-1: var(--brown-1); + --color-brown-2: var(--brown-2); + --color-brown-3: var(--brown-3); + --color-brown-4: var(--brown-4); + --color-brown-5: var(--brown-5); + --color-brown-6: var(--brown-6); + --color-brown-7: var(--brown-7); + --color-brown-8: var(--brown-8); + --color-brown-9: var(--brown-9); + --color-brown-10: var(--brown-10); + --color-brown-11: var(--brown-11); + --color-brown-12: var(--brown-12); + + /* brown alpha */ + --color-brown-a1: var(--brown-a1); + --color-brown-a2: var(--brown-a2); + --color-brown-a3: var(--brown-a3); + --color-brown-a4: var(--brown-a4); + --color-brown-a5: var(--brown-a5); + --color-brown-a6: var(--brown-a6); + --color-brown-a7: var(--brown-a7); + --color-brown-a8: var(--brown-a8); + --color-brown-a9: var(--brown-a9); + --color-brown-a10: var(--brown-a10); + --color-brown-a11: var(--brown-a11); + --color-brown-a12: var(--brown-a12); + + /* crimson */ + --color-crimson-1: var(--crimson-1); + --color-crimson-2: var(--crimson-2); + --color-crimson-3: var(--crimson-3); + --color-crimson-4: var(--crimson-4); + --color-crimson-5: var(--crimson-5); + --color-crimson-6: var(--crimson-6); + --color-crimson-7: var(--crimson-7); + --color-crimson-8: var(--crimson-8); + --color-crimson-9: var(--crimson-9); + --color-crimson-10: var(--crimson-10); + --color-crimson-11: var(--crimson-11); + --color-crimson-12: var(--crimson-12); + + /* crimson alpha */ + --color-crimson-a1: var(--crimson-a1); + --color-crimson-a2: var(--crimson-a2); + --color-crimson-a3: var(--crimson-a3); + --color-crimson-a4: var(--crimson-a4); + --color-crimson-a5: var(--crimson-a5); + --color-crimson-a6: var(--crimson-a6); + --color-crimson-a7: var(--crimson-a7); + --color-crimson-a8: var(--crimson-a8); + --color-crimson-a9: var(--crimson-a9); + --color-crimson-a10: var(--crimson-a10); + --color-crimson-a11: var(--crimson-a11); + --color-crimson-a12: var(--crimson-a12); + + /* cyan */ + --color-cyan-1: var(--cyan-1); + --color-cyan-2: var(--cyan-2); + --color-cyan-3: var(--cyan-3); + --color-cyan-4: var(--cyan-4); + --color-cyan-5: var(--cyan-5); + --color-cyan-6: var(--cyan-6); + --color-cyan-7: var(--cyan-7); + --color-cyan-8: var(--cyan-8); + --color-cyan-9: var(--cyan-9); + --color-cyan-10: var(--cyan-10); + --color-cyan-11: var(--cyan-11); + --color-cyan-12: var(--cyan-12); + + /* cyan alpha */ + --color-cyan-a1: var(--cyan-a1); + --color-cyan-a2: var(--cyan-a2); + --color-cyan-a3: var(--cyan-a3); + --color-cyan-a4: var(--cyan-a4); + --color-cyan-a5: var(--cyan-a5); + --color-cyan-a6: var(--cyan-a6); + --color-cyan-a7: var(--cyan-a7); + --color-cyan-a8: var(--cyan-a8); + --color-cyan-a9: var(--cyan-a9); + --color-cyan-a10: var(--cyan-a10); + --color-cyan-a11: var(--cyan-a11); + --color-cyan-a12: var(--cyan-a12); + + /* gold */ + --color-gold-1: var(--gold-1); + --color-gold-2: var(--gold-2); + --color-gold-3: var(--gold-3); + --color-gold-4: var(--gold-4); + --color-gold-5: var(--gold-5); + --color-gold-6: var(--gold-6); + --color-gold-7: var(--gold-7); + --color-gold-8: var(--gold-8); + --color-gold-9: var(--gold-9); + --color-gold-10: var(--gold-10); + --color-gold-11: var(--gold-11); + --color-gold-12: var(--gold-12); + + /* gold alpha */ + --color-gold-a1: var(--gold-a1); + --color-gold-a2: var(--gold-a2); + --color-gold-a3: var(--gold-a3); + --color-gold-a4: var(--gold-a4); + --color-gold-a5: var(--gold-a5); + --color-gold-a6: var(--gold-a6); + --color-gold-a7: var(--gold-a7); + --color-gold-a8: var(--gold-a8); + --color-gold-a9: var(--gold-a9); + --color-gold-a10: var(--gold-a10); + --color-gold-a11: var(--gold-a11); + --color-gold-a12: var(--gold-a12); + + /* grass */ + --color-grass-1: var(--grass-1); + --color-grass-2: var(--grass-2); + --color-grass-3: var(--grass-3); + --color-grass-4: var(--grass-4); + --color-grass-5: var(--grass-5); + --color-grass-6: var(--grass-6); + --color-grass-7: var(--grass-7); + --color-grass-8: var(--grass-8); + --color-grass-9: var(--grass-9); + --color-grass-10: var(--grass-10); + --color-grass-11: var(--grass-11); + --color-grass-12: var(--grass-12); + + /* grass alpha */ + --color-grass-a1: var(--grass-a1); + --color-grass-a2: var(--grass-a2); + --color-grass-a3: var(--grass-a3); + --color-grass-a4: var(--grass-a4); + --color-grass-a5: var(--grass-a5); + --color-grass-a6: var(--grass-a6); + --color-grass-a7: var(--grass-a7); + --color-grass-a8: var(--grass-a8); + --color-grass-a9: var(--grass-a9); + --color-grass-a10: var(--grass-a10); + --color-grass-a11: var(--grass-a11); + --color-grass-a12: var(--grass-a12); + + /* green */ + --color-green-1: var(--green-1); + --color-green-2: var(--green-2); + --color-green-3: var(--green-3); + --color-green-4: var(--green-4); + --color-green-5: var(--green-5); + --color-green-6: var(--green-6); + --color-green-7: var(--green-7); + --color-green-8: var(--green-8); + --color-green-9: var(--green-9); + --color-green-10: var(--green-10); + --color-green-11: var(--green-11); + --color-green-12: var(--green-12); + + /* green alpha */ + --color-green-a1: var(--green-a1); + --color-green-a2: var(--green-a2); + --color-green-a3: var(--green-a3); + --color-green-a4: var(--green-a4); + --color-green-a5: var(--green-a5); + --color-green-a6: var(--green-a6); + --color-green-a7: var(--green-a7); + --color-green-a8: var(--green-a8); + --color-green-a9: var(--green-a9); + --color-green-a10: var(--green-a10); + --color-green-a11: var(--green-a11); + --color-green-a12: var(--green-a12); + + /* indigo */ + --color-indigo-1: var(--indigo-1); + --color-indigo-2: var(--indigo-2); + --color-indigo-3: var(--indigo-3); + --color-indigo-4: var(--indigo-4); + --color-indigo-5: var(--indigo-5); + --color-indigo-6: var(--indigo-6); + --color-indigo-7: var(--indigo-7); + --color-indigo-8: var(--indigo-8); + --color-indigo-9: var(--indigo-9); + --color-indigo-10: var(--indigo-10); + --color-indigo-11: var(--indigo-11); + --color-indigo-12: var(--indigo-12); + + /* indigo alpha */ + --color-indigo-a1: var(--indigo-a1); + --color-indigo-a2: var(--indigo-a2); + --color-indigo-a3: var(--indigo-a3); + --color-indigo-a4: var(--indigo-a4); + --color-indigo-a5: var(--indigo-a5); + --color-indigo-a6: var(--indigo-a6); + --color-indigo-a7: var(--indigo-a7); + --color-indigo-a8: var(--indigo-a8); + --color-indigo-a9: var(--indigo-a9); + --color-indigo-a10: var(--indigo-a10); + --color-indigo-a11: var(--indigo-a11); + --color-indigo-a12: var(--indigo-a12); + + /* iris */ + --color-iris-1: var(--iris-1); + --color-iris-2: var(--iris-2); + --color-iris-3: var(--iris-3); + --color-iris-4: var(--iris-4); + --color-iris-5: var(--iris-5); + --color-iris-6: var(--iris-6); + --color-iris-7: var(--iris-7); + --color-iris-8: var(--iris-8); + --color-iris-9: var(--iris-9); + --color-iris-10: var(--iris-10); + --color-iris-11: var(--iris-11); + --color-iris-12: var(--iris-12); + + /* iris alpha */ + --color-iris-a1: var(--iris-a1); + --color-iris-a2: var(--iris-a2); + --color-iris-a3: var(--iris-a3); + --color-iris-a4: var(--iris-a4); + --color-iris-a5: var(--iris-a5); + --color-iris-a6: var(--iris-a6); + --color-iris-a7: var(--iris-a7); + --color-iris-a8: var(--iris-a8); + --color-iris-a9: var(--iris-a9); + --color-iris-a10: var(--iris-a10); + --color-iris-a11: var(--iris-a11); + --color-iris-a12: var(--iris-a12); + + /* jade */ + --color-jade-1: var(--jade-1); + --color-jade-2: var(--jade-2); + --color-jade-3: var(--jade-3); + --color-jade-4: var(--jade-4); + --color-jade-5: var(--jade-5); + --color-jade-6: var(--jade-6); + --color-jade-7: var(--jade-7); + --color-jade-8: var(--jade-8); + --color-jade-9: var(--jade-9); + --color-jade-10: var(--jade-10); + --color-jade-11: var(--jade-11); + --color-jade-12: var(--jade-12); + + /* jade alpha */ + --color-jade-a1: var(--jade-a1); + --color-jade-a2: var(--jade-a2); + --color-jade-a3: var(--jade-a3); + --color-jade-a4: var(--jade-a4); + --color-jade-a5: var(--jade-a5); + --color-jade-a6: var(--jade-a6); + --color-jade-a7: var(--jade-a7); + --color-jade-a8: var(--jade-a8); + --color-jade-a9: var(--jade-a9); + --color-jade-a10: var(--jade-a10); + --color-jade-a11: var(--jade-a11); + --color-jade-a12: var(--jade-a12); + + /* lime */ + --color-lime-1: var(--lime-1); + --color-lime-2: var(--lime-2); + --color-lime-3: var(--lime-3); + --color-lime-4: var(--lime-4); + --color-lime-5: var(--lime-5); + --color-lime-6: var(--lime-6); + --color-lime-7: var(--lime-7); + --color-lime-8: var(--lime-8); + --color-lime-9: var(--lime-9); + --color-lime-10: var(--lime-10); + --color-lime-11: var(--lime-11); + --color-lime-12: var(--lime-12); + + /* lime alpha */ + --color-lime-a1: var(--lime-a1); + --color-lime-a2: var(--lime-a2); + --color-lime-a3: var(--lime-a3); + --color-lime-a4: var(--lime-a4); + --color-lime-a5: var(--lime-a5); + --color-lime-a6: var(--lime-a6); + --color-lime-a7: var(--lime-a7); + --color-lime-a8: var(--lime-a8); + --color-lime-a9: var(--lime-a9); + --color-lime-a10: var(--lime-a10); + --color-lime-a11: var(--lime-a11); + --color-lime-a12: var(--lime-a12); + + /* mauve */ + --color-mauve-1: var(--mauve-1); + --color-mauve-2: var(--mauve-2); + --color-mauve-3: var(--mauve-3); + --color-mauve-4: var(--mauve-4); + --color-mauve-5: var(--mauve-5); + --color-mauve-6: var(--mauve-6); + --color-mauve-7: var(--mauve-7); + --color-mauve-8: var(--mauve-8); + --color-mauve-9: var(--mauve-9); + --color-mauve-10: var(--mauve-10); + --color-mauve-11: var(--mauve-11); + --color-mauve-12: var(--mauve-12); + + /* mauve alpha */ + --color-mauve-a1: var(--mauve-a1); + --color-mauve-a2: var(--mauve-a2); + --color-mauve-a3: var(--mauve-a3); + --color-mauve-a4: var(--mauve-a4); + --color-mauve-a5: var(--mauve-a5); + --color-mauve-a6: var(--mauve-a6); + --color-mauve-a7: var(--mauve-a7); + --color-mauve-a8: var(--mauve-a8); + --color-mauve-a9: var(--mauve-a9); + --color-mauve-a10: var(--mauve-a10); + --color-mauve-a11: var(--mauve-a11); + --color-mauve-a12: var(--mauve-a12); + + /* mint */ + --color-mint-1: var(--mint-1); + --color-mint-2: var(--mint-2); + --color-mint-3: var(--mint-3); + --color-mint-4: var(--mint-4); + --color-mint-5: var(--mint-5); + --color-mint-6: var(--mint-6); + --color-mint-7: var(--mint-7); + --color-mint-8: var(--mint-8); + --color-mint-9: var(--mint-9); + --color-mint-10: var(--mint-10); + --color-mint-11: var(--mint-11); + --color-mint-12: var(--mint-12); + + /* mint alpha */ + --color-mint-a1: var(--mint-a1); + --color-mint-a2: var(--mint-a2); + --color-mint-a3: var(--mint-a3); + --color-mint-a4: var(--mint-a4); + --color-mint-a5: var(--mint-a5); + --color-mint-a6: var(--mint-a6); + --color-mint-a7: var(--mint-a7); + --color-mint-a8: var(--mint-a8); + --color-mint-a9: var(--mint-a9); + --color-mint-a10: var(--mint-a10); + --color-mint-a11: var(--mint-a11); + --color-mint-a12: var(--mint-a12); + + /* olive */ + --color-olive-1: var(--olive-1); + --color-olive-2: var(--olive-2); + --color-olive-3: var(--olive-3); + --color-olive-4: var(--olive-4); + --color-olive-5: var(--olive-5); + --color-olive-6: var(--olive-6); + --color-olive-7: var(--olive-7); + --color-olive-8: var(--olive-8); + --color-olive-9: var(--olive-9); + --color-olive-10: var(--olive-10); + --color-olive-11: var(--olive-11); + --color-olive-12: var(--olive-12); + + /* olive alpha */ + --color-olive-a1: var(--olive-a1); + --color-olive-a2: var(--olive-a2); + --color-olive-a3: var(--olive-a3); + --color-olive-a4: var(--olive-a4); + --color-olive-a5: var(--olive-a5); + --color-olive-a6: var(--olive-a6); + --color-olive-a7: var(--olive-a7); + --color-olive-a8: var(--olive-a8); + --color-olive-a9: var(--olive-a9); + --color-olive-a10: var(--olive-a10); + --color-olive-a11: var(--olive-a11); + --color-olive-a12: var(--olive-a12); + + /* orange */ + --color-orange-1: var(--orange-1); + --color-orange-2: var(--orange-2); + --color-orange-3: var(--orange-3); + --color-orange-4: var(--orange-4); + --color-orange-5: var(--orange-5); + --color-orange-6: var(--orange-6); + --color-orange-7: var(--orange-7); + --color-orange-8: var(--orange-8); + --color-orange-9: var(--orange-9); + --color-orange-10: var(--orange-10); + --color-orange-11: var(--orange-11); + --color-orange-12: var(--orange-12); + + /* orange alpha */ + --color-orange-a1: var(--orange-a1); + --color-orange-a2: var(--orange-a2); + --color-orange-a3: var(--orange-a3); + --color-orange-a4: var(--orange-a4); + --color-orange-a5: var(--orange-a5); + --color-orange-a6: var(--orange-a6); + --color-orange-a7: var(--orange-a7); + --color-orange-a8: var(--orange-a8); + --color-orange-a9: var(--orange-a9); + --color-orange-a10: var(--orange-a10); + --color-orange-a11: var(--orange-a11); + --color-orange-a12: var(--orange-a12); + + /* pink */ + --color-pink-1: var(--pink-1); + --color-pink-2: var(--pink-2); + --color-pink-3: var(--pink-3); + --color-pink-4: var(--pink-4); + --color-pink-5: var(--pink-5); + --color-pink-6: var(--pink-6); + --color-pink-7: var(--pink-7); + --color-pink-8: var(--pink-8); + --color-pink-9: var(--pink-9); + --color-pink-10: var(--pink-10); + --color-pink-11: var(--pink-11); + --color-pink-12: var(--pink-12); + + /* pink alpha */ + --color-pink-a1: var(--pink-a1); + --color-pink-a2: var(--pink-a2); + --color-pink-a3: var(--pink-a3); + --color-pink-a4: var(--pink-a4); + --color-pink-a5: var(--pink-a5); + --color-pink-a6: var(--pink-a6); + --color-pink-a7: var(--pink-a7); + --color-pink-a8: var(--pink-a8); + --color-pink-a9: var(--pink-a9); + --color-pink-a10: var(--pink-a10); + --color-pink-a11: var(--pink-a11); + --color-pink-a12: var(--pink-a12); + + /* plum */ + --color-plum-1: var(--plum-1); + --color-plum-2: var(--plum-2); + --color-plum-3: var(--plum-3); + --color-plum-4: var(--plum-4); + --color-plum-5: var(--plum-5); + --color-plum-6: var(--plum-6); + --color-plum-7: var(--plum-7); + --color-plum-8: var(--plum-8); + --color-plum-9: var(--plum-9); + --color-plum-10: var(--plum-10); + --color-plum-11: var(--plum-11); + --color-plum-12: var(--plum-12); + + /* plum alpha */ + --color-plum-a1: var(--plum-a1); + --color-plum-a2: var(--plum-a2); + --color-plum-a3: var(--plum-a3); + --color-plum-a4: var(--plum-a4); + --color-plum-a5: var(--plum-a5); + --color-plum-a6: var(--plum-a6); + --color-plum-a7: var(--plum-a7); + --color-plum-a8: var(--plum-a8); + --color-plum-a9: var(--plum-a9); + --color-plum-a10: var(--plum-a10); + --color-plum-a11: var(--plum-a11); + --color-plum-a12: var(--plum-a12); + + /* purple */ + --color-purple-1: var(--purple-1); + --color-purple-2: var(--purple-2); + --color-purple-3: var(--purple-3); + --color-purple-4: var(--purple-4); + --color-purple-5: var(--purple-5); + --color-purple-6: var(--purple-6); + --color-purple-7: var(--purple-7); + --color-purple-8: var(--purple-8); + --color-purple-9: var(--purple-9); + --color-purple-10: var(--purple-10); + --color-purple-11: var(--purple-11); + --color-purple-12: var(--purple-12); + + /* purple alpha */ + --color-purple-a1: var(--purple-a1); + --color-purple-a2: var(--purple-a2); + --color-purple-a3: var(--purple-a3); + --color-purple-a4: var(--purple-a4); + --color-purple-a5: var(--purple-a5); + --color-purple-a6: var(--purple-a6); + --color-purple-a7: var(--purple-a7); + --color-purple-a8: var(--purple-a8); + --color-purple-a9: var(--purple-a9); + --color-purple-a10: var(--purple-a10); + --color-purple-a11: var(--purple-a11); + --color-purple-a12: var(--purple-a12); + + /* red */ + --color-red-1: var(--red-1); + --color-red-2: var(--red-2); + --color-red-3: var(--red-3); + --color-red-4: var(--red-4); + --color-red-5: var(--red-5); + --color-red-6: var(--red-6); + --color-red-7: var(--red-7); + --color-red-8: var(--red-8); + --color-red-9: var(--red-9); + --color-red-10: var(--red-10); + --color-red-11: var(--red-11); + --color-red-12: var(--red-12); + + /* red alpha */ + --color-red-a1: var(--red-a1); + --color-red-a2: var(--red-a2); + --color-red-a3: var(--red-a3); + --color-red-a4: var(--red-a4); + --color-red-a5: var(--red-a5); + --color-red-a6: var(--red-a6); + --color-red-a7: var(--red-a7); + --color-red-a8: var(--red-a8); + --color-red-a9: var(--red-a9); + --color-red-a10: var(--red-a10); + --color-red-a11: var(--red-a11); + --color-red-a12: var(--red-a12); + + /* ruby */ + --color-ruby-1: var(--ruby-1); + --color-ruby-2: var(--ruby-2); + --color-ruby-3: var(--ruby-3); + --color-ruby-4: var(--ruby-4); + --color-ruby-5: var(--ruby-5); + --color-ruby-6: var(--ruby-6); + --color-ruby-7: var(--ruby-7); + --color-ruby-8: var(--ruby-8); + --color-ruby-9: var(--ruby-9); + --color-ruby-10: var(--ruby-10); + --color-ruby-11: var(--ruby-11); + --color-ruby-12: var(--ruby-12); + + /* ruby alpha */ + --color-ruby-a1: var(--ruby-a1); + --color-ruby-a2: var(--ruby-a2); + --color-ruby-a3: var(--ruby-a3); + --color-ruby-a4: var(--ruby-a4); + --color-ruby-a5: var(--ruby-a5); + --color-ruby-a6: var(--ruby-a6); + --color-ruby-a7: var(--ruby-a7); + --color-ruby-a8: var(--ruby-a8); + --color-ruby-a9: var(--ruby-a9); + --color-ruby-a10: var(--ruby-a10); + --color-ruby-a11: var(--ruby-a11); + --color-ruby-a12: var(--ruby-a12); + + /* sage */ + --color-sage-1: var(--sage-1); + --color-sage-2: var(--sage-2); + --color-sage-3: var(--sage-3); + --color-sage-4: var(--sage-4); + --color-sage-5: var(--sage-5); + --color-sage-6: var(--sage-6); + --color-sage-7: var(--sage-7); + --color-sage-8: var(--sage-8); + --color-sage-9: var(--sage-9); + --color-sage-10: var(--sage-10); + --color-sage-11: var(--sage-11); + --color-sage-12: var(--sage-12); + + /* sage alpha */ + --color-sage-a1: var(--sage-a1); + --color-sage-a2: var(--sage-a2); + --color-sage-a3: var(--sage-a3); + --color-sage-a4: var(--sage-a4); + --color-sage-a5: var(--sage-a5); + --color-sage-a6: var(--sage-a6); + --color-sage-a7: var(--sage-a7); + --color-sage-a8: var(--sage-a8); + --color-sage-a9: var(--sage-a9); + --color-sage-a10: var(--sage-a10); + --color-sage-a11: var(--sage-a11); + --color-sage-a12: var(--sage-a12); + + /* sand */ + --color-sand-1: var(--sand-1); + --color-sand-2: var(--sand-2); + --color-sand-3: var(--sand-3); + --color-sand-4: var(--sand-4); + --color-sand-5: var(--sand-5); + --color-sand-6: var(--sand-6); + --color-sand-7: var(--sand-7); + --color-sand-8: var(--sand-8); + --color-sand-9: var(--sand-9); + --color-sand-10: var(--sand-10); + --color-sand-11: var(--sand-11); + --color-sand-12: var(--sand-12); + + /* sand alpha */ + --color-sand-a1: var(--sand-a1); + --color-sand-a2: var(--sand-a2); + --color-sand-a3: var(--sand-a3); + --color-sand-a4: var(--sand-a4); + --color-sand-a5: var(--sand-a5); + --color-sand-a6: var(--sand-a6); + --color-sand-a7: var(--sand-a7); + --color-sand-a8: var(--sand-a8); + --color-sand-a9: var(--sand-a9); + --color-sand-a10: var(--sand-a10); + --color-sand-a11: var(--sand-a11); + --color-sand-a12: var(--sand-a12); + + /* sky */ + --color-sky-1: var(--sky-1); + --color-sky-2: var(--sky-2); + --color-sky-3: var(--sky-3); + --color-sky-4: var(--sky-4); + --color-sky-5: var(--sky-5); + --color-sky-6: var(--sky-6); + --color-sky-7: var(--sky-7); + --color-sky-8: var(--sky-8); + --color-sky-9: var(--sky-9); + --color-sky-10: var(--sky-10); + --color-sky-11: var(--sky-11); + --color-sky-12: var(--sky-12); + + /* sky alpha */ + --color-sky-a1: var(--sky-a1); + --color-sky-a2: var(--sky-a2); + --color-sky-a3: var(--sky-a3); + --color-sky-a4: var(--sky-a4); + --color-sky-a5: var(--sky-a5); + --color-sky-a6: var(--sky-a6); + --color-sky-a7: var(--sky-a7); + --color-sky-a8: var(--sky-a8); + --color-sky-a9: var(--sky-a9); + --color-sky-a10: var(--sky-a10); + --color-sky-a11: var(--sky-a11); + --color-sky-a12: var(--sky-a12); + + /* slate */ + --color-slate-1: var(--slate-1); + --color-slate-2: var(--slate-2); + --color-slate-3: var(--slate-3); + --color-slate-4: var(--slate-4); + --color-slate-5: var(--slate-5); + --color-slate-6: var(--slate-6); + --color-slate-7: var(--slate-7); + --color-slate-8: var(--slate-8); + --color-slate-9: var(--slate-9); + --color-slate-10: var(--slate-10); + --color-slate-11: var(--slate-11); + --color-slate-12: var(--slate-12); + + /* slate alpha */ + --color-slate-a1: var(--slate-a1); + --color-slate-a2: var(--slate-a2); + --color-slate-a3: var(--slate-a3); + --color-slate-a4: var(--slate-a4); + --color-slate-a5: var(--slate-a5); + --color-slate-a6: var(--slate-a6); + --color-slate-a7: var(--slate-a7); + --color-slate-a8: var(--slate-a8); + --color-slate-a9: var(--slate-a9); + --color-slate-a10: var(--slate-a10); + --color-slate-a11: var(--slate-a11); + --color-slate-a12: var(--slate-a12); + + /* teal */ + --color-teal-1: var(--teal-1); + --color-teal-2: var(--teal-2); + --color-teal-3: var(--teal-3); + --color-teal-4: var(--teal-4); + --color-teal-5: var(--teal-5); + --color-teal-6: var(--teal-6); + --color-teal-7: var(--teal-7); + --color-teal-8: var(--teal-8); + --color-teal-9: var(--teal-9); + --color-teal-10: var(--teal-10); + --color-teal-11: var(--teal-11); + --color-teal-12: var(--teal-12); + + /* teal alpha */ + --color-teal-a1: var(--teal-a1); + --color-teal-a2: var(--teal-a2); + --color-teal-a3: var(--teal-a3); + --color-teal-a4: var(--teal-a4); + --color-teal-a5: var(--teal-a5); + --color-teal-a6: var(--teal-a6); + --color-teal-a7: var(--teal-a7); + --color-teal-a8: var(--teal-a8); + --color-teal-a9: var(--teal-a9); + --color-teal-a10: var(--teal-a10); + --color-teal-a11: var(--teal-a11); + --color-teal-a12: var(--teal-a12); + + /* tomato */ + --color-tomato-1: var(--tomato-1); + --color-tomato-2: var(--tomato-2); + --color-tomato-3: var(--tomato-3); + --color-tomato-4: var(--tomato-4); + --color-tomato-5: var(--tomato-5); + --color-tomato-6: var(--tomato-6); + --color-tomato-7: var(--tomato-7); + --color-tomato-8: var(--tomato-8); + --color-tomato-9: var(--tomato-9); + --color-tomato-10: var(--tomato-10); + --color-tomato-11: var(--tomato-11); + --color-tomato-12: var(--tomato-12); + + /* tomato alpha */ + --color-tomato-a1: var(--tomato-a1); + --color-tomato-a2: var(--tomato-a2); + --color-tomato-a3: var(--tomato-a3); + --color-tomato-a4: var(--tomato-a4); + --color-tomato-a5: var(--tomato-a5); + --color-tomato-a6: var(--tomato-a6); + --color-tomato-a7: var(--tomato-a7); + --color-tomato-a8: var(--tomato-a8); + --color-tomato-a9: var(--tomato-a9); + --color-tomato-a10: var(--tomato-a10); + --color-tomato-a11: var(--tomato-a11); + --color-tomato-a12: var(--tomato-a12); + + /* violet */ + --color-violet-1: var(--violet-1); + --color-violet-2: var(--violet-2); + --color-violet-3: var(--violet-3); + --color-violet-4: var(--violet-4); + --color-violet-5: var(--violet-5); + --color-violet-6: var(--violet-6); + --color-violet-7: var(--violet-7); + --color-violet-8: var(--violet-8); + --color-violet-9: var(--violet-9); + --color-violet-10: var(--violet-10); + --color-violet-11: var(--violet-11); + --color-violet-12: var(--violet-12); + + /* violet alpha */ + --color-violet-a1: var(--violet-a1); + --color-violet-a2: var(--violet-a2); + --color-violet-a3: var(--violet-a3); + --color-violet-a4: var(--violet-a4); + --color-violet-a5: var(--violet-a5); + --color-violet-a6: var(--violet-a6); + --color-violet-a7: var(--violet-a7); + --color-violet-a8: var(--violet-a8); + --color-violet-a9: var(--violet-a9); + --color-violet-a10: var(--violet-a10); + --color-violet-a11: var(--violet-a11); + --color-violet-a12: var(--violet-a12); + + /* yellow */ + --color-yellow-1: var(--yellow-1); + --color-yellow-2: var(--yellow-2); + --color-yellow-3: var(--yellow-3); + --color-yellow-4: var(--yellow-4); + --color-yellow-5: var(--yellow-5); + --color-yellow-6: var(--yellow-6); + --color-yellow-7: var(--yellow-7); + --color-yellow-8: var(--yellow-8); + --color-yellow-9: var(--yellow-9); + --color-yellow-10: var(--yellow-10); + --color-yellow-11: var(--yellow-11); + --color-yellow-12: var(--yellow-12); + + /* yellow alpha */ + --color-yellow-a1: var(--yellow-a1); + --color-yellow-a2: var(--yellow-a2); + --color-yellow-a3: var(--yellow-a3); + --color-yellow-a4: var(--yellow-a4); + --color-yellow-a5: var(--yellow-a5); + --color-yellow-a6: var(--yellow-a6); + --color-yellow-a7: var(--yellow-a7); + --color-yellow-a8: var(--yellow-a8); + --color-yellow-a9: var(--yellow-a9); + --color-yellow-a10: var(--yellow-a10); + --color-yellow-a11: var(--yellow-a11); + --color-yellow-a12: var(--yellow-a12); +} diff --git a/internal/test-styles/components.css b/internal/test-styles/components.css new file mode 100644 index 000000000..5e28f1701 --- /dev/null +++ b/internal/test-styles/components.css @@ -0,0 +1,44 @@ +@import './components/accessible-icon.css'; +@import './components/accordion.css'; +@import './components/alert-dialog.css'; +@import './components/aspect-ratio.css'; +@import './components/avatar.css'; +@import './components/checkbox.css'; +@import './components/collapsible.css'; +@import './components/context-menu.css'; +@import './components/dialog.css'; +@import './components/direction.css'; +@import './components/dropdown-menu.css'; +@import './components/form.css'; +@import './components/hover-card.css'; +@import './components/label.css'; +@import './components/menubar.css'; +@import './components/navigation-menu.css'; +@import './components/one-time-password-field.css'; +@import './components/password-toggle-field.css'; +@import './components/popover.css'; +@import './components/portal.css'; +@import './components/progress.css'; +@import './components/radio-group.css'; +@import './components/scroll-area.css'; +@import './components/select.css'; +@import './components/separator.css'; +@import './components/slider.css'; +@import './components/slot.css'; +@import './components/switch.css'; +@import './components/tabs.css'; +@import './components/toast.css'; +@import './components/toggle.css'; +@import './components/toggle-group.css'; +@import './components/toolbar.css'; +@import './components/tooltip.css'; +@import './components/visually-hidden.css'; +/* internal components */ +@import './components/arrow.css'; +@import './components/collection.css'; +@import './components/dismissable-layer.css'; +@import './components/focus-guards.css'; +@import './components/focus-scope.css'; +@import './components/menu.css'; +@import './components/popper.css'; +@import './components/roving-focus.css'; diff --git a/internal/test-styles/components/accessible-icon.css b/internal/test-styles/components/accessible-icon.css new file mode 100644 index 000000000..97841b4d4 --- /dev/null +++ b/internal/test-styles/components/accessible-icon.css @@ -0,0 +1,2 @@ +.AccessibleIconRoot { +} diff --git a/internal/test-styles/components/accordion.css b/internal/test-styles/components/accordion.css new file mode 100644 index 000000000..6700c69e4 --- /dev/null +++ b/internal/test-styles/components/accordion.css @@ -0,0 +1,95 @@ +.AccordionRoot { + border-radius: 6px; + width: 300px; + background-color: var(--color-mauve-6); + box-shadow: 0 2px 10px var(--color-black-a4); +} + +.AccordionItem { + overflow: hidden; + margin-top: 1px; +} + +.AccordionItem:first-child { + margin-top: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +.AccordionItem:last-child { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +.AccordionItem:focus-within { + position: relative; + z-index: 1; + box-shadow: 0 0 0 2px var(--color-mauve-12); +} + +.AccordionHeader { + display: flex; +} + +.AccordionTrigger { + font-family: inherit; + background-color: transparent; + padding: 0 20px; + height: 45px; + flex: 1; + display: flex; + align-items: center; + justify-content: space-between; + font-size: 15px; + line-height: 1; + color: var(--color-violet-11); + box-shadow: 0 1px 0 var(--color-mauve-6); + background-color: var(--color-gray-0); +} + +.AccordionTrigger:hover { + background-color: var(--color-mauve-2); +} + +.AccordionContent { + overflow: hidden; + font-size: 15px; + color: var(--color-mauve-11); + background-color: var(--color-mauve-2); +} +.AccordionContent[data-state='open'] { + animation: slideDown 300ms cubic-bezier(0.87, 0, 0.13, 1); +} +.AccordionContent[data-state='closed'] { + animation: slideUp 300ms cubic-bezier(0.87, 0, 0.13, 1); +} + +.AccordionContentText { + padding: 15px 20px; +} + +.AccordionChevron { + color: var(--color-violet-10); + transition: transform 300ms cubic-bezier(0.87, 0, 0.13, 1); +} +.AccordionTrigger[data-state='open'] > .AccordionChevron { + transform: rotate(180deg); +} + +@keyframes slideDown { + from { + height: 0; + } + to { + height: var(--radix-accordion-content-height); + } +} + +@keyframes slideUp { + from { + height: var(--radix-accordion-content-height); + } + to { + height: 0; + } +} diff --git a/internal/test-styles/components/alert-dialog.css b/internal/test-styles/components/alert-dialog.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/arrow.css b/internal/test-styles/components/arrow.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/aspect-ratio.css b/internal/test-styles/components/aspect-ratio.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/avatar.css b/internal/test-styles/components/avatar.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/checkbox.css b/internal/test-styles/components/checkbox.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/collapsible.css b/internal/test-styles/components/collapsible.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/collection.css b/internal/test-styles/components/collection.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/context-menu.css b/internal/test-styles/components/context-menu.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/dialog.css b/internal/test-styles/components/dialog.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/direction.css b/internal/test-styles/components/direction.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/dismissable-layer.css b/internal/test-styles/components/dismissable-layer.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/dropdown-menu.css b/internal/test-styles/components/dropdown-menu.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/focus-guards.css b/internal/test-styles/components/focus-guards.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/focus-scope.css b/internal/test-styles/components/focus-scope.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/form.css b/internal/test-styles/components/form.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/hover-card.css b/internal/test-styles/components/hover-card.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/label.css b/internal/test-styles/components/label.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/menu.css b/internal/test-styles/components/menu.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/menubar.css b/internal/test-styles/components/menubar.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/navigation-menu.css b/internal/test-styles/components/navigation-menu.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/one-time-password-field.css b/internal/test-styles/components/one-time-password-field.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/password-toggle-field.css b/internal/test-styles/components/password-toggle-field.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/popover.css b/internal/test-styles/components/popover.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/popper.css b/internal/test-styles/components/popper.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/portal.css b/internal/test-styles/components/portal.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/progress.css b/internal/test-styles/components/progress.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/radio-group.css b/internal/test-styles/components/radio-group.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/roving-focus.css b/internal/test-styles/components/roving-focus.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/scroll-area.css b/internal/test-styles/components/scroll-area.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/select.css b/internal/test-styles/components/select.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/separator.css b/internal/test-styles/components/separator.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/slider.css b/internal/test-styles/components/slider.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/slot.css b/internal/test-styles/components/slot.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/switch.css b/internal/test-styles/components/switch.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/tabs.css b/internal/test-styles/components/tabs.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/toast.css b/internal/test-styles/components/toast.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/toggle-group.css b/internal/test-styles/components/toggle-group.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/toggle.css b/internal/test-styles/components/toggle.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/toolbar.css b/internal/test-styles/components/toolbar.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/tooltip.css b/internal/test-styles/components/tooltip.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/components/visually-hidden.css b/internal/test-styles/components/visually-hidden.css new file mode 100644 index 000000000..e69de29bb diff --git a/internal/test-styles/global.css b/internal/test-styles/global.css new file mode 100644 index 000000000..6c4d006b0 --- /dev/null +++ b/internal/test-styles/global.css @@ -0,0 +1,10 @@ +html, +body { + min-height: 100vh; + min-height: 100svh; + height: 100%; + color-scheme: light dark; + @media (prefers-color-scheme: dark) { + color-scheme: dark; + } +} From 36921bfe75f42640b60d0f8e288562c44d081aca Mon Sep 17 00:00:00 2001 From: Chance Strickland Date: Tue, 4 Nov 2025 14:48:21 -0800 Subject: [PATCH 10/11] add build workflow --- .github/workflows/build-apps.yml | 34 ++++++++++++++++++++++++++++++++ apps/test-next/tsconfig.json | 2 +- package.json | 1 + 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/build-apps.yml diff --git a/.github/workflows/build-apps.yml b/.github/workflows/build-apps.yml new file mode 100644 index 000000000..6ac76da1c --- /dev/null +++ b/.github/workflows/build-apps.yml @@ -0,0 +1,34 @@ +name: Build Test Apps + +on: + pull_request: + branches: + - main + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + run_install: false + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Run build + run: pnpm build:apps diff --git a/apps/test-next/tsconfig.json b/apps/test-next/tsconfig.json index 3a13f90a7..3453a3215 100644 --- a/apps/test-next/tsconfig.json +++ b/apps/test-next/tsconfig.json @@ -30,5 +30,5 @@ ".next/dev/types/**/*.ts", "**/*.mts" ], - "exclude": ["node_modules"] + "exclude": ["node_modules", "../../**/*"] } diff --git a/package.json b/package.json index 858335f5d..fa072726c 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "dev:next": "pnpm --filter=test-next dev", "build-storybook": "pnpm --filter=@repo/storybook run build", "build": "pnpm -r --parallel --filter \"./packages/**/*\" run build", + "build:apps": "pnpm -r --parallel --filter \"@repo/test-*\" run build", "clean": "pnpm -r run clean", "reset": "rm -rf node_modules && pnpm -r run reset", "bump:stable": "changeset version", From 3cc5505625c59c7271266e508f42b873df657e83 Mon Sep 17 00:00:00 2001 From: Chance Strickland Date: Tue, 4 Nov 2025 15:27:19 -0800 Subject: [PATCH 11/11] update workflow --- .github/workflows/build-apps.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-apps.yml b/.github/workflows/build-apps.yml index 6ac76da1c..25871e4cb 100644 --- a/.github/workflows/build-apps.yml +++ b/.github/workflows/build-apps.yml @@ -10,7 +10,8 @@ concurrency: cancel-in-progress: true jobs: - test: + build-apps: + name: Build Test Apps runs-on: ubuntu-latest steps: - name: Checkout