From ea2629b7eb9faa9960ef1821ddb55cc83cea5cd7 Mon Sep 17 00:00:00 2001 From: Igor Barcik Date: Sat, 20 Jan 2024 15:01:35 +0100 Subject: [PATCH] Bunch of imprevments copied from other project based on this starter repo --- .devcontainer/devcontainer.json | 24 + .env.development | 2 +- .env.production | 4 +- .eslintrc.cjs => .eslintrc.js | 2 +- .nvmrc | 1 + .prettierrc.cjs => .prettierrc.js | 2 +- .vscode/settings.json | 3 + Dockerfile | 13 + README.md | 13 +- bun.lockb | Bin 172695 -> 170512 bytes docs/routes_wouter_example.md | 39 + docs/servimainUI.excalidraw | 435 +++ index.html | 2 +- package.json | 18 +- pnpm-lock.yaml | 3000 ----------------- postcss.config.js | 16 +- src/App.tsx | 55 +- src/components/DevControlPanel.tsx | 93 + src/components/FloatingMenu.tsx | 73 + src/components/ThemeButton.tsx | 4 +- src/configure.tsx | 53 +- src/consts.ts | 14 + src/hooks/useLocalStorage.ts | 20 +- src/hooks/useTheme.ts | 20 +- src/main.tsx | 42 +- src/pages/AdministrationPage.tsx | 5 - src/pages/HomePage.tsx | 5 +- src/pages/InboxPage.tsx | 5 - src/pages/LoginPage.tsx | 55 + src/pages/SettingsAdvancedPage.tsx | 8 - src/routes/GenerateNavigationButtonsDebug.tsx | 50 - src/routes/ManuallyDefinedRoutesTest.tsx | 22 + src/routes/SwitchRouteGenerator.tsx | 38 + src/routes/SwitchRoutesGenerator.tsx | 52 - src/routes/routes.tsx | 119 +- src/types/devControlPanelTypes.ts | 3 + src/types/floatingMenuTypes.ts | 15 + src/types/routesTypes.ts | 28 + src/types/switchRouteGeneratorTypes.ts | 5 + src/utils/inDebug.ts | 4 +- tailwind.config.js | 40 - tailwind.config.ts | 26 + tsconfig.json | 44 +- vite.config.js | 5 - 44 files changed, 1129 insertions(+), 3348 deletions(-) create mode 100644 .devcontainer/devcontainer.json rename .eslintrc.cjs => .eslintrc.js (95%) create mode 100644 .nvmrc rename .prettierrc.cjs => .prettierrc.js (91%) create mode 100644 .vscode/settings.json create mode 100644 Dockerfile create mode 100644 docs/routes_wouter_example.md create mode 100644 docs/servimainUI.excalidraw delete mode 100644 pnpm-lock.yaml create mode 100644 src/components/DevControlPanel.tsx create mode 100644 src/components/FloatingMenu.tsx delete mode 100644 src/pages/AdministrationPage.tsx delete mode 100644 src/pages/InboxPage.tsx create mode 100644 src/pages/LoginPage.tsx delete mode 100644 src/pages/SettingsAdvancedPage.tsx delete mode 100644 src/routes/GenerateNavigationButtonsDebug.tsx create mode 100644 src/routes/ManuallyDefinedRoutesTest.tsx create mode 100644 src/routes/SwitchRouteGenerator.tsx delete mode 100644 src/routes/SwitchRoutesGenerator.tsx create mode 100644 src/types/devControlPanelTypes.ts create mode 100644 src/types/floatingMenuTypes.ts create mode 100644 src/types/routesTypes.ts create mode 100644 src/types/switchRouteGeneratorTypes.ts delete mode 100644 tailwind.config.js create mode 100644 tailwind.config.ts diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..1ed2da7 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,24 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-dockerfile +{ + "name": "ServiMain Dev Container", + "build": { + // Sets the run context to one level up instead of the .devcontainer folder. + "context": "..", + // Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename. + "dockerfile": "../Dockerfile" + }, + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + // Use 'forwardPorts' to make a list of ports inside the container available locally. + "forwardPorts": [ + 3000, + 3000 + ] + // Uncomment the next line to run commands after the container is created. + // "postCreateCommand": "cat /etc/os-release", + // Configure tool-specific properties. + // "customizations": {}, + // Uncomment to connect as an existing user other than the container default. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "devcontainer" +} \ No newline at end of file diff --git a/.env.development b/.env.development index e8066b5..63b66a9 100644 --- a/.env.development +++ b/.env.development @@ -1,2 +1,2 @@ # Config avaliable on development environment -VITE_API_URL=http://localhost:7082 \ No newline at end of file +VITE_BASE_PATH=/ \ No newline at end of file diff --git a/.env.production b/.env.production index 1e9012e..f6fff92 100644 --- a/.env.production +++ b/.env.production @@ -1,2 +1,2 @@ -# Config avaliable on production -VITE_API_URL=http://192.168.179.36:7082 \ No newline at end of file +# Config avaliable on production environment +VITE_BASE_PATH=/ \ No newline at end of file diff --git a/.eslintrc.cjs b/.eslintrc.js similarity index 95% rename from .eslintrc.cjs rename to .eslintrc.js index d29b926..f7472b4 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.js @@ -1,4 +1,4 @@ -module.exports = { +export default { env: { browser: true, es2020: true, node: true }, extends: [ "eslint:recommended", diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..a0f9a4b --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +latest diff --git a/.prettierrc.cjs b/.prettierrc.js similarity index 91% rename from .prettierrc.cjs rename to .prettierrc.js index eaf4b83..5223e66 100644 --- a/.prettierrc.cjs +++ b/.prettierrc.js @@ -1,4 +1,4 @@ -module.exports = { +export default { printWidth: 80, trailingComma: "all", singleQuote: false, diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..55712c1 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib" +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..35d823b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM node:lts +LABEL maintainer="Igor Barcik <" +RUN mkdir /opt/app +WORKDIR /opt/app +COPY package.json /opt/app +RUN npm install -g pnpm +RUN pnpm install +COPY . /opt/app +RUN pnpm run build +#change port if needed +EXPOSE 3000 +#adjust command if needed +CMD ["pnpm", "start"] \ No newline at end of file diff --git a/README.md b/README.md index eb5c6c3..68f56dd 100644 --- a/README.md +++ b/README.md @@ -10,10 +10,15 @@ ## Usage -1. Setup `VITE_APP_NAME` in `.env.{mode}` files -2. Setup `VITE_BASE_PATH` in `.env.{mode}` files -3. run: `bun run dev` -4. To build for production, run: `bun run build` +1. Setup `.env.{mode}` files + +```ini +VITE_APP_NAME=Universal React Starter +VITE_BASE_PATH=/ +``` + +2. run: `bun run dev` +3. To build for production, run: `bun run build` _bun can be replaced by packet manager of your choice_ diff --git a/bun.lockb b/bun.lockb index 25692cf11c4c1b31f7e95c0e05bf0160f6fdaf93..cdb38c832768c6e5f579e436af0d7728e9c76815 100755 GIT binary patch delta 46420 zcmeFaXIxX=);*dXKnWNH0Vz^N1w@J>21Ft#UXmxKfJemIQ!?=bIq~ZTyxbOvZJD0Z{|+DnXXR$7t95@ z=U=Z7%})6iG4HDWfNe{=4DV$7dq^)WM;oJX&*B9_0bLtrMcN4EYi1QV_S_7nonP^v4buQRA&6=zWL_@^HcH?$s@f1vV5qms^FyD#Qem}yj=F6j+uOby{eWF zNO-c?8aD!1q5x@2Z0B>vU9LW~KzlAKlf`ax3nB%~xI z5#Jp;xjQar5UGLyWjsc5Tzpmz{aJXI~*#`AZeQ$sF7QhBG_s?sln zB#$IZcnMujBkdaqYQbwrYJuiZ*Bt5psURvxoj*yf zuhsk!=tj`hYXpN%<@M&|s)RTER4&O*L4V*n4xI*{dVSxC4CI+Le8Gz#$(6G^stOvI z6Bmyz7Kl2j_#TjCz;Z~cNL^uSN?r<;pOWjM?B$vA09A&Gd__S$t7EDf>bSg07+fYva`yA-TCwh>G@QjUn&z%D9FUqTw9fVj-UjJP~3hWs>1L`DPf**S@Mc`1oG12M|UmAxUUh2D^~Iwj_& zr)1^{1UrLO4O-93_z+e8^u+v3G9(H*d9JNW%8UIFpy`y5n3#=?NU#tYX$<`HC|}=0 zm2n2*>mfcBvKh%-7iG7?;Ow}Z+{Aw1$*@pJ>avtUnOQj)TwS1(XUXqz>A8ZSFw!yq zlTtDhT!v%|&Vrx}M|qj;lAaZhnG2bMLxSLFFIBu33L=k$_Es5`lai4Whb2ZmZR>=q z;1>EGdVFQB`-H6Gbue~P;%Z6T#%T!r^Onbsip=D7`l_bD%V>cBJ6rJwnQD$*gS3XeACfxW zAx5=rZG}!9y9|=tBZ^g7H32&HZwe&kQx6n%zx;DPTMQ_qmlx|H&OCAf;@~&T2C$FRR%sCplZlN=rkZ|5J&D>i}M<}dl95Q4UCxxP{dGPz9nC4 z=#QX_p?9C0Ok9MrLQ66Yv@$&OXo5tq1uDmSpq?G zshi9<&5IY{c#0Hl+XD>i_zgM6B<>eE!!X;sh`322U)Lee2E5S3EK&qzn<)jL&T zTsjVec>*_#IO=;VNNRB<(wRWYA!%%FMgzzYbwglie`Q~&D^?%U)MqWV0SC}Z8eG$d zstgH(#Br=R6|yPht^!pTst*ln4|%m=qs7hTjfSZl*BZ%fk$fSFBRPAxsu;5os-CI? zNp=qbPmY?2bmZ`2NE+*Tko6!B7OC_NkhGZg2T$$n4N2*JAx$CqqeAz;&I;)@`J znpvNfnz%lUtlj_Euhg~G!gtHuhnx9)Pnpm=DeTdjv^fK}M6lBhPP4ZSZFOgu#Ki5} zUt-S;j3%;VLw7dc$X0jQZ5xAg@h*jIuhC3{M!%Z`9@%nbdcF0RF16EMl+3yqJ33ym zD{ndUo6mAL->KS7zui9K{W-6mej%InKN4pfo9XVIIofpG>xuW+MB_{Hv3=Sm8J@lu zJIgJ4TJv4L-e*tl{~Y4C#s6fz50Ab#K2nq-OEYnsJ*l{+Aph#L;7JzmPgRN9_6c#T zSKj1Cs3Nq9-9h7LJ)U-0cI(TGg#F7NzpLvjzCU?Yd-p!WzdSLLZ#p<~#*T9~^(~qN zKJ+a=xaiS-b6-7S+q#8%h3|IVyxrlT;mB`>iD|#voL?}YYrKAwN#Rv&zJZ@SY|{13 z)_uC^B}GnqZ4uQyaGXKE^z^aZqTD(&i{j_ED|maND0|V3b60GH4`V}Lzs`<2@>*xn zy;qKrp;tp<-d9u~wP;r7K>q;`N(+Byc`R$}zhwRF7mZ9Vj|;!@vgxoagD9&e)%Hh4 zP4-1|i*5&fS(^PTo!gq-B%o?zR;!)quj55aUM56`-)(<1fb}#r>+*lfrA{1mvTfM& zZr@&ZcRRMi{LFD<^M(!6d)qg-dN?fQxbXLtnM~Kz-S2vR@63iKvaSnF_B^*3cQB22 z#K`L3=QlgH5zjxdd1%LmT)^-Z9@o1sUHwfGwZZ?GgfNi zH`~yR)tD?}H3nwP7U7AFda?(N9L+918s#3`sNc=N7{>26(Ck89_n3dnTbm{lw7d~-u6|K9A zJZ8raD_gv*XvakJx18?j+BO@9Y`yoA6*RV$2Vck@J;g4y^w89gLB?+iPYzfx+V4{4 zuu1Ac`{}kI`BnY9Mcuwur0cv{*?V_+w*JBplN|N%>GAFOu7lbGOVmDGR=GdBvVP|D z1;^vw%#56Va#EXeSg1 zys-#q(d^f_a^hV*NR7?ZRk+*M&zo&&#tml+EIV-f*)7WsA|qsIhkV*>c?*ds1X=_% zjxD#8h>k+Tp}Sa18TS*KyGpZ?h`hB`nut~Bdg(%uB1(rXw~~n0Lc@u(xGt(~#p0Zt zS$D&=Nq7gXa1SwN4x0mQ#f)>CQx9|}eV|n)iFJRS{5^*rJu6!j8l$Bg+T2Dj_ zY!T?A#m>yYQdj&Q>BxP5V@2NBO2`^C#!DhBs>h-`N`)a}R?<V|Uy82rcTf zDr>2zH}+vF7!@~_h!#Whfrd_nb`u(QHqxvlIz6zXcVc&)eMCnQBG+rNYG;Y)Gcq7~%Px-L>%%&NgCIp7^K@n_QC8u}KKg zz`z*D^3sJ82t~-MVd^tzZIl{1R>u(=ZAWGEQW2sdT9@h--ZWt)ouwiXPFR0+s;Cn* zDixy`ga0tJZqQJNtwf}Y9UA9Fssuhvg+?8VMzoiRHbJAJ1>|4h3sYv%RVwr|W6=;( z%vecRspulkACy5glj`DhLajy@pq-J>q-=3hAK?mfR?dJTea9m;EA!7OA_of#H5 zx-l!6kLWW(e#){itVKNL=?}UcqN-;(#1}x2NgM5)L z$WF>6c1oEu;@<7G?J)#cOb;KO zJqUGHhJGW|RT=8sR2@4NAr*HGAyqodX6o2DgjBKX5eiY}{qh&*hqGu87Spr6HUc5c z3bi7jD#PAEoiiOFl_lGh+~Uyo+6br$>+Gn`FdZSx3>bV1AyuVKoG9Jhu=d&rC@Iki zg!mEJMk3zYLLiX962zhC#prus6;yS{}B2hh%$_z@fx|z!InP4N46!XSfA{Mw|x|4vY&RDbz277AYJdDxbWQQKNn52U)Kddi_} zFjl0CwTFf)mKnIF5E`w#6fF_$ghs24h`~{!U(jgNfJr`Hx}JY^ft^G&7aAo*RJcU+ z5*kfv@}@-O3R5Xgm$pCAdtR%n+@V`ybWjIl3qyD3@S1W{7Hx*+hd6CkEtQB2U}FR{ z)q0c!jr^gjEM*n1VK!oYc?gYaS8b_Ham3(u!Z-!AWqfqBcV|~v;p-ULQ`iFX4Y_bgG#EP33CRs-RJe(DuPzx>(N8LcW6D&`>`ri1YNq@v5YaRQSr5Rke}o zv`583%AI61LNsjau(&krH_*s><#9yhi~&KKvem+@4lG(C)j0{WyK?z8_G8grQc(b0 zLDi_dKN4CXv&?ujBu<1M|jV;b?&jqk5AE_uB327R^cNpCz(5Oaq2fFGyG%~G@^2}x&$g0{) zg_(iO!dEI6TcK1wGMuOjlZDL z5`%$`Vc5B=I;CBzmo5}4Qb*~cP0-+KatiAI-IZC`N=0pvl~ykd{#IVPP^d=@Xg=vw zK#OHo&3uGyWUMMeDmomj@{MZ1fB%QpO(Mz-Q4M(b&0Qio0L>i*3231cy?{nORURir z4ycYa<*7~>-g2c3 z$e-xAmJ*RW##)Z5Sj26Grs`C3(Nk#TKGj-a9jYE-=y08Z(4;IT%15*eAsSFRw0`JZ zg@#iIOsOBH$}MJb);PF_F^hgu(PWTR0i21cc^w*!1&mW@#=X>|hO{tfRJk&x&SYq9 z*R z5am(L?qkqY?We{4JFg+mU82)Eg4&N$zc4$3RmDn08;DR=2PX?_BUp5Qsg4a6jvzW6 z=_Df5mc`imh!#>vS;z9O647mFWV6zHLeoC1WB|_deN>|hdk@C#3TV`)m@zngeuhTf zhgsP{BI*#Oic>A#h0w@g)snCcT5D*C^OA@jLBm#0qaWw}2GQy`()^*(%s`o#3*(?s zDau|E9*SmFiBge8UzKNYOu*3W4vmtimXz_(FjV+qdmUOoWn5e^J|a+^|CEzgGzuEL zNMjg2y55hK43dgE#Rvo#G^$Z1oD-v*GZi4ImDm!o@mR*H{ejg*m>SEflBJ>@ATfSm zW;N!eZGRS>A{B-AR}V%zTZwRziaZQbRTv#{enUeGsd;ej>;cNZjl#JUrx*8^13O5> z9ie$5rLF+1`lKNq%BP`4*z7NM3s`CeNF0@`o2!mI^bDbD8x~t}D761ko@gdm3{LEh z7}4U#&}ei}IoO|ZipDddsA;@MB z;9OKF(oIr#YMcZ|#v~SgpVH+_)W$>_~`C!r}*qD=On zc}r%{Rb-f~>RPga>M9b#&&`#d=!+<<+|+w``fyI6C!M>^eT11Q%%VUl)J|p51yWI1 zD$dqORhQXeP1*?!Pop6|!ndi+qEIUAkjA1R3e#9gp;V_bjiO@;eRRa>SPUtl&H{wI zC?pz@p&C(jluv?Nq0yYez?Vvd4>Op>aH+^9Q{zcWCk>jPGHZ)0RYUceoufoJFpF7? zkm_6l*^ezo$t|-50!(HYi3L(;EHr<1H`qs~9HB&d^wViE7+t6|e8^x{QY00wg=j9- zc>;cbk{^&mk8L`8b0`Zki$ZeMiv^r3ngESPigHENIRvf0vI@&Q<+=nT22x1bAo6D^ zG>j!U;5R~+{YW4hEd7{r?CCG_0vxCIYrAReN8p4l4 zprLXun;;~}MwAZ{s-xVMQB;`VToEgoAQjdh$*LwuMZHFEMMb(aVqjbaw4 zuKVb}K8SI0V-Ff@%N<}Nfi9A?B;ZL`K+6NRG^KQbq>Ci+uB71lSCZo00Fv&27U03_ z7&=N1W0)x8(FbTSE(DYn!`I3LzL1pB51`9WdH>Inx~?OiPE%4jI6x{dlBC0lN&~v` z_0tD@N&?4A<@K*5WenltNm2{ZSpr=EW0wBZi9f2T_yLe~4N%_yE-7CepaUeS+K&LA z@Lx$vh-FlHX-a)C`8@xhBpHtBsBAe#zVcE_9SU&l?tD`@RWn8v`!`7=Vgk==N@~YM zo+n8iFd3lgrU4W`9iU575K0P3*S05yC)ef^5A^#CQmg z)rk4utjG|CKLn^@j{v&9d0C>@bM(I*tA6soPhnBZevb)UHLR_d>WD%Z8J<+@C;o!rSJelW_j`{NRlq$ zb&{mh*M&&>K+??Zz{hJ!;yZz-r~p1*Q&N4Mc^*>L<3v!wUHJ%-6zs-J883s0#PzQv zMTPM3Bq`V(H|nQeJWrB>^!+EQFM_^8Mnojtcu5ga(20uX`TrzojULFSkLP6qpN}M! zm&EJ;L(+(&xIws)>(Y2V9kMy}*%Zl38Y%QuV7f?B!6lGHE#&$CBq_-v+$i4?K7F7% zpeZSCDWBl~j>KqMVoEbzumZU#<4TfDJWI8rt${}UzK)Mw4@r&L3P~493U1?dO-aV? z;CYf1+{x?zNm7zs>hXnu(ty2uMv@fVhZ|LJfY%T5@(?c%L()Z((jDdbGM*<%y;jci zCwcxKl8z_1{z3dhCy!L{88oGcO`B~RMb%wJEDeJ1d@4;z8;lkbQIs|$`BRTF@sjen z^YN`9skSy0&x)3-N|*4dH6@ki#q%U-mF&Rl|4J%nJL0MIAV_WYYPk*jx!i#Do1-fy zn|kuONzzmdhoo8}AStR3-FQhnHJnQ8$Mc$!s94+@KxXjq|3S*>D{X?Id_s~`K>;rd zAt`D&ZdBn&Qg}(t8qMn@DSjLzHE0SXl`|ER8Z?X7XG7BU56SOlL{QuuJ^@Jz&clsb zvKo>M-2zD!?|{TV!7kjW;=Q~)07(XvLE@j_INf+jYtUKfWY{^LKPTsj^Sr#kN06j~ zuJSrb%6N^}NmB3zZeqyCkW|4-BL7K}2j1~KNh;?(BpELM#7AgKO7NLa_yv**_z6k- zazo^z5l7n=8E6AZ98whp^1lNmpj@~}Qi09@8S?+^LkQ}p zhYz~`KY0kD_S3@$T_mZ+-AKXpuOxZxfAb+kdFoG6R`>tOLkLYOf#AOnA<8-S--i&@ z1bD=c$A2&RW&7VJP?hkX;%TNm25515s!IMh`QL|-|2~BL_aWrJ4#S>2_x=xT{uz4wG}mj>OdkoL^vb!OmZwN3OCng=jyc6vIhHqm3aiuonxqV zIlK98=MF>JwDo3e*B%*X#JIhYtjh*5OWZ5tOxQMPU!j@olX0djZeJuT-6&?|(9D_P z{z%qmlb8+JFXI}sGHAM+#lcNnJga_rI|gQkjf$9Gek4@?S4u<6yNjCkk<|Nc-9>SF zM}l)`#LTO5y=0T$_u5@w*(0xsxpixC@bEd`Cp7E$AQMeeca;?zd?1qT-7IF;4#+qg zW_K`>C2tY4aR+6b9jk<9wpGkL56L)tHtJ9$JH1sbKV%ot^U;vHFN=?dhdeT}IVt*9 zp8tL-G&=Zu_l&%xWND8Hn|mh*#CSIi>eV(wvs0U? zdlXW8N|)G>h>X31i+X=>A3WLocAviI20V3b-#M;!OzY1l*LZsu1&vs=ZK%2I%*t>R zpHD+C_B}TF^Yn)yAxq7|dv;6@?#eQ@naN*V8ynxND$%IKe4O*P+6Rw*w`?`3(!${0 z^$+bnTof)Iw5oB3w|kx5Y|tug_i+3`=Vz%+ymX=#Y#28=x^dM6$1lG%oTL79fQ-~$ zsjyuYzq#4uyWj2g4$CsUD+ZLA9ITNwYBn!aKcjZjFV|kld*2REHGlAfy~#Gox>>rY z--0c5wC#MR8^?{T>kzPuS#39CiMM2&6WewR(_=fjyh_G7vq`0qY~l_v%Yf#>_Eljx z?i4et+cM6LrQF7FgmxZUD`tKtlFi>GW<_^ooCm9b)@8Stx!jd;o~-aLh7q*8&?L<1 z9){5#F`ITz#(A?_(E98ZGvE6%&WBC9k72Y=%w9qBWlpEj|IntLmT?`}EogW zIDa;&0{wpgDWP>@-Vf0K&=xG1~>L2jd>2eb5pg%eYXs4ch#p@XHe!*NeqHLHo)u z6`+MP!>4E;v>{JrTqG-lR(ed#nmvKx%HE18S zaWyioKdXe6T#gZ4D+`IEe&sK1y~2;PpYN?dW}4S2hvj{Zylu3<)*a*+`RC6%xo-<_G3>b8p+@Wy`Jg z171q9VT^iW#tRhfyg0nTcTy~m-@Z`rXT-yOpL)kPwpg)7dvEEd*!PbWhb%sMZPGd> zbvkzX#?`^?TGFtH1wI zN7Lmo{fcr5>kMTXr?86F%D6%7RxJj=X>`H!&N_7NN@4!jF$loSeJ(>VuNuX%_?vo z!|Xm_I9H10a{s_p6Z%<;ex5&mIpbGM;ET6=y88^MsG7(m2h!UHzI3kptS0N{Jzs^h zPgBR1$LqgZ)@8`$JAR||o?N$|x$opA4eyTA^lts~nyGWOW${wu9>O&Xy9Tcx@cnQ> z$+)6~u6Lwo2Tci|&?w=KzGR%aYp#ymv17QKX`7cvyt%{g!v_cKOzT}Z_c6=3Y$oqz z-MTn&JZRA^T-{@Km>n3PgSGM`)jAnI4Tpv_CQ5TZajjKX82A!58Yf z4=PVKH|X?KuysM>%TL#RN^WypZ_Vv4ah^fXAKZM&&cnJP$Hw(9cy{Sbmz08s+s9@N zZz$^BaYyRr4^_LnmH(OA?MSa#w<}A z4eO@-&AJnZ{MwDL9FhNOYJ+a~`#YFznKr55ev+{4?YW|*2d){k2-_Vi-~Phfsm{=r zITwyL-D|wVe@(A%_wxsTxEEINV8TIGbk!^*$Gi2BF`L>nv0iWZqR7qDKe0yF=tQ|q z#f#L|4cD%VY|tpB?(Fq*ckgdJMQWAw>B;i?k4k@gnudE19QkFVcdGn>hIP{fitk!j zEWECXky0zrQvt4zbc+V)V%)j!sb;6DB zLg}OFXBt$b9Ui_hLs&etk^b?e?i$6?7bet~_L&nuOH2or58Q7fet0dWxX@z3lR-De zgzmkUS~{>-+r=05d?-tODls)bb2usJ%-o3wKu_+{h&P>6Ps6H8Xk6 z+NJv%+ucZwIGv`utl=cBTbYesJ?(5z{Pl6v!TL>i?%dJj!JJ)*gUzNWCUfpSOW&8p z1rJKlHe0=A)~sFUJd9Fdj(RDZr8W&xd+Keo@P57D{~qvYu=BJ{pXaX7vKm_2_Fcg0 zqAy;Xt)835uPit|*0z)R1nZcwwyag6Fo!=o#=hOP;KucK8-5?CGwA!_!Lu6vG3>fEJnQmB2SdxHdUwi3t|)h|nwaW1 zU&rmh_=e@fu4$fZ)ZZx~Ben0CuHLgDCimpUV*S23gEHDI7`Q3gXnxSQ;mN`;W1cat z(dX9fbh)eM!$uu^dh>dRx$F0@tvWo$#Y1=egFpGTvnTIkzBkO6%PAQ*mldAEK6pbc zFRjx&#`N)>PPu#EM$f#wv#Z6``Yn3Az3N~%{lJ^FG2_1V>m&^rXWHo{i#pY!+^V-& zUq`>a`FG9W>o4oC?Zh++wyICx*SyUX{v1XdO^r+C`h&eZT!l7-HOhQ!gL4 z+NABR)30Pa$lmhG_QP?9hu#a^61Fv-elnq{(W`nx(#OreU3k<{kTCjoC;OJIj;ud? z;4_Q4Z6;TJmjtH;@LwPldn(q&Y?PZj*!7y03~PI>U8=Aq_a_BPjY^-e84sJkh#ah!1I$YCZu+NFMZ8_L9Y z%;bL}o5lZF@wVk7$9^mGe>Uhd*Q|wIc)yH^w@$X%UUp!@jOE9AD7?n~NVGfDY3KEK zo_ks>E(>k3%w&M9_;3S<2Z@@qV5O#Y0R<(wx3;8MwmFq;79==!wWVK&ZCA3ZUKltO zzZ)+qOsQS@YUX2yW#+r)SFO0l`Wl?P+j+cJq@z*yfi_VyrgivS!VcXr3y#g!J=DP3 zqgGhETL08W*N!bswvTu@<;Kvyme=k?M+6V>{206YdazaIQA^|151jmOMV~voVEPKT zzIA(;j5Th#sh)=KRV4>mU zBk%J)#$KFZcJsb>ndnDZzkaWCGBV2UjH}p|YM^1=I!){1LMP5hv6#P;ovJ@=+x(ik zrk9UZe5^PXyM2(?+Q)6LUC5O_9kQnXG;_I0%!wZ{*59V}e%vmmd7TG3E@$qSPucpZ zmYu(6#sWXfxD9O9XPlt!i{(c*&J5IxcaZ6>-86Pn^B9ZM=bEKitSvEY>)3hx>+vt= zcK>tpblughhrR#3Yxwl_`yRaSaOcFT>lKOahnl{a+&owF0f){m>P!2g)0$^54sUgC z*w^+~>GdVkVvaZZ+R>?^TYk%%$#Y#T8%P57-hQ38+1z4ijPBqqm(8V4)63jN=}`~& zhSsz*j8$}GE)UE?S~=c4Up~!CY<-lgz1XSM>QPz8>TjRn64H1?#<0mdUQ9R9n^7qh zy}0pi{GOUc_nP!N-$467-d&H_hH0W}VR2(?V2*m?Z4oG%h_I{GJP<3!i8z^Xn?P}y zi22oG`F7V!eWvf|d1hbjwuX&9FWa4dE-!x5O4G`34m)o2a?JSRvpZ|QQHz@!0>%u=-`D+Y z!#=$n^y^knJ#Dqn?qnbHl8bN6?Jk%sYhyGg>-3>8XYJ)XYg*h|vbe>Oy$OSv??W^B zQr7;N;!IY;#u3Mw7)P6I6m)LtX0UUF$*I~2eSTfa?l#J5;*urO7%NBnti~NHzoTBt2fh5w$FGjcD-RgXz8<)MI|HSwV(G% ztG{RAif&U=mnt%z95i2g^~S2V7uHoye!5oo-q??3tFFHg956UNx0Jntb#DE&k{6nG z?b`Oov~@=+rtFws(IYvvk$=EL-(5#*mt}O@I4D{6CO$p1`_HEhLSywLJAy(+MHSrg zny@xMqurltXEc1bN7Fj{i$-yC7kw(2Z)NQDXQ=mPulu9BRJ%3XJ+FG=xazTiJ9^eU z^{HsT&^$G7oj5=GgX^`PfBMXqn58}2zF~sJ>n6|pu*HwejS0(f8NTLz)`IItcF6~?@O*J)!sws&S-T3NJI^_^(;&ayw@m}rn_Kpo z9ChS=_Dk+-%d#HN7e@O$`s$e-RN>Twg*-M3$!fpg+MD*ruk4z5xo?Zy)rZEu==1i; zqm{eTGqmpJI2?JCG4uPojrZ+C10FW&`FQrgd83PhYaC8%#a!N-Iz8=j=@t#^4hR%_ zbugTDpNJJ1buhjU2^9N@*bBm{E{G!nMQU9T$xp?K^B}k~W_}Wnbph^?PKj+sSV0nlmpp^fm0!v-i}#WABa_==4xa;1g5FsJF$2x^6S7 zmUJClwb5EQ^|t5sc}uNcE?Kgpon_H&ZyC#|!A5>Y#+_odXYgcKizhc|6|53ZO*f&f zJ}cwSGN+GNlb&NsKPThPv*qXTX#WBa`sZcbMHYHKGU}41O)a|h9d82&ylUsn|;mXKc7CX zUw{46kk_r(JYl|H&6w{e8TW}z`h+9sR~+4-ePOlOmrB3kgP<=m?i*Y11xLQ`Xfd=O ztm{`C`F^0qUuE1c_6^!zXffYp+#j~>I6jK`i4S{D$b=ln2A+suX20;c&^MV-i(|s? z`0N8};&+))hhy8J7W_uyA2MNGB>oY>9RJ{>A*dpbHT)UDZbBXMQ^x7DvY(N2C*p(M zX20m;-NC;i6 zIO>5A>ws`lMCpLINyH%{oE7G}ASUXADAEPtqNpIks~!kXJrHh+QF&#{fileGop1 z<@G`68iLSi0K!)h+5p5}B6bncLBSb-NNxxs(SVbM_+!ebFKzwG(Y^J(8g9O&|Eb(B z$H>*LqFnSKzp5%`rPOtt&a!CvoZQ4)3x3Ln%*=Sx`H;JRr|S-mJ@ftyu+QJ<_}Di< zOCdJm%;Z+?IeXXS9zU>2YJ1^X#+5y(vYo+`U)C(_*&%&z$DSKM3FGuOSRejsmiRrw zA$aqY+w%9`m*byrIsM0Wda1VlBKoR^`ZPk{T~=S(7SoDOTwtFUj`mJ@HR+YS!~NkY zBLcV9?0Gr6Zs0)g8>8;jE~v5`IN$t>Vce$f`vRq-vkg6xMvcGrdfJ8uSFViDNK_mm z^MpqG{5#vfk4j6=@ST+0qt}4^E2D>;%)RGUVXz?Dx!bwJ-Ml_+?_q22IBak?ON+R# zZh@|2g*o3F1_#t{UR=L9y)L9SFHqCGyB+jr)-HQAGyHLwFe|pF-`Uoo%{Fv8+Im#v zu~)P9-1aD$H*CY?sGa6FPKN7?tyAZ|K2?^XRrLJr$64LZ#uvVN)J>6L4D)J&n{;d6 zXu$8Hf6i@w{B=t1?I7b%haK623dH;iFKG$2oebP?$n^GgZvMTYL(7S9y z_MzCs2&r=jozvCkslVAx9@H*AYci~Vr&qrwxcVifUF*B2ZRjxLu>(D6C94Glh!{1`T~9TzzTV zXiXOUzMea8midHkHqWvzeGFZ_^`uw49bw&rcS>LJj-80dfv*?mP{6JQ_o8|YazId;yi<#I6b-3KSEJ6)HXNV7bkVU}S%D7S zqVyhCZFWtux?|?|J*VdBwV!&gTvyBLw0OU;1oo-@+e1-lgJNq?tisb4_J?ZP@9_0; zBYlHAmCYWBSL==OP57DCpgLLm^6jQoF-xy5s3<}Ifw!q5Q)t}3{q?(!qFCli35lfMVteOn?#fok)|+o z1ToPL#1Kai8HzF@yqbV$<^&>3G1v)24H4If7_6{s0b;&Ah;c1IHE;U|C@nE+wWy@4&RQpC~n=hp+m^E z+L2Wb<5FT@tUe{Y`f0_3MDy9LzkXTs&1Qbzch?j)`Z=rHE!%bExZ#$Sj}=zV7@;eF z-Yd#!oW3>c-RQ!rw-UPO=j*K7;Jo@m$;+_L1v!h3d0ezNyPvb!;r8oRm0>Yi6E0uN z%Ilx1{qdC6-Ol2}oSlYwlN52S;mw=Q@Md{yxOa-e&;!K8mLP_BfS9HzBf`rCM6)&^ zW+(=?0Z~K5H6msy>^wotcjd(LyjPK}P4b5sbg9)E5&HFjeT@5pZf^5;wP|-?&(hh~ z=A55&z`elZS@;@*8LojTE#9q|k^E;>cEsMLDU+YP`)Za;Pb=!hi)ngJ>^EnYR>GX7 zW=pn)b#t=s?HH4Lp~J!B$Ne2e!P!wSMjc9TkbSAe9rMe3^7EZnI_c4J$I>Cb0X zUvizebMx$D`3he*c+TJ2Gj7D}$&W_<_|ox{pYwnkul^UNb7OwqdBTS4g`ZNmTpb@b z-OI>zg8eJ4!4@W^-Pbv6*GqhPWO-vpq0bAecn$OBDn_+MtG~LD=L|6p6`J-gID5G^ zVP2-!>=Vnj>Xg6ox{wmo>C*GgTKN|r9WZVE=gcEkt*mitOIAPc z5}&>-*T?a-boq)uipB2O8+;`wcY$WP!HYUAT)C7hn%rz)jC)|OvJ~ql4jqg>CN6rn z#r)&WzDM>iKezj&!8QLr@)mD*hyH#naF!Og-<1DCtLwF;(LvKLDneSp4eRzB>cvhR zen`uoJ2c)X)To2!^kutpE(Y|zVc)5z@%L8W+eBU#nuKTWzxk*3vgw0#R$TvBR?oCe zU6ypS)o1Voh^5t%(cleZRJ!_qRGvJ8i#UWqZ!;kl)k2 zU%z%6bFR*dgfH(#j@n^rR5zf-uG*-Wyn*Jc2J0X93wn@YW;8%N>-s=D#irIUcg&LE zhqdiPJD-2E(p+%=?w)>MhDwaLJ8eF5%JI_L)q4w^eJ@AO{Bt8u$8e1O?!Gr}^~uW! zFq`Y#dhPq4)3roFKQwx6slwkI<|cdKcpi8}CS1<3*+(K2W^JIy;5fgMV;#>%C{9CH ztoFv>UafdX845f>gty~5g{z0>TFrJw8`cet0>ZrXo#n67y7+Hm!aho>{n z#SMMxva+SXdv2+@&P(gn;&lTOI`qlA;Qg^|c>O!!87cKQ#hy-4SheNMLN=~nb2F-q z)7JJ8caP@9=Na2{*M6iGUV5(anvU{!rPg%^_gvCaJ33G6$5cD>!|rpfRudVc^4=iPb;5+us8( zT57Za##>UAVo`hLi#5eYkpGmRjbc#%T4o)fYMHVXmx95(?y6W4!38Pmg`f!zGWd{6 zZpYuZYPfu}8%~gHFT>aD5nw&Bn zjf!V=Xjm^zRcwyrx(gwHM{*s_v+zN?7{!t?>K~l8a;I8h%vow|9ew5hZ6Zh?jE*25 z9O3NDkedGJuf8a^`bU|SB~m)ZDYp7?+MK0gR4`}6*|O@19;!ax+M=nj$!NvMAWpjH zWj}68sNU%{syP?1Ns+dd^Op+*zyGK%sv;4Q6i?4TbdjzFN!8Lf=;=!4(-2SQ(Urn; zWU7UdK_kIYJ{>^)`VhTiiGRvhjSf*H>KA12B&Ld>8gF#JV&1}>+oDQ z&*_1qj-zWZ&(ZhVUMLy-R0+?~{Qkmox!~w!P~{s}sx!1ekjE#i4}LM9a0obRExkI{ z9iUbg@agCe6rns<$aC~Ju9Lih!+4H76vXM(`y4%7lXFig=E? zV?NJ~h&1w2QsAOlT-#XL8f=ctR8@EjfU@Q;21To9(@;Q#SFN&VJ~Pe>;&3N{9M z^V}ppoh7)R09})L&I)1r^9Nm1c+MK(G$n&K_jnEqmLMGC$vL2 z8=z|j&ox1q-qfROCePU;yb~OGZ5BB4LQ`NmIP%aOo@<8i44$Jy2L37E^OR5E3#7Mu ziF5!a@*JHSh;sz!okemlz5PqkPCyaQ(Hp*$t_4ua=cO&2IA>rT&n@A(mf-q;LpR8k zZ~an2tiFOskkk#!_=K(qhl8VTSk7~92$xa@Tq}4E%ZNY^Vd@6ud%%#bfO>qoReZYE z;1mFL&1xkF|6?sz{_cbwBrOj3N52X~zl5v2Xp<(+6W9%7nn02P>z+9~82h$o)L$kMMMWTB&|txg)}q znG99GyW9z3%1fO3J>~#}jZh9ipsyn%Lr56~X)1?aVI+IGZ1eV_qg02l%d0VBW| zXatx7W`H?h0W=0I0V}{-h#s~wwiru5LjCWF#Pk_=AzC~P7!E{3?+e5L1Ay*8D9{C<^{zc6 zZL+_B-@qS$CJF}#fk#je00)6Xz+vDBa1r`k=KDKsjIw90llAMpuBgE83oDJEFaiHe%X% zM<8EU$ap~Rj$1207Z3sZKs`VU&<1pX$H+kY9j#}y&RvB8b0MP;X9v(0vl1u**A21- zKucFcpbjt+d@-;dVcG{b0<@)J3zG|0As_>2JD^p4EE0|bXfJCHH~`kb1aO}KI*NV+ zZUP&D?f@;M^v?Zh7`6&HhxBbB`$6^ud;kfMj&xbTU|=4QNc~@lgbfhMAa?@Wfaw4o zh-L!Afe}Cvuo>tBL;#Th9Y0zluO6WIt5DU6VK?F?gPQ_O1%jY=2D$*V0NU}DJN!gM zP6Flw!$1}Q6joy$3MT`_0C8mbXh5^@>CmSE>O7ipYK}Hn+DjV&v{#Nndbv8|3@GZb zBOzyA`;ge+Qo6{wIAZqT578}yO%SO zQwwRNE(K`Opix=^(856r2rV4r09q4hEui&+)&hUP5BP`zX=;7|Xl;K7ke6sIQ7e;x zIKUBb0Ga`ofFV$y&TJSv^i-?-@hd$@5rAG0plszYP1IGiI)=@Xk`c54u}0Vc;RXOn zbHEHR0U83PfDzCLAkG+Q3|Ih70c*etum|h_8^9K50yGCSOq0{kjVkw!0g!HhE8qe+ z0hCZ3-v(jL_?FOH@M&nPp|l=AYoHZCWw`TtTVAI;orUJC?Oa>+aG-GK29S^829*6K4fDC59Two6H7I*_Z2Wo*D;2v<7 zOuvml6>tl<0$c_v0TbX7a1Lk)Q~;-da)8Ey0yqYg0ZReu=MrE6FdtY9ECCh*i+Ft> zr!?+y;4gp7i69BpFIG}c4V}wrvrvW2Ct)E5s3_t^ky5J(@d4Rk_ z=`H}8W9Az4tH5>O25^)5{|*ATfoDK9@Bp|ETmguG3_JuL0hHzm@Dz9rP=ODCmjI=u zu6qHb094T{fH(@1L7E0q*M6e@r=7GN;04f*>It*~s*%70lFl7;L_7f936i#wb_ml> zPFsjQKt~2!fVLMpBG7T;F4E8@N=Fbniqr+jNIE`f16sg0>VF{ue;|JYUjXXY&%h7h z7w{AK4txW?0>qO}l9qECGaRH2Kxdu$0Bx+a!5RQ`ZlR+H9XaTXs@^nd-;>h@XbzA8 zbXHOCq!gwdl{P@yENKeThDa@@umjIi9JQPdNHj28LefE+JVD0@I*7RebSP^JkO!$Q z@+!h|rTfTD?bwF4O{O@&<{2zVfi-P}UAHkS^*F}6Q{%Qo3 z@z0H*1_T3L0h%SW%hPV(5%7`YrXGBq5e@|Yw+3GT%KDFk4-J$5yOz;F3If#q^$CgT zOxq0z0m6V#fX<>l029R1^rC4+d^A9Z>0Uq|fZ}^YMgnxYr-w1b$(0|-j)am3!~k@_ zO+w-X$bmo{&>x5eV!#jJC57V=?hP3W6d{}hi~wZNb0CKTLx4Ph@?`^Q0Od`EbfS+# zQV>W61_A1fgAvXGGJy<0T`74Z9iRdTR3J&pr%ppU?F+Pm<|1CRQYyC}_Ron zT1}aTgBV66PymoYg@C#+%@&RZKMGK{a4f>)F{-Q>AkV2<`1b~?^QjvsSGQ2@ZgmT( z0CmOGiZMVij3jrH)B!Xrn~nGhz(im?K;_UVC$1?k)%B$Yi5AY*79nFq`TR0hNU zWHBYA1Qe#i$a>01TnVrUSO~Dw+MUh;bkJCdf=)rwcIyi)hfZBl2CP81Gh_*%K4>%sX94{4GENoI_DqWomERbk zZM+m|sS)KsBMPhsF%R-|83MSP8!NV-=UR|$WKgmC|Ju{#V%=RmT_x}jVvG@^{$KfY zIWpW73>i#P{r~;x3h|%yCgQ(1RgN5e#HjyAK$ODs!saz`Ck6*DMZjbhye&V&1?xC^bV9@>ioO7YJy_phT26K5c~r>nbbD}i!L zqk=j8NP_7C{}5#meB0THg2kmKF*f=kwnC>kWK9{FZa>xo5xU-uok$ zQx8k5op}g^G?R_VYiF}-M|(DDshqZNvXl5WZ#Fe@KdrI|!^GU}-0p0!vnsS$Bl49+F~W&Z_)qN1X}*b@3k>UMKZv zBfRdpu#=9;>ZCY3PITr6opw&D+^4LYiD(v#ezcQRRS0yGOY7^v{L6H(PKxOm+)Cl+ zs~4Atef)7?k&v#?F95WD27q|FS|>$Pk0VlSPq9wIa zxLM)Y_R)%Ui{Iv!CJXCuSP)%0Dn)g&=_W#btii|D4V`{DZc8d~;D>B=R}iIq3M$_K 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 z ziH_=V+Q=kE`Oud6qRG37VyQ$YlEuNwGo3}_W^zq5Vz~&Dl4bW%l!wCosOM-APKUD4 zeP8CIH|16#3+hKhibRv;#R5OKsuxWvzd&Lnwa9T5x!p#$(^~AH@3O_ZHg1p0?nH-T zsN1G^j2>%tfjm#s`#GXJbxaozSN@tK;spDAlggj+#HGe+vkS!pLEZX@(Q-wV*Na3O zsq(#HVueKA<4~)9qF767hKNm-?@bgRc%^=!9ONP1`oQ2qcmkN5q$$tk~w4%e1afrrisg8lXE2^&{qy~ zy_^%qx#A{y>}aJPeG)!Zr1a{KCy2;?{DcK}`CybEt*|n=wmj>k0*^7< zRaERof@90Wh%gpdr2`b^p3wgNCEy|go zumx*ZJpWdoW03Qlau;sYk*%`Ty=#o8wN??`fV2de*uJjjsIl%Xgj1H&zfPMK&YD(` z`9JXBuNfyp{-6Sqn)fN!VsuEqJb3cRH-Ls0zVkQZTSI#5fN3f&^VjN$Q^4f z96zbh>M(L9j9CiSQ0^kl9A{I{9nM0dYm!4wDHJ}VZHnCkMmRZo%35G_*oxt3vX9?& z>wWf~dhV*0pps#tEus|1P!8gL>O%n(QqHKnLUah!_V#gGJ2fWCrfgSJL6B=+Vseq= zP4Ea2fN;x}53SiYmR6&w@}$wG+6thm=XAKO=onecRv^~8Mt{laM`VcCxZv?#7?b6R zu5Qm8?YUsPrDJpDEKBKsXMr7wg#1PUIsyYL7xRJ~>4K{-A*1?SHB5YV&4OU4b&Who zb%t#FI62=Nrwo{I?=_Ew8dn(n$w+;8PL8kPl+5IHQLop z&GAVIR5VRortzhiGRMxq!u;wC5kNbpidZR|XEE~EQbHs^7m_;m4i1#o*PwazGkA%N5MJ&eM@P)#^-n%}Ozfi=m zjLJm|#W=i9QoE>06aPdLUPAJGbbYa~D^lNHB0_5v@S*EV#BhAIsCu^_WGu$zDd^BrSn1pfWE|&~2~Tx$ae#WKNGtvqicU2} diff --git a/docs/routes_wouter_example.md b/docs/routes_wouter_example.md new file mode 100644 index 0000000..af9de37 --- /dev/null +++ b/docs/routes_wouter_example.md @@ -0,0 +1,39 @@ +# Wouter Example + +```ts +import { Link, Route, Router, Switch } from "wouter"; + +function App() { + return ( +
+ + + Home + + User + + {(params) => { + console.log(params); + return
User Txt: {JSON.stringify(params)}
; + }} +
+
+
+
+ {/* ----- */} + + Home + + + User + + + User Txt + +
+
+ ); +} + +export default App; +``` diff --git a/docs/servimainUI.excalidraw b/docs/servimainUI.excalidraw new file mode 100644 index 0000000..b0d6fa4 --- /dev/null +++ b/docs/servimainUI.excalidraw @@ -0,0 +1,435 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor", + "elements": [ + { + "type": "rectangle", + "version": 1123, + "versionNonce": 1691917721, + "isDeleted": false, + "id": "S0A9g07WpP2BzYKcwg7_M", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 719.724163, + "y": 143.81704726508062, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 936.2131903354187, + "height": 466.57181944584806, + "seed": 166536857, + "groupIds": [ + "vs-w3LFUkaakMp9EAkrXR" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": null, + "updated": 1705396978531, + "link": null, + "locked": false + }, + { + "type": "rectangle", + "version": 881, + "versionNonce": 27719639, + "isDeleted": false, + "id": "2zx0egnLluNOg2aagGFf5", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1053.8463976564144, + "y": 282.54197840360115, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 267.9687206871713, + "height": 55, + "seed": 1587473273, + "groupIds": [ + "vs-w3LFUkaakMp9EAkrXR" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "rb6uePhVtcsn3pyWiAATT" + } + ], + "updated": 1705397026573, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 936, + "versionNonce": 1537819705, + "isDeleted": false, + "id": "rb6uePhVtcsn3pyWiAATT", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1142.3508080488282, + "y": 297.54197840360115, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "width": 90.95989990234375, + "height": 25, + "seed": 1183126617, + "groupIds": [ + "vs-w3LFUkaakMp9EAkrXR" + ], + "frameId": null, + "roundness": null, + "boundElements": null, + "updated": 1705397026573, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Username", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "2zx0egnLluNOg2aagGFf5", + "originalText": "Username", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "rectangle", + "version": 937, + "versionNonce": 342071031, + "isDeleted": false, + "id": "I0Xg4QaaO7XRxm7w1P_0a", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1053.8463976564144, + "y": 352.73966244936236, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 267.9687206871713, + "height": 50.72658910127527, + "seed": 628302137, + "groupIds": [ + "vs-w3LFUkaakMp9EAkrXR" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "jHHO9SMQy-Scl-_j7OuG1" + } + ], + "updated": 1705397072409, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 933, + "versionNonce": 803446807, + "isDeleted": false, + "id": "jHHO9SMQy-Scl-_j7OuG1", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1142.0708092695313, + "y": 365.602957, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "width": 91.5198974609375, + "height": 25, + "seed": 416059929, + "groupIds": [ + "vs-w3LFUkaakMp9EAkrXR" + ], + "frameId": null, + "roundness": null, + "boundElements": null, + "updated": 1705397072409, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Password", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "I0Xg4QaaO7XRxm7w1P_0a", + "originalText": "Password", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "rectangle", + "version": 995, + "versionNonce": 1770925591, + "isDeleted": false, + "id": "ZikkdqWQ7aOQyqTYogsSg", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1053.8463976564144, + "y": 420.93734649512356, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "width": 267.9687206871713, + "height": 50.72658910127527, + "seed": 1166337785, + "groupIds": [ + "vs-w3LFUkaakMp9EAkrXR" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "T3YVOW1Ns_aODcZTbHigc" + } + ], + "updated": 1705397026573, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 925, + "versionNonce": 147737081, + "isDeleted": false, + "id": "T3YVOW1Ns_aODcZTbHigc", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1164.4307793623047, + "y": 433.8006410457612, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "width": 46.799957275390625, + "height": 25, + "seed": 1713348569, + "groupIds": [ + "vs-w3LFUkaakMp9EAkrXR" + ], + "frameId": null, + "roundness": null, + "boundElements": null, + "updated": 1705397026573, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Login", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "ZikkdqWQ7aOQyqTYogsSg", + "originalText": "Login", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "text", + "version": 768, + "versionNonce": 851740953, + "isDeleted": false, + "id": "97fLf76gEdKS_GvQ6ALpU", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1107.8027277397107, + "y": 190.00681289938947, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "width": 160.05606079101562, + "height": 45, + "seed": 1826241945, + "groupIds": [ + "vs-w3LFUkaakMp9EAkrXR" + ], + "frameId": null, + "roundness": null, + "boundElements": null, + "updated": 1705396978532, + "link": null, + "locked": false, + "fontSize": 36, + "fontFamily": 1, + "text": "ServiMain", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "ServiMain", + "lineHeight": 1.25, + "baseline": 32 + }, + { + "id": "no67OXeP6ZJsJ51TOHxJy", + "type": "text", + "x": 719.7241633880242, + "y": 107.53011605520807, + "width": 70.11228942871094, + "height": 35, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1759430041, + "version": 34, + "versionNonce": 764198007, + "isDeleted": false, + "boundElements": null, + "updated": 1705397088770, + "link": null, + "locked": false, + "text": "/login", + "fontSize": 28, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 25, + "containerId": null, + "originalText": "/login", + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 1200, + "versionNonce": 1801846265, + "isDeleted": false, + "id": "0nggjHEz4VcO5hVagQVcv", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1686.3908299999998, + "y": 143.81704726508062, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 936.2131903354187, + "height": 466.57181944584806, + "seed": 1590948695, + "groupIds": [ + "o2JEyUESBRRq2XUNVAWkr" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1705396978532, + "link": null, + "locked": false + }, + { + "id": "wApCZR8vnuIdRuwfVeC5x", + "type": "rectangle", + "x": 953.3863135555557, + "y": 244.88073477777772, + "width": 468.8888888888887, + "height": 264.44444444444457, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 902925239, + "version": 109, + "versionNonce": 1334885687, + "isDeleted": false, + "boundElements": null, + "updated": 1705396987119, + "link": null, + "locked": false + }, + { + "id": "Gmr1u54szmiUkN9YuVUAY", + "type": "text", + "x": 1686.3908303880241, + "y": 107.53011605520807, + "width": 111.60848999023438, + "height": 35, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 858001817, + "version": 132, + "versionNonce": 1615445527, + "isDeleted": false, + "boundElements": null, + "updated": 1705397104893, + "link": null, + "locked": false, + "text": "/; /home", + "fontSize": 28, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 25, + "containerId": null, + "originalText": "/; /home", + "lineHeight": 1.25 + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/index.html b/index.html index 2f9e5ca..9611ca8 100644 --- a/index.html +++ b/index.html @@ -29,6 +29,6 @@
- + diff --git a/package.json b/package.json index f351972..ae3cd6e 100644 --- a/package.json +++ b/package.json @@ -13,24 +13,24 @@ "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@hookform/resolvers": "^3.3.2", - "@tailwindcss/forms": "^0.5.7", "@tanstack/react-table": "^8.10.7", "axios": "^1.6.1", "daisyui": "latest", "echarts": "^5.4.3", - "jotai": "^2.6.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-hook-form": "^7.48.2", - "react-icons": "^4.12.0", - "recharts": "^2.10.1", + "react-icons": "^5.0.1", "uuid": "^9.0.1", - "wouter": "^2.12.1", + "wouter": "next", "zod": "^3.22.4" }, "devDependencies": { - "@tailwindcss/typography": "^0.5.10", + "@tailwindcss/forms": "^0.5.7", + "@tailwindcss/nesting": "^0.0.0-insiders.565cd3e", + "@tailwindcss/typography": "latest", "@types/node": "^20.9.0", + "@types/postcss-import": "^14.0.3", "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", "@types/uuid": "^9.0.7", @@ -43,10 +43,12 @@ "eslint-plugin-prettier": "^5.0.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.4", - "postcss": "^8.4.31", + "postcss": "^8.4.33", + "postcss-import": "^16.0.0", "postcss-simple-vars": "^7.0.1", "prettier": "^3.1.0", - "tailwindcss": "^3.3.5", + "tailwindcss": "^3.4.1", + "ts-node": "latest", "typescript": "^5.2.2", "vite": "^4.5.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 0bfc5fe..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,3000 +0,0 @@ -lockfileVersion: '6.1' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - '@emotion/react': - specifier: ^11.11.1 - version: 11.11.1(@types/react@18.2.37)(react@18.2.0) - '@emotion/styled': - specifier: ^11.11.0 - version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0) - '@hookform/resolvers': - specifier: ^3.3.2 - version: 3.3.2(react-hook-form@7.48.2) - '@tanstack/react-table': - specifier: ^8.10.7 - version: 8.10.7(react-dom@18.2.0)(react@18.2.0) - axios: - specifier: ^1.6.1 - version: 1.6.1 - echarts: - specifier: ^5.4.3 - version: 5.4.3 - react: - specifier: ^18.2.0 - version: 18.2.0 - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) - react-hook-form: - specifier: ^7.48.2 - version: 7.48.2(react@18.2.0) - tw-elements-react: - specifier: 1.0.0-alpha2 - version: 1.0.0-alpha2(@types/node@20.9.0)(typescript@5.2.2) - uuid: - specifier: ^9.0.1 - version: 9.0.1 - wouter: - specifier: ^2.12.1 - version: 2.12.1(react@18.2.0) - zod: - specifier: ^3.22.4 - version: 3.22.4 - -devDependencies: - '@tailwindcss/typography': - specifier: ^0.5.10 - version: 0.5.10(tailwindcss@3.3.5) - '@types/node': - specifier: ^20.9.0 - version: 20.9.0 - '@types/react': - specifier: ^18.2.37 - version: 18.2.37 - '@types/react-dom': - specifier: ^18.2.15 - version: 18.2.15 - '@types/uuid': - specifier: ^9.0.7 - version: 9.0.7 - '@typescript-eslint/eslint-plugin': - specifier: ^6.10.0 - version: 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2) - '@typescript-eslint/parser': - specifier: ^6.10.0 - version: 6.10.0(eslint@8.53.0)(typescript@5.2.2) - '@vitejs/plugin-react': - specifier: ^4.1.1 - version: 4.1.1(vite@4.5.0) - autoprefixer: - specifier: ^10.4.16 - version: 10.4.16(postcss@8.4.31) - eslint: - specifier: ^8.53.0 - version: 8.53.0 - eslint-config-prettier: - specifier: ^9.0.0 - version: 9.0.0(eslint@8.53.0) - eslint-plugin-prettier: - specifier: ^5.0.1 - version: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.53.0)(prettier@3.1.0) - eslint-plugin-react-hooks: - specifier: ^4.6.0 - version: 4.6.0(eslint@8.53.0) - eslint-plugin-react-refresh: - specifier: ^0.4.4 - version: 0.4.4(eslint@8.53.0) - postcss: - specifier: ^8.4.31 - version: 8.4.31 - postcss-simple-vars: - specifier: ^7.0.1 - version: 7.0.1(postcss@8.4.31) - prettier: - specifier: ^3.1.0 - version: 3.1.0 - tailwindcss: - specifier: ^3.3.5 - version: 3.3.5 - typescript: - specifier: ^5.2.2 - version: 5.2.2 - vite: - specifier: ^4.5.0 - version: 4.5.0(@types/node@20.9.0) - -packages: - - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@alloc/quick-lru@5.2.0: - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - dev: true - - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - dev: true - - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.20 - chalk: 2.4.2 - - /@babel/compat-data@7.23.3: - resolution: {integrity: sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/core@7.23.3: - resolution: {integrity: sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.3 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) - '@babel/helpers': 7.23.2 - '@babel/parser': 7.23.3 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.3 - '@babel/types': 7.23.3 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/generator@7.23.3: - resolution: {integrity: sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.3 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - jsesc: 2.5.2 - dev: true - - /@babel/helper-compilation-targets@7.22.15: - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.23.3 - '@babel/helper-validator-option': 7.22.15 - browserslist: 4.22.1 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.3 - dev: true - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.3 - dev: true - - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.3 - - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.3 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.3 - dev: true - - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.3 - dev: true - - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} - - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - - /@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helpers@7.23.2: - resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.3 - '@babel/types': 7.23.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/highlight@7.22.20: - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - - /@babel/parser@7.23.3: - resolution: {integrity: sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.23.3 - dev: true - - /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.3 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.3 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/runtime@7.23.2: - resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.0 - dev: false - - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.23.3 - '@babel/types': 7.23.3 - dev: true - - /@babel/traverse@7.23.3: - resolution: {integrity: sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.3 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.3 - '@babel/types': 7.23.3 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/types@7.23.3: - resolution: {integrity: sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: false - - /@emotion/babel-plugin@11.11.0: - resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} - dependencies: - '@babel/helper-module-imports': 7.22.15 - '@babel/runtime': 7.23.2 - '@emotion/hash': 0.9.1 - '@emotion/memoize': 0.8.1 - '@emotion/serialize': 1.1.2 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.9.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.2.0 - dev: false - - /@emotion/cache@11.11.0: - resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} - dependencies: - '@emotion/memoize': 0.8.1 - '@emotion/sheet': 1.2.2 - '@emotion/utils': 1.2.1 - '@emotion/weak-memoize': 0.3.1 - stylis: 4.2.0 - dev: false - - /@emotion/hash@0.9.1: - resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} - dev: false - - /@emotion/is-prop-valid@1.2.1: - resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==} - dependencies: - '@emotion/memoize': 0.8.1 - dev: false - - /@emotion/memoize@0.8.1: - resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} - dev: false - - /@emotion/react@11.11.1(@types/react@18.2.37)(react@18.2.0): - resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} - peerDependencies: - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.2 - '@emotion/babel-plugin': 11.11.0 - '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.1.2 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) - '@emotion/utils': 1.2.1 - '@emotion/weak-memoize': 0.3.1 - '@types/react': 18.2.37 - hoist-non-react-statics: 3.3.2 - react: 18.2.0 - dev: false - - /@emotion/serialize@1.1.2: - resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==} - dependencies: - '@emotion/hash': 0.9.1 - '@emotion/memoize': 0.8.1 - '@emotion/unitless': 0.8.1 - '@emotion/utils': 1.2.1 - csstype: 3.1.2 - dev: false - - /@emotion/sheet@1.2.2: - resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} - dev: false - - /@emotion/styled@11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0): - resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} - peerDependencies: - '@emotion/react': ^11.0.0-rc.0 - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.2 - '@emotion/babel-plugin': 11.11.0 - '@emotion/is-prop-valid': 1.2.1 - '@emotion/react': 11.11.1(@types/react@18.2.37)(react@18.2.0) - '@emotion/serialize': 1.1.2 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) - '@emotion/utils': 1.2.1 - '@types/react': 18.2.37 - react: 18.2.0 - dev: false - - /@emotion/unitless@0.8.1: - resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} - dev: false - - /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): - resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} - peerDependencies: - react: '>=16.8.0' - dependencies: - react: 18.2.0 - dev: false - - /@emotion/utils@1.2.1: - resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} - dev: false - - /@emotion/weak-memoize@0.3.1: - resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} - dev: false - - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@eslint-community/eslint-utils@4.4.0(eslint@8.53.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.53.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - - /@eslint/eslintrc@2.1.3: - resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.23.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@eslint/js@8.53.0: - resolution: {integrity: sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@hookform/resolvers@3.3.2(react-hook-form@7.48.2): - resolution: {integrity: sha512-Tw+GGPnBp+5DOsSg4ek3LCPgkBOuOgS5DsDV7qsWNH9LZc433kgsWICjlsh2J9p04H2K66hsXPPb9qn9ILdUtA==} - peerDependencies: - react-hook-form: ^7.0.0 - dependencies: - react-hook-form: 7.48.2(react@18.2.0) - dev: false - - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true - - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - dev: true - - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - dev: true - - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: false - - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true - - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - dev: true - - /@pkgr/utils@2.4.2: - resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dependencies: - cross-spawn: 7.0.3 - fast-glob: 3.3.2 - is-glob: 4.0.3 - open: 9.1.0 - picocolors: 1.0.0 - tslib: 2.6.2 - dev: true - - /@popperjs/core@2.11.8: - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - dev: false - - /@remix-run/router@1.11.0: - resolution: {integrity: sha512-BHdhcWgeiudl91HvVa2wxqZjSHbheSgIiDvxrF1VjFzBzpTtuDPkOdOi3Iqvc08kXtFkLjhbS+ML9aM8mJS+wQ==} - engines: {node: '>=14.0.0'} - dev: false - - /@tailwindcss/typography@0.5.10(tailwindcss@3.3.5): - resolution: {integrity: sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' - dependencies: - lodash.castarray: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - postcss-selector-parser: 6.0.10 - tailwindcss: 3.3.5 - dev: true - - /@tanstack/react-table@8.10.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-bXhjA7xsTcsW8JPTTYlUg/FuBpn8MNjiEPhkNhIGCUR6iRQM2+WEco4OBpvDeVcR9SE+bmWLzdfiY7bCbCSVuA==} - engines: {node: '>=12'} - peerDependencies: - react: '>=16' - react-dom: '>=16' - dependencies: - '@tanstack/table-core': 8.10.7 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@tanstack/table-core@8.10.7: - resolution: {integrity: sha512-KQk5OMg5OH6rmbHZxuNROvdI+hKDIUxANaHlV+dPlNN7ED3qYQ/WkpY2qlXww1SIdeMlkIhpN/2L00rof0fXFw==} - engines: {node: '>=12'} - dev: false - - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: false - - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: false - - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: false - - /@tsconfig/node16@1.0.4: - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: false - - /@types/babel__core@7.20.4: - resolution: {integrity: sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==} - dependencies: - '@babel/parser': 7.23.3 - '@babel/types': 7.23.3 - '@types/babel__generator': 7.6.7 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.4 - dev: true - - /@types/babel__generator@7.6.7: - resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} - dependencies: - '@babel/types': 7.23.3 - dev: true - - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - dependencies: - '@babel/parser': 7.23.3 - '@babel/types': 7.23.3 - dev: true - - /@types/babel__traverse@7.20.4: - resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} - dependencies: - '@babel/types': 7.23.3 - dev: true - - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true - - /@types/node@20.9.0: - resolution: {integrity: sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==} - dependencies: - undici-types: 5.26.5 - - /@types/parse-json@4.0.2: - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - dev: false - - /@types/prop-types@15.7.10: - resolution: {integrity: sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==} - - /@types/react-dom@18.2.15: - resolution: {integrity: sha512-HWMdW+7r7MR5+PZqJF6YFNSCtjz1T0dsvo/f1BV6HkV+6erD/nA7wd9NM00KVG83zf2nJ7uATPO9ttdIPvi3gg==} - dependencies: - '@types/react': 18.2.37 - dev: true - - /@types/react@18.2.37: - resolution: {integrity: sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==} - dependencies: - '@types/prop-types': 15.7.10 - '@types/scheduler': 0.16.6 - csstype: 3.1.2 - - /@types/scheduler@0.16.6: - resolution: {integrity: sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA==} - - /@types/semver@7.5.5: - resolution: {integrity: sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==} - dev: true - - /@types/uuid@9.0.7: - resolution: {integrity: sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==} - dev: true - - /@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2): - resolution: {integrity: sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.10.0(eslint@8.53.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.10.0 - '@typescript-eslint/type-utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.10.0 - debug: 4.3.4 - eslint: 8.53.0 - graphemer: 1.4.0 - ignore: 5.2.4 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@6.10.0(eslint@8.53.0)(typescript@5.2.2): - resolution: {integrity: sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 6.10.0 - '@typescript-eslint/types': 6.10.0 - '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.10.0 - debug: 4.3.4 - eslint: 8.53.0 - typescript: 5.2.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/scope-manager@6.10.0: - resolution: {integrity: sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.10.0 - '@typescript-eslint/visitor-keys': 6.10.0 - dev: true - - /@typescript-eslint/type-utils@6.10.0(eslint@8.53.0)(typescript@5.2.2): - resolution: {integrity: sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2) - debug: 4.3.4 - eslint: 8.53.0 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/types@6.10.0: - resolution: {integrity: sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true - - /@typescript-eslint/typescript-estree@6.10.0(typescript@5.2.2): - resolution: {integrity: sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 6.10.0 - '@typescript-eslint/visitor-keys': 6.10.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@6.10.0(eslint@8.53.0)(typescript@5.2.2): - resolution: {integrity: sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.5 - '@typescript-eslint/scope-manager': 6.10.0 - '@typescript-eslint/types': 6.10.0 - '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.2.2) - eslint: 8.53.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/visitor-keys@6.10.0: - resolution: {integrity: sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.10.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - - /@vitejs/plugin-react@4.1.1(vite@4.5.0): - resolution: {integrity: sha512-Jie2HERK+uh27e+ORXXwEP5h0Y2lS9T2PRGbfebiHGlwzDO0dEnd2aNtOR/qjBlPb1YgxwAONeblL1xqLikLag==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 - dependencies: - '@babel/core': 7.23.3 - '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.3) - '@types/babel__core': 7.20.4 - react-refresh: 0.14.0 - vite: 4.5.0(@types/node@20.9.0) - transitivePeerDependencies: - - supports-color - dev: true - - /acorn-jsx@5.3.2(acorn@8.11.2): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.2 - dev: true - - /acorn-walk@8.3.0: - resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} - engines: {node: '>=0.4.0'} - dev: false - - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} - engines: {node: '>=0.4.0'} - hasBin: true - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: false - - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true - - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false - - /autoprefixer@10.4.16(postcss@8.4.31): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.22.1 - caniuse-lite: 1.0.30001561 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /axios@1.6.1: - resolution: {integrity: sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==} - dependencies: - follow-redirects: 1.15.3 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: false - - /babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} - dependencies: - '@babel/runtime': 7.23.2 - cosmiconfig: 7.1.0 - resolve: 1.22.8 - dev: false - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /big-integer@1.6.51: - resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} - engines: {node: '>=0.6'} - dev: true - - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true - - /bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} - dependencies: - big-integer: 1.6.51 - dev: true - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - - /browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001561 - electron-to-chromium: 1.4.581 - node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.22.1) - dev: true - - /bundle-name@3.0.0: - resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} - engines: {node: '>=12'} - dependencies: - run-applescript: 5.0.0 - dev: true - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: true - - /caniuse-lite@1.0.30001561: - resolution: {integrity: sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==} - dev: true - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /chart.js@3.9.1: - resolution: {integrity: sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==} - dev: false - - /chartjs-plugin-datalabels@2.2.0(chart.js@3.9.1): - resolution: {integrity: sha512-14ZU30lH7n89oq+A4bWaJPnAG8a7ZTk7dKf48YAzMvJjQtjrgg5Dpk9f+LbjCF6bpx3RAGTeL13IXpKQYyRvlw==} - peerDependencies: - chart.js: '>=3.0.0' - dependencies: - chart.js: 3.9.1 - dev: false - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: false - - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: true - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: false - - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true - - /cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: false - - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: false - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: false - - /default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 - dev: true - - /default-browser@4.0.0: - resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} - engines: {node: '>=14.16'} - dependencies: - bundle-name: 3.0.0 - default-browser-id: 3.0.0 - execa: 7.2.0 - titleize: 3.0.0 - dev: true - - /define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - dev: true - - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false - - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true - - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: false - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true - - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /echarts@5.4.3: - resolution: {integrity: sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==} - dependencies: - tslib: 2.3.0 - zrender: 5.4.4 - dev: false - - /electron-to-chromium@1.4.581: - resolution: {integrity: sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw==} - dev: true - - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - dev: false - - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - /eslint-config-prettier@9.0.0(eslint@8.53.0): - resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.53.0 - dev: true - - /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0)(eslint@8.53.0)(prettier@3.1.0): - resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '*' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - dependencies: - eslint: 8.53.0 - eslint-config-prettier: 9.0.0(eslint@8.53.0) - prettier: 3.1.0 - prettier-linter-helpers: 1.0.0 - synckit: 0.8.5 - dev: true - - /eslint-plugin-react-hooks@4.6.0(eslint@8.53.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.53.0 - dev: true - - /eslint-plugin-react-refresh@0.4.4(eslint@8.53.0): - resolution: {integrity: sha512-eD83+65e8YPVg6603Om2iCIwcQJf/y7++MWm4tACtEswFLYMwxwVWAfwN+e19f5Ad/FOyyNg9Dfi5lXhH3Y3rA==} - peerDependencies: - eslint: '>=7' - dependencies: - eslint: 8.53.0 - dev: true - - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /eslint@8.53.0: - resolution: {integrity: sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.3 - '@eslint/js': 8.53.0 - '@humanwhocodes/config-array': 0.11.13 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.23.0 - graphemer: 1.4.0 - ignore: 5.2.4 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) - eslint-visitor-keys: 3.4.3 - dev: true - - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: true - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: true - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true - - /execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - dev: true - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - - /fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - dev: true - - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - 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.5 - dev: true - - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true - - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true - - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - dependencies: - reusify: 1.0.4 - dev: true - - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.2.0 - dev: true - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - - /find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - dev: false - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.9 - keyv: 4.5.4 - rimraf: 3.0.2 - dev: true - - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true - - /follow-redirects@1.15.3: - resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false - - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true - - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true - - /globals@13.23.0: - resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true - - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true - - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 - - /hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - dependencies: - react-is: 16.13.1 - dev: false - - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true - - /human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - dev: true - - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - dev: true - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: false - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: true - - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - dependencies: - hasown: 2.0.0 - - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true - - /is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - dependencies: - is-docker: 3.0.0 - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true - - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true - - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: true - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true - - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - dev: true - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true - - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: false - - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true - - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true - - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true - - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - dependencies: - json-buffer: 3.0.1 - dev: true - - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - dev: true - - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true - - /lodash.castarray@4.4.0: - resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} - dev: true - - /lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: true - - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true - - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: false - - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - dependencies: - yallist: 3.1.1 - dev: true - - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: true - - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: false - - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true - - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true - - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - dev: true - - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false - - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true - - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - dev: true - - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true - - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: true - - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: true - - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - path-key: 4.0.0 - dev: true - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true - - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: true - - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - dependencies: - mimic-fn: 4.0.0 - dev: true - - /open@9.1.0: - resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} - engines: {node: '>=14.16'} - dependencies: - default-browser: 4.0.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 2.2.0 - dev: true - - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true - - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.22.13 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - dev: false - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true - - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: true - - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true - - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true - - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true - - /postcss-import@15.1.0(postcss@8.4.31): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - dev: true - - /postcss-js@4.0.1(postcss@8.4.31): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.31 - dev: true - - /postcss-load-config@4.0.1(postcss@8.4.31): - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 2.1.0 - postcss: 8.4.31 - yaml: 2.3.4 - dev: true - - /postcss-nested@6.0.1(postcss@8.4.31): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.0.13 - dev: true - - /postcss-selector-parser@6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - dev: true - - /postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - dev: true - - /postcss-simple-vars@7.0.1(postcss@8.4.31): - resolution: {integrity: sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A==} - engines: {node: '>=14.0'} - peerDependencies: - postcss: ^8.2.1 - dependencies: - postcss: 8.4.31 - dev: true - - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true - - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true - - /prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - dependencies: - fast-diff: 1.3.0 - dev: true - - /prettier@3.1.0: - resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} - engines: {node: '>=14'} - hasBin: true - dev: true - - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false - - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 - dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 - dev: false - - /react-fast-compare@3.2.2: - resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} - dev: false - - /react-hook-form@7.48.2(react@18.2.0): - resolution: {integrity: sha512-H0T2InFQb1hX7qKtDIZmvpU1Xfn/bdahWBN1fH19gSe4bBEqTfmlr7H3XWTaVtiK4/tpPaI1F3355GPMZYge+A==} - engines: {node: '>=12.22.0'} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 - dependencies: - react: 18.2.0 - dev: false - - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: false - - /react-popper@2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==} - peerDependencies: - '@popperjs/core': ^2.0.0 - react: ^16.8.0 || ^17 || ^18 - react-dom: ^16.8.0 || ^17 || ^18 - dependencies: - '@popperjs/core': 2.11.8 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-fast-compare: 3.2.2 - warning: 4.0.3 - dev: false - - /react-refresh@0.14.0: - resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} - engines: {node: '>=0.10.0'} - dev: true - - /react-router-dom@6.18.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Ubrue4+Ercc/BoDkFQfc6og5zRQ4A8YxSO3Knsne+eRbZ+IepAsK249XBH/XaFuOYOYr3L3r13CXTLvYt5JDjw==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' - dependencies: - '@remix-run/router': 1.11.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-router: 6.18.0(react@18.2.0) - dev: false - - /react-router@6.18.0(react@18.2.0): - resolution: {integrity: sha512-vk2y7Dsy8wI02eRRaRmOs9g2o+aE72YCx5q9VasT1N9v+lrdB79tIqrjMfByHiY5+6aYkH2rUa5X839nwWGPDg==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - dependencies: - '@remix-run/router': 1.11.0 - react: 18.2.0 - dev: false - - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - dev: false - - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - dependencies: - pify: 2.3.0 - dev: true - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true - - /regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} - dev: false - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true - - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /run-applescript@5.0.0: - resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} - engines: {node: '>=12'} - dependencies: - execa: 5.1.1 - dev: true - - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - dev: true - - /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - dependencies: - loose-envify: 1.4.0 - dev: false - - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true - - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: true - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true - - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true - - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true - - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true - - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - dev: false - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: true - - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true - - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: true - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true - - /stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - dev: false - - /sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - hasBin: true - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - dev: true - - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - /synckit@0.8.5: - resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} - engines: {node: ^14.18.0 || >=16.0.0} - dependencies: - '@pkgr/utils': 2.4.2 - tslib: 2.6.2 - dev: true - - /tailwindcss@3.3.5: - resolution: {integrity: sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==} - engines: {node: '>=14.0.0'} - hasBin: true - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.5.3 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.2 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.0 - lilconfig: 2.1.0 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.31 - postcss-import: 15.1.0(postcss@8.4.31) - postcss-js: 4.0.1(postcss@8.4.31) - postcss-load-config: 4.0.1(postcss@8.4.31) - postcss-nested: 6.0.1(postcss@8.4.31) - postcss-selector-parser: 6.0.13 - resolve: 1.22.8 - sucrase: 3.34.0 - transitivePeerDependencies: - - ts-node - dev: true - - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true - - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - dependencies: - thenify: 3.3.1 - dev: true - - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - dependencies: - any-promise: 1.3.0 - dev: true - - /titleize@3.0.0: - resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} - engines: {node: '>=12'} - dev: true - - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - - /ts-api-utils@1.0.3(typescript@5.2.2): - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' - dependencies: - typescript: 5.2.2 - dev: true - - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true - - /ts-node@10.9.1(@types/node@20.9.0)(typescript@5.2.2): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.9.0 - acorn: 8.11.2 - acorn-walk: 8.3.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.2.2 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: false - - /tslib@2.3.0: - resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} - dev: false - - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true - - /tw-elements-react@1.0.0-alpha2(@types/node@20.9.0)(typescript@5.2.2): - resolution: {integrity: sha512-RPsc4HQXTEujQsqusl5uCBjTC+4JmYUq9FTz/tYSSGrRl1SfoPo2vxy+YLa/II/6J8cQB+iuraNK3SisJBmGmQ==} - dependencies: - '@popperjs/core': 2.11.8 - chart.js: 3.9.1 - chartjs-plugin-datalabels: 2.2.0(chart.js@3.9.1) - deepmerge: 4.3.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-popper: 2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react@18.2.0) - react-router-dom: 6.18.0(react-dom@18.2.0)(react@18.2.0) - ts-node: 10.9.1(@types/node@20.9.0)(typescript@5.2.2) - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - typescript - dev: false - - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - dev: true - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} - engines: {node: '>=14.17'} - hasBin: true - - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - dev: true - - /update-browserslist-db@1.0.13(browserslist@4.22.1): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.22.1 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true - - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - dev: true - - /use-sync-external-store@1.2.0(react@18.2.0): - resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.2.0 - dev: false - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true - - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - dev: false - - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: false - - /vite@4.5.0(@types/node@20.9.0): - resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 20.9.0 - esbuild: 0.18.20 - postcss: 8.4.31 - rollup: 3.29.4 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /warning@4.0.3: - resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} - dependencies: - loose-envify: 1.4.0 - dev: false - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /wouter@2.12.1(react@18.2.0): - resolution: {integrity: sha512-G7a6JMSLSNcu6o8gdOfIzqxuo8Qx1qs+9rpVnlurH69angsSFPZP5gESNuVNeJct/MGpQg191pDo4HUjTx7IIQ==} - peerDependencies: - react: '>=16.8.0' - dependencies: - react: 18.2.0 - use-sync-external-store: 1.2.0(react@18.2.0) - dev: false - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true - - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true - - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: false - - /yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} - dev: true - - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: false - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true - - /zod@3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} - dev: false - - /zrender@5.4.4: - resolution: {integrity: sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==} - dependencies: - tslib: 2.3.0 - dev: false diff --git a/postcss.config.js b/postcss.config.js index d7c5e2e..2e112a4 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,8 +1,10 @@ -export default { - plugins: { - "postcss-import": {}, - "tailwindcss/nesting": {}, - tailwindcss: {}, - autoprefixer: {}, - }, +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: [ + require('autoprefixer'), + require('tailwindcss'), + require('postcss-import'), + require('tailwindcss/nesting'), + ], }; +module.exports = config \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index e713a8f..99d2f39 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,36 +1,29 @@ -import ThemeButton from "./components/ThemeButton"; -import { main } from "./configure"; -import { Router } from "wouter"; -import SwitchRoutesGenerator from "./routes/SwitchRoutesGenerator"; -import GenerateNavigationButtonsDebug from "./routes/GenerateNavigationButtonsDebug"; - +import { IconContext } from "react-icons/lib"; +import DevControlPanel from "./components/DevControlPanel"; +import FloatingMenu from "./components/FloatingMenu"; +import { + floatingLanguageMenuStructure, + floatingMenuStructure, +} from "./configure"; +import SwitchRouteGenerator from "./routes/SwitchRouteGenerator"; +import routesTree from "./routes/routes"; +// TODO: - [x] Rewrite new switch generating function based on custom routes object +// TODO: - [x] Make condition for base path in Router, for "/" in main.base_path don't add to Router +// TODO: - [ ] Rewrite DevControlPanel to use custom routes object function App() { return ( - // Router component with base path - -
-
- {/* Displaying program name and version */} -

- {main.program_name} v{main.program_version} -

Base path is: {main.basePath}

-

-
- {/* ThemeButton component */} - -
-
- {/* Separator */} -
-
- {/* GenerateNavigationButtonsDebug component */} - - {/* Paths in Route should be without base path (even without '/'). If want Route for base path than pass base path */} - {/* SwitchRoutesGenerator component */} - -
-
-
+
+ + + + + + +
); } diff --git a/src/components/DevControlPanel.tsx b/src/components/DevControlPanel.tsx new file mode 100644 index 0000000..12e3b69 --- /dev/null +++ b/src/components/DevControlPanel.tsx @@ -0,0 +1,93 @@ +import { useLocation } from "wouter"; +import { main } from "../configure"; +import { DevControlPanelProps } from "../types/devControlPanelTypes"; +import { RoutingTree } from "../types/routesTypes"; +import inDebug from "../utils/inDebug"; +import ThemeButton from "./ThemeButton"; + +/** + * Development Control Panel Component + * + * This component renders a development control panel for navigation and debugging. + * It includes a dynamic list of routes and a theme toggle button. + * + * @param {DevControlPanelProps} props - Properties passed to the DevControlPanel component. + * @returns {JSX.Element} A React component that renders the development control panel. + */ +const DevControlPanel = ({ routesTree }: DevControlPanelProps) => { + const [, setLocation] = useLocation(); + + // Function to update the current location, with debug logging + const _setLocation = (targetLocation: string) => { + inDebug(() => console.log("DevControlPanel_setLocation", targetLocation)); + setLocation(targetLocation); + }; + + // Function to generate a list of buttons for navigation based on the routing tree + const routesCrawler = ( + routesTree: RoutingTree, + parentPath?: string, + ): JSX.Element[] => { + return routesTree.map((route): JSX.Element => { + // Constructing path for the route button + const _path = ( + parentPath ? "/" + parentPath + "/" + route.path : "/" + route.path + ).replace(/\/\//g, "/"); + + // Debug logging for route information + inDebug(() => + console.log( + "%croutesCrawler_routes %s %s", + "color: lightblue", + route.name, + _path, + ), + ); + + // Generating nested routes or single route buttons + if (route.nest) { + return ( +
+ + {route.name} + +
+ {routesCrawler(route.nest, _path)} +
+
+ ); + } else { + return ( + + ); + } + }); + }; + + // Render the development control panel with navigation buttons and theme toggle + return ( +
+
+ {/* Displaying the program name and version */} +
+ {main.program_name} v{main.program_version} +

Base path is: {main.base_path}

+
+
+ {/* Embedding the ThemeButton component for theme toggling */} + +
+
+ {/* Rendering the dynamically generated route navigation buttons */} +
{routesCrawler(routesTree)}
+
+ ); +}; + +export default DevControlPanel; diff --git a/src/components/FloatingMenu.tsx b/src/components/FloatingMenu.tsx new file mode 100644 index 0000000..b459bb9 --- /dev/null +++ b/src/components/FloatingMenu.tsx @@ -0,0 +1,73 @@ +import { Path, useLocation } from "wouter"; +import { navigate } from "wouter/use-browser-location"; +import { FloatingMenuProps } from "../types/floatingMenuTypes"; +import { capitalizeFirstLetter } from "../utils/StringTransformationUtils"; + +// -----VARIABLES----- +// Exported variables for shared location state management +export let location: Path; +export let setLocation: typeof navigate; + +// -----COMPONENT----- +/** + * FloatingMenu Component + * + * This component renders a customizable floating menu with interactive elements. + * It uses the 'wouter' library for location management and provides a dynamic way + * to render menu items based on the 'menuStructure' prop passed to it. + * + * @param {FloatingMenuProps} props - The properties passed to the FloatingMenu component. + * @returns {JSX.Element} A React component that renders a floating menu. + */ +const FloatingMenu = (props: FloatingMenuProps) => { + // Setting up location hooks for navigation + [location, setLocation] = useLocation(); + + // Function to generate interactive buttons based on provided menu structure + const generateButtons = () => { + return props.menuStructure.map((item, index) => { + // Checking if the menu item includes label, icon, and action for button generation + if ("label" in item && "icon" in item && "action" in item) { + return ( +
+
  • + {item.icon} +
  • +
    + ); + } else { + // Rendering custom JSX elements when provided + return ( +
    + {item.element} +
    + ); + } + }); + }; + + // Render the floating menu with dynamically generated buttons + return ( +
      + {generateButtons()} +
    + ); +}; + +export default FloatingMenu; diff --git a/src/components/ThemeButton.tsx b/src/components/ThemeButton.tsx index 2f3dac0..2289c9c 100644 --- a/src/components/ThemeButton.tsx +++ b/src/components/ThemeButton.tsx @@ -1,5 +1,5 @@ import useTheme from "../hooks/useTheme"; -import inDev from "../utils/inDebug"; +import inDebug from "../utils/inDebug"; const ThemeButton = () => { const [isDark, toggleTheme] = useTheme(); @@ -8,7 +8,7 @@ const ThemeButton = () => { inDev(() => console.log("Theme changed"))} + onChange={() => inDebug(() => console.log("Theme changed"))} onClick={toggleTheme} type="checkbox" /> diff --git a/src/configure.tsx b/src/configure.tsx index 83d92d8..846c144 100644 --- a/src/configure.tsx +++ b/src/configure.tsx @@ -1,19 +1,54 @@ +import { FiHome, FiLogIn } from "react-icons/fi"; +import { setLocation } from "./components/FloatingMenu"; +import ThemeButton from "./components/ThemeButton"; +import { HOME, LOGIN, THEME } from "./consts"; +import { MenuStructure } from "./types/floatingMenuTypes"; +/* INSTRUCTIONS: + * Here you can configure: + * - program version + * - program description + * - program authors + * - floating menu structure (icons, labels, actions) + */ // -------- ENVIRONMENT VARIABLES -------- export const viteEnv = import.meta.env; //Main configuration, static data, mostly used here export const main = { - program_name: `${viteEnv.VITE_APP_NAME}${ - viteEnv.MODE ? " [development]" : "" - }`, - program_version: "1.0.0", - basePath: viteEnv.VITE_BASE_PATH, -}; -//About page configuration -export const about = { - program_description: `This is a ${main.program_name} for .`, + api_url: viteEnv.VITE_API_URL || `setup in .env.${viteEnv.MODE}`, + base_path: viteEnv.VITE_BASE_PATH || "/", program_authors: [{ name: "Author Name", email: "email@example.com" }], + program_description: `It is a software application that helps organizations manage maintenance activities. With a ${viteEnv.VITE_APP_NAME}, companies can track preventative maintenance schedules, record equipment repairs, and monitor inventory levels. It also allows for easy reporting and analysis, providing valuable insights into maintenance operations. By automating these processes, a ${viteEnv.VITE_APP_NAME} can help reduce costs, improve efficiency, and ensure compliance with regulatory standards.`, + program_name: + `${viteEnv.VITE_APP_NAME}${viteEnv.MODE ? " [development]" : ""}` || + "setup in .env", + program_version: "1.0.0", }; // -------- FRONTEND CONFIGURATION -------- // sizes in pixels export const topbarSize = 64; export const sidebarSize = 256; +export const floatingMenuStructure: MenuStructure[] = [ + { + label: HOME, + icon: , + action: () => setLocation("/"), + }, + { + label: LOGIN, + icon: , + action: () => setLocation(`/${LOGIN}`), + }, + { label: THEME, element: }, +]; +export const floatingLanguageMenuStructure: MenuStructure[] = [ + { + label: "English", + icon:

    🇬🇧

    , + action: () => console.log("English"), + }, + { + label: "Polski", + icon:

    🇵🇱

    , + action: () => console.log("Polski"), + }, +]; diff --git a/src/consts.ts b/src/consts.ts index da384cc..2ab1074 100644 --- a/src/consts.ts +++ b/src/consts.ts @@ -1,2 +1,16 @@ +// ---- MAIN PAGE TITLES ---- export const ADMINISTRATION = "administration"; +export const HOME = "home"; +export const LOGIN = "login"; +export const PAGE_NOT_FOUND = "page_not_found"; export const SETTINGS = "settings"; +export const ABOUT = "about"; +export const CONTACT = "contact"; +// ---- SUB-PAGE TITLES ---- +// -- ADMINISTRATION -- +export const GROUPS = "groups"; +export const PERMISSIONS = "permissions"; +export const ROLES = "roles"; +export const USERS = "users"; +// -- BUTTONS -- +export const THEME = "theme"; diff --git a/src/hooks/useLocalStorage.ts b/src/hooks/useLocalStorage.ts index 8c323fc..629d1c3 100644 --- a/src/hooks/useLocalStorage.ts +++ b/src/hooks/useLocalStorage.ts @@ -1,9 +1,21 @@ import { useState } from "react"; /** - * Works like useState but stores the value in local storage - * @param key Create a key to store the value in local storage - * @param initialValue Assign an initial value to the key - * @returns [storedValue, setValue] Returns the stored value and a function to set the value + * Custom hook for persisting state in local storage. + * + * This hook works similarly to the standard `useState` hook but also stores the state in local storage, + * allowing the state to persist across browser sessions. The state is initialized from local storage + * if it exists; otherwise, it falls back to the provided initial value. + * + * @template T The type of the value to be stored. + * @param {string} key The key under which the value is stored in local storage. + * @param {T} initialValue The initial value to be used if there is no item in local storage with the given key. + * @returns {[T, (value: T | ((val: T) => T)) => void]} A tuple containing: + * - `storedValue`: the current value stored in local storage. + * - `setValue`: a function to set the value, which updates both the local state and local storage. + * + * @example + * const [name, setName] = useLocalStorage("name", "Initial Name"); + * // Use setName to update the name and it will be stored in local storage. */ const useLocalStorage = ( key: string, diff --git a/src/hooks/useTheme.ts b/src/hooks/useTheme.ts index 912dcc2..dceb815 100644 --- a/src/hooks/useTheme.ts +++ b/src/hooks/useTheme.ts @@ -1,19 +1,33 @@ import { useEffect } from "react"; import useLocalStorage from "./useLocalStorage"; - +import inDebug from "../utils/inDebug"; +/** + * Custom hook for managing theme state. + * + * This hook utilizes local storage to persist the theme state across sessions. It provides functionality + * to toggle between light and dark themes and automatically applies the selected theme to the document. + * + * @returns A tuple containing: + * - `isDark`: a boolean indicating whether the current theme is dark. + * - `toggleTheme`: a function to toggle the theme between light and dark. + * + * @example + * const [isDark, toggleTheme] = useTheme(); + * // Use isDark to determine the theme state and toggleTheme to change the theme. + */ const useTheme = (): [boolean, () => void] => { const [theme, setTheme] = useLocalStorage("theme", "light"); const isDark = theme === "dark"; const toggleTheme = () => { - console.log("toggleTheme called"); + inDebug(() => console.log("toggleTheme called")); const newTheme = theme === "light" ? "dark" : "light"; setTheme(newTheme); document.documentElement.dataset.theme = newTheme; }; useEffect(() => { - console.log("useEffect called"); + inDebug(() => console.log("useEffect called")); document.documentElement.dataset.theme = theme; }, [theme]); diff --git a/src/main.tsx b/src/main.tsx index df6f412..a4276ef 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,26 +1,46 @@ +import { Global, css } from "@emotion/react"; import React from "react"; import ReactDOM from "react-dom/client"; -import { setupAxiosInterceptors } from "./api/AxiosService"; -import { viteEnv } from "./configure"; import App from "./App"; -import inDev from "./utils/inDebug"; -import { Global, css } from "@emotion/react"; -import "/style.css"; -import { Provider } from "jotai"; +import { setupAxiosInterceptors } from "./api/AxiosService"; +import { main, viteEnv } from "./configure"; +import inDebug from "./utils/inDebug"; +import "/style.css"; // Global tailwind styles +import { Router } from "wouter"; setupAxiosInterceptors(); -inDev(() => console.log(viteEnv)); +inDebug(() => console.log(viteEnv)); +//! Important, defining base as '/' isn't equal to not defining it at all. That way is easier 😁 +const _App = () => { + if (main.base_path !== "/") { + return ( + + + + ); + } else { + return ( + + + + ); + } +}; // Hook react to the HTML element with id="root" ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( - - - + <_App /> , ); diff --git a/src/pages/AdministrationPage.tsx b/src/pages/AdministrationPage.tsx deleted file mode 100644 index 6d22b66..0000000 --- a/src/pages/AdministrationPage.tsx +++ /dev/null @@ -1,5 +0,0 @@ -const AdministrationPage = () => { - return
    🚀AdministrationPage🚀
    ; -}; - -export default AdministrationPage; diff --git a/src/pages/HomePage.tsx b/src/pages/HomePage.tsx index a82f3aa..b226dac 100644 --- a/src/pages/HomePage.tsx +++ b/src/pages/HomePage.tsx @@ -1,8 +1,7 @@ -import { atom, useAtom } from "jotai"; -const counterAtom = atom(0); +import { useState } from "react"; const HomePage = () => { - const [counter, setCounter] = useAtom(counterAtom); + const [counter, setCounter] = useState(0); return (
    diff --git a/src/pages/InboxPage.tsx b/src/pages/InboxPage.tsx deleted file mode 100644 index 29544af..0000000 --- a/src/pages/InboxPage.tsx +++ /dev/null @@ -1,5 +0,0 @@ -const InboxPage = () => { - return
    InboxPage
    ; -}; - -export default InboxPage; diff --git a/src/pages/LoginPage.tsx b/src/pages/LoginPage.tsx new file mode 100644 index 0000000..86a4cda --- /dev/null +++ b/src/pages/LoginPage.tsx @@ -0,0 +1,55 @@ +import { main } from "../configure"; + +const LoginPage = () => { + return ( + // hero daisyui login page +
    +
    +
    +

    {main.program_name}

    +

    {main.program_description}

    + +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    + ); +}; + +export default LoginPage; diff --git a/src/pages/SettingsAdvancedPage.tsx b/src/pages/SettingsAdvancedPage.tsx deleted file mode 100644 index 576bb8d..0000000 --- a/src/pages/SettingsAdvancedPage.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { useParams } from "wouter"; - -const SettingsAdvancedPage = () => { - const params = useParams(); - return
    SettingsAdvancedPage {params.id}
    ; -}; - -export default SettingsAdvancedPage; diff --git a/src/routes/GenerateNavigationButtonsDebug.tsx b/src/routes/GenerateNavigationButtonsDebug.tsx deleted file mode 100644 index b878a82..0000000 --- a/src/routes/GenerateNavigationButtonsDebug.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from "react"; -import { v4 } from "uuid"; -import { Link } from "wouter"; -import * as R from "./routes"; -import { Routes } from "./routes"; -import inDev from "../utils/inDebug"; - -const routesCrawler = ( - parentPath?: string, - routesPack: Routes[] = R.routesRoot, -): JSX.Element[] => { - // Roll through routes and generate Route for each - return routesPack.map((route): JSX.Element => { - // Debug log shows generated routes - inDev(() => - console.log( - "routesCrawler buttons", - parentPath ? parentPath + route.path : route.path, - ), - ); - return ( -
    - {/* Check does route have children and perform routing generation for children */} - - {/* Render icon */} - {route.icon && React.createElement(route.icon, { className: "h-6 w-6" })} - {/* Makes first letter uppercase */} - {route.name[0].toUpperCase() + route.name.slice(1)} - - {route.children - ? routesCrawler(parentPath ?? "" + route.path, route.children) - : null} -
    - ); - }); -}; - -/** - * This component is used to generate buttons for debug navigation - */ -const GenerateNavigationButtonsDebug = () => { - return
    {routesCrawler()}
    ; -}; - -export default GenerateNavigationButtonsDebug; diff --git a/src/routes/ManuallyDefinedRoutesTest.tsx b/src/routes/ManuallyDefinedRoutesTest.tsx new file mode 100644 index 0000000..309085b --- /dev/null +++ b/src/routes/ManuallyDefinedRoutesTest.tsx @@ -0,0 +1,22 @@ +import { Switch, Route } from "wouter"; +import HomePage from "../pages/HomePage"; + +const ManuallyDefinedRoutesTest = () => { + return ( + + + + + <>User HP} /> + <>User: {username}} + /> + + + + + ); +}; + +export default ManuallyDefinedRoutesTest; diff --git a/src/routes/SwitchRouteGenerator.tsx b/src/routes/SwitchRouteGenerator.tsx new file mode 100644 index 0000000..f0d0321 --- /dev/null +++ b/src/routes/SwitchRouteGenerator.tsx @@ -0,0 +1,38 @@ +import { Route, Switch } from "wouter"; +import inDebug from "../utils/inDebug"; +import { RoutingTree } from "../types/routesTypes"; +import { SwitchRouteGeneratorProps } from "../types/switchRouteGeneratorTypes"; + +const routesCrawler = ( + routesTree: RoutingTree, + parentPath?: string, +): JSX.Element[] => { + return routesTree.map((route): JSX.Element => { + // ----- + if (route.path) { + const _path = ( + parentPath && parentPath !== "/" ? parentPath + route.path : route.path + ).replace("//", "/"); + // Debug log shows generated routes + inDebug(() => console.log("routesCrawler_routes", route.name, _path)); + // ----- + if (route.nest) { + return ( + + + {routesCrawler(route.nest, _path)} + + + ); + } else return ; + } else return ; + }); +}; + +/** + * This component is used to generate Switch with Routes for given routes object + */ +const SwitchRouteGenerator = ({ routesTree }: SwitchRouteGeneratorProps) => { + return {routesCrawler(routesTree)}; +}; +export default SwitchRouteGenerator; diff --git a/src/routes/SwitchRoutesGenerator.tsx b/src/routes/SwitchRoutesGenerator.tsx deleted file mode 100644 index 0225a66..0000000 --- a/src/routes/SwitchRoutesGenerator.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import React from "react"; -import { v4 } from "uuid"; -import { Route, Switch } from "wouter"; -import inDev from "../utils/inDebug"; -import * as R from "./routes"; -import { Routes } from "./routes"; - -const routesCrawler = ( - parentPath?: string, - routesPack: Routes[] = R.routesRoot, -): JSX.Element[] => { - // Roll through routes and generate Route for each - return routesPack.map((route): JSX.Element => { - // Debug log shows generated routes - inDev(() => - console.log( - "routesCrawler routes", - parentPath ? parentPath + route.path : route.path, - ), - ); - return route.children ? ( - - {routesCrawler(parentPath ?? "" + route.path, route.children)} - - - ) : ( - - ); - }); -}; - -/** - * This component is used to generate Switch with Routes for given routes object - */ -const SwitchRoutesGenerator = () => { - return ( - - {routesCrawler()} - <>404} /> - - ); -}; - -export default SwitchRoutesGenerator; diff --git a/src/routes/routes.tsx b/src/routes/routes.tsx index 530caa3..eddd630 100644 --- a/src/routes/routes.tsx +++ b/src/routes/routes.tsx @@ -1,90 +1,67 @@ // ----- IMPORT ICONS ----- +// Importing necessary icons from 'react-icons' library +import { IoMdLogIn, IoMdOptions } from "react-icons/io"; import { RiHome3Fill } from "react-icons/ri"; -import { IoMdOptions } from "react-icons/io"; -import { FaUsers } from "react-icons/fa"; + // ----- IMPORT PAGES ----- -import AdministrationPage from "../pages/AdministrationPage"; +// Importing page components for route configuration import HomePage from "../pages/HomePage"; -// ----- IMPORT CONSTS ----- -import { ADMINISTRATION, SETTINGS } from "../consts"; -import SettingsAdvancedPage from "../pages/SettingsAdvancedPage"; +import LoginPage from "../pages/LoginPage"; -// ----- TYPE DEFINITIONS ----- -export type Routes = { - name: string; - path: string; - component: () => JSX.Element; - icon?: () => JSX.Element; - children?: Routes[]; -}; -type RoutesObject = { - [key: string]: Routes[]; -}; +// ----- IMPORT CONSTANTS ----- +// Importing route-related constants for route naming +import { HOME, LOGIN, PAGE_NOT_FOUND, SETTINGS, USERS } from "../consts"; -// ----- ROUTES DEFINITIONS ----- -//! Don't leave trailor '/' in paths -//! Paths in Route should be without base path (even without '/'). If want Route for base path than pass base path -//* Wouter is basically join paths with each other, so if base path is "/" every sub path souldn't have "/" at the beginning +// ----- IMPORT TYPES AND UTILITIES ----- +// Importing types for route configuration and utility functions +import { RoutingTree } from "../types/routesTypes"; +import { capitalizeFirstLetter } from "../utils/StringTransformationUtils"; -// const routesSecondLevel = {}; - -const routesFirstLevel: RoutesObject = { - [ADMINISTRATION]: [ - { - name: "Users", - path: "/users", - component: () => <>UserPage, - icon: FaUsers, - }, - { - name: "Roles", - path: "/roles", - component: () => <>Roles, - }, - { - name: "Permissions", - path: "/permissions", - component: () => <>Permissions, - }, - ], - [SETTINGS]: [ - { - name: "General", - path: "/general", - component: () => <>General, - }, - { - name: "Appearance", - path: "/appearance", - component: () => <>Appearance, - }, - { - name: "Advanced", - path: "/:id", - component: SettingsAdvancedPage, - }, - ], -}; - -export const routesRoot: Routes[] = [ +// ----- ROUTES CONFIGURATION ----- +// Configuration of the application's route structure +// This includes both parent routes and nested routes within them +export const routesTree: RoutingTree = [ { - name: "Home", + name: capitalizeFirstLetter(HOME), path: "/", component: HomePage, icon: RiHome3Fill, }, { - name: ADMINISTRATION, - path: "administration", - component: AdministrationPage, - icon: IoMdOptions, - children: routesFirstLevel[ADMINISTRATION], + name: capitalizeFirstLetter(USERS), + path: "users", + nest: [ + { + name: "User", + path: "/", + component: () => <>User HP, + }, + { + name: "UserName", + path: ":username", + component: (username) => <>User: {username}, + }, + { + name: "UserNotFound", + component: () => <>User not found, + }, + ], }, { - name: SETTINGS, - path: "settings", + name: capitalizeFirstLetter(SETTINGS), + path: SETTINGS, component: () => <>Settings, icon: IoMdOptions, - children: routesFirstLevel[SETTINGS], + }, + { + name: capitalizeFirstLetter(LOGIN), + path: LOGIN, + component: LoginPage, + icon: IoMdLogIn, + }, + { + name: capitalizeFirstLetter(PAGE_NOT_FOUND), + component: () => <>💥404💥, }, ]; +export default routesTree; diff --git a/src/types/devControlPanelTypes.ts b/src/types/devControlPanelTypes.ts new file mode 100644 index 0000000..d1f532c --- /dev/null +++ b/src/types/devControlPanelTypes.ts @@ -0,0 +1,3 @@ +import { SwitchRouteGeneratorProps } from "./switchRouteGeneratorTypes"; + +export type DevControlPanelProps = SwitchRouteGeneratorProps; diff --git a/src/types/floatingMenuTypes.ts b/src/types/floatingMenuTypes.ts new file mode 100644 index 0000000..ee83b09 --- /dev/null +++ b/src/types/floatingMenuTypes.ts @@ -0,0 +1,15 @@ +interface FloatingMenuElement { + label: string; + icon: JSX.Element; + action: () => void; +} +interface FloatingMenuJSXElement { + label: string; + element: JSX.Element; +} +export interface FloatingMenuProps { + menuStructure: MenuStructure[]; + className?: string | undefined; + tooltipClassName?: string | undefined; +} +export type MenuStructure = FloatingMenuElement | FloatingMenuJSXElement; diff --git a/src/types/routesTypes.ts b/src/types/routesTypes.ts new file mode 100644 index 0000000..504d915 --- /dev/null +++ b/src/types/routesTypes.ts @@ -0,0 +1,28 @@ +import { ComponentType } from "react"; +import { RouteComponentProps } from "wouter"; + +interface RouteWithPath { + path: string; + nest?: RoutingTree; +} +interface RouteWithoutPath { + path?: never; + nest?: never; +} +interface RouteWithComponent { + nest?: never; + component: ComponentType> | undefined; +} +interface RouteWithoutComponent { + nest: RoutingTree; + component?: never; +} +interface RouteObjectBase { + name: string; + icon?: React.FC; +} +export type RouteObject = RouteObjectBase & + (RouteWithPath | RouteWithoutPath) & + (RouteWithComponent | RouteWithoutComponent); + +export type RoutingTree = RouteObject[]; diff --git a/src/types/switchRouteGeneratorTypes.ts b/src/types/switchRouteGeneratorTypes.ts new file mode 100644 index 0000000..47e95d8 --- /dev/null +++ b/src/types/switchRouteGeneratorTypes.ts @@ -0,0 +1,5 @@ +import { RoutingTree } from "./routesTypes"; + +export interface SwitchRouteGeneratorProps { + routesTree: RoutingTree; +} \ No newline at end of file diff --git a/src/utils/inDebug.ts b/src/utils/inDebug.ts index 064adb5..744805a 100644 --- a/src/utils/inDebug.ts +++ b/src/utils/inDebug.ts @@ -1,11 +1,11 @@ /** * Execute whatever you pass only in development (not production) */ -const inDev = (callback: () => T): T | null => { +const inDebug = (callback: () => T): T | null => { if (process.env.NODE_ENV === "development") { return callback(); } return null; }; -export default inDev; +export default inDebug; diff --git a/tailwind.config.js b/tailwind.config.js deleted file mode 100644 index 083f7b7..0000000 --- a/tailwind.config.js +++ /dev/null @@ -1,40 +0,0 @@ -export default { - content: ["./src/**/*.{js,ts,jsx,tsx}", "./index.html"], - // safelist is used to allow classes to not be purged by tailwind - safelist: ["alert-info", "alert-success", "alert-warning", "alert-error"], - theme: { - extend: { - spacing: { - 128: "32rem", - 144: "36rem", - }, - borderRadius: { - "4xl": "2rem", - }, - }, - }, - darkMode: "class", - plugins: [ - require("@tailwindcss/typography"), - require("@tailwindcss/forms"), - require("daisyui"), - ], - daisyui: { - themes: [ - { - light: { - primary: "#38bdf8", - secondary: "#10b981", - accent: "#f59e0b", - neutral: "#e5e7eb", - "base-100": "#f3f4f6", - info: "#67e8f9", - success: "#6ee7b7", - warning: "#fde047", - error: "#f87171", - }, - }, - "dark", - ], - }, -}; diff --git a/tailwind.config.ts b/tailwind.config.ts new file mode 100644 index 0000000..fec698a --- /dev/null +++ b/tailwind.config.ts @@ -0,0 +1,26 @@ +import forms from "@tailwindcss/forms"; +import typography from "@tailwindcss/typography"; +import daisyUI from "daisyui"; +import type { Config } from "tailwindcss"; +export default { + content: ["./src/**/*.{js,ts,jsx,tsx}", "./index.html"], + // safelist is used to allow classes to not be purged by tailwind; + // I made this to set this classes dyanmically in the code, somehow without this tailwind purges them; + safelist: ["alert-info", "alert-success", "alert-warning", "alert-error"], + theme: { + extend: { + spacing: { + 128: "32rem", + 144: "36rem", + }, + borderRadius: { + "4xl": "2rem", + }, + }, + }, + darkMode: "media", + plugins: [forms, daisyUI, typography], + daisyui: { + themes: ["light", "dark"], + }, +} satisfies Config; diff --git a/tsconfig.json b/tsconfig.json index 35bdc87..14d2753 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,41 +1,41 @@ { "compilerOptions": { + // Specifying ECMAScript targets for the compiler "target": "ESNext", "module": "ESNext", - "moduleResolution": "bundler", "lib": [ "DOM", "DOM.Iterable", "ESNext" ], - "allowJs": true, - "skipLibCheck": true, + // Enabling options for better interoperability and module handling + "moduleResolution": "bundler", "esModuleInterop": true, "allowSyntheticDefaultImports": true, - "allowImportingTsExtensions": true, - "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, - "isolatedModules": true, - "noErrorTruncation": true, - /* "react-jsx" and "react-jsxdev": These are new options available from TypeScript 4.1 onwards. "react-jsx" transforms JSX into calls to a function that will be imported from react/jsx-runtime. "react-jsxdev" does the same, but for development builds. These options are useful if you're using React 17 or later, which introduced a new JSX Transform. - Remember that to use these options, you also need to set the module compiler option to esnext or commonjs, because the output will contain import statements.*/ - "jsx": "react-jsx", - /* Vite handle emiting */ - "noEmit": true, - "useDefineForClassFields": true, - /* - "strict": true in TypeScript's tsconfig.json is an overarching setting that turns on a number of strict type-checking options. Some of these could overlap with ESLint rules related to good practices in JavaScript and TypeScript coding. However, since ESLint and TypeScript serve different purposes (ESLint for style and syntax, TypeScript for type checking), there usually isn't a direct conflict. - "noUnusedLocals": true and "noUnusedParameters": true in TypeScript could overlap with ESLint's no-unused-vars rule, which flags declared variables or arguments that are not used anywhere in the code. - "noFallthroughCasesInSwitch": true could overlap with ESLint's no-fallthrough rule, which disallows fallthrough behavior in switch statements, a common error in JavaScript. */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, + // Configuring behavior for JSX, specific to React + "jsx": "react-jsx", // Transform JSX for React 17+ JSX Transform + // Strengthening type-checking and ensuring consistency + "strict": true, // Enable all strict type-checking options + "noUnusedLocals": true, // Disallow unused local variables + "noUnusedParameters": true, // Disallow unused function parameters + "noFallthroughCasesInSwitch": true, // Prevent fallthrough cases in switch statements + "forceConsistentCasingInFileNames": true, // Ensure consistent file naming + // Improving project robustness + "isolatedModules": true, // Ensure correct transpiling of files + "noErrorTruncation": true, // Show full type error messages + "useDefineForClassFields": true, // Align class field behavior with the standard + // Configuring project build process + "allowJs": true, // Allow JavaScript files to be imported + "skipLibCheck": true, // Skip type checking of declaration files + "noEmit": true, // Vite handles the emitting of files }, + // Specifying folders and files to include in compilation "include": [ "src/**/*" ], + // Excluding certain directories from the compilation "exclude": [ "node_modules" - ], + ] } \ No newline at end of file diff --git a/vite.config.js b/vite.config.js index 82d6bab..a80ddcd 100644 --- a/vite.config.js +++ b/vite.config.js @@ -6,10 +6,5 @@ export default ({ mode }) => { process.env = { ...process.env, ...loadEnv(mode, process.cwd()) }; return defineConfig({ plugins: [react()], - build: { - watch: { - clearScreen: true, - }, - }, }); };