From 1787bf681923f5696d7aec9b419514f78c4fbcbe Mon Sep 17 00:00:00 2001 From: Yulian Prodanov <59143945+julkascript@users.noreply.github.com> Date: Thu, 26 Oct 2023 10:57:48 +0300 Subject: [PATCH 001/667] Add LICENSE --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..825e86eb --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Yulian Prodanov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 33b0c67d124f2147c129397695dd60ce506eb063 Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Fri, 27 Oct 2023 10:06:44 +0300 Subject: [PATCH 002/667] Update .gitignore excluding .idea folder --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e69de29b..757fee31 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +/.idea \ No newline at end of file From 09aa9fc91c56eecb3d8abf5dc9dccbb668d137aa Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Fri, 27 Oct 2023 10:24:15 +0300 Subject: [PATCH 003/667] Update .gitignore adding lines to gitignore --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 757fee31..f9276485 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ -/.idea \ No newline at end of file +/.idea +/.env +/venv + From cc910a142f040b381c0bee12d48eaf0de266a4bb Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Fri, 27 Oct 2023 11:31:22 +0300 Subject: [PATCH 004/667] Initial commit Created the project and some apps --- .gitignore | 2 +- backend/__init__.py | 0 backend/cardflow/.env | 0 backend/cardflow/__init__.py | 0 backend/cardflow/apps/__init__.py | 0 .../apps/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 191 bytes backend/cardflow/apps/accounts/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 200 bytes .../__pycache__/admin.cpython-311.pyc | Bin 0 -> 255 bytes .../accounts/__pycache__/apps.cpython-311.pyc | Bin 0 -> 580 bytes .../__pycache__/models.cpython-311.pyc | Bin 0 -> 252 bytes backend/cardflow/apps/accounts/admin.py | 3 + backend/cardflow/apps/accounts/apps.py | 6 + .../apps/accounts/migrations/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 211 bytes backend/cardflow/apps/accounts/models.py | 3 + backend/cardflow/apps/accounts/tests.py | 3 + backend/cardflow/apps/accounts/views.py | 3 + backend/cardflow/apps/card/__init__.py | 0 .../card/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 196 bytes .../card/__pycache__/admin.cpython-311.pyc | Bin 0 -> 251 bytes .../card/__pycache__/apps.cpython-311.pyc | Bin 0 -> 568 bytes .../card/__pycache__/models.cpython-311.pyc | Bin 0 -> 248 bytes backend/cardflow/apps/card/admin.py | 3 + backend/cardflow/apps/card/apps.py | 6 + .../cardflow/apps/card/migrations/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 207 bytes backend/cardflow/apps/card/models.py | 3 + backend/cardflow/apps/card/tests.py | 3 + backend/cardflow/apps/card/views.py | 3 + .../cardflow/apps/user_profile/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 204 bytes .../__pycache__/admin.cpython-311.pyc | Bin 0 -> 259 bytes .../__pycache__/apps.cpython-311.pyc | Bin 0 -> 591 bytes .../__pycache__/models.cpython-311.pyc | Bin 0 -> 256 bytes backend/cardflow/apps/user_profile/admin.py | 3 + backend/cardflow/apps/user_profile/apps.py | 6 + .../apps/user_profile/migrations/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 215 bytes backend/cardflow/apps/user_profile/models.py | 3 + backend/cardflow/apps/user_profile/tests.py | 3 + backend/cardflow/apps/user_profile/views.py | 3 + backend/cardflow/cardflow/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 195 bytes .../__pycache__/settings.cpython-311.pyc | Bin 0 -> 2729 bytes .../cardflow/__pycache__/urls.cpython-311.pyc | Bin 0 -> 1079 bytes .../cardflow/__pycache__/wsgi.cpython-311.pyc | Bin 0 -> 719 bytes backend/cardflow/cardflow/asgi.py | 16 +++ backend/cardflow/cardflow/settings.py | 124 ++++++++++++++++++ backend/cardflow/cardflow/urls.py | 22 ++++ backend/cardflow/cardflow/wsgi.py | 16 +++ backend/cardflow/db.sqlite3 | 0 backend/cardflow/manage.py | 22 ++++ backend/cardflow/requirements.txt | Bin 0 -> 306 bytes 54 files changed, 255 insertions(+), 1 deletion(-) create mode 100644 backend/__init__.py create mode 100644 backend/cardflow/.env create mode 100644 backend/cardflow/__init__.py create mode 100644 backend/cardflow/apps/__init__.py create mode 100644 backend/cardflow/apps/__pycache__/__init__.cpython-311.pyc create mode 100644 backend/cardflow/apps/accounts/__init__.py create mode 100644 backend/cardflow/apps/accounts/__pycache__/__init__.cpython-311.pyc create mode 100644 backend/cardflow/apps/accounts/__pycache__/admin.cpython-311.pyc create mode 100644 backend/cardflow/apps/accounts/__pycache__/apps.cpython-311.pyc create mode 100644 backend/cardflow/apps/accounts/__pycache__/models.cpython-311.pyc create mode 100644 backend/cardflow/apps/accounts/admin.py create mode 100644 backend/cardflow/apps/accounts/apps.py create mode 100644 backend/cardflow/apps/accounts/migrations/__init__.py create mode 100644 backend/cardflow/apps/accounts/migrations/__pycache__/__init__.cpython-311.pyc create mode 100644 backend/cardflow/apps/accounts/models.py create mode 100644 backend/cardflow/apps/accounts/tests.py create mode 100644 backend/cardflow/apps/accounts/views.py create mode 100644 backend/cardflow/apps/card/__init__.py create mode 100644 backend/cardflow/apps/card/__pycache__/__init__.cpython-311.pyc create mode 100644 backend/cardflow/apps/card/__pycache__/admin.cpython-311.pyc create mode 100644 backend/cardflow/apps/card/__pycache__/apps.cpython-311.pyc create mode 100644 backend/cardflow/apps/card/__pycache__/models.cpython-311.pyc create mode 100644 backend/cardflow/apps/card/admin.py create mode 100644 backend/cardflow/apps/card/apps.py create mode 100644 backend/cardflow/apps/card/migrations/__init__.py create mode 100644 backend/cardflow/apps/card/migrations/__pycache__/__init__.cpython-311.pyc create mode 100644 backend/cardflow/apps/card/models.py create mode 100644 backend/cardflow/apps/card/tests.py create mode 100644 backend/cardflow/apps/card/views.py create mode 100644 backend/cardflow/apps/user_profile/__init__.py create mode 100644 backend/cardflow/apps/user_profile/__pycache__/__init__.cpython-311.pyc create mode 100644 backend/cardflow/apps/user_profile/__pycache__/admin.cpython-311.pyc create mode 100644 backend/cardflow/apps/user_profile/__pycache__/apps.cpython-311.pyc create mode 100644 backend/cardflow/apps/user_profile/__pycache__/models.cpython-311.pyc create mode 100644 backend/cardflow/apps/user_profile/admin.py create mode 100644 backend/cardflow/apps/user_profile/apps.py create mode 100644 backend/cardflow/apps/user_profile/migrations/__init__.py create mode 100644 backend/cardflow/apps/user_profile/migrations/__pycache__/__init__.cpython-311.pyc create mode 100644 backend/cardflow/apps/user_profile/models.py create mode 100644 backend/cardflow/apps/user_profile/tests.py create mode 100644 backend/cardflow/apps/user_profile/views.py create mode 100644 backend/cardflow/cardflow/__init__.py create mode 100644 backend/cardflow/cardflow/__pycache__/__init__.cpython-311.pyc create mode 100644 backend/cardflow/cardflow/__pycache__/settings.cpython-311.pyc create mode 100644 backend/cardflow/cardflow/__pycache__/urls.cpython-311.pyc create mode 100644 backend/cardflow/cardflow/__pycache__/wsgi.cpython-311.pyc create mode 100644 backend/cardflow/cardflow/asgi.py create mode 100644 backend/cardflow/cardflow/settings.py create mode 100644 backend/cardflow/cardflow/urls.py create mode 100644 backend/cardflow/cardflow/wsgi.py create mode 100644 backend/cardflow/db.sqlite3 create mode 100644 backend/cardflow/manage.py create mode 100644 backend/cardflow/requirements.txt diff --git a/.gitignore b/.gitignore index f9276485..7e194dfd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ /.idea /.env /venv - +/db* diff --git a/backend/__init__.py b/backend/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/cardflow/.env b/backend/cardflow/.env new file mode 100644 index 00000000..e69de29b diff --git a/backend/cardflow/__init__.py b/backend/cardflow/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/cardflow/apps/__init__.py b/backend/cardflow/apps/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/cardflow/apps/__pycache__/__init__.cpython-311.pyc b/backend/cardflow/apps/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8874b5f0ba563bbe59fbe9a20f0ceef1020f02d3 GIT binary patch literal 191 zcmZ3^%ge<81V{3%Q$h4&5CH>>P{wCAAY(d13PUi1CZpdaz>P{wCAAY(d13PUi1CZpdazb>KI3_uF*!RmF9jixSWr+LlbD>G xUz!J02ewtOpz;@oO>TZlX-=wL5eLvBMj$Sh1ri^a85tRGFeqHWhKksLDgcV6N5237 literal 0 HcmV?d00001 diff --git a/backend/cardflow/apps/accounts/__pycache__/apps.cpython-311.pyc b/backend/cardflow/apps/accounts/__pycache__/apps.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ccd16f9e5ee639f0d51594d90968c3ca6a26d5df GIT binary patch literal 580 zcmZutze~eF6n>YaQu{-}L8v0=*d?>52vyNR5TS|~0>?FXt<@wKFOAYp9sC2_I=U(1 zKhv>fb#f3Yb?W3@nku62-M#zXz4yL*_nwNy97uWRo9scJugaN9CIur?f*w$y$OR8s z2!RF%K(#xdIzx{-z>C}yu{3H_p`3YBZW+b1l_1#Ve!ban(v0LlsWV!Xpa%>rL_yXf zOQ)J;P+f8u@m$4mc;vUj2}5UvUJ}2-O?WT60v+ z#954e;xUZl9LBOFauqIMd>s)tjVw@BCz0F2L=xe;Vu}qFdxnwfa(uSCVV{Ofgm$&* zG48LPaLNV0v5(u%1rgq{;Frv4g|>P{wCAAY(d13PUi1CZpdaz@Q$h4&5CH>>P{wCAAY(d13PUi1CZpdaz@Q=NeHV-N=hn4pZ$LO{lJh7^Vr#vF!R#wbQch7_h?22JLdAO)I? zw^$QXax?S%G?{MkrDP@MrRVD<=jW9aWhNCd0~M@f_zY6_E5z9b>KI3_uF*!RmF9jixSWp0wjse@K qS5Wzj!zMRBr8Fniu80F@2_p~}%L0iH%#4hTHy9KyU_(W0KotP%f<>VK literal 0 HcmV?d00001 diff --git a/backend/cardflow/apps/card/__pycache__/apps.cpython-311.pyc b/backend/cardflow/apps/card/__pycache__/apps.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..df742f15fb1f960a43a56a6715307e89eb1fd309 GIT binary patch literal 568 zcmZutJx{|h5IrX;>ZgzxiaH>{*d;Rpgj9-PK&mPgmMD_t#%^gz;@~u(cIvo^*g$xmIRr)M!C9^R8$W#kpD#)Vbg3b)8g^Y$zp*vIG-gU?B?fF0yp0 zSq9Z*4kOOjiJ+_7qaE5OewUlHZF-zCH#ARr-C8u@XFcZ9QH}&bXgX5gsAl3U#y;^F z#&I5FDUV!*ix}TV#7!exlyykt4lt2Pa7Sf{4HbKVg{p4Zsvp=_Arqn9>UoU&yO*4D z!SC$m(77hUYYN_H&LFhas~wl$+il|9FrWS$sG<^PC*=i0p_-aFLxQj(-S~UVD*IET zJS&vPr)r4eTHC1VaUuP`N+eXfSE&jLCBl+K%k0tWx5r{rQq|?~Lb|z*5Sqc>^!J=^ UXlQ#5f8Ar{L!Ey96G|TY0>ccGjQ{`u literal 0 HcmV?d00001 diff --git a/backend/cardflow/apps/card/__pycache__/models.cpython-311.pyc b/backend/cardflow/apps/card/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..12054d417f0e9d8376714d22947def989e216bd9 GIT binary patch literal 248 zcmZ3^%ge<81XJ>@Q*D6sV-N=hn4pZ$LO{lJh7^Vr#vF!R#wbQch7_h?22JLdAO)I? zx7c#?Q&Mw^{WO_wai(M?=B4NBr6d(G10`27d@An}2jk&*ERgUkhNsE7@y0s!U%L_+`o literal 0 HcmV?d00001 diff --git a/backend/cardflow/apps/card/admin.py b/backend/cardflow/apps/card/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/backend/cardflow/apps/card/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/backend/cardflow/apps/card/apps.py b/backend/cardflow/apps/card/apps.py new file mode 100644 index 00000000..8b98548d --- /dev/null +++ b/backend/cardflow/apps/card/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class CardConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'apps.card' diff --git a/backend/cardflow/apps/card/migrations/__init__.py b/backend/cardflow/apps/card/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/cardflow/apps/card/migrations/__pycache__/__init__.cpython-311.pyc b/backend/cardflow/apps/card/migrations/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..523a489d58f6b89dfaac5da8069c3e02459600d6 GIT binary patch literal 207 zcmZ3^%ge<81XJ>@Q$h4&5CH>>P{wCAAY(d13PUi1CZpdaz2KczG$)vkyYXeG!|#r#0x12ZEd N;|B&9QN#=s0{~=kIK}_~ literal 0 HcmV?d00001 diff --git a/backend/cardflow/apps/card/models.py b/backend/cardflow/apps/card/models.py new file mode 100644 index 00000000..71a83623 --- /dev/null +++ b/backend/cardflow/apps/card/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/backend/cardflow/apps/card/tests.py b/backend/cardflow/apps/card/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/backend/cardflow/apps/card/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/backend/cardflow/apps/card/views.py b/backend/cardflow/apps/card/views.py new file mode 100644 index 00000000..91ea44a2 --- /dev/null +++ b/backend/cardflow/apps/card/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/backend/cardflow/apps/user_profile/__init__.py b/backend/cardflow/apps/user_profile/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/cardflow/apps/user_profile/__pycache__/__init__.cpython-311.pyc b/backend/cardflow/apps/user_profile/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9a019e3531111b73da55e9da3f9e8be4dc634ce GIT binary patch literal 204 zcmZ3^%ge<81kMH4sUZ3>h=2h`DC095kTIPhg&~+hlhJP_LlF~@{~09tE8f{ECbT%U zs5mA#GdDFqPaz~fCBG=YEGD2bIU}(sH=rm#D>b>KI3_uF*!RmF9jix zSWr+LQwlUAzMv>SEi)%ICO$qhFS8^*Uaz3?7l%!5eoARhs$CH)&_0lhiur-W2WCb_ N#t#fIqKFwN1^{JfH%|Zn literal 0 HcmV?d00001 diff --git a/backend/cardflow/apps/user_profile/__pycache__/admin.cpython-311.pyc b/backend/cardflow/apps/user_profile/__pycache__/admin.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36d4853598d8b496fe4110de6cb0dbe7f1868d9e GIT binary patch literal 259 zcmZ3^%ge<81kMH4sZK!pF^B^LOi;#WAs}NqLkdF*V-7noPI&QnC{B()0C_^YcoIGLwp!feKbKd~vmYI_p1GZVOpz;@oO>TZlX-=wL5eLvRMj$Sh1ri^a85tRGFeqHWhKksLDgZk! BNX`HN literal 0 HcmV?d00001 diff --git a/backend/cardflow/apps/user_profile/__pycache__/apps.cpython-311.pyc b/backend/cardflow/apps/user_profile/__pycache__/apps.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee853c82d207b8ff18b6672d66ec0130ef6b283a GIT binary patch literal 591 zcmZuuJx{|h5IrX;0@@0}fW*Mp*d;Rpgakz(goG*qONeB-u~Py`9GnIO69fOD{DLCH zpXpd-WnwETQzz^sfGmVS zgMFad15llzt`6`b-`p&X8plv8y{WK<(y8qzs`JqGT24`sZKw!_^AdD`frTi@US#Q1 zvkal@Pzk%u(i&#BXCF$*`-~QbXmQVW`B8&g$#7(i7Xq zUch*`a>6MW{Mv5ZI_E?LQs)J8+Oh2rL0zBU*iGVGvXFisC~@{radsv*x)o~HnKLAa z7o@xYTK$E!o-yAqFWv8|B`V|Eqne(Ui+Ly_q5eWnRaPh~tV%SR+{|yiC1zx(h94hF fH_#D6eOT@Neg+d7S{}e(_c-;gPCx!hWgq(l?YW&@ literal 0 HcmV?d00001 diff --git a/backend/cardflow/apps/user_profile/__pycache__/models.cpython-311.pyc b/backend/cardflow/apps/user_profile/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..38dc86dd7ed3d69d1256703e6e86eded164fdd75 GIT binary patch literal 256 zcmZ3^%ge<81kMH4sWw3RF^B^LOi;#WAs}NqLkdF*V-7h=2h`DC095kTIPhg&~+hlhJP_LlF~@{~09tE6dp`CbT%U zs5mA#GdDFqPaz~fCBG=YEGD2bIU}(sH=rm#D>b>KI3_uF*!RmF9jix zSWr+LQwlUAzMv>SEi)%ICO0#^D6u3nKd(3@K0Y%qvm`!Vub}c5hfQvNN@-52T@fqL YYLMfK`GLd-W=2NF4-7D(h#4pb09vLy^8f$< literal 0 HcmV?d00001 diff --git a/backend/cardflow/apps/user_profile/models.py b/backend/cardflow/apps/user_profile/models.py new file mode 100644 index 00000000..71a83623 --- /dev/null +++ b/backend/cardflow/apps/user_profile/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/backend/cardflow/apps/user_profile/tests.py b/backend/cardflow/apps/user_profile/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/backend/cardflow/apps/user_profile/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/backend/cardflow/apps/user_profile/views.py b/backend/cardflow/apps/user_profile/views.py new file mode 100644 index 00000000..91ea44a2 --- /dev/null +++ b/backend/cardflow/apps/user_profile/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/backend/cardflow/cardflow/__init__.py b/backend/cardflow/cardflow/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/cardflow/cardflow/__pycache__/__init__.cpython-311.pyc b/backend/cardflow/cardflow/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e1f098af949df9f08c989f8b4a40ac47bb09ea31 GIT binary patch literal 195 zcmZ3^%ge<81mAM4Q$h4&5CH>>P{wCAAY(d13PUi1CZpdazOqd;42YgdyP8Z{(o?7(KBS;qGg433@J4irC3 znKWsew1-Zrv_AA<>O-fg{|udwhWv!Ir@ck$Tc39ABoIQ?;W+o+^YJ_P+;h%7$sZ&c z0r(kje1U$90q~DQbe~XX@%B3cfZqTFkWc{c%pQfPd3X=uti6i2=Hq|Zs)3}2jwZh~)sJsqyES`vc5~I#o@jTiC*#w1uH4+5 zx>{Wm#dU2$k&wK#s^9-?Vs=81?$2=PsFiA)p(IT;b$OK%VNF)8GyU9#xo(~BV>%F| zn&wU&8P;&0&_ISEYwAfs4GY97Mx5(Mn4&35YqEk2JFX+c6xMXHhPE|*(;7KWQzG`q z)Hac7kz&1WP@*Jh4b?QPuuDp!4y{3V*)WhU)OF3Vn+{r&olR>pgbLagbws)0lg%B9 zb>fH@i-$66rr*cTsi+=2+vfG4(kC~Ov|3G5sf;`QkE)@sQ5ife$!NPr^>&{xP7Hee zpfQcpAxk)nn%V>GKSVbJz2L=mR(epk-g5{=mNqv;X;W6K)YtP)c8YapGouGbI>BF4 zv~8-PD~5HWW5z_ax+0p0TE%#zLWAlEvThl39kF32-LiUOI!TkTSDJ35eb%S_W=?8R z5Un<<*0ob;>gaI;7nn8C(LF4FC#3JO?1b8y?o&Pt<9h&IS=wg@=jhBsrjWIL*<6{m zLv*PmxT|2X#N~n~Now~aQPM$#}5E7xR2bZ*pATSL>Wd#AOu zD64XYOWvQzd9|xebY)EACC;&Kdpg6qlR=@I%&a=)X9cndn;VV3L0+Hy3w1T zng)?#P;+t>-$-p$HA}3VJ`Ao4eZ-+T%v6QDdhP4yR>_X1b&*w6YEO1idzB-2>w-kgtZtQ|Y>jLn{_mflmiP5K?XW{4RH;Joz ziL3o&>f+P6XSwIKH>vA;sq6jH#88V2Ca`^H@P=LcAA#_|Zh~)lJ$TQMOO$$vN4-S3 xO`Ih!cyL5ppMb%UCV3DWY=#e_12`~YvKeT_KztaVIRb`ecR{lK>Qgv1{{i_!Y{LKm literal 0 HcmV?d00001 diff --git a/backend/cardflow/cardflow/__pycache__/urls.cpython-311.pyc b/backend/cardflow/cardflow/__pycache__/urls.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..89826bb7867c71eef59eb50787d14db93c2871a9 GIT binary patch literal 1079 zcmb7D&u`N(6n4_I8!6i)P8>KG?a)OUiJ0ILehCdGCLvVq$EB*&xv|@(#BpT18{@)` z963zlKL8>AnIUmNxpLxGX%dH>cuo^2NJ!w=*7M8r_rCYpe!sNjB52?F9d@OL&{wml zno}C*Z7|*CMKgIoSaphXr(DlowTq*sCa_yysBr9yXWl12sRB5eVB)5i}f#U#Zs&xF(=#seuh z=EpsfWuD`-vC^AYhfLWgG==%k$iC=2CiAUMG~tDHx7X z{AHt92G6|3e4*Ea`_b#=%OxeKM9a7@;kBT=Imc6)_mVp*)+~1n@w_>Am>IroFBzn$L`pfb2k4fTZ#}|utxuBDT z-IvRd!h)gpVVc$~%bMCNmNP|W!pORQhVXp1GPs7s(pPbdt R&g!&guh=I|^U2GA`~!{oOX>gs literal 0 HcmV?d00001 diff --git a/backend/cardflow/cardflow/__pycache__/wsgi.cpython-311.pyc b/backend/cardflow/cardflow/__pycache__/wsgi.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99444c3044a88db337a94d83b8ee180d50bc16c9 GIT binary patch literal 719 zcmY*X&ubGw6n?XtHoCPz#r8auUIMzS#ZwhQni?Y77L%fcz-GGhl5CvaS$4LG>8S_* z2l3{qBK>DlDJXjic=8q~c<9O5#?|=d=X-D7`@T0bpO=>{(DEyIgdYjOk4(v>@Mm+; z)0+>#p$VLDLy#uXt0|1YY?=g+^z)POX(11uUwMHqoEQM7dd!4?0cf6R!?s;=)?KeJkQ$|Swh z#l+2Q?i`JDwetMwPIcFqI5Z)|F$w20xrk7bxzI*?sgz?gYo};0>*pm8?1bVmGP=QzQ1(_m2;?!p)x70jZ151rS*BBI>EnV@v) zV<$)DnT?2+0gc{S&X$X_rJH^>WAATEA)npCCaPy!m40gC%t8NZ?UiJ+`xc^XugVFt OG|IEa(xCifv#nm?S1yA9 literal 0 HcmV?d00001 From 4ceebf836a79861710fffc28154e0327bfa9c71a Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Fri, 27 Oct 2023 11:33:49 +0300 Subject: [PATCH 005/667] Change gitignore --- backend/cardflow/db.sqlite3 | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 backend/cardflow/db.sqlite3 diff --git a/backend/cardflow/db.sqlite3 b/backend/cardflow/db.sqlite3 deleted file mode 100644 index e69de29b..00000000 From c5c412ca190aafa156950178d98f818db31e99bd Mon Sep 17 00:00:00 2001 From: Simeon Todorov Date: Fri, 27 Oct 2023 11:36:21 +0300 Subject: [PATCH 006/667] Update .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7e194dfd..5d586fd9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ /.idea -/.env +.env /venv /db* From 53a1ca649b318a89a2875ba4d37680c8dfff7f4c Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Fri, 27 Oct 2023 11:37:48 +0300 Subject: [PATCH 007/667] Change gitignore --- backend/cardflow/.env | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 backend/cardflow/.env diff --git a/backend/cardflow/.env b/backend/cardflow/.env deleted file mode 100644 index e69de29b..00000000 From bbc2f063917a3810642579ba52af6fe5be59a2c2 Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Fri, 27 Oct 2023 14:16:46 +0300 Subject: [PATCH 008/667] adding more files for backend setup deleted pycache folder and added to gitignore updated setting.py ENV variables added docker-compose file for DB --- .gitignore | 11 +++--- .../apps/__pycache__/__init__.cpython-311.pyc | Bin 191 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 200 -> 0 bytes .../__pycache__/admin.cpython-311.pyc | Bin 255 -> 0 bytes .../accounts/__pycache__/apps.cpython-311.pyc | Bin 580 -> 0 bytes .../__pycache__/models.cpython-311.pyc | Bin 252 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 211 -> 0 bytes .../card/__pycache__/__init__.cpython-311.pyc | Bin 196 -> 0 bytes .../card/__pycache__/admin.cpython-311.pyc | Bin 251 -> 0 bytes .../card/__pycache__/apps.cpython-311.pyc | Bin 568 -> 0 bytes .../card/__pycache__/models.cpython-311.pyc | Bin 248 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 207 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 204 -> 0 bytes .../__pycache__/admin.cpython-311.pyc | Bin 259 -> 0 bytes .../__pycache__/apps.cpython-311.pyc | Bin 591 -> 0 bytes .../__pycache__/models.cpython-311.pyc | Bin 256 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 215 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 195 -> 0 bytes .../__pycache__/settings.cpython-311.pyc | Bin 2729 -> 0 bytes .../cardflow/__pycache__/urls.cpython-311.pyc | Bin 1079 -> 0 bytes .../cardflow/__pycache__/wsgi.cpython-311.pyc | Bin 719 -> 0 bytes backend/cardflow/cardflow/settings.py | 17 ++++++---- backend/cardflow/docker-compose.yml | 32 ++++++++++++++++++ 23 files changed, 50 insertions(+), 10 deletions(-) delete mode 100644 backend/cardflow/apps/__pycache__/__init__.cpython-311.pyc delete mode 100644 backend/cardflow/apps/accounts/__pycache__/__init__.cpython-311.pyc delete mode 100644 backend/cardflow/apps/accounts/__pycache__/admin.cpython-311.pyc delete mode 100644 backend/cardflow/apps/accounts/__pycache__/apps.cpython-311.pyc delete mode 100644 backend/cardflow/apps/accounts/__pycache__/models.cpython-311.pyc delete mode 100644 backend/cardflow/apps/accounts/migrations/__pycache__/__init__.cpython-311.pyc delete mode 100644 backend/cardflow/apps/card/__pycache__/__init__.cpython-311.pyc delete mode 100644 backend/cardflow/apps/card/__pycache__/admin.cpython-311.pyc delete mode 100644 backend/cardflow/apps/card/__pycache__/apps.cpython-311.pyc delete mode 100644 backend/cardflow/apps/card/__pycache__/models.cpython-311.pyc delete mode 100644 backend/cardflow/apps/card/migrations/__pycache__/__init__.cpython-311.pyc delete mode 100644 backend/cardflow/apps/user_profile/__pycache__/__init__.cpython-311.pyc delete mode 100644 backend/cardflow/apps/user_profile/__pycache__/admin.cpython-311.pyc delete mode 100644 backend/cardflow/apps/user_profile/__pycache__/apps.cpython-311.pyc delete mode 100644 backend/cardflow/apps/user_profile/__pycache__/models.cpython-311.pyc delete mode 100644 backend/cardflow/apps/user_profile/migrations/__pycache__/__init__.cpython-311.pyc delete mode 100644 backend/cardflow/cardflow/__pycache__/__init__.cpython-311.pyc delete mode 100644 backend/cardflow/cardflow/__pycache__/settings.cpython-311.pyc delete mode 100644 backend/cardflow/cardflow/__pycache__/urls.cpython-311.pyc delete mode 100644 backend/cardflow/cardflow/__pycache__/wsgi.cpython-311.pyc create mode 100644 backend/cardflow/docker-compose.yml diff --git a/.gitignore b/.gitignore index 5d586fd9..72caad8e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ -/.idea -.env -/venv -/db* +__pycache__ +.idea/ +.env* +venv/ +db* +postgresql/ +pgadmin4/ \ No newline at end of file diff --git a/backend/cardflow/apps/__pycache__/__init__.cpython-311.pyc b/backend/cardflow/apps/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 8874b5f0ba563bbe59fbe9a20f0ceef1020f02d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmZ3^%ge<81V{3%Q$h4&5CH>>P{wCAAY(d13PUi1CZpdaz>P{wCAAY(d13PUi1CZpdazb>KI3_uF*!RmF9jixSWr+LlbD>G xUz!J02ewtOpz;@oO>TZlX-=wL5eLvBMj$Sh1ri^a85tRGFeqHWhKksLDgcV6N5237 diff --git a/backend/cardflow/apps/accounts/__pycache__/apps.cpython-311.pyc b/backend/cardflow/apps/accounts/__pycache__/apps.cpython-311.pyc deleted file mode 100644 index ccd16f9e5ee639f0d51594d90968c3ca6a26d5df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580 zcmZutze~eF6n>YaQu{-}L8v0=*d?>52vyNR5TS|~0>?FXt<@wKFOAYp9sC2_I=U(1 zKhv>fb#f3Yb?W3@nku62-M#zXz4yL*_nwNy97uWRo9scJugaN9CIur?f*w$y$OR8s z2!RF%K(#xdIzx{-z>C}yu{3H_p`3YBZW+b1l_1#Ve!ban(v0LlsWV!Xpa%>rL_yXf zOQ)J;P+f8u@m$4mc;vUj2}5UvUJ}2-O?WT60v+ z#954e;xUZl9LBOFauqIMd>s)tjVw@BCz0F2L=xe;Vu}qFdxnwfa(uSCVV{Ofgm$&* zG48LPaLNV0v5(u%1rgq{;Frv4g|>P{wCAAY(d13PUi1CZpdaz@Q$h4&5CH>>P{wCAAY(d13PUi1CZpdaz@Q=NeHV-N=hn4pZ$LO{lJh7^Vr#vF!R#wbQch7_h?22JLdAO)I? zw^$QXax?S%G?{MkrDP@MrRVD<=jW9aWhNCd0~M@f_zY6_E5z9b>KI3_uF*!RmF9jixSWp0wjse@K qS5Wzj!zMRBr8Fniu80F@2_p~}%L0iH%#4hTHy9KyU_(W0KotP%f<>VK diff --git a/backend/cardflow/apps/card/__pycache__/apps.cpython-311.pyc b/backend/cardflow/apps/card/__pycache__/apps.cpython-311.pyc deleted file mode 100644 index df742f15fb1f960a43a56a6715307e89eb1fd309..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568 zcmZutJx{|h5IrX;>ZgzxiaH>{*d;Rpgj9-PK&mPgmMD_t#%^gz;@~u(cIvo^*g$xmIRr)M!C9^R8$W#kpD#)Vbg3b)8g^Y$zp*vIG-gU?B?fF0yp0 zSq9Z*4kOOjiJ+_7qaE5OewUlHZF-zCH#ARr-C8u@XFcZ9QH}&bXgX5gsAl3U#y;^F z#&I5FDUV!*ix}TV#7!exlyykt4lt2Pa7Sf{4HbKVg{p4Zsvp=_Arqn9>UoU&yO*4D z!SC$m(77hUYYN_H&LFhas~wl$+il|9FrWS$sG<^PC*=i0p_-aFLxQj(-S~UVD*IET zJS&vPr)r4eTHC1VaUuP`N+eXfSE&jLCBl+K%k0tWx5r{rQq|?~Lb|z*5Sqc>^!J=^ UXlQ#5f8Ar{L!Ey96G|TY0>ccGjQ{`u diff --git a/backend/cardflow/apps/card/__pycache__/models.cpython-311.pyc b/backend/cardflow/apps/card/__pycache__/models.cpython-311.pyc deleted file mode 100644 index 12054d417f0e9d8376714d22947def989e216bd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248 zcmZ3^%ge<81XJ>@Q*D6sV-N=hn4pZ$LO{lJh7^Vr#vF!R#wbQch7_h?22JLdAO)I? zx7c#?Q&Mw^{WO_wai(M?=B4NBr6d(G10`27d@An}2jk&*ERgUkhNsE7@y0s!U%L_+`o diff --git a/backend/cardflow/apps/card/migrations/__pycache__/__init__.cpython-311.pyc b/backend/cardflow/apps/card/migrations/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 523a489d58f6b89dfaac5da8069c3e02459600d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207 zcmZ3^%ge<81XJ>@Q$h4&5CH>>P{wCAAY(d13PUi1CZpdaz2KczG$)vkyYXeG!|#r#0x12ZEd N;|B&9QN#=s0{~=kIK}_~ diff --git a/backend/cardflow/apps/user_profile/__pycache__/__init__.cpython-311.pyc b/backend/cardflow/apps/user_profile/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index a9a019e3531111b73da55e9da3f9e8be4dc634ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmZ3^%ge<81kMH4sUZ3>h=2h`DC095kTIPhg&~+hlhJP_LlF~@{~09tE8f{ECbT%U zs5mA#GdDFqPaz~fCBG=YEGD2bIU}(sH=rm#D>b>KI3_uF*!RmF9jix zSWr+LQwlUAzMv>SEi)%ICO$qhFS8^*Uaz3?7l%!5eoARhs$CH)&_0lhiur-W2WCb_ N#t#fIqKFwN1^{JfH%|Zn diff --git a/backend/cardflow/apps/user_profile/__pycache__/admin.cpython-311.pyc b/backend/cardflow/apps/user_profile/__pycache__/admin.cpython-311.pyc deleted file mode 100644 index 36d4853598d8b496fe4110de6cb0dbe7f1868d9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmZ3^%ge<81kMH4sZK!pF^B^LOi;#WAs}NqLkdF*V-7noPI&QnC{B()0C_^YcoIGLwp!feKbKd~vmYI_p1GZVOpz;@oO>TZlX-=wL5eLvRMj$Sh1ri^a85tRGFeqHWhKksLDgZk! BNX`HN diff --git a/backend/cardflow/apps/user_profile/__pycache__/apps.cpython-311.pyc b/backend/cardflow/apps/user_profile/__pycache__/apps.cpython-311.pyc deleted file mode 100644 index ee853c82d207b8ff18b6672d66ec0130ef6b283a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmZuuJx{|h5IrX;0@@0}fW*Mp*d;Rpgakz(goG*qONeB-u~Py`9GnIO69fOD{DLCH zpXpd-WnwETQzz^sfGmVS zgMFad15llzt`6`b-`p&X8plv8y{WK<(y8qzs`JqGT24`sZKw!_^AdD`frTi@US#Q1 zvkal@Pzk%u(i&#BXCF$*`-~QbXmQVW`B8&g$#7(i7Xq zUch*`a>6MW{Mv5ZI_E?LQs)J8+Oh2rL0zBU*iGVGvXFisC~@{radsv*x)o~HnKLAa z7o@xYTK$E!o-yAqFWv8|B`V|Eqne(Ui+Ly_q5eWnRaPh~tV%SR+{|yiC1zx(h94hF fH_#D6eOT@Neg+d7S{}e(_c-;gPCx!hWgq(l?YW&@ diff --git a/backend/cardflow/apps/user_profile/__pycache__/models.cpython-311.pyc b/backend/cardflow/apps/user_profile/__pycache__/models.cpython-311.pyc deleted file mode 100644 index 38dc86dd7ed3d69d1256703e6e86eded164fdd75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmZ3^%ge<81kMH4sWw3RF^B^LOi;#WAs}NqLkdF*V-7h=2h`DC095kTIPhg&~+hlhJP_LlF~@{~09tE6dp`CbT%U zs5mA#GdDFqPaz~fCBG=YEGD2bIU}(sH=rm#D>b>KI3_uF*!RmF9jix zSWr+LQwlUAzMv>SEi)%ICO0#^D6u3nKd(3@K0Y%qvm`!Vub}c5hfQvNN@-52T@fqL YYLMfK`GLd-W=2NF4-7D(h#4pb09vLy^8f$< diff --git a/backend/cardflow/cardflow/__pycache__/__init__.cpython-311.pyc b/backend/cardflow/cardflow/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index e1f098af949df9f08c989f8b4a40ac47bb09ea31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmZ3^%ge<81mAM4Q$h4&5CH>>P{wCAAY(d13PUi1CZpdazOqd;42YgdyP8Z{(o?7(KBS;qGg433@J4irC3 znKWsew1-Zrv_AA<>O-fg{|udwhWv!Ir@ck$Tc39ABoIQ?;W+o+^YJ_P+;h%7$sZ&c z0r(kje1U$90q~DQbe~XX@%B3cfZqTFkWc{c%pQfPd3X=uti6i2=Hq|Zs)3}2jwZh~)sJsqyES`vc5~I#o@jTiC*#w1uH4+5 zx>{Wm#dU2$k&wK#s^9-?Vs=81?$2=PsFiA)p(IT;b$OK%VNF)8GyU9#xo(~BV>%F| zn&wU&8P;&0&_ISEYwAfs4GY97Mx5(Mn4&35YqEk2JFX+c6xMXHhPE|*(;7KWQzG`q z)Hac7kz&1WP@*Jh4b?QPuuDp!4y{3V*)WhU)OF3Vn+{r&olR>pgbLagbws)0lg%B9 zb>fH@i-$66rr*cTsi+=2+vfG4(kC~Ov|3G5sf;`QkE)@sQ5ife$!NPr^>&{xP7Hee zpfQcpAxk)nn%V>GKSVbJz2L=mR(epk-g5{=mNqv;X;W6K)YtP)c8YapGouGbI>BF4 zv~8-PD~5HWW5z_ax+0p0TE%#zLWAlEvThl39kF32-LiUOI!TkTSDJ35eb%S_W=?8R z5Un<<*0ob;>gaI;7nn8C(LF4FC#3JO?1b8y?o&Pt<9h&IS=wg@=jhBsrjWIL*<6{m zLv*PmxT|2X#N~n~Now~aQPM$#}5E7xR2bZ*pATSL>Wd#AOu zD64XYOWvQzd9|xebY)EACC;&Kdpg6qlR=@I%&a=)X9cndn;VV3L0+Hy3w1T zng)?#P;+t>-$-p$HA}3VJ`Ao4eZ-+T%v6QDdhP4yR>_X1b&*w6YEO1idzB-2>w-kgtZtQ|Y>jLn{_mflmiP5K?XW{4RH;Joz ziL3o&>f+P6XSwIKH>vA;sq6jH#88V2Ca`^H@P=LcAA#_|Zh~)lJ$TQMOO$$vN4-S3 xO`Ih!cyL5ppMb%UCV3DWY=#e_12`~YvKeT_KztaVIRb`ecR{lK>Qgv1{{i_!Y{LKm diff --git a/backend/cardflow/cardflow/__pycache__/urls.cpython-311.pyc b/backend/cardflow/cardflow/__pycache__/urls.cpython-311.pyc deleted file mode 100644 index 89826bb7867c71eef59eb50787d14db93c2871a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1079 zcmb7D&u`N(6n4_I8!6i)P8>KG?a)OUiJ0ILehCdGCLvVq$EB*&xv|@(#BpT18{@)` z963zlKL8>AnIUmNxpLxGX%dH>cuo^2NJ!w=*7M8r_rCYpe!sNjB52?F9d@OL&{wml zno}C*Z7|*CMKgIoSaphXr(DlowTq*sCa_yysBr9yXWl12sRB5eVB)5i}f#U#Zs&xF(=#seuh z=EpsfWuD`-vC^AYhfLWgG==%k$iC=2CiAUMG~tDHx7X z{AHt92G6|3e4*Ea`_b#=%OxeKM9a7@;kBT=Imc6)_mVp*)+~1n@w_>Am>IroFBzn$L`pfb2k4fTZ#}|utxuBDT z-IvRd!h)gpVVc$~%bMCNmNP|W!pORQhVXp1GPs7s(pPbdt R&g!&guh=I|^U2GA`~!{oOX>gs diff --git a/backend/cardflow/cardflow/__pycache__/wsgi.cpython-311.pyc b/backend/cardflow/cardflow/__pycache__/wsgi.cpython-311.pyc deleted file mode 100644 index 99444c3044a88db337a94d83b8ee180d50bc16c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 719 zcmY*X&ubGw6n?XtHoCPz#r8auUIMzS#ZwhQni?Y77L%fcz-GGhl5CvaS$4LG>8S_* z2l3{qBK>DlDJXjic=8q~c<9O5#?|=d=X-D7`@T0bpO=>{(DEyIgdYjOk4(v>@Mm+; z)0+>#p$VLDLy#uXt0|1YY?=g+^z)POX(11uUwMHqoEQM7dd!4?0cf6R!?s;=)?KeJkQ$|Swh z#l+2Q?i`JDwetMwPIcFqI5Z)|F$w20xrk7bxzI*?sgz?gYo};0>*pm8?1bVmGP=QzQ1(_m2;?!p)x70jZ151rS Date: Fri, 27 Oct 2023 17:43:30 +0300 Subject: [PATCH 009/667] setup React + Vite --- .gitignore | 24 + frontend/.eslintrc.cjs | 18 + frontend/README.md | 27 + frontend/frontend_project_files.txt | 1 - frontend/index.html | 13 + frontend/package-lock.json | 3956 +++++++++++++++++++++++++++ frontend/package.json | 28 + frontend/public/vite.svg | 1 + frontend/src/App.css | 42 + frontend/src/App.tsx | 35 + frontend/src/assets/react.svg | 1 + frontend/src/index.css | 69 + frontend/src/main.tsx | 10 + frontend/src/vite-env.d.ts | 1 + frontend/tsconfig.json | 25 + frontend/tsconfig.node.json | 10 + frontend/vite.config.ts | 7 + 17 files changed, 4267 insertions(+), 1 deletion(-) create mode 100644 frontend/.eslintrc.cjs create mode 100644 frontend/README.md delete mode 100644 frontend/frontend_project_files.txt create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/vite.svg create mode 100644 frontend/src/App.css create mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/assets/react.svg create mode 100644 frontend/src/index.css create mode 100644 frontend/src/main.tsx create mode 100644 frontend/src/vite-env.d.ts create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.node.json create mode 100644 frontend/vite.config.ts diff --git a/.gitignore b/.gitignore index e69de29b..54f07af5 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? \ No newline at end of file diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs new file mode 100644 index 00000000..d6c95379 --- /dev/null +++ b/frontend/.eslintrc.cjs @@ -0,0 +1,18 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parser: '@typescript-eslint/parser', + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, +} diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 00000000..1ebe379f --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,27 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + project: ['./tsconfig.json', './tsconfig.node.json'], + tsconfigRootDir: __dirname, + }, +``` + +- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked` +- Optionally add `plugin:@typescript-eslint/stylistic-type-checked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list diff --git a/frontend/frontend_project_files.txt b/frontend/frontend_project_files.txt deleted file mode 100644 index 39bb7ddf..00000000 --- a/frontend/frontend_project_files.txt +++ /dev/null @@ -1 +0,0 @@ -Frontend files here! diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 00000000..e4b78eae --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 00000000..e0a5408c --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,3956 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", + "@vitejs/plugin-react-swc": "^3.3.2", + "eslint": "^8.45.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.3", + "typescript": "^5.0.2", + "vite": "^4.4.5" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", + "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@swc/core": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.95.tgz", + "integrity": "sha512-PMrNeuqIusq9DPDooV3FfNEbZuTu5jKAc04N3Hm6Uk2Fl49cqElLFQ4xvl4qDmVDz97n3n/C1RE0/f6WyGPEiA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@swc/counter": "^0.1.1", + "@swc/types": "^0.1.5" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.95", + "@swc/core-darwin-x64": "1.3.95", + "@swc/core-linux-arm-gnueabihf": "1.3.95", + "@swc/core-linux-arm64-gnu": "1.3.95", + "@swc/core-linux-arm64-musl": "1.3.95", + "@swc/core-linux-x64-gnu": "1.3.95", + "@swc/core-linux-x64-musl": "1.3.95", + "@swc/core-win32-arm64-msvc": "1.3.95", + "@swc/core-win32-ia32-msvc": "1.3.95", + "@swc/core-win32-x64-msvc": "1.3.95" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.95.tgz", + "integrity": "sha512-VAuBAP3MNetO/yBIBzvorUXq7lUBwhfpJxYViSxyluMwtoQDhE/XWN598TWMwMl1ZuImb56d7eUsuFdjgY7pJw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.95.tgz", + "integrity": "sha512-20vF2rvUsN98zGLZc+dsEdHvLoCuiYq/1B+TDeE4oolgTFDmI1jKO+m44PzWjYtKGU9QR95sZ6r/uec0QC5O4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.95.tgz", + "integrity": "sha512-oEudEM8PST1MRNGs+zu0cx5i9uP8TsLE4/L9HHrS07Ck0RJ3DCj3O2fU832nmLe2QxnAGPwBpSO9FntLfOiWEQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.95.tgz", + "integrity": "sha512-pIhFI+cuC1aYg+0NAPxwT/VRb32f2ia8oGxUjQR6aJg65gLkUYQzdwuUmpMtFR2WVf7WVFYxUnjo4UyMuyh3ng==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.95.tgz", + "integrity": "sha512-ZpbTr+QZDT4OPJfjPAmScqdKKaT+wGurvMU5AhxLaf85DuL8HwUwwlL0n1oLieLc47DwIJEMuKQkYhXMqmJHlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.95.tgz", + "integrity": "sha512-n9SuHEFtdfSJ+sHdNXNRuIOVprB8nbsz+08apKfdo4lEKq6IIPBBAk5kVhPhkjmg2dFVHVo4Tr/OHXM1tzWCCw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.95.tgz", + "integrity": "sha512-L1JrVlsXU3LC0WwmVnMK9HrOT2uhHahAoPNMJnZQpc18a0paO9fqifPG8M/HjNRffMUXR199G/phJsf326UvVg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.95.tgz", + "integrity": "sha512-YaP4x/aZbUyNdqCBpC2zL8b8n58MEpOUpmOIZK6G1SxGi+2ENht7gs7+iXpWPc0sy7X3YPKmSWMAuui0h8lgAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.95.tgz", + "integrity": "sha512-w0u3HI916zT4BC/57gOd+AwAEjXeUlQbGJ9H4p/gzs1zkSHtoDQghVUNy3n/ZKp9KFod/95cA8mbVF9t1+6epQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.95.tgz", + "integrity": "sha512-5RGnMt0S6gg4Gc6QtPUJ3Qs9Un4sKqccEzgH/tj7V/DVTJwKdnBKxFZfgQ34OR2Zpz7zGOn889xwsFVXspVWNA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", + "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", + "dev": true + }, + "node_modules/@swc/types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", + "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", + "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.9", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.9.tgz", + "integrity": "sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.33", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.33.tgz", + "integrity": "sha512-v+I7S+hu3PIBoVkKGpSYYpiBT1ijqEzWpzQD62/jm4K74hPpSP7FF9BnKG6+fg2+62weJYkkBWDJlZt5JO/9hg==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz", + "integrity": "sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.5", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.5.tgz", + "integrity": "sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.0.tgz", + "integrity": "sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.9.0", + "@typescript-eslint/type-utils": "6.9.0", + "@typescript-eslint/utils": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.0.tgz", + "integrity": "sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.9.0", + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/typescript-estree": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.0.tgz", + "integrity": "sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.0.tgz", + "integrity": "sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.9.0", + "@typescript-eslint/utils": "6.9.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.0.tgz", + "integrity": "sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.0.tgz", + "integrity": "sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.0.tgz", + "integrity": "sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.9.0", + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/typescript-estree": "6.9.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.0.tgz", + "integrity": "sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.9.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.4.0.tgz", + "integrity": "sha512-m7UaA4Uvz82N/0EOVpZL4XsFIakRqrFKeSNxa1FBLSXGvWrWRBwmZb4qxk+ZIVAZcW3c3dn5YosomDgx62XWcQ==", + "dev": true, + "dependencies": { + "@swc/core": "^1.3.85" + }, + "peerDependencies": { + "vite": "^4" + } + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "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" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", + "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.52.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.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "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.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.3.tgz", + "integrity": "sha512-Hh0wv8bUNY877+sI0BlCUlsS0TYYQqvzEwJsJJPM2WF4RnTStSnSR3zdJYa2nPOJgg3UghXi54lVyMSmpCalzA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", + "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "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 + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, + "@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "dev": true, + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@eslint/js": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", + "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@swc/core": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.95.tgz", + "integrity": "sha512-PMrNeuqIusq9DPDooV3FfNEbZuTu5jKAc04N3Hm6Uk2Fl49cqElLFQ4xvl4qDmVDz97n3n/C1RE0/f6WyGPEiA==", + "dev": true, + "requires": { + "@swc/core-darwin-arm64": "1.3.95", + "@swc/core-darwin-x64": "1.3.95", + "@swc/core-linux-arm-gnueabihf": "1.3.95", + "@swc/core-linux-arm64-gnu": "1.3.95", + "@swc/core-linux-arm64-musl": "1.3.95", + "@swc/core-linux-x64-gnu": "1.3.95", + "@swc/core-linux-x64-musl": "1.3.95", + "@swc/core-win32-arm64-msvc": "1.3.95", + "@swc/core-win32-ia32-msvc": "1.3.95", + "@swc/core-win32-x64-msvc": "1.3.95", + "@swc/counter": "^0.1.1", + "@swc/types": "^0.1.5" + } + }, + "@swc/core-darwin-arm64": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.95.tgz", + "integrity": "sha512-VAuBAP3MNetO/yBIBzvorUXq7lUBwhfpJxYViSxyluMwtoQDhE/XWN598TWMwMl1ZuImb56d7eUsuFdjgY7pJw==", + "dev": true, + "optional": true + }, + "@swc/core-darwin-x64": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.95.tgz", + "integrity": "sha512-20vF2rvUsN98zGLZc+dsEdHvLoCuiYq/1B+TDeE4oolgTFDmI1jKO+m44PzWjYtKGU9QR95sZ6r/uec0QC5O4Q==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm-gnueabihf": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.95.tgz", + "integrity": "sha512-oEudEM8PST1MRNGs+zu0cx5i9uP8TsLE4/L9HHrS07Ck0RJ3DCj3O2fU832nmLe2QxnAGPwBpSO9FntLfOiWEQ==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-gnu": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.95.tgz", + "integrity": "sha512-pIhFI+cuC1aYg+0NAPxwT/VRb32f2ia8oGxUjQR6aJg65gLkUYQzdwuUmpMtFR2WVf7WVFYxUnjo4UyMuyh3ng==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-musl": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.95.tgz", + "integrity": "sha512-ZpbTr+QZDT4OPJfjPAmScqdKKaT+wGurvMU5AhxLaf85DuL8HwUwwlL0n1oLieLc47DwIJEMuKQkYhXMqmJHlg==", + "dev": true, + "optional": true + }, + "@swc/core-linux-x64-gnu": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.95.tgz", + "integrity": "sha512-n9SuHEFtdfSJ+sHdNXNRuIOVprB8nbsz+08apKfdo4lEKq6IIPBBAk5kVhPhkjmg2dFVHVo4Tr/OHXM1tzWCCw==", + "dev": true, + "optional": true + }, + "@swc/core-linux-x64-musl": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.95.tgz", + "integrity": "sha512-L1JrVlsXU3LC0WwmVnMK9HrOT2uhHahAoPNMJnZQpc18a0paO9fqifPG8M/HjNRffMUXR199G/phJsf326UvVg==", + "dev": true, + "optional": true + }, + "@swc/core-win32-arm64-msvc": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.95.tgz", + "integrity": "sha512-YaP4x/aZbUyNdqCBpC2zL8b8n58MEpOUpmOIZK6G1SxGi+2ENht7gs7+iXpWPc0sy7X3YPKmSWMAuui0h8lgAA==", + "dev": true, + "optional": true + }, + "@swc/core-win32-ia32-msvc": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.95.tgz", + "integrity": "sha512-w0u3HI916zT4BC/57gOd+AwAEjXeUlQbGJ9H4p/gzs1zkSHtoDQghVUNy3n/ZKp9KFod/95cA8mbVF9t1+6epQ==", + "dev": true, + "optional": true + }, + "@swc/core-win32-x64-msvc": { + "version": "1.3.95", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.95.tgz", + "integrity": "sha512-5RGnMt0S6gg4Gc6QtPUJ3Qs9Un4sKqccEzgH/tj7V/DVTJwKdnBKxFZfgQ34OR2Zpz7zGOn889xwsFVXspVWNA==", + "dev": true, + "optional": true + }, + "@swc/counter": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", + "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", + "dev": true + }, + "@swc/types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", + "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", + "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.9", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.9.tgz", + "integrity": "sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==", + "dev": true + }, + "@types/react": { + "version": "18.2.33", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.33.tgz", + "integrity": "sha512-v+I7S+hu3PIBoVkKGpSYYpiBT1ijqEzWpzQD62/jm4K74hPpSP7FF9BnKG6+fg2+62weJYkkBWDJlZt5JO/9hg==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz", + "integrity": "sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.5", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.5.tgz", + "integrity": "sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==", + "dev": true + }, + "@types/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.0.tgz", + "integrity": "sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.9.0", + "@typescript-eslint/type-utils": "6.9.0", + "@typescript-eslint/utils": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/parser": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.0.tgz", + "integrity": "sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "6.9.0", + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/typescript-estree": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.0.tgz", + "integrity": "sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.0.tgz", + "integrity": "sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "6.9.0", + "@typescript-eslint/utils": "6.9.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/types": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.0.tgz", + "integrity": "sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.0.tgz", + "integrity": "sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/visitor-keys": "6.9.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/utils": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.0.tgz", + "integrity": "sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.9.0", + "@typescript-eslint/types": "6.9.0", + "@typescript-eslint/typescript-estree": "6.9.0", + "semver": "^7.5.4" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.0.tgz", + "integrity": "sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.9.0", + "eslint-visitor-keys": "^3.4.1" + } + }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "@vitejs/plugin-react-swc": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.4.0.tgz", + "integrity": "sha512-m7UaA4Uvz82N/0EOVpZL4XsFIakRqrFKeSNxa1FBLSXGvWrWRBwmZb4qxk+ZIVAZcW3c3dn5YosomDgx62XWcQ==", + "dev": true, + "requires": { + "@swc/core": "^1.3.85" + } + }, + "acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "requires": { + "@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" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", + "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.52.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.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "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.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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" + } + }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "requires": {} + }, + "eslint-plugin-react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.3.tgz", + "integrity": "sha512-Hh0wv8bUNY877+sI0BlCUlsS0TYYQqvzEwJsJJPM2WF4RnTStSnSR3zdJYa2nPOJgg3UghXi54lVyMSmpCalzA==", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "requires": {} + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "vite": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", + "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "dev": true, + "requires": { + "esbuild": "^0.18.10", + "fsevents": "~2.3.2", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 00000000..63a43fd6 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,28 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", + "@vitejs/plugin-react-swc": "^3.3.2", + "eslint": "^8.45.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.3", + "typescript": "^5.0.2", + "vite": "^4.4.5" + } +} diff --git a/frontend/public/vite.svg b/frontend/public/vite.svg new file mode 100644 index 00000000..e7b8dfb1 --- /dev/null +++ b/frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/App.css b/frontend/src/App.css new file mode 100644 index 00000000..b9d355df --- /dev/null +++ b/frontend/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx new file mode 100644 index 00000000..afe48ac7 --- /dev/null +++ b/frontend/src/App.tsx @@ -0,0 +1,35 @@ +import { useState } from 'react' +import reactLogo from './assets/react.svg' +import viteLogo from '/vite.svg' +import './App.css' + +function App() { + const [count, setCount] = useState(0) + + return ( + <> + +

Vite + React

+
+ +

+ Edit src/App.tsx and save to test HMR +

+
+

+ Click on the Vite and React logos to learn more +

+ + ) +} + +export default App diff --git a/frontend/src/assets/react.svg b/frontend/src/assets/react.svg new file mode 100644 index 00000000..6c87de9b --- /dev/null +++ b/frontend/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 00000000..2c3fac68 --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,69 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx new file mode 100644 index 00000000..3d7150da --- /dev/null +++ b/frontend/src/main.tsx @@ -0,0 +1,10 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App.tsx' +import './index.css' + +ReactDOM.createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/frontend/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 00000000..a7fc6fbf --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 00000000..42872c59 --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 00000000..861b04b3 --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react-swc' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], +}) From fc0c1dee4c7507a5ae4925cce1262c215a76b61d Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Fri, 27 Oct 2023 17:48:36 +0300 Subject: [PATCH 010/667] add TailwindCSS --- frontend/package-lock.json | 1242 ++++++++++++++++++++++++++++++++++- frontend/package.json | 3 + frontend/postcss.config.js | 6 + frontend/src/App.tsx | 3 +- frontend/src/index.css | 4 + frontend/tailwind.config.js | 12 + frontend/vite.config.ts | 9 +- 7 files changed, 1271 insertions(+), 8 deletions(-) create mode 100644 frontend/postcss.config.js create mode 100644 frontend/tailwind.config.js diff --git a/frontend/package-lock.json b/frontend/package-lock.json index e0a5408c..13813bc8 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -17,9 +17,12 @@ "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "@vitejs/plugin-react-swc": "^3.3.2", + "autoprefixer": "^10.4.16", "eslint": "^8.45.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", + "postcss": "^8.4.31", + "tailwindcss": "^3.3.5", "typescript": "^5.0.2", "vite": "^4.4.5" } @@ -33,6 +36,18 @@ "node": ">=0.10.0" } }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -474,6 +489,54 @@ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1031,6 +1094,31 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1046,12 +1134,58 @@ "node": ">=8" } }, + "node_modules/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1074,6 +1208,38 @@ "node": ">=8" } }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1083,6 +1249,35 @@ "node": ">=6" } }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001554", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001554.tgz", + "integrity": "sha512-A2E3U//MBwbJVzebddm1YfNp7Nud5Ip+IPn4BozBmn4KqVX7AvluoIDFWjsv5OkGnKUXQVmMSoMKLa3ScCblcQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1099,6 +1294,45 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1117,6 +1351,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1137,6 +1380,18 @@ "node": ">= 8" } }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", @@ -1166,6 +1421,12 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -1178,6 +1439,12 @@ "node": ">=8" } }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1190,6 +1457,12 @@ "node": ">=6.0.0" } }, + "node_modules/electron-to-chromium": { + "version": "1.4.568", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.568.tgz", + "integrity": "sha512-3TCOv8+BY6Ltpt1/CmGBMups2IdKOyfEmz4J8yIS4xLSeMm0Rf+psSaxLuswG9qMKt+XbNbmADybtXGpTFlbDg==", + "dev": true + }, "node_modules/esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", @@ -1227,6 +1500,15 @@ "@esbuild/win32-x64": "0.18.20" } }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -1517,6 +1799,19 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1537,6 +1832,15 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -1619,6 +1923,18 @@ "node": ">=8" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -1669,6 +1985,30 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1714,6 +2054,15 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/jiti": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", + "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1771,6 +2120,21 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -1855,6 +2219,17 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -1879,6 +2254,48 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1974,6 +2391,12 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -2001,6 +2424,24 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -2029,13 +2470,116 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + }, + "engines": { + "node": ">= 14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/punycode": { @@ -2090,6 +2634,44 @@ "react": "^18.2.0" } }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2249,6 +2831,48 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2261,12 +2885,82 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz", + "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==", + "dev": 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.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "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.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2291,6 +2985,12 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -2328,6 +3028,36 @@ "node": ">=14.17" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -2337,6 +3067,12 @@ "punycode": "^2.1.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, "node_modules/vite": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", @@ -2419,6 +3155,15 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yaml": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", + "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -2439,6 +3184,12 @@ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true }, + "@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true + }, "@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -2654,6 +3405,45 @@ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2981,6 +3771,28 @@ "color-convert": "^2.0.1" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -2993,12 +3805,32 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "dev": true, + "requires": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3018,12 +3850,36 @@ "fill-range": "^7.0.1" } }, + "browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001554", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001554.tgz", + "integrity": "sha512-A2E3U//MBwbJVzebddm1YfNp7Nud5Ip+IPn4BozBmn4KqVX7AvluoIDFWjsv5OkGnKUXQVmMSoMKLa3ScCblcQ==", + "dev": true + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -3034,6 +3890,33 @@ "supports-color": "^7.1.0" } }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -3049,6 +3932,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3066,6 +3955,12 @@ "which": "^2.0.1" } }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, "csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", @@ -3087,6 +3982,12 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -3096,6 +3997,12 @@ "path-type": "^4.0.0" } }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -3105,6 +4012,12 @@ "esutils": "^2.0.2" } }, + "electron-to-chromium": { + "version": "1.4.568", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.568.tgz", + "integrity": "sha512-3TCOv8+BY6Ltpt1/CmGBMups2IdKOyfEmz4J8yIS4xLSeMm0Rf+psSaxLuswG9qMKt+XbNbmADybtXGpTFlbDg==", + "dev": true + }, "esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", @@ -3135,6 +4048,12 @@ "@esbuild/win32-x64": "0.18.20" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3354,6 +4273,12 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, + "fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3367,6 +4292,12 @@ "dev": true, "optional": true }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -3425,6 +4356,15 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -3463,6 +4403,24 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3496,6 +4454,12 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "jiti": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", + "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3547,6 +4511,18 @@ "type-check": "~0.4.0" } }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3610,6 +4586,17 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -3622,6 +4609,36 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3690,6 +4707,12 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -3708,6 +4731,18 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, + "pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true + }, "postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -3719,6 +4754,61 @@ "source-map-js": "^1.0.2" } }, + "postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + } + }, + "postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.11" + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3754,6 +4844,35 @@ "scheduler": "^0.23.0" } }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3852,6 +4971,37 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3861,12 +5011,66 @@ "has-flag": "^4.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tailwindcss": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz", + "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==", + "dev": true, + "requires": { + "@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.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "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.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3883,6 +5087,12 @@ "dev": true, "requires": {} }, + "ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -3904,6 +5114,16 @@ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true }, + "update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -3913,6 +5133,12 @@ "punycode": "^2.1.0" } }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, "vite": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", @@ -3946,6 +5172,12 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "yaml": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", + "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", + "dev": true + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 63a43fd6..bc9d841a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -19,9 +19,12 @@ "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "@vitejs/plugin-react-swc": "^3.3.2", + "autoprefixer": "^10.4.16", "eslint": "^8.45.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", + "postcss": "^8.4.31", + "tailwindcss": "^3.3.5", "typescript": "^5.0.2", "vite": "^4.4.5" } diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 00000000..2e7af2b7 --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index afe48ac7..b0ca300c 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -26,7 +26,8 @@ function App() {

- Click on the Vite and React logos to learn more + Click on the Vite and React logos to learn more. + Tailwind test

) diff --git a/frontend/src/index.css b/frontend/src/index.css index 2c3fac68..ad94ef85 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -1,3 +1,7 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + :root { font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; line-height: 1.5; diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 00000000..d37737fc --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,12 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: {}, + }, + plugins: [], +} + diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 861b04b3..91dc1b7e 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -1,7 +1,12 @@ -import { defineConfig } from 'vite' +import { Plugin, defineConfig } from 'vite' import react from '@vitejs/plugin-react-swc' +import tailwindcss from 'tailwindcss'; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react()], + /* + TS compiler complains about the TailwindCSS plugin, so + providing a bandaid fix for the time being + */ + plugins: [react(), tailwindcss() as unknown as Plugin], }) From 10e53ca1816c1ac850670ea2f28eb061c5ed8b54 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Fri, 27 Oct 2023 17:54:05 +0300 Subject: [PATCH 011/667] add MUI --- frontend/package-lock.json | 1419 ++++++++++++++++++++++++++++++++++-- frontend/package.json | 3 + frontend/src/App.tsx | 2 + 3 files changed, 1371 insertions(+), 53 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 13813bc8..b9bae773 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,6 +8,9 @@ "name": "frontend", "version": "0.0.0", "dependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "@mui/material": "^5.14.15", "react": "^18.2.0", "react-dom": "^18.2.0" }, @@ -48,6 +51,343 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@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.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "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" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@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", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", + "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.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, "node_modules/@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -456,6 +796,40 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@floating-ui/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", + "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", + "dependencies": { + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "dependencies": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.2.tgz", + "integrity": "sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==", + "dependencies": { + "@floating-ui/dom": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.13", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", @@ -537,6 +911,226 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@mui/base": { + "version": "5.0.0-beta.21", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.21.tgz", + "integrity": "sha512-eTKWx3WV/nwmRUK4z4K1MzlMyWCsi3WJ3RtV4DiXZeRh4qd4JCyp1Zzzi8Wv9xM4dEBmqQntFoei716PzwmFfA==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@floating-ui/react-dom": "^2.0.2", + "@mui/types": "^7.2.7", + "@mui/utils": "^5.14.15", + "@popperjs/core": "^2.11.8", + "clsx": "^2.0.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.14.15", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.15.tgz", + "integrity": "sha512-ZCDzBWtCKjAYAlKKM3PA/jG/3uVIDT9ZitOtVixIVmTCQyc5jSV1qhJX8+qIGz4RQZ9KLzPWO2tXd0O5hvzouQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + } + }, + "node_modules/@mui/material": { + "version": "5.14.15", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.15.tgz", + "integrity": "sha512-Gq65rHjvLzkxmhG8bvag851Oqsmru7qkUb/cCI2xu7dQzmY345f9xJRJi72sRGjhaqHXWeRKw/yIwp/7oQoeXg==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@mui/base": "5.0.0-beta.21", + "@mui/core-downloads-tracker": "^5.14.15", + "@mui/system": "^5.14.15", + "@mui/types": "^7.2.7", + "@mui/utils": "^5.14.15", + "@types/react-transition-group": "^4.4.7", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/private-theming": { + "version": "5.14.15", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.15.tgz", + "integrity": "sha512-V2Xh+Tu6A07NoSpup0P9m29GwvNMYl5DegsGWqlOTJyAV7cuuVjmVPqxgvL8xBng4R85xqIQJRMjtYYktoPNuQ==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@mui/utils": "^5.14.15", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.14.15", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.15.tgz", + "integrity": "sha512-mbOjRf867BysNpexe5Z/P8s3bWzDPNowmKhi7gtNDP/LPEeqAfiDSuC4WPTXmtvse1dCl30Nl755OLUYuoi7Mw==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.14.15", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.15.tgz", + "integrity": "sha512-zr0Gdk1RgKiEk+tCMB900LaOpEC8NaGvxtkmMdL/CXgkqQZSVZOt2PQsxJWaw7kE4YVkIe4VukFVc43qcq9u3w==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@mui/private-theming": "^5.14.15", + "@mui/styled-engine": "^5.14.15", + "@mui/types": "^7.2.7", + "@mui/utils": "^5.14.15", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.7", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.7.tgz", + "integrity": "sha512-sofpWmcBqOlTzRbr1cLQuUDKaUYVZTw8ENQrtL39TECRNENEzwgnNPh6WMfqMZlMvf1Aj9DLg74XPjnLr0izUQ==", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.14.15", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.15.tgz", + "integrity": "sha512-QBfHovAvTa0J1jXuYDaXGk+Yyp7+Fm8GSqx6nK2JbezGqzCFfirNdop/+bL9Flh/OQ/64PeXcW4HGDdOge+n3A==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@types/prop-types": "^15.7.8", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -572,6 +1166,15 @@ "node": ">= 8" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@swc/core": { "version": "1.3.95", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.95.tgz", @@ -788,17 +1391,20 @@ "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", "dev": true }, + "node_modules/@types/parse-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.1.tgz", + "integrity": "sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng==" + }, "node_modules/@types/prop-types": { "version": "15.7.9", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.9.tgz", - "integrity": "sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==", - "dev": true + "integrity": "sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==" }, "node_modules/@types/react": { "version": "18.2.33", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.33.tgz", "integrity": "sha512-v+I7S+hu3PIBoVkKGpSYYpiBT1ijqEzWpzQD62/jm4K74hPpSP7FF9BnKG6+fg2+62weJYkkBWDJlZt5JO/9hg==", - "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -814,11 +1420,18 @@ "@types/react": "*" } }, + "node_modules/@types/react-transition-group": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.8.tgz", + "integrity": "sha512-QmQ22q+Pb+HQSn04NL3HtrqHwYMf4h3QKArOy5F8U5nEVMaihBs3SR10WiOM1iwPz5jIo8x/u11al+iEGZZrvg==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/scheduler": { "version": "0.16.5", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.5.tgz", - "integrity": "sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==", - "dev": true + "integrity": "sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==" }, "node_modules/@types/semver": { "version": "7.5.4", @@ -1171,6 +1784,20 @@ "postcss": "^8.1.0" } }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1244,7 +1871,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "engines": { "node": ">=6" } @@ -1333,6 +1959,14 @@ "node": ">= 6" } }, + "node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1366,6 +2000,34 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1395,8 +2057,7 @@ "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/debug": { "version": "4.3.4", @@ -1457,12 +2118,29 @@ "node": ">=6.0.0" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.568", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.568.tgz", "integrity": "sha512-3TCOv8+BY6Ltpt1/CmGBMups2IdKOyfEmz4J8yIS4xLSeMm0Rf+psSaxLuswG9qMKt+XbNbmADybtXGpTFlbDg==", "dev": true }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", @@ -1513,7 +2191,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "engines": { "node": ">=10" }, @@ -1763,6 +2440,11 @@ "node": ">=8" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -1836,7 +2518,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -1927,7 +2608,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dev": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -1935,6 +2615,19 @@ "node": ">= 0.4" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -1948,7 +2641,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -1985,6 +2677,11 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2001,7 +2698,6 @@ "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, "dependencies": { "hasown": "^2.0.0" }, @@ -2086,6 +2782,11 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -2132,8 +2833,7 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/locate-path": { "version": "6.0.0", @@ -2282,7 +2982,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -2356,7 +3055,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -2364,6 +3062,23 @@ "node": ">=6" } }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -2394,14 +3109,12 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, "engines": { "node": ">=8" } @@ -2582,6 +3295,21 @@ "node": ">= 0.8.0" } }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -2634,6 +3362,26 @@ "react": "^18.2.0" } }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -2655,11 +3403,15 @@ "node": ">=8.10.0" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -2676,7 +3428,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "engines": { "node": ">=4" } @@ -2798,6 +3549,14 @@ "node": ">=8" } }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -2831,6 +3590,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, "node_modules/sucrase": { "version": "3.34.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", @@ -2889,7 +3653,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -2961,6 +3724,14 @@ "node": ">=0.8" } }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3190,6 +3961,277 @@ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", "dev": true }, + "@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "requires": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" + }, + "@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/runtime": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, + "@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@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.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "requires": { + "@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" + } + }, + "@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "requires": { + "@emotion/memoize": "^0.8.1" + } + }, + "@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "@emotion/react": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "requires": { + "@babel/runtime": "^7.18.3", + "@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", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", + "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", + "requires": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + } + }, + "@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "requires": {} + }, + "@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, "@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -3382,6 +4424,36 @@ "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", "dev": true }, + "@floating-ui/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", + "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", + "requires": { + "@floating-ui/utils": "^0.1.3" + } + }, + "@floating-ui/dom": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "requires": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "@floating-ui/react-dom": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.2.tgz", + "integrity": "sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==", + "requires": { + "@floating-ui/dom": "^1.5.1" + } + }, + "@floating-ui/utils": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" + }, "@humanwhocodes/config-array": { "version": "0.11.13", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", @@ -3444,6 +4516,97 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "@mui/base": { + "version": "5.0.0-beta.21", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.21.tgz", + "integrity": "sha512-eTKWx3WV/nwmRUK4z4K1MzlMyWCsi3WJ3RtV4DiXZeRh4qd4JCyp1Zzzi8Wv9xM4dEBmqQntFoei716PzwmFfA==", + "requires": { + "@babel/runtime": "^7.23.2", + "@floating-ui/react-dom": "^2.0.2", + "@mui/types": "^7.2.7", + "@mui/utils": "^5.14.15", + "@popperjs/core": "^2.11.8", + "clsx": "^2.0.0", + "prop-types": "^15.8.1" + } + }, + "@mui/core-downloads-tracker": { + "version": "5.14.15", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.15.tgz", + "integrity": "sha512-ZCDzBWtCKjAYAlKKM3PA/jG/3uVIDT9ZitOtVixIVmTCQyc5jSV1qhJX8+qIGz4RQZ9KLzPWO2tXd0O5hvzouQ==" + }, + "@mui/material": { + "version": "5.14.15", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.15.tgz", + "integrity": "sha512-Gq65rHjvLzkxmhG8bvag851Oqsmru7qkUb/cCI2xu7dQzmY345f9xJRJi72sRGjhaqHXWeRKw/yIwp/7oQoeXg==", + "requires": { + "@babel/runtime": "^7.23.2", + "@mui/base": "5.0.0-beta.21", + "@mui/core-downloads-tracker": "^5.14.15", + "@mui/system": "^5.14.15", + "@mui/types": "^7.2.7", + "@mui/utils": "^5.14.15", + "@types/react-transition-group": "^4.4.7", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + } + }, + "@mui/private-theming": { + "version": "5.14.15", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.15.tgz", + "integrity": "sha512-V2Xh+Tu6A07NoSpup0P9m29GwvNMYl5DegsGWqlOTJyAV7cuuVjmVPqxgvL8xBng4R85xqIQJRMjtYYktoPNuQ==", + "requires": { + "@babel/runtime": "^7.23.2", + "@mui/utils": "^5.14.15", + "prop-types": "^15.8.1" + } + }, + "@mui/styled-engine": { + "version": "5.14.15", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.15.tgz", + "integrity": "sha512-mbOjRf867BysNpexe5Z/P8s3bWzDPNowmKhi7gtNDP/LPEeqAfiDSuC4WPTXmtvse1dCl30Nl755OLUYuoi7Mw==", + "requires": { + "@babel/runtime": "^7.23.2", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + } + }, + "@mui/system": { + "version": "5.14.15", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.15.tgz", + "integrity": "sha512-zr0Gdk1RgKiEk+tCMB900LaOpEC8NaGvxtkmMdL/CXgkqQZSVZOt2PQsxJWaw7kE4YVkIe4VukFVc43qcq9u3w==", + "requires": { + "@babel/runtime": "^7.23.2", + "@mui/private-theming": "^5.14.15", + "@mui/styled-engine": "^5.14.15", + "@mui/types": "^7.2.7", + "@mui/utils": "^5.14.15", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + } + }, + "@mui/types": { + "version": "7.2.7", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.7.tgz", + "integrity": "sha512-sofpWmcBqOlTzRbr1cLQuUDKaUYVZTw8ENQrtL39TECRNENEzwgnNPh6WMfqMZlMvf1Aj9DLg74XPjnLr0izUQ==", + "requires": {} + }, + "@mui/utils": { + "version": "5.14.15", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.15.tgz", + "integrity": "sha512-QBfHovAvTa0J1jXuYDaXGk+Yyp7+Fm8GSqx6nK2JbezGqzCFfirNdop/+bL9Flh/OQ/64PeXcW4HGDdOge+n3A==", + "requires": { + "@babel/runtime": "^7.23.2", + "@types/prop-types": "^15.7.8", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3470,6 +4633,11 @@ "fastq": "^1.6.0" } }, + "@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" + }, "@swc/core": { "version": "1.3.95", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.95.tgz", @@ -3578,17 +4746,20 @@ "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", "dev": true }, + "@types/parse-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.1.tgz", + "integrity": "sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng==" + }, "@types/prop-types": { "version": "15.7.9", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.9.tgz", - "integrity": "sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==", - "dev": true + "integrity": "sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==" }, "@types/react": { "version": "18.2.33", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.33.tgz", "integrity": "sha512-v+I7S+hu3PIBoVkKGpSYYpiBT1ijqEzWpzQD62/jm4K74hPpSP7FF9BnKG6+fg2+62weJYkkBWDJlZt5JO/9hg==", - "dev": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -3604,11 +4775,18 @@ "@types/react": "*" } }, + "@types/react-transition-group": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.8.tgz", + "integrity": "sha512-QmQ22q+Pb+HQSn04NL3HtrqHwYMf4h3QKArOy5F8U5nEVMaihBs3SR10WiOM1iwPz5jIo8x/u11al+iEGZZrvg==", + "requires": { + "@types/react": "*" + } + }, "@types/scheduler": { "version": "0.16.5", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.5.tgz", - "integrity": "sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==", - "dev": true + "integrity": "sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==" }, "@types/semver": { "version": "7.5.4", @@ -3819,6 +4997,16 @@ "postcss-value-parser": "^4.2.0" } }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3865,8 +5053,7 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camelcase-css": { "version": "2.0.1", @@ -3917,6 +5104,11 @@ } } }, + "clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==" + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -3944,6 +5136,30 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "dependencies": { + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + } + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3964,8 +5180,7 @@ "csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "debug": { "version": "4.3.4", @@ -4012,12 +5227,29 @@ "esutils": "^2.0.2" } }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "electron-to-chromium": { "version": "1.4.568", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.568.tgz", "integrity": "sha512-3TCOv8+BY6Ltpt1/CmGBMups2IdKOyfEmz4J8yIS4xLSeMm0Rf+psSaxLuswG9qMKt+XbNbmADybtXGpTFlbDg==", "dev": true }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, "esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", @@ -4057,8 +5289,7 @@ "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { "version": "8.52.0", @@ -4246,6 +5477,11 @@ "to-regex-range": "^5.0.1" } }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -4295,8 +5531,7 @@ "function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "glob": { "version": "7.2.3", @@ -4360,11 +5595,25 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dev": true, "requires": { "function-bind": "^1.1.2" } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, "ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -4375,7 +5624,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -4403,6 +5651,11 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -4416,7 +5669,6 @@ "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, "requires": { "hasown": "^2.0.0" } @@ -4480,6 +5732,11 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -4520,8 +5777,7 @@ "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "locate-path": { "version": "6.0.0", @@ -4630,8 +5886,7 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-hash": { "version": "3.0.0", @@ -4684,11 +5939,21 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "requires": { "callsites": "^3.0.0" } }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -4710,14 +5975,12 @@ "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "picocolors": { "version": "1.0.0", @@ -4815,6 +6078,23 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, "punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -4844,6 +6124,22 @@ "scheduler": "^0.23.0" } }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -4862,11 +6158,15 @@ "picomatch": "^2.2.1" } }, + "regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, "resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, "requires": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -4876,8 +6176,7 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, "reusify": { "version": "1.0.4", @@ -4950,6 +6249,11 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + }, "source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -4971,6 +6275,11 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, "sucrase": { "version": "3.34.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", @@ -5014,8 +6323,7 @@ "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "tailwindcss": { "version": "3.3.5", @@ -5071,6 +6379,11 @@ "thenify": ">= 3.1.0 < 4" } }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index bc9d841a..5a943444 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -10,6 +10,9 @@ "preview": "vite preview" }, "dependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "@mui/material": "^5.14.15", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index b0ca300c..6c535f5d 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -2,6 +2,7 @@ import { useState } from 'react' import reactLogo from './assets/react.svg' import viteLogo from '/vite.svg' import './App.css' +import { Button } from '@mui/material' function App() { const [count, setCount] = useState(0) @@ -29,6 +30,7 @@ function App() { Click on the Vite and React logos to learn more. Tailwind test

+ ) } From afc7506d0c9d73d716af6f097c5c62eefa182ba9 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Fri, 27 Oct 2023 18:43:03 +0300 Subject: [PATCH 012/667] add MUI icons --- frontend/package-lock.json | 34 ++++++++++++++++++++++++++++++++++ frontend/package.json | 1 + frontend/src/App.tsx | 5 ++--- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index b9bae773..83571295 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", + "@mui/icons-material": "^5.14.15", "@mui/material": "^5.14.15", "react": "^18.2.0", "react-dom": "^18.2.0" @@ -951,6 +952,31 @@ "url": "https://opencollective.com/mui" } }, + "node_modules/@mui/icons-material": { + "version": "5.14.15", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.15.tgz", + "integrity": "sha512-Dqu21vN/mVNzebJ+ofnKG+CeJYIhHuDs5+0fMEpdpzRt6UojelzdrEkNv+XkO0e1JMclzeXIRx404FirK/CFRw==", + "dependencies": { + "@babel/runtime": "^7.23.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@mui/material": { "version": "5.14.15", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.15.tgz", @@ -4535,6 +4561,14 @@ "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.15.tgz", "integrity": "sha512-ZCDzBWtCKjAYAlKKM3PA/jG/3uVIDT9ZitOtVixIVmTCQyc5jSV1qhJX8+qIGz4RQZ9KLzPWO2tXd0O5hvzouQ==" }, + "@mui/icons-material": { + "version": "5.14.15", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.15.tgz", + "integrity": "sha512-Dqu21vN/mVNzebJ+ofnKG+CeJYIhHuDs5+0fMEpdpzRt6UojelzdrEkNv+XkO0e1JMclzeXIRx404FirK/CFRw==", + "requires": { + "@babel/runtime": "^7.23.2" + } + }, "@mui/material": { "version": "5.14.15", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.15.tgz", diff --git a/frontend/package.json b/frontend/package.json index 5a943444..eee4cb94 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -12,6 +12,7 @@ "dependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", + "@mui/icons-material": "^5.14.15", "@mui/material": "^5.14.15", "react": "^18.2.0", "react-dom": "^18.2.0" diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 6c535f5d..7aa44814 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -2,8 +2,7 @@ import { useState } from 'react' import reactLogo from './assets/react.svg' import viteLogo from '/vite.svg' import './App.css' -import { Button } from '@mui/material' - +import HomeIcon from '@mui/icons-material/Home'; function App() { const [count, setCount] = useState(0) @@ -30,7 +29,7 @@ function App() { Click on the Vite and React logos to learn more. Tailwind test

- + ) } From 34538ca45dfd4dedf1589c8a44140dca5e962c10 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Fri, 27 Oct 2023 18:59:39 +0300 Subject: [PATCH 013/667] configure testing --- frontend/package-lock.json | 3008 +++++++++++++++++++++++++++++++++++- frontend/package.json | 8 +- frontend/src/App.spec.tsx | 10 + frontend/vite.config.ts | 5 +- 4 files changed, 2993 insertions(+), 38 deletions(-) create mode 100644 frontend/src/App.spec.tsx diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 83571295..59eb3707 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -16,6 +16,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { + "@testing-library/react": "^14.0.0", "@types/react": "^18.2.15", "@types/react-dom": "^18.2.7", "@typescript-eslint/eslint-plugin": "^6.0.0", @@ -25,10 +26,12 @@ "eslint": "^8.45.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", + "jsdom": "^22.1.0", "postcss": "^8.4.31", "tailwindcss": "^3.3.5", "typescript": "^5.0.2", - "vite": "^4.4.5" + "vite": "^4.4.5", + "vitest": "^0.34.6" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -864,6 +867,18 @@ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -1201,6 +1216,12 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, "node_modules/@swc/core": { "version": "1.3.95", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.95.tgz", @@ -1411,12 +1432,120 @@ "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", "dev": true }, + "node_modules/@testing-library/dom": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", + "integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/@testing-library/react": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.0.0.tgz", + "integrity": "sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.3.tgz", + "integrity": "sha512-0Z6Tr7wjKJIk4OUEjVUQMtyunLDy339vcMaj38Kpj6jM2OE1p3S4kXExKZ7a3uXQAPCoy3sbrP1wibDKaf39oA==", + "dev": true + }, + "node_modules/@types/chai": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.9.tgz", + "integrity": "sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==", + "dev": true + }, + "node_modules/@types/chai-subset": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.4.tgz", + "integrity": "sha512-CCWNXrJYSUIojZ1149ksLl3AN9cmZ5djf+yUoVVV+NuYrtydItQVlL2ZDqyC6M6O9LWRnVf8yYDxbXHO2TfQZg==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.14", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", "dev": true }, + "node_modules/@types/node": { + "version": "20.8.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.9.tgz", + "integrity": "sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@types/parse-json": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.1.tgz", @@ -1672,6 +1801,107 @@ "vite": "^4" } }, + "node_modules/@vitest/expect": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", + "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", + "dev": true, + "dependencies": { + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", + "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", + "dev": true, + "dependencies": { + "@vitest/utils": "0.34.6", + "p-limit": "^4.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/snapshot": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", + "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", + "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", + "dev": true, + "dependencies": { + "tinyspy": "^2.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", + "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, "node_modules/acorn": { "version": "8.11.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", @@ -1693,6 +1923,27 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1764,6 +2015,28 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -1773,6 +2046,21 @@ "node": ">=8" } }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, "node_modules/autoprefixer": { "version": "10.4.16", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", @@ -1810,6 +2098,18 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", @@ -1893,6 +2193,29 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1930,6 +2253,24 @@ } ] }, + "node_modules/chai": { + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1946,6 +2287,18 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -2011,6 +2364,18 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -2080,11 +2445,37 @@ "node": ">=4" } }, + "node_modules/cssstyle": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", + "dev": true, + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, + "node_modules/data-urls": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", + "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -2102,18 +2493,114 @@ } } }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-equal": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", + "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.1", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2144,6 +2631,12 @@ "node": ">=6.0.0" } }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true + }, "node_modules/dom-helpers": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", @@ -2153,20 +2646,64 @@ "csstype": "^3.0.2" } }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.568", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.568.tgz", "integrity": "sha512-3TCOv8+BY6Ltpt1/CmGBMups2IdKOyfEmz4J8yIS4xLSeMm0Rf+psSaxLuswG9qMKt+XbNbmADybtXGpTFlbDg==", "dev": true }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { "is-arrayish": "^0.2.1" } }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", @@ -2507,6 +3044,29 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fraction.js": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", @@ -2548,6 +3108,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -2615,12 +3208,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2630,6 +3244,57 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", @@ -2654,6 +3319,57 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -2703,11 +3419,67 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2720,6 +3492,34 @@ "node": ">=8" } }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", @@ -2731,6 +3531,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2752,6 +3567,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2761,6 +3585,21 @@ "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -2770,6 +3609,122 @@ "node": ">=8" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2802,6 +3757,48 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdom": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", + "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", + "domexception": "^4.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -2825,6 +3822,12 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -2861,6 +3864,18 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -2893,6 +3908,15 @@ "loose-envify": "cli.js" } }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -2905,6 +3929,27 @@ "node": ">=10" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2927,6 +3972,27 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2939,6 +4005,18 @@ "node": "*" } }, + "node_modules/mlly": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", + "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "ufo": "^1.3.0" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3004,6 +4082,12 @@ "node": ">=0.10.0" } }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3021,6 +4105,58 @@ "node": ">= 6" } }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3105,6 +4241,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -3145,6 +4293,21 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", + "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "dev": true + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -3181,6 +4344,17 @@ "node": ">= 6" } }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, "node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -3321,6 +4495,32 @@ "node": ">= 0.8.0" } }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -3336,6 +4536,12 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -3345,6 +4551,12 @@ "node": ">=6" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -3434,6 +4646,29 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -3499,6 +4734,12 @@ "fsevents": "~2.3.2" } }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -3522,6 +4763,24 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -3545,6 +4804,35 @@ "node": ">=10" } }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3566,6 +4854,26 @@ "node": ">=8" } }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -3592,6 +4900,30 @@ "node": ">=0.10.0" } }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "node_modules/std-env": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", + "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==", + "dev": true + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -3616,6 +4948,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", @@ -3686,6 +5030,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, "node_modules/tailwindcss": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz", @@ -3750,6 +5100,30 @@ "node": ">=0.8" } }, + "node_modules/tinybench": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", + "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", + "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", + "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -3770,6 +5144,33 @@ "node": ">=8.0" } }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dev": true, + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/ts-api-utils": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", @@ -3800,6 +5201,15 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -3825,6 +5235,27 @@ "node": ">=14.17" } }, + "node_modules/ufo": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.1.tgz", + "integrity": "sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==", + "dev": true + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -3864,6 +5295,16 @@ "punycode": "^2.1.0" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -3925,6 +5366,161 @@ } } }, + "node_modules/vite-node": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", + "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.4.0", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", + "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", + "dev": true, + "dependencies": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.34.6", + "@vitest/runner": "0.34.6", + "@vitest/snapshot": "0.34.6", + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "acorn": "^8.9.0", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.10", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.3.3", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.7.0", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", + "vite-node": "0.34.6", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", + "dev": true, + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3940,12 +5536,114 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -4503,6 +6201,15 @@ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, "@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -4672,6 +6379,12 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, "@swc/core": { "version": "1.3.95", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.95.tgz", @@ -4774,12 +6487,100 @@ "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", "dev": true }, + "@testing-library/dom": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", + "integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + } + } + }, + "@testing-library/react": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.0.0.tgz", + "integrity": "sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "@types/aria-query": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.3.tgz", + "integrity": "sha512-0Z6Tr7wjKJIk4OUEjVUQMtyunLDy339vcMaj38Kpj6jM2OE1p3S4kXExKZ7a3uXQAPCoy3sbrP1wibDKaf39oA==", + "dev": true + }, + "@types/chai": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.9.tgz", + "integrity": "sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==", + "dev": true + }, + "@types/chai-subset": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.4.tgz", + "integrity": "sha512-CCWNXrJYSUIojZ1149ksLl3AN9cmZ5djf+yUoVVV+NuYrtydItQVlL2ZDqyC6M6O9LWRnVf8yYDxbXHO2TfQZg==", + "dev": true, + "requires": { + "@types/chai": "*" + } + }, "@types/json-schema": { "version": "7.0.14", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", "dev": true }, + "@types/node": { + "version": "20.8.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.9.tgz", + "integrity": "sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, "@types/parse-json": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.1.tgz", @@ -4940,9 +6741,85 @@ "integrity": "sha512-m7UaA4Uvz82N/0EOVpZL4XsFIakRqrFKeSNxa1FBLSXGvWrWRBwmZb4qxk+ZIVAZcW3c3dn5YosomDgx62XWcQ==", "dev": true, "requires": { - "@swc/core": "^1.3.85" + "@swc/core": "^1.3.85" + } + }, + "@vitest/expect": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", + "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", + "dev": true, + "requires": { + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "chai": "^4.3.10" + } + }, + "@vitest/runner": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", + "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", + "dev": true, + "requires": { + "@vitest/utils": "0.34.6", + "p-limit": "^4.0.0", + "pathe": "^1.1.1" + }, + "dependencies": { + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true + } + } + }, + "@vitest/snapshot": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", + "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", + "dev": true, + "requires": { + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "pretty-format": "^29.5.0" + } + }, + "@vitest/spy": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", + "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", + "dev": true, + "requires": { + "tinyspy": "^2.1.1" + } + }, + "@vitest/utils": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", + "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", + "dev": true, + "requires": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" } }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, "acorn": { "version": "8.11.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", @@ -4956,6 +6833,21 @@ "dev": true, "requires": {} }, + "acorn-walk": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -5011,12 +6903,43 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "requires": { + "deep-equal": "^2.0.5" + } + }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, "autoprefixer": { "version": "10.4.16", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", @@ -5031,6 +6954,12 @@ "postcss-value-parser": "^4.2.0" } }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, "babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", @@ -5084,6 +7013,23 @@ "update-browserslist-db": "^1.0.13" } }, + "cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true + }, + "call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -5101,6 +7047,21 @@ "integrity": "sha512-A2E3U//MBwbJVzebddm1YfNp7Nud5Ip+IPn4BozBmn4KqVX7AvluoIDFWjsv5OkGnKUXQVmMSoMKLa3ScCblcQ==", "dev": true }, + "chai": { + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -5111,6 +7072,15 @@ "supports-color": "^7.1.0" } }, + "check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "requires": { + "get-func-name": "^2.0.2" + } + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -5158,6 +7128,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -5211,11 +7190,31 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, + "cssstyle": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", + "dev": true, + "requires": { + "rrweb-cssom": "^0.6.0" + } + }, "csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, + "data-urls": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", + "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", + "dev": true, + "requires": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.0" + } + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -5225,18 +7224,93 @@ "ms": "2.1.2" } }, + "decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-equal": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", + "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.1", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + } + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, "didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, + "diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -5261,6 +7335,12 @@ "esutils": "^2.0.2" } }, + "dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true + }, "dom-helpers": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", @@ -5270,12 +7350,27 @@ "csstype": "^3.0.2" } }, + "domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "requires": { + "webidl-conversions": "^7.0.0" + } + }, "electron-to-chromium": { "version": "1.4.568", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.568.tgz", "integrity": "sha512-3TCOv8+BY6Ltpt1/CmGBMups2IdKOyfEmz4J8yIS4xLSeMm0Rf+psSaxLuswG9qMKt+XbNbmADybtXGpTFlbDg==", "dev": true }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -5284,6 +7379,23 @@ "is-arrayish": "^0.2.1" } }, + "es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + } + }, "esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", @@ -5543,6 +7655,26 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, "fraction.js": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", @@ -5567,6 +7699,30 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -5613,18 +7769,63 @@ "slash": "^3.0.0" } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", @@ -5648,6 +7849,45 @@ } } }, + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, "ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -5685,53 +7925,214 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "requires": { + "hasown": "^2.0.0" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, "requires": { - "binary-extensions": "^2.0.0" + "call-bind": "^1.0.2" } }, - "is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "requires": { - "hasown": "^2.0.0" + "has-tostringtag": "^1.0.0" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "which-typed-array": "^1.1.11" } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "isexe": { @@ -5760,6 +8161,37 @@ "argparse": "^2.0.1" } }, + "jsdom": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", + "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", + "dev": true, + "requires": { + "abab": "^2.0.6", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", + "domexception": "^4.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", + "xml-name-validator": "^4.0.0" + } + }, "json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -5783,6 +8215,12 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -5813,6 +8251,12 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "dev": true + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -5836,6 +8280,15 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "requires": { + "get-func-name": "^2.0.1" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -5845,6 +8298,21 @@ "yallist": "^4.0.0" } }, + "lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true + }, + "magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -5861,6 +8329,21 @@ "picomatch": "^2.3.1" } }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -5870,6 +8353,18 @@ "brace-expansion": "^1.1.7" } }, + "mlly": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", + "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", + "dev": true, + "requires": { + "acorn": "^8.10.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "ufo": "^1.3.0" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -5917,6 +8412,12 @@ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true }, + "nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -5928,6 +8429,40 @@ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "dev": true }, + "object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5988,6 +8523,15 @@ "lines-and-columns": "^1.1.6" } }, + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -6016,6 +8560,18 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, + "pathe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", + "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -6040,6 +8596,17 @@ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true }, + "pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "requires": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, "postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -6112,6 +8679,25 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, "prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -6129,12 +8715,24 @@ } } }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, "punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6197,6 +8795,23 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, + "regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, "resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -6236,6 +8851,12 @@ "fsevents": "~2.3.2" } }, + "rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6245,6 +8866,21 @@ "queue-microtask": "^1.2.2" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, "scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -6262,6 +8898,29 @@ "lru-cache": "^6.0.0" } }, + "set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "requires": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6277,6 +8936,23 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -6294,6 +8970,27 @@ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, + "stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "std-env": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", + "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==", + "dev": true + }, + "stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "requires": { + "internal-slot": "^1.0.4" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -6309,6 +9006,15 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dev": true, + "requires": { + "acorn": "^8.10.0" + } + }, "stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", @@ -6359,6 +9065,12 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, "tailwindcss": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz", @@ -6413,6 +9125,24 @@ "thenify": ">= 3.1.0 < 4" } }, + "tinybench": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", + "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", + "dev": true + }, + "tinypool": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", + "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "dev": true + }, + "tinyspy": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", + "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", + "dev": true + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -6427,6 +9157,27 @@ "is-number": "^7.0.0" } }, + "tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + } + }, + "tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dev": true, + "requires": { + "punycode": "^2.3.0" + } + }, "ts-api-utils": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", @@ -6449,6 +9200,12 @@ "prelude-ls": "^1.2.1" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -6461,6 +9218,24 @@ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true }, + "ufo": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.1.tgz", + "integrity": "sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==", + "dev": true + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true + }, "update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -6480,6 +9255,16 @@ "punycode": "^2.1.0" } }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -6498,6 +9283,92 @@ "rollup": "^3.27.1" } }, + "vite-node": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", + "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", + "dev": true, + "requires": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.4.0", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "vitest": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", + "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", + "dev": true, + "requires": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.34.6", + "@vitest/runner": "0.34.6", + "@vitest/snapshot": "0.34.6", + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "acorn": "^8.9.0", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.10", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.3.3", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.7.0", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", + "vite-node": "0.34.6", + "why-is-node-running": "^2.2.2" + } + }, + "w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "requires": { + "xml-name-validator": "^4.0.0" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + } + }, + "whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true + }, + "whatwg-url": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", + "dev": true, + "requires": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -6507,12 +9378,79 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, + "which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "requires": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index eee4cb94..261026bc 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -7,7 +7,8 @@ "dev": "vite", "build": "tsc && vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview" + "preview": "vite preview", + "test": "vitest" }, "dependencies": { "@emotion/react": "^11.11.1", @@ -18,6 +19,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { + "@testing-library/react": "^14.0.0", "@types/react": "^18.2.15", "@types/react-dom": "^18.2.7", "@typescript-eslint/eslint-plugin": "^6.0.0", @@ -27,9 +29,11 @@ "eslint": "^8.45.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", + "jsdom": "^22.1.0", "postcss": "^8.4.31", "tailwindcss": "^3.3.5", "typescript": "^5.0.2", - "vite": "^4.4.5" + "vite": "^4.4.5", + "vitest": "^0.34.6" } } diff --git a/frontend/src/App.spec.tsx b/frontend/src/App.spec.tsx new file mode 100644 index 00000000..d8b42047 --- /dev/null +++ b/frontend/src/App.spec.tsx @@ -0,0 +1,10 @@ +import { describe, it } from 'vitest'; +import { screen, render } from '@testing-library/react'; +import App from './App'; + +describe('App', () => { + it('works', async () => { + render(); + await screen.findByText(/Vite and React/i); + }); +}); \ No newline at end of file diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 91dc1b7e..1d11b19d 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -9,4 +9,7 @@ export default defineConfig({ providing a bandaid fix for the time being */ plugins: [react(), tailwindcss() as unknown as Plugin], -}) + test: { + environment: 'jsdom', + }, +} as unknown as object) From 558e097ea80532acddfd5c15d83fbe32f9263343 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Fri, 27 Oct 2023 19:01:07 +0300 Subject: [PATCH 014/667] simplify the bandaid fix on vite plugins --- frontend/vite.config.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 1d11b19d..280daf51 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -1,14 +1,14 @@ -import { Plugin, defineConfig } from 'vite' +import { defineConfig } from 'vite' import react from '@vitejs/plugin-react-swc' import tailwindcss from 'tailwindcss'; // https://vitejs.dev/config/ export default defineConfig({ /* - TS compiler complains about the TailwindCSS plugin, so + TS compiler complains about some of the plugins, so providing a bandaid fix for the time being */ - plugins: [react(), tailwindcss() as unknown as Plugin], + plugins: [react(), tailwindcss()], test: { environment: 'jsdom', }, From d3fe1f36c5c071243a55c42cd8c79e488e83957f Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Fri, 27 Oct 2023 19:18:15 +0300 Subject: [PATCH 015/667] add initial basic documentation --- frontend/README.md | 33 +++++++++------------------------ 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/frontend/README.md b/frontend/README.md index 1ebe379f..554900e8 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,27 +1,12 @@ -# React + TypeScript + Vite +# Cardflow frontend -This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. - -Currently, two official plugins are available: - -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh - -## Expanding the ESLint configuration - -If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: - -- Configure the top-level `parserOptions` property like this: - -```js - parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - project: ['./tsconfig.json', './tsconfig.node.json'], - tsconfigRootDir: __dirname, - }, +## How to run +```bash +npm run dev ``` +By default, the app runs on localhost:5173. -- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked` -- Optionally add `plugin:@typescript-eslint/stylistic-type-checked` -- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list +## How to run tests +```bash +npm run test +``` \ No newline at end of file From 9769afe4c0230e540eb0e5088b09c6829c3d6df3 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Fri, 27 Oct 2023 20:26:48 +0300 Subject: [PATCH 016/667] setup cleanup for each test --- frontend/test-config/tests-setup.ts | 7 +++++++ frontend/tsconfig.json | 2 +- frontend/vite.config.ts | 4 +++- 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 frontend/test-config/tests-setup.ts diff --git a/frontend/test-config/tests-setup.ts b/frontend/test-config/tests-setup.ts new file mode 100644 index 00000000..7dab6540 --- /dev/null +++ b/frontend/test-config/tests-setup.ts @@ -0,0 +1,7 @@ +import { afterEach } from 'vitest'; +import { cleanup } from '@testing-library/react'; +import '@testing-library/jest-dom/vitest'; + +afterEach(() => { + cleanup(); +}); \ No newline at end of file diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index a7fc6fbf..0ec04968 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -20,6 +20,6 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, - "include": ["src"], + "include": ["src", "test-config/tests-setup.ts"], "references": [{ "path": "./tsconfig.node.json" }] } diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 280daf51..74db61a9 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -10,6 +10,8 @@ export default defineConfig({ */ plugins: [react(), tailwindcss()], test: { + globals: true, environment: 'jsdom', + setUpFiles: ['./test-config/tests-setup.ts'], }, -} as unknown as object) +} as unknown as object); From 7dfe02afcc40c453a64c8275c2d4d9d899ad152b Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Sat, 28 Oct 2023 18:04:11 +0300 Subject: [PATCH 017/667] add prettier --- frontend/.prettierrc.json | 11 +++++++++++ frontend/package-lock.json | 22 ++++++++++++++++++++++ frontend/package.json | 3 ++- 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 frontend/.prettierrc.json diff --git a/frontend/.prettierrc.json b/frontend/.prettierrc.json new file mode 100644 index 00000000..ef9e269d --- /dev/null +++ b/frontend/.prettierrc.json @@ -0,0 +1,11 @@ +{ + "printWidth": 100, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "quoteProps": "as-needed", + "trailingComma": "all", + "bracketSpacing": true, + "arrowParens": "always" +} \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 59eb3707..fd229ff4 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -28,6 +28,7 @@ "eslint-plugin-react-refresh": "^0.4.3", "jsdom": "^22.1.0", "postcss": "^8.4.31", + "prettier": "^3.0.3", "tailwindcss": "^3.3.5", "typescript": "^5.0.2", "vite": "^4.4.5", @@ -4495,6 +4496,21 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", @@ -8679,6 +8695,12 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true + }, "pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 261026bc..7d035260 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -34,6 +34,7 @@ "tailwindcss": "^3.3.5", "typescript": "^5.0.2", "vite": "^4.4.5", - "vitest": "^0.34.6" + "vitest": "^0.34.6", + "prettier": "^3.0.3" } } From f5cb0d25a0df915296055236c375aced2eac7912 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Sat, 28 Oct 2023 18:08:23 +0300 Subject: [PATCH 018/667] add ESLint --- frontend/.eslintrc.cjs | 112 ++++- frontend/package-lock.json | 827 +++++++++++++++++++++++++++++++++++++ frontend/package.json | 5 +- frontend/tsconfig.json | 7 +- 4 files changed, 935 insertions(+), 16 deletions(-) diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs index d6c95379..877b9d4f 100644 --- a/frontend/.eslintrc.cjs +++ b/frontend/.eslintrc.cjs @@ -1,18 +1,104 @@ module.exports = { - root: true, - env: { browser: true, es2020: true }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:react-hooks/recommended', - ], - ignorePatterns: ['dist', '.eslintrc.cjs'], parser: '@typescript-eslint/parser', - plugins: ['react-refresh'], + parserOptions: { + project: 'tsconfig.json', + tsconfigRootDir: __dirname, + sourceType: 'module', + }, + plugins: ['@typescript-eslint/eslint-plugin', 'prettier'], + extends: ['plugin:@typescript-eslint/recommended'], + root: true, + env: { + node: true, + jest: true, + }, + ignorePatterns: ['.eslintrc.js'], rules: { - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, + 'prettier/prettier': 'error', + indent: 'off', + quotes: ['error', 'single'], + 'linebreak-style': ['error', 'unix'], + semi: ['error', 'always'], + 'comma-dangle': ['error', 'always-multiline'], + '@typescript-eslint/interface-name-prefix': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/adjacent-overload-signatures': 'error', + '@typescript-eslint/consistent-type-assertions': 'error', + '@typescript-eslint/dot-notation': 'error', + '@typescript-eslint/no-misused-new': 'error', + '@typescript-eslint/no-namespace': 'error', + '@typescript-eslint/no-var-requires': 'error', + '@typescript-eslint/prefer-for-of': 'error', + '@typescript-eslint/prefer-function-type': 'error', + '@typescript-eslint/prefer-namespace-keyword': 'error', + '@typescript-eslint/ban-types': [ + 'error', + { + types: { + Object: { + message: 'Avoid using the `Object` type. Did you mean `object`?', + }, + Function: { + message: + 'Avoid using the `Function` type. Prefer a specific function type, like `() => void`.', + }, + Boolean: { + message: 'Avoid using the `Boolean` type. Did you mean `boolean`?', + }, + Number: { + message: 'Avoid using the `Number` type. Did you mean `number`?', + }, + String: { + message: 'Avoid using the `String` type. Did you mean `string`?', + }, + Symbol: { + message: 'Avoid using the `Symbol` type. Did you mean `symbol`?', + }, + }, + }, + ], + '@typescript-eslint/quotes': ['error', 'single'], + '@typescript-eslint/triple-slash-reference': [ + 'error', + { + path: 'always', + types: 'prefer-import', + lib: 'always', + }, + ], + '@typescript-eslint/unified-signatures': 'error', + 'constructor-super': 'error', + eqeqeq: ['error', 'smart'], + 'guard-for-in': 'error', + 'max-len': 'off', + 'new-parens': 'error', + 'no-bitwise': 'error', + 'no-caller': 'error', + 'no-cond-assign': 'error', + 'no-console': 'warn', + 'no-debugger': 'error', + 'no-eval': 'error', + + 'no-new-wrappers': 'error', + 'no-throw-literal': 'error', + 'no-trailing-spaces': 'error', + 'no-undef-init': 'error', + + 'no-unsafe-finally': 'error', + 'no-unused-labels': 'error', + 'no-var': 'error', + 'object-shorthand': 'error', + 'prefer-const': 'error', + radix: 'error', + 'spaced-comment': [ + 'error', + 'always', + { + markers: ['/'], + }, ], + 'use-isnan': 'error', }, -} +}; diff --git a/frontend/package-lock.json b/frontend/package-lock.json index fd229ff4..f68b603c 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -24,6 +24,7 @@ "@vitejs/plugin-react-swc": "^3.3.2", "autoprefixer": "^10.4.16", "eslint": "^8.45.0", + "eslint-plugin-prettier": "^5.0.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", "jsdom": "^22.1.0", @@ -1208,6 +1209,26 @@ "node": ">= 8" } }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -2131,6 +2152,15 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -2140,6 +2170,18 @@ "node": ">=8" } }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2194,6 +2236,21 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cac": { "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", @@ -2547,6 +2604,40 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-data-property": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", @@ -2561,6 +2652,18 @@ "node": ">= 0.4" } }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", @@ -2817,6 +2920,35 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-plugin-prettier": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", + "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, "node_modules/eslint-plugin-react-hooks": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", @@ -2925,12 +3057,41 @@ "node": ">=0.10.0" } }, + "node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "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" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "node_modules/fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -3142,6 +3303,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -3359,6 +3532,15 @@ "node": ">= 6" } }, + "node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -3547,6 +3729,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3568,6 +3765,24 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -3653,6 +3868,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -3720,6 +3947,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -3951,6 +4205,12 @@ "node": ">=12" } }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -3994,6 +4254,18 @@ "node": ">= 0.6" } }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -4083,6 +4355,33 @@ "node": ">=0.10.0" } }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/nwsapi": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", @@ -4167,6 +4466,39 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -4511,6 +4843,18 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", @@ -4756,6 +5100,110 @@ "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", "dev": true }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/run-applescript/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/run-applescript/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -4890,6 +5338,12 @@ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -4952,6 +5406,18 @@ "node": ">=8" } }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -5052,6 +5518,22 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/tailwindcss": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz", @@ -5140,6 +5622,18 @@ "node": ">=14.0.0" } }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -5205,6 +5699,12 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -5272,6 +5772,15 @@ "node": ">= 4.0.0" } }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -6390,6 +6899,20 @@ "fastq": "^1.6.0" } }, + "@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + } + }, "@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -6992,12 +7515,27 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "requires": { + "big-integer": "^1.6.44" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -7029,6 +7567,15 @@ "update-browserslist-db": "^1.0.13" } }, + "bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "requires": { + "run-applescript": "^5.0.0" + } + }, "cac": { "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", @@ -7287,6 +7834,28 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "requires": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + } + }, + "default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "requires": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + } + }, "define-data-property": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", @@ -7298,6 +7867,12 @@ "has-property-descriptors": "^1.0.0" } }, + "define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true + }, "define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", @@ -7499,6 +8074,16 @@ "text-table": "^0.2.0" } }, + "eslint-plugin-prettier": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", + "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + } + }, "eslint-plugin-react-hooks": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", @@ -7570,12 +8155,35 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "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" + } + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -7739,6 +8347,12 @@ "hasown": "^2.0.0" } }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -7895,6 +8509,12 @@ "debug": "4" } }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true + }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -8029,6 +8649,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -8044,6 +8670,15 @@ "is-extglob": "^2.1.1" } }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "requires": { + "is-docker": "^3.0.0" + } + }, "is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -8102,6 +8737,12 @@ "call-bind": "^1.0.2" } }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -8145,6 +8786,23 @@ "get-intrinsic": "^1.1.1" } }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + }, + "dependencies": { + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + } + } + }, "isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -8329,6 +8987,12 @@ "@jridgewell/sourcemap-codec": "^1.4.15" } }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -8360,6 +9024,12 @@ "mime-db": "1.52.0" } }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -8428,6 +9098,23 @@ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + } + } + }, "nwsapi": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", @@ -8488,6 +9175,27 @@ "wrappy": "1" } }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "requires": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + } + }, "optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -8701,6 +9409,15 @@ "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", @@ -8879,6 +9596,76 @@ "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", "dev": true }, + "run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + } + } + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -8975,6 +9762,12 @@ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -9022,6 +9815,12 @@ "ansi-regex": "^5.0.1" } }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -9093,6 +9892,16 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "requires": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + } + }, "tailwindcss": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz", @@ -9165,6 +9974,12 @@ "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", "dev": true }, + "titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -9213,6 +10028,12 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -9258,6 +10079,12 @@ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true + }, "update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", diff --git a/frontend/package.json b/frontend/package.json index 7d035260..14998fe0 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -27,14 +27,15 @@ "@vitejs/plugin-react-swc": "^3.3.2", "autoprefixer": "^10.4.16", "eslint": "^8.45.0", + "eslint-plugin-prettier": "^5.0.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", "jsdom": "^22.1.0", "postcss": "^8.4.31", + "prettier": "^3.0.3", "tailwindcss": "^3.3.5", "typescript": "^5.0.2", "vite": "^4.4.5", - "vitest": "^0.34.6", - "prettier": "^3.0.3" + "vitest": "^0.34.6" } } diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 0ec04968..2a25c138 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -20,6 +20,11 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, - "include": ["src", "test-config/tests-setup.ts"], + "include": [ + "src", + "test-config/tests-setup.ts", + ".eslintrc.cjs", + "vite.config.ts" + ], "references": [{ "path": "./tsconfig.node.json" }] } From 359edd007532bbffd5aed90df9971a11b8cc64b4 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Sat, 28 Oct 2023 18:15:49 +0300 Subject: [PATCH 019/667] apply formatting rules to current files --- frontend/src/App.spec.tsx | 2 +- frontend/src/App.tsx | 20 +++++++++----------- frontend/src/main.tsx | 10 +++++----- frontend/test-config/tests-setup.ts | 2 +- frontend/vite.config.ts | 6 +++--- 5 files changed, 19 insertions(+), 21 deletions(-) diff --git a/frontend/src/App.spec.tsx b/frontend/src/App.spec.tsx index d8b42047..700c9114 100644 --- a/frontend/src/App.spec.tsx +++ b/frontend/src/App.spec.tsx @@ -7,4 +7,4 @@ describe('App', () => { render(); await screen.findByText(/Vite and React/i); }); -}); \ No newline at end of file +}); diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 7aa44814..2d1b4d57 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,10 +1,10 @@ -import { useState } from 'react' -import reactLogo from './assets/react.svg' -import viteLogo from '/vite.svg' -import './App.css' +import { useState } from 'react'; +import reactLogo from './assets/react.svg'; +import viteLogo from '/vite.svg'; +import './App.css'; import HomeIcon from '@mui/icons-material/Home'; function App() { - const [count, setCount] = useState(0) + const [count, setCount] = useState(0); return ( <> @@ -18,20 +18,18 @@ function App() {

Vite + React

- +

Edit src/App.tsx and save to test HMR

- Click on the Vite and React logos to learn more. + Click on the Vite and React logos to learn more. Tailwind test

- ) + ); } -export default App +export default App; diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index 3d7150da..9bb419d3 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -1,10 +1,10 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import App from './App.tsx' -import './index.css' +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App.tsx'; +import './index.css'; ReactDOM.createRoot(document.getElementById('root')!).render( , -) +); diff --git a/frontend/test-config/tests-setup.ts b/frontend/test-config/tests-setup.ts index 7dab6540..97650fd9 100644 --- a/frontend/test-config/tests-setup.ts +++ b/frontend/test-config/tests-setup.ts @@ -4,4 +4,4 @@ import '@testing-library/jest-dom/vitest'; afterEach(() => { cleanup(); -}); \ No newline at end of file +}); diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 74db61a9..c187532a 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -1,10 +1,10 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react-swc' +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react-swc'; import tailwindcss from 'tailwindcss'; // https://vitejs.dev/config/ export default defineConfig({ - /* + /* TS compiler complains about some of the plugins, so providing a bandaid fix for the time being */ From 75f398c9378a69c61bc7282bbbe457e2a9df457f Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Sat, 28 Oct 2023 18:33:33 +0300 Subject: [PATCH 020/667] configure a basic MUI ThemeProvider --- frontend/src/App.tsx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 2d1b4d57..851c6611 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,13 +1,22 @@ -import { useState } from 'react'; +import { useMemo, useState } from 'react'; import reactLogo from './assets/react.svg'; import viteLogo from '/vite.svg'; import './App.css'; import HomeIcon from '@mui/icons-material/Home'; +import { CssBaseline, createTheme } from '@mui/material'; +import { ThemeProvider } from '@emotion/react'; function App() { const [count, setCount] = useState(0); + /* + TO-DO: configure primary and secondary colors based on + wireframes + */ + const theme = useMemo(() => createTheme(), []); + return ( - <> + +
Vite logo @@ -28,7 +37,7 @@ function App() { Tailwind test

- + ); } From ceecb921cba79be07ef6c7e99c922b55ee8a2a72 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Sat, 28 Oct 2023 18:40:32 +0300 Subject: [PATCH 021/667] purge the dummy content and CSS generated by Vite --- frontend/public/vite.svg | 1 - frontend/src/App.css | 42 -------------------- frontend/src/App.tsx | 36 ++++-------------- frontend/src/assets/react.svg | 1 - frontend/src/index.css | 72 +---------------------------------- 5 files changed, 8 insertions(+), 144 deletions(-) delete mode 100644 frontend/public/vite.svg delete mode 100644 frontend/src/assets/react.svg diff --git a/frontend/public/vite.svg b/frontend/public/vite.svg deleted file mode 100644 index e7b8dfb1..00000000 --- a/frontend/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/src/App.css b/frontend/src/App.css index b9d355df..e69de29b 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -1,42 +0,0 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 851c6611..ff64aa4c 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,13 +1,8 @@ -import { useMemo, useState } from 'react'; -import reactLogo from './assets/react.svg'; -import viteLogo from '/vite.svg'; +import { useMemo } from 'react'; import './App.css'; -import HomeIcon from '@mui/icons-material/Home'; import { CssBaseline, createTheme } from '@mui/material'; import { ThemeProvider } from '@emotion/react'; function App() { - const [count, setCount] = useState(0); - /* TO-DO: configure primary and secondary colors based on wireframes @@ -15,29 +10,12 @@ function App() { const theme = useMemo(() => createTheme(), []); return ( - - -
-

Vite + React

-
- -

- Edit src/App.tsx and save to test HMR -

-
-

- Click on the Vite and React logos to learn more. - Tailwind test -

- - + <> + + +
+
+ ); } diff --git a/frontend/src/assets/react.svg b/frontend/src/assets/react.svg deleted file mode 100644 index 6c87de9b..00000000 --- a/frontend/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/src/index.css b/frontend/src/index.css index ad94ef85..bd6213e1 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -1,73 +1,3 @@ @tailwind base; @tailwind components; -@tailwind utilities; - -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-text-size-adjust: 100%; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} +@tailwind utilities; \ No newline at end of file From 9bceb6e04ab596eadc1394581b302d4084a75478 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Sat, 28 Oct 2023 20:33:58 +0300 Subject: [PATCH 022/667] configure theming of the MUI components --- frontend/src/App.tsx | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index ff64aa4c..ec3752bb 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -2,12 +2,32 @@ import { useMemo } from 'react'; import './App.css'; import { CssBaseline, createTheme } from '@mui/material'; import { ThemeProvider } from '@emotion/react'; + function App() { - /* - TO-DO: configure primary and secondary colors based on - wireframes - */ - const theme = useMemo(() => createTheme(), []); + const theme = useMemo( + () => + createTheme({ + palette: { + primary: { + main: '#000', + }, + secondary: { + main: '#33BFFF', + }, + info: { + main: '#000', + }, + text: { + primary: '#000', + secondary: '#666666', + }, + warning: { + main: '#F73378', + }, + }, + }), + [], + ); return ( <> From 5c8d59513a158b424d30a0058aa0eb62803478de Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Sat, 28 Oct 2023 20:37:32 +0300 Subject: [PATCH 023/667] update README --- frontend/README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/frontend/README.md b/frontend/README.md index 554900e8..6b263495 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -9,4 +9,11 @@ By default, the app runs on localhost:5173. ## How to run tests ```bash npm run test -``` \ No newline at end of file +``` + +## Linting / formatting +To make sure that your code is formatted properly, run: +```bash +npm run lint +``` +and check if there are any formatting errors \ No newline at end of file From 54e225079790a0ecbd24240ccb7a9c0ab0a6c475 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Sat, 28 Oct 2023 20:46:17 +0300 Subject: [PATCH 024/667] remove dummy test for the time being --- frontend/src/App.spec.tsx | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 frontend/src/App.spec.tsx diff --git a/frontend/src/App.spec.tsx b/frontend/src/App.spec.tsx deleted file mode 100644 index 700c9114..00000000 --- a/frontend/src/App.spec.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { describe, it } from 'vitest'; -import { screen, render } from '@testing-library/react'; -import App from './App'; - -describe('App', () => { - it('works', async () => { - render(); - await screen.findByText(/Vite and React/i); - }); -}); From d9289f556ba95cc54bf2fdc4db198ffa432713b1 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Sat, 28 Oct 2023 22:26:14 +0300 Subject: [PATCH 025/667] fix wrong secondary color --- frontend/src/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index ec3752bb..10b0c2a7 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -12,7 +12,7 @@ function App() { main: '#000', }, secondary: { - main: '#33BFFF', + main: '#15B58D', }, info: { main: '#000', From 06306d171ceb21053ee260152ec5720522fef843 Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Sun, 29 Oct 2023 17:55:26 +0200 Subject: [PATCH 026/667] added url files for each app created urls.py for each applications in apps and added all to the main urls file --- backend/cardflow/apps/accounts/urls.py | 5 +++++ backend/cardflow/apps/card/urls.py | 5 +++++ backend/cardflow/apps/user_profile/urls.py | 5 +++++ backend/cardflow/cardflow/urls.py | 6 +++++- 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 backend/cardflow/apps/accounts/urls.py create mode 100644 backend/cardflow/apps/card/urls.py create mode 100644 backend/cardflow/apps/user_profile/urls.py diff --git a/backend/cardflow/apps/accounts/urls.py b/backend/cardflow/apps/accounts/urls.py new file mode 100644 index 00000000..6f9e00ef --- /dev/null +++ b/backend/cardflow/apps/accounts/urls.py @@ -0,0 +1,5 @@ +from django.urls import path + +urlpatterns = [ + +] \ No newline at end of file diff --git a/backend/cardflow/apps/card/urls.py b/backend/cardflow/apps/card/urls.py new file mode 100644 index 00000000..6f9e00ef --- /dev/null +++ b/backend/cardflow/apps/card/urls.py @@ -0,0 +1,5 @@ +from django.urls import path + +urlpatterns = [ + +] \ No newline at end of file diff --git a/backend/cardflow/apps/user_profile/urls.py b/backend/cardflow/apps/user_profile/urls.py new file mode 100644 index 00000000..6f9e00ef --- /dev/null +++ b/backend/cardflow/apps/user_profile/urls.py @@ -0,0 +1,5 @@ +from django.urls import path + +urlpatterns = [ + +] \ No newline at end of file diff --git a/backend/cardflow/cardflow/urls.py b/backend/cardflow/cardflow/urls.py index 3508fd6b..818a97c0 100644 --- a/backend/cardflow/cardflow/urls.py +++ b/backend/cardflow/cardflow/urls.py @@ -15,8 +15,12 @@ 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin -from django.urls import path +from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), + path('', include('apps.accounts.urls')), + path('', include('apps.card.urls')), + path('', include('apps.user_profile.urls')), ] + From 2835bb94102069e622784a13059a25a27ce32a60 Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Mon, 30 Oct 2023 09:57:34 +0200 Subject: [PATCH 027/667] reformated the project files and structure moved files one level above and removed duplicate folder cardflow renamed app - card to yugi removed app - user_profile --- backend/{cardflow/apps => accounts}/__init__.py | 0 backend/{cardflow/apps => }/accounts/admin.py | 0 backend/{cardflow/apps => }/accounts/apps.py | 2 +- .../accounts => accounts/migrations}/__init__.py | 0 backend/{cardflow/apps => }/accounts/models.py | 0 backend/{cardflow/apps => }/accounts/tests.py | 0 backend/{cardflow/apps => }/accounts/urls.py | 0 backend/{cardflow/apps => }/accounts/views.py | 0 backend/backend_project_files.txt | 1 - backend/cardflow/apps/user_profile/__init__.py | 0 backend/cardflow/apps/user_profile/admin.py | 3 --- backend/cardflow/apps/user_profile/apps.py | 6 ------ .../apps/user_profile/migrations/__init__.py | 0 backend/cardflow/apps/user_profile/models.py | 3 --- backend/cardflow/apps/user_profile/tests.py | 3 --- backend/cardflow/apps/user_profile/urls.py | 5 ----- backend/cardflow/apps/user_profile/views.py | 3 --- backend/cardflow/{cardflow => }/asgi.py | 0 backend/cardflow/cardflow/__init__.py | 0 backend/cardflow/requirements.txt | Bin 306 -> 0 bytes backend/cardflow/{cardflow => }/settings.py | 5 ++--- backend/cardflow/{cardflow => }/urls.py | 5 ++--- backend/cardflow/{cardflow => }/wsgi.py | 0 backend/{cardflow => }/docker-compose.yml | 0 backend/{cardflow => }/manage.py | 0 .../migrations/__init__.py => requirements.txt} | 0 backend/{cardflow/apps/card => yugi}/__init__.py | 0 backend/{cardflow/apps/card => yugi}/admin.py | 0 backend/{cardflow/apps/card => yugi}/apps.py | 4 ++-- .../apps/card => yugi}/migrations/__init__.py | 0 backend/{cardflow/apps/card => yugi}/models.py | 0 backend/{cardflow/apps/card => yugi}/tests.py | 0 backend/{cardflow/apps/card => yugi}/urls.py | 0 backend/{cardflow/apps/card => yugi}/views.py | 0 34 files changed, 7 insertions(+), 33 deletions(-) rename backend/{cardflow/apps => accounts}/__init__.py (100%) rename backend/{cardflow/apps => }/accounts/admin.py (100%) rename backend/{cardflow/apps => }/accounts/apps.py (82%) rename backend/{cardflow/apps/accounts => accounts/migrations}/__init__.py (100%) rename backend/{cardflow/apps => }/accounts/models.py (100%) rename backend/{cardflow/apps => }/accounts/tests.py (100%) rename backend/{cardflow/apps => }/accounts/urls.py (100%) rename backend/{cardflow/apps => }/accounts/views.py (100%) delete mode 100644 backend/backend_project_files.txt delete mode 100644 backend/cardflow/apps/user_profile/__init__.py delete mode 100644 backend/cardflow/apps/user_profile/admin.py delete mode 100644 backend/cardflow/apps/user_profile/apps.py delete mode 100644 backend/cardflow/apps/user_profile/migrations/__init__.py delete mode 100644 backend/cardflow/apps/user_profile/models.py delete mode 100644 backend/cardflow/apps/user_profile/tests.py delete mode 100644 backend/cardflow/apps/user_profile/urls.py delete mode 100644 backend/cardflow/apps/user_profile/views.py rename backend/cardflow/{cardflow => }/asgi.py (100%) delete mode 100644 backend/cardflow/cardflow/__init__.py delete mode 100644 backend/cardflow/requirements.txt rename backend/cardflow/{cardflow => }/settings.py (98%) rename backend/cardflow/{cardflow => }/urls.py (85%) rename backend/cardflow/{cardflow => }/wsgi.py (100%) rename backend/{cardflow => }/docker-compose.yml (100%) rename backend/{cardflow => }/manage.py (100%) rename backend/{cardflow/apps/accounts/migrations/__init__.py => requirements.txt} (100%) rename backend/{cardflow/apps/card => yugi}/__init__.py (100%) rename backend/{cardflow/apps/card => yugi}/admin.py (100%) rename backend/{cardflow/apps/card => yugi}/apps.py (64%) rename backend/{cardflow/apps/card => yugi}/migrations/__init__.py (100%) rename backend/{cardflow/apps/card => yugi}/models.py (100%) rename backend/{cardflow/apps/card => yugi}/tests.py (100%) rename backend/{cardflow/apps/card => yugi}/urls.py (100%) rename backend/{cardflow/apps/card => yugi}/views.py (100%) diff --git a/backend/cardflow/apps/__init__.py b/backend/accounts/__init__.py similarity index 100% rename from backend/cardflow/apps/__init__.py rename to backend/accounts/__init__.py diff --git a/backend/cardflow/apps/accounts/admin.py b/backend/accounts/admin.py similarity index 100% rename from backend/cardflow/apps/accounts/admin.py rename to backend/accounts/admin.py diff --git a/backend/cardflow/apps/accounts/apps.py b/backend/accounts/apps.py similarity index 82% rename from backend/cardflow/apps/accounts/apps.py rename to backend/accounts/apps.py index bd9d60a1..3e3c7659 100644 --- a/backend/cardflow/apps/accounts/apps.py +++ b/backend/accounts/apps.py @@ -3,4 +3,4 @@ class AccountsConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' - name = 'apps.accounts' + name = 'accounts' diff --git a/backend/cardflow/apps/accounts/__init__.py b/backend/accounts/migrations/__init__.py similarity index 100% rename from backend/cardflow/apps/accounts/__init__.py rename to backend/accounts/migrations/__init__.py diff --git a/backend/cardflow/apps/accounts/models.py b/backend/accounts/models.py similarity index 100% rename from backend/cardflow/apps/accounts/models.py rename to backend/accounts/models.py diff --git a/backend/cardflow/apps/accounts/tests.py b/backend/accounts/tests.py similarity index 100% rename from backend/cardflow/apps/accounts/tests.py rename to backend/accounts/tests.py diff --git a/backend/cardflow/apps/accounts/urls.py b/backend/accounts/urls.py similarity index 100% rename from backend/cardflow/apps/accounts/urls.py rename to backend/accounts/urls.py diff --git a/backend/cardflow/apps/accounts/views.py b/backend/accounts/views.py similarity index 100% rename from backend/cardflow/apps/accounts/views.py rename to backend/accounts/views.py diff --git a/backend/backend_project_files.txt b/backend/backend_project_files.txt deleted file mode 100644 index e3721f0e..00000000 --- a/backend/backend_project_files.txt +++ /dev/null @@ -1 +0,0 @@ -Backend files here! diff --git a/backend/cardflow/apps/user_profile/__init__.py b/backend/cardflow/apps/user_profile/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/backend/cardflow/apps/user_profile/admin.py b/backend/cardflow/apps/user_profile/admin.py deleted file mode 100644 index 8c38f3f3..00000000 --- a/backend/cardflow/apps/user_profile/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/backend/cardflow/apps/user_profile/apps.py b/backend/cardflow/apps/user_profile/apps.py deleted file mode 100644 index ebe45906..00000000 --- a/backend/cardflow/apps/user_profile/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class UserProfileConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'apps.user_profile' diff --git a/backend/cardflow/apps/user_profile/migrations/__init__.py b/backend/cardflow/apps/user_profile/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/backend/cardflow/apps/user_profile/models.py b/backend/cardflow/apps/user_profile/models.py deleted file mode 100644 index 71a83623..00000000 --- a/backend/cardflow/apps/user_profile/models.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.db import models - -# Create your models here. diff --git a/backend/cardflow/apps/user_profile/tests.py b/backend/cardflow/apps/user_profile/tests.py deleted file mode 100644 index 7ce503c2..00000000 --- a/backend/cardflow/apps/user_profile/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/backend/cardflow/apps/user_profile/urls.py b/backend/cardflow/apps/user_profile/urls.py deleted file mode 100644 index 6f9e00ef..00000000 --- a/backend/cardflow/apps/user_profile/urls.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.urls import path - -urlpatterns = [ - -] \ No newline at end of file diff --git a/backend/cardflow/apps/user_profile/views.py b/backend/cardflow/apps/user_profile/views.py deleted file mode 100644 index 91ea44a2..00000000 --- a/backend/cardflow/apps/user_profile/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/backend/cardflow/cardflow/asgi.py b/backend/cardflow/asgi.py similarity index 100% rename from backend/cardflow/cardflow/asgi.py rename to backend/cardflow/asgi.py diff --git a/backend/cardflow/cardflow/__init__.py b/backend/cardflow/cardflow/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/backend/cardflow/requirements.txt b/backend/cardflow/requirements.txt deleted file mode 100644 index 41a89b5fbc65a0e8291c7d01a43052b74df1a99b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 306 zcmYk1OA5k35Cv;3coZcWgW|%S7YW9{#xXM}dU*A9*BBI>EnV@v) zV<$)DnT?2+0gc{S&X$X_rJH^>WAATEA)npCCaPy!m40gC%t8NZ?UiJ+`xc^XugVFt OG|IEa(xCifv#nm?S1yA9 diff --git a/backend/cardflow/cardflow/settings.py b/backend/cardflow/settings.py similarity index 98% rename from backend/cardflow/cardflow/settings.py rename to backend/cardflow/settings.py index deba08c6..f65e64a5 100644 --- a/backend/cardflow/cardflow/settings.py +++ b/backend/cardflow/settings.py @@ -33,9 +33,8 @@ 'rest_framework', 'rest_framework.authtoken', - 'apps.accounts', - 'apps.card', - 'apps.user_profile', + 'accounts', + 'yugi', ] MIDDLEWARE = [ diff --git a/backend/cardflow/cardflow/urls.py b/backend/cardflow/urls.py similarity index 85% rename from backend/cardflow/cardflow/urls.py rename to backend/cardflow/urls.py index 818a97c0..72f7014e 100644 --- a/backend/cardflow/cardflow/urls.py +++ b/backend/cardflow/urls.py @@ -19,8 +19,7 @@ urlpatterns = [ path('admin/', admin.site.urls), - path('', include('apps.accounts.urls')), - path('', include('apps.card.urls')), - path('', include('apps.user_profile.urls')), + path('', include('accounts.urls')), + path('', include('yugi.urls')), ] diff --git a/backend/cardflow/cardflow/wsgi.py b/backend/cardflow/wsgi.py similarity index 100% rename from backend/cardflow/cardflow/wsgi.py rename to backend/cardflow/wsgi.py diff --git a/backend/cardflow/docker-compose.yml b/backend/docker-compose.yml similarity index 100% rename from backend/cardflow/docker-compose.yml rename to backend/docker-compose.yml diff --git a/backend/cardflow/manage.py b/backend/manage.py similarity index 100% rename from backend/cardflow/manage.py rename to backend/manage.py diff --git a/backend/cardflow/apps/accounts/migrations/__init__.py b/backend/requirements.txt similarity index 100% rename from backend/cardflow/apps/accounts/migrations/__init__.py rename to backend/requirements.txt diff --git a/backend/cardflow/apps/card/__init__.py b/backend/yugi/__init__.py similarity index 100% rename from backend/cardflow/apps/card/__init__.py rename to backend/yugi/__init__.py diff --git a/backend/cardflow/apps/card/admin.py b/backend/yugi/admin.py similarity index 100% rename from backend/cardflow/apps/card/admin.py rename to backend/yugi/admin.py diff --git a/backend/cardflow/apps/card/apps.py b/backend/yugi/apps.py similarity index 64% rename from backend/cardflow/apps/card/apps.py rename to backend/yugi/apps.py index 8b98548d..985fb09f 100644 --- a/backend/cardflow/apps/card/apps.py +++ b/backend/yugi/apps.py @@ -1,6 +1,6 @@ from django.apps import AppConfig -class CardConfig(AppConfig): +class YugiConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' - name = 'apps.card' + name = 'yugi' diff --git a/backend/cardflow/apps/card/migrations/__init__.py b/backend/yugi/migrations/__init__.py similarity index 100% rename from backend/cardflow/apps/card/migrations/__init__.py rename to backend/yugi/migrations/__init__.py diff --git a/backend/cardflow/apps/card/models.py b/backend/yugi/models.py similarity index 100% rename from backend/cardflow/apps/card/models.py rename to backend/yugi/models.py diff --git a/backend/cardflow/apps/card/tests.py b/backend/yugi/tests.py similarity index 100% rename from backend/cardflow/apps/card/tests.py rename to backend/yugi/tests.py diff --git a/backend/cardflow/apps/card/urls.py b/backend/yugi/urls.py similarity index 100% rename from backend/cardflow/apps/card/urls.py rename to backend/yugi/urls.py diff --git a/backend/cardflow/apps/card/views.py b/backend/yugi/views.py similarity index 100% rename from backend/cardflow/apps/card/views.py rename to backend/yugi/views.py From ca28a5599e4f6eba922af579fb0df8c0eda2c804 Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Mon, 30 Oct 2023 10:04:19 +0200 Subject: [PATCH 028/667] Update requirements.txt --- backend/requirements.txt | Bin 0 -> 306 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/backend/requirements.txt b/backend/requirements.txt index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..41a89b5fbc65a0e8291c7d01a43052b74df1a99b 100644 GIT binary patch literal 306 zcmYk1OA5k35Cv;3coZcWgW|%S7YW9{#xXM}dU*A9*BBI>EnV@v) zV<$)DnT?2+0gc{S&X$X_rJH^>WAATEA)npCCaPy!m40gC%t8NZ?UiJ+`xc^XugVFt OG|IEa(xCifv#nm?S1yA9 literal 0 HcmV?d00001 From b4cf42b89ee35c67815f295ed3af39a54d634415 Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Mon, 30 Oct 2023 19:46:17 +0200 Subject: [PATCH 029/667] refactored name of the app changed app 'yugi' to 'card' --- backend/{yugi => card}/__init__.py | 0 backend/{yugi => card}/admin.py | 0 backend/{yugi => card}/apps.py | 4 ++-- backend/{yugi => card}/migrations/__init__.py | 0 backend/{yugi => card}/models.py | 0 backend/{yugi => card}/tests.py | 0 backend/{yugi => card}/urls.py | 0 backend/{yugi => card}/views.py | 0 backend/cardflow/settings.py | 2 +- backend/cardflow/urls.py | 2 +- 10 files changed, 4 insertions(+), 4 deletions(-) rename backend/{yugi => card}/__init__.py (100%) rename backend/{yugi => card}/admin.py (100%) rename backend/{yugi => card}/apps.py (66%) rename backend/{yugi => card}/migrations/__init__.py (100%) rename backend/{yugi => card}/models.py (100%) rename backend/{yugi => card}/tests.py (100%) rename backend/{yugi => card}/urls.py (100%) rename backend/{yugi => card}/views.py (100%) diff --git a/backend/yugi/__init__.py b/backend/card/__init__.py similarity index 100% rename from backend/yugi/__init__.py rename to backend/card/__init__.py diff --git a/backend/yugi/admin.py b/backend/card/admin.py similarity index 100% rename from backend/yugi/admin.py rename to backend/card/admin.py diff --git a/backend/yugi/apps.py b/backend/card/apps.py similarity index 66% rename from backend/yugi/apps.py rename to backend/card/apps.py index 985fb09f..ac63c1fa 100644 --- a/backend/yugi/apps.py +++ b/backend/card/apps.py @@ -1,6 +1,6 @@ from django.apps import AppConfig -class YugiConfig(AppConfig): +class CardConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' - name = 'yugi' + name = 'card' diff --git a/backend/yugi/migrations/__init__.py b/backend/card/migrations/__init__.py similarity index 100% rename from backend/yugi/migrations/__init__.py rename to backend/card/migrations/__init__.py diff --git a/backend/yugi/models.py b/backend/card/models.py similarity index 100% rename from backend/yugi/models.py rename to backend/card/models.py diff --git a/backend/yugi/tests.py b/backend/card/tests.py similarity index 100% rename from backend/yugi/tests.py rename to backend/card/tests.py diff --git a/backend/yugi/urls.py b/backend/card/urls.py similarity index 100% rename from backend/yugi/urls.py rename to backend/card/urls.py diff --git a/backend/yugi/views.py b/backend/card/views.py similarity index 100% rename from backend/yugi/views.py rename to backend/card/views.py diff --git a/backend/cardflow/settings.py b/backend/cardflow/settings.py index f65e64a5..bc76e2e9 100644 --- a/backend/cardflow/settings.py +++ b/backend/cardflow/settings.py @@ -34,7 +34,7 @@ 'rest_framework.authtoken', 'accounts', - 'yugi', + 'card', ] MIDDLEWARE = [ diff --git a/backend/cardflow/urls.py b/backend/cardflow/urls.py index 72f7014e..f5c9dc0a 100644 --- a/backend/cardflow/urls.py +++ b/backend/cardflow/urls.py @@ -20,6 +20,6 @@ urlpatterns = [ path('admin/', admin.site.urls), path('', include('accounts.urls')), - path('', include('yugi.urls')), + path('', include('card.urls')), ] From 0f62cd75b8c883bdcaead9218faf6d1a3d8f8530 Mon Sep 17 00:00:00 2001 From: Yulian Prodanov Date: Tue, 31 Oct 2023 14:18:27 +0200 Subject: [PATCH 030/667] add sample env file for setup --- backend/sample.env | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 backend/sample.env diff --git a/backend/sample.env b/backend/sample.env new file mode 100644 index 00000000..2b910813 --- /dev/null +++ b/backend/sample.env @@ -0,0 +1,5 @@ +POSTGRES_PASSWORD=postgres +POSTGRES_USER=postgres +POSTGRES_DB=cardflow_db +PGADMIN_DEFAULT_EMAIL=admin@admin.com +PGADMIN_DEFAULT_PASSWORD=admin From 8df3033566f32a3216972a4138b34b003b53e431 Mon Sep 17 00:00:00 2001 From: Yulian Prodanov Date: Tue, 31 Oct 2023 15:13:22 +0200 Subject: [PATCH 031/667] change reqs file to LF --- backend/requirements.txt | Bin 306 -> 290 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/backend/requirements.txt b/backend/requirements.txt index 41a89b5fbc65a0e8291c7d01a43052b74df1a99b..71189d0f269f7381fc6f9c829ca653a306886eea 100644 GIT binary patch delta 31 ncmdnQw1{bf+(ZSLiFOtfD-=qX$d3>6@kP=Z6L8*9Y{O`awjt~%Cqn?a4`S?8B7X% From 5ecfdec84659062261404c0c23a2755e7020bfd2 Mon Sep 17 00:00:00 2001 From: Yulian Prodanov Date: Tue, 31 Oct 2023 17:03:20 +0200 Subject: [PATCH 032/667] fix sample env --- backend/sample.env | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/backend/sample.env b/backend/sample.env index 2b910813..49e39f92 100644 --- a/backend/sample.env +++ b/backend/sample.env @@ -1,5 +1,14 @@ +DEBUG=True + +# postgres POSTGRES_PASSWORD=postgres POSTGRES_USER=postgres POSTGRES_DB=cardflow_db +POSTGRES_HOST=127.0.0.1 +POSTGRES_PORT=5432 + +SECRET_KEY=super secret + +# pgadmin PGADMIN_DEFAULT_EMAIL=admin@admin.com PGADMIN_DEFAULT_PASSWORD=admin From cab5dd9dbda18eb7a5033f1a22958648c35c7b1f Mon Sep 17 00:00:00 2001 From: Yulian Prodanov Date: Tue, 31 Oct 2023 17:05:36 +0200 Subject: [PATCH 033/667] fix settings to use .env --- backend/cardflow/settings.py | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/backend/cardflow/settings.py b/backend/cardflow/settings.py index bc76e2e9..e782c3a7 100644 --- a/backend/cardflow/settings.py +++ b/backend/cardflow/settings.py @@ -20,7 +20,7 @@ DEBUG = False -ALLOWED_HOSTS = [] +ALLOWED_HOSTS = ['*'] INSTALLED_APPS = [ 'django.contrib.admin', @@ -67,24 +67,14 @@ WSGI_APPLICATION = 'cardflow.wsgi.application' -# Database -# https://docs.djangoproject.com/en/4.2/ref/settings/#databases - -# DATABASES = { -# 'default': { -# 'ENGINE': 'django.db.backends.sqlite3', -# 'NAME': BASE_DIR / 'db.sqlite3', -# } -# } - DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql", - "NAME": os.getenv("DB_NAME"), - "USER": os.getenv("DB_USER"), - "PASSWORD": os.getenv("DB_PASSWORD"), - "HOST": os.getenv("DB_HOST"), - "PORT": "5432", + "NAME": os.getenv("POSTGRES_DB"), + "USER": os.getenv("POSTGRES_USER"), + "PASSWORD": os.getenv("POSTGRES_PASSWORD"), + "HOST": os.getenv("POSTGRES_HOST"), + "PORT": os.getenv("PSOTGRES_PORT") } } From 4d1c25f0ae30afb583a748b6d86a142c3b993824 Mon Sep 17 00:00:00 2001 From: Yulian Prodanov Date: Tue, 31 Oct 2023 21:10:56 +0200 Subject: [PATCH 034/667] fix postgres typo --- backend/cardflow/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/cardflow/settings.py b/backend/cardflow/settings.py index e782c3a7..6ed321e8 100644 --- a/backend/cardflow/settings.py +++ b/backend/cardflow/settings.py @@ -74,7 +74,7 @@ "USER": os.getenv("POSTGRES_USER"), "PASSWORD": os.getenv("POSTGRES_PASSWORD"), "HOST": os.getenv("POSTGRES_HOST"), - "PORT": os.getenv("PSOTGRES_PORT") + "PORT": os.getenv("POSTGRES_PORT") } } From 04beb027a9720fa1a26ffbf5472d8d575a5e694e Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Tue, 31 Oct 2023 23:30:41 +0200 Subject: [PATCH 035/667] create Logo component --- frontend/src/components/Logo/Logo.tsx | 37 ++++++++++++++++++++++++++ frontend/src/components/Logo/README.md | 20 ++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 frontend/src/components/Logo/Logo.tsx create mode 100644 frontend/src/components/Logo/README.md diff --git a/frontend/src/components/Logo/Logo.tsx b/frontend/src/components/Logo/Logo.tsx new file mode 100644 index 00000000..20351cbf --- /dev/null +++ b/frontend/src/components/Logo/Logo.tsx @@ -0,0 +1,37 @@ +import { useTheme } from '@mui/material'; + +interface ILogoProps { + size: number; + color?: string; +} + +/** + * A SVG-based logo whose size and color can be configured with props + * @param props + * @returns + */ +function Logo(props: ILogoProps): JSX.Element { + const theme = useTheme(); + const secondary = theme.palette.secondary.main; + + const color = props.color || 'black'; + + return ( + + + + ~ + + + ); +} + +export default Logo; diff --git a/frontend/src/components/Logo/README.md b/frontend/src/components/Logo/README.md new file mode 100644 index 00000000..cecc1c11 --- /dev/null +++ b/frontend/src/components/Logo/README.md @@ -0,0 +1,20 @@ +# Logo +A SVG-based logo whose size and color can be configured with props + +## Props +* ``size``(**required**) - sets the logo's ``width`` and ``height``. The passed number is expressed in pixels. +* ``color`` - sets the logo's ``fill`` color, defaults to ``black``. + +## Description +Being a SVG, this component scales up perfectly with any size, meaning that it can be rendered as a small logo or a big one. The tilda (~) is always placed in the center. + +**Note:** user select on the logo is disabled. + +## Usage example +```jsx +/* + This will render the logo with a width and height of 50px + and a white fill color. +*/ + +``` From ca9296479b547fe1735ebba9d1535d6447c27ad9 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Tue, 31 Oct 2023 23:31:33 +0200 Subject: [PATCH 036/667] create a base SearchField component --- .../Desktop/Buttons/SearchButton/README.md | 21 +++++++++++ .../Buttons/SearchButton/SearchButton.tsx | 19 ++++++++++ frontend/src/components/SearchField/README.md | 12 +++++++ .../components/SearchField/SearchField.tsx | 36 +++++++++++++++++++ 4 files changed, 88 insertions(+) create mode 100644 frontend/src/components/Navigation/Desktop/Buttons/SearchButton/README.md create mode 100644 frontend/src/components/Navigation/Desktop/Buttons/SearchButton/SearchButton.tsx create mode 100644 frontend/src/components/SearchField/README.md create mode 100644 frontend/src/components/SearchField/SearchField.tsx diff --git a/frontend/src/components/Navigation/Desktop/Buttons/SearchButton/README.md b/frontend/src/components/Navigation/Desktop/Buttons/SearchButton/README.md new file mode 100644 index 00000000..93eb8634 --- /dev/null +++ b/frontend/src/components/Navigation/Desktop/Buttons/SearchButton/README.md @@ -0,0 +1,21 @@ +# SearchButton +A search icon button, intended to be placed within a search field. + +## Description +This button can be used as an input adorment for Material UI's `TextField` component. It is recommended to put the search field somewhere within a `form` tag to trigger a submit event when clicked, as the button itself doesn't have any special functionalities. + +## Usage example +```jsx +/* + The button will be placed at the beginning of the field. + Upon a click, the form will be submitted, triggering the + doSomething function. +*/ +
+ , + }} + /> + +``` diff --git a/frontend/src/components/Navigation/Desktop/Buttons/SearchButton/SearchButton.tsx b/frontend/src/components/Navigation/Desktop/Buttons/SearchButton/SearchButton.tsx new file mode 100644 index 00000000..7f6c7d77 --- /dev/null +++ b/frontend/src/components/Navigation/Desktop/Buttons/SearchButton/SearchButton.tsx @@ -0,0 +1,19 @@ +import { InputAdornment, IconButton } from '@mui/material'; +import SearchIcon from '@mui/icons-material/Search'; + +/** + * A search icon button, intended to be placed at the beginning + * of a search field. + * @returns + */ +function SearchButton(): JSX.Element { + return ( + + + + + + ); +} + +export default SearchButton; diff --git a/frontend/src/components/SearchField/README.md b/frontend/src/components/SearchField/README.md new file mode 100644 index 00000000..c719e223 --- /dev/null +++ b/frontend/src/components/SearchField/README.md @@ -0,0 +1,12 @@ +# SearchField +A field for searching cards + +## Description +This search field is a controlled form which is used to search cards. The field also comes with a search icon button which triggers a submit upon click. + +This component's functionality is currently WIP. + +## Usage example +```jsx + +``` diff --git a/frontend/src/components/SearchField/SearchField.tsx b/frontend/src/components/SearchField/SearchField.tsx new file mode 100644 index 00000000..626a8365 --- /dev/null +++ b/frontend/src/components/SearchField/SearchField.tsx @@ -0,0 +1,36 @@ +import { TextField } from '@mui/material'; +import { ChangeEvent, FormEvent, useState } from 'react'; +import SearchButton from '../Navigation/Desktop/Buttons/SearchButton/SearchButton'; + +function SearchField(): JSX.Element { + function search(event: FormEvent) { + event.preventDefault(); + // TO-DO: implement search functionality at a later point + } + + const [searchQuery, setSearchQuery] = useState(''); + + function updateField(event: ChangeEvent) { + event.preventDefault(); + const target = event.target as HTMLInputElement; + const value = target.value; + setSearchQuery(value); + } + + return ( +
+ , + }} + /> + + ); +} + +export default SearchField; From 25fe47eeb35458c6f815e94bbf4fdb3f42faf668 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Tue, 31 Oct 2023 23:31:47 +0200 Subject: [PATCH 037/667] create ShoppingCartButton --- .../ShoppingCartButton/ShoppingCartButton.tsx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 frontend/src/components/Navigation/Desktop/Buttons/ShoppingCartButton/ShoppingCartButton.tsx diff --git a/frontend/src/components/Navigation/Desktop/Buttons/ShoppingCartButton/ShoppingCartButton.tsx b/frontend/src/components/Navigation/Desktop/Buttons/ShoppingCartButton/ShoppingCartButton.tsx new file mode 100644 index 00000000..be2c1c47 --- /dev/null +++ b/frontend/src/components/Navigation/Desktop/Buttons/ShoppingCartButton/ShoppingCartButton.tsx @@ -0,0 +1,19 @@ +import { Button, useTheme } from '@mui/material'; +import ShoppingCartIcon from '@mui/icons-material/ShoppingCart'; + +function ShoppingCartButton(): JSX.Element { + const theme = useTheme(); + const secondaryTextColor = theme.palette.text.secondary; + + return ( + + ); +} + +export default ShoppingCartButton; From d34e1a98a07c59a063c58796a093a5b91afd44c3 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Tue, 31 Oct 2023 23:32:28 +0200 Subject: [PATCH 038/667] create NewActionButton component --- .../NewActionButton/NewActionButton.tsx | 67 +++++++++++++++++++ .../Desktop/Buttons/NewActionButton/README.md | 12 ++++ 2 files changed, 79 insertions(+) create mode 100644 frontend/src/components/Navigation/Desktop/Buttons/NewActionButton/NewActionButton.tsx create mode 100644 frontend/src/components/Navigation/Desktop/Buttons/NewActionButton/README.md diff --git a/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton/NewActionButton.tsx b/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton/NewActionButton.tsx new file mode 100644 index 00000000..2db10702 --- /dev/null +++ b/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton/NewActionButton.tsx @@ -0,0 +1,67 @@ +import AddIcon from '@mui/icons-material/Add'; +import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; +import { Button, ListItemIcon, ListItemText, Menu, MenuItem, useTheme } from '@mui/material'; +import { useState } from 'react'; + +interface IMenuItem { + label: string; + href: string; +} + +/** + * A simple button that opens a menu for a new action. + * @returns + */ +function NewActionButton(): JSX.Element { + const theme = useTheme(); + const secondaryTextColor = theme.palette.text.secondary; + + const [anchorEl, setAnchorEl] = useState(null); + const open = Boolean(anchorEl); + + function handleClick(event: React.MouseEvent) { + setAnchorEl(event.currentTarget); + } + + function handleClose() { + setAnchorEl(null); + } + + const menuItems: IMenuItem[] = [ + { + label: 'New listing', + href: '#', + }, + { + label: 'New trade', + href: '#', + }, + ]; + + return ( + <> + + + {menuItems.map((mi) => ( + + + + + + {mi.label} + + + ))} + + + ); +} + +export default NewActionButton; diff --git a/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton/README.md b/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton/README.md new file mode 100644 index 00000000..304a6c46 --- /dev/null +++ b/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton/README.md @@ -0,0 +1,12 @@ +# NewActionButton +A simple button that opens a menu for a new action. + +## Description +Clicking the button reveals a menu that displays two hyperlinks. Each hyperlink leads to a page for creating a new resource. + +This button is used only in the Desktop navigation. + +## Usage example +```jsx + +``` \ No newline at end of file From 8298c9957e813e08de680be4fde76c21b51ab6ee Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Tue, 31 Oct 2023 23:32:37 +0200 Subject: [PATCH 039/667] create NotificationButton component --- .../NotificationButton/NotificationButton.tsx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 frontend/src/components/Navigation/Desktop/Buttons/NotificationButton/NotificationButton.tsx diff --git a/frontend/src/components/Navigation/Desktop/Buttons/NotificationButton/NotificationButton.tsx b/frontend/src/components/Navigation/Desktop/Buttons/NotificationButton/NotificationButton.tsx new file mode 100644 index 00000000..377a6c1b --- /dev/null +++ b/frontend/src/components/Navigation/Desktop/Buttons/NotificationButton/NotificationButton.tsx @@ -0,0 +1,17 @@ +import { IconButton, useTheme } from '@mui/material'; +import NotificationsIcon from '@mui/icons-material/Notifications'; + +function NotificationButton(): JSX.Element { + const theme = useTheme(); + const secondaryTextColor = theme.palette.text.secondary; + return ( + + + + ); +} + +export default NotificationButton; From 79324c9e1a502596442e984ec0168b4176a90dce Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Tue, 31 Oct 2023 23:32:56 +0200 Subject: [PATCH 040/667] create ProfilePictureAvatar component --- .../ProfilePictureAvatar.tsx | 20 +++++++++++++++++++ .../Navigation/ProfilePictureAvatar/README.md | 16 +++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 frontend/src/components/Navigation/ProfilePictureAvatar/ProfilePictureAvatar.tsx create mode 100644 frontend/src/components/Navigation/ProfilePictureAvatar/README.md diff --git a/frontend/src/components/Navigation/ProfilePictureAvatar/ProfilePictureAvatar.tsx b/frontend/src/components/Navigation/ProfilePictureAvatar/ProfilePictureAvatar.tsx new file mode 100644 index 00000000..d1f95933 --- /dev/null +++ b/frontend/src/components/Navigation/ProfilePictureAvatar/ProfilePictureAvatar.tsx @@ -0,0 +1,20 @@ +import { Avatar } from '@mui/material'; + +interface IProfilePictureAvatar { + imageUrl?: string; +} + +/** + * An avatar image which links to the user's profile + * @param props + * @returns + */ +function ProfilePictureAvatar(props: IProfilePictureAvatar): JSX.Element { + return ( + + + + ); +} + +export default ProfilePictureAvatar; diff --git a/frontend/src/components/Navigation/ProfilePictureAvatar/README.md b/frontend/src/components/Navigation/ProfilePictureAvatar/README.md new file mode 100644 index 00000000..c7f08b86 --- /dev/null +++ b/frontend/src/components/Navigation/ProfilePictureAvatar/README.md @@ -0,0 +1,16 @@ +# ProfilePictureAvatar +An avatar image which links to the user's profile + +## Props +* ``imageUrl`` - the URL to the user's image. If the image cannot be resolved, +the component will display a generic avatar image. + +## Description +This component is a link that consists of the user's profile picture. + +The exact implementation of the linking mechanism is pending an integration of a client-side router, as well as advancement of the back-end project. + +## Usage example +```jsx + +``` \ No newline at end of file From cdc8240f71825837d07faa29c4d9169d8ce01cc9 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Tue, 31 Oct 2023 23:33:57 +0200 Subject: [PATCH 041/667] create desktop navigation menus --- .../DesktopGuestNav/DesktopGuestNav.tsx | 20 +++++++++++ .../Desktop/DesktopGuestNav/README.md | 10 ++++++ .../DesktopLoggedInNav/DesktopLoggedInNav.tsx | 34 +++++++++++++++++++ .../Desktop/DesktopLoggedInNav/README.md | 10 ++++++ 4 files changed, 74 insertions(+) create mode 100644 frontend/src/components/Navigation/Desktop/DesktopGuestNav/DesktopGuestNav.tsx create mode 100644 frontend/src/components/Navigation/Desktop/DesktopGuestNav/README.md create mode 100644 frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx create mode 100644 frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/README.md diff --git a/frontend/src/components/Navigation/Desktop/DesktopGuestNav/DesktopGuestNav.tsx b/frontend/src/components/Navigation/Desktop/DesktopGuestNav/DesktopGuestNav.tsx new file mode 100644 index 00000000..0445880d --- /dev/null +++ b/frontend/src/components/Navigation/Desktop/DesktopGuestNav/DesktopGuestNav.tsx @@ -0,0 +1,20 @@ +import { Button } from '@mui/material'; + +/** + * A list of navigation items for guests. + * This component should be rendered on large screens only. + * @returns + */ +function DesktopGuestNav(): JSX.Element { + return ( +
    +
  • + +
  • +
+ ); +} + +export default DesktopGuestNav; diff --git a/frontend/src/components/Navigation/Desktop/DesktopGuestNav/README.md b/frontend/src/components/Navigation/Desktop/DesktopGuestNav/README.md new file mode 100644 index 00000000..5d5f8dbe --- /dev/null +++ b/frontend/src/components/Navigation/Desktop/DesktopGuestNav/README.md @@ -0,0 +1,10 @@ +# DesktopGuestNav +A list of navigation items for guests. This component should be displayed on large screens only. + +## Description +This component displays all navigation items that can be interacted with by guests. It is designed for viewports which are >= 1024px. + +## Usage example +```jsx + +``` \ No newline at end of file diff --git a/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx b/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx new file mode 100644 index 00000000..34898245 --- /dev/null +++ b/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx @@ -0,0 +1,34 @@ +import ProfilePictureAvatar from '../../ProfilePictureAvatar/ProfilePictureAvatar'; +import NewActionButton from '../Buttons/NewActionButton/NewActionButton'; +import NotificationButton from '../Buttons/NotificationButton/NotificationButton'; +import ShoppingCartButton from '../Buttons/ShoppingCartButton/ShoppingCartButton'; + +/** + * A list of navigation items for logged in users. + * This component should be rendered on large screens only. + * @returns + */ +function DesktopLoggedInNav(): JSX.Element { + /* + TO-DO: Implement logic to display the correct navigation menu + based on whether the user is logged in or not + */ + return ( +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+ ); +} + +export default DesktopLoggedInNav; diff --git a/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/README.md b/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/README.md new file mode 100644 index 00000000..964544e3 --- /dev/null +++ b/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/README.md @@ -0,0 +1,10 @@ +# DesktopLoggedInNav +A list of navigation items for logged in users. This component should be displayed on large screens only. + +## Description +This component displays all navigation items that can be interacted with by logged in users. It is designed for viewports which are >= 1024px. + +## Usage example +```jsx + +``` \ No newline at end of file From e33a84791e89d98823f7445d723f49b48a0b137d Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Tue, 31 Oct 2023 23:34:14 +0200 Subject: [PATCH 042/667] create mobile navigation menus --- .../Mobile/MobileGuestNav/MobileGuestNav.tsx | 23 ++++++ .../MobileLoggedInNav/MobileLoggedInNav.tsx | 82 +++++++++++++++++++ .../Navigation/Mobile/MobileNavigation.tsx | 53 ++++++++++++ .../components/Navigation/Mobile/README.md | 22 +++++ 4 files changed, 180 insertions(+) create mode 100644 frontend/src/components/Navigation/Mobile/MobileGuestNav/MobileGuestNav.tsx create mode 100644 frontend/src/components/Navigation/Mobile/MobileLoggedInNav/MobileLoggedInNav.tsx create mode 100644 frontend/src/components/Navigation/Mobile/MobileNavigation.tsx create mode 100644 frontend/src/components/Navigation/Mobile/README.md diff --git a/frontend/src/components/Navigation/Mobile/MobileGuestNav/MobileGuestNav.tsx b/frontend/src/components/Navigation/Mobile/MobileGuestNav/MobileGuestNav.tsx new file mode 100644 index 00000000..ff8b6dd5 --- /dev/null +++ b/frontend/src/components/Navigation/Mobile/MobileGuestNav/MobileGuestNav.tsx @@ -0,0 +1,23 @@ +import { ListItem, ListItemButton, ListItemIcon, ListItemText } from '@mui/material'; +import ExitToAppIcon from '@mui/icons-material/ExitToApp'; + +/** + * Mobile navigation items that can be interacted with by guests. + * @returns + */ +function MobileGuestNav(): JSX.Element { + return ( + <> + + + + + + + + + + ); +} + +export default MobileGuestNav; diff --git a/frontend/src/components/Navigation/Mobile/MobileLoggedInNav/MobileLoggedInNav.tsx b/frontend/src/components/Navigation/Mobile/MobileLoggedInNav/MobileLoggedInNav.tsx new file mode 100644 index 00000000..28b315b4 --- /dev/null +++ b/frontend/src/components/Navigation/Mobile/MobileLoggedInNav/MobileLoggedInNav.tsx @@ -0,0 +1,82 @@ +import { + Avatar, + Collapse, + List, + ListItem, + ListItemAvatar, + ListItemButton, + ListItemIcon, + ListItemText, +} from '@mui/material'; +import AddIcon from '@mui/icons-material/Add'; +import ExpandLess from '@mui/icons-material/ExpandLess'; +import ExpandMore from '@mui/icons-material/ExpandMore'; +import NotificationsIcon from '@mui/icons-material/Notifications'; +import { useState } from 'react'; + +interface INewActionLink { + url: string; + label: string; +} + +/** + * Mobile navigation items that can be interacted with by logged in users. + * @returns + */ +function MobileLoggedInNav(): JSX.Element { + const [expanded, setExpanded] = useState(false); + const actions: INewActionLink[] = [ + { + url: '#', + label: 'New listing', + }, + { + url: '#', + label: 'New trade', + }, + ]; + + return ( + <> + + setExpanded((e) => !e)}> + + + + + {expanded ? : } + + + + + {actions.map((a) => ( + + + + + + + ))} + + + + + + + + + + + + + + + + + + + + ); +} + +export default MobileLoggedInNav; diff --git a/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx b/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx new file mode 100644 index 00000000..7797b755 --- /dev/null +++ b/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx @@ -0,0 +1,53 @@ +import { + List, + ListItem, + ListItemButton, + ListItemIcon, + ListItemText, + ListSubheader, +} from '@mui/material'; +import HomeIcon from '@mui/icons-material/Home'; +import CloseIcon from '@mui/icons-material/Close'; +// import MobileGuestNav from './MobileGuestNav/MobileGuestNav'; +import MobileLoggedInNav from './MobileLoggedInNav/MobileLoggedInNav'; + +interface IMobileNavigationProps { + onClose: (event: React.MouseEvent) => void; +} + +/** + * Navigation menu items for small screens. + * @returns + */ +function MobileNavigation(props: IMobileNavigationProps) { + /* + TO-DO: Implement logic to display the correct navigation menu + based on whether the user is logged in or not + */ + return ( +
+ + Navigation + + + + + + + + + + + + + + + + + + +
+ ); +} + +export default MobileNavigation; diff --git a/frontend/src/components/Navigation/Mobile/README.md b/frontend/src/components/Navigation/Mobile/README.md new file mode 100644 index 00000000..967caafa --- /dev/null +++ b/frontend/src/components/Navigation/Mobile/README.md @@ -0,0 +1,22 @@ +# MobileNavigation +Navigation menu items for small screens. + +## Props +* ``onClose`` (**required**) - within the component can be found a "close menu" button. Clicking the button will call whatever function is passed via this prop. The passed function must accept a ``React.MouseEvent`` argument. + +## Description +This component renders various navigation items in a navigation drawer, which can be opened via a menu button that is also rendered by the component. This component is designed for use in viewports which are smaller than 1024px. + +## Usage + +```jsx +function doSomething(event: React.MouseEvent) { + // ... +} + +/* + If the "Close menu" button is clicked, the "doSomething" function + will be called. +*/ + +``` \ No newline at end of file From 792b6444909a571021549e11fb75944356e392ed Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Tue, 31 Oct 2023 23:34:31 +0200 Subject: [PATCH 043/667] create the Navigation component --- frontend/src/App.tsx | 2 + .../src/components/Navigation/Navigation.tsx | 49 +++++++++++++++++++ frontend/src/components/Navigation/README.md | 14 ++++++ 3 files changed, 65 insertions(+) create mode 100644 frontend/src/components/Navigation/Navigation.tsx create mode 100644 frontend/src/components/Navigation/README.md diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 10b0c2a7..2e32a0c5 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -2,6 +2,7 @@ import { useMemo } from 'react'; import './App.css'; import { CssBaseline, createTheme } from '@mui/material'; import { ThemeProvider } from '@emotion/react'; +import Navigation from './components/Navigation/Navigation'; function App() { const theme = useMemo( @@ -33,6 +34,7 @@ function App() { <> +
diff --git a/frontend/src/components/Navigation/Navigation.tsx b/frontend/src/components/Navigation/Navigation.tsx new file mode 100644 index 00000000..7a9d4a6b --- /dev/null +++ b/frontend/src/components/Navigation/Navigation.tsx @@ -0,0 +1,49 @@ +import { Divider, Drawer, IconButton } from '@mui/material'; +import Logo from '../Logo/Logo'; +import SearchField from '../SearchField/SearchField'; +import DesktopLoggedInNav from './Desktop/DesktopLoggedInNav/DesktopLoggedInNav'; +import MenuIcon from '@mui/icons-material/Menu'; +import { useState } from 'react'; +import MobileNavigation from './Mobile/MobileNavigation'; + +/** + * A component for the application's navigation menu + * @returns + */ +function Navigation(): JSX.Element { + const [mobileMenuIsOpen, setMobileMenuOpen] = useState(false); + + function closeMenu(event: React.MouseEvent) { + event.preventDefault(); + setMobileMenuOpen(false); + } + + function openMenu() { + setMobileMenuOpen(true); + } + + return ( + + ); +} + +export default Navigation; diff --git a/frontend/src/components/Navigation/README.md b/frontend/src/components/Navigation/README.md new file mode 100644 index 00000000..bfaaafaa --- /dev/null +++ b/frontend/src/components/Navigation/README.md @@ -0,0 +1,14 @@ +# Navigation +A component for the application's navigation menu + +## Description +This component wraps up numerous components that make up the entire navigation menu, such as the logo, the search field, and various other navigation items. The navigation menu is mostly responsive, with some items being hidden in a drawer menu for viewports that are smaller than 1024px. Some of the components' functionalities (such as the search field's ability to search for cards) are pending further progress in the front-end and back-end projects. + +The lowest viewport in which the component is mostly usable is roughly 560px, after which some components (particularly the search field and logo) start to overlap. + +The component is currently static and does not render the correct navigation menu for guests or logged in users. This will change in the future. + +## Usage example +```jsx + +``` \ No newline at end of file From f66003192559acbb30aba975e2c11398b5e30b44 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Tue, 31 Oct 2023 23:37:37 +0200 Subject: [PATCH 044/667] add a placeholder hyperlink for the mobile profile link --- .../Navigation/Mobile/MobileLoggedInNav/MobileLoggedInNav.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/Navigation/Mobile/MobileLoggedInNav/MobileLoggedInNav.tsx b/frontend/src/components/Navigation/Mobile/MobileLoggedInNav/MobileLoggedInNav.tsx index 28b315b4..54667892 100644 --- a/frontend/src/components/Navigation/Mobile/MobileLoggedInNav/MobileLoggedInNav.tsx +++ b/frontend/src/components/Navigation/Mobile/MobileLoggedInNav/MobileLoggedInNav.tsx @@ -68,7 +68,7 @@ function MobileLoggedInNav(): JSX.Element { - + From 7a92c9bfae2c1a661f57360a3b74248d4759144c Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Wed, 1 Nov 2023 14:55:55 +0200 Subject: [PATCH 045/667] initial commit --- backend/accounts/models.py | 5 ++++- backend/cardflow/settings.py | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/backend/accounts/models.py b/backend/accounts/models.py index 71a83623..7e21811d 100644 --- a/backend/accounts/models.py +++ b/backend/accounts/models.py @@ -1,3 +1,6 @@ +from django.contrib.auth.models import AbstractUser from django.db import models -# Create your models here. + +class User(AbstractUser): + pass diff --git a/backend/cardflow/settings.py b/backend/cardflow/settings.py index 6ed321e8..9880d497 100644 --- a/backend/cardflow/settings.py +++ b/backend/cardflow/settings.py @@ -116,3 +116,5 @@ # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +AUTH_USER_MODEL = 'accounts.User' From bc9aeea743ef712ad44e0abdbb7cf8bb06a4dd54 Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Wed, 1 Nov 2023 15:53:24 +0200 Subject: [PATCH 046/667] Added models Added Game, Card, YugiohCard models --- .gitignore | 2 +- backend/accounts/migrations/0001_initial.py | 44 ++++++++++++ backend/card/admin.py | 10 ++- backend/card/migrations/0001_initial.py | 23 +++++++ .../card/migrations/0002_alter_card_game.py | 20 ++++++ backend/card/models.py | 20 +++++- backend/cardflow/settings.py | 2 + backend/game/__init__.py | 0 backend/game/admin.py | 11 +++ backend/game/apps.py | 6 ++ backend/game/migrations/0001_initial.py | 21 ++++++ backend/game/migrations/__init__.py | 0 backend/game/models.py | 11 +++ backend/game/tests.py | 3 + backend/game/views.py | 3 + backend/yugioh/__init__.py | 0 backend/yugioh/admin.py | 3 + backend/yugioh/apps.py | 6 ++ backend/yugioh/migrations/0001_initial.py | 34 +++++++++ backend/yugioh/migrations/__init__.py | 0 backend/yugioh/models.py | 69 +++++++++++++++++++ backend/yugioh/tests.py | 3 + backend/yugioh/views.py | 3 + 23 files changed, 291 insertions(+), 3 deletions(-) create mode 100644 backend/accounts/migrations/0001_initial.py create mode 100644 backend/card/migrations/0001_initial.py create mode 100644 backend/card/migrations/0002_alter_card_game.py create mode 100644 backend/game/__init__.py create mode 100644 backend/game/admin.py create mode 100644 backend/game/apps.py create mode 100644 backend/game/migrations/0001_initial.py create mode 100644 backend/game/migrations/__init__.py create mode 100644 backend/game/models.py create mode 100644 backend/game/tests.py create mode 100644 backend/game/views.py create mode 100644 backend/yugioh/__init__.py create mode 100644 backend/yugioh/admin.py create mode 100644 backend/yugioh/apps.py create mode 100644 backend/yugioh/migrations/0001_initial.py create mode 100644 backend/yugioh/migrations/__init__.py create mode 100644 backend/yugioh/models.py create mode 100644 backend/yugioh/tests.py create mode 100644 backend/yugioh/views.py diff --git a/.gitignore b/.gitignore index c4e434a6..fdc49b9b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ __pycache__ venv/ # ENV files and folders -.env* +backend/.env # DB files and folders db* diff --git a/backend/accounts/migrations/0001_initial.py b/backend/accounts/migrations/0001_initial.py new file mode 100644 index 00000000..3d895e99 --- /dev/null +++ b/backend/accounts/migrations/0001_initial.py @@ -0,0 +1,44 @@ +# Generated by Django 4.2.6 on 2023-11-01 13:06 + +import django.contrib.auth.models +import django.contrib.auth.validators +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('auth', '0012_alter_user_first_name_max_length'), + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), + ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), + ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), + ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), + ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), + ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), + ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), + ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')), + ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')), + ], + options={ + 'verbose_name': 'user', + 'verbose_name_plural': 'users', + 'abstract': False, + }, + managers=[ + ('objects', django.contrib.auth.models.UserManager()), + ], + ), + ] diff --git a/backend/card/admin.py b/backend/card/admin.py index 8c38f3f3..4e5f19f4 100644 --- a/backend/card/admin.py +++ b/backend/card/admin.py @@ -1,3 +1,11 @@ from django.contrib import admin -# Register your models here. +from .models import Card + + +@admin.register(Card) +class CardAdmin(admin.ModelAdmin): + list_display = ('id', 'card_name', 'game') + list_filter = ('card_name', 'game') + search_fields = ('card_name', 'game') + list_per_page = 25 diff --git a/backend/card/migrations/0001_initial.py b/backend/card/migrations/0001_initial.py new file mode 100644 index 00000000..2d637e56 --- /dev/null +++ b/backend/card/migrations/0001_initial.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.6 on 2023-11-01 13:24 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Card', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('card_name', models.CharField(max_length=200, unique=True)), + ('game', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='card.card')), + ], + ), + ] diff --git a/backend/card/migrations/0002_alter_card_game.py b/backend/card/migrations/0002_alter_card_game.py new file mode 100644 index 00000000..41069be9 --- /dev/null +++ b/backend/card/migrations/0002_alter_card_game.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2.6 on 2023-11-01 13:38 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('game', '0001_initial'), + ('card', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='card', + name='game', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='game.game'), + ), + ] diff --git a/backend/card/models.py b/backend/card/models.py index 71a83623..a7040bf6 100644 --- a/backend/card/models.py +++ b/backend/card/models.py @@ -1,3 +1,21 @@ +from django.contrib.auth import get_user_model from django.db import models -# Create your models here. +from game.models import Game + +User = get_user_model() + + +class Card(models.Model): + card_name = models.CharField( + max_length=200, + unique=True, + ) + + game = models.ForeignKey( + Game, + on_delete=models.CASCADE, + ) + + def __str__(self): + return self.card_name diff --git a/backend/cardflow/settings.py b/backend/cardflow/settings.py index 9880d497..2332b0cc 100644 --- a/backend/cardflow/settings.py +++ b/backend/cardflow/settings.py @@ -35,6 +35,8 @@ 'accounts', 'card', + 'yugioh', + 'game', ] MIDDLEWARE = [ diff --git a/backend/game/__init__.py b/backend/game/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/game/admin.py b/backend/game/admin.py new file mode 100644 index 00000000..514c9af0 --- /dev/null +++ b/backend/game/admin.py @@ -0,0 +1,11 @@ +from django.contrib import admin + +from game.models import Game + + +@admin.register(Game) +class GameAdmin(admin.ModelAdmin): + list_display = ('game_name',) + list_filter = ('game_name',) + search_fields = ('game_name',) + diff --git a/backend/game/apps.py b/backend/game/apps.py new file mode 100644 index 00000000..8ad49cb8 --- /dev/null +++ b/backend/game/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class GameConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'game' diff --git a/backend/game/migrations/0001_initial.py b/backend/game/migrations/0001_initial.py new file mode 100644 index 00000000..23a6db3c --- /dev/null +++ b/backend/game/migrations/0001_initial.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.6 on 2023-11-01 13:31 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Game', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('game_name', models.CharField(max_length=200, unique=True)), + ], + ), + ] diff --git a/backend/game/migrations/__init__.py b/backend/game/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/game/models.py b/backend/game/models.py new file mode 100644 index 00000000..46c20e20 --- /dev/null +++ b/backend/game/models.py @@ -0,0 +1,11 @@ +from django.db import models + + +class Game(models.Model): + game_name = models.CharField( + max_length=200, + unique=True, + ) + + def __str__(self): + return self.game_name diff --git a/backend/game/tests.py b/backend/game/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/backend/game/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/backend/game/views.py b/backend/game/views.py new file mode 100644 index 00000000..91ea44a2 --- /dev/null +++ b/backend/game/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/backend/yugioh/__init__.py b/backend/yugioh/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/yugioh/admin.py b/backend/yugioh/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/backend/yugioh/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/backend/yugioh/apps.py b/backend/yugioh/apps.py new file mode 100644 index 00000000..e1498f56 --- /dev/null +++ b/backend/yugioh/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class YugiohConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'yugioh' diff --git a/backend/yugioh/migrations/0001_initial.py b/backend/yugioh/migrations/0001_initial.py new file mode 100644 index 00000000..242564e9 --- /dev/null +++ b/backend/yugioh/migrations/0001_initial.py @@ -0,0 +1,34 @@ +# Generated by Django 4.2.6 on 2023-11-01 13:31 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('card', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='YugiohCard', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('yugioh_card_name', models.CharField(max_length=100, unique=True)), + ('type', models.CharField(max_length=100)), + ('frame_type', models.CharField(max_length=100)), + ('description', models.CharField(blank=True, max_length=1000, null=True)), + ('attack', models.CharField(blank=True, max_length=100, null=True)), + ('defense', models.CharField(blank=True, max_length=100, null=True)), + ('level', models.CharField(blank=True, max_length=100, null=True)), + ('race', models.CharField(max_length=100)), + ('attribute', models.CharField(blank=True, max_length=100, null=True)), + ('archetype', models.CharField(blank=True, max_length=100, null=True)), + ('image', models.URLField(blank=True, null=True)), + ('card', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='card.card')), + ], + ), + ] diff --git a/backend/yugioh/migrations/__init__.py b/backend/yugioh/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/yugioh/models.py b/backend/yugioh/models.py new file mode 100644 index 00000000..b04d54ba --- /dev/null +++ b/backend/yugioh/models.py @@ -0,0 +1,69 @@ +from django.db import models + + +class YugiohCard(models.Model): + yugioh_card_name = models.CharField( + max_length=100, + unique=True, + ) + + type = models.CharField( + max_length=100, + ) + + frame_type = models.CharField( + max_length=100, + ) + + description = models.CharField( + max_length=1000, + blank=True, + null=True, + ) + + attack = models.CharField( + max_length=100, + blank=True, + null=True, + ) + + defense = models.CharField( + max_length=100, + blank=True, + null=True, + ) + + level = models.CharField( + max_length=100, + blank=True, + null=True, + ) + + race = models.CharField( + max_length=100, + ) + + attribute = models.CharField( + max_length=100, + blank=True, + null=True, + ) + + archetype = models.CharField( + max_length=100, + blank=True, + null=True, + ) + + image = models.URLField( + blank=True, + null=True, + ) + + card = models.ForeignKey( + 'card.Card', + on_delete=models.CASCADE, + ) + + def __str__(self): + return self.yugioh_card_name diff --git a/backend/yugioh/tests.py b/backend/yugioh/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/backend/yugioh/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/backend/yugioh/views.py b/backend/yugioh/views.py new file mode 100644 index 00000000..91ea44a2 --- /dev/null +++ b/backend/yugioh/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. From 624d6b6555a873a4f795716c01b2fd2ef6fe974e Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Wed, 1 Nov 2023 16:37:38 +0200 Subject: [PATCH 047/667] Added more models Added yugiohcardinset, yugiohcardrarity, yugiohcardset models: --- backend/cardflow/settings.py | 3 +++ backend/yugiohcardinset/__init__.py | 0 backend/yugiohcardinset/admin.py | 10 ++++++++ backend/yugiohcardinset/apps.py | 7 ++++++ .../migrations/0001_initial.py | 22 +++++++++++++++++ .../yugiohcardinset/migrations/__init__.py | 0 backend/yugiohcardinset/models.py | 9 +++++++ backend/yugiohcardinset/tests.py | 3 +++ backend/yugiohcardinset/views.py | 3 +++ backend/yugiohcardrarity/__init__.py | 0 backend/yugiohcardrarity/admin.py | 10 ++++++++ backend/yugiohcardrarity/apps.py | 7 ++++++ .../migrations/0001_initial.py | 24 +++++++++++++++++++ .../yugiohcardrarity/migrations/__init__.py | 0 backend/yugiohcardrarity/models.py | 23 ++++++++++++++++++ backend/yugiohcardrarity/tests.py | 3 +++ backend/yugiohcardrarity/views.py | 3 +++ backend/yugiohcardset/__init__.py | 0 backend/yugiohcardset/admin.py | 10 ++++++++ backend/yugiohcardset/apps.py | 7 ++++++ .../yugiohcardset/migrations/0001_initial.py | 24 +++++++++++++++++++ backend/yugiohcardset/migrations/__init__.py | 0 backend/yugiohcardset/models.py | 18 ++++++++++++++ backend/yugiohcardset/tests.py | 3 +++ backend/yugiohcardset/views.py | 3 +++ 25 files changed, 192 insertions(+) create mode 100644 backend/yugiohcardinset/__init__.py create mode 100644 backend/yugiohcardinset/admin.py create mode 100644 backend/yugiohcardinset/apps.py create mode 100644 backend/yugiohcardinset/migrations/0001_initial.py create mode 100644 backend/yugiohcardinset/migrations/__init__.py create mode 100644 backend/yugiohcardinset/models.py create mode 100644 backend/yugiohcardinset/tests.py create mode 100644 backend/yugiohcardinset/views.py create mode 100644 backend/yugiohcardrarity/__init__.py create mode 100644 backend/yugiohcardrarity/admin.py create mode 100644 backend/yugiohcardrarity/apps.py create mode 100644 backend/yugiohcardrarity/migrations/0001_initial.py create mode 100644 backend/yugiohcardrarity/migrations/__init__.py create mode 100644 backend/yugiohcardrarity/models.py create mode 100644 backend/yugiohcardrarity/tests.py create mode 100644 backend/yugiohcardrarity/views.py create mode 100644 backend/yugiohcardset/__init__.py create mode 100644 backend/yugiohcardset/admin.py create mode 100644 backend/yugiohcardset/apps.py create mode 100644 backend/yugiohcardset/migrations/0001_initial.py create mode 100644 backend/yugiohcardset/migrations/__init__.py create mode 100644 backend/yugiohcardset/models.py create mode 100644 backend/yugiohcardset/tests.py create mode 100644 backend/yugiohcardset/views.py diff --git a/backend/cardflow/settings.py b/backend/cardflow/settings.py index 2332b0cc..832de6a1 100644 --- a/backend/cardflow/settings.py +++ b/backend/cardflow/settings.py @@ -37,6 +37,9 @@ 'card', 'yugioh', 'game', + 'yugiohcardset', + 'yugiohcardrarity', + 'yugiohcardinset', ] MIDDLEWARE = [ diff --git a/backend/yugiohcardinset/__init__.py b/backend/yugiohcardinset/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/yugiohcardinset/admin.py b/backend/yugiohcardinset/admin.py new file mode 100644 index 00000000..ca661a8b --- /dev/null +++ b/backend/yugiohcardinset/admin.py @@ -0,0 +1,10 @@ +from django.contrib import admin + +from yugiohcardinset.models import YugiohCardInSet + + +@admin.register(YugiohCardInSet) +class YugiohCardInSetAdmin(admin.ModelAdmin): + list_display = ('set', 'rarity') + list_filter = ('set', 'rarity') + search_fields = ('set', 'rarity') diff --git a/backend/yugiohcardinset/apps.py b/backend/yugiohcardinset/apps.py new file mode 100644 index 00000000..e56c5bdb --- /dev/null +++ b/backend/yugiohcardinset/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class YugiohcardinsetConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'yugiohcardinset' + verbose_name = 'Yugioh Card In Set' diff --git a/backend/yugiohcardinset/migrations/0001_initial.py b/backend/yugiohcardinset/migrations/0001_initial.py new file mode 100644 index 00000000..9adb2601 --- /dev/null +++ b/backend/yugiohcardinset/migrations/0001_initial.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.6 on 2023-11-01 14:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='YugiohCardInSet', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('rarity', models.CharField(max_length=100)), + ('set', models.CharField(max_length=100)), + ], + ), + ] diff --git a/backend/yugiohcardinset/migrations/__init__.py b/backend/yugiohcardinset/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/yugiohcardinset/models.py b/backend/yugiohcardinset/models.py new file mode 100644 index 00000000..f6eb4320 --- /dev/null +++ b/backend/yugiohcardinset/models.py @@ -0,0 +1,9 @@ +from django.db import models + + +class YugiohCardInSet(models.Model): + rarity = models.CharField(max_length=100) + set = models.CharField(max_length=100) + + def __str__(self): + return f'{self.set} - {self.rarity}' diff --git a/backend/yugiohcardinset/tests.py b/backend/yugiohcardinset/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/backend/yugiohcardinset/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/backend/yugiohcardinset/views.py b/backend/yugiohcardinset/views.py new file mode 100644 index 00000000..91ea44a2 --- /dev/null +++ b/backend/yugiohcardinset/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/backend/yugiohcardrarity/__init__.py b/backend/yugiohcardrarity/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/yugiohcardrarity/admin.py b/backend/yugiohcardrarity/admin.py new file mode 100644 index 00000000..b30ccec1 --- /dev/null +++ b/backend/yugiohcardrarity/admin.py @@ -0,0 +1,10 @@ +from django.contrib import admin + +from yugiohcardrarity.models import YugiohCardRarity + + +@admin.register(YugiohCardRarity) +class YugiohCardRarityAdmin(admin.ModelAdmin): + list_display = ('set', 'rarity') + list_filter = ('set', 'rarity') + search_fields = ('set', 'rarity') diff --git a/backend/yugiohcardrarity/apps.py b/backend/yugiohcardrarity/apps.py new file mode 100644 index 00000000..ce30385d --- /dev/null +++ b/backend/yugiohcardrarity/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class YugiohcardrarityConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'yugiohcardrarity' + verbose_name = 'Yugioh Card Rarity' diff --git a/backend/yugiohcardrarity/migrations/0001_initial.py b/backend/yugiohcardrarity/migrations/0001_initial.py new file mode 100644 index 00000000..f82db0c2 --- /dev/null +++ b/backend/yugiohcardrarity/migrations/0001_initial.py @@ -0,0 +1,24 @@ +# Generated by Django 4.2.6 on 2023-11-01 14:23 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('yugiohcardinset', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='YugiohCardRarity', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('rarity', models.CharField(max_length=100, unique=True)), + ('set', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='yugiohcardinset.yugiohcardinset')), + ], + ), + ] diff --git a/backend/yugiohcardrarity/migrations/__init__.py b/backend/yugiohcardrarity/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/yugiohcardrarity/models.py b/backend/yugiohcardrarity/models.py new file mode 100644 index 00000000..6e19c247 --- /dev/null +++ b/backend/yugiohcardrarity/models.py @@ -0,0 +1,23 @@ +from django.db import models + +from yugiohcardinset.models import YugiohCardInSet + + +class YugiohCardRarity(models.Model): + rarity = models.CharField( + max_length=100, + unique=True, + ) + + set = models.ForeignKey( + YugiohCardInSet, + on_delete=models.CASCADE, + ) + + class Meta: + ordering = ('set', 'rarity') + verbose_name_plural = 'Yugioh Card Rarities' + verbose_name = 'Yugioh Card Rarity' + + def __str__(self): + return f'{self.set} - {self.rarity}' diff --git a/backend/yugiohcardrarity/tests.py b/backend/yugiohcardrarity/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/backend/yugiohcardrarity/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/backend/yugiohcardrarity/views.py b/backend/yugiohcardrarity/views.py new file mode 100644 index 00000000..91ea44a2 --- /dev/null +++ b/backend/yugiohcardrarity/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/backend/yugiohcardset/__init__.py b/backend/yugiohcardset/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/yugiohcardset/admin.py b/backend/yugiohcardset/admin.py new file mode 100644 index 00000000..f1b1d273 --- /dev/null +++ b/backend/yugiohcardset/admin.py @@ -0,0 +1,10 @@ +from django.contrib import admin + +from yugiohcardset.models import YugiohCardSet + + +@admin.register(YugiohCardSet) +class YugiohCardSetAdmin(admin.ModelAdmin): + list_display = ('card_set_name', 'card_in_set') + list_filter = ('card_set_name', 'card_in_set') + search_fields = ('card_set_name', 'card_in_set') diff --git a/backend/yugiohcardset/apps.py b/backend/yugiohcardset/apps.py new file mode 100644 index 00000000..fa409b1a --- /dev/null +++ b/backend/yugiohcardset/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class YugiohcardsetConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'yugiohcardset' + verbose_name = "Yugioh Card Set" diff --git a/backend/yugiohcardset/migrations/0001_initial.py b/backend/yugiohcardset/migrations/0001_initial.py new file mode 100644 index 00000000..1515b4bf --- /dev/null +++ b/backend/yugiohcardset/migrations/0001_initial.py @@ -0,0 +1,24 @@ +# Generated by Django 4.2.6 on 2023-11-01 14:23 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('yugiohcardinset', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='YugiohCardSet', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('card_set_name', models.CharField(max_length=100, unique=True)), + ('card_in_set', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='yugiohcardinset.yugiohcardinset')), + ], + ), + ] diff --git a/backend/yugiohcardset/migrations/__init__.py b/backend/yugiohcardset/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/yugiohcardset/models.py b/backend/yugiohcardset/models.py new file mode 100644 index 00000000..1c6f36b0 --- /dev/null +++ b/backend/yugiohcardset/models.py @@ -0,0 +1,18 @@ +from django.db import models + +from yugiohcardinset.models import YugiohCardInSet + + +class YugiohCardSet(models.Model): + card_set_name = models.CharField( + max_length=100, + unique=True, + ) + + card_in_set = models.ForeignKey( + YugiohCardInSet, + on_delete=models.CASCADE, + ) + + def __str__(self): + return self.card_set_name diff --git a/backend/yugiohcardset/tests.py b/backend/yugiohcardset/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/backend/yugiohcardset/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/backend/yugiohcardset/views.py b/backend/yugiohcardset/views.py new file mode 100644 index 00000000..91ea44a2 --- /dev/null +++ b/backend/yugiohcardset/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. From e981a99722874d6914dce316497a1c17946f3b76 Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Wed, 1 Nov 2023 17:00:56 +0200 Subject: [PATCH 048/667] Update admin.py --- backend/accounts/admin.py | 44 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/backend/accounts/admin.py b/backend/accounts/admin.py index 8c38f3f3..a2b31d25 100644 --- a/backend/accounts/admin.py +++ b/backend/accounts/admin.py @@ -1,3 +1,45 @@ from django.contrib import admin +from django.contrib.auth.admin import UserAdmin as BaseUserAdmin +from django.utils.translation import gettext_lazy as _ +from django.contrib.auth import get_user_model -# Register your models here. +User = get_user_model() + + +class UserAdmin(BaseUserAdmin): + fieldsets = ( + (None, {"fields": ("username", "password")}), + (_("Personal info"), {"fields": ("email", "first_name", "last_name")}), + (_("Permissions"), + { + "fields": ( + "is_active", + "is_staff", + "is_superuser", + "groups", + "user_permissions", + ), + }, + ), + (_("Important dates"), {"fields": ("last_login", "date_joined")}), + ) + add_fieldsets = ( + ( + None, + { + "classes": ("wide",), + "fields": ( + "username", "password1", "password2", "email", "first_name", "last_name", "is_active", "is_staff", "is_superuser" + ), + }, + ), + ) + list_display = ("username", "email", "first_name", "last_name", "is_active", "is_staff", "is_superuser") + list_filter = ("username", "email", "is_superuser", "is_active") + search_fields = ("username", "email", "first_name", "last_name") + ordering = ("username", "email") + list_per_page = 15 + readonly_fields = ('last_login', 'date_joined') + + +admin.site.register(User, UserAdmin) From 6f4b38093c94553df28245ec09106146bea92d41 Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Wed, 1 Nov 2023 18:09:20 +0200 Subject: [PATCH 049/667] Change rarity field in YugiohCardInSet --- .../0002_alter_yugiohcardinset_rarity.py | 20 +++++++++++++++++++ backend/yugiohcardinset/models.py | 5 ++++- .../0002_alter_yugiohcardrarity_options.py | 17 ++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 backend/yugiohcardinset/migrations/0002_alter_yugiohcardinset_rarity.py create mode 100644 backend/yugiohcardrarity/migrations/0002_alter_yugiohcardrarity_options.py diff --git a/backend/yugiohcardinset/migrations/0002_alter_yugiohcardinset_rarity.py b/backend/yugiohcardinset/migrations/0002_alter_yugiohcardinset_rarity.py new file mode 100644 index 00000000..170a586d --- /dev/null +++ b/backend/yugiohcardinset/migrations/0002_alter_yugiohcardinset_rarity.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2.6 on 2023-11-01 16:08 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('yugiohcardrarity', '0002_alter_yugiohcardrarity_options'), + ('yugiohcardinset', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='yugiohcardinset', + name='rarity', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='yugiohcardrarity.yugiohcardrarity'), + ), + ] diff --git a/backend/yugiohcardinset/models.py b/backend/yugiohcardinset/models.py index f6eb4320..4370c6f8 100644 --- a/backend/yugiohcardinset/models.py +++ b/backend/yugiohcardinset/models.py @@ -2,7 +2,10 @@ class YugiohCardInSet(models.Model): - rarity = models.CharField(max_length=100) + rarity = models.ForeignKey( + 'yugiohcardrarity.YugiohCardRarity', + on_delete=models.CASCADE, + ) set = models.CharField(max_length=100) def __str__(self): diff --git a/backend/yugiohcardrarity/migrations/0002_alter_yugiohcardrarity_options.py b/backend/yugiohcardrarity/migrations/0002_alter_yugiohcardrarity_options.py new file mode 100644 index 00000000..36ca6f7a --- /dev/null +++ b/backend/yugiohcardrarity/migrations/0002_alter_yugiohcardrarity_options.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.6 on 2023-11-01 16:08 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('yugiohcardrarity', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='yugiohcardrarity', + options={'ordering': ('set', 'rarity'), 'verbose_name': 'Yugioh Card Rarity', 'verbose_name_plural': 'Yugioh Card Rarities'}, + ), + ] From 4def3b0729514444ae59b4d7063bef7eb1a4b1dd Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Wed, 1 Nov 2023 21:00:26 +0200 Subject: [PATCH 050/667] move the shopping cart button to all navigation menus --- .../Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx | 4 ---- frontend/src/components/Navigation/Navigation.tsx | 2 ++ 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx b/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx index 34898245..c79a0818 100644 --- a/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx +++ b/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx @@ -1,7 +1,6 @@ import ProfilePictureAvatar from '../../ProfilePictureAvatar/ProfilePictureAvatar'; import NewActionButton from '../Buttons/NewActionButton/NewActionButton'; import NotificationButton from '../Buttons/NotificationButton/NotificationButton'; -import ShoppingCartButton from '../Buttons/ShoppingCartButton/ShoppingCartButton'; /** * A list of navigation items for logged in users. @@ -15,9 +14,6 @@ function DesktopLoggedInNav(): JSX.Element { */ return (
    -
  • - -
  • diff --git a/frontend/src/components/Navigation/Navigation.tsx b/frontend/src/components/Navigation/Navigation.tsx index 7a9d4a6b..5b73f8c0 100644 --- a/frontend/src/components/Navigation/Navigation.tsx +++ b/frontend/src/components/Navigation/Navigation.tsx @@ -5,6 +5,7 @@ import DesktopLoggedInNav from './Desktop/DesktopLoggedInNav/DesktopLoggedInNav' import MenuIcon from '@mui/icons-material/Menu'; import { useState } from 'react'; import MobileNavigation from './Mobile/MobileNavigation'; +import ShoppingCartButton from './Desktop/Buttons/ShoppingCartButton/ShoppingCartButton'; /** * A component for the application's navigation menu @@ -30,6 +31,7 @@ function Navigation(): JSX.Element {
    +
    From 8217548527ed78a6db69bf13663703d7232dcc21 Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:58:55 +0200 Subject: [PATCH 051/667] Installed and configured Swagger UI --- backend/cardflow/settings.py | 12 +++++++++--- backend/cardflow/urls.py | 23 ++++------------------- backend/requirements.txt | Bin 290 -> 1154 bytes 3 files changed, 13 insertions(+), 22 deletions(-) diff --git a/backend/cardflow/settings.py b/backend/cardflow/settings.py index 832de6a1..695bef14 100644 --- a/backend/cardflow/settings.py +++ b/backend/cardflow/settings.py @@ -5,7 +5,6 @@ load_dotenv() -# Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent SECRET_KEY = os.getenv("SECRET_KEY") @@ -19,7 +18,6 @@ except: DEBUG = False - ALLOWED_HOSTS = ['*'] INSTALLED_APPS = [ @@ -40,6 +38,8 @@ 'yugiohcardset', 'yugiohcardrarity', 'yugiohcardinset', + 'drf_spectacular', + ] MIDDLEWARE = [ @@ -79,7 +79,7 @@ "USER": os.getenv("POSTGRES_USER"), "PASSWORD": os.getenv("POSTGRES_PASSWORD"), "HOST": os.getenv("POSTGRES_HOST"), - "PORT": os.getenv("POSTGRES_PORT") + "PORT": os.getenv("POSTGRES_PORT") } } @@ -123,3 +123,9 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' AUTH_USER_MODEL = 'accounts.User' + +REST_FRAMEWORK = { + 'TITLE': 'Cardflow APP ', + 'DESCRIPTION': 'This is the API for the Cardflow APP', + 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema', +} diff --git a/backend/cardflow/urls.py b/backend/cardflow/urls.py index f5c9dc0a..873c45f7 100644 --- a/backend/cardflow/urls.py +++ b/backend/cardflow/urls.py @@ -1,25 +1,10 @@ -""" -URL configuration for cardflow project. - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/4.2/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" from django.contrib import admin from django.urls import path, include +from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView +from rest_framework import permissions urlpatterns = [ path('admin/', admin.site.urls), - path('', include('accounts.urls')), - path('', include('card.urls')), + path('api/schema/', SpectacularAPIView.as_view(), name='api-schema'), + path('api/docs/', SpectacularSwaggerView.as_view(url_name='api-schema'), name='api-docs'), ] - diff --git a/backend/requirements.txt b/backend/requirements.txt index 71189d0f269f7381fc6f9c829ca653a306886eea..2bd78c38a565a3e070f79f1cd7c502590a3d916f 100644 GIT binary patch literal 1154 zcmZ`&O;3YR5ZtqgKLt`~Ytw@V6Hmq_CZ0SZANu+MPoSFi$E!2DJZMY|fdD%@GyCy= zzBB3MO`Nn+N+q|r<`T;acPiI%C7JZNTA&z9HJTtg(`b&Y7IBAMHy~yM$~cTAmv=Cc zr35;XS{i&E@NbX2v$6zj>W3_%N}&A69;<`-pl0n7vd@&cT8Iq)Ijk&LADVJRn|cCF#g+2NQ#qJHq)!=w5>ku@A%= zF6@E_DwiFe+*VH0_@-^~sPCj49#QK9JH-0ds^<~!u_^Q(L8-x4iTBS@&o+nN40|3_ zLWNZG$m5n+rBC2|kvrMQqhdL2vRKqk70(ED@(bt0%oS<7PQ(ZLWg8ey8!_yIowgR* z1+*h|$NEi)Puu1W3I{~FO=0T9+3rr0?x3{?E}Y50#f`A7>~Sg!#JSbh>8S_o&k;3o dCwc0qN2JZzwkmXhxIHc>uW(^Z)}fWoe#4|SS%O(@@;7FM$r3DbOk4~A-xLbF From c8a067bff87e45c78a079c2f9da53a74085f8735 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Thu, 2 Nov 2023 22:20:50 +0200 Subject: [PATCH 052/667] remore READMEs --- .../Desktop/Buttons/NewActionButton/README.md | 12 ---------- .../Desktop/Buttons/SearchButton/README.md | 21 ------------------ .../Desktop/DesktopLoggedInNav/README.md | 10 --------- .../components/Navigation/Mobile/README.md | 22 ------------------- .../Navigation/ProfilePictureAvatar/README.md | 16 -------------- frontend/src/components/Navigation/README.md | 14 ------------ frontend/src/components/SearchField/README.md | 12 ---------- 7 files changed, 107 deletions(-) delete mode 100644 frontend/src/components/Navigation/Desktop/Buttons/NewActionButton/README.md delete mode 100644 frontend/src/components/Navigation/Desktop/Buttons/SearchButton/README.md delete mode 100644 frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/README.md delete mode 100644 frontend/src/components/Navigation/Mobile/README.md delete mode 100644 frontend/src/components/Navigation/ProfilePictureAvatar/README.md delete mode 100644 frontend/src/components/Navigation/README.md delete mode 100644 frontend/src/components/SearchField/README.md diff --git a/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton/README.md b/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton/README.md deleted file mode 100644 index 304a6c46..00000000 --- a/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# NewActionButton -A simple button that opens a menu for a new action. - -## Description -Clicking the button reveals a menu that displays two hyperlinks. Each hyperlink leads to a page for creating a new resource. - -This button is used only in the Desktop navigation. - -## Usage example -```jsx - -``` \ No newline at end of file diff --git a/frontend/src/components/Navigation/Desktop/Buttons/SearchButton/README.md b/frontend/src/components/Navigation/Desktop/Buttons/SearchButton/README.md deleted file mode 100644 index 93eb8634..00000000 --- a/frontend/src/components/Navigation/Desktop/Buttons/SearchButton/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# SearchButton -A search icon button, intended to be placed within a search field. - -## Description -This button can be used as an input adorment for Material UI's `TextField` component. It is recommended to put the search field somewhere within a `form` tag to trigger a submit event when clicked, as the button itself doesn't have any special functionalities. - -## Usage example -```jsx -/* - The button will be placed at the beginning of the field. - Upon a click, the form will be submitted, triggering the - doSomething function. -*/ -
    - , - }} - /> - -``` diff --git a/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/README.md b/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/README.md deleted file mode 100644 index 964544e3..00000000 --- a/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# DesktopLoggedInNav -A list of navigation items for logged in users. This component should be displayed on large screens only. - -## Description -This component displays all navigation items that can be interacted with by logged in users. It is designed for viewports which are >= 1024px. - -## Usage example -```jsx - -``` \ No newline at end of file diff --git a/frontend/src/components/Navigation/Mobile/README.md b/frontend/src/components/Navigation/Mobile/README.md deleted file mode 100644 index 967caafa..00000000 --- a/frontend/src/components/Navigation/Mobile/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# MobileNavigation -Navigation menu items for small screens. - -## Props -* ``onClose`` (**required**) - within the component can be found a "close menu" button. Clicking the button will call whatever function is passed via this prop. The passed function must accept a ``React.MouseEvent`` argument. - -## Description -This component renders various navigation items in a navigation drawer, which can be opened via a menu button that is also rendered by the component. This component is designed for use in viewports which are smaller than 1024px. - -## Usage - -```jsx -function doSomething(event: React.MouseEvent) { - // ... -} - -/* - If the "Close menu" button is clicked, the "doSomething" function - will be called. -*/ - -``` \ No newline at end of file diff --git a/frontend/src/components/Navigation/ProfilePictureAvatar/README.md b/frontend/src/components/Navigation/ProfilePictureAvatar/README.md deleted file mode 100644 index c7f08b86..00000000 --- a/frontend/src/components/Navigation/ProfilePictureAvatar/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# ProfilePictureAvatar -An avatar image which links to the user's profile - -## Props -* ``imageUrl`` - the URL to the user's image. If the image cannot be resolved, -the component will display a generic avatar image. - -## Description -This component is a link that consists of the user's profile picture. - -The exact implementation of the linking mechanism is pending an integration of a client-side router, as well as advancement of the back-end project. - -## Usage example -```jsx - -``` \ No newline at end of file diff --git a/frontend/src/components/Navigation/README.md b/frontend/src/components/Navigation/README.md deleted file mode 100644 index bfaaafaa..00000000 --- a/frontend/src/components/Navigation/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Navigation -A component for the application's navigation menu - -## Description -This component wraps up numerous components that make up the entire navigation menu, such as the logo, the search field, and various other navigation items. The navigation menu is mostly responsive, with some items being hidden in a drawer menu for viewports that are smaller than 1024px. Some of the components' functionalities (such as the search field's ability to search for cards) are pending further progress in the front-end and back-end projects. - -The lowest viewport in which the component is mostly usable is roughly 560px, after which some components (particularly the search field and logo) start to overlap. - -The component is currently static and does not render the correct navigation menu for guests or logged in users. This will change in the future. - -## Usage example -```jsx - -``` \ No newline at end of file diff --git a/frontend/src/components/SearchField/README.md b/frontend/src/components/SearchField/README.md deleted file mode 100644 index c719e223..00000000 --- a/frontend/src/components/SearchField/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# SearchField -A field for searching cards - -## Description -This search field is a controlled form which is used to search cards. The field also comes with a search icon button which triggers a submit upon click. - -This component's functionality is currently WIP. - -## Usage example -```jsx - -``` From b0f4e5b5fe5271374b910853797f60a898d749f6 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Thu, 2 Nov 2023 22:23:07 +0200 Subject: [PATCH 053/667] move buttons up a directory --- .../Desktop/Buttons/{NewActionButton => }/NewActionButton.tsx | 0 .../Buttons/{NotificationButton => }/NotificationButton.tsx | 0 .../Desktop/Buttons/{SearchButton => }/SearchButton.tsx | 0 .../Buttons/{ShoppingCartButton => }/ShoppingCartButton.tsx | 0 .../Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx | 4 ++-- frontend/src/components/Navigation/Navigation.tsx | 2 +- frontend/src/components/SearchField/SearchField.tsx | 2 +- 7 files changed, 4 insertions(+), 4 deletions(-) rename frontend/src/components/Navigation/Desktop/Buttons/{NewActionButton => }/NewActionButton.tsx (100%) rename frontend/src/components/Navigation/Desktop/Buttons/{NotificationButton => }/NotificationButton.tsx (100%) rename frontend/src/components/Navigation/Desktop/Buttons/{SearchButton => }/SearchButton.tsx (100%) rename frontend/src/components/Navigation/Desktop/Buttons/{ShoppingCartButton => }/ShoppingCartButton.tsx (100%) diff --git a/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton/NewActionButton.tsx b/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton.tsx similarity index 100% rename from frontend/src/components/Navigation/Desktop/Buttons/NewActionButton/NewActionButton.tsx rename to frontend/src/components/Navigation/Desktop/Buttons/NewActionButton.tsx diff --git a/frontend/src/components/Navigation/Desktop/Buttons/NotificationButton/NotificationButton.tsx b/frontend/src/components/Navigation/Desktop/Buttons/NotificationButton.tsx similarity index 100% rename from frontend/src/components/Navigation/Desktop/Buttons/NotificationButton/NotificationButton.tsx rename to frontend/src/components/Navigation/Desktop/Buttons/NotificationButton.tsx diff --git a/frontend/src/components/Navigation/Desktop/Buttons/SearchButton/SearchButton.tsx b/frontend/src/components/Navigation/Desktop/Buttons/SearchButton.tsx similarity index 100% rename from frontend/src/components/Navigation/Desktop/Buttons/SearchButton/SearchButton.tsx rename to frontend/src/components/Navigation/Desktop/Buttons/SearchButton.tsx diff --git a/frontend/src/components/Navigation/Desktop/Buttons/ShoppingCartButton/ShoppingCartButton.tsx b/frontend/src/components/Navigation/Desktop/Buttons/ShoppingCartButton.tsx similarity index 100% rename from frontend/src/components/Navigation/Desktop/Buttons/ShoppingCartButton/ShoppingCartButton.tsx rename to frontend/src/components/Navigation/Desktop/Buttons/ShoppingCartButton.tsx diff --git a/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx b/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx index c79a0818..7168962c 100644 --- a/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx +++ b/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx @@ -1,6 +1,6 @@ import ProfilePictureAvatar from '../../ProfilePictureAvatar/ProfilePictureAvatar'; -import NewActionButton from '../Buttons/NewActionButton/NewActionButton'; -import NotificationButton from '../Buttons/NotificationButton/NotificationButton'; +import NewActionButton from '../Buttons/NewActionButton'; +import NotificationButton from '../Buttons/NotificationButton'; /** * A list of navigation items for logged in users. diff --git a/frontend/src/components/Navigation/Navigation.tsx b/frontend/src/components/Navigation/Navigation.tsx index 5b73f8c0..2832f167 100644 --- a/frontend/src/components/Navigation/Navigation.tsx +++ b/frontend/src/components/Navigation/Navigation.tsx @@ -5,7 +5,7 @@ import DesktopLoggedInNav from './Desktop/DesktopLoggedInNav/DesktopLoggedInNav' import MenuIcon from '@mui/icons-material/Menu'; import { useState } from 'react'; import MobileNavigation from './Mobile/MobileNavigation'; -import ShoppingCartButton from './Desktop/Buttons/ShoppingCartButton/ShoppingCartButton'; +import ShoppingCartButton from './Desktop/Buttons/ShoppingCartButton'; /** * A component for the application's navigation menu diff --git a/frontend/src/components/SearchField/SearchField.tsx b/frontend/src/components/SearchField/SearchField.tsx index 626a8365..3ec4f1af 100644 --- a/frontend/src/components/SearchField/SearchField.tsx +++ b/frontend/src/components/SearchField/SearchField.tsx @@ -1,6 +1,6 @@ import { TextField } from '@mui/material'; import { ChangeEvent, FormEvent, useState } from 'react'; -import SearchButton from '../Navigation/Desktop/Buttons/SearchButton/SearchButton'; +import SearchButton from '../Navigation/Desktop/Buttons/SearchButton'; function SearchField(): JSX.Element { function search(event: FormEvent) { From 6650392977fd21a3cc4ca7d77c59466c7befd8a2 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Thu, 2 Nov 2023 22:37:13 +0200 Subject: [PATCH 054/667] make folder names follow camelCase convention --- frontend/src/App.tsx | 2 +- .../Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx | 6 +++--- .../components/Navigation/Mobile/MobileNavigation.tsx | 3 +-- frontend/src/components/Navigation/Navigation.tsx | 10 +++++----- frontend/src/components/SearchField/SearchField.tsx | 2 +- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 2e32a0c5..ecdd57d6 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -2,7 +2,7 @@ import { useMemo } from 'react'; import './App.css'; import { CssBaseline, createTheme } from '@mui/material'; import { ThemeProvider } from '@emotion/react'; -import Navigation from './components/Navigation/Navigation'; +import Navigation from './components/navigation/Navigation'; function App() { const theme = useMemo( diff --git a/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx b/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx index 7168962c..3fe6c89b 100644 --- a/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx +++ b/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx @@ -1,6 +1,6 @@ -import ProfilePictureAvatar from '../../ProfilePictureAvatar/ProfilePictureAvatar'; -import NewActionButton from '../Buttons/NewActionButton'; -import NotificationButton from '../Buttons/NotificationButton'; +import ProfilePictureAvatar from '../../profilePictureAvatar/ProfilePictureAvatar'; +import NewActionButton from '../buttons/NewActionButton'; +import NotificationButton from '../buttons/NotificationButton'; /** * A list of navigation items for logged in users. diff --git a/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx b/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx index 7797b755..93ce9208 100644 --- a/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx +++ b/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx @@ -8,8 +8,7 @@ import { } from '@mui/material'; import HomeIcon from '@mui/icons-material/Home'; import CloseIcon from '@mui/icons-material/Close'; -// import MobileGuestNav from './MobileGuestNav/MobileGuestNav'; -import MobileLoggedInNav from './MobileLoggedInNav/MobileLoggedInNav'; +import MobileLoggedInNav from './mobileLoggedInNav/MobileLoggedInNav'; interface IMobileNavigationProps { onClose: (event: React.MouseEvent) => void; diff --git a/frontend/src/components/Navigation/Navigation.tsx b/frontend/src/components/Navigation/Navigation.tsx index 2832f167..86a8fbeb 100644 --- a/frontend/src/components/Navigation/Navigation.tsx +++ b/frontend/src/components/Navigation/Navigation.tsx @@ -1,11 +1,11 @@ import { Divider, Drawer, IconButton } from '@mui/material'; -import Logo from '../Logo/Logo'; -import SearchField from '../SearchField/SearchField'; -import DesktopLoggedInNav from './Desktop/DesktopLoggedInNav/DesktopLoggedInNav'; +import Logo from '../logo/Logo'; +import SearchField from '../searchField/SearchField'; +import DesktopLoggedInNav from './desktop/desktopLoggedInNav/DesktopLoggedInNav'; import MenuIcon from '@mui/icons-material/Menu'; import { useState } from 'react'; -import MobileNavigation from './Mobile/MobileNavigation'; -import ShoppingCartButton from './Desktop/Buttons/ShoppingCartButton'; +import MobileNavigation from './mobile/mobileNavigation'; +import ShoppingCartButton from './desktop/buttons/ShoppingCartButton'; /** * A component for the application's navigation menu diff --git a/frontend/src/components/SearchField/SearchField.tsx b/frontend/src/components/SearchField/SearchField.tsx index 3ec4f1af..6760bea4 100644 --- a/frontend/src/components/SearchField/SearchField.tsx +++ b/frontend/src/components/SearchField/SearchField.tsx @@ -1,6 +1,6 @@ import { TextField } from '@mui/material'; import { ChangeEvent, FormEvent, useState } from 'react'; -import SearchButton from '../Navigation/Desktop/Buttons/SearchButton'; +import SearchButton from '../navigation/desktop/buttons/SearchButton'; function SearchField(): JSX.Element { function search(event: FormEvent) { From 034507801808af799a24963274396194a3aadcee Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Thu, 2 Nov 2023 22:37:50 +0200 Subject: [PATCH 055/667] remove READMEs that I missed earlier --- frontend/src/components/Logo/README.md | 20 ------------------- .../Desktop/DesktopGuestNav/README.md | 10 ---------- 2 files changed, 30 deletions(-) delete mode 100644 frontend/src/components/Logo/README.md delete mode 100644 frontend/src/components/Navigation/Desktop/DesktopGuestNav/README.md diff --git a/frontend/src/components/Logo/README.md b/frontend/src/components/Logo/README.md deleted file mode 100644 index cecc1c11..00000000 --- a/frontend/src/components/Logo/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Logo -A SVG-based logo whose size and color can be configured with props - -## Props -* ``size``(**required**) - sets the logo's ``width`` and ``height``. The passed number is expressed in pixels. -* ``color`` - sets the logo's ``fill`` color, defaults to ``black``. - -## Description -Being a SVG, this component scales up perfectly with any size, meaning that it can be rendered as a small logo or a big one. The tilda (~) is always placed in the center. - -**Note:** user select on the logo is disabled. - -## Usage example -```jsx -/* - This will render the logo with a width and height of 50px - and a white fill color. -*/ - -``` diff --git a/frontend/src/components/Navigation/Desktop/DesktopGuestNav/README.md b/frontend/src/components/Navigation/Desktop/DesktopGuestNav/README.md deleted file mode 100644 index 5d5f8dbe..00000000 --- a/frontend/src/components/Navigation/Desktop/DesktopGuestNav/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# DesktopGuestNav -A list of navigation items for guests. This component should be displayed on large screens only. - -## Description -This component displays all navigation items that can be interacted with by guests. It is designed for viewports which are >= 1024px. - -## Usage example -```jsx - -``` \ No newline at end of file From e0f1bfda0efd087c05781c05296557c257afc973 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Thu, 2 Nov 2023 22:42:49 +0200 Subject: [PATCH 056/667] slightly restructure the directory structure of the mobile navigation menu --- .../Desktop/{DesktopGuestNav => }/DesktopGuestNav.tsx | 0 .../Desktop/{DesktopLoggedInNav => }/DesktopLoggedInNav.tsx | 6 +++--- .../src/components/Navigation/Mobile/MobileNavigation.tsx | 2 +- .../Mobile/{MobileGuestNav => menus}/MobileGuestNav.tsx | 0 .../{MobileLoggedInNav => menus}/MobileLoggedInNav.tsx | 0 frontend/src/components/Navigation/Navigation.tsx | 2 +- 6 files changed, 5 insertions(+), 5 deletions(-) rename frontend/src/components/Navigation/Desktop/{DesktopGuestNav => }/DesktopGuestNav.tsx (100%) rename frontend/src/components/Navigation/Desktop/{DesktopLoggedInNav => }/DesktopLoggedInNav.tsx (73%) rename frontend/src/components/Navigation/Mobile/{MobileGuestNav => menus}/MobileGuestNav.tsx (100%) rename frontend/src/components/Navigation/Mobile/{MobileLoggedInNav => menus}/MobileLoggedInNav.tsx (100%) diff --git a/frontend/src/components/Navigation/Desktop/DesktopGuestNav/DesktopGuestNav.tsx b/frontend/src/components/Navigation/Desktop/DesktopGuestNav.tsx similarity index 100% rename from frontend/src/components/Navigation/Desktop/DesktopGuestNav/DesktopGuestNav.tsx rename to frontend/src/components/Navigation/Desktop/DesktopGuestNav.tsx diff --git a/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx b/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav.tsx similarity index 73% rename from frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx rename to frontend/src/components/Navigation/Desktop/DesktopLoggedInNav.tsx index 3fe6c89b..b770f3d3 100644 --- a/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav/DesktopLoggedInNav.tsx +++ b/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav.tsx @@ -1,6 +1,6 @@ -import ProfilePictureAvatar from '../../profilePictureAvatar/ProfilePictureAvatar'; -import NewActionButton from '../buttons/NewActionButton'; -import NotificationButton from '../buttons/NotificationButton'; +import ProfilePictureAvatar from '../profilePictureAvatar/ProfilePictureAvatar'; +import NewActionButton from './buttons/NewActionButton'; +import NotificationButton from './buttons/NotificationButton'; /** * A list of navigation items for logged in users. diff --git a/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx b/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx index 93ce9208..f4336dd1 100644 --- a/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx +++ b/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx @@ -8,7 +8,7 @@ import { } from '@mui/material'; import HomeIcon from '@mui/icons-material/Home'; import CloseIcon from '@mui/icons-material/Close'; -import MobileLoggedInNav from './mobileLoggedInNav/MobileLoggedInNav'; +import MobileLoggedInNav from './menus/MobileLoggedInNav'; interface IMobileNavigationProps { onClose: (event: React.MouseEvent) => void; diff --git a/frontend/src/components/Navigation/Mobile/MobileGuestNav/MobileGuestNav.tsx b/frontend/src/components/Navigation/Mobile/menus/MobileGuestNav.tsx similarity index 100% rename from frontend/src/components/Navigation/Mobile/MobileGuestNav/MobileGuestNav.tsx rename to frontend/src/components/Navigation/Mobile/menus/MobileGuestNav.tsx diff --git a/frontend/src/components/Navigation/Mobile/MobileLoggedInNav/MobileLoggedInNav.tsx b/frontend/src/components/Navigation/Mobile/menus/MobileLoggedInNav.tsx similarity index 100% rename from frontend/src/components/Navigation/Mobile/MobileLoggedInNav/MobileLoggedInNav.tsx rename to frontend/src/components/Navigation/Mobile/menus/MobileLoggedInNav.tsx diff --git a/frontend/src/components/Navigation/Navigation.tsx b/frontend/src/components/Navigation/Navigation.tsx index 86a8fbeb..268b59df 100644 --- a/frontend/src/components/Navigation/Navigation.tsx +++ b/frontend/src/components/Navigation/Navigation.tsx @@ -1,7 +1,7 @@ import { Divider, Drawer, IconButton } from '@mui/material'; import Logo from '../logo/Logo'; import SearchField from '../searchField/SearchField'; -import DesktopLoggedInNav from './desktop/desktopLoggedInNav/DesktopLoggedInNav'; +import DesktopLoggedInNav from './desktop/DesktopLoggedInNav'; import MenuIcon from '@mui/icons-material/Menu'; import { useState } from 'react'; import MobileNavigation from './mobile/mobileNavigation'; From 153f32d9b7655e214ccf645a0272223f2223c56f Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Thu, 2 Nov 2023 22:48:37 +0200 Subject: [PATCH 057/667] fix wrong file being caught in the camelCase conversion --- frontend/src/components/Navigation/Navigation.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/Navigation/Navigation.tsx b/frontend/src/components/Navigation/Navigation.tsx index 268b59df..0f6f37b0 100644 --- a/frontend/src/components/Navigation/Navigation.tsx +++ b/frontend/src/components/Navigation/Navigation.tsx @@ -4,7 +4,7 @@ import SearchField from '../searchField/SearchField'; import DesktopLoggedInNav from './desktop/DesktopLoggedInNav'; import MenuIcon from '@mui/icons-material/Menu'; import { useState } from 'react'; -import MobileNavigation from './mobile/mobileNavigation'; +import MobileNavigation from './mobile/MobileNavigation'; import ShoppingCartButton from './desktop/buttons/ShoppingCartButton'; /** From 20d98198e4a5d41c480a06a542c4feabe4ea05c9 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Thu, 2 Nov 2023 22:54:26 +0200 Subject: [PATCH 058/667] replace interfaces with types --- frontend/src/components/Logo/Logo.tsx | 6 +++--- .../Navigation/Desktop/Buttons/NewActionButton.tsx | 6 +++--- .../src/components/Navigation/Mobile/MobileNavigation.tsx | 6 +++--- .../Navigation/Mobile/menus/MobileLoggedInNav.tsx | 6 +++--- .../ProfilePictureAvatar/ProfilePictureAvatar.tsx | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/frontend/src/components/Logo/Logo.tsx b/frontend/src/components/Logo/Logo.tsx index 20351cbf..52245c6f 100644 --- a/frontend/src/components/Logo/Logo.tsx +++ b/frontend/src/components/Logo/Logo.tsx @@ -1,16 +1,16 @@ import { useTheme } from '@mui/material'; -interface ILogoProps { +type LogoProps = { size: number; color?: string; -} +}; /** * A SVG-based logo whose size and color can be configured with props * @param props * @returns */ -function Logo(props: ILogoProps): JSX.Element { +function Logo(props: LogoProps): JSX.Element { const theme = useTheme(); const secondary = theme.palette.secondary.main; diff --git a/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton.tsx b/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton.tsx index 2db10702..961d011c 100644 --- a/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton.tsx +++ b/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton.tsx @@ -3,10 +3,10 @@ import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; import { Button, ListItemIcon, ListItemText, Menu, MenuItem, useTheme } from '@mui/material'; import { useState } from 'react'; -interface IMenuItem { +type MenuItem = { label: string; href: string; -} +}; /** * A simple button that opens a menu for a new action. @@ -27,7 +27,7 @@ function NewActionButton(): JSX.Element { setAnchorEl(null); } - const menuItems: IMenuItem[] = [ + const menuItems: MenuItem[] = [ { label: 'New listing', href: '#', diff --git a/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx b/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx index f4336dd1..a684355b 100644 --- a/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx +++ b/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx @@ -10,15 +10,15 @@ import HomeIcon from '@mui/icons-material/Home'; import CloseIcon from '@mui/icons-material/Close'; import MobileLoggedInNav from './menus/MobileLoggedInNav'; -interface IMobileNavigationProps { +type MobileNavigationProps = { onClose: (event: React.MouseEvent) => void; -} +}; /** * Navigation menu items for small screens. * @returns */ -function MobileNavigation(props: IMobileNavigationProps) { +function MobileNavigation(props: MobileNavigationProps) { /* TO-DO: Implement logic to display the correct navigation menu based on whether the user is logged in or not diff --git a/frontend/src/components/Navigation/Mobile/menus/MobileLoggedInNav.tsx b/frontend/src/components/Navigation/Mobile/menus/MobileLoggedInNav.tsx index 54667892..af23b476 100644 --- a/frontend/src/components/Navigation/Mobile/menus/MobileLoggedInNav.tsx +++ b/frontend/src/components/Navigation/Mobile/menus/MobileLoggedInNav.tsx @@ -14,10 +14,10 @@ import ExpandMore from '@mui/icons-material/ExpandMore'; import NotificationsIcon from '@mui/icons-material/Notifications'; import { useState } from 'react'; -interface INewActionLink { +type NewActionLink = { url: string; label: string; -} +}; /** * Mobile navigation items that can be interacted with by logged in users. @@ -25,7 +25,7 @@ interface INewActionLink { */ function MobileLoggedInNav(): JSX.Element { const [expanded, setExpanded] = useState(false); - const actions: INewActionLink[] = [ + const actions: NewActionLink[] = [ { url: '#', label: 'New listing', diff --git a/frontend/src/components/Navigation/ProfilePictureAvatar/ProfilePictureAvatar.tsx b/frontend/src/components/Navigation/ProfilePictureAvatar/ProfilePictureAvatar.tsx index d1f95933..6855f6c2 100644 --- a/frontend/src/components/Navigation/ProfilePictureAvatar/ProfilePictureAvatar.tsx +++ b/frontend/src/components/Navigation/ProfilePictureAvatar/ProfilePictureAvatar.tsx @@ -1,15 +1,15 @@ import { Avatar } from '@mui/material'; -interface IProfilePictureAvatar { +type ProfilePictureAvatar = { imageUrl?: string; -} +}; /** * An avatar image which links to the user's profile * @param props * @returns */ -function ProfilePictureAvatar(props: IProfilePictureAvatar): JSX.Element { +function ProfilePictureAvatar(props: ProfilePictureAvatar): JSX.Element { return ( From 3a64f1bd0b03b8f9532295f154cba78887c767ae Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Thu, 2 Nov 2023 22:54:58 +0200 Subject: [PATCH 059/667] change the onClick prop to a more descriptive name --- .../src/components/Navigation/Mobile/MobileNavigation.tsx | 4 ++-- frontend/src/components/Navigation/Navigation.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx b/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx index a684355b..bf3f44d1 100644 --- a/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx +++ b/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx @@ -11,7 +11,7 @@ import CloseIcon from '@mui/icons-material/Close'; import MobileLoggedInNav from './menus/MobileLoggedInNav'; type MobileNavigationProps = { - onClose: (event: React.MouseEvent) => void; + onCloseButtonClick: (event: React.MouseEvent) => void; }; /** @@ -37,7 +37,7 @@ function MobileNavigation(props: MobileNavigationProps) { - + diff --git a/frontend/src/components/Navigation/Navigation.tsx b/frontend/src/components/Navigation/Navigation.tsx index 0f6f37b0..00fb6b70 100644 --- a/frontend/src/components/Navigation/Navigation.tsx +++ b/frontend/src/components/Navigation/Navigation.tsx @@ -40,7 +40,7 @@ function Navigation(): JSX.Element { setMobileMenuOpen(false)}> - +
From 9605c7a271ad6d99b7d0b2764954b9e917fa7be2 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Thu, 2 Nov 2023 22:56:04 +0200 Subject: [PATCH 060/667] add a note about the Logo component's props --- frontend/src/components/Logo/Logo.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frontend/src/components/Logo/Logo.tsx b/frontend/src/components/Logo/Logo.tsx index 52245c6f..b65d531e 100644 --- a/frontend/src/components/Logo/Logo.tsx +++ b/frontend/src/components/Logo/Logo.tsx @@ -1,7 +1,10 @@ import { useTheme } from '@mui/material'; type LogoProps = { + /** Size is expressed in pixels */ size: number; + + /** Defaults to ``'black'`` if not provided */ color?: string; }; From ba2796d5084bd7fb8c2872836de3b03e64ba474b Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Sat, 4 Nov 2023 01:29:58 +0200 Subject: [PATCH 061/667] attempt to actually camelCase the folders --- frontend/src/components/{Logo => logo}/Logo.tsx | 0 frontend/src/components/{Navigation => navigation}/Navigation.tsx | 0 .../Desktop => navigation/desktop}/DesktopGuestNav.tsx | 0 .../Desktop => navigation/desktop}/DesktopLoggedInNav.tsx | 0 .../Buttons => navigation/desktop/buttons}/NewActionButton.tsx | 0 .../Buttons => navigation/desktop/buttons}/NotificationButton.tsx | 0 .../Buttons => navigation/desktop/buttons}/SearchButton.tsx | 0 .../Buttons => navigation/desktop/buttons}/ShoppingCartButton.tsx | 0 .../{Navigation/Mobile => navigation/mobile}/MobileNavigation.tsx | 0 .../Mobile => navigation/mobile}/menus/MobileGuestNav.tsx | 0 .../Mobile => navigation/mobile}/menus/MobileLoggedInNav.tsx | 0 .../profilePictureAvatar}/ProfilePictureAvatar.tsx | 0 .../src/components/{SearchField => searchField}/SearchField.tsx | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename frontend/src/components/{Logo => logo}/Logo.tsx (100%) rename frontend/src/components/{Navigation => navigation}/Navigation.tsx (100%) rename frontend/src/components/{Navigation/Desktop => navigation/desktop}/DesktopGuestNav.tsx (100%) rename frontend/src/components/{Navigation/Desktop => navigation/desktop}/DesktopLoggedInNav.tsx (100%) rename frontend/src/components/{Navigation/Desktop/Buttons => navigation/desktop/buttons}/NewActionButton.tsx (100%) rename frontend/src/components/{Navigation/Desktop/Buttons => navigation/desktop/buttons}/NotificationButton.tsx (100%) rename frontend/src/components/{Navigation/Desktop/Buttons => navigation/desktop/buttons}/SearchButton.tsx (100%) rename frontend/src/components/{Navigation/Desktop/Buttons => navigation/desktop/buttons}/ShoppingCartButton.tsx (100%) rename frontend/src/components/{Navigation/Mobile => navigation/mobile}/MobileNavigation.tsx (100%) rename frontend/src/components/{Navigation/Mobile => navigation/mobile}/menus/MobileGuestNav.tsx (100%) rename frontend/src/components/{Navigation/Mobile => navigation/mobile}/menus/MobileLoggedInNav.tsx (100%) rename frontend/src/components/{Navigation/ProfilePictureAvatar => navigation/profilePictureAvatar}/ProfilePictureAvatar.tsx (100%) rename frontend/src/components/{SearchField => searchField}/SearchField.tsx (100%) diff --git a/frontend/src/components/Logo/Logo.tsx b/frontend/src/components/logo/Logo.tsx similarity index 100% rename from frontend/src/components/Logo/Logo.tsx rename to frontend/src/components/logo/Logo.tsx diff --git a/frontend/src/components/Navigation/Navigation.tsx b/frontend/src/components/navigation/Navigation.tsx similarity index 100% rename from frontend/src/components/Navigation/Navigation.tsx rename to frontend/src/components/navigation/Navigation.tsx diff --git a/frontend/src/components/Navigation/Desktop/DesktopGuestNav.tsx b/frontend/src/components/navigation/desktop/DesktopGuestNav.tsx similarity index 100% rename from frontend/src/components/Navigation/Desktop/DesktopGuestNav.tsx rename to frontend/src/components/navigation/desktop/DesktopGuestNav.tsx diff --git a/frontend/src/components/Navigation/Desktop/DesktopLoggedInNav.tsx b/frontend/src/components/navigation/desktop/DesktopLoggedInNav.tsx similarity index 100% rename from frontend/src/components/Navigation/Desktop/DesktopLoggedInNav.tsx rename to frontend/src/components/navigation/desktop/DesktopLoggedInNav.tsx diff --git a/frontend/src/components/Navigation/Desktop/Buttons/NewActionButton.tsx b/frontend/src/components/navigation/desktop/buttons/NewActionButton.tsx similarity index 100% rename from frontend/src/components/Navigation/Desktop/Buttons/NewActionButton.tsx rename to frontend/src/components/navigation/desktop/buttons/NewActionButton.tsx diff --git a/frontend/src/components/Navigation/Desktop/Buttons/NotificationButton.tsx b/frontend/src/components/navigation/desktop/buttons/NotificationButton.tsx similarity index 100% rename from frontend/src/components/Navigation/Desktop/Buttons/NotificationButton.tsx rename to frontend/src/components/navigation/desktop/buttons/NotificationButton.tsx diff --git a/frontend/src/components/Navigation/Desktop/Buttons/SearchButton.tsx b/frontend/src/components/navigation/desktop/buttons/SearchButton.tsx similarity index 100% rename from frontend/src/components/Navigation/Desktop/Buttons/SearchButton.tsx rename to frontend/src/components/navigation/desktop/buttons/SearchButton.tsx diff --git a/frontend/src/components/Navigation/Desktop/Buttons/ShoppingCartButton.tsx b/frontend/src/components/navigation/desktop/buttons/ShoppingCartButton.tsx similarity index 100% rename from frontend/src/components/Navigation/Desktop/Buttons/ShoppingCartButton.tsx rename to frontend/src/components/navigation/desktop/buttons/ShoppingCartButton.tsx diff --git a/frontend/src/components/Navigation/Mobile/MobileNavigation.tsx b/frontend/src/components/navigation/mobile/MobileNavigation.tsx similarity index 100% rename from frontend/src/components/Navigation/Mobile/MobileNavigation.tsx rename to frontend/src/components/navigation/mobile/MobileNavigation.tsx diff --git a/frontend/src/components/Navigation/Mobile/menus/MobileGuestNav.tsx b/frontend/src/components/navigation/mobile/menus/MobileGuestNav.tsx similarity index 100% rename from frontend/src/components/Navigation/Mobile/menus/MobileGuestNav.tsx rename to frontend/src/components/navigation/mobile/menus/MobileGuestNav.tsx diff --git a/frontend/src/components/Navigation/Mobile/menus/MobileLoggedInNav.tsx b/frontend/src/components/navigation/mobile/menus/MobileLoggedInNav.tsx similarity index 100% rename from frontend/src/components/Navigation/Mobile/menus/MobileLoggedInNav.tsx rename to frontend/src/components/navigation/mobile/menus/MobileLoggedInNav.tsx diff --git a/frontend/src/components/Navigation/ProfilePictureAvatar/ProfilePictureAvatar.tsx b/frontend/src/components/navigation/profilePictureAvatar/ProfilePictureAvatar.tsx similarity index 100% rename from frontend/src/components/Navigation/ProfilePictureAvatar/ProfilePictureAvatar.tsx rename to frontend/src/components/navigation/profilePictureAvatar/ProfilePictureAvatar.tsx diff --git a/frontend/src/components/SearchField/SearchField.tsx b/frontend/src/components/searchField/SearchField.tsx similarity index 100% rename from frontend/src/components/SearchField/SearchField.tsx rename to frontend/src/components/searchField/SearchField.tsx From 756743c66a4fbc88bc83ac8ee1aad7288283d3c6 Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Sat, 4 Nov 2023 10:54:27 +0200 Subject: [PATCH 062/667] Change some fields and DB relations --- ...0002_remove_yugiohcard_yugioh_card_name.py | 17 ++++++++++++++++ backend/yugioh/models.py | 4 ---- .../0003_alter_yugiohcardinset_set.py | 20 +++++++++++++++++++ backend/yugiohcardinset/models.py | 5 ++++- backend/yugiohcardset/admin.py | 6 +++--- .../0002_remove_yugiohcardset_card_in_set.py | 17 ++++++++++++++++ backend/yugiohcardset/models.py | 5 ----- 7 files changed, 61 insertions(+), 13 deletions(-) create mode 100644 backend/yugioh/migrations/0002_remove_yugiohcard_yugioh_card_name.py create mode 100644 backend/yugiohcardinset/migrations/0003_alter_yugiohcardinset_set.py create mode 100644 backend/yugiohcardset/migrations/0002_remove_yugiohcardset_card_in_set.py diff --git a/backend/yugioh/migrations/0002_remove_yugiohcard_yugioh_card_name.py b/backend/yugioh/migrations/0002_remove_yugiohcard_yugioh_card_name.py new file mode 100644 index 00000000..3c7b2be0 --- /dev/null +++ b/backend/yugioh/migrations/0002_remove_yugiohcard_yugioh_card_name.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.6 on 2023-11-04 08:51 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('yugioh', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='yugiohcard', + name='yugioh_card_name', + ), + ] diff --git a/backend/yugioh/models.py b/backend/yugioh/models.py index b04d54ba..23a61b52 100644 --- a/backend/yugioh/models.py +++ b/backend/yugioh/models.py @@ -2,10 +2,6 @@ class YugiohCard(models.Model): - yugioh_card_name = models.CharField( - max_length=100, - unique=True, - ) type = models.CharField( max_length=100, diff --git a/backend/yugiohcardinset/migrations/0003_alter_yugiohcardinset_set.py b/backend/yugiohcardinset/migrations/0003_alter_yugiohcardinset_set.py new file mode 100644 index 00000000..aa006780 --- /dev/null +++ b/backend/yugiohcardinset/migrations/0003_alter_yugiohcardinset_set.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2.6 on 2023-11-04 08:51 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('yugiohcardset', '0002_remove_yugiohcardset_card_in_set'), + ('yugiohcardinset', '0002_alter_yugiohcardinset_rarity'), + ] + + operations = [ + migrations.AlterField( + model_name='yugiohcardinset', + name='set', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='yugiohcardset.yugiohcardset'), + ), + ] diff --git a/backend/yugiohcardinset/models.py b/backend/yugiohcardinset/models.py index 4370c6f8..6ff85197 100644 --- a/backend/yugiohcardinset/models.py +++ b/backend/yugiohcardinset/models.py @@ -6,7 +6,10 @@ class YugiohCardInSet(models.Model): 'yugiohcardrarity.YugiohCardRarity', on_delete=models.CASCADE, ) - set = models.CharField(max_length=100) + set = models.ForeignKey( + 'yugiohcardset.YugiohCardSet', + on_delete=models.CASCADE, + ) def __str__(self): return f'{self.set} - {self.rarity}' diff --git a/backend/yugiohcardset/admin.py b/backend/yugiohcardset/admin.py index f1b1d273..49381630 100644 --- a/backend/yugiohcardset/admin.py +++ b/backend/yugiohcardset/admin.py @@ -5,6 +5,6 @@ @admin.register(YugiohCardSet) class YugiohCardSetAdmin(admin.ModelAdmin): - list_display = ('card_set_name', 'card_in_set') - list_filter = ('card_set_name', 'card_in_set') - search_fields = ('card_set_name', 'card_in_set') + list_display = ('card_set_name',) + list_filter = ('card_set_name',) + search_fields = ('card_set_name',) diff --git a/backend/yugiohcardset/migrations/0002_remove_yugiohcardset_card_in_set.py b/backend/yugiohcardset/migrations/0002_remove_yugiohcardset_card_in_set.py new file mode 100644 index 00000000..8411db6e --- /dev/null +++ b/backend/yugiohcardset/migrations/0002_remove_yugiohcardset_card_in_set.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.6 on 2023-11-04 08:51 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('yugiohcardset', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='yugiohcardset', + name='card_in_set', + ), + ] diff --git a/backend/yugiohcardset/models.py b/backend/yugiohcardset/models.py index 1c6f36b0..964f2b86 100644 --- a/backend/yugiohcardset/models.py +++ b/backend/yugiohcardset/models.py @@ -9,10 +9,5 @@ class YugiohCardSet(models.Model): unique=True, ) - card_in_set = models.ForeignKey( - YugiohCardInSet, - on_delete=models.CASCADE, - ) - def __str__(self): return self.card_set_name From db7967e6cbf3ea9aac26911afc52df1019e03ee0 Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Sat, 4 Nov 2023 11:01:02 +0200 Subject: [PATCH 063/667] Change some fields and DB relations --- .../migrations/0003_yugiohcard_card_in_set.py | 21 +++++++++++++++++++ backend/yugioh/models.py | 5 +++++ 2 files changed, 26 insertions(+) create mode 100644 backend/yugioh/migrations/0003_yugiohcard_card_in_set.py diff --git a/backend/yugioh/migrations/0003_yugiohcard_card_in_set.py b/backend/yugioh/migrations/0003_yugiohcard_card_in_set.py new file mode 100644 index 00000000..45187a69 --- /dev/null +++ b/backend/yugioh/migrations/0003_yugiohcard_card_in_set.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.6 on 2023-11-04 08:58 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('yugiohcardinset', '0003_alter_yugiohcardinset_set'), + ('yugioh', '0002_remove_yugiohcard_yugioh_card_name'), + ] + + operations = [ + migrations.AddField( + model_name='yugiohcard', + name='card_in_set', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='yugiohcardinset.yugiohcardinset'), + preserve_default=False, + ), + ] diff --git a/backend/yugioh/models.py b/backend/yugioh/models.py index 23a61b52..c34c4573 100644 --- a/backend/yugioh/models.py +++ b/backend/yugioh/models.py @@ -61,5 +61,10 @@ class YugiohCard(models.Model): on_delete=models.CASCADE, ) + card_in_set = models.ForeignKey( + 'yugiohcardinset.YugiohCardInSet', + on_delete=models.CASCADE, + ) + def __str__(self): return self.yugioh_card_name From e761b79f70f95bdd4d461cdbb51a3340f31cfbcf Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Sat, 4 Nov 2023 11:32:07 +0200 Subject: [PATCH 064/667] Change some fields and DB relations --- backend/yugiohcardrarity/admin.py | 6 +++--- ...alter_yugiohcardrarity_options_and_more.py | 21 +++++++++++++++++++ backend/yugiohcardrarity/models.py | 10 +-------- 3 files changed, 25 insertions(+), 12 deletions(-) create mode 100644 backend/yugiohcardrarity/migrations/0003_alter_yugiohcardrarity_options_and_more.py diff --git a/backend/yugiohcardrarity/admin.py b/backend/yugiohcardrarity/admin.py index b30ccec1..244125fa 100644 --- a/backend/yugiohcardrarity/admin.py +++ b/backend/yugiohcardrarity/admin.py @@ -5,6 +5,6 @@ @admin.register(YugiohCardRarity) class YugiohCardRarityAdmin(admin.ModelAdmin): - list_display = ('set', 'rarity') - list_filter = ('set', 'rarity') - search_fields = ('set', 'rarity') + list_display = ('rarity',) + list_filter = ('rarity',) + search_fields = ('rarity',) diff --git a/backend/yugiohcardrarity/migrations/0003_alter_yugiohcardrarity_options_and_more.py b/backend/yugiohcardrarity/migrations/0003_alter_yugiohcardrarity_options_and_more.py new file mode 100644 index 00000000..ced84c7c --- /dev/null +++ b/backend/yugiohcardrarity/migrations/0003_alter_yugiohcardrarity_options_and_more.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.6 on 2023-11-04 09:30 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('yugiohcardrarity', '0002_alter_yugiohcardrarity_options'), + ] + + operations = [ + migrations.AlterModelOptions( + name='yugiohcardrarity', + options={'verbose_name': 'Yugioh Card Rarity', 'verbose_name_plural': 'Yugioh Card Rarities'}, + ), + migrations.RemoveField( + model_name='yugiohcardrarity', + name='set', + ), + ] diff --git a/backend/yugiohcardrarity/models.py b/backend/yugiohcardrarity/models.py index 6e19c247..3cbc2f38 100644 --- a/backend/yugiohcardrarity/models.py +++ b/backend/yugiohcardrarity/models.py @@ -1,7 +1,5 @@ from django.db import models -from yugiohcardinset.models import YugiohCardInSet - class YugiohCardRarity(models.Model): rarity = models.CharField( @@ -9,15 +7,9 @@ class YugiohCardRarity(models.Model): unique=True, ) - set = models.ForeignKey( - YugiohCardInSet, - on_delete=models.CASCADE, - ) - class Meta: - ordering = ('set', 'rarity') verbose_name_plural = 'Yugioh Card Rarities' verbose_name = 'Yugioh Card Rarity' def __str__(self): - return f'{self.set} - {self.rarity}' + return {self.rarity} From 88f0067f5eeba4267f08850af75d479f3a66e460 Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Sat, 4 Nov 2023 13:10:43 +0200 Subject: [PATCH 065/667] Added new model YugiohCardYugiohCardInSet This model was created to hold relations between yugioh card and yugioh card in set, so there will be only one card object created instead of creating a separate card for each card set. --- ..._remove_yugiohcard_card_in_set_and_more.py | 27 +++++++++++++++++++ backend/yugioh/models.py | 18 ++++++++++--- 2 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 backend/yugioh/migrations/0004_remove_yugiohcard_card_in_set_and_more.py diff --git a/backend/yugioh/migrations/0004_remove_yugiohcard_card_in_set_and_more.py b/backend/yugioh/migrations/0004_remove_yugiohcard_card_in_set_and_more.py new file mode 100644 index 00000000..65f8a7fe --- /dev/null +++ b/backend/yugioh/migrations/0004_remove_yugiohcard_card_in_set_and_more.py @@ -0,0 +1,27 @@ +# Generated by Django 4.2.6 on 2023-11-04 10:40 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('yugiohcardinset', '0003_alter_yugiohcardinset_set'), + ('yugioh', '0003_yugiohcard_card_in_set'), + ] + + operations = [ + migrations.RemoveField( + model_name='yugiohcard', + name='card_in_set', + ), + migrations.CreateModel( + name='YugiohCardYugiohCardInSet', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('yugioh_card', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='yugioh.yugiohcard')), + ('yugioh_card_in_set', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='yugiohcardinset.yugiohcardinset')), + ], + ), + ] diff --git a/backend/yugioh/models.py b/backend/yugioh/models.py index c34c4573..f893cedf 100644 --- a/backend/yugioh/models.py +++ b/backend/yugioh/models.py @@ -1,5 +1,7 @@ from django.db import models +from yugiohcardinset.models import YugiohCardInSet + class YugiohCard(models.Model): @@ -61,10 +63,18 @@ class YugiohCard(models.Model): on_delete=models.CASCADE, ) - card_in_set = models.ForeignKey( - 'yugiohcardinset.YugiohCardInSet', + def __str__(self): + return self.card + + +class YugiohCardYugiohCardInSet(models.Model): + + yugioh_card = models.ForeignKey( + YugiohCard, on_delete=models.CASCADE, ) - def __str__(self): - return self.yugioh_card_name + yugioh_card_in_set = models.ForeignKey( + YugiohCardInSet, + on_delete=models.CASCADE, + ) From 870edb01ee8effc68b1241258e214ab06616adf5 Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Sat, 4 Nov 2023 14:48:20 +0200 Subject: [PATCH 066/667] Fixed return string Fixed __str__ method in YugiohCardRarity model to return a string instead a set --- backend/yugiohcardrarity/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/yugiohcardrarity/models.py b/backend/yugiohcardrarity/models.py index 3cbc2f38..a0157087 100644 --- a/backend/yugiohcardrarity/models.py +++ b/backend/yugiohcardrarity/models.py @@ -12,4 +12,4 @@ class Meta: verbose_name = 'Yugioh Card Rarity' def __str__(self): - return {self.rarity} + return self.rarity From 2076121f6513a854f2dcc6d2a66e1f5b68c52fd9 Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Sat, 4 Nov 2023 15:21:46 +0200 Subject: [PATCH 067/667] Fixed some issues __str__ method requires a string to be returned. In this case we are returning a set, which raises a TypeError upon creation. The code is unique. Exemplary code and set would be: Phantom Nightmare - PHNI Add YugiohCard and YugiohCardInSet to admin Make the __str__ method return the card name (str) --- backend/yugioh/admin.py | 9 ++++++++- backend/yugioh/models.py | 2 +- backend/yugiohcardinset/admin.py | 10 +++++++--- backend/yugiohcardrarity/admin.py | 6 +++--- .../0004_yugiohcardrarity_rarity_code.py | 19 +++++++++++++++++++ backend/yugiohcardrarity/models.py | 7 ++++++- .../0003_yugiohcardset_rarity_code.py | 19 +++++++++++++++++++ backend/yugiohcardset/models.py | 7 ++++++- 8 files changed, 69 insertions(+), 10 deletions(-) create mode 100644 backend/yugiohcardrarity/migrations/0004_yugiohcardrarity_rarity_code.py create mode 100644 backend/yugiohcardset/migrations/0003_yugiohcardset_rarity_code.py diff --git a/backend/yugioh/admin.py b/backend/yugioh/admin.py index 8c38f3f3..911266ad 100644 --- a/backend/yugioh/admin.py +++ b/backend/yugioh/admin.py @@ -1,3 +1,10 @@ from django.contrib import admin -# Register your models here. +from yugioh.models import YugiohCard + + +@admin.register(YugiohCard) +class YugiohCardAdmin(admin.ModelAdmin): + list_display = ['type', 'frame_type', 'description', 'attack', 'defense', 'level', 'race', 'attribute', 'archetype'] + list_filter = ['type', 'frame_type', 'description', 'attack', 'defense', 'level', 'race', 'attribute', 'archetype'] + search_fields = ['type', 'frame_type', 'description', 'attack', 'defense', 'level', 'race', 'attribute', 'archetype'] diff --git a/backend/yugioh/models.py b/backend/yugioh/models.py index f893cedf..f1a65c7d 100644 --- a/backend/yugioh/models.py +++ b/backend/yugioh/models.py @@ -64,7 +64,7 @@ class YugiohCard(models.Model): ) def __str__(self): - return self.card + return self.card.card_name class YugiohCardYugiohCardInSet(models.Model): diff --git a/backend/yugiohcardinset/admin.py b/backend/yugiohcardinset/admin.py index ca661a8b..30d21af4 100644 --- a/backend/yugiohcardinset/admin.py +++ b/backend/yugiohcardinset/admin.py @@ -5,6 +5,10 @@ @admin.register(YugiohCardInSet) class YugiohCardInSetAdmin(admin.ModelAdmin): - list_display = ('set', 'rarity') - list_filter = ('set', 'rarity') - search_fields = ('set', 'rarity') + list_display = ('set_name', 'rarity_name') + + def set_name(self, obj): + return obj.set.card_set_name + + def rarity_name(self, obj): + return obj.rarity diff --git a/backend/yugiohcardrarity/admin.py b/backend/yugiohcardrarity/admin.py index 244125fa..f90a5994 100644 --- a/backend/yugiohcardrarity/admin.py +++ b/backend/yugiohcardrarity/admin.py @@ -5,6 +5,6 @@ @admin.register(YugiohCardRarity) class YugiohCardRarityAdmin(admin.ModelAdmin): - list_display = ('rarity',) - list_filter = ('rarity',) - search_fields = ('rarity',) + list_display = ('rarity', 'rarity_code') + list_filter = ('rarity', 'rarity_code') + search_fields = ('rarity', 'rarity_code') diff --git a/backend/yugiohcardrarity/migrations/0004_yugiohcardrarity_rarity_code.py b/backend/yugiohcardrarity/migrations/0004_yugiohcardrarity_rarity_code.py new file mode 100644 index 00000000..1e523e05 --- /dev/null +++ b/backend/yugiohcardrarity/migrations/0004_yugiohcardrarity_rarity_code.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.6 on 2023-11-04 13:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('yugiohcardrarity', '0003_alter_yugiohcardrarity_options_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='yugiohcardrarity', + name='rarity_code', + field=models.CharField(default=1, max_length=100, unique=True), + preserve_default=False, + ), + ] diff --git a/backend/yugiohcardrarity/models.py b/backend/yugiohcardrarity/models.py index a0157087..79ba2671 100644 --- a/backend/yugiohcardrarity/models.py +++ b/backend/yugiohcardrarity/models.py @@ -7,9 +7,14 @@ class YugiohCardRarity(models.Model): unique=True, ) + rarity_code = models.CharField( + max_length=100, + unique=True, + ) + class Meta: verbose_name_plural = 'Yugioh Card Rarities' verbose_name = 'Yugioh Card Rarity' def __str__(self): - return self.rarity + return f'{self.rarity} - {self.rarity_code}' diff --git a/backend/yugiohcardset/migrations/0003_yugiohcardset_rarity_code.py b/backend/yugiohcardset/migrations/0003_yugiohcardset_rarity_code.py new file mode 100644 index 00000000..79b7f5c3 --- /dev/null +++ b/backend/yugiohcardset/migrations/0003_yugiohcardset_rarity_code.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.6 on 2023-11-04 13:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('yugiohcardset', '0002_remove_yugiohcardset_card_in_set'), + ] + + operations = [ + migrations.AddField( + model_name='yugiohcardset', + name='rarity_code', + field=models.CharField(default=1, max_length=100, unique=True), + preserve_default=False, + ), + ] diff --git a/backend/yugiohcardset/models.py b/backend/yugiohcardset/models.py index 964f2b86..0c290707 100644 --- a/backend/yugiohcardset/models.py +++ b/backend/yugiohcardset/models.py @@ -9,5 +9,10 @@ class YugiohCardSet(models.Model): unique=True, ) + rarity_code = models.CharField( + max_length=100, + unique=True, + ) + def __str__(self): - return self.card_set_name + return f'{self.card_set_name} - {self.rarity_code}' From 28065788b766e6e5d917ced8c0fa78f0237012f7 Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Sat, 4 Nov 2023 15:28:41 +0200 Subject: [PATCH 068/667] Update admin.py Updated YugiohCardInSet admin.py --- backend/yugiohcardinset/admin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/yugiohcardinset/admin.py b/backend/yugiohcardinset/admin.py index 30d21af4..96713fb8 100644 --- a/backend/yugiohcardinset/admin.py +++ b/backend/yugiohcardinset/admin.py @@ -6,6 +6,7 @@ @admin.register(YugiohCardInSet) class YugiohCardInSetAdmin(admin.ModelAdmin): list_display = ('set_name', 'rarity_name') + list_filter = 'set__card_set_name', 'rarity__rarity' def set_name(self, obj): return obj.set.card_set_name From c104fbd4bd871fe6c0f1957026d762e9b826739f Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Sat, 4 Nov 2023 16:24:22 +0200 Subject: [PATCH 069/667] Made some general stricture changes Moved all apps to an single app for current game --- backend/cardflow/settings.py | 5 +- backend/yugioh/admin.py | 29 ++++++++++- backend/yugioh/migrations/0001_initial.py | 34 +++++++++++-- ...0002_remove_yugiohcard_yugioh_card_name.py | 17 ------- .../migrations/0003_yugiohcard_card_in_set.py | 21 -------- ..._remove_yugiohcard_card_in_set_and_more.py | 27 ---------- backend/yugioh/models.py | 50 ++++++++++++++++--- backend/yugiohcardinset/__init__.py | 0 backend/yugiohcardinset/admin.py | 15 ------ backend/yugiohcardinset/apps.py | 7 --- .../migrations/0001_initial.py | 22 -------- .../0002_alter_yugiohcardinset_rarity.py | 20 -------- .../0003_alter_yugiohcardinset_set.py | 20 -------- .../yugiohcardinset/migrations/__init__.py | 0 backend/yugiohcardinset/models.py | 15 ------ backend/yugiohcardinset/tests.py | 3 -- backend/yugiohcardinset/views.py | 3 -- backend/yugiohcardrarity/__init__.py | 0 backend/yugiohcardrarity/admin.py | 10 ---- backend/yugiohcardrarity/apps.py | 7 --- .../migrations/0001_initial.py | 24 --------- .../0002_alter_yugiohcardrarity_options.py | 17 ------- ...alter_yugiohcardrarity_options_and_more.py | 21 -------- .../0004_yugiohcardrarity_rarity_code.py | 19 ------- .../yugiohcardrarity/migrations/__init__.py | 0 backend/yugiohcardrarity/models.py | 20 -------- backend/yugiohcardrarity/tests.py | 3 -- backend/yugiohcardrarity/views.py | 3 -- backend/yugiohcardset/__init__.py | 0 backend/yugiohcardset/admin.py | 10 ---- backend/yugiohcardset/apps.py | 7 --- .../yugiohcardset/migrations/0001_initial.py | 24 --------- .../0002_remove_yugiohcardset_card_in_set.py | 17 ------- .../0003_yugiohcardset_rarity_code.py | 19 ------- backend/yugiohcardset/migrations/__init__.py | 0 backend/yugiohcardset/models.py | 18 ------- backend/yugiohcardset/tests.py | 3 -- backend/yugiohcardset/views.py | 3 -- 38 files changed, 104 insertions(+), 409 deletions(-) delete mode 100644 backend/yugioh/migrations/0002_remove_yugiohcard_yugioh_card_name.py delete mode 100644 backend/yugioh/migrations/0003_yugiohcard_card_in_set.py delete mode 100644 backend/yugioh/migrations/0004_remove_yugiohcard_card_in_set_and_more.py delete mode 100644 backend/yugiohcardinset/__init__.py delete mode 100644 backend/yugiohcardinset/admin.py delete mode 100644 backend/yugiohcardinset/apps.py delete mode 100644 backend/yugiohcardinset/migrations/0001_initial.py delete mode 100644 backend/yugiohcardinset/migrations/0002_alter_yugiohcardinset_rarity.py delete mode 100644 backend/yugiohcardinset/migrations/0003_alter_yugiohcardinset_set.py delete mode 100644 backend/yugiohcardinset/migrations/__init__.py delete mode 100644 backend/yugiohcardinset/models.py delete mode 100644 backend/yugiohcardinset/tests.py delete mode 100644 backend/yugiohcardinset/views.py delete mode 100644 backend/yugiohcardrarity/__init__.py delete mode 100644 backend/yugiohcardrarity/admin.py delete mode 100644 backend/yugiohcardrarity/apps.py delete mode 100644 backend/yugiohcardrarity/migrations/0001_initial.py delete mode 100644 backend/yugiohcardrarity/migrations/0002_alter_yugiohcardrarity_options.py delete mode 100644 backend/yugiohcardrarity/migrations/0003_alter_yugiohcardrarity_options_and_more.py delete mode 100644 backend/yugiohcardrarity/migrations/0004_yugiohcardrarity_rarity_code.py delete mode 100644 backend/yugiohcardrarity/migrations/__init__.py delete mode 100644 backend/yugiohcardrarity/models.py delete mode 100644 backend/yugiohcardrarity/tests.py delete mode 100644 backend/yugiohcardrarity/views.py delete mode 100644 backend/yugiohcardset/__init__.py delete mode 100644 backend/yugiohcardset/admin.py delete mode 100644 backend/yugiohcardset/apps.py delete mode 100644 backend/yugiohcardset/migrations/0001_initial.py delete mode 100644 backend/yugiohcardset/migrations/0002_remove_yugiohcardset_card_in_set.py delete mode 100644 backend/yugiohcardset/migrations/0003_yugiohcardset_rarity_code.py delete mode 100644 backend/yugiohcardset/migrations/__init__.py delete mode 100644 backend/yugiohcardset/models.py delete mode 100644 backend/yugiohcardset/tests.py delete mode 100644 backend/yugiohcardset/views.py diff --git a/backend/cardflow/settings.py b/backend/cardflow/settings.py index 695bef14..fd3370b6 100644 --- a/backend/cardflow/settings.py +++ b/backend/cardflow/settings.py @@ -32,12 +32,9 @@ 'rest_framework.authtoken', 'accounts', + 'game', 'card', 'yugioh', - 'game', - 'yugiohcardset', - 'yugiohcardrarity', - 'yugiohcardinset', 'drf_spectacular', ] diff --git a/backend/yugioh/admin.py b/backend/yugioh/admin.py index 911266ad..25506160 100644 --- a/backend/yugioh/admin.py +++ b/backend/yugioh/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin -from yugioh.models import YugiohCard +from .models import YugiohCard, YugiohCardInSet, YugiohCardRarity, YugiohCardSet @admin.register(YugiohCard) @@ -8,3 +8,30 @@ class YugiohCardAdmin(admin.ModelAdmin): list_display = ['type', 'frame_type', 'description', 'attack', 'defense', 'level', 'race', 'attribute', 'archetype'] list_filter = ['type', 'frame_type', 'description', 'attack', 'defense', 'level', 'race', 'attribute', 'archetype'] search_fields = ['type', 'frame_type', 'description', 'attack', 'defense', 'level', 'race', 'attribute', 'archetype'] + + +@admin.register(YugiohCardInSet) +class YugiohCardInSetAdmin(admin.ModelAdmin): + list_display = ('set_name', 'rarity_name') + list_filter = 'set__card_set_name', 'rarity__rarity' + + def set_name(self, obj): + return obj.set.card_set_name + + def rarity_name(self, obj): + return obj.rarity + + +@admin.register(YugiohCardRarity) +class YugiohCardRarityAdmin(admin.ModelAdmin): + pass + list_display = ('rarity', 'rarity_code') + list_filter = ('rarity', 'rarity_code') + search_fields = ('rarity', 'rarity_code') + + +@admin.register(YugiohCardSet) +class YugiohCardSetAdmin(admin.ModelAdmin): + list_display = ('card_set_name', 'rarity_code') + list_filter = ('card_set_name', 'rarity_code') + search_fields = ('card_set_name', 'rarity_code') diff --git a/backend/yugioh/migrations/0001_initial.py b/backend/yugioh/migrations/0001_initial.py index 242564e9..24b8eee2 100644 --- a/backend/yugioh/migrations/0001_initial.py +++ b/backend/yugioh/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.6 on 2023-11-01 13:31 +# Generated by Django 4.2.6 on 2023-11-04 14:19 from django.db import migrations, models import django.db.models.deletion @@ -9,7 +9,7 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('card', '0001_initial'), + ('card', '0002_alter_card_game'), ] operations = [ @@ -17,7 +17,6 @@ class Migration(migrations.Migration): name='YugiohCard', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('yugioh_card_name', models.CharField(max_length=100, unique=True)), ('type', models.CharField(max_length=100)), ('frame_type', models.CharField(max_length=100)), ('description', models.CharField(blank=True, max_length=1000, null=True)), @@ -31,4 +30,33 @@ class Migration(migrations.Migration): ('card', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='card.card')), ], ), + migrations.CreateModel( + name='YugiohCardRarity', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('rarity', models.CharField(max_length=100, unique=True)), + ('rarity_code', models.CharField(max_length=100, unique=True)), + ], + options={ + 'verbose_name': 'Yugioh Card Rarity', + 'verbose_name_plural': 'Yugioh Card Rarities', + }, + ), + migrations.CreateModel( + name='YugiohCardSet', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('card_set_name', models.CharField(max_length=100, unique=True)), + ('rarity_code', models.CharField(max_length=100, unique=True)), + ], + ), + migrations.CreateModel( + name='YugiohCardInSet', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('rarity', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='yugioh.yugiohcardrarity')), + ('set', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='yugioh.yugiohcardset')), + ('yugioh_card', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='yugioh.yugiohcard')), + ], + ), ] diff --git a/backend/yugioh/migrations/0002_remove_yugiohcard_yugioh_card_name.py b/backend/yugioh/migrations/0002_remove_yugiohcard_yugioh_card_name.py deleted file mode 100644 index 3c7b2be0..00000000 --- a/backend/yugioh/migrations/0002_remove_yugiohcard_yugioh_card_name.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-04 08:51 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('yugioh', '0001_initial'), - ] - - operations = [ - migrations.RemoveField( - model_name='yugiohcard', - name='yugioh_card_name', - ), - ] diff --git a/backend/yugioh/migrations/0003_yugiohcard_card_in_set.py b/backend/yugioh/migrations/0003_yugiohcard_card_in_set.py deleted file mode 100644 index 45187a69..00000000 --- a/backend/yugioh/migrations/0003_yugiohcard_card_in_set.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-04 08:58 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('yugiohcardinset', '0003_alter_yugiohcardinset_set'), - ('yugioh', '0002_remove_yugiohcard_yugioh_card_name'), - ] - - operations = [ - migrations.AddField( - model_name='yugiohcard', - name='card_in_set', - field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='yugiohcardinset.yugiohcardinset'), - preserve_default=False, - ), - ] diff --git a/backend/yugioh/migrations/0004_remove_yugiohcard_card_in_set_and_more.py b/backend/yugioh/migrations/0004_remove_yugiohcard_card_in_set_and_more.py deleted file mode 100644 index 65f8a7fe..00000000 --- a/backend/yugioh/migrations/0004_remove_yugiohcard_card_in_set_and_more.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-04 10:40 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('yugiohcardinset', '0003_alter_yugiohcardinset_set'), - ('yugioh', '0003_yugiohcard_card_in_set'), - ] - - operations = [ - migrations.RemoveField( - model_name='yugiohcard', - name='card_in_set', - ), - migrations.CreateModel( - name='YugiohCardYugiohCardInSet', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('yugioh_card', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='yugioh.yugiohcard')), - ('yugioh_card_in_set', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='yugiohcardinset.yugiohcardinset')), - ], - ), - ] diff --git a/backend/yugioh/models.py b/backend/yugioh/models.py index f1a65c7d..6fe865ab 100644 --- a/backend/yugioh/models.py +++ b/backend/yugioh/models.py @@ -1,7 +1,5 @@ from django.db import models -from yugiohcardinset.models import YugiohCardInSet - class YugiohCard(models.Model): @@ -67,14 +65,54 @@ def __str__(self): return self.card.card_name -class YugiohCardYugiohCardInSet(models.Model): +class YugiohCardInSet(models.Model): + rarity = models.ForeignKey( + 'YugiohCardRarity', + on_delete=models.CASCADE, + ) + set = models.ForeignKey( + 'YugiohCardSet', + on_delete=models.CASCADE, + ) yugioh_card = models.ForeignKey( YugiohCard, on_delete=models.CASCADE, ) - yugioh_card_in_set = models.ForeignKey( - YugiohCardInSet, - on_delete=models.CASCADE, + def __str__(self): + return f'{self.set} - {self.rarity}' + + +class YugiohCardSet(models.Model): + card_set_name = models.CharField( + max_length=100, + unique=True, + ) + + rarity_code = models.CharField( + max_length=100, + unique=True, ) + + def __str__(self): + return f'{self.card_set_name} - {self.rarity_code}' + + +class YugiohCardRarity(models.Model): + rarity = models.CharField( + max_length=100, + unique=True, + ) + + rarity_code = models.CharField( + max_length=100, + unique=True, + ) + + class Meta: + verbose_name_plural = 'Yugioh Card Rarities' + verbose_name = 'Yugioh Card Rarity' + + def __str__(self): + return f'{self.rarity} - {self.rarity_code}' diff --git a/backend/yugiohcardinset/__init__.py b/backend/yugiohcardinset/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/backend/yugiohcardinset/admin.py b/backend/yugiohcardinset/admin.py deleted file mode 100644 index 96713fb8..00000000 --- a/backend/yugiohcardinset/admin.py +++ /dev/null @@ -1,15 +0,0 @@ -from django.contrib import admin - -from yugiohcardinset.models import YugiohCardInSet - - -@admin.register(YugiohCardInSet) -class YugiohCardInSetAdmin(admin.ModelAdmin): - list_display = ('set_name', 'rarity_name') - list_filter = 'set__card_set_name', 'rarity__rarity' - - def set_name(self, obj): - return obj.set.card_set_name - - def rarity_name(self, obj): - return obj.rarity diff --git a/backend/yugiohcardinset/apps.py b/backend/yugiohcardinset/apps.py deleted file mode 100644 index e56c5bdb..00000000 --- a/backend/yugiohcardinset/apps.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.apps import AppConfig - - -class YugiohcardinsetConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'yugiohcardinset' - verbose_name = 'Yugioh Card In Set' diff --git a/backend/yugiohcardinset/migrations/0001_initial.py b/backend/yugiohcardinset/migrations/0001_initial.py deleted file mode 100644 index 9adb2601..00000000 --- a/backend/yugiohcardinset/migrations/0001_initial.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-01 14:23 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='YugiohCardInSet', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('rarity', models.CharField(max_length=100)), - ('set', models.CharField(max_length=100)), - ], - ), - ] diff --git a/backend/yugiohcardinset/migrations/0002_alter_yugiohcardinset_rarity.py b/backend/yugiohcardinset/migrations/0002_alter_yugiohcardinset_rarity.py deleted file mode 100644 index 170a586d..00000000 --- a/backend/yugiohcardinset/migrations/0002_alter_yugiohcardinset_rarity.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-01 16:08 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('yugiohcardrarity', '0002_alter_yugiohcardrarity_options'), - ('yugiohcardinset', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='yugiohcardinset', - name='rarity', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='yugiohcardrarity.yugiohcardrarity'), - ), - ] diff --git a/backend/yugiohcardinset/migrations/0003_alter_yugiohcardinset_set.py b/backend/yugiohcardinset/migrations/0003_alter_yugiohcardinset_set.py deleted file mode 100644 index aa006780..00000000 --- a/backend/yugiohcardinset/migrations/0003_alter_yugiohcardinset_set.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-04 08:51 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('yugiohcardset', '0002_remove_yugiohcardset_card_in_set'), - ('yugiohcardinset', '0002_alter_yugiohcardinset_rarity'), - ] - - operations = [ - migrations.AlterField( - model_name='yugiohcardinset', - name='set', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='yugiohcardset.yugiohcardset'), - ), - ] diff --git a/backend/yugiohcardinset/migrations/__init__.py b/backend/yugiohcardinset/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/backend/yugiohcardinset/models.py b/backend/yugiohcardinset/models.py deleted file mode 100644 index 6ff85197..00000000 --- a/backend/yugiohcardinset/models.py +++ /dev/null @@ -1,15 +0,0 @@ -from django.db import models - - -class YugiohCardInSet(models.Model): - rarity = models.ForeignKey( - 'yugiohcardrarity.YugiohCardRarity', - on_delete=models.CASCADE, - ) - set = models.ForeignKey( - 'yugiohcardset.YugiohCardSet', - on_delete=models.CASCADE, - ) - - def __str__(self): - return f'{self.set} - {self.rarity}' diff --git a/backend/yugiohcardinset/tests.py b/backend/yugiohcardinset/tests.py deleted file mode 100644 index 7ce503c2..00000000 --- a/backend/yugiohcardinset/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/backend/yugiohcardinset/views.py b/backend/yugiohcardinset/views.py deleted file mode 100644 index 91ea44a2..00000000 --- a/backend/yugiohcardinset/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/backend/yugiohcardrarity/__init__.py b/backend/yugiohcardrarity/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/backend/yugiohcardrarity/admin.py b/backend/yugiohcardrarity/admin.py deleted file mode 100644 index f90a5994..00000000 --- a/backend/yugiohcardrarity/admin.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.contrib import admin - -from yugiohcardrarity.models import YugiohCardRarity - - -@admin.register(YugiohCardRarity) -class YugiohCardRarityAdmin(admin.ModelAdmin): - list_display = ('rarity', 'rarity_code') - list_filter = ('rarity', 'rarity_code') - search_fields = ('rarity', 'rarity_code') diff --git a/backend/yugiohcardrarity/apps.py b/backend/yugiohcardrarity/apps.py deleted file mode 100644 index ce30385d..00000000 --- a/backend/yugiohcardrarity/apps.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.apps import AppConfig - - -class YugiohcardrarityConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'yugiohcardrarity' - verbose_name = 'Yugioh Card Rarity' diff --git a/backend/yugiohcardrarity/migrations/0001_initial.py b/backend/yugiohcardrarity/migrations/0001_initial.py deleted file mode 100644 index f82db0c2..00000000 --- a/backend/yugiohcardrarity/migrations/0001_initial.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-01 14:23 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('yugiohcardinset', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='YugiohCardRarity', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('rarity', models.CharField(max_length=100, unique=True)), - ('set', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='yugiohcardinset.yugiohcardinset')), - ], - ), - ] diff --git a/backend/yugiohcardrarity/migrations/0002_alter_yugiohcardrarity_options.py b/backend/yugiohcardrarity/migrations/0002_alter_yugiohcardrarity_options.py deleted file mode 100644 index 36ca6f7a..00000000 --- a/backend/yugiohcardrarity/migrations/0002_alter_yugiohcardrarity_options.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-01 16:08 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('yugiohcardrarity', '0001_initial'), - ] - - operations = [ - migrations.AlterModelOptions( - name='yugiohcardrarity', - options={'ordering': ('set', 'rarity'), 'verbose_name': 'Yugioh Card Rarity', 'verbose_name_plural': 'Yugioh Card Rarities'}, - ), - ] diff --git a/backend/yugiohcardrarity/migrations/0003_alter_yugiohcardrarity_options_and_more.py b/backend/yugiohcardrarity/migrations/0003_alter_yugiohcardrarity_options_and_more.py deleted file mode 100644 index ced84c7c..00000000 --- a/backend/yugiohcardrarity/migrations/0003_alter_yugiohcardrarity_options_and_more.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-04 09:30 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('yugiohcardrarity', '0002_alter_yugiohcardrarity_options'), - ] - - operations = [ - migrations.AlterModelOptions( - name='yugiohcardrarity', - options={'verbose_name': 'Yugioh Card Rarity', 'verbose_name_plural': 'Yugioh Card Rarities'}, - ), - migrations.RemoveField( - model_name='yugiohcardrarity', - name='set', - ), - ] diff --git a/backend/yugiohcardrarity/migrations/0004_yugiohcardrarity_rarity_code.py b/backend/yugiohcardrarity/migrations/0004_yugiohcardrarity_rarity_code.py deleted file mode 100644 index 1e523e05..00000000 --- a/backend/yugiohcardrarity/migrations/0004_yugiohcardrarity_rarity_code.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-04 13:18 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('yugiohcardrarity', '0003_alter_yugiohcardrarity_options_and_more'), - ] - - operations = [ - migrations.AddField( - model_name='yugiohcardrarity', - name='rarity_code', - field=models.CharField(default=1, max_length=100, unique=True), - preserve_default=False, - ), - ] diff --git a/backend/yugiohcardrarity/migrations/__init__.py b/backend/yugiohcardrarity/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/backend/yugiohcardrarity/models.py b/backend/yugiohcardrarity/models.py deleted file mode 100644 index 79ba2671..00000000 --- a/backend/yugiohcardrarity/models.py +++ /dev/null @@ -1,20 +0,0 @@ -from django.db import models - - -class YugiohCardRarity(models.Model): - rarity = models.CharField( - max_length=100, - unique=True, - ) - - rarity_code = models.CharField( - max_length=100, - unique=True, - ) - - class Meta: - verbose_name_plural = 'Yugioh Card Rarities' - verbose_name = 'Yugioh Card Rarity' - - def __str__(self): - return f'{self.rarity} - {self.rarity_code}' diff --git a/backend/yugiohcardrarity/tests.py b/backend/yugiohcardrarity/tests.py deleted file mode 100644 index 7ce503c2..00000000 --- a/backend/yugiohcardrarity/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/backend/yugiohcardrarity/views.py b/backend/yugiohcardrarity/views.py deleted file mode 100644 index 91ea44a2..00000000 --- a/backend/yugiohcardrarity/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/backend/yugiohcardset/__init__.py b/backend/yugiohcardset/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/backend/yugiohcardset/admin.py b/backend/yugiohcardset/admin.py deleted file mode 100644 index 49381630..00000000 --- a/backend/yugiohcardset/admin.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.contrib import admin - -from yugiohcardset.models import YugiohCardSet - - -@admin.register(YugiohCardSet) -class YugiohCardSetAdmin(admin.ModelAdmin): - list_display = ('card_set_name',) - list_filter = ('card_set_name',) - search_fields = ('card_set_name',) diff --git a/backend/yugiohcardset/apps.py b/backend/yugiohcardset/apps.py deleted file mode 100644 index fa409b1a..00000000 --- a/backend/yugiohcardset/apps.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.apps import AppConfig - - -class YugiohcardsetConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'yugiohcardset' - verbose_name = "Yugioh Card Set" diff --git a/backend/yugiohcardset/migrations/0001_initial.py b/backend/yugiohcardset/migrations/0001_initial.py deleted file mode 100644 index 1515b4bf..00000000 --- a/backend/yugiohcardset/migrations/0001_initial.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-01 14:23 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('yugiohcardinset', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='YugiohCardSet', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('card_set_name', models.CharField(max_length=100, unique=True)), - ('card_in_set', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='yugiohcardinset.yugiohcardinset')), - ], - ), - ] diff --git a/backend/yugiohcardset/migrations/0002_remove_yugiohcardset_card_in_set.py b/backend/yugiohcardset/migrations/0002_remove_yugiohcardset_card_in_set.py deleted file mode 100644 index 8411db6e..00000000 --- a/backend/yugiohcardset/migrations/0002_remove_yugiohcardset_card_in_set.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-04 08:51 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('yugiohcardset', '0001_initial'), - ] - - operations = [ - migrations.RemoveField( - model_name='yugiohcardset', - name='card_in_set', - ), - ] diff --git a/backend/yugiohcardset/migrations/0003_yugiohcardset_rarity_code.py b/backend/yugiohcardset/migrations/0003_yugiohcardset_rarity_code.py deleted file mode 100644 index 79b7f5c3..00000000 --- a/backend/yugiohcardset/migrations/0003_yugiohcardset_rarity_code.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-04 13:18 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('yugiohcardset', '0002_remove_yugiohcardset_card_in_set'), - ] - - operations = [ - migrations.AddField( - model_name='yugiohcardset', - name='rarity_code', - field=models.CharField(default=1, max_length=100, unique=True), - preserve_default=False, - ), - ] diff --git a/backend/yugiohcardset/migrations/__init__.py b/backend/yugiohcardset/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/backend/yugiohcardset/models.py b/backend/yugiohcardset/models.py deleted file mode 100644 index 0c290707..00000000 --- a/backend/yugiohcardset/models.py +++ /dev/null @@ -1,18 +0,0 @@ -from django.db import models - -from yugiohcardinset.models import YugiohCardInSet - - -class YugiohCardSet(models.Model): - card_set_name = models.CharField( - max_length=100, - unique=True, - ) - - rarity_code = models.CharField( - max_length=100, - unique=True, - ) - - def __str__(self): - return f'{self.card_set_name} - {self.rarity_code}' diff --git a/backend/yugiohcardset/tests.py b/backend/yugiohcardset/tests.py deleted file mode 100644 index 7ce503c2..00000000 --- a/backend/yugiohcardset/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/backend/yugiohcardset/views.py b/backend/yugiohcardset/views.py deleted file mode 100644 index 91ea44a2..00000000 --- a/backend/yugiohcardset/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. From 64f0adbedb2b5a558a80962e84df6a7fd199e731 Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Sat, 4 Nov 2023 17:03:31 +0200 Subject: [PATCH 070/667] fixed field name in model CardSet and added seed command folder structure also fixed __str__ method for YugiohCard model to return string --- backend/yugioh/management/__init__.py | 0 .../yugioh/management/commands/__init__.py | 0 backend/yugioh/management/commands/seed.py | 171 ++++++++++++++++++ backend/yugioh/models.py | 6 +- 4 files changed, 175 insertions(+), 2 deletions(-) create mode 100644 backend/yugioh/management/__init__.py create mode 100644 backend/yugioh/management/commands/__init__.py create mode 100644 backend/yugioh/management/commands/seed.py diff --git a/backend/yugioh/management/__init__.py b/backend/yugioh/management/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/yugioh/management/commands/__init__.py b/backend/yugioh/management/commands/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/yugioh/management/commands/seed.py b/backend/yugioh/management/commands/seed.py new file mode 100644 index 00000000..5721f8b4 --- /dev/null +++ b/backend/yugioh/management/commands/seed.py @@ -0,0 +1,171 @@ +import requests +from card.models import Card +from django.core.management.base import BaseCommand +from game.models import Game + + +class Command(BaseCommand): + help = """ + Seed the database with YUGIOH card data from an external API. + + This management command fetches YUGIOH card data from an external API and stores it in the database. + + Available commands: + - onecard: Seed data for a specific card (e.g., "Dark Magician"). + - staple: Seed data for staple cards. + - all: Seed data for all YUGIOH cards. + + Usage: + python manage.py seed + + Example: + python manage.py seed onecard + """ + + API_URLS = { + 'onecard': "https://db.ygoprodeck.com/api/v7/cardinfo.php?name=Dark Magician", + 'staple': "https://db.ygoprodeck.com/api/v7/cardinfo.php?staple=yes", + 'all': "https://db.ygoprodeck.com/api/v7/cardinfo.php", + } + + def add_arguments(self, parser): + parser.add_argument( + 'command', + type=str, + choices=['onecard', 'staple', 'all'], + help='Type of data to seed the database with' + ) + + def handle(self, *args, **options): + + """ + + Fetch and store YUGIOH card data based on the chosen command. + Args: + (str): The type of data to seed the database with (onecard, staple, or all). + + """ + + api_url = self.API_URLS.get(options['command']) + + if not api_url: + self.stdout.write(self.style.ERROR(f'Invalid command: {options["command"]}. Please check help options.')) + return + + self.stdout.write('Calling the external API') + + response = requests.get(api_url) + + if response.status_code == 200: + self.stdout.write('API response received successfully') + data = response.json() + else: + self.stdout.write(self.style.ERROR(f'API request failed with status code {response.status_code}')) + return + + if not Game.objects.filter(game_name="YUGIOH").exists(): + print('Game does not exist... Creating') + Game.objects.create(game_name="YUGIOH") + + for item in data['data']: + print('Reading Card Details') + card_name = item['name'] + type = item['type'] + frame_type = item['frameType'] + desc = item['desc'] + try: + atk = item['atk'] + except KeyError: + atk = "NULL" + print('KeyError for atk') + + try: + defense = item['def'] + except KeyError: + defense = "NULL" + print('KeyError for defense') + + try: + level = item['level'] + except KeyError: + level = "NULL" + print('KeyError for level') + + try: + race = item['race'] + except KeyError: + race = "NULL" + print('KeyError for race') + + try: + attribute = item['attribute'] + except KeyError: + attribute = "NULL" + print('KeyError for attribute') + + try: + archetype = item['archetype'] + except KeyError: + archetype = "NULL" + print('KeyError for archetype') + + try: + image = item['card_images'][0]['image_url'] + except (KeyError, IndexError): + image = "NULL" + print('KeyError or IndexError for image') + + game = Game.objects.filter(game_name="YUGIOH").get() + + card = Card.objects.filter(card_name=card_name).first() + + if not card: + print('Card does not exist... Creating') + card = Card.objects.create(card_name=card_name, game=game) + else: + print(f'{card.card_name} card already exists') + + yugioh_card_object = YugiohCard.objects.create( + type=type, + frame_type=frame_type, + description=desc, + attack=atk, + defense=defense, + level=level, + race=race, + attribute=attribute, + archetype=archetype, + image=image, + card=card, + ) + + for entry in item['card_sets']: + card_set_name = entry["set_name"] + rarity = entry["set_rarity"] + + rarity_object = YugiohCardRarity.objects.filter(rarity=rarity).first() + card_set_object = YugiohCardSet.objects.filter(card_set_name=card_set_name).first() + + if not rarity_object: + print('Rarity does not exist... Creating') + rarity_object = YugiohCardRarity.objects.create(rarity=rarity) + + if not card_set_object: + print('CardSet does not exist... Creating') + card_set_object = YugiohCardSet.objects.create( + card_set_name=card_set_name) + + existing_card = YugiohCardInSet.objects.filter( + rarity=rarity_object, + set=card_set_object, + yugioh_card=yugioh_card_object + ).first() + + if not existing_card: + card_in_set_object = YugiohCardInSet.objects.create(rarity=rarity_object, set=card_set_object, + yugioh_card=yugioh_card_object) + else: + self.stdout.write(self.style.ERROR(f'Card {yugioh_card_object.card_name} with ' + f'{card_in_set_object} {rarity_object}... Skipping')) + + self.stdout.write(self.style.SUCCESS(f'DONE!')) diff --git a/backend/yugioh/models.py b/backend/yugioh/models.py index 6fe865ab..cc81968f 100644 --- a/backend/yugioh/models.py +++ b/backend/yugioh/models.py @@ -62,10 +62,11 @@ class YugiohCard(models.Model): ) def __str__(self): - return self.card.card_name + return f'{self.card.card_name}' class YugiohCardInSet(models.Model): + rarity = models.ForeignKey( 'YugiohCardRarity', on_delete=models.CASCADE, @@ -90,7 +91,7 @@ class YugiohCardSet(models.Model): unique=True, ) - rarity_code = models.CharField( + card_set_code = models.CharField( max_length=100, unique=True, ) @@ -100,6 +101,7 @@ def __str__(self): class YugiohCardRarity(models.Model): + rarity = models.CharField( max_length=100, unique=True, From 9a5163dc4d85ba92bd3017d89ee2ac997577a1ac Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Sat, 4 Nov 2023 22:02:39 +0200 Subject: [PATCH 071/667] YugiohCardSet model changet rarity_code field in YugiohCardSet model was changed to set_code --- backend/cardflow/urls.py | 3 ++- backend/yugioh/admin.py | 6 +++--- ...ename_rarity_code_yugiohcardset_set_code.py | 18 ++++++++++++++++++ backend/yugioh/models.py | 4 ++-- 4 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_set_code.py diff --git a/backend/cardflow/urls.py b/backend/cardflow/urls.py index 873c45f7..20a359c5 100644 --- a/backend/cardflow/urls.py +++ b/backend/cardflow/urls.py @@ -1,10 +1,11 @@ from django.contrib import admin from django.urls import path, include -from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView +from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView, SpectacularRedocView from rest_framework import permissions urlpatterns = [ path('admin/', admin.site.urls), path('api/schema/', SpectacularAPIView.as_view(), name='api-schema'), path('api/docs/', SpectacularSwaggerView.as_view(url_name='api-schema'), name='api-docs'), + path('api/redoc/', SpectacularRedocView.as_view(url_name='api-schema'), name='api-redoc'), ] diff --git a/backend/yugioh/admin.py b/backend/yugioh/admin.py index 25506160..054f0aba 100644 --- a/backend/yugioh/admin.py +++ b/backend/yugioh/admin.py @@ -32,6 +32,6 @@ class YugiohCardRarityAdmin(admin.ModelAdmin): @admin.register(YugiohCardSet) class YugiohCardSetAdmin(admin.ModelAdmin): - list_display = ('card_set_name', 'rarity_code') - list_filter = ('card_set_name', 'rarity_code') - search_fields = ('card_set_name', 'rarity_code') + list_display = ('card_set_name', 'set_code') + list_filter = ('card_set_name', 'set_code') + search_fields = ('card_set_name', 'set_code') diff --git a/backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_set_code.py b/backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_set_code.py new file mode 100644 index 00000000..d2ebe5e0 --- /dev/null +++ b/backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_set_code.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.6 on 2023-11-04 19:54 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('yugioh', '0001_initial'), + ] + + operations = [ + migrations.RenameField( + model_name='yugiohcardset', + old_name='rarity_code', + new_name='set_code', + ), + ] diff --git a/backend/yugioh/models.py b/backend/yugioh/models.py index 6fe865ab..f1d2e945 100644 --- a/backend/yugioh/models.py +++ b/backend/yugioh/models.py @@ -90,13 +90,13 @@ class YugiohCardSet(models.Model): unique=True, ) - rarity_code = models.CharField( + set_code = models.CharField( max_length=100, unique=True, ) def __str__(self): - return f'{self.card_set_name} - {self.rarity_code}' + return f'{self.card_set_name} - {self.set_code}' class YugiohCardRarity(models.Model): From 45c62a90760ed7a60fbe68634f27a80555dea3b5 Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Sun, 5 Nov 2023 10:49:59 +0200 Subject: [PATCH 072/667] Changed admin.py Added the card name as the first column in YugiohCardInSetAdmin Represent as card name - set - rarity in YugiohCardInSet --- backend/card/admin.py | 4 ++-- backend/yugioh/admin.py | 20 ++++++++++++++++---- backend/yugioh/models.py | 7 ++++--- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/backend/card/admin.py b/backend/card/admin.py index 4e5f19f4..ba6d08b6 100644 --- a/backend/card/admin.py +++ b/backend/card/admin.py @@ -5,7 +5,7 @@ @admin.register(Card) class CardAdmin(admin.ModelAdmin): - list_display = ('id', 'card_name', 'game') + list_display = ('card_name', 'game', 'id') list_filter = ('card_name', 'game') - search_fields = ('card_name', 'game') + search_fields = ('card_name', 'game__game_name') list_per_page = 25 diff --git a/backend/yugioh/admin.py b/backend/yugioh/admin.py index 054f0aba..27a96575 100644 --- a/backend/yugioh/admin.py +++ b/backend/yugioh/admin.py @@ -1,19 +1,29 @@ from django.contrib import admin from .models import YugiohCard, YugiohCardInSet, YugiohCardRarity, YugiohCardSet +from card.models import Card @admin.register(YugiohCard) class YugiohCardAdmin(admin.ModelAdmin): - list_display = ['type', 'frame_type', 'description', 'attack', 'defense', 'level', 'race', 'attribute', 'archetype'] - list_filter = ['type', 'frame_type', 'description', 'attack', 'defense', 'level', 'race', 'attribute', 'archetype'] - search_fields = ['type', 'frame_type', 'description', 'attack', 'defense', 'level', 'race', 'attribute', 'archetype'] + list_display = ['get_card_name', 'type', 'frame_type', 'description', 'attack', 'defense', 'level', 'race', + 'attribute', 'archetype'] + list_filter = ['card__card_name', 'type', 'frame_type', 'description', 'attack', 'defense', 'level', 'race', + 'attribute', 'archetype'] + search_fields = ['card__card_name', 'type', 'frame_type', 'description', 'attack', 'defense', 'level', 'race', + 'attribute', 'archetype'] + list_per_page = 25 + + def get_card_name(self, obj): + return obj.card.card_name @admin.register(YugiohCardInSet) class YugiohCardInSetAdmin(admin.ModelAdmin): list_display = ('set_name', 'rarity_name') - list_filter = 'set__card_set_name', 'rarity__rarity' + list_filter = ('set__card_set_name', 'rarity__rarity') + search_fields = ('set__card_set_name', 'rarity__rarity') + list_per_page = 25 def set_name(self, obj): return obj.set.card_set_name @@ -28,6 +38,7 @@ class YugiohCardRarityAdmin(admin.ModelAdmin): list_display = ('rarity', 'rarity_code') list_filter = ('rarity', 'rarity_code') search_fields = ('rarity', 'rarity_code') + list_per_page = 25 @admin.register(YugiohCardSet) @@ -35,3 +46,4 @@ class YugiohCardSetAdmin(admin.ModelAdmin): list_display = ('card_set_name', 'set_code') list_filter = ('card_set_name', 'set_code') search_fields = ('card_set_name', 'set_code') + list_per_page = 25 diff --git a/backend/yugioh/models.py b/backend/yugioh/models.py index f1d2e945..c79ca4e1 100644 --- a/backend/yugioh/models.py +++ b/backend/yugioh/models.py @@ -1,8 +1,9 @@ from django.db import models +from card.models import Card -class YugiohCard(models.Model): +class YugiohCard(models.Model): type = models.CharField( max_length=100, ) @@ -57,7 +58,7 @@ class YugiohCard(models.Model): ) card = models.ForeignKey( - 'card.Card', + Card, on_delete=models.CASCADE, ) @@ -81,7 +82,7 @@ class YugiohCardInSet(models.Model): ) def __str__(self): - return f'{self.set} - {self.rarity}' + return f'{self.yugioh_card.card.card_name} - {self.set} - {self.rarity}' class YugiohCardSet(models.Model): From 94e662aa975d770447869016ae00b951765687ee Mon Sep 17 00:00:00 2001 From: Simeon Todorov <59865649+dinocom33@users.noreply.github.com> Date: Mon, 6 Nov 2023 10:42:18 +0200 Subject: [PATCH 073/667] YugiohCard model changed YugiohCard has been changed - it inherit the card model now. __str__ representation was changed according the new inheritance. Also YugiohCardAdmin has been changed according the new inheritance. --- backend/card/admin.py | 2 +- backend/card/migrations/0001_initial.py | 5 +++-- .../card/migrations/0002_alter_card_game.py | 20 ------------------- backend/game/admin.py | 8 ++++++-- backend/game/migrations/0001_initial.py | 2 +- backend/yugioh/admin.py | 15 ++++++-------- backend/yugioh/migrations/0001_initial.py | 10 +++++----- ...name_rarity_code_yugiohcardset_set_code.py | 18 ----------------- backend/yugioh/models.py | 12 ++++------- 9 files changed, 26 insertions(+), 66 deletions(-) delete mode 100644 backend/card/migrations/0002_alter_card_game.py delete mode 100644 backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_set_code.py diff --git a/backend/card/admin.py b/backend/card/admin.py index ba6d08b6..853e3d9b 100644 --- a/backend/card/admin.py +++ b/backend/card/admin.py @@ -6,6 +6,6 @@ @admin.register(Card) class CardAdmin(admin.ModelAdmin): list_display = ('card_name', 'game', 'id') - list_filter = ('card_name', 'game') + list_filter = ('card_name', 'game__game_name') search_fields = ('card_name', 'game__game_name') list_per_page = 25 diff --git a/backend/card/migrations/0001_initial.py b/backend/card/migrations/0001_initial.py index 2d637e56..195b997a 100644 --- a/backend/card/migrations/0001_initial.py +++ b/backend/card/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.6 on 2023-11-01 13:24 +# Generated by Django 4.2.6 on 2023-11-06 08:35 from django.db import migrations, models import django.db.models.deletion @@ -9,6 +9,7 @@ class Migration(migrations.Migration): initial = True dependencies = [ + ('game', '0001_initial'), ] operations = [ @@ -17,7 +18,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('card_name', models.CharField(max_length=200, unique=True)), - ('game', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='card.card')), + ('game', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='game.game')), ], ), ] diff --git a/backend/card/migrations/0002_alter_card_game.py b/backend/card/migrations/0002_alter_card_game.py deleted file mode 100644 index 41069be9..00000000 --- a/backend/card/migrations/0002_alter_card_game.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-01 13:38 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('game', '0001_initial'), - ('card', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='card', - name='game', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='game.game'), - ), - ] diff --git a/backend/game/admin.py b/backend/game/admin.py index 514c9af0..608fbda1 100644 --- a/backend/game/admin.py +++ b/backend/game/admin.py @@ -1,11 +1,15 @@ from django.contrib import admin -from game.models import Game +from .models import Game @admin.register(Game) class GameAdmin(admin.ModelAdmin): - list_display = ('game_name',) + list_display = ('game_name', 'count_cards') list_filter = ('game_name',) search_fields = ('game_name',) + def count_cards(self, obj): + return obj.card_set.count() + + count_cards.short_description = 'Cards' diff --git a/backend/game/migrations/0001_initial.py b/backend/game/migrations/0001_initial.py index 23a6db3c..1f492ec1 100644 --- a/backend/game/migrations/0001_initial.py +++ b/backend/game/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.6 on 2023-11-01 13:31 +# Generated by Django 4.2.6 on 2023-11-06 08:35 from django.db import migrations, models diff --git a/backend/yugioh/admin.py b/backend/yugioh/admin.py index 27a96575..740f8625 100644 --- a/backend/yugioh/admin.py +++ b/backend/yugioh/admin.py @@ -6,22 +6,19 @@ @admin.register(YugiohCard) class YugiohCardAdmin(admin.ModelAdmin): - list_display = ['get_card_name', 'type', 'frame_type', 'description', 'attack', 'defense', 'level', 'race', - 'attribute', 'archetype'] - list_filter = ['card__card_name', 'type', 'frame_type', 'description', 'attack', 'defense', 'level', 'race', + list_display = ['card_name', 'type', 'frame_type', 'attack', 'defense', 'level', 'race', + 'attribute', 'archetype', 'description'] + list_filter = ['card_name', 'type', 'frame_type', 'attack', 'defense', 'level', 'race', 'attribute', 'archetype'] - search_fields = ['card__card_name', 'type', 'frame_type', 'description', 'attack', 'defense', 'level', 'race', + search_fields = ['card_name', 'type', 'frame_type', 'attack', 'defense', 'level', 'race', 'attribute', 'archetype'] list_per_page = 25 - def get_card_name(self, obj): - return obj.card.card_name - @admin.register(YugiohCardInSet) class YugiohCardInSetAdmin(admin.ModelAdmin): - list_display = ('set_name', 'rarity_name') - list_filter = ('set__card_set_name', 'rarity__rarity') + list_display = ('set_name', 'rarity_name', 'yugioh_card') + list_filter = ('set__card_set_name', 'rarity__rarity', 'yugioh_card__card_name') search_fields = ('set__card_set_name', 'rarity__rarity') list_per_page = 25 diff --git a/backend/yugioh/migrations/0001_initial.py b/backend/yugioh/migrations/0001_initial.py index 24b8eee2..e696f176 100644 --- a/backend/yugioh/migrations/0001_initial.py +++ b/backend/yugioh/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.6 on 2023-11-04 14:19 +# Generated by Django 4.2.6 on 2023-11-06 08:35 from django.db import migrations, models import django.db.models.deletion @@ -9,14 +9,14 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('card', '0002_alter_card_game'), + ('card', '0001_initial'), ] operations = [ migrations.CreateModel( name='YugiohCard', fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('card_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='card.card')), ('type', models.CharField(max_length=100)), ('frame_type', models.CharField(max_length=100)), ('description', models.CharField(blank=True, max_length=1000, null=True)), @@ -27,8 +27,8 @@ class Migration(migrations.Migration): ('attribute', models.CharField(blank=True, max_length=100, null=True)), ('archetype', models.CharField(blank=True, max_length=100, null=True)), ('image', models.URLField(blank=True, null=True)), - ('card', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='card.card')), ], + bases=('card.card',), ), migrations.CreateModel( name='YugiohCardRarity', @@ -47,7 +47,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('card_set_name', models.CharField(max_length=100, unique=True)), - ('rarity_code', models.CharField(max_length=100, unique=True)), + ('set_code', models.CharField(max_length=100, unique=True)), ], ), migrations.CreateModel( diff --git a/backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_set_code.py b/backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_set_code.py deleted file mode 100644 index d2ebe5e0..00000000 --- a/backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_set_code.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-04 19:54 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('yugioh', '0001_initial'), - ] - - operations = [ - migrations.RenameField( - model_name='yugiohcardset', - old_name='rarity_code', - new_name='set_code', - ), - ] diff --git a/backend/yugioh/models.py b/backend/yugioh/models.py index c79ca4e1..409aedd1 100644 --- a/backend/yugioh/models.py +++ b/backend/yugioh/models.py @@ -3,7 +3,8 @@ from card.models import Card -class YugiohCard(models.Model): +class YugiohCard(Card): + type = models.CharField( max_length=100, ) @@ -57,13 +58,8 @@ class YugiohCard(models.Model): null=True, ) - card = models.ForeignKey( - Card, - on_delete=models.CASCADE, - ) - def __str__(self): - return self.card.card_name + return self.card_name class YugiohCardInSet(models.Model): @@ -82,7 +78,7 @@ class YugiohCardInSet(models.Model): ) def __str__(self): - return f'{self.yugioh_card.card.card_name} - {self.set} - {self.rarity}' + return f'{self.yugioh_card.card_name} - {self.set} - {self.rarity}' class YugiohCardSet(models.Model): From 8b86884133e00a9e549bd3217a09a9b0c97c1dd9 Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Mon, 6 Nov 2023 14:35:10 +0200 Subject: [PATCH 074/667] commiting changes --- backend/yugioh/admin.py | 6 +- backend/yugioh/management/commands/seed.py | 69 ++++++++++--------- ...rarity_code_yugiohcardset_card_set_code.py | 18 +++++ backend/yugioh/models.py | 2 +- 4 files changed, 60 insertions(+), 35 deletions(-) create mode 100644 backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_card_set_code.py diff --git a/backend/yugioh/admin.py b/backend/yugioh/admin.py index 25506160..6aeec2ec 100644 --- a/backend/yugioh/admin.py +++ b/backend/yugioh/admin.py @@ -32,6 +32,6 @@ class YugiohCardRarityAdmin(admin.ModelAdmin): @admin.register(YugiohCardSet) class YugiohCardSetAdmin(admin.ModelAdmin): - list_display = ('card_set_name', 'rarity_code') - list_filter = ('card_set_name', 'rarity_code') - search_fields = ('card_set_name', 'rarity_code') + list_display = ('card_set_name', 'card_set_code') + list_filter = ('card_set_name', 'card_set_code') + search_fields = ('card_set_name', 'card_set_code') diff --git a/backend/yugioh/management/commands/seed.py b/backend/yugioh/management/commands/seed.py index 5721f8b4..054bc1ae 100644 --- a/backend/yugioh/management/commands/seed.py +++ b/backend/yugioh/management/commands/seed.py @@ -2,6 +2,7 @@ from card.models import Card from django.core.management.base import BaseCommand from game.models import Game +from yugioh.models import YugiohCard, YugiohCardRarity, YugiohCardSet, YugiohCardInSet class Command(BaseCommand): @@ -63,9 +64,9 @@ def handle(self, *args, **options): self.stdout.write(self.style.ERROR(f'API request failed with status code {response.status_code}')) return - if not Game.objects.filter(game_name="YUGIOH").exists(): + if not Game.objects.filter(game_name="Yu-Gi-Oh!").exists(): print('Game does not exist... Creating') - Game.objects.create(game_name="YUGIOH") + Game.objects.create(game_name="Yu-Gi-Oh!") for item in data['data']: print('Reading Card Details') @@ -115,45 +116,51 @@ def handle(self, *args, **options): image = "NULL" print('KeyError or IndexError for image') - game = Game.objects.filter(game_name="YUGIOH").get() + game = Game.objects.filter(game_name="Yu-Gi-Oh!").first() card = Card.objects.filter(card_name=card_name).first() - if not card: print('Card does not exist... Creating') card = Card.objects.create(card_name=card_name, game=game) + + yugioh_card_object = YugiohCard.objects.create( + type=type, + frame_type=frame_type, + description=desc, + attack=atk, + defense=defense, + level=level, + race=race, + attribute=attribute, + archetype=archetype, + image=image, + card=card, + ) else: - print(f'{card.card_name} card already exists') - - yugioh_card_object = YugiohCard.objects.create( - type=type, - frame_type=frame_type, - description=desc, - attack=atk, - defense=defense, - level=level, - race=race, - attribute=attribute, - archetype=archetype, - image=image, - card=card, - ) + print(f'{card.card_name} card already exists... Checking the sets') + yugioh_card_object = YugiohCard.objects.filter(card=card).first() for entry in item['card_sets']: card_set_name = entry["set_name"] + card_set_code = entry["set_code"] rarity = entry["set_rarity"] + rarity_code = entry["set_rarity_code"] - rarity_object = YugiohCardRarity.objects.filter(rarity=rarity).first() - card_set_object = YugiohCardSet.objects.filter(card_set_name=card_set_name).first() + rarity_object = YugiohCardRarity.objects.filter(rarity=rarity, rarity_code=rarity_code).first() + + try: + card_set_object, created = YugiohCardSet.objects.get_or_create( + card_set_name=card_set_name, + card_set_code=card_set_code + ) + except: + # Handle unique constraint violation (card_set_code already exists) + card_set_object = YugiohCardSet.objects.get(card_set_code=card_set_code) + self.stdout.write(self.style.ERROR(f'CardSet already exists for {card_set_object}')) if not rarity_object: print('Rarity does not exist... Creating') - rarity_object = YugiohCardRarity.objects.create(rarity=rarity) - - if not card_set_object: - print('CardSet does not exist... Creating') - card_set_object = YugiohCardSet.objects.create( - card_set_name=card_set_name) + rarity_object = YugiohCardRarity.objects.create(rarity=rarity, rarity_code=rarity_code) existing_card = YugiohCardInSet.objects.filter( rarity=rarity_object, @@ -162,10 +169,10 @@ def handle(self, *args, **options): ).first() if not existing_card: - card_in_set_object = YugiohCardInSet.objects.create(rarity=rarity_object, set=card_set_object, - yugioh_card=yugioh_card_object) + YugiohCardInSet.objects.create(rarity=rarity_object, set=card_set_object, + yugioh_card=yugioh_card_object) else: - self.stdout.write(self.style.ERROR(f'Card {yugioh_card_object.card_name} with ' - f'{card_in_set_object} {rarity_object}... Skipping')) + self.stdout.write(self.style.ERROR(f'Card {yugioh_card_object.card} with ' + f'{card_set_object} {rarity_object}... Skipping')) self.stdout.write(self.style.SUCCESS(f'DONE!')) diff --git a/backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_card_set_code.py b/backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_card_set_code.py new file mode 100644 index 00000000..3725fa6a --- /dev/null +++ b/backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_card_set_code.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.6 on 2023-11-04 15:34 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('yugioh', '0001_initial'), + ] + + operations = [ + migrations.RenameField( + model_name='yugiohcardset', + old_name='rarity_code', + new_name='card_set_code', + ), + ] diff --git a/backend/yugioh/models.py b/backend/yugioh/models.py index cc81968f..7d5070f2 100644 --- a/backend/yugioh/models.py +++ b/backend/yugioh/models.py @@ -97,7 +97,7 @@ class YugiohCardSet(models.Model): ) def __str__(self): - return f'{self.card_set_name} - {self.rarity_code}' + return f'{self.card_set_name} - {self.card_set_code}' class YugiohCardRarity(models.Model): From fa485d0d07d64f946dd6bfa58914ef3bd78ce79a Mon Sep 17 00:00:00 2001 From: Zhivko Tringov Date: Tue, 7 Nov 2023 00:20:51 +0200 Subject: [PATCH 075/667] Add Dockerfile, modify docker-compose.yml --- backend/Dockerfile | 27 +++++++++++++++++++++++++++ backend/cardflow/settings.py | 2 +- backend/docker-compose.yml | 25 +++++++++++++++++++++++-- 3 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 backend/Dockerfile diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 00000000..4bc66f09 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,27 @@ +# Use the official Python image as a parent image +FROM python:3 + +# Set environment variables +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 + +# Set the working directory inside the container +WORKDIR /app + +# Copy the requirements file into the container at the working directory +COPY requirements.txt /app/ + +COPY .env . + +# Install Python dependencies +RUN pip install -r requirements.txt + +# Copy the rest of the application code into the container +COPY . /app/ + +# Run Django migrations during container build +RUN python manage.py makemigrations +RUN python manage.py migrate + + +CMD ["python", "manage.py", "runserver"] diff --git a/backend/cardflow/settings.py b/backend/cardflow/settings.py index 6ed321e8..173f3490 100644 --- a/backend/cardflow/settings.py +++ b/backend/cardflow/settings.py @@ -73,7 +73,7 @@ "NAME": os.getenv("POSTGRES_DB"), "USER": os.getenv("POSTGRES_USER"), "PASSWORD": os.getenv("POSTGRES_PASSWORD"), - "HOST": os.getenv("POSTGRES_HOST"), + "HOST": "postgres", "PORT": os.getenv("POSTGRES_PORT") } } diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml index f9083fcd..ba23cdee 100644 --- a/backend/docker-compose.yml +++ b/backend/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3.4' +version: '3' # NOTE: When connecting to the postgres docker container in the web interface, # try using 'postgres' as the host name instead of 'localhost' or 'host.docker.internal' @@ -6,6 +6,19 @@ version: '3.4' # NOTE 2: Copy this file in the same directory as 'docker-compose.yml' file and use your own credentials services: + backend: + build: + context: . + dockerfile: Dockerfile + ports: + - "8000:8000" + env_file: + - .env + depends_on: + - postgres + - pgadmin4 + networks: + - cardflow postgres: image: postgres restart: always @@ -18,6 +31,8 @@ services: PGDATA: /var/lib/postgresql/data/pgdata volumes: - ./postgresql:/var/lib/postgresql/data + networks: + - cardflow pgadmin4: image: dpage/pgadmin4 user: "${UID}:${GID}" # to avoid permission issues @@ -29,4 +44,10 @@ services: ports: - "5433:80" depends_on: - - postgres \ No newline at end of file + - postgres + networks: + - cardflow + +networks: + cardflow: + driver: bridge From 672ab9219d744589b6e9e816eea72aab8e25fc51 Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Tue, 7 Nov 2023 18:35:30 +0200 Subject: [PATCH 076/667] changed cardset model and added functionality to seed command --- backend/yugioh/management/commands/seed.py | 87 +++++++++++++------ ...er_yugiohcardset_card_set_name_and_more.py | 23 +++++ ...rarity_code_yugiohcardset_card_set_code.py | 18 ---- backend/yugioh/models.py | 4 +- 4 files changed, 87 insertions(+), 45 deletions(-) create mode 100644 backend/yugioh/migrations/0002_alter_yugiohcardset_card_set_name_and_more.py delete mode 100644 backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_card_set_code.py diff --git a/backend/yugioh/management/commands/seed.py b/backend/yugioh/management/commands/seed.py index 054bc1ae..49336c01 100644 --- a/backend/yugioh/management/commands/seed.py +++ b/backend/yugioh/management/commands/seed.py @@ -1,9 +1,16 @@ +import logging + + import requests from card.models import Card from django.core.management.base import BaseCommand from game.models import Game from yugioh.models import YugiohCard, YugiohCardRarity, YugiohCardSet, YugiohCardInSet +log_filename = "yugioh_seeding.log" +logging.basicConfig(filename=log_filename, level=logging.INFO, + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') + class Command(BaseCommand): help = """ @@ -51,25 +58,35 @@ def handle(self, *args, **options): if not api_url: self.stdout.write(self.style.ERROR(f'Invalid command: {options["command"]}. Please check help options.')) + logging.error(f'Invalid command: {options["command"]}. Please check help options.') return self.stdout.write('Calling the external API') + logging.info('Calling the external API') response = requests.get(api_url) if response.status_code == 200: self.stdout.write('API response received successfully') + logging.info('API response received successfully') data = response.json() else: self.stdout.write(self.style.ERROR(f'API request failed with status code {response.status_code}')) + logging.error(f'API request failed with status code {response.status_code}') return if not Game.objects.filter(game_name="Yu-Gi-Oh!").exists(): - print('Game does not exist... Creating') + self.stdout.write('Game does not exist... Creating') + logging.info('Game does not exist... Creating') + Game.objects.create(game_name="Yu-Gi-Oh!") + processed_entries = 0 + for item in data['data']: - print('Reading Card Details') + self.stdout.write('Reading Card Details') + logging.info('Reading Card Details') + card_name = item['name'] type = item['type'] frame_type = item['frameType'] @@ -78,52 +95,62 @@ def handle(self, *args, **options): atk = item['atk'] except KeyError: atk = "NULL" - print('KeyError for atk') + self.stdout.write('KeyError for atk') + logging.info('KeyError for atk') try: defense = item['def'] except KeyError: defense = "NULL" - print('KeyError for defense') + self.stdout.write('KeyError for defense') + logging.info('KeyError for defense') try: level = item['level'] except KeyError: level = "NULL" - print('KeyError for level') + self.stdout.write('KeyError for level') + logging.info('KeyError for level') try: race = item['race'] except KeyError: race = "NULL" - print('KeyError for race') + self.stdout.write('KeyError for race') + logging.info('KeyError for race') try: attribute = item['attribute'] except KeyError: attribute = "NULL" - print('KeyError for attribute') + self.stdout.write('KeyError for attribute') + logging.info('KeyError for attribute') try: archetype = item['archetype'] except KeyError: archetype = "NULL" - print('KeyError for archetype') + self.stdout.write('KeyError for archetype') + logging.info('KeyError for archetype') try: image = item['card_images'][0]['image_url'] except (KeyError, IndexError): image = "NULL" - print('KeyError or IndexError for image') + self.stdout.write('KeyError or IndexError for image') + logging.info('KeyError or IndexError for image') game = Game.objects.filter(game_name="Yu-Gi-Oh!").first() card = Card.objects.filter(card_name=card_name).first() + if not card: - print('Card does not exist... Creating') - card = Card.objects.create(card_name=card_name, game=game) + self.stdout.write('Card does not exist... Creating') + logging.info('Card does not exist... Creating') yugioh_card_object = YugiohCard.objects.create( + game=game, + card_name=card_name, type=type, frame_type=frame_type, description=desc, @@ -134,13 +161,19 @@ def handle(self, *args, **options): attribute=attribute, archetype=archetype, image=image, - card=card, ) else: - print(f'{card.card_name} card already exists... Checking the sets') - yugioh_card_object = YugiohCard.objects.filter(card=card).first() + self.stdout.write(f'{card.card_name} card already exists... Checking the sets') + logging.info(f'{card.card_name} card already exists... Checking the sets') + yugioh_card_object = YugiohCard.objects.filter(card_name=card.card_name).first() for entry in item['card_sets']: + processed_entries += 1 + + progress_message = f'Processed {processed_entries}' + self.stdout.write(progress_message, ending='\r') + self.stdout.flush() + card_set_name = entry["set_name"] card_set_code = entry["set_code"] rarity = entry["set_rarity"] @@ -148,20 +181,20 @@ def handle(self, *args, **options): rarity_object = YugiohCardRarity.objects.filter(rarity=rarity, rarity_code=rarity_code).first() - try: - card_set_object, created = YugiohCardSet.objects.get_or_create( - card_set_name=card_set_name, - card_set_code=card_set_code - ) - except: - # Handle unique constraint violation (card_set_code already exists) - card_set_object = YugiohCardSet.objects.get(card_set_code=card_set_code) - self.stdout.write(self.style.ERROR(f'CardSet already exists for {card_set_object}')) + card_set_object = YugiohCardSet.objects.filter(card_set_name=card_set_name, + set_code=card_set_code).first() if not rarity_object: - print('Rarity does not exist... Creating') + self.stdout.write('Rarity does not exist... Creating') + logging.info('Rarity does not exist... Creating') rarity_object = YugiohCardRarity.objects.create(rarity=rarity, rarity_code=rarity_code) + if not card_set_object: + self.stdout.write('Cardset does not exist... Creating') + logging.info('Cardset does not exist... Creating') + card_set_object = YugiohCardSet.objects.create(card_set_name=card_set_name, + set_code=card_set_code) + existing_card = YugiohCardInSet.objects.filter( rarity=rarity_object, set=card_set_object, @@ -172,7 +205,11 @@ def handle(self, *args, **options): YugiohCardInSet.objects.create(rarity=rarity_object, set=card_set_object, yugioh_card=yugioh_card_object) else: - self.stdout.write(self.style.ERROR(f'Card {yugioh_card_object.card} with ' + self.stdout.write(self.style.ERROR(f'Card {yugioh_card_object} ' f'{card_set_object} {rarity_object}... Skipping')) + logging.info(f'Card {yugioh_card_object} with ' + f'{card_set_object} {rarity_object}... Skipping') self.stdout.write(self.style.SUCCESS(f'DONE!')) + logging.info('DONE!') + self.stdout.write("") diff --git a/backend/yugioh/migrations/0002_alter_yugiohcardset_card_set_name_and_more.py b/backend/yugioh/migrations/0002_alter_yugiohcardset_card_set_name_and_more.py new file mode 100644 index 00000000..108763f9 --- /dev/null +++ b/backend/yugioh/migrations/0002_alter_yugiohcardset_card_set_name_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.6 on 2023-11-07 15:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('yugioh', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='yugiohcardset', + name='card_set_name', + field=models.CharField(max_length=100), + ), + migrations.AlterField( + model_name='yugiohcardset', + name='set_code', + field=models.CharField(max_length=100), + ), + ] diff --git a/backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_card_set_code.py b/backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_card_set_code.py deleted file mode 100644 index 3725fa6a..00000000 --- a/backend/yugioh/migrations/0002_rename_rarity_code_yugiohcardset_card_set_code.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.6 on 2023-11-04 15:34 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('yugioh', '0001_initial'), - ] - - operations = [ - migrations.RenameField( - model_name='yugiohcardset', - old_name='rarity_code', - new_name='card_set_code', - ), - ] diff --git a/backend/yugioh/models.py b/backend/yugioh/models.py index 409aedd1..0221060f 100644 --- a/backend/yugioh/models.py +++ b/backend/yugioh/models.py @@ -84,12 +84,12 @@ def __str__(self): class YugiohCardSet(models.Model): card_set_name = models.CharField( max_length=100, - unique=True, + unique=False, ) set_code = models.CharField( max_length=100, - unique=True, + unique=False, ) def __str__(self): From c78f8440cc2dcf38003c7a7c4a27c0a6d576ab06 Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Wed, 8 Nov 2023 08:42:50 +0200 Subject: [PATCH 077/667] reformated stdout messages to be only in log file --- backend/yugioh/management/commands/seed.py | 42 +++++++++++----------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/backend/yugioh/management/commands/seed.py b/backend/yugioh/management/commands/seed.py index 49336c01..cc032f3d 100644 --- a/backend/yugioh/management/commands/seed.py +++ b/backend/yugioh/management/commands/seed.py @@ -1,6 +1,5 @@ import logging - import requests from card.models import Card from django.core.management.base import BaseCommand @@ -61,22 +60,22 @@ def handle(self, *args, **options): logging.error(f'Invalid command: {options["command"]}. Please check help options.') return - self.stdout.write('Calling the external API') + # self.stdout.write('Calling the external API') logging.info('Calling the external API') response = requests.get(api_url) if response.status_code == 200: - self.stdout.write('API response received successfully') + # self.stdout.write('API response received successfully') logging.info('API response received successfully') data = response.json() else: - self.stdout.write(self.style.ERROR(f'API request failed with status code {response.status_code}')) + # self.stdout.write(self.style.ERROR(f'API request failed with status code {response.status_code}')) logging.error(f'API request failed with status code {response.status_code}') return if not Game.objects.filter(game_name="Yu-Gi-Oh!").exists(): - self.stdout.write('Game does not exist... Creating') + # self.stdout.write('Game does not exist... Creating') logging.info('Game does not exist... Creating') Game.objects.create(game_name="Yu-Gi-Oh!") @@ -84,7 +83,7 @@ def handle(self, *args, **options): processed_entries = 0 for item in data['data']: - self.stdout.write('Reading Card Details') + # self.stdout.write('Reading Card Details') logging.info('Reading Card Details') card_name = item['name'] @@ -95,49 +94,49 @@ def handle(self, *args, **options): atk = item['atk'] except KeyError: atk = "NULL" - self.stdout.write('KeyError for atk') + # self.stdout.write('KeyError for atk') logging.info('KeyError for atk') try: defense = item['def'] except KeyError: defense = "NULL" - self.stdout.write('KeyError for defense') + # self.stdout.write('KeyError for defense') logging.info('KeyError for defense') try: level = item['level'] except KeyError: level = "NULL" - self.stdout.write('KeyError for level') + # self.stdout.write('KeyError for level') logging.info('KeyError for level') try: race = item['race'] except KeyError: race = "NULL" - self.stdout.write('KeyError for race') + # self.stdout.write('KeyError for race') logging.info('KeyError for race') try: attribute = item['attribute'] except KeyError: attribute = "NULL" - self.stdout.write('KeyError for attribute') + # self.stdout.write('KeyError for attribute') logging.info('KeyError for attribute') try: archetype = item['archetype'] except KeyError: archetype = "NULL" - self.stdout.write('KeyError for archetype') + # self.stdout.write('KeyError for archetype') logging.info('KeyError for archetype') try: image = item['card_images'][0]['image_url'] except (KeyError, IndexError): image = "NULL" - self.stdout.write('KeyError or IndexError for image') + # self.stdout.write('KeyError or IndexError for image') logging.info('KeyError or IndexError for image') game = Game.objects.filter(game_name="Yu-Gi-Oh!").first() @@ -145,8 +144,8 @@ def handle(self, *args, **options): card = Card.objects.filter(card_name=card_name).first() if not card: - self.stdout.write('Card does not exist... Creating') - logging.info('Card does not exist... Creating') + # self.stdout.write('Card does not exist... Creating') + logging.info(f'Card {card_name} does not exist... Creating') yugioh_card_object = YugiohCard.objects.create( game=game, @@ -163,7 +162,7 @@ def handle(self, *args, **options): image=image, ) else: - self.stdout.write(f'{card.card_name} card already exists... Checking the sets') + # self.stdout.write(f'{card.card_name} card already exists... Checking the sets') logging.info(f'{card.card_name} card already exists... Checking the sets') yugioh_card_object = YugiohCard.objects.filter(card_name=card.card_name).first() @@ -185,12 +184,12 @@ def handle(self, *args, **options): set_code=card_set_code).first() if not rarity_object: - self.stdout.write('Rarity does not exist... Creating') + # self.stdout.write('Rarity does not exist... Creating') logging.info('Rarity does not exist... Creating') rarity_object = YugiohCardRarity.objects.create(rarity=rarity, rarity_code=rarity_code) if not card_set_object: - self.stdout.write('Cardset does not exist... Creating') + # self.stdout.write('Cardset does not exist... Creating') logging.info('Cardset does not exist... Creating') card_set_object = YugiohCardSet.objects.create(card_set_name=card_set_name, set_code=card_set_code) @@ -205,11 +204,12 @@ def handle(self, *args, **options): YugiohCardInSet.objects.create(rarity=rarity_object, set=card_set_object, yugioh_card=yugioh_card_object) else: - self.stdout.write(self.style.ERROR(f'Card {yugioh_card_object} ' - f'{card_set_object} {rarity_object}... Skipping')) + # self.stdout.write(self.style.ERROR(f'Card {yugioh_card_object} ' + # f'{card_set_object} {rarity_object}... Skipping')) logging.info(f'Card {yugioh_card_object} with ' f'{card_set_object} {rarity_object}... Skipping') - self.stdout.write(self.style.SUCCESS(f'DONE!')) + # self.stdout.write(self.style.SUCCESS(f'DONE!')) logging.info('DONE!') self.stdout.write("") + self.stdout.write("DONE! Check results in the file yugioh_seeding.log") From d86f64ce022b1e4c5ef6f40b07750316c93e3b18 Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Wed, 8 Nov 2023 17:44:43 +0200 Subject: [PATCH 078/667] Update seed.py --- backend/yugioh/management/commands/seed.py | 141 ++++++++++++--------- 1 file changed, 83 insertions(+), 58 deletions(-) diff --git a/backend/yugioh/management/commands/seed.py b/backend/yugioh/management/commands/seed.py index cc032f3d..d2a9eb88 100644 --- a/backend/yugioh/management/commands/seed.py +++ b/backend/yugioh/management/commands/seed.py @@ -4,6 +4,7 @@ from card.models import Card from django.core.management.base import BaseCommand from game.models import Game +from psycopg2 import DataError from yugioh.models import YugiohCard, YugiohCardRarity, YugiohCardSet, YugiohCardInSet log_filename = "yugioh_seeding.log" @@ -84,12 +85,16 @@ def handle(self, *args, **options): for item in data['data']: # self.stdout.write('Reading Card Details') - logging.info('Reading Card Details') - card_name = item['name'] type = item['type'] frame_type = item['frameType'] desc = item['desc'] + + logging.info(f'Reading ** {card_name} ** Details') + + if len(desc) >= 1000: + desc = item['desc'][:990] + '...' + try: atk = item['atk'] except KeyError: @@ -147,67 +152,87 @@ def handle(self, *args, **options): # self.stdout.write('Card does not exist... Creating') logging.info(f'Card {card_name} does not exist... Creating') - yugioh_card_object = YugiohCard.objects.create( - game=game, - card_name=card_name, - type=type, - frame_type=frame_type, - description=desc, - attack=atk, - defense=defense, - level=level, - race=race, - attribute=attribute, - archetype=archetype, - image=image, - ) + try: + yugioh_card_object = YugiohCard.objects.create( + game=game, + card_name=card_name, + type=type, + frame_type=frame_type, + description=desc, + attack=atk, + defense=defense, + level=level, + race=race, + attribute=attribute, + archetype=archetype, + image=image, + ) + except DataError: + self.stdout.write(f'DataError for {card_name}') + continue + else: # self.stdout.write(f'{card.card_name} card already exists... Checking the sets') logging.info(f'{card.card_name} card already exists... Checking the sets') yugioh_card_object = YugiohCard.objects.filter(card_name=card.card_name).first() - for entry in item['card_sets']: - processed_entries += 1 - - progress_message = f'Processed {processed_entries}' - self.stdout.write(progress_message, ending='\r') - self.stdout.flush() - - card_set_name = entry["set_name"] - card_set_code = entry["set_code"] - rarity = entry["set_rarity"] - rarity_code = entry["set_rarity_code"] - - rarity_object = YugiohCardRarity.objects.filter(rarity=rarity, rarity_code=rarity_code).first() - - card_set_object = YugiohCardSet.objects.filter(card_set_name=card_set_name, - set_code=card_set_code).first() - - if not rarity_object: - # self.stdout.write('Rarity does not exist... Creating') - logging.info('Rarity does not exist... Creating') - rarity_object = YugiohCardRarity.objects.create(rarity=rarity, rarity_code=rarity_code) - - if not card_set_object: - # self.stdout.write('Cardset does not exist... Creating') - logging.info('Cardset does not exist... Creating') - card_set_object = YugiohCardSet.objects.create(card_set_name=card_set_name, - set_code=card_set_code) - - existing_card = YugiohCardInSet.objects.filter( - rarity=rarity_object, - set=card_set_object, - yugioh_card=yugioh_card_object - ).first() - - if not existing_card: - YugiohCardInSet.objects.create(rarity=rarity_object, set=card_set_object, - yugioh_card=yugioh_card_object) - else: - # self.stdout.write(self.style.ERROR(f'Card {yugioh_card_object} ' - # f'{card_set_object} {rarity_object}... Skipping')) - logging.info(f'Card {yugioh_card_object} with ' - f'{card_set_object} {rarity_object}... Skipping') + try: + for entry in item['card_sets']: + processed_entries += 1 + + progress_message = f'Processed {processed_entries}' + self.stdout.write(progress_message, ending='\r') + self.stdout.flush() + + card_set_name = entry["set_name"] + card_set_code = entry["set_code"] + rarity = entry["set_rarity"] + rarity_code = entry["set_rarity_code"] + + # if rarity_code == '': + # code_generation = rarity.split() + # for word in code_generation: + # rarity_code += word[0] + # print(rarity_code) + + try: + rarity_object = YugiohCardRarity.objects.get(rarity=rarity, rarity_code=rarity_code) + except YugiohCardRarity.DoesNotExist: + rarity_object = None + + try: + card_set_object = YugiohCardSet.objects.filter(card_set_name=card_set_name, + set_code=card_set_code).get() + except YugiohCardSet.DoesNotExist: + card_set_object = None + + if not rarity_object: + # self.stdout.write('Rarity does not exist... Creating') + logging.info('Rarity does not exist... Creating') + rarity_object = YugiohCardRarity.objects.create(rarity=rarity, rarity_code=rarity_code) + + if not card_set_object: + # self.stdout.write('Cardset does not exist... Creating') + logging.info('Cardset does not exist... Creating') + card_set_object = YugiohCardSet.objects.create(card_set_name=card_set_name, + set_code=card_set_code) + + existing_card = YugiohCardInSet.objects.filter( + rarity=rarity_object, + set=card_set_object, + yugioh_card=yugioh_card_object + ).first() + + if not existing_card: + YugiohCardInSet.objects.create(rarity=rarity_object, set=card_set_object, + yugioh_card=yugioh_card_object) + else: + # self.stdout.write(self.style.ERROR(f'Card {yugioh_card_object} ' + # f'{card_set_object} {rarity_object}... Skipping')) + logging.info(f'Card {yugioh_card_object} with ' + f'{card_set_object} {rarity_object}... Skipping') + except KeyError: + logging.info(f'No sets for {card_name}') # self.stdout.write(self.style.SUCCESS(f'DONE!')) logging.info('DONE!') From e072ce27f9b40c0ddae8e361cbf9ccf5fbad3ae8 Mon Sep 17 00:00:00 2001 From: Kaloyan Date: Wed, 8 Nov 2023 18:24:05 +0200 Subject: [PATCH 079/667] Create home page Create mock-ups for the home-page. Use material ui for the main buttons. Create Home component. Create pages folder for the pages. --- frontend/index.html | 2 +- frontend/src/App.tsx | 4 ++- frontend/src/components/home/Home.tsx | 37 +++++++++++++++++++++++++++ frontend/src/pages/HomePage.tsx | 7 +++++ 4 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 frontend/src/components/home/Home.tsx create mode 100644 frontend/src/pages/HomePage.tsx diff --git a/frontend/index.html b/frontend/index.html index e4b78eae..bdb7567e 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -10,4 +10,4 @@
- + \ No newline at end of file diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index ecdd57d6..1431d626 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -3,6 +3,7 @@ import './App.css'; import { CssBaseline, createTheme } from '@mui/material'; import { ThemeProvider } from '@emotion/react'; import Navigation from './components/navigation/Navigation'; +import HomePage from './pages/HomePage'; function App() { const theme = useMemo( @@ -35,10 +36,11 @@ function App() { +
); } -export default App; +export default App; \ No newline at end of file diff --git a/frontend/src/components/home/Home.tsx b/frontend/src/components/home/Home.tsx new file mode 100644 index 00000000..35e3d69e --- /dev/null +++ b/frontend/src/components/home/Home.tsx @@ -0,0 +1,37 @@ +import { Button } from '@mui/material'; +import Logo from '../logo/Logo'; + +function Home(): JSX.Element { + return ( +
+
+

Buy.

+

Sell.

+

Trade.

+
+

+ Cardflow provides you with the tools and infrastructure +

+

+ to move your cards from A to B. +

+
+ + +
+
+ ); +} + +export default Home; diff --git a/frontend/src/pages/HomePage.tsx b/frontend/src/pages/HomePage.tsx new file mode 100644 index 00000000..fbe55259 --- /dev/null +++ b/frontend/src/pages/HomePage.tsx @@ -0,0 +1,7 @@ +import Home from '../components/home/Home.tsx'; + +function HomePage(): JSX.Element { + return ; +} + +export default HomePage; From df880273d7433d0946ef6ca7413826d29c82affa Mon Sep 17 00:00:00 2001 From: Kaloyan Date: Wed, 8 Nov 2023 18:54:17 +0200 Subject: [PATCH 080/667] Update the home component Add additional styles for the buttons. --- frontend/src/components/home/Home.tsx | 38 +++++++++++++++------------ 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/frontend/src/components/home/Home.tsx b/frontend/src/components/home/Home.tsx index 35e3d69e..e9783b21 100644 --- a/frontend/src/components/home/Home.tsx +++ b/frontend/src/components/home/Home.tsx @@ -5,9 +5,9 @@ function Home(): JSX.Element { return (
-

Buy.

-

Sell.

-

Trade.

+

Buy.

+

Sell.

+

Trade.

Cardflow provides you with the tools and infrastructure @@ -15,20 +15,24 @@ function Home(): JSX.Element {

to move your cards from A to B.

-
- - +
+
+ +
+
+ +
); From 4f6ecfc832f6d8bbaccf58c893b71c769432ab1d Mon Sep 17 00:00:00 2001 From: Yulian Prodanov Date: Wed, 8 Nov 2023 21:06:20 +0200 Subject: [PATCH 081/667] fix dockerizing of the backend --- backend/Dockerfile | 29 +++++++++++------------------ backend/docker-compose.yml | 10 +++++++--- backend/entrypoint.sh | 17 +++++++++++++++++ 3 files changed, 35 insertions(+), 21 deletions(-) create mode 100755 backend/entrypoint.sh diff --git a/backend/Dockerfile b/backend/Dockerfile index 4bc66f09..394dd9e6 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,27 +1,20 @@ -# Use the official Python image as a parent image -FROM python:3 +FROM python:3.11.4-slim-buster + +WORKDIR /usr/src/app -# Set environment variables ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 -# Set the working directory inside the container -WORKDIR /app - -# Copy the requirements file into the container at the working directory -COPY requirements.txt /app/ +RUN apt-get update && apt-get install -y netcat libpq-dev gcc -COPY .env . - -# Install Python dependencies +RUN pip install --upgrade pip +COPY ./requirements.txt . RUN pip install -r requirements.txt -# Copy the rest of the application code into the container -COPY . /app/ - -# Run Django migrations during container build -RUN python manage.py makemigrations -RUN python manage.py migrate +COPY ./entrypoint.sh . +RUN sed -i 's/\r$//g' /usr/src/app/entrypoint.sh +RUN chmod +x /usr/src/app/entrypoint.sh +COPY . . -CMD ["python", "manage.py", "runserver"] +ENTRYPOINT ["/usr/src/app/entrypoint.sh"] \ No newline at end of file diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml index ba23cdee..a13434cb 100644 --- a/backend/docker-compose.yml +++ b/backend/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3' +version: "3" # NOTE: When connecting to the postgres docker container in the web interface, # try using 'postgres' as the host name instead of 'localhost' or 'host.docker.internal' @@ -12,6 +12,8 @@ services: dockerfile: Dockerfile ports: - "8000:8000" + expose: + - "8000" env_file: - .env depends_on: @@ -19,6 +21,7 @@ services: - pgadmin4 networks: - cardflow + postgres: image: postgres restart: always @@ -27,15 +30,16 @@ services: environment: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_DB: ${POSTGRES_DB} PGDATA: /var/lib/postgresql/data/pgdata volumes: - ./postgresql:/var/lib/postgresql/data networks: - cardflow + pgadmin4: image: dpage/pgadmin4 - user: "${UID}:${GID}" # to avoid permission issues + user: "${UID}:${GID}" # to avoid permission issues environment: PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL} PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD} diff --git a/backend/entrypoint.sh b/backend/entrypoint.sh new file mode 100755 index 00000000..491ce0ae --- /dev/null +++ b/backend/entrypoint.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +echo "Waiting for postgres..." + +while ! nc -z 'postgres' 5432; do + echo "Zzz" + sleep 0.5 +done + +echo "PostgreSQL started" + +python manage.py flush --no-input +python manage.py migrate + +# TODO: create superuser 'admin' if it does not exist + +python manage.py runserver 0.0.0.0:8000 \ No newline at end of file From 4307c7b893da31dfe36cabfb878ffdd07059460c Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Thu, 9 Nov 2023 10:52:54 +0200 Subject: [PATCH 082/667] fixed exception when rarity exists --- backend/yugioh/management/commands/seed.py | 50 +++++++++------------- 1 file changed, 21 insertions(+), 29 deletions(-) diff --git a/backend/yugioh/management/commands/seed.py b/backend/yugioh/management/commands/seed.py index d2a9eb88..c8cad63a 100644 --- a/backend/yugioh/management/commands/seed.py +++ b/backend/yugioh/management/commands/seed.py @@ -180,42 +180,34 @@ def handle(self, *args, **options): for entry in item['card_sets']: processed_entries += 1 - progress_message = f'Processed {processed_entries}' - self.stdout.write(progress_message, ending='\r') - self.stdout.flush() + # progress_message = f'Processed {processed_entries}' + # self.stdout.write(progress_message, ending='\r') + # self.stdout.flush() card_set_name = entry["set_name"] card_set_code = entry["set_code"] rarity = entry["set_rarity"] rarity_code = entry["set_rarity_code"] - # if rarity_code == '': - # code_generation = rarity.split() - # for word in code_generation: - # rarity_code += word[0] - # print(rarity_code) - - try: - rarity_object = YugiohCardRarity.objects.get(rarity=rarity, rarity_code=rarity_code) - except YugiohCardRarity.DoesNotExist: - rarity_object = None - - try: - card_set_object = YugiohCardSet.objects.filter(card_set_name=card_set_name, - set_code=card_set_code).get() - except YugiohCardSet.DoesNotExist: - card_set_object = None - - if not rarity_object: - # self.stdout.write('Rarity does not exist... Creating') + if rarity_code == '': + code_generation = rarity.split() + for word in code_generation: + rarity_code += word[0] + + rarity_object, is_rarity_created = YugiohCardRarity.objects.get_or_create(rarity=rarity, + rarity_code=rarity_code) + + card_set_object, is_cardset_created = YugiohCardSet.objects.get_or_create( + card_set_name=card_set_name, + set_code=card_set_code) + + if not is_rarity_created: + self.stdout.write('Rarity does not exist... Creating') logging.info('Rarity does not exist... Creating') - rarity_object = YugiohCardRarity.objects.create(rarity=rarity, rarity_code=rarity_code) - if not card_set_object: - # self.stdout.write('Cardset does not exist... Creating') + if not is_cardset_created: + self.stdout.write('Cardset does not exist... Creating') logging.info('Cardset does not exist... Creating') - card_set_object = YugiohCardSet.objects.create(card_set_name=card_set_name, - set_code=card_set_code) existing_card = YugiohCardInSet.objects.filter( rarity=rarity_object, @@ -227,8 +219,8 @@ def handle(self, *args, **options): YugiohCardInSet.objects.create(rarity=rarity_object, set=card_set_object, yugioh_card=yugioh_card_object) else: - # self.stdout.write(self.style.ERROR(f'Card {yugioh_card_object} ' - # f'{card_set_object} {rarity_object}... Skipping')) + self.stdout.write(self.style.ERROR(f'Card {yugioh_card_object} ' + f'{card_set_object} {rarity_object}... Skipping')) logging.info(f'Card {yugioh_card_object} with ' f'{card_set_object} {rarity_object}... Skipping') except KeyError: From cb2b81449e2c49c83a70e2e0139e9a5291a3b366 Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Thu, 9 Nov 2023 13:23:47 +0200 Subject: [PATCH 083/667] changed django admin field order for Card In Set In django admin Yugioh card in sets put the card name as a first column Small change to the if statements for rarity and cardset objects if they are created. --- backend/yugioh/admin.py | 7 +++---- backend/yugioh/management/commands/seed.py | 8 ++------ 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/backend/yugioh/admin.py b/backend/yugioh/admin.py index 740f8625..13b68b64 100644 --- a/backend/yugioh/admin.py +++ b/backend/yugioh/admin.py @@ -1,7 +1,6 @@ from django.contrib import admin from .models import YugiohCard, YugiohCardInSet, YugiohCardRarity, YugiohCardSet -from card.models import Card @admin.register(YugiohCard) @@ -17,9 +16,9 @@ class YugiohCardAdmin(admin.ModelAdmin): @admin.register(YugiohCardInSet) class YugiohCardInSetAdmin(admin.ModelAdmin): - list_display = ('set_name', 'rarity_name', 'yugioh_card') - list_filter = ('set__card_set_name', 'rarity__rarity', 'yugioh_card__card_name') - search_fields = ('set__card_set_name', 'rarity__rarity') + list_display = ('yugioh_card', 'set_name', 'rarity_name') + list_filter = ('yugioh_card__card_name', 'set__card_set_name', 'rarity__rarity') + search_fields = ('yugioh_card__card_name', 'set__card_set_name', 'rarity__rarity') list_per_page = 25 def set_name(self, obj): diff --git a/backend/yugioh/management/commands/seed.py b/backend/yugioh/management/commands/seed.py index c8cad63a..ea401bc1 100644 --- a/backend/yugioh/management/commands/seed.py +++ b/backend/yugioh/management/commands/seed.py @@ -180,10 +180,6 @@ def handle(self, *args, **options): for entry in item['card_sets']: processed_entries += 1 - # progress_message = f'Processed {processed_entries}' - # self.stdout.write(progress_message, ending='\r') - # self.stdout.flush() - card_set_name = entry["set_name"] card_set_code = entry["set_code"] rarity = entry["set_rarity"] @@ -201,11 +197,11 @@ def handle(self, *args, **options): card_set_name=card_set_name, set_code=card_set_code) - if not is_rarity_created: + if is_rarity_created: self.stdout.write('Rarity does not exist... Creating') logging.info('Rarity does not exist... Creating') - if not is_cardset_created: + if is_cardset_created: self.stdout.write('Cardset does not exist... Creating') logging.info('Cardset does not exist... Creating') From f7c3da2e5455ea4591002ac2c467343828e93f6b Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Thu, 9 Nov 2023 17:56:23 +0200 Subject: [PATCH 084/667] added more specifics for the actions --- backend/yugioh/management/commands/seed.py | 128 ++++++++++----------- 1 file changed, 61 insertions(+), 67 deletions(-) diff --git a/backend/yugioh/management/commands/seed.py b/backend/yugioh/management/commands/seed.py index ea401bc1..c1585610 100644 --- a/backend/yugioh/management/commands/seed.py +++ b/backend/yugioh/management/commands/seed.py @@ -36,6 +36,8 @@ class Command(BaseCommand): 'all': "https://db.ygoprodeck.com/api/v7/cardinfo.php", } + GAME_NAME = "Yu-Gi-Oh!" + def add_arguments(self, parser): parser.add_argument( 'command', @@ -61,81 +63,61 @@ def handle(self, *args, **options): logging.error(f'Invalid command: {options["command"]}. Please check help options.') return - # self.stdout.write('Calling the external API') - logging.info('Calling the external API') + self.stdout.write(f'Calling the external API - {api_url}') + logging.info(f'Calling the external API - {api_url}') response = requests.get(api_url) if response.status_code == 200: - # self.stdout.write('API response received successfully') - logging.info('API response received successfully') + self.stdout.write(f'For {api_url} -> response code {response.status_code} OK') + logging.info(f'For {api_url} -> response code {response.status_code} OK') data = response.json() else: - # self.stdout.write(self.style.ERROR(f'API request failed with status code {response.status_code}')) - logging.error(f'API request failed with status code {response.status_code}') + self.stdout.write(self.style.ERROR(f'API request failed with status code {response.status_code}')) + logging.error(f'API request FAILED with status code {response.status_code} for {api_url}') return - if not Game.objects.filter(game_name="Yu-Gi-Oh!").exists(): - # self.stdout.write('Game does not exist... Creating') - logging.info('Game does not exist... Creating') + game, is_game_created = Game.objects.get_or_create(game_name=self.GAME_NAME) - Game.objects.create(game_name="Yu-Gi-Oh!") + if is_game_created: + self.stdout.write(f'Game {self.GAME_NAME} does not exist... Created') + else: + self.stdout.write(f'Game {self.GAME_NAME} exists... Skipping') - processed_entries = 0 + processed_cards = 0 + processed_sets = 0 + imported_card = 0 + imported_set = 0 for item in data['data']: - # self.stdout.write('Reading Card Details') - card_name = item['name'] - type = item['type'] - frame_type = item['frameType'] - desc = item['desc'] - logging.info(f'Reading ** {card_name} ** Details') - - if len(desc) >= 1000: - desc = item['desc'][:990] + '...' - - try: - atk = item['atk'] - except KeyError: - atk = "NULL" - # self.stdout.write('KeyError for atk') - logging.info('KeyError for atk') + processed_cards += 1 - try: - defense = item['def'] - except KeyError: - defense = "NULL" - # self.stdout.write('KeyError for defense') - logging.info('KeyError for defense') + card_name = item.get('name', 'NULL') + card_type = item.get('type', 'NULL') + frame_type = item.get('frameType', 'NULL') + desc = item.get('desc', 'NULL') - try: - level = item['level'] - except KeyError: - level = "NULL" - # self.stdout.write('KeyError for level') - logging.info('KeyError for level') + if card_name == 'NULL': + logging.info(f'KeyError for card name {card_name}') + if card_type == 'NULL': + logging.info(f'KeyError for type {card_type}') + if frame_type == 'NULL': + logging.info(f'KeyError for frameType {frame_type}') + if desc == 'NULL': + logging.info('KeyError for desc') - try: - race = item['race'] - except KeyError: - race = "NULL" - # self.stdout.write('KeyError for race') - logging.info('KeyError for race') + logging.info(f'Reading card ** {card_name} ** Details') - try: - attribute = item['attribute'] - except KeyError: - attribute = "NULL" - # self.stdout.write('KeyError for attribute') - logging.info('KeyError for attribute') + if len(desc) >= 1000: + desc = item['desc'][:990] + '...' - try: - archetype = item['archetype'] - except KeyError: - archetype = "NULL" - # self.stdout.write('KeyError for archetype') - logging.info('KeyError for archetype') + atk = item.get('atk', 'NULL') + defense = item.get('def', 'NULL') + level = item.get('level', 'NULL') + race = item.get('race', 'NULL') + attribute = item.get('attribute', 'NULL') + archetype = item.get('archetype', 'NULL') try: image = item['card_images'][0]['image_url'] @@ -149,14 +131,14 @@ def handle(self, *args, **options): card = Card.objects.filter(card_name=card_name).first() if not card: - # self.stdout.write('Card does not exist... Creating') + self.stdout.write(f'Card {card_name} does not exist... Creating') logging.info(f'Card {card_name} does not exist... Creating') try: yugioh_card_object = YugiohCard.objects.create( game=game, card_name=card_name, - type=type, + type=card_type, frame_type=frame_type, description=desc, attack=atk, @@ -167,18 +149,22 @@ def handle(self, *args, **options): archetype=archetype, image=image, ) + + imported_card += 1 + except DataError: self.stdout.write(f'DataError for {card_name}') continue else: - # self.stdout.write(f'{card.card_name} card already exists... Checking the sets') + self.stdout.write(f'{card.card_name} card already exists... Checking the sets') logging.info(f'{card.card_name} card already exists... Checking the sets') yugioh_card_object = YugiohCard.objects.filter(card_name=card.card_name).first() try: for entry in item['card_sets']: - processed_entries += 1 + + processed_sets += 1 card_set_name = entry["set_name"] card_set_code = entry["set_code"] @@ -198,12 +184,18 @@ def handle(self, *args, **options): set_code=card_set_code) if is_rarity_created: - self.stdout.write('Rarity does not exist... Creating') - logging.info('Rarity does not exist... Creating') + self.stdout.write(f'Rarity {rarity} does not exist... Creating') + logging.info(f'Rarity * {rarity} * does not exist... Creating') + else: + self.stdout.write(f'{rarity} exist... Skipping') + logging.info(f'{rarity} exist... Skipping') if is_cardset_created: - self.stdout.write('Cardset does not exist... Creating') - logging.info('Cardset does not exist... Creating') + self.stdout.write(f'Cardset {card_set_name} does not exist... Creating') + logging.info(f'Cardset {card_set_name} does not exist... Creating') + else: + self.stdout.write(f'Cardset {card_set_name} exist... Skipping') + logging.info(f'Cardset {card_set_name} exist... Skipping') existing_card = YugiohCardInSet.objects.filter( rarity=rarity_object, @@ -214,6 +206,9 @@ def handle(self, *args, **options): if not existing_card: YugiohCardInSet.objects.create(rarity=rarity_object, set=card_set_object, yugioh_card=yugioh_card_object) + + imported_set += 1 + else: self.stdout.write(self.style.ERROR(f'Card {yugioh_card_object} ' f'{card_set_object} {rarity_object}... Skipping')) @@ -222,7 +217,6 @@ def handle(self, *args, **options): except KeyError: logging.info(f'No sets for {card_name}') - # self.stdout.write(self.style.SUCCESS(f'DONE!')) - logging.info('DONE!') + logging.info('') self.stdout.write("") self.stdout.write("DONE! Check results in the file yugioh_seeding.log") From 68577743b91209b0a011b9e3169786f231076ae5 Mon Sep 17 00:00:00 2001 From: Milen Palachorov Date: Thu, 9 Nov 2023 18:05:52 +0200 Subject: [PATCH 085/667] added small summary after the end of the script --- backend/yugioh/management/commands/seed.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/backend/yugioh/management/commands/seed.py b/backend/yugioh/management/commands/seed.py index c1585610..b0a082ad 100644 --- a/backend/yugioh/management/commands/seed.py +++ b/backend/yugioh/management/commands/seed.py @@ -217,6 +217,15 @@ def handle(self, *args, **options): except KeyError: logging.info(f'No sets for {card_name}') - logging.info('') - self.stdout.write("") + logging.info("--------------") + logging.info(f"Processed cards -> {processed_cards}") + logging.info(f" - Imported cards -> {imported_card}") + logging.info(f"Processed sets -> {processed_sets}") + logging.info(f" -Imported sets -> {imported_set}") + + self.stdout.write("--------------") + self.stdout.write(f"Processed cards -> {processed_cards}") + self.stdout.write(f" - Imported cards -> {imported_card}") + self.stdout.write(f"Processed sets -> {processed_sets}") + self.stdout.write(f" -Imported sets -> {imported_set}") self.stdout.write("DONE! Check results in the file yugioh_seeding.log") From 6f61d0d9b96a23114150581f8bc764222c0aafa7 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Thu, 9 Nov 2023 20:06:23 +0200 Subject: [PATCH 086/667] install react-router-dom --- frontend/package-lock.json | 63 +++++++++++++++++++++++++++++++++++++- frontend/package.json | 3 +- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index f68b603c..6c650bf2 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -13,7 +13,8 @@ "@mui/icons-material": "^5.14.15", "@mui/material": "^5.14.15", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "react-router-dom": "^6.18.0" }, "devDependencies": { "@testing-library/react": "^14.0.0", @@ -1238,6 +1239,14 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@remix-run/router": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.11.0.tgz", + "integrity": "sha512-BHdhcWgeiudl91HvVa2wxqZjSHbheSgIiDvxrF1VjFzBzpTtuDPkOdOi3Iqvc08kXtFkLjhbS+ML9aM8mJS+wQ==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -4965,6 +4974,36 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, + "node_modules/react-router": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.18.0.tgz", + "integrity": "sha512-vk2y7Dsy8wI02eRRaRmOs9g2o+aE72YCx5q9VasT1N9v+lrdB79tIqrjMfByHiY5+6aYkH2rUa5X839nwWGPDg==", + "dependencies": { + "@remix-run/router": "1.11.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.18.0.tgz", + "integrity": "sha512-Ubrue4+Ercc/BoDkFQfc6og5zRQ4A8YxSO3Knsne+eRbZ+IepAsK249XBH/XaFuOYOYr3L3r13CXTLvYt5JDjw==", + "dependencies": { + "@remix-run/router": "1.11.0", + "react-router": "6.18.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -6918,6 +6957,11 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" }, + "@remix-run/router": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.11.0.tgz", + "integrity": "sha512-BHdhcWgeiudl91HvVa2wxqZjSHbheSgIiDvxrF1VjFzBzpTtuDPkOdOi3Iqvc08kXtFkLjhbS+ML9aM8mJS+wQ==" + }, "@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -9500,6 +9544,23 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, + "react-router": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.18.0.tgz", + "integrity": "sha512-vk2y7Dsy8wI02eRRaRmOs9g2o+aE72YCx5q9VasT1N9v+lrdB79tIqrjMfByHiY5+6aYkH2rUa5X839nwWGPDg==", + "requires": { + "@remix-run/router": "1.11.0" + } + }, + "react-router-dom": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.18.0.tgz", + "integrity": "sha512-Ubrue4+Ercc/BoDkFQfc6og5zRQ4A8YxSO3Knsne+eRbZ+IepAsK249XBH/XaFuOYOYr3L3r13CXTLvYt5JDjw==", + "requires": { + "@remix-run/router": "1.11.0", + "react-router": "6.18.0" + } + }, "react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", diff --git a/frontend/package.json b/frontend/package.json index 14998fe0..9fa23bf3 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,7 +16,8 @@ "@mui/icons-material": "^5.14.15", "@mui/material": "^5.14.15", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "react-router-dom": "^6.18.0" }, "devDependencies": { "@testing-library/react": "^14.0.0", From 0da7a9719ba1a413fcc0a9baa0edb1f61ef6c50c Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Thu, 9 Nov 2023 20:46:43 +0200 Subject: [PATCH 087/667] create a Router component and configure it with mock routes --- frontend/src/App.tsx | 5 ++++- frontend/src/main.tsx | 5 +++-- frontend/src/router/Router.tsx | 26 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 frontend/src/router/Router.tsx diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index ecdd57d6..41e0b7ac 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -3,6 +3,7 @@ import './App.css'; import { CssBaseline, createTheme } from '@mui/material'; import { ThemeProvider } from '@emotion/react'; import Navigation from './components/navigation/Navigation'; +import { Outlet } from 'react-router-dom'; function App() { const theme = useMemo( @@ -35,7 +36,9 @@ function App() { -
+
+ +
); diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index 9bb419d3..3137dc56 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -1,10 +1,11 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; -import App from './App.tsx'; import './index.css'; +import Router from './router/Router.tsx'; +// import Router from './router/Router.tsx'; ReactDOM.createRoot(document.getElementById('root')!).render( - + , ); diff --git a/frontend/src/router/Router.tsx b/frontend/src/router/Router.tsx new file mode 100644 index 00000000..90bc0d82 --- /dev/null +++ b/frontend/src/router/Router.tsx @@ -0,0 +1,26 @@ +import { RouterProvider, createBrowserRouter } from 'react-router-dom'; +import App from '../App'; + +const routes = createBrowserRouter([ + { + path: '/', + element: , + children: [ + { + path: '/', + index: true, + element:

Home

, + }, + { + path: '/protected', + element:

Protected route

, + }, + ], + }, +]); + +function Router(): JSX.Element { + return ; +} + +export default Router; From 494a9e6ee25bb4913f80c6b8df1292b57928d910 Mon Sep 17 00:00:00 2001 From: RyotaMitaraiWeb Date: Thu, 9 Nov 2023 20:51:14 +0200 Subject: [PATCH 088/667] replace
tags with tags --- frontend/src/components/navigation/Navigation.tsx | 5 +++-- .../navigation/desktop/buttons/NewActionButton.tsx | 5 +++-- .../profilePictureAvatar/ProfilePictureAvatar.tsx | 6 +++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/navigation/Navigation.tsx b/frontend/src/components/navigation/Navigation.tsx index 00fb6b70..7e3b0b93 100644 --- a/frontend/src/components/navigation/Navigation.tsx +++ b/frontend/src/components/navigation/Navigation.tsx @@ -6,6 +6,7 @@ import MenuIcon from '@mui/icons-material/Menu'; import { useState } from 'react'; import MobileNavigation from './mobile/MobileNavigation'; import ShoppingCartButton from './desktop/buttons/ShoppingCartButton'; +import { Link } from 'react-router-dom'; /** * A component for the application's navigation menu @@ -25,9 +26,9 @@ function Navigation(): JSX.Element { return (