diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..49ef682
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,34 @@
+.git
+.github
+.dockerignore
+.gitattributes
+.gitignore
+.idea
+.vscode
+
+__pycache__/
+*.py[cod]
+*$py.class
+*.so
+htmlcov/
+.coverage
+.coverage.*
+.pylintrc
+.pytest_cache/
+.venv
+venv
+
+.DS_Store
+.AppleDouble
+.LSOverride
+._*
+
+*/node_modules
+*/dist
+*/data/db
+*/mealie/test
+*/mealie/.temp
+
+model.crfmodel
+
+crowdin.yml
diff --git a/.vscode/settings.json b/.vscode/settings.json
index f599308..591414a 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -10,6 +10,7 @@
"eslint.workingDirectories": ["./frontend"],
"editor.insertSpaces": true,
"editor.tabSize": 2,
+ "css.customData": [".vscode/tailwind.json"],
"python.analysis.autoImportCompletions": true,
"python.analysis.indexing": true,
"python.analysis.fixAll": ["source.unusedImports"],
diff --git a/.vscode/tailwind.json b/.vscode/tailwind.json
new file mode 100644
index 0000000..96a1f57
--- /dev/null
+++ b/.vscode/tailwind.json
@@ -0,0 +1,55 @@
+{
+ "version": 1.1,
+ "atDirectives": [
+ {
+ "name": "@tailwind",
+ "description": "Use the `@tailwind` directive to insert Tailwind's `base`, `components`, `utilities` and `screens` styles into your CSS.",
+ "references": [
+ {
+ "name": "Tailwind Documentation",
+ "url": "https://tailwindcss.com/docs/functions-and-directives#tailwind"
+ }
+ ]
+ },
+ {
+ "name": "@apply",
+ "description": "Use the `@apply` directive to inline any existing utility classes into your own custom CSS. This is useful when you find a common utility pattern in your HTML that you’d like to extract to a new component.",
+ "references": [
+ {
+ "name": "Tailwind Documentation",
+ "url": "https://tailwindcss.com/docs/functions-and-directives#apply"
+ }
+ ]
+ },
+ {
+ "name": "@responsive",
+ "description": "You can generate responsive variants of your own classes by wrapping their definitions in the `@responsive` directive:\n```css\n@responsive {\n .alert {\n background-color: #E53E3E;\n }\n}\n```\n",
+ "references": [
+ {
+ "name": "Tailwind Documentation",
+ "url": "https://tailwindcss.com/docs/functions-and-directives#responsive"
+ }
+ ]
+ },
+ {
+ "name": "@screen",
+ "description": "The `@screen` directive allows you to create media queries that reference your breakpoints by **name** instead of duplicating their values in your own CSS:\n```css\n@screen sm {\n /* ... */\n}\n```\n…gets transformed into this:\n```css\n@media (min-width: 640px) {\n /* ... */\n}\n```\n",
+ "references": [
+ {
+ "name": "Tailwind Documentation",
+ "url": "https://tailwindcss.com/docs/functions-and-directives#screen"
+ }
+ ]
+ },
+ {
+ "name": "@variants",
+ "description": "Generate `hover`, `focus`, `active` and other **variants** of your own utilities by wrapping their definitions in the `@variants` directive:\n```css\n@variants hover, focus {\n .btn-brand {\n background-color: #3182CE;\n }\n}\n```\n",
+ "references": [
+ {
+ "name": "Tailwind Documentation",
+ "url": "https://tailwindcss.com/docs/functions-and-directives#variants"
+ }
+ ]
+ }
+ ]
+}
diff --git a/Taskfile.yml b/Taskfile.yml
index 854f425..188371a 100644
--- a/Taskfile.yml
+++ b/Taskfile.yml
@@ -21,13 +21,8 @@ tasks:
desc: runs the backend server
cmds:
- poetry run python backend/app.py
- fe:i:
- desc: runs the install package
- dir: frontend
+ docker:
+ desc: builds and runs the production docker image locally
+ dir: docker
cmds:
- - pnpm i
- fe:
- desc: runs the frontend server
- dir: frontend
- cmds:
- - pnpm dev
+ - docker compose -f docker-compose.yml -p fuware up -d --build
diff --git a/alembic/env.py b/alembic/env.py
index 6176ca7..3f66b56 100644
--- a/alembic/env.py
+++ b/alembic/env.py
@@ -53,6 +53,7 @@ def run_migrations_offline() -> None:
target_metadata=target_metadata,
literal_binds=True,
dialect_opts={"paramstyle": "named"},
+ render_as_batch=True
)
with context.begin_transaction():
diff --git a/alembic/script.py.mako b/alembic/script.py.mako
index fbc4b07..83185a7 100644
--- a/alembic/script.py.mako
+++ b/alembic/script.py.mako
@@ -7,6 +7,7 @@ Create Date: ${create_date}
"""
from typing import Sequence, Union
+import backend.db.migration_types
from alembic import op
import sqlalchemy as sa
${imports if imports else ""}
diff --git a/alembic/versions/0fbca538155d_create_house_and_area_table.py b/alembic/versions/0fbca538155d_create_house_and_area_table.py
new file mode 100644
index 0000000..ccaeac4
--- /dev/null
+++ b/alembic/versions/0fbca538155d_create_house_and_area_table.py
@@ -0,0 +1,64 @@
+"""create house and area table
+
+Revision ID: 0fbca538155d
+Revises: 4b90a6ac504b
+Create Date: 2024-06-30 05:38:20.062935
+
+"""
+from typing import Sequence, Union
+
+import backend.db.migration_types
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision: str = '0fbca538155d'
+down_revision: Union[str, None] = '4b90a6ac504b'
+branch_labels: Union[str, Sequence[str], None] = None
+depends_on: Union[str, Sequence[str], None] = None
+
+
+def upgrade() -> None:
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.create_table('houses',
+ sa.Column('id', backend.db.models.guid.GUID(), nullable=False),
+ sa.Column('icon', sa.String(), nullable=False),
+ sa.Column('name', sa.String(), nullable=False),
+ sa.Column('address', sa.String(), nullable=False),
+ sa.Column('created_at', sa.DateTime(), nullable=True),
+ sa.Column('updated_at', sa.DateTime(), nullable=True),
+ sa.Column('deleted_at', sa.DateTime(), nullable=True),
+ sa.PrimaryKeyConstraint('id')
+ )
+ op.create_index(op.f('ix_houses_created_at'), 'houses', ['created_at'], unique=False)
+ op.create_index(op.f('ix_houses_id'), 'houses', ['id'], unique=False)
+ op.create_index(op.f('ix_houses_name'), 'houses', ['name'], unique=False)
+ op.create_table('areas',
+ sa.Column('id', backend.db.models.guid.GUID(), nullable=False),
+ sa.Column('house_id', backend.db.models.guid.GUID(), nullable=False),
+ sa.Column('name', sa.String(), nullable=False),
+ sa.Column('desc', sa.String(), nullable=False),
+ sa.Column('created_at', sa.DateTime(), nullable=True),
+ sa.Column('updated_at', sa.DateTime(), nullable=True),
+ sa.Column('deleted_at', sa.DateTime(), nullable=True),
+ sa.ForeignKeyConstraint(['house_id'], ['houses.id'], ondelete='CASCADE'),
+ sa.PrimaryKeyConstraint('id')
+ )
+ op.create_index(op.f('ix_areas_created_at'), 'areas', ['created_at'], unique=False)
+ op.create_index(op.f('ix_areas_id'), 'areas', ['id'], unique=False)
+ op.create_index(op.f('ix_areas_name'), 'areas', ['name'], unique=False)
+ # ### end Alembic commands ###
+
+
+def downgrade() -> None:
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.drop_index(op.f('ix_areas_name'), table_name='areas')
+ op.drop_index(op.f('ix_areas_id'), table_name='areas')
+ op.drop_index(op.f('ix_areas_created_at'), table_name='areas')
+ op.drop_table('areas')
+ op.drop_index(op.f('ix_houses_name'), table_name='houses')
+ op.drop_index(op.f('ix_houses_id'), table_name='houses')
+ op.drop_index(op.f('ix_houses_created_at'), table_name='houses')
+ op.drop_table('houses')
+ # ### end Alembic commands ###
diff --git a/alembic/versions/68d05d045e6e_create_user_table.py b/alembic/versions/4b90a6ac504b_create_users_table.py
similarity index 85%
rename from alembic/versions/68d05d045e6e_create_user_table.py
rename to alembic/versions/4b90a6ac504b_create_users_table.py
index f72f08b..2fe315f 100644
--- a/alembic/versions/68d05d045e6e_create_user_table.py
+++ b/alembic/versions/4b90a6ac504b_create_users_table.py
@@ -1,18 +1,19 @@
-"""create user table
+"""create users table
-Revision ID: 68d05d045e6e
-Revises:
-Create Date: 2024-05-24 04:12:25.599139
+Revision ID: 4b90a6ac504b
+Revises:
+Create Date: 2024-06-25 09:14:34.465698
"""
from typing import Sequence, Union
+import backend.db.migration_types
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
-revision: str = '68d05d045e6e'
+revision: str = '4b90a6ac504b'
down_revision: Union[str, None] = None
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
@@ -21,12 +22,12 @@ depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('users',
- sa.Column('id', sa.UUID(), nullable=False),
+ sa.Column('id', backend.db.models.guid.GUID(), nullable=False),
sa.Column('username', sa.String(), nullable=False),
sa.Column('password', sa.String(), nullable=False),
sa.Column('name', sa.String(), nullable=True),
sa.Column('is_admin', sa.Boolean(), nullable=True),
- sa.Column('is_lock', sa.Boolean(), nullable=True),
+ sa.Column('is_lock', sa.DateTime(), nullable=True),
sa.Column('created_at', sa.DateTime(), nullable=True),
sa.Column('updated_at', sa.DateTime(), nullable=True),
sa.PrimaryKeyConstraint('id')
diff --git a/backend/app.py b/backend/app.py
index 50393d5..3ed125a 100644
--- a/backend/app.py
+++ b/backend/app.py
@@ -1,6 +1,7 @@
from collections.abc import AsyncGenerator
from contextlib import asynccontextmanager
from fastapi import FastAPI, Request, HTTPException
+from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse
from fastapi.middleware.cors import CORSMiddleware
from fastapi.middleware.gzip import GZipMiddleware
@@ -15,7 +16,7 @@ settings = get_app_settings()
logger = get_logger()
description = f"""
-fuware is a web application for managing your hours items and tracking them.
+fuware is a web application for managing your house items and tracking them.
"""
@asynccontextmanager
@@ -70,6 +71,11 @@ async def unicorn_exception_handler(request: Request, exc: HTTPException):
content={"status": exc.status_code, "data": exc.detail},
)
+@app.exception_handler(RequestValidationError)
+async def validation_exception_handler(request: Request, exc: RequestValidationError):
+ print(exc)
+ return JSONResponse(status_code=422, content={"status": 422, "data": str(exc)})
+
def api_routers():
app.include_router(router)
diff --git a/backend/core/dependencies/dependencies.py b/backend/core/dependencies/dependencies.py
index ab21bf5..2aa3cf6 100644
--- a/backend/core/dependencies/dependencies.py
+++ b/backend/core/dependencies/dependencies.py
@@ -30,7 +30,7 @@ async def is_logged_in(token: str = Depends(oauth2_scheme_soft_fail)) -> bool:
user = user_service.get_by_id(user_id)
if not user:
raise credentials_exception
- if user.is_lock is True:
+ if user.is_lock is not None:
raise HTTPException(status_code=status.HTTP_423_LOCKED, detail=MessageCode.ACCOUNT_LOCK)
except Exception:
return credentials_exception
diff --git a/backend/core/logger/logconf.prod.json b/backend/core/logger/logconf.prod.json
index cc2c7ef..1103fd2 100644
--- a/backend/core/logger/logconf.prod.json
+++ b/backend/core/logger/logconf.prod.json
@@ -39,7 +39,7 @@
"class": "logging.handlers.RotatingFileHandler",
"level": "DEBUG",
"formatter": "detailed",
- "filename": "${DATA_DIR}/mealie.log",
+ "filename": "data/fuware.log",
"maxBytes": 10000,
"backupCount": 3
}
diff --git a/backend/core/message_code.py b/backend/core/message_code.py
index 11abb5a..64bcd20 100644
--- a/backend/core/message_code.py
+++ b/backend/core/message_code.py
@@ -1,6 +1,10 @@
class MessageCode():
- CREATED_USER: str = 'CREATED_USER'
- WRONG_INPUT: str = 'LOGIN_WRONG'
- ACCOUNT_LOCK: str = 'USER_LOCK'
+ CREATE_USER_SUCCESS: str = 'message_create_user_success'
+ CREATED_USER: str = 'message_created_user'
+ WRONG_INPUT: str = 'message_login_wrong'
+ ACCOUNT_LOCK: str = 'message_user_lock'
REFRESH_TOKEN_EXPIRED: str = 'REFRESH_TOKEN_EXPIRED'
+ CREATE_HOUSE_FAIL: str = 'message_create_house_fail'
+ CREATE_HOUSE_SUCCESS: str = 'message_create_house_success'
+ HOUSE_NOT_FOUND: str = 'HOUSE_NOT_FOUND'
diff --git a/backend/db/init_db.py b/backend/db/init_db.py
index 67697b6..cd9eba8 100644
--- a/backend/db/init_db.py
+++ b/backend/db/init_db.py
@@ -12,6 +12,7 @@ from backend.core.config import get_app_settings
from backend.db.db_setup import session_context
from backend.repos.repository_users import RepositoryUsers
from backend.repos.seeder import default_users_init
+from backend.repos.seeder.init_house import default_house_init
PROJECT_DIR = Path(__file__).parent.parent.parent
@@ -20,6 +21,7 @@ logger = root_logger.get_logger()
def init_db(db) -> None:
logger.info("Initializing user data...")
default_users_init(db)
+ default_house_init(db)
def db_is_at_head(alembic_cfg: config.Config) -> bool:
settings = get_app_settings()
diff --git a/backend/db/migration_types.py b/backend/db/migration_types.py
new file mode 100644
index 0000000..4e4f58b
--- /dev/null
+++ b/backend/db/migration_types.py
@@ -0,0 +1 @@
+from backend.db.models.guid import GUID # noqa: F401
diff --git a/backend/db/models/__init__.py b/backend/db/models/__init__.py
index 9917a30..27ef8ed 100644
--- a/backend/db/models/__init__.py
+++ b/backend/db/models/__init__.py
@@ -1 +1,2 @@
from .users import *
+from .houses import *
diff --git a/backend/db/models/_model_base.py b/backend/db/models/_model_base.py
index d89b830..fca5bc7 100644
--- a/backend/db/models/_model_base.py
+++ b/backend/db/models/_model_base.py
@@ -18,3 +18,6 @@ class SqlAlchemyBase(Model):
@classmethod
def normalize(cls, val: str) -> str:
return unidecode(val).lower().strip()
+
+class DeleteMixin:
+ deleted_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True)
diff --git a/backend/db/models/guid.py b/backend/db/models/guid.py
new file mode 100644
index 0000000..813bfdd
--- /dev/null
+++ b/backend/db/models/guid.py
@@ -0,0 +1,56 @@
+import uuid
+from typing import Any
+
+from sqlalchemy import Dialect
+from sqlalchemy.dialects.postgresql import UUID
+from sqlalchemy.types import CHAR, TypeDecorator
+
+
+class GUID(TypeDecorator):
+ """Platform-independent GUID type.
+ Uses PostgreSQL's UUID type, otherwise uses
+ CHAR(32), storing as stringified hex values.
+ """
+
+ impl = CHAR
+ cache_ok = True
+
+ @staticmethod
+ def generate():
+ return uuid.uuid4()
+
+ @staticmethod
+ def convert_value_to_guid(value: Any, dialect: Dialect) -> str | None:
+ if value is None:
+ return value
+ elif dialect.name == "postgresql":
+ return str(value)
+ else:
+ if not isinstance(value, uuid.UUID):
+ return "%.32x" % uuid.UUID(value).int
+ else:
+ # hexstring
+ return "%.32x" % value.int
+
+ def load_dialect_impl(self, dialect):
+ if dialect.name == "postgresql":
+ return dialect.type_descriptor(UUID())
+ else:
+ return dialect.type_descriptor(CHAR(32))
+
+ def process_bind_param(self, value, dialect):
+ return self.convert_value_to_guid(value, dialect)
+
+ def _uuid_value(self, value):
+ if value is None:
+ return value
+ else:
+ if not isinstance(value, uuid.UUID):
+ value = uuid.UUID(value)
+ return value
+
+ def process_result_value(self, value, dialect):
+ return self._uuid_value(value)
+
+ def sort_key_function(self, value):
+ return self._uuid_value(value)
diff --git a/backend/db/models/houses/__init__.py b/backend/db/models/houses/__init__.py
new file mode 100644
index 0000000..6c5960a
--- /dev/null
+++ b/backend/db/models/houses/__init__.py
@@ -0,0 +1 @@
+from .houses import *
diff --git a/backend/db/models/houses/houses.py b/backend/db/models/houses/houses.py
new file mode 100644
index 0000000..017e0f5
--- /dev/null
+++ b/backend/db/models/houses/houses.py
@@ -0,0 +1,33 @@
+from typing import List
+from sqlalchemy import ForeignKey, String
+from sqlalchemy.orm import Mapped, mapped_column, relationship
+
+from backend.db.models.guid import GUID
+
+from .._model_base import SqlAlchemyBase, DeleteMixin
+
+class Houses(SqlAlchemyBase, DeleteMixin):
+ __tablename__ = 'houses'
+
+ id: Mapped[GUID] = mapped_column(GUID, primary_key=True, default=GUID.generate, index=True)
+ icon: Mapped[str | None] = mapped_column(String, nullable=False)
+ name: Mapped[str | None] = mapped_column(String, index=True, nullable=False)
+ address: Mapped[str | None] = mapped_column(String, nullable=False)
+
+ areas: Mapped[List["Areas"]] = relationship("Areas", back_populates="house", cascade="all, delete", passive_deletes=True)
+
+ def __repr__(self):
+ return f"{self.__class__.__name__}, name: {self.name}"
+
+class Areas(SqlAlchemyBase, DeleteMixin):
+ __tablename__ = 'areas'
+
+ id: Mapped[GUID] = mapped_column(GUID, primary_key=True, default=GUID.generate, index=True)
+ house_id: Mapped[GUID] = mapped_column(GUID, ForeignKey('houses.id', ondelete='CASCADE'), nullable=False)
+ name: Mapped[str | None] = mapped_column(String, index=True, nullable=False)
+ desc: Mapped[str | None] = mapped_column(String, nullable=False)
+
+ house: Mapped['Houses'] = relationship(back_populates="areas")
+
+ def __repr__(self):
+ return f"<{self.__class__.__name__} id={self.id} name={self.name} house_id={self.house_id}, desc={self.desc}>"
diff --git a/backend/db/models/users/users.py b/backend/db/models/users/users.py
index 42aff88..3862947 100644
--- a/backend/db/models/users/users.py
+++ b/backend/db/models/users/users.py
@@ -1,20 +1,21 @@
-from uuid import uuid4
-from sqlalchemy import Boolean, ForeignKey, String
-from sqlalchemy.orm import Mapped, mapped_column, relationship
+from datetime import datetime
-from sqlalchemy.dialects.postgresql import UUID
+from sqlalchemy import Boolean, String, DateTime
+from sqlalchemy.orm import Mapped, mapped_column
+
+from backend.db.models.guid import GUID
from .._model_base import SqlAlchemyBase
-class User(SqlAlchemyBase):
+class Users(SqlAlchemyBase):
__tablename__ = 'users'
- id: Mapped[UUID] = mapped_column(UUID, primary_key=True, default=uuid4, index=True)
+ id: Mapped[GUID] = mapped_column(GUID, primary_key=True, default=GUID.generate, index=True)
username: Mapped[str | None] = mapped_column(String, unique=True, index=True, nullable=False)
password: Mapped[str | None] = mapped_column(String, index=True, nullable=False)
name: Mapped[str | None] = mapped_column(String, index=True, nullable=True)
is_admin: Mapped[bool | None] = mapped_column(Boolean, default=False)
- is_lock: Mapped[bool | None] = mapped_column(Boolean, default=False)
+ is_lock: Mapped[datetime | None] = mapped_column(DateTime, nullable=True)
def __repr__(self):
return f"{self.__class__.__name__}, name: {self.name}, username: {self.username}"
diff --git a/backend/repos/__init__.py b/backend/repos/__init__.py
index bdb81bd..584a0fb 100644
--- a/backend/repos/__init__.py
+++ b/backend/repos/__init__.py
@@ -1 +1,2 @@
from .repository_users import *
+from .repository_houses import *
diff --git a/backend/repos/repository_houses.py b/backend/repos/repository_houses.py
new file mode 100644
index 0000000..4b5aca4
--- /dev/null
+++ b/backend/repos/repository_houses.py
@@ -0,0 +1,90 @@
+from datetime import datetime
+from backend.db.models.houses import Houses, Areas
+from sqlalchemy.orm import Session
+
+from backend.schemas.house import HouseCreate, HouseUpdate, AreaUpdate
+
+class RepositoryHouses:
+ def __init__(self):
+ self.houses = Houses()
+ self.areas = Areas()
+
+ def get_all(self, skip: int = 0, limit: int = 100):
+ return self.houses.query.filter_by(deleted_at=None).offset(skip*limit).limit(limit).all()
+
+ def get_all_areas(self, house_id: str, skip: int = 0, limit: int = 100):
+ return self.areas.query.filter_by(deleted_at=None, house_id=house_id).offset(skip).limit(limit).all()
+
+ def get_count_all(self):
+ return self.houses.query.filter_by(deleted_at=None).count()
+
+ def get_by_id(self, house_id: str):
+ return self.houses.query.filter_by(id=house_id).one()
+
+ def create(self, db: Session, house: HouseCreate):
+ try:
+ areas = getattr(house, "areas")
+ db_house = Houses(**house.dict(exclude={"areas"}))
+ for area in areas:
+ db_house.areas.append(Areas(**area.dict()))
+ db.add(db_house)
+ db.commit()
+ except Exception:
+ db.rollback()
+ raise
+
+ db.refresh(db_house)
+ return db_house
+
+ def update_area(self, db: Session, areas: list[AreaUpdate], house_id: str):
+ db_house = self.get_by_id(house_id)
+ if not db_house:
+ return None
+ try:
+ db_areaId = [area.id for area in db_house.areas]
+ area_update_id = [area.id for area in areas if area.id is not None]
+ area_delete_id = [area_id for area_id in db_areaId if area_id not in area_update_id]
+ if area_delete_id:
+ self.areas.query.where(Areas.id.in_(area_delete_id)).delete()
+
+ for area in areas:
+ area_obj = Areas(**area.dict(), house_id=house_id)
+ db.merge(area_obj)
+
+ # areaList = [dict(**area.dict(), house_id=house_id) for area in areas]
+ # db.execute(update(Areas), areaList)
+ # self.areas.query.update(areaList)
+ db.commit()
+ except Exception:
+ db.rollback()
+ raise
+
+
+ def update(self, db: Session, house: HouseUpdate):
+ db_house = self.get_by_id(house.id)
+ if not db_house:
+ return None
+ try:
+ self.houses.query.where(Houses.id == house.id).update(house.dict(exclude={"id", 'areas'}, exclude_unset=True, exclude_none=True))
+ db.commit()
+ self.update_area(db, house.areas, house.id)
+ except Exception:
+ db.rollback()
+ raise
+
+ db.refresh(db_house)
+ return db_house
+
+ def delete(self, db: Session, house_id: str):
+ db_house = self.get_by_id(house_id)
+ if not db_house:
+ return None
+ try:
+ self.houses.query.where(Houses.id == house_id).update({"deleted_at": datetime.utcnow()})
+ db.commit()
+ except Exception:
+ db.rollback()
+ raise
+
+ db.refresh(db_house)
+ return db_house
diff --git a/backend/repos/repository_users.py b/backend/repos/repository_users.py
index d2d15b0..1198e96 100644
--- a/backend/repos/repository_users.py
+++ b/backend/repos/repository_users.py
@@ -1,6 +1,6 @@
from backend.core.config import get_app_settings
from backend.core.security.security import hash_password
-from backend.db.models import User
+from backend.db.models import Users
from backend.schemas import UserCreate, UserProfile
from sqlalchemy.orm import Session
from uuid import UUID
@@ -11,7 +11,7 @@ settings = get_app_settings()
class RepositoryUsers:
def __init__(self):
- self.user = User()
+ self.user = Users()
def get_all(self, skip: int = 0, limit: int = 100):
return self.user.query.offset(skip).limit(limit).all()
@@ -25,7 +25,7 @@ class RepositoryUsers:
def create(self, db: Session, user: UserCreate | UserSeeds):
try:
password = getattr(user, "password")
- db_user = User(**user.dict(exclude={"password"}), password=hash_password(password))
+ db_user = Users(**user.dict(exclude={"password"}), password=hash_password(password))
db.add(db_user)
db.commit()
except Exception:
@@ -41,7 +41,7 @@ class RepositoryUsers:
return None
try:
user.update_password()
- self.user.query.where(User.id == user_id).update(user.dict(exclude_unset=True, exclude_none=True))
+ self.user.query.where(Users.id == user_id).update(user.dict(exclude_unset=True, exclude_none=True))
db.commit()
except Exception:
db.rollback()
diff --git a/backend/repos/seeder/__init__.py b/backend/repos/seeder/__init__.py
index 28251c6..17f8770 100644
--- a/backend/repos/seeder/__init__.py
+++ b/backend/repos/seeder/__init__.py
@@ -1 +1,2 @@
from .init_users import default_users_init
+from .init_house import default_house_init
diff --git a/backend/repos/seeder/init_house.py b/backend/repos/seeder/init_house.py
new file mode 100644
index 0000000..f22701e
--- /dev/null
+++ b/backend/repos/seeder/init_house.py
@@ -0,0 +1,26 @@
+from backend.core.config import get_app_settings
+from backend.core.root_logger import get_logger
+from backend.repos.repository_houses import RepositoryHouses
+from sqlalchemy.orm import Session
+
+from backend.schemas.house.house import HouseCreate
+
+
+logger = get_logger("init_house")
+settings = get_app_settings()
+
+def dev_houses() -> list[dict]:
+ list = []
+ for x in range(20):
+ list.append({
+ "icon": "IconAccessible",
+ "name": f"Home{x+1}",
+ "address": f"Address{x+1}",
+ "areas": [{"name": f"Area{x+1}", "desc": "Description"}],
+ })
+ return list
+
+def default_house_init(session: Session):
+ houses = RepositoryHouses()
+ for house in dev_houses():
+ houses.create(session, HouseCreate(**house))
diff --git a/backend/repos/seeder/init_users.py b/backend/repos/seeder/init_users.py
index 46e7e80..cbea105 100644
--- a/backend/repos/seeder/init_users.py
+++ b/backend/repos/seeder/init_users.py
@@ -12,25 +12,16 @@ settings = get_app_settings()
def dev_users() -> list[dict]:
return [
{
- "username": "sam",
+ "username": "admin",
"password": "admin",
"name": "Sam",
"is_admin": True,
- "is_lock": False,
},
{
- "username": "duy",
- "password": "admin",
- "name": "Duy",
- "is_admin": True,
- "is_lock": False,
- },
- {
- "username": "sam1",
+ "username": "admin1",
"password": "admin",
"name": "Sam1",
"is_admin": False,
- "is_lock": False,
},
]
diff --git a/backend/routes/__init__.py b/backend/routes/__init__.py
index 2b9470e..db5200a 100644
--- a/backend/routes/__init__.py
+++ b/backend/routes/__init__.py
@@ -1,9 +1,10 @@
from fastapi import APIRouter
-from . import (auth, user)
+from . import (auth, user, house)
router = APIRouter(prefix='/api')
router.include_router(auth.router)
router.include_router(user.router)
+router.include_router(house.router)
diff --git a/backend/routes/house/__init__.py b/backend/routes/house/__init__.py
new file mode 100644
index 0000000..3cccca0
--- /dev/null
+++ b/backend/routes/house/__init__.py
@@ -0,0 +1,7 @@
+
+from fastapi import APIRouter
+from . import house
+
+router = APIRouter(prefix='/house')
+
+router.include_router(house.public_router)
diff --git a/backend/routes/house/house.py b/backend/routes/house/house.py
new file mode 100644
index 0000000..2855fea
--- /dev/null
+++ b/backend/routes/house/house.py
@@ -0,0 +1,50 @@
+from typing import Annotated, Any
+from fastapi import APIRouter, Depends, HTTPException
+from sqlalchemy.orm import Session
+from backend.core.config import get_app_settings
+from backend.core.dependencies import is_logged_in
+from backend.core.message_code import MessageCode
+from backend.db.db_setup import generate_session
+from backend.schemas.common import ReturnValue
+from backend.schemas.house import HouseCreate
+from backend.schemas.house.house import HouseUpdate, HousesListResponse, HouseResponse
+from backend.schemas.user import ProfileResponse
+from backend.services.house import HouseService
+
+public_router = APIRouter(tags=["Houses: Control"])
+house_service = HouseService()
+settings = get_app_settings()
+
+db_dependency = Annotated[Session, Depends(generate_session)]
+current_user_token = Annotated[ProfileResponse, Depends(is_logged_in)]
+
+@public_router.post("/create", response_model=ReturnValue[Any])
+def create_house(house: HouseCreate, db: db_dependency, current_user: current_user_token) -> ReturnValue[Any]:
+ try:
+ house_service.create(db=db, house=house)
+ except Exception:
+ raise HTTPException(status_code=400, detail=MessageCode.CREATE_HOUSE_FAIL)
+ return ReturnValue(status=200, data=MessageCode.CREATE_HOUSE_SUCCESS)
+
+@public_router.get("/all", response_model=ReturnValue[HousesListResponse])
+def get_all_house(page: int, pageSize: int, current_user: current_user_token) -> ReturnValue[HousesListResponse]:
+ housesCount = house_service.get_all_count()
+ houses = house_service.get_all(skip=page-1, limit=pageSize)
+ return ReturnValue(status=200, data={'total': housesCount, 'list': list(houses)})
+
+@public_router.get("/{house_id}", response_model=ReturnValue[HouseResponse])
+def get_house_by_id(house_id: str, current_user: current_user_token) -> ReturnValue[HouseCreate]:
+ house = house_service.get_by_id(id=house_id)
+ if not house:
+ raise HTTPException(status_code=404, detail=MessageCode.HOUSE_NOT_FOUND)
+ return ReturnValue(status=200, data=house)
+
+@public_router.put("/update", response_model=ReturnValue[HouseCreate])
+def update_house(house: HouseUpdate, current_user: current_user_token, db: db_dependency) -> ReturnValue[Any]:
+ db_house = house_service.update(db=db, house=house)
+ return ReturnValue(status=200, data=db_house)
+
+@public_router.delete("/delete/{house_id}", response_model=ReturnValue[Any])
+def delete_house(house_id: str, current_user: current_user_token, db: db_dependency) -> ReturnValue[Any]:
+ db_house = house_service.delete(db=db, house_id=house_id)
+ return ReturnValue(status=200, data="Deleted")
diff --git a/backend/routes/user/user.py b/backend/routes/user/user.py
index 93ec7bf..22372b2 100644
--- a/backend/routes/user/user.py
+++ b/backend/routes/user/user.py
@@ -23,7 +23,7 @@ def register_user(user: UserCreate, db: db_dependency) -> ReturnValue[Any]:
if db_user:
raise HTTPException(status_code=400, detail=MessageCode.CREATED_USER)
user_service.create(db=db, user=user)
- return ReturnValue(status=200, data="created")
+ return ReturnValue(status=200, data=MessageCode.CREATE_USER_SUCCESS)
@public_router.get("/me", response_model=ReturnValue[ProfileResponse])
def get_user(current_user: current_user_token) -> ReturnValue[Any]:
diff --git a/backend/schemas/__init__.py b/backend/schemas/__init__.py
index deffa8e..22447fc 100644
--- a/backend/schemas/__init__.py
+++ b/backend/schemas/__init__.py
@@ -1,2 +1,3 @@
from .common import *
from .user import *
+from .house import *
diff --git a/backend/schemas/house/__init__.py b/backend/schemas/house/__init__.py
new file mode 100644
index 0000000..cacc29c
--- /dev/null
+++ b/backend/schemas/house/__init__.py
@@ -0,0 +1 @@
+from .house import *
diff --git a/backend/schemas/house/house.py b/backend/schemas/house/house.py
new file mode 100644
index 0000000..98162d7
--- /dev/null
+++ b/backend/schemas/house/house.py
@@ -0,0 +1,42 @@
+from datetime import datetime
+from uuid import UUID
+
+from pydantic import ConfigDict
+from backend.schemas.main_model import MainModel
+
+class HouseBase(MainModel):
+ icon: str
+ name: str
+ address: str
+
+class AreaBase(MainModel):
+ name: str
+ desc: str
+
+class AreaUpdate(AreaBase):
+ id: UUID | None = None
+ model_config = ConfigDict(from_attributes=True)
+
+class HouseCreate(HouseBase):
+ areas: list[AreaBase]
+ model_config = ConfigDict(from_attributes=True)
+
+class HouseUpdate(HouseBase):
+ id: UUID
+ areas: list[AreaUpdate]
+ model_config = ConfigDict(from_attributes=True)
+
+class HouseResponse(HouseBase):
+ id: UUID
+ areas: list[AreaUpdate]
+ model_config = ConfigDict(from_attributes=True)
+
+class HousesList(HouseBase):
+ id: UUID
+ created_at: datetime
+ updated_at: datetime
+ deleted_at: datetime | None
+
+class HousesListResponse(MainModel):
+ total: int
+ list: list[HousesList]
diff --git a/backend/schemas/user/user.py b/backend/schemas/user/user.py
index 5a606e7..6ed3cd9 100644
--- a/backend/schemas/user/user.py
+++ b/backend/schemas/user/user.py
@@ -27,13 +27,12 @@ class UserProfile(MainModel):
class UserSeeds(UserCreate):
is_admin: bool
- is_lock: bool
class PrivateUser(UserBase):
id: UUID
name: str
is_admin: bool
- is_lock: bool
+ is_lock: datetime
created_at: datetime
updated_at: datetime
model_config = ConfigDict(from_attributes=True)
diff --git a/backend/services/house/__init__.py b/backend/services/house/__init__.py
new file mode 100644
index 0000000..40f4d69
--- /dev/null
+++ b/backend/services/house/__init__.py
@@ -0,0 +1 @@
+from .house_service import *
diff --git a/backend/services/house/house_service.py b/backend/services/house/house_service.py
new file mode 100644
index 0000000..931fc77
--- /dev/null
+++ b/backend/services/house/house_service.py
@@ -0,0 +1,26 @@
+from sqlalchemy.orm import Session
+from backend.repos import RepositoryHouses
+from backend.schemas import HouseCreate, HouseUpdate
+from backend.services._base_service import BaseService
+
+class HouseService(BaseService):
+ def __init__(self):
+ self.repos = RepositoryHouses()
+
+ def create(self, db: Session, house: HouseCreate):
+ return self.repos.create(db=db, house=house)
+
+ def get_all(self, skip: int = 0, limit: int = 100):
+ return self.repos.get_all(skip=skip, limit=limit)
+
+ def get_all_count(self):
+ return self.repos.get_count_all()
+
+ def get_by_id(self, id: str):
+ return self.repos.get_by_id(house_id=id)
+
+ def update(self, db: Session, house: HouseUpdate):
+ return self.repos.update(db=db, house=house)
+
+ def delete(self, db: Session, house_id: str):
+ return self.repos.delete(db=db, house_id=house_id)
diff --git a/backend/services/user/user_service.py b/backend/services/user/user_service.py
index 5a968b7..103c5a3 100644
--- a/backend/services/user/user_service.py
+++ b/backend/services/user/user_service.py
@@ -31,7 +31,6 @@ class UserService(BaseService):
return self.repos.create(db=db, user=user)
def check_exist(self, user: UserRequest):
- print(f"user: {user}")
db_user = self.get_by_username(username=user.username)
if not db_user:
return False
diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 0000000..e0fbfd1
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,104 @@
+###############################################
+# Base Image - Python
+###############################################
+FROM python:3.10-slim AS python-base
+
+ENV FUWARE_HOME="/app"
+
+ENV PYTHONUNBUFFERED=1 \
+ PYTHONDONTWRITEBYTECODE=1 \
+ PIP_NO_CACHE_DIR=off \
+ PIP_DISABLE_PIP_VERSION_CHECK=on \
+ PIP_DEFAULT_TIMEOUT=100 \
+ POETRY_HOME="/opt/poetry" \
+ POETRY_VIRTUALENVS_IN_PROJECT=true \
+ POETRY_NO_INTERACTION=1 \
+ PYSETUP_PATH="/opt/pysetup" \
+ VENV_PATH="/opt/pysetup/.venv"
+
+# prepend poetry and venv to path
+ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH"
+
+# create user account
+RUN useradd -u 911 -U -d $FUWARE_HOME -s /bin/bash abc \
+ && usermod -G users abc \
+ && mkdir $FUWARE_HOME
+
+###############################################
+# Builder Image
+###############################################
+FROM python-base AS builder-base
+RUN apt-get update \
+ && apt-get install --no-install-recommends -y \
+ curl \
+ build-essential \
+ libpq-dev \
+ libwebp-dev \
+ # LDAP Dependencies
+ libsasl2-dev libldap2-dev libssl-dev \
+ gnupg gnupg2 gnupg1 \
+ && rm -rf /var/lib/apt/lists/* \
+ && pip install -U --no-cache-dir pip
+
+# install poetry - respects $POETRY_VERSION & $POETRY_HOME
+ENV POETRY_VERSION=1.3.1
+RUN curl -sSL https://install.python-poetry.org | python3 -
+
+# copy project requirement files here to ensure they will be cached.
+WORKDIR $PYSETUP_PATH
+COPY ./poetry.lock ./pyproject.toml ./
+
+# install runtime deps - uses $POETRY_VIRTUALENVS_IN_PROJECT internally
+RUN poetry install --only main
+
+###############################################
+# Production Image
+###############################################
+FROM python-base AS production
+ENV PRODUCTION=true
+ENV TESTING=false
+
+ARG COMMIT
+ENV GIT_COMMIT_HASH=$COMMIT
+
+RUN apt-get update \
+ && apt-get install --no-install-recommends -y \
+ gosu \
+ iproute2 \
+ libldap-common \
+ libldap-2.5 \
+ && rm -rf /var/lib/apt/lists/*
+
+# create directory used for Docker Secrets
+RUN mkdir -p /run/secrets
+
+# copying poetry and venv into image
+COPY --from=builder-base $POETRY_HOME $POETRY_HOME
+COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH
+
+# copy backend
+COPY ./backend $FUWARE_HOME/backend
+COPY ./poetry.lock ./pyproject.toml $FUWARE_HOME/
+
+# Alembic
+COPY ./alembic $FUWARE_HOME/alembic
+COPY ./alembic.ini $FUWARE_HOME/
+
+# venv already has runtime deps installed we get a quicker install
+WORKDIR $FUWARE_HOME
+RUN . $VENV_PATH/bin/activate && poetry install --only main
+WORKDIR /
+
+VOLUME [ "$FUWARE_HOME/data/" ]
+ENV APP_PORT=9000
+
+EXPOSE ${APP_PORT}
+
+# ----------------------------------
+ENV HOST 0.0.0.0
+
+EXPOSE ${APP_PORT}
+COPY ./docker/entry.sh $FUWARE_HOME/run.sh
+
+RUN chmod +x $FUWARE_HOME/run.sh
+ENTRYPOINT ["/app/run.sh"]
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
new file mode 100644
index 0000000..ffda285
--- /dev/null
+++ b/docker/docker-compose.yml
@@ -0,0 +1,30 @@
+services:
+ fuware:
+ container_name: fuware
+ image: fuware:dev
+ build:
+ context: ../
+ target: production
+ dockerfile: ./docker/Dockerfile
+ restart: always
+ volumes:
+ - fuware-data:/app/data/
+ ports:
+ - 9091:9000
+ environment:
+ ALLOW_SIGNUP: "false"
+ LOG_LEVEL: "DEBUG"
+
+ # =====================================
+ # Email Configuration
+ # SMTP_HOST=
+ # SMTP_PORT=587
+ # SMTP_FROM_NAME=Mealie
+ # SMTP_AUTH_STRATEGY=TLS # Options: 'TLS', 'SSL', 'NONE'
+ # SMTP_FROM_EMAIL=
+ # SMTP_USER=
+ # SMTP_PASSWORD=
+
+volumes:
+ fuware-data:
+ driver: local
diff --git a/docker/entry.sh b/docker/entry.sh
new file mode 100644
index 0000000..71f514e
--- /dev/null
+++ b/docker/entry.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+# Start Backend API
+
+# Get PUID/PGID
+PUID=${PUID:-911}
+PGID=${PGID:-911}
+BASH_SOURCE=${BASH_SOURCE:-$0}
+
+add_user() {
+ groupmod -o -g "$PGID" abc
+ usermod -o -u "$PUID" abc
+}
+
+change_user() {
+ if [ "$(id -u)" = $PUID ]; then
+ echo "
+ User uid: $PUID
+ User gid: $PGID
+ "
+ elif [ "$(id -u)" = "0" ]; then
+ # If container is started as root then create a new user and switch to it
+ add_user
+ chown -R $PUID:$PGID /app
+
+ echo "Switching to dedicated user"
+ exec gosu $PUID "$BASH_SOURCE" "$@"
+ fi
+}
+
+init() {
+ # $FUWARE_HOME directory
+ cd /app
+
+ # Activate our virtual environment here
+ . /opt/pysetup/.venv/bin/activate
+}
+
+change_user
+init
+
+# Start API
+HOST_IP=`/sbin/ip route|awk '/default/ { print $3 }'`
+
+exec python /app/backend/main.py
diff --git a/frontend/.dockerignore b/frontend/.dockerignore
deleted file mode 100644
index 8d8bf1c..0000000
--- a/frontend/.dockerignore
+++ /dev/null
@@ -1,7 +0,0 @@
-Dockerfile
-.dockerignore
-node_modules
-README.md
-.git
-.gitignore
-.env
diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs
deleted file mode 100644
index f353c82..0000000
--- a/frontend/.eslintrc.cjs
+++ /dev/null
@@ -1,32 +0,0 @@
-module.exports = {
- root: true,
- env: {
- browser: true,
- es2021: true,
- },
- plugins: ['solid'],
- extends: ['eslint:recommended', 'plugin:solid/recommended'],
- overrides: [
- {
- env: {
- node: true,
- },
- files: ['.eslintrc.{js,cjs}'],
- parserOptions: {
- sourceType: 'script',
- },
- },
- ],
- ignorePatterns: ['dist', '.eslintrc.cjs'],
- parserOptions: {
- ecmaVersion: 'latest',
- sourceType: 'module',
- },
- rules: {
- indent: ['warn', 2],
- quotes: ['error', 'single'],
- semi: ['error', 'never'],
- 'max-lines-per-function': [1, 1000],
- 'no-unused-vars': ['warn'],
- },
-}
diff --git a/frontend/.gitignore b/frontend/.gitignore
deleted file mode 100644
index a547bf3..0000000
--- a/frontend/.gitignore
+++ /dev/null
@@ -1,24 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
-
-node_modules
-dist
-dist-ssr
-*.local
-
-# Editor directories and files
-.vscode/*
-!.vscode/extensions.json
-.idea
-.DS_Store
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
diff --git a/frontend/.lintstagedrc b/frontend/.lintstagedrc
deleted file mode 100644
index 9cac71b..0000000
--- a/frontend/.lintstagedrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "src/**/*.{js,jsx}": ["pnpm eslint", "pnpm prettier"]
-}
diff --git a/frontend/.prettierignore b/frontend/.prettierignore
deleted file mode 100644
index 4f671c2..0000000
--- a/frontend/.prettierignore
+++ /dev/null
@@ -1,4 +0,0 @@
-
-/node_modules
-/public
-/build
diff --git a/frontend/.prettierrc b/frontend/.prettierrc
deleted file mode 100644
index 41d3fb8..0000000
--- a/frontend/.prettierrc
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "trailingComma": "all",
- "useTabs": false,
- "tabWidth": 2,
- "semi": false,
- "singleQuote": true
-}
diff --git a/frontend/Dockerfile b/frontend/Dockerfile
deleted file mode 100644
index e4294c7..0000000
--- a/frontend/Dockerfile
+++ /dev/null
@@ -1,14 +0,0 @@
-FROM node:18.19.0-alpine3.19
-
-WORKDIR /app/client
-
-COPY package*.json .
-RUN npm i
-
-COPY . .
-ENV NODE_ENV=production
-ENV VITE_LOGIN_KEY=7fo24CMyIc
-
-EXPOSE 5000
-
-CMD ["npm", "run", "dev"]
diff --git a/frontend/index.html b/frontend/index.html
deleted file mode 100644
index 9beb395..0000000
--- a/frontend/index.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
- Fuware
-
-
-
-
-
-
diff --git a/frontend/jsconfig.json b/frontend/jsconfig.json
deleted file mode 100644
index c2ef0e3..0000000
--- a/frontend/jsconfig.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "extends": "./jsconfig.paths.json",
- "compilerOptions": {
- "target": "ESNext",
- "module": "ESNext",
- "moduleResolution": "node",
- "allowSyntheticDefaultImports": true,
- "esModuleInterop": true,
- "jsx": "preserve",
- "jsxImportSource": "solid-js",
- "resolveJsonModule": true,
- "isolatedModules": false,
- "allowJs": true,
- "skipLibCheck": true
- }
-}
diff --git a/frontend/jsconfig.paths.json b/frontend/jsconfig.paths.json
deleted file mode 100644
index c291a0b..0000000
--- a/frontend/jsconfig.paths.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "compilerOptions": {
- "baseUrl": ".",
- "paths": {
- "@api/*": ["src/api/*"],
- "@pages/*": ["src/pages/*"],
- "@components/*": ["src/components/*"],
- "@routes/*": ["src/routes/*"],
- "@utils/*": ["src/utils/*"],
- "@assets/*": ["src/assets/*"],
- "@context/*": ["src/context/*"],
- "@lang/*": ["src/lang/*"],
- "@hooks/*": ["src/hooks/*"],
- "@/*": ["src/*"]
- }
- }
-}
diff --git a/frontend/package.json b/frontend/package.json
deleted file mode 100644
index 8f060a4..0000000
--- a/frontend/package.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- "name": "fuware",
- "private": true,
- "version": "0.0.0",
- "type": "module",
- "engines": {
- "node": ">=18.20.2"
- },
- "scripts": {
- "dev": "vite",
- "build": "vite build",
- "preview": "vite preview",
- "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
- "eslint": "eslint \"src/**/*.{js,jsx}\" --fix",
- "prettier": "prettier \"src/**/*.{js,jsx}\" --write"
- },
- "dependencies": {
- "@solidjs/meta": "^0.29.4",
- "@solidjs/router": "^0.13.3",
- "@stitches/core": "^1.2.8",
- "@tabler/icons-solidjs": "^3.3.0",
- "axios": "^1.6.8",
- "crypto-js": "^4.2.0",
- "solid-form-handler": "^1.2.3",
- "solid-js": "^1.8.15",
- "solid-toast": "^0.5.0",
- "yup": "^1.4.0"
- },
- "devDependencies": {
- "autoprefixer": "^10.4.19",
- "daisyui": "^4.11.1",
- "eslint": "^8.56.0",
- "eslint-plugin-solid": "^0.14.0",
- "lint-staged": "15.2.2",
- "postcss": "^8.4.38",
- "prettier": "3.2.5",
- "sass": "^1.77.4",
- "tailwindcss": "^3.4.3",
- "vite": "^5.2.0",
- "vite-plugin-mkcert": "^1.17.5",
- "vite-plugin-solid": "^2.10.2"
- },
- "proxy": "http://localhost:9000"
-}
diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml
deleted file mode 100644
index c0decb8..0000000
--- a/frontend/pnpm-lock.yaml
+++ /dev/null
@@ -1,3336 +0,0 @@
-lockfileVersion: '9.0'
-
-settings:
- autoInstallPeers: true
- excludeLinksFromLockfile: false
-
-importers:
-
- .:
- dependencies:
- '@solidjs/meta':
- specifier: ^0.29.4
- version: 0.29.4(solid-js@1.8.17)
- '@solidjs/router':
- specifier: ^0.13.3
- version: 0.13.3(solid-js@1.8.17)
- '@stitches/core':
- specifier: ^1.2.8
- version: 1.2.8
- '@tabler/icons-solidjs':
- specifier: ^3.3.0
- version: 3.4.0(solid-js@1.8.17)
- axios:
- specifier: ^1.6.8
- version: 1.6.8(debug@4.3.4)
- crypto-js:
- specifier: ^4.2.0
- version: 4.2.0
- solid-form-handler:
- specifier: ^1.2.3
- version: 1.2.3(solid-js@1.8.17)
- solid-js:
- specifier: ^1.8.15
- version: 1.8.17
- solid-toast:
- specifier: ^0.5.0
- version: 0.5.0(solid-js@1.8.17)
- yup:
- specifier: ^1.4.0
- version: 1.4.0
- devDependencies:
- autoprefixer:
- specifier: ^10.4.19
- version: 10.4.19(postcss@8.4.38)
- daisyui:
- specifier: ^4.11.1
- version: 4.11.1(postcss@8.4.38)
- eslint:
- specifier: ^8.56.0
- version: 8.57.0
- eslint-plugin-solid:
- specifier: ^0.14.0
- version: 0.14.0(eslint@8.57.0)(typescript@5.4.5)
- lint-staged:
- specifier: 15.2.2
- version: 15.2.2
- postcss:
- specifier: ^8.4.38
- version: 8.4.38
- prettier:
- specifier: 3.2.5
- version: 3.2.5
- sass:
- specifier: ^1.77.4
- version: 1.77.4
- tailwindcss:
- specifier: ^3.4.3
- version: 3.4.3
- vite:
- specifier: ^5.2.0
- version: 5.2.11(sass@1.77.4)
- vite-plugin-mkcert:
- specifier: ^1.17.5
- version: 1.17.5(vite@5.2.11(sass@1.77.4))
- vite-plugin-solid:
- specifier: ^2.10.2
- version: 2.10.2(solid-js@1.8.17)(vite@5.2.11(sass@1.77.4))
-
-packages:
-
- '@alloc/quick-lru@5.2.0':
- resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
- engines: {node: '>=10'}
-
- '@ampproject/remapping@2.3.0':
- resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
- engines: {node: '>=6.0.0'}
-
- '@babel/code-frame@7.24.2':
- resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/compat-data@7.24.4':
- resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/core@7.24.5':
- resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/generator@7.24.5':
- resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-compilation-targets@7.23.6':
- resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-environment-visitor@7.22.20':
- resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-function-name@7.23.0':
- resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-hoist-variables@7.22.5':
- resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-module-imports@7.18.6':
- resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-module-imports@7.24.3':
- resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-module-transforms@7.24.5':
- resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/helper-plugin-utils@7.24.5':
- resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-simple-access@7.24.5':
- resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-split-export-declaration@7.24.5':
- resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-string-parser@7.24.1':
- resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-validator-identifier@7.24.5':
- resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-validator-option@7.23.5':
- resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helpers@7.24.5':
- resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==}
- engines: {node: '>=6.9.0'}
-
- '@babel/highlight@7.24.5':
- resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/parser@7.24.5':
- resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==}
- engines: {node: '>=6.0.0'}
- hasBin: true
-
- '@babel/plugin-syntax-jsx@7.24.1':
- resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/template@7.24.0':
- resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/traverse@7.24.5':
- resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/types@7.24.5':
- resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==}
- engines: {node: '>=6.9.0'}
-
- '@esbuild/aix-ppc64@0.20.2':
- resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [aix]
-
- '@esbuild/android-arm64@0.20.2':
- resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
-
- '@esbuild/android-arm@0.20.2':
- resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [android]
-
- '@esbuild/android-x64@0.20.2':
- resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
-
- '@esbuild/darwin-arm64@0.20.2':
- resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
-
- '@esbuild/darwin-x64@0.20.2':
- resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [darwin]
-
- '@esbuild/freebsd-arm64@0.20.2':
- resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
-
- '@esbuild/freebsd-x64@0.20.2':
- resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [freebsd]
-
- '@esbuild/linux-arm64@0.20.2':
- resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
-
- '@esbuild/linux-arm@0.20.2':
- resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
-
- '@esbuild/linux-ia32@0.20.2':
- resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [linux]
-
- '@esbuild/linux-loong64@0.20.2':
- resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==}
- engines: {node: '>=12'}
- cpu: [loong64]
- os: [linux]
-
- '@esbuild/linux-mips64el@0.20.2':
- resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==}
- engines: {node: '>=12'}
- cpu: [mips64el]
- os: [linux]
-
- '@esbuild/linux-ppc64@0.20.2':
- resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [linux]
-
- '@esbuild/linux-riscv64@0.20.2':
- resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==}
- engines: {node: '>=12'}
- cpu: [riscv64]
- os: [linux]
-
- '@esbuild/linux-s390x@0.20.2':
- resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==}
- engines: {node: '>=12'}
- cpu: [s390x]
- os: [linux]
-
- '@esbuild/linux-x64@0.20.2':
- resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [linux]
-
- '@esbuild/netbsd-x64@0.20.2':
- resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [netbsd]
-
- '@esbuild/openbsd-x64@0.20.2':
- resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [openbsd]
-
- '@esbuild/sunos-x64@0.20.2':
- resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [sunos]
-
- '@esbuild/win32-arm64@0.20.2':
- resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
-
- '@esbuild/win32-ia32@0.20.2':
- resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [win32]
-
- '@esbuild/win32-x64@0.20.2':
- resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [win32]
-
- '@eslint-community/eslint-utils@4.4.0':
- resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-
- '@eslint-community/regexpp@4.10.0':
- resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
- engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
-
- '@eslint/eslintrc@2.1.4':
- resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
- '@eslint/js@8.57.0':
- resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
- '@humanwhocodes/config-array@0.11.14':
- resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
- engines: {node: '>=10.10.0'}
-
- '@humanwhocodes/module-importer@1.0.1':
- resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
- engines: {node: '>=12.22'}
-
- '@humanwhocodes/object-schema@2.0.3':
- resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
-
- '@isaacs/cliui@8.0.2':
- resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
- engines: {node: '>=12'}
-
- '@jridgewell/gen-mapping@0.3.5':
- resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
- engines: {node: '>=6.0.0'}
-
- '@jridgewell/resolve-uri@3.1.2':
- resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
- engines: {node: '>=6.0.0'}
-
- '@jridgewell/set-array@1.2.1':
- resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
- engines: {node: '>=6.0.0'}
-
- '@jridgewell/sourcemap-codec@1.4.15':
- resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
-
- '@jridgewell/trace-mapping@0.3.25':
- resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
-
- '@nodelib/fs.scandir@2.1.5':
- resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
- engines: {node: '>= 8'}
-
- '@nodelib/fs.stat@2.0.5':
- resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
- engines: {node: '>= 8'}
-
- '@nodelib/fs.walk@1.2.8':
- resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
- engines: {node: '>= 8'}
-
- '@octokit/auth-token@4.0.0':
- resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==}
- engines: {node: '>= 18'}
-
- '@octokit/core@5.2.0':
- resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==}
- engines: {node: '>= 18'}
-
- '@octokit/endpoint@9.0.5':
- resolution: {integrity: sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==}
- engines: {node: '>= 18'}
-
- '@octokit/graphql@7.1.0':
- resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==}
- engines: {node: '>= 18'}
-
- '@octokit/openapi-types@22.2.0':
- resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==}
-
- '@octokit/plugin-paginate-rest@11.3.1':
- resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==}
- engines: {node: '>= 18'}
- peerDependencies:
- '@octokit/core': '5'
-
- '@octokit/plugin-request-log@4.0.1':
- resolution: {integrity: sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==}
- engines: {node: '>= 18'}
- peerDependencies:
- '@octokit/core': '5'
-
- '@octokit/plugin-rest-endpoint-methods@13.2.2':
- resolution: {integrity: sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==}
- engines: {node: '>= 18'}
- peerDependencies:
- '@octokit/core': ^5
-
- '@octokit/request-error@5.1.0':
- resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==}
- engines: {node: '>= 18'}
-
- '@octokit/request@8.4.0':
- resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==}
- engines: {node: '>= 18'}
-
- '@octokit/rest@20.1.1':
- resolution: {integrity: sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==}
- engines: {node: '>= 18'}
-
- '@octokit/types@13.5.0':
- resolution: {integrity: sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==}
-
- '@pkgjs/parseargs@0.11.0':
- resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
- engines: {node: '>=14'}
-
- '@rollup/rollup-android-arm-eabi@4.17.2':
- resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==}
- cpu: [arm]
- os: [android]
-
- '@rollup/rollup-android-arm64@4.17.2':
- resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==}
- cpu: [arm64]
- os: [android]
-
- '@rollup/rollup-darwin-arm64@4.17.2':
- resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==}
- cpu: [arm64]
- os: [darwin]
-
- '@rollup/rollup-darwin-x64@4.17.2':
- resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==}
- cpu: [x64]
- os: [darwin]
-
- '@rollup/rollup-linux-arm-gnueabihf@4.17.2':
- resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==}
- cpu: [arm]
- os: [linux]
-
- '@rollup/rollup-linux-arm-musleabihf@4.17.2':
- resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==}
- cpu: [arm]
- os: [linux]
-
- '@rollup/rollup-linux-arm64-gnu@4.17.2':
- resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==}
- cpu: [arm64]
- os: [linux]
-
- '@rollup/rollup-linux-arm64-musl@4.17.2':
- resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==}
- cpu: [arm64]
- os: [linux]
-
- '@rollup/rollup-linux-powerpc64le-gnu@4.17.2':
- resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==}
- cpu: [ppc64]
- os: [linux]
-
- '@rollup/rollup-linux-riscv64-gnu@4.17.2':
- resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==}
- cpu: [riscv64]
- os: [linux]
-
- '@rollup/rollup-linux-s390x-gnu@4.17.2':
- resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==}
- cpu: [s390x]
- os: [linux]
-
- '@rollup/rollup-linux-x64-gnu@4.17.2':
- resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==}
- cpu: [x64]
- os: [linux]
-
- '@rollup/rollup-linux-x64-musl@4.17.2':
- resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==}
- cpu: [x64]
- os: [linux]
-
- '@rollup/rollup-win32-arm64-msvc@4.17.2':
- resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==}
- cpu: [arm64]
- os: [win32]
-
- '@rollup/rollup-win32-ia32-msvc@4.17.2':
- resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==}
- cpu: [ia32]
- os: [win32]
-
- '@rollup/rollup-win32-x64-msvc@4.17.2':
- resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==}
- cpu: [x64]
- os: [win32]
-
- '@solidjs/meta@0.29.4':
- resolution: {integrity: sha512-zdIWBGpR9zGx1p1bzIPqF5Gs+Ks/BH8R6fWhmUa/dcK1L2rUC8BAcZJzNRYBQv74kScf1TSOs0EY//Vd/I0V8g==}
- peerDependencies:
- solid-js: '>=1.8.4'
-
- '@solidjs/router@0.13.3':
- resolution: {integrity: sha512-p8zznlvnN3KySMXqT8irhubgDNTETNa/guaGHU/cZl7kuiPO3PmkWNYfoNCygtEpoxLmLpf62/ZKeyhFdZexsw==}
- peerDependencies:
- solid-js: ^1.8.6
-
- '@stitches/core@1.2.8':
- resolution: {integrity: sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==}
-
- '@tabler/icons-solidjs@3.4.0':
- resolution: {integrity: sha512-d8FUhH+/QtTdzQP3D0K0DnDSyH+D+ufMRtU9jhNnKM8+g5TfbVXUxAJKD0v5pWrllmZz0/uutUVcp/baWVHn+g==}
- peerDependencies:
- solid-js: ^1.4.7
-
- '@tabler/icons@3.4.0':
- resolution: {integrity: sha512-6gYHXG0xAJgt2KPcTYDqhe3xYoJMTgz/ZfYup4EUHsxzYsz6rBlt8WgavHsGaWckaqH7ApR/epYslfXZjK27yw==}
-
- '@types/babel__core@7.20.5':
- resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
-
- '@types/babel__generator@7.6.8':
- resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
-
- '@types/babel__template@7.4.4':
- resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
-
- '@types/babel__traverse@7.20.5':
- resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==}
-
- '@types/estree@1.0.5':
- resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
-
- '@typescript-eslint/scope-manager@7.9.0':
- resolution: {integrity: sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==}
- engines: {node: ^18.18.0 || >=20.0.0}
-
- '@typescript-eslint/types@7.9.0':
- resolution: {integrity: sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==}
- engines: {node: ^18.18.0 || >=20.0.0}
-
- '@typescript-eslint/typescript-estree@7.9.0':
- resolution: {integrity: sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==}
- engines: {node: ^18.18.0 || >=20.0.0}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- '@typescript-eslint/utils@7.9.0':
- resolution: {integrity: sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==}
- engines: {node: ^18.18.0 || >=20.0.0}
- peerDependencies:
- eslint: ^8.56.0
-
- '@typescript-eslint/visitor-keys@7.9.0':
- resolution: {integrity: sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==}
- engines: {node: ^18.18.0 || >=20.0.0}
-
- '@ungap/structured-clone@1.2.0':
- resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
-
- acorn-jsx@5.3.2:
- resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
- peerDependencies:
- acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-
- acorn@8.11.3:
- resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
- engines: {node: '>=0.4.0'}
- hasBin: true
-
- ajv@6.12.6:
- resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
-
- ansi-escapes@6.2.1:
- resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==}
- engines: {node: '>=14.16'}
-
- ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
-
- ansi-regex@6.0.1:
- resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
- engines: {node: '>=12'}
-
- ansi-styles@3.2.1:
- resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
- engines: {node: '>=4'}
-
- ansi-styles@4.3.0:
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
- engines: {node: '>=8'}
-
- ansi-styles@6.2.1:
- resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
- engines: {node: '>=12'}
-
- any-promise@1.3.0:
- resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
-
- anymatch@3.1.3:
- resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
- engines: {node: '>= 8'}
-
- arg@5.0.2:
- resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
-
- argparse@2.0.1:
- resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
-
- array-union@2.1.0:
- resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
- engines: {node: '>=8'}
-
- asynckit@0.4.0:
- resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
-
- autoprefixer@10.4.19:
- resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==}
- engines: {node: ^10 || ^12 || >=14}
- hasBin: true
- peerDependencies:
- postcss: ^8.1.0
-
- axios@1.6.8:
- resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==}
-
- babel-plugin-jsx-dom-expressions@0.37.20:
- resolution: {integrity: sha512-0L3aC5EFyvCgIlEYIqJb4Ym29s1IDI/U5SntZ1ZK054xe0MqBmBi2GLK3f9AOklhdY7kCC3GsHD0bILh6u0Qsg==}
- peerDependencies:
- '@babel/core': ^7.20.12
-
- babel-preset-solid@1.8.17:
- resolution: {integrity: sha512-s/FfTZOeds0hYxYqce90Jb+0ycN2lrzC7VP1k1JIn3wBqcaexDKdYi6xjB+hMNkL+Q6HobKbwsriqPloasR9LA==}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
- before-after-hook@2.2.3:
- resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
-
- binary-extensions@2.3.0:
- resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
- engines: {node: '>=8'}
-
- brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
-
- brace-expansion@2.0.1:
- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
-
- braces@3.0.2:
- resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
- engines: {node: '>=8'}
-
- browserslist@4.23.0:
- resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
-
- callsites@3.1.0:
- resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
- engines: {node: '>=6'}
-
- camelcase-css@2.0.1:
- resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
- engines: {node: '>= 6'}
-
- caniuse-lite@1.0.30001620:
- resolution: {integrity: sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==}
-
- chalk@2.4.2:
- resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
- engines: {node: '>=4'}
-
- chalk@4.1.2:
- resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
- engines: {node: '>=10'}
-
- chalk@5.3.0:
- resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
- engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
-
- chokidar@3.6.0:
- resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
- engines: {node: '>= 8.10.0'}
-
- cli-cursor@4.0.0:
- resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- cli-truncate@4.0.0:
- resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
- engines: {node: '>=18'}
-
- color-convert@1.9.3:
- resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
-
- color-convert@2.0.1:
- resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
- engines: {node: '>=7.0.0'}
-
- color-name@1.1.3:
- resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
-
- color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-
- colorette@2.0.20:
- resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
-
- combined-stream@1.0.8:
- resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
- engines: {node: '>= 0.8'}
-
- commander@11.1.0:
- resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
- engines: {node: '>=16'}
-
- commander@4.1.1:
- resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
- engines: {node: '>= 6'}
-
- concat-map@0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
-
- convert-source-map@2.0.0:
- resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
-
- cross-spawn@7.0.3:
- resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
- engines: {node: '>= 8'}
-
- crypto-js@4.2.0:
- resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
-
- css-selector-tokenizer@0.8.0:
- resolution: {integrity: sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==}
-
- cssesc@3.0.0:
- resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
- engines: {node: '>=4'}
- hasBin: true
-
- csstype@3.1.3:
- resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
-
- culori@3.3.0:
- resolution: {integrity: sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- daisyui@4.11.1:
- resolution: {integrity: sha512-obT9CUbQdW6eoHwSeT5VwaRrWlwrM4OT5qlfdJ0oQlSIEYhwnEl2+L2fwu5PioLbitwuMdYC2X8I1cyy8Pf6LQ==}
- engines: {node: '>=16.9.0'}
-
- debug@4.3.4:
- resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
- deep-is@0.1.4:
- resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
-
- delayed-stream@1.0.0:
- resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
- engines: {node: '>=0.4.0'}
-
- deprecation@2.3.1:
- resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
-
- didyoumean@1.2.2:
- resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
-
- dir-glob@3.0.1:
- resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
- engines: {node: '>=8'}
-
- dlv@1.1.3:
- resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
-
- doctrine@3.0.0:
- resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
- engines: {node: '>=6.0.0'}
-
- eastasianwidth@0.2.0:
- resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
-
- electron-to-chromium@1.4.773:
- resolution: {integrity: sha512-87eHF+h3PlCRwbxVEAw9KtK3v7lWfc/sUDr0W76955AdYTG4bV/k0zrl585Qnj/skRMH2qOSiE+kqMeOQ+LOpw==}
-
- emoji-regex@10.3.0:
- resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==}
-
- emoji-regex@8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-
- emoji-regex@9.2.2:
- resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
-
- esbuild@0.20.2:
- resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==}
- engines: {node: '>=12'}
- hasBin: true
-
- escalade@3.1.2:
- resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
- engines: {node: '>=6'}
-
- escape-string-regexp@1.0.5:
- resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
- engines: {node: '>=0.8.0'}
-
- escape-string-regexp@4.0.0:
- resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
- engines: {node: '>=10'}
-
- eslint-plugin-solid@0.14.0:
- resolution: {integrity: sha512-EY0GJLOZdLynAyBM39WBLJH2bUftGI0KekyzpfxQEhCTuOhXkIRf648P97mQjME3TDaQQbY+ObVXeE2mjfs4FQ==}
- engines: {node: '>=12.0.0'}
- peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
-
- eslint-scope@7.2.2:
- resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
- eslint-visitor-keys@3.4.3:
- resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
- eslint@8.57.0:
- resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- hasBin: true
-
- espree@9.6.1:
- resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
- esquery@1.5.0:
- resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
- engines: {node: '>=0.10'}
-
- esrecurse@4.3.0:
- resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
- engines: {node: '>=4.0'}
-
- estraverse@5.3.0:
- resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
- engines: {node: '>=4.0'}
-
- esutils@2.0.3:
- resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
- engines: {node: '>=0.10.0'}
-
- eventemitter3@5.0.1:
- resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
-
- execa@8.0.1:
- resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
- engines: {node: '>=16.17'}
-
- fast-deep-equal@3.1.3:
- resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
-
- fast-glob@3.3.2:
- resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
- engines: {node: '>=8.6.0'}
-
- fast-json-stable-stringify@2.1.0:
- resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
-
- fast-levenshtein@2.0.6:
- resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
-
- fastparse@1.1.2:
- resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==}
-
- fastq@1.17.1:
- resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
-
- file-entry-cache@6.0.1:
- resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
- engines: {node: ^10.12.0 || >=12.0.0}
-
- fill-range@7.0.1:
- resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
- engines: {node: '>=8'}
-
- find-up@5.0.0:
- resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
- engines: {node: '>=10'}
-
- flat-cache@3.2.0:
- resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
- engines: {node: ^10.12.0 || >=12.0.0}
-
- flatted@3.3.1:
- resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
-
- follow-redirects@1.15.6:
- resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
- engines: {node: '>=4.0'}
- peerDependencies:
- debug: '*'
- peerDependenciesMeta:
- debug:
- optional: true
-
- foreground-child@3.1.1:
- resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
- engines: {node: '>=14'}
-
- form-data@4.0.0:
- resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
- engines: {node: '>= 6'}
-
- fraction.js@4.3.7:
- resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
-
- fs.realpath@1.0.0:
- resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
-
- fsevents@2.3.3:
- resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
-
- function-bind@1.1.2:
- resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
-
- gensync@1.0.0-beta.2:
- resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
- engines: {node: '>=6.9.0'}
-
- get-east-asian-width@1.2.0:
- resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==}
- engines: {node: '>=18'}
-
- get-stream@8.0.1:
- resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
- engines: {node: '>=16'}
-
- glob-parent@5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
-
- glob-parent@6.0.2:
- resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
- engines: {node: '>=10.13.0'}
-
- glob@10.3.15:
- resolution: {integrity: sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==}
- engines: {node: '>=16 || 14 >=14.18'}
- hasBin: true
-
- glob@7.2.3:
- resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
-
- globals@11.12.0:
- resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
- engines: {node: '>=4'}
-
- globals@13.24.0:
- resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
- engines: {node: '>=8'}
-
- globby@11.1.0:
- resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
- engines: {node: '>=10'}
-
- graphemer@1.4.0:
- resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
-
- has-flag@3.0.0:
- resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
- engines: {node: '>=4'}
-
- has-flag@4.0.0:
- resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
- engines: {node: '>=8'}
-
- hasown@2.0.2:
- resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
- engines: {node: '>= 0.4'}
-
- html-entities@2.3.3:
- resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==}
-
- html-tags@3.3.1:
- resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
- engines: {node: '>=8'}
-
- human-signals@5.0.0:
- resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
- engines: {node: '>=16.17.0'}
-
- ignore@5.3.1:
- resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
- engines: {node: '>= 4'}
-
- immutable@4.3.6:
- resolution: {integrity: sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==}
-
- import-fresh@3.3.0:
- resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
- engines: {node: '>=6'}
-
- imurmurhash@0.1.4:
- resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
- engines: {node: '>=0.8.19'}
-
- inflight@1.0.6:
- resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
-
- inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-
- inline-style-parser@0.2.3:
- resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==}
-
- is-binary-path@2.1.0:
- resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
- engines: {node: '>=8'}
-
- is-core-module@2.13.1:
- resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
-
- is-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
-
- is-fullwidth-code-point@3.0.0:
- resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
- engines: {node: '>=8'}
-
- is-fullwidth-code-point@4.0.0:
- resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
- engines: {node: '>=12'}
-
- is-fullwidth-code-point@5.0.0:
- resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
- engines: {node: '>=18'}
-
- is-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
-
- is-html@2.0.0:
- resolution: {integrity: sha512-S+OpgB5i7wzIue/YSE5hg0e5ZYfG3hhpNh9KGl6ayJ38p7ED6wxQLd1TV91xHpcTvw90KMJ9EwN3F/iNflHBVg==}
- engines: {node: '>=8'}
-
- is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
-
- is-path-inside@3.0.3:
- resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
- engines: {node: '>=8'}
-
- is-stream@3.0.0:
- resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- is-what@4.1.16:
- resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
- engines: {node: '>=12.13'}
-
- isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-
- jackspeak@2.3.6:
- resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
- engines: {node: '>=14'}
-
- jiti@1.21.0:
- resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
- hasBin: true
-
- js-tokens@4.0.0:
- resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
-
- js-yaml@4.1.0:
- resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
- hasBin: true
-
- jsesc@2.5.2:
- resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
- engines: {node: '>=4'}
- hasBin: true
-
- json-buffer@3.0.1:
- resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
-
- json-schema-traverse@0.4.1:
- resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
-
- json-stable-stringify-without-jsonify@1.0.1:
- resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
-
- json5@2.2.3:
- resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
- engines: {node: '>=6'}
- hasBin: true
-
- kebab-case@1.0.2:
- resolution: {integrity: sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==}
-
- keyv@4.5.4:
- resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
-
- known-css-properties@0.30.0:
- resolution: {integrity: sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==}
-
- levn@0.4.1:
- resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
- engines: {node: '>= 0.8.0'}
-
- lilconfig@2.1.0:
- resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
- engines: {node: '>=10'}
-
- lilconfig@3.0.0:
- resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==}
- engines: {node: '>=14'}
-
- lines-and-columns@1.2.4:
- resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
-
- lint-staged@15.2.2:
- resolution: {integrity: sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==}
- engines: {node: '>=18.12.0'}
- hasBin: true
-
- listr2@8.0.1:
- resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==}
- engines: {node: '>=18.0.0'}
-
- locate-path@6.0.0:
- resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
- engines: {node: '>=10'}
-
- lodash.merge@4.6.2:
- resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
-
- log-update@6.0.0:
- resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==}
- engines: {node: '>=18'}
-
- lru-cache@10.2.2:
- resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==}
- engines: {node: 14 || >=16.14}
-
- lru-cache@5.1.1:
- resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
-
- merge-anything@5.1.7:
- resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==}
- engines: {node: '>=12.13'}
-
- merge-stream@2.0.0:
- resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
-
- merge2@1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
-
- micromatch@4.0.5:
- resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
- engines: {node: '>=8.6'}
-
- mime-db@1.52.0:
- resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
- engines: {node: '>= 0.6'}
-
- mime-types@2.1.35:
- resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
- engines: {node: '>= 0.6'}
-
- mimic-fn@2.1.0:
- resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
- engines: {node: '>=6'}
-
- mimic-fn@4.0.0:
- resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
- engines: {node: '>=12'}
-
- minimatch@3.1.2:
- resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
-
- minimatch@9.0.4:
- resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- minipass@7.1.1:
- resolution: {integrity: sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- ms@2.1.2:
- resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
-
- mz@2.7.0:
- resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
-
- nanoid@3.3.7:
- resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
-
- natural-compare@1.4.0:
- resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
-
- node-releases@2.0.14:
- resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
-
- normalize-path@3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
-
- normalize-range@0.1.2:
- resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
- engines: {node: '>=0.10.0'}
-
- npm-run-path@5.3.0:
- resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- object-assign@4.1.1:
- resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
- engines: {node: '>=0.10.0'}
-
- object-hash@3.0.0:
- resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
- engines: {node: '>= 6'}
-
- once@1.4.0:
- resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
-
- onetime@5.1.2:
- resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
- engines: {node: '>=6'}
-
- onetime@6.0.0:
- resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
- engines: {node: '>=12'}
-
- optionator@0.9.4:
- resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
- engines: {node: '>= 0.8.0'}
-
- p-limit@3.1.0:
- resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
- engines: {node: '>=10'}
-
- p-locate@5.0.0:
- resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
- engines: {node: '>=10'}
-
- parent-module@1.0.1:
- resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
- engines: {node: '>=6'}
-
- path-exists@4.0.0:
- resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
- engines: {node: '>=8'}
-
- path-is-absolute@1.0.1:
- resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
- engines: {node: '>=0.10.0'}
-
- path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
-
- path-key@4.0.0:
- resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
- engines: {node: '>=12'}
-
- path-parse@1.0.7:
- resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
-
- path-scurry@1.11.1:
- resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
- engines: {node: '>=16 || 14 >=14.18'}
-
- path-type@4.0.0:
- resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
- engines: {node: '>=8'}
-
- picocolors@1.0.1:
- resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
-
- picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
- engines: {node: '>=8.6'}
-
- pidtree@0.6.0:
- resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
- engines: {node: '>=0.10'}
- hasBin: true
-
- pify@2.3.0:
- resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
- engines: {node: '>=0.10.0'}
-
- pirates@4.0.6:
- resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
- engines: {node: '>= 6'}
-
- postcss-import@15.1.0:
- resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- postcss: ^8.0.0
-
- postcss-js@4.0.1:
- resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
- engines: {node: ^12 || ^14 || >= 16}
- peerDependencies:
- postcss: ^8.4.21
-
- postcss-load-config@4.0.2:
- resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
- engines: {node: '>= 14'}
- peerDependencies:
- postcss: '>=8.0.9'
- ts-node: '>=9.0.0'
- peerDependenciesMeta:
- postcss:
- optional: true
- ts-node:
- optional: true
-
- postcss-nested@6.0.1:
- resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
- engines: {node: '>=12.0'}
- peerDependencies:
- postcss: ^8.2.14
-
- postcss-selector-parser@6.0.16:
- resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==}
- engines: {node: '>=4'}
-
- postcss-value-parser@4.2.0:
- resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
-
- postcss@8.4.38:
- resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
- engines: {node: ^10 || ^12 || >=14}
-
- prelude-ls@1.2.1:
- resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
- engines: {node: '>= 0.8.0'}
-
- prettier@3.2.5:
- resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==}
- engines: {node: '>=14'}
- hasBin: true
-
- property-expr@2.0.6:
- resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==}
-
- proxy-from-env@1.1.0:
- resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
-
- punycode@2.3.1:
- resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
- engines: {node: '>=6'}
-
- queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-
- read-cache@1.0.0:
- resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
-
- readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
-
- resolve-from@4.0.0:
- resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
- engines: {node: '>=4'}
-
- resolve@1.22.8:
- resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
- hasBin: true
-
- restore-cursor@4.0.0:
- resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- reusify@1.0.4:
- resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-
- rfdc@1.3.1:
- resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==}
-
- rimraf@3.0.2:
- resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
- hasBin: true
-
- rollup@4.17.2:
- resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
- hasBin: true
-
- run-parallel@1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
-
- sass@1.77.4:
- resolution: {integrity: sha512-vcF3Ckow6g939GMA4PeU7b2K/9FALXk2KF9J87txdHzXbUF9XRQRwSxcAs/fGaTnJeBFd7UoV22j3lzMLdM0Pw==}
- engines: {node: '>=14.0.0'}
- hasBin: true
-
- semver@6.3.1:
- resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
- hasBin: true
-
- semver@7.6.2:
- resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==}
- engines: {node: '>=10'}
- hasBin: true
-
- seroval-plugins@1.0.7:
- resolution: {integrity: sha512-GO7TkWvodGp6buMEX9p7tNyIkbwlyuAWbI6G9Ec5bhcm7mQdu3JOK1IXbEUwb3FVzSc363GraG/wLW23NSavIw==}
- engines: {node: '>=10'}
- peerDependencies:
- seroval: ^1.0
-
- seroval@1.0.7:
- resolution: {integrity: sha512-n6ZMQX5q0Vn19Zq7CIKNIo7E75gPkGCFUEqDpa8jgwpYr/vScjqnQ6H09t1uIiZ0ZSK0ypEGvrYK2bhBGWsGdw==}
- engines: {node: '>=10'}
-
- shebang-command@2.0.0:
- resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
- engines: {node: '>=8'}
-
- shebang-regex@3.0.0:
- resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
- engines: {node: '>=8'}
-
- signal-exit@3.0.7:
- resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
-
- signal-exit@4.1.0:
- resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
- engines: {node: '>=14'}
-
- slash@3.0.0:
- resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
- engines: {node: '>=8'}
-
- slice-ansi@5.0.0:
- resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
- engines: {node: '>=12'}
-
- slice-ansi@7.1.0:
- resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
- engines: {node: '>=18'}
-
- solid-form-handler@1.2.3:
- resolution: {integrity: sha512-OCQ358dgxXeUi4TkA7D/xrrhrsUeY0K/m1EGn5ZUPMuPyx+1Hp2PjtthsAyvsaoj9jyJppK3pAwY2eytseUlZw==}
- peerDependencies:
- solid-js: ^1
-
- solid-js@1.8.17:
- resolution: {integrity: sha512-E0FkUgv9sG/gEBWkHr/2XkBluHb1fkrHywUgA6o6XolPDCJ4g1HaLmQufcBBhiF36ee40q+HpG/vCZu7fLpI3Q==}
-
- solid-refresh@0.6.3:
- resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==}
- peerDependencies:
- solid-js: ^1.3
-
- solid-toast@0.5.0:
- resolution: {integrity: sha512-t770JakjyS2P9b8Qa1zMLOD51KYKWXbTAyJePVUoYex5c5FH5S/HtUBUbZAWFcqRCKmAE8KhyIiCvDZA8bOnxQ==}
- peerDependencies:
- solid-js: ^1.5.4
-
- source-map-js@1.2.0:
- resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
- engines: {node: '>=0.10.0'}
-
- string-argv@0.3.2:
- resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
- engines: {node: '>=0.6.19'}
-
- string-width@4.2.3:
- resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
- engines: {node: '>=8'}
-
- string-width@5.1.2:
- resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
- engines: {node: '>=12'}
-
- string-width@7.1.0:
- resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==}
- engines: {node: '>=18'}
-
- strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
-
- strip-ansi@7.1.0:
- resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
- engines: {node: '>=12'}
-
- strip-final-newline@3.0.0:
- resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
- engines: {node: '>=12'}
-
- strip-json-comments@3.1.1:
- resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
- engines: {node: '>=8'}
-
- style-to-object@1.0.6:
- resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==}
-
- sucrase@3.35.0:
- resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
- engines: {node: '>=16 || 14 >=14.17'}
- hasBin: true
-
- supports-color@5.5.0:
- resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
- engines: {node: '>=4'}
-
- supports-color@7.2.0:
- resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
- engines: {node: '>=8'}
-
- supports-preserve-symlinks-flag@1.0.0:
- resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
- engines: {node: '>= 0.4'}
-
- tailwindcss@3.4.3:
- resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==}
- engines: {node: '>=14.0.0'}
- hasBin: true
-
- text-table@0.2.0:
- resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
-
- thenify-all@1.6.0:
- resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
- engines: {node: '>=0.8'}
-
- thenify@3.3.1:
- resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
-
- tiny-case@1.0.3:
- resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==}
-
- to-fast-properties@2.0.0:
- resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
- engines: {node: '>=4'}
-
- to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
-
- toposort@2.0.2:
- resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==}
-
- ts-api-utils@1.3.0:
- resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
- engines: {node: '>=16'}
- peerDependencies:
- typescript: '>=4.2.0'
-
- ts-interface-checker@0.1.13:
- resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
-
- type-check@0.4.0:
- resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
- engines: {node: '>= 0.8.0'}
-
- type-fest@0.20.2:
- resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
- engines: {node: '>=10'}
-
- type-fest@2.19.0:
- resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
- engines: {node: '>=12.20'}
-
- typescript@5.4.5:
- resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==}
- engines: {node: '>=14.17'}
- hasBin: true
-
- universal-user-agent@6.0.1:
- resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==}
-
- update-browserslist-db@1.0.16:
- resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==}
- hasBin: true
- peerDependencies:
- browserslist: '>= 4.21.0'
-
- uri-js@4.4.1:
- resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
-
- util-deprecate@1.0.2:
- resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
-
- validate-html-nesting@1.2.2:
- resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==}
-
- vite-plugin-mkcert@1.17.5:
- resolution: {integrity: sha512-KKGY3iHx/9zb7ow8JJ+nLN2HiNIBuPBwj34fJ+jAJT89/8qfk7msO7G7qipR8VDEm9xMCys0xT11QOJbZcg3/Q==}
- engines: {node: '>=v16.7.0'}
- peerDependencies:
- vite: '>=3'
-
- vite-plugin-solid@2.10.2:
- resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==}
- peerDependencies:
- '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.*
- solid-js: ^1.7.2
- vite: ^3.0.0 || ^4.0.0 || ^5.0.0
- peerDependenciesMeta:
- '@testing-library/jest-dom':
- optional: true
-
- vite@5.2.11:
- resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==}
- engines: {node: ^18.0.0 || >=20.0.0}
- hasBin: true
- peerDependencies:
- '@types/node': ^18.0.0 || >=20.0.0
- 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
-
- vitefu@0.2.5:
- resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
- peerDependencies:
- vite: ^3.0.0 || ^4.0.0 || ^5.0.0
- peerDependenciesMeta:
- vite:
- optional: true
-
- which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
- hasBin: true
-
- word-wrap@1.2.5:
- resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
- engines: {node: '>=0.10.0'}
-
- wrap-ansi@7.0.0:
- resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
- engines: {node: '>=10'}
-
- wrap-ansi@8.1.0:
- resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
- engines: {node: '>=12'}
-
- wrap-ansi@9.0.0:
- resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
- engines: {node: '>=18'}
-
- wrappy@1.0.2:
- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
-
- yallist@3.1.1:
- resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
-
- yaml@2.3.4:
- resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
- engines: {node: '>= 14'}
-
- yocto-queue@0.1.0:
- resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
- engines: {node: '>=10'}
-
- yup@1.4.0:
- resolution: {integrity: sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==}
-
-snapshots:
-
- '@alloc/quick-lru@5.2.0': {}
-
- '@ampproject/remapping@2.3.0':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.5
- '@jridgewell/trace-mapping': 0.3.25
-
- '@babel/code-frame@7.24.2':
- dependencies:
- '@babel/highlight': 7.24.5
- picocolors: 1.0.1
-
- '@babel/compat-data@7.24.4': {}
-
- '@babel/core@7.24.5':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@babel/code-frame': 7.24.2
- '@babel/generator': 7.24.5
- '@babel/helper-compilation-targets': 7.23.6
- '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5)
- '@babel/helpers': 7.24.5
- '@babel/parser': 7.24.5
- '@babel/template': 7.24.0
- '@babel/traverse': 7.24.5
- '@babel/types': 7.24.5
- convert-source-map: 2.0.0
- debug: 4.3.4
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/generator@7.24.5':
- dependencies:
- '@babel/types': 7.24.5
- '@jridgewell/gen-mapping': 0.3.5
- '@jridgewell/trace-mapping': 0.3.25
- jsesc: 2.5.2
-
- '@babel/helper-compilation-targets@7.23.6':
- dependencies:
- '@babel/compat-data': 7.24.4
- '@babel/helper-validator-option': 7.23.5
- browserslist: 4.23.0
- lru-cache: 5.1.1
- semver: 6.3.1
-
- '@babel/helper-environment-visitor@7.22.20': {}
-
- '@babel/helper-function-name@7.23.0':
- dependencies:
- '@babel/template': 7.24.0
- '@babel/types': 7.24.5
-
- '@babel/helper-hoist-variables@7.22.5':
- dependencies:
- '@babel/types': 7.24.5
-
- '@babel/helper-module-imports@7.18.6':
- dependencies:
- '@babel/types': 7.24.5
-
- '@babel/helper-module-imports@7.24.3':
- dependencies:
- '@babel/types': 7.24.5
-
- '@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5)':
- dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-module-imports': 7.24.3
- '@babel/helper-simple-access': 7.24.5
- '@babel/helper-split-export-declaration': 7.24.5
- '@babel/helper-validator-identifier': 7.24.5
-
- '@babel/helper-plugin-utils@7.24.5': {}
-
- '@babel/helper-simple-access@7.24.5':
- dependencies:
- '@babel/types': 7.24.5
-
- '@babel/helper-split-export-declaration@7.24.5':
- dependencies:
- '@babel/types': 7.24.5
-
- '@babel/helper-string-parser@7.24.1': {}
-
- '@babel/helper-validator-identifier@7.24.5': {}
-
- '@babel/helper-validator-option@7.23.5': {}
-
- '@babel/helpers@7.24.5':
- dependencies:
- '@babel/template': 7.24.0
- '@babel/traverse': 7.24.5
- '@babel/types': 7.24.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/highlight@7.24.5':
- dependencies:
- '@babel/helper-validator-identifier': 7.24.5
- chalk: 2.4.2
- js-tokens: 4.0.0
- picocolors: 1.0.1
-
- '@babel/parser@7.24.5':
- dependencies:
- '@babel/types': 7.24.5
-
- '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.5)':
- dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-plugin-utils': 7.24.5
-
- '@babel/template@7.24.0':
- dependencies:
- '@babel/code-frame': 7.24.2
- '@babel/parser': 7.24.5
- '@babel/types': 7.24.5
-
- '@babel/traverse@7.24.5':
- dependencies:
- '@babel/code-frame': 7.24.2
- '@babel/generator': 7.24.5
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-function-name': 7.23.0
- '@babel/helper-hoist-variables': 7.22.5
- '@babel/helper-split-export-declaration': 7.24.5
- '@babel/parser': 7.24.5
- '@babel/types': 7.24.5
- debug: 4.3.4
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/types@7.24.5':
- dependencies:
- '@babel/helper-string-parser': 7.24.1
- '@babel/helper-validator-identifier': 7.24.5
- to-fast-properties: 2.0.0
-
- '@esbuild/aix-ppc64@0.20.2':
- optional: true
-
- '@esbuild/android-arm64@0.20.2':
- optional: true
-
- '@esbuild/android-arm@0.20.2':
- optional: true
-
- '@esbuild/android-x64@0.20.2':
- optional: true
-
- '@esbuild/darwin-arm64@0.20.2':
- optional: true
-
- '@esbuild/darwin-x64@0.20.2':
- optional: true
-
- '@esbuild/freebsd-arm64@0.20.2':
- optional: true
-
- '@esbuild/freebsd-x64@0.20.2':
- optional: true
-
- '@esbuild/linux-arm64@0.20.2':
- optional: true
-
- '@esbuild/linux-arm@0.20.2':
- optional: true
-
- '@esbuild/linux-ia32@0.20.2':
- optional: true
-
- '@esbuild/linux-loong64@0.20.2':
- optional: true
-
- '@esbuild/linux-mips64el@0.20.2':
- optional: true
-
- '@esbuild/linux-ppc64@0.20.2':
- optional: true
-
- '@esbuild/linux-riscv64@0.20.2':
- optional: true
-
- '@esbuild/linux-s390x@0.20.2':
- optional: true
-
- '@esbuild/linux-x64@0.20.2':
- optional: true
-
- '@esbuild/netbsd-x64@0.20.2':
- optional: true
-
- '@esbuild/openbsd-x64@0.20.2':
- optional: true
-
- '@esbuild/sunos-x64@0.20.2':
- optional: true
-
- '@esbuild/win32-arm64@0.20.2':
- optional: true
-
- '@esbuild/win32-ia32@0.20.2':
- optional: true
-
- '@esbuild/win32-x64@0.20.2':
- optional: true
-
- '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)':
- dependencies:
- eslint: 8.57.0
- eslint-visitor-keys: 3.4.3
-
- '@eslint-community/regexpp@4.10.0': {}
-
- '@eslint/eslintrc@2.1.4':
- dependencies:
- ajv: 6.12.6
- debug: 4.3.4
- espree: 9.6.1
- globals: 13.24.0
- ignore: 5.3.1
- import-fresh: 3.3.0
- js-yaml: 4.1.0
- minimatch: 3.1.2
- strip-json-comments: 3.1.1
- transitivePeerDependencies:
- - supports-color
-
- '@eslint/js@8.57.0': {}
-
- '@humanwhocodes/config-array@0.11.14':
- dependencies:
- '@humanwhocodes/object-schema': 2.0.3
- debug: 4.3.4
- minimatch: 3.1.2
- transitivePeerDependencies:
- - supports-color
-
- '@humanwhocodes/module-importer@1.0.1': {}
-
- '@humanwhocodes/object-schema@2.0.3': {}
-
- '@isaacs/cliui@8.0.2':
- dependencies:
- string-width: 5.1.2
- string-width-cjs: string-width@4.2.3
- strip-ansi: 7.1.0
- strip-ansi-cjs: strip-ansi@6.0.1
- wrap-ansi: 8.1.0
- wrap-ansi-cjs: wrap-ansi@7.0.0
-
- '@jridgewell/gen-mapping@0.3.5':
- dependencies:
- '@jridgewell/set-array': 1.2.1
- '@jridgewell/sourcemap-codec': 1.4.15
- '@jridgewell/trace-mapping': 0.3.25
-
- '@jridgewell/resolve-uri@3.1.2': {}
-
- '@jridgewell/set-array@1.2.1': {}
-
- '@jridgewell/sourcemap-codec@1.4.15': {}
-
- '@jridgewell/trace-mapping@0.3.25':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.4.15
-
- '@nodelib/fs.scandir@2.1.5':
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
-
- '@nodelib/fs.stat@2.0.5': {}
-
- '@nodelib/fs.walk@1.2.8':
- dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.17.1
-
- '@octokit/auth-token@4.0.0': {}
-
- '@octokit/core@5.2.0':
- dependencies:
- '@octokit/auth-token': 4.0.0
- '@octokit/graphql': 7.1.0
- '@octokit/request': 8.4.0
- '@octokit/request-error': 5.1.0
- '@octokit/types': 13.5.0
- before-after-hook: 2.2.3
- universal-user-agent: 6.0.1
-
- '@octokit/endpoint@9.0.5':
- dependencies:
- '@octokit/types': 13.5.0
- universal-user-agent: 6.0.1
-
- '@octokit/graphql@7.1.0':
- dependencies:
- '@octokit/request': 8.4.0
- '@octokit/types': 13.5.0
- universal-user-agent: 6.0.1
-
- '@octokit/openapi-types@22.2.0': {}
-
- '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@5.2.0)':
- dependencies:
- '@octokit/core': 5.2.0
- '@octokit/types': 13.5.0
-
- '@octokit/plugin-request-log@4.0.1(@octokit/core@5.2.0)':
- dependencies:
- '@octokit/core': 5.2.0
-
- '@octokit/plugin-rest-endpoint-methods@13.2.2(@octokit/core@5.2.0)':
- dependencies:
- '@octokit/core': 5.2.0
- '@octokit/types': 13.5.0
-
- '@octokit/request-error@5.1.0':
- dependencies:
- '@octokit/types': 13.5.0
- deprecation: 2.3.1
- once: 1.4.0
-
- '@octokit/request@8.4.0':
- dependencies:
- '@octokit/endpoint': 9.0.5
- '@octokit/request-error': 5.1.0
- '@octokit/types': 13.5.0
- universal-user-agent: 6.0.1
-
- '@octokit/rest@20.1.1':
- dependencies:
- '@octokit/core': 5.2.0
- '@octokit/plugin-paginate-rest': 11.3.1(@octokit/core@5.2.0)
- '@octokit/plugin-request-log': 4.0.1(@octokit/core@5.2.0)
- '@octokit/plugin-rest-endpoint-methods': 13.2.2(@octokit/core@5.2.0)
-
- '@octokit/types@13.5.0':
- dependencies:
- '@octokit/openapi-types': 22.2.0
-
- '@pkgjs/parseargs@0.11.0':
- optional: true
-
- '@rollup/rollup-android-arm-eabi@4.17.2':
- optional: true
-
- '@rollup/rollup-android-arm64@4.17.2':
- optional: true
-
- '@rollup/rollup-darwin-arm64@4.17.2':
- optional: true
-
- '@rollup/rollup-darwin-x64@4.17.2':
- optional: true
-
- '@rollup/rollup-linux-arm-gnueabihf@4.17.2':
- optional: true
-
- '@rollup/rollup-linux-arm-musleabihf@4.17.2':
- optional: true
-
- '@rollup/rollup-linux-arm64-gnu@4.17.2':
- optional: true
-
- '@rollup/rollup-linux-arm64-musl@4.17.2':
- optional: true
-
- '@rollup/rollup-linux-powerpc64le-gnu@4.17.2':
- optional: true
-
- '@rollup/rollup-linux-riscv64-gnu@4.17.2':
- optional: true
-
- '@rollup/rollup-linux-s390x-gnu@4.17.2':
- optional: true
-
- '@rollup/rollup-linux-x64-gnu@4.17.2':
- optional: true
-
- '@rollup/rollup-linux-x64-musl@4.17.2':
- optional: true
-
- '@rollup/rollup-win32-arm64-msvc@4.17.2':
- optional: true
-
- '@rollup/rollup-win32-ia32-msvc@4.17.2':
- optional: true
-
- '@rollup/rollup-win32-x64-msvc@4.17.2':
- optional: true
-
- '@solidjs/meta@0.29.4(solid-js@1.8.17)':
- dependencies:
- solid-js: 1.8.17
-
- '@solidjs/router@0.13.3(solid-js@1.8.17)':
- dependencies:
- solid-js: 1.8.17
-
- '@stitches/core@1.2.8': {}
-
- '@tabler/icons-solidjs@3.4.0(solid-js@1.8.17)':
- dependencies:
- '@tabler/icons': 3.4.0
- solid-js: 1.8.17
-
- '@tabler/icons@3.4.0': {}
-
- '@types/babel__core@7.20.5':
- dependencies:
- '@babel/parser': 7.24.5
- '@babel/types': 7.24.5
- '@types/babel__generator': 7.6.8
- '@types/babel__template': 7.4.4
- '@types/babel__traverse': 7.20.5
-
- '@types/babel__generator@7.6.8':
- dependencies:
- '@babel/types': 7.24.5
-
- '@types/babel__template@7.4.4':
- dependencies:
- '@babel/parser': 7.24.5
- '@babel/types': 7.24.5
-
- '@types/babel__traverse@7.20.5':
- dependencies:
- '@babel/types': 7.24.5
-
- '@types/estree@1.0.5': {}
-
- '@typescript-eslint/scope-manager@7.9.0':
- dependencies:
- '@typescript-eslint/types': 7.9.0
- '@typescript-eslint/visitor-keys': 7.9.0
-
- '@typescript-eslint/types@7.9.0': {}
-
- '@typescript-eslint/typescript-estree@7.9.0(typescript@5.4.5)':
- dependencies:
- '@typescript-eslint/types': 7.9.0
- '@typescript-eslint/visitor-keys': 7.9.0
- debug: 4.3.4
- globby: 11.1.0
- is-glob: 4.0.3
- minimatch: 9.0.4
- semver: 7.6.2
- ts-api-utils: 1.3.0(typescript@5.4.5)
- optionalDependencies:
- typescript: 5.4.5
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/utils@7.9.0(eslint@8.57.0)(typescript@5.4.5)':
- dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
- '@typescript-eslint/scope-manager': 7.9.0
- '@typescript-eslint/types': 7.9.0
- '@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5)
- eslint: 8.57.0
- transitivePeerDependencies:
- - supports-color
- - typescript
-
- '@typescript-eslint/visitor-keys@7.9.0':
- dependencies:
- '@typescript-eslint/types': 7.9.0
- eslint-visitor-keys: 3.4.3
-
- '@ungap/structured-clone@1.2.0': {}
-
- acorn-jsx@5.3.2(acorn@8.11.3):
- dependencies:
- acorn: 8.11.3
-
- acorn@8.11.3: {}
-
- ajv@6.12.6:
- dependencies:
- fast-deep-equal: 3.1.3
- fast-json-stable-stringify: 2.1.0
- json-schema-traverse: 0.4.1
- uri-js: 4.4.1
-
- ansi-escapes@6.2.1: {}
-
- ansi-regex@5.0.1: {}
-
- ansi-regex@6.0.1: {}
-
- ansi-styles@3.2.1:
- dependencies:
- color-convert: 1.9.3
-
- ansi-styles@4.3.0:
- dependencies:
- color-convert: 2.0.1
-
- ansi-styles@6.2.1: {}
-
- any-promise@1.3.0: {}
-
- anymatch@3.1.3:
- dependencies:
- normalize-path: 3.0.0
- picomatch: 2.3.1
-
- arg@5.0.2: {}
-
- argparse@2.0.1: {}
-
- array-union@2.1.0: {}
-
- asynckit@0.4.0: {}
-
- autoprefixer@10.4.19(postcss@8.4.38):
- dependencies:
- browserslist: 4.23.0
- caniuse-lite: 1.0.30001620
- fraction.js: 4.3.7
- normalize-range: 0.1.2
- picocolors: 1.0.1
- postcss: 8.4.38
- postcss-value-parser: 4.2.0
-
- axios@1.6.8(debug@4.3.4):
- dependencies:
- follow-redirects: 1.15.6(debug@4.3.4)
- form-data: 4.0.0
- proxy-from-env: 1.1.0
- transitivePeerDependencies:
- - debug
-
- babel-plugin-jsx-dom-expressions@0.37.20(@babel/core@7.24.5):
- dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-module-imports': 7.18.6
- '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5)
- '@babel/types': 7.24.5
- html-entities: 2.3.3
- validate-html-nesting: 1.2.2
-
- babel-preset-solid@1.8.17(@babel/core@7.24.5):
- dependencies:
- '@babel/core': 7.24.5
- babel-plugin-jsx-dom-expressions: 0.37.20(@babel/core@7.24.5)
-
- balanced-match@1.0.2: {}
-
- before-after-hook@2.2.3: {}
-
- binary-extensions@2.3.0: {}
-
- brace-expansion@1.1.11:
- dependencies:
- balanced-match: 1.0.2
- concat-map: 0.0.1
-
- brace-expansion@2.0.1:
- dependencies:
- balanced-match: 1.0.2
-
- braces@3.0.2:
- dependencies:
- fill-range: 7.0.1
-
- browserslist@4.23.0:
- dependencies:
- caniuse-lite: 1.0.30001620
- electron-to-chromium: 1.4.773
- node-releases: 2.0.14
- update-browserslist-db: 1.0.16(browserslist@4.23.0)
-
- callsites@3.1.0: {}
-
- camelcase-css@2.0.1: {}
-
- caniuse-lite@1.0.30001620: {}
-
- chalk@2.4.2:
- dependencies:
- ansi-styles: 3.2.1
- escape-string-regexp: 1.0.5
- supports-color: 5.5.0
-
- chalk@4.1.2:
- dependencies:
- ansi-styles: 4.3.0
- supports-color: 7.2.0
-
- chalk@5.3.0: {}
-
- chokidar@3.6.0:
- dependencies:
- anymatch: 3.1.3
- braces: 3.0.2
- glob-parent: 5.1.2
- is-binary-path: 2.1.0
- is-glob: 4.0.3
- normalize-path: 3.0.0
- readdirp: 3.6.0
- optionalDependencies:
- fsevents: 2.3.3
-
- cli-cursor@4.0.0:
- dependencies:
- restore-cursor: 4.0.0
-
- cli-truncate@4.0.0:
- dependencies:
- slice-ansi: 5.0.0
- string-width: 7.1.0
-
- color-convert@1.9.3:
- dependencies:
- color-name: 1.1.3
-
- color-convert@2.0.1:
- dependencies:
- color-name: 1.1.4
-
- color-name@1.1.3: {}
-
- color-name@1.1.4: {}
-
- colorette@2.0.20: {}
-
- combined-stream@1.0.8:
- dependencies:
- delayed-stream: 1.0.0
-
- commander@11.1.0: {}
-
- commander@4.1.1: {}
-
- concat-map@0.0.1: {}
-
- convert-source-map@2.0.0: {}
-
- cross-spawn@7.0.3:
- dependencies:
- path-key: 3.1.1
- shebang-command: 2.0.0
- which: 2.0.2
-
- crypto-js@4.2.0: {}
-
- css-selector-tokenizer@0.8.0:
- dependencies:
- cssesc: 3.0.0
- fastparse: 1.1.2
-
- cssesc@3.0.0: {}
-
- csstype@3.1.3: {}
-
- culori@3.3.0: {}
-
- daisyui@4.11.1(postcss@8.4.38):
- dependencies:
- css-selector-tokenizer: 0.8.0
- culori: 3.3.0
- picocolors: 1.0.1
- postcss-js: 4.0.1(postcss@8.4.38)
- transitivePeerDependencies:
- - postcss
-
- debug@4.3.4:
- dependencies:
- ms: 2.1.2
-
- deep-is@0.1.4: {}
-
- delayed-stream@1.0.0: {}
-
- deprecation@2.3.1: {}
-
- didyoumean@1.2.2: {}
-
- dir-glob@3.0.1:
- dependencies:
- path-type: 4.0.0
-
- dlv@1.1.3: {}
-
- doctrine@3.0.0:
- dependencies:
- esutils: 2.0.3
-
- eastasianwidth@0.2.0: {}
-
- electron-to-chromium@1.4.773: {}
-
- emoji-regex@10.3.0: {}
-
- emoji-regex@8.0.0: {}
-
- emoji-regex@9.2.2: {}
-
- esbuild@0.20.2:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.20.2
- '@esbuild/android-arm': 0.20.2
- '@esbuild/android-arm64': 0.20.2
- '@esbuild/android-x64': 0.20.2
- '@esbuild/darwin-arm64': 0.20.2
- '@esbuild/darwin-x64': 0.20.2
- '@esbuild/freebsd-arm64': 0.20.2
- '@esbuild/freebsd-x64': 0.20.2
- '@esbuild/linux-arm': 0.20.2
- '@esbuild/linux-arm64': 0.20.2
- '@esbuild/linux-ia32': 0.20.2
- '@esbuild/linux-loong64': 0.20.2
- '@esbuild/linux-mips64el': 0.20.2
- '@esbuild/linux-ppc64': 0.20.2
- '@esbuild/linux-riscv64': 0.20.2
- '@esbuild/linux-s390x': 0.20.2
- '@esbuild/linux-x64': 0.20.2
- '@esbuild/netbsd-x64': 0.20.2
- '@esbuild/openbsd-x64': 0.20.2
- '@esbuild/sunos-x64': 0.20.2
- '@esbuild/win32-arm64': 0.20.2
- '@esbuild/win32-ia32': 0.20.2
- '@esbuild/win32-x64': 0.20.2
-
- escalade@3.1.2: {}
-
- escape-string-regexp@1.0.5: {}
-
- escape-string-regexp@4.0.0: {}
-
- eslint-plugin-solid@0.14.0(eslint@8.57.0)(typescript@5.4.5):
- dependencies:
- '@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
- eslint: 8.57.0
- estraverse: 5.3.0
- is-html: 2.0.0
- kebab-case: 1.0.2
- known-css-properties: 0.30.0
- style-to-object: 1.0.6
- transitivePeerDependencies:
- - supports-color
- - typescript
-
- eslint-scope@7.2.2:
- dependencies:
- esrecurse: 4.3.0
- estraverse: 5.3.0
-
- eslint-visitor-keys@3.4.3: {}
-
- eslint@8.57.0:
- dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
- '@eslint-community/regexpp': 4.10.0
- '@eslint/eslintrc': 2.1.4
- '@eslint/js': 8.57.0
- '@humanwhocodes/config-array': 0.11.14
- '@humanwhocodes/module-importer': 1.0.1
- '@nodelib/fs.walk': 1.2.8
- '@ungap/structured-clone': 1.2.0
- ajv: 6.12.6
- chalk: 4.1.2
- cross-spawn: 7.0.3
- debug: 4.3.4
- doctrine: 3.0.0
- escape-string-regexp: 4.0.0
- eslint-scope: 7.2.2
- eslint-visitor-keys: 3.4.3
- espree: 9.6.1
- esquery: 1.5.0
- esutils: 2.0.3
- fast-deep-equal: 3.1.3
- file-entry-cache: 6.0.1
- find-up: 5.0.0
- glob-parent: 6.0.2
- globals: 13.24.0
- graphemer: 1.4.0
- ignore: 5.3.1
- imurmurhash: 0.1.4
- is-glob: 4.0.3
- is-path-inside: 3.0.3
- js-yaml: 4.1.0
- json-stable-stringify-without-jsonify: 1.0.1
- levn: 0.4.1
- lodash.merge: 4.6.2
- minimatch: 3.1.2
- natural-compare: 1.4.0
- optionator: 0.9.4
- strip-ansi: 6.0.1
- text-table: 0.2.0
- transitivePeerDependencies:
- - supports-color
-
- espree@9.6.1:
- dependencies:
- acorn: 8.11.3
- acorn-jsx: 5.3.2(acorn@8.11.3)
- eslint-visitor-keys: 3.4.3
-
- esquery@1.5.0:
- dependencies:
- estraverse: 5.3.0
-
- esrecurse@4.3.0:
- dependencies:
- estraverse: 5.3.0
-
- estraverse@5.3.0: {}
-
- esutils@2.0.3: {}
-
- eventemitter3@5.0.1: {}
-
- execa@8.0.1:
- dependencies:
- cross-spawn: 7.0.3
- get-stream: 8.0.1
- human-signals: 5.0.0
- is-stream: 3.0.0
- merge-stream: 2.0.0
- npm-run-path: 5.3.0
- onetime: 6.0.0
- signal-exit: 4.1.0
- strip-final-newline: 3.0.0
-
- fast-deep-equal@3.1.3: {}
-
- fast-glob@3.3.2:
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- '@nodelib/fs.walk': 1.2.8
- glob-parent: 5.1.2
- merge2: 1.4.1
- micromatch: 4.0.5
-
- fast-json-stable-stringify@2.1.0: {}
-
- fast-levenshtein@2.0.6: {}
-
- fastparse@1.1.2: {}
-
- fastq@1.17.1:
- dependencies:
- reusify: 1.0.4
-
- file-entry-cache@6.0.1:
- dependencies:
- flat-cache: 3.2.0
-
- fill-range@7.0.1:
- dependencies:
- to-regex-range: 5.0.1
-
- find-up@5.0.0:
- dependencies:
- locate-path: 6.0.0
- path-exists: 4.0.0
-
- flat-cache@3.2.0:
- dependencies:
- flatted: 3.3.1
- keyv: 4.5.4
- rimraf: 3.0.2
-
- flatted@3.3.1: {}
-
- follow-redirects@1.15.6(debug@4.3.4):
- optionalDependencies:
- debug: 4.3.4
-
- foreground-child@3.1.1:
- dependencies:
- cross-spawn: 7.0.3
- signal-exit: 4.1.0
-
- form-data@4.0.0:
- dependencies:
- asynckit: 0.4.0
- combined-stream: 1.0.8
- mime-types: 2.1.35
-
- fraction.js@4.3.7: {}
-
- fs.realpath@1.0.0: {}
-
- fsevents@2.3.3:
- optional: true
-
- function-bind@1.1.2: {}
-
- gensync@1.0.0-beta.2: {}
-
- get-east-asian-width@1.2.0: {}
-
- get-stream@8.0.1: {}
-
- glob-parent@5.1.2:
- dependencies:
- is-glob: 4.0.3
-
- glob-parent@6.0.2:
- dependencies:
- is-glob: 4.0.3
-
- glob@10.3.15:
- dependencies:
- foreground-child: 3.1.1
- jackspeak: 2.3.6
- minimatch: 9.0.4
- minipass: 7.1.1
- path-scurry: 1.11.1
-
- glob@7.2.3:
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 3.1.2
- once: 1.4.0
- path-is-absolute: 1.0.1
-
- globals@11.12.0: {}
-
- globals@13.24.0:
- dependencies:
- type-fest: 0.20.2
-
- globby@11.1.0:
- dependencies:
- array-union: 2.1.0
- dir-glob: 3.0.1
- fast-glob: 3.3.2
- ignore: 5.3.1
- merge2: 1.4.1
- slash: 3.0.0
-
- graphemer@1.4.0: {}
-
- has-flag@3.0.0: {}
-
- has-flag@4.0.0: {}
-
- hasown@2.0.2:
- dependencies:
- function-bind: 1.1.2
-
- html-entities@2.3.3: {}
-
- html-tags@3.3.1: {}
-
- human-signals@5.0.0: {}
-
- ignore@5.3.1: {}
-
- immutable@4.3.6: {}
-
- import-fresh@3.3.0:
- dependencies:
- parent-module: 1.0.1
- resolve-from: 4.0.0
-
- imurmurhash@0.1.4: {}
-
- inflight@1.0.6:
- dependencies:
- once: 1.4.0
- wrappy: 1.0.2
-
- inherits@2.0.4: {}
-
- inline-style-parser@0.2.3: {}
-
- is-binary-path@2.1.0:
- dependencies:
- binary-extensions: 2.3.0
-
- is-core-module@2.13.1:
- dependencies:
- hasown: 2.0.2
-
- is-extglob@2.1.1: {}
-
- is-fullwidth-code-point@3.0.0: {}
-
- is-fullwidth-code-point@4.0.0: {}
-
- is-fullwidth-code-point@5.0.0:
- dependencies:
- get-east-asian-width: 1.2.0
-
- is-glob@4.0.3:
- dependencies:
- is-extglob: 2.1.1
-
- is-html@2.0.0:
- dependencies:
- html-tags: 3.3.1
-
- is-number@7.0.0: {}
-
- is-path-inside@3.0.3: {}
-
- is-stream@3.0.0: {}
-
- is-what@4.1.16: {}
-
- isexe@2.0.0: {}
-
- jackspeak@2.3.6:
- dependencies:
- '@isaacs/cliui': 8.0.2
- optionalDependencies:
- '@pkgjs/parseargs': 0.11.0
-
- jiti@1.21.0: {}
-
- js-tokens@4.0.0: {}
-
- js-yaml@4.1.0:
- dependencies:
- argparse: 2.0.1
-
- jsesc@2.5.2: {}
-
- json-buffer@3.0.1: {}
-
- json-schema-traverse@0.4.1: {}
-
- json-stable-stringify-without-jsonify@1.0.1: {}
-
- json5@2.2.3: {}
-
- kebab-case@1.0.2: {}
-
- keyv@4.5.4:
- dependencies:
- json-buffer: 3.0.1
-
- known-css-properties@0.30.0: {}
-
- levn@0.4.1:
- dependencies:
- prelude-ls: 1.2.1
- type-check: 0.4.0
-
- lilconfig@2.1.0: {}
-
- lilconfig@3.0.0: {}
-
- lines-and-columns@1.2.4: {}
-
- lint-staged@15.2.2:
- dependencies:
- chalk: 5.3.0
- commander: 11.1.0
- debug: 4.3.4
- execa: 8.0.1
- lilconfig: 3.0.0
- listr2: 8.0.1
- micromatch: 4.0.5
- pidtree: 0.6.0
- string-argv: 0.3.2
- yaml: 2.3.4
- transitivePeerDependencies:
- - supports-color
-
- listr2@8.0.1:
- dependencies:
- cli-truncate: 4.0.0
- colorette: 2.0.20
- eventemitter3: 5.0.1
- log-update: 6.0.0
- rfdc: 1.3.1
- wrap-ansi: 9.0.0
-
- locate-path@6.0.0:
- dependencies:
- p-locate: 5.0.0
-
- lodash.merge@4.6.2: {}
-
- log-update@6.0.0:
- dependencies:
- ansi-escapes: 6.2.1
- cli-cursor: 4.0.0
- slice-ansi: 7.1.0
- strip-ansi: 7.1.0
- wrap-ansi: 9.0.0
-
- lru-cache@10.2.2: {}
-
- lru-cache@5.1.1:
- dependencies:
- yallist: 3.1.1
-
- merge-anything@5.1.7:
- dependencies:
- is-what: 4.1.16
-
- merge-stream@2.0.0: {}
-
- merge2@1.4.1: {}
-
- micromatch@4.0.5:
- dependencies:
- braces: 3.0.2
- picomatch: 2.3.1
-
- mime-db@1.52.0: {}
-
- mime-types@2.1.35:
- dependencies:
- mime-db: 1.52.0
-
- mimic-fn@2.1.0: {}
-
- mimic-fn@4.0.0: {}
-
- minimatch@3.1.2:
- dependencies:
- brace-expansion: 1.1.11
-
- minimatch@9.0.4:
- dependencies:
- brace-expansion: 2.0.1
-
- minipass@7.1.1: {}
-
- ms@2.1.2: {}
-
- mz@2.7.0:
- dependencies:
- any-promise: 1.3.0
- object-assign: 4.1.1
- thenify-all: 1.6.0
-
- nanoid@3.3.7: {}
-
- natural-compare@1.4.0: {}
-
- node-releases@2.0.14: {}
-
- normalize-path@3.0.0: {}
-
- normalize-range@0.1.2: {}
-
- npm-run-path@5.3.0:
- dependencies:
- path-key: 4.0.0
-
- object-assign@4.1.1: {}
-
- object-hash@3.0.0: {}
-
- once@1.4.0:
- dependencies:
- wrappy: 1.0.2
-
- onetime@5.1.2:
- dependencies:
- mimic-fn: 2.1.0
-
- onetime@6.0.0:
- dependencies:
- mimic-fn: 4.0.0
-
- optionator@0.9.4:
- dependencies:
- deep-is: 0.1.4
- fast-levenshtein: 2.0.6
- levn: 0.4.1
- prelude-ls: 1.2.1
- type-check: 0.4.0
- word-wrap: 1.2.5
-
- p-limit@3.1.0:
- dependencies:
- yocto-queue: 0.1.0
-
- p-locate@5.0.0:
- dependencies:
- p-limit: 3.1.0
-
- parent-module@1.0.1:
- dependencies:
- callsites: 3.1.0
-
- path-exists@4.0.0: {}
-
- path-is-absolute@1.0.1: {}
-
- path-key@3.1.1: {}
-
- path-key@4.0.0: {}
-
- path-parse@1.0.7: {}
-
- path-scurry@1.11.1:
- dependencies:
- lru-cache: 10.2.2
- minipass: 7.1.1
-
- path-type@4.0.0: {}
-
- picocolors@1.0.1: {}
-
- picomatch@2.3.1: {}
-
- pidtree@0.6.0: {}
-
- pify@2.3.0: {}
-
- pirates@4.0.6: {}
-
- postcss-import@15.1.0(postcss@8.4.38):
- dependencies:
- postcss: 8.4.38
- postcss-value-parser: 4.2.0
- read-cache: 1.0.0
- resolve: 1.22.8
-
- postcss-js@4.0.1(postcss@8.4.38):
- dependencies:
- camelcase-css: 2.0.1
- postcss: 8.4.38
-
- postcss-load-config@4.0.2(postcss@8.4.38):
- dependencies:
- lilconfig: 3.0.0
- yaml: 2.3.4
- optionalDependencies:
- postcss: 8.4.38
-
- postcss-nested@6.0.1(postcss@8.4.38):
- dependencies:
- postcss: 8.4.38
- postcss-selector-parser: 6.0.16
-
- postcss-selector-parser@6.0.16:
- dependencies:
- cssesc: 3.0.0
- util-deprecate: 1.0.2
-
- postcss-value-parser@4.2.0: {}
-
- postcss@8.4.38:
- dependencies:
- nanoid: 3.3.7
- picocolors: 1.0.1
- source-map-js: 1.2.0
-
- prelude-ls@1.2.1: {}
-
- prettier@3.2.5: {}
-
- property-expr@2.0.6: {}
-
- proxy-from-env@1.1.0: {}
-
- punycode@2.3.1: {}
-
- queue-microtask@1.2.3: {}
-
- read-cache@1.0.0:
- dependencies:
- pify: 2.3.0
-
- readdirp@3.6.0:
- dependencies:
- picomatch: 2.3.1
-
- resolve-from@4.0.0: {}
-
- resolve@1.22.8:
- dependencies:
- is-core-module: 2.13.1
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
-
- restore-cursor@4.0.0:
- dependencies:
- onetime: 5.1.2
- signal-exit: 3.0.7
-
- reusify@1.0.4: {}
-
- rfdc@1.3.1: {}
-
- rimraf@3.0.2:
- dependencies:
- glob: 7.2.3
-
- rollup@4.17.2:
- dependencies:
- '@types/estree': 1.0.5
- optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.17.2
- '@rollup/rollup-android-arm64': 4.17.2
- '@rollup/rollup-darwin-arm64': 4.17.2
- '@rollup/rollup-darwin-x64': 4.17.2
- '@rollup/rollup-linux-arm-gnueabihf': 4.17.2
- '@rollup/rollup-linux-arm-musleabihf': 4.17.2
- '@rollup/rollup-linux-arm64-gnu': 4.17.2
- '@rollup/rollup-linux-arm64-musl': 4.17.2
- '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2
- '@rollup/rollup-linux-riscv64-gnu': 4.17.2
- '@rollup/rollup-linux-s390x-gnu': 4.17.2
- '@rollup/rollup-linux-x64-gnu': 4.17.2
- '@rollup/rollup-linux-x64-musl': 4.17.2
- '@rollup/rollup-win32-arm64-msvc': 4.17.2
- '@rollup/rollup-win32-ia32-msvc': 4.17.2
- '@rollup/rollup-win32-x64-msvc': 4.17.2
- fsevents: 2.3.3
-
- run-parallel@1.2.0:
- dependencies:
- queue-microtask: 1.2.3
-
- sass@1.77.4:
- dependencies:
- chokidar: 3.6.0
- immutable: 4.3.6
- source-map-js: 1.2.0
-
- semver@6.3.1: {}
-
- semver@7.6.2: {}
-
- seroval-plugins@1.0.7(seroval@1.0.7):
- dependencies:
- seroval: 1.0.7
-
- seroval@1.0.7: {}
-
- shebang-command@2.0.0:
- dependencies:
- shebang-regex: 3.0.0
-
- shebang-regex@3.0.0: {}
-
- signal-exit@3.0.7: {}
-
- signal-exit@4.1.0: {}
-
- slash@3.0.0: {}
-
- slice-ansi@5.0.0:
- dependencies:
- ansi-styles: 6.2.1
- is-fullwidth-code-point: 4.0.0
-
- slice-ansi@7.1.0:
- dependencies:
- ansi-styles: 6.2.1
- is-fullwidth-code-point: 5.0.0
-
- solid-form-handler@1.2.3(solid-js@1.8.17):
- dependencies:
- solid-js: 1.8.17
-
- solid-js@1.8.17:
- dependencies:
- csstype: 3.1.3
- seroval: 1.0.7
- seroval-plugins: 1.0.7(seroval@1.0.7)
-
- solid-refresh@0.6.3(solid-js@1.8.17):
- dependencies:
- '@babel/generator': 7.24.5
- '@babel/helper-module-imports': 7.24.3
- '@babel/types': 7.24.5
- solid-js: 1.8.17
-
- solid-toast@0.5.0(solid-js@1.8.17):
- dependencies:
- solid-js: 1.8.17
-
- source-map-js@1.2.0: {}
-
- string-argv@0.3.2: {}
-
- string-width@4.2.3:
- dependencies:
- emoji-regex: 8.0.0
- is-fullwidth-code-point: 3.0.0
- strip-ansi: 6.0.1
-
- string-width@5.1.2:
- dependencies:
- eastasianwidth: 0.2.0
- emoji-regex: 9.2.2
- strip-ansi: 7.1.0
-
- string-width@7.1.0:
- dependencies:
- emoji-regex: 10.3.0
- get-east-asian-width: 1.2.0
- strip-ansi: 7.1.0
-
- strip-ansi@6.0.1:
- dependencies:
- ansi-regex: 5.0.1
-
- strip-ansi@7.1.0:
- dependencies:
- ansi-regex: 6.0.1
-
- strip-final-newline@3.0.0: {}
-
- strip-json-comments@3.1.1: {}
-
- style-to-object@1.0.6:
- dependencies:
- inline-style-parser: 0.2.3
-
- sucrase@3.35.0:
- dependencies:
- '@jridgewell/gen-mapping': 0.3.5
- commander: 4.1.1
- glob: 10.3.15
- lines-and-columns: 1.2.4
- mz: 2.7.0
- pirates: 4.0.6
- ts-interface-checker: 0.1.13
-
- supports-color@5.5.0:
- dependencies:
- has-flag: 3.0.0
-
- supports-color@7.2.0:
- dependencies:
- has-flag: 4.0.0
-
- supports-preserve-symlinks-flag@1.0.0: {}
-
- tailwindcss@3.4.3:
- dependencies:
- '@alloc/quick-lru': 5.2.0
- arg: 5.0.2
- chokidar: 3.6.0
- didyoumean: 1.2.2
- dlv: 1.1.3
- fast-glob: 3.3.2
- glob-parent: 6.0.2
- is-glob: 4.0.3
- jiti: 1.21.0
- lilconfig: 2.1.0
- micromatch: 4.0.5
- normalize-path: 3.0.0
- object-hash: 3.0.0
- picocolors: 1.0.1
- postcss: 8.4.38
- postcss-import: 15.1.0(postcss@8.4.38)
- postcss-js: 4.0.1(postcss@8.4.38)
- postcss-load-config: 4.0.2(postcss@8.4.38)
- postcss-nested: 6.0.1(postcss@8.4.38)
- postcss-selector-parser: 6.0.16
- resolve: 1.22.8
- sucrase: 3.35.0
- transitivePeerDependencies:
- - ts-node
-
- text-table@0.2.0: {}
-
- thenify-all@1.6.0:
- dependencies:
- thenify: 3.3.1
-
- thenify@3.3.1:
- dependencies:
- any-promise: 1.3.0
-
- tiny-case@1.0.3: {}
-
- to-fast-properties@2.0.0: {}
-
- to-regex-range@5.0.1:
- dependencies:
- is-number: 7.0.0
-
- toposort@2.0.2: {}
-
- ts-api-utils@1.3.0(typescript@5.4.5):
- dependencies:
- typescript: 5.4.5
-
- ts-interface-checker@0.1.13: {}
-
- type-check@0.4.0:
- dependencies:
- prelude-ls: 1.2.1
-
- type-fest@0.20.2: {}
-
- type-fest@2.19.0: {}
-
- typescript@5.4.5: {}
-
- universal-user-agent@6.0.1: {}
-
- update-browserslist-db@1.0.16(browserslist@4.23.0):
- dependencies:
- browserslist: 4.23.0
- escalade: 3.1.2
- picocolors: 1.0.1
-
- uri-js@4.4.1:
- dependencies:
- punycode: 2.3.1
-
- util-deprecate@1.0.2: {}
-
- validate-html-nesting@1.2.2: {}
-
- vite-plugin-mkcert@1.17.5(vite@5.2.11(sass@1.77.4)):
- dependencies:
- '@octokit/rest': 20.1.1
- axios: 1.6.8(debug@4.3.4)
- debug: 4.3.4
- picocolors: 1.0.1
- vite: 5.2.11(sass@1.77.4)
- transitivePeerDependencies:
- - supports-color
-
- vite-plugin-solid@2.10.2(solid-js@1.8.17)(vite@5.2.11(sass@1.77.4)):
- dependencies:
- '@babel/core': 7.24.5
- '@types/babel__core': 7.20.5
- babel-preset-solid: 1.8.17(@babel/core@7.24.5)
- merge-anything: 5.1.7
- solid-js: 1.8.17
- solid-refresh: 0.6.3(solid-js@1.8.17)
- vite: 5.2.11(sass@1.77.4)
- vitefu: 0.2.5(vite@5.2.11(sass@1.77.4))
- transitivePeerDependencies:
- - supports-color
-
- vite@5.2.11(sass@1.77.4):
- dependencies:
- esbuild: 0.20.2
- postcss: 8.4.38
- rollup: 4.17.2
- optionalDependencies:
- fsevents: 2.3.3
- sass: 1.77.4
-
- vitefu@0.2.5(vite@5.2.11(sass@1.77.4)):
- optionalDependencies:
- vite: 5.2.11(sass@1.77.4)
-
- which@2.0.2:
- dependencies:
- isexe: 2.0.0
-
- word-wrap@1.2.5: {}
-
- wrap-ansi@7.0.0:
- dependencies:
- ansi-styles: 4.3.0
- string-width: 4.2.3
- strip-ansi: 6.0.1
-
- wrap-ansi@8.1.0:
- dependencies:
- ansi-styles: 6.2.1
- string-width: 5.1.2
- strip-ansi: 7.1.0
-
- wrap-ansi@9.0.0:
- dependencies:
- ansi-styles: 6.2.1
- string-width: 7.1.0
- strip-ansi: 7.1.0
-
- wrappy@1.0.2: {}
-
- yallist@3.1.1: {}
-
- yaml@2.3.4: {}
-
- yocto-queue@0.1.0: {}
-
- yup@1.4.0:
- dependencies:
- property-expr: 2.0.6
- tiny-case: 1.0.3
- toposort: 2.0.2
- type-fest: 2.19.0
diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js
deleted file mode 100644
index 2e7af2b..0000000
--- a/frontend/postcss.config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-export default {
- plugins: {
- tailwindcss: {},
- autoprefixer: {},
- },
-}
diff --git a/frontend/public/images/bg-login.jpg b/frontend/public/images/bg-login.jpg
deleted file mode 100644
index 8fedf82..0000000
Binary files a/frontend/public/images/bg-login.jpg and /dev/null differ
diff --git a/frontend/public/vite.svg b/frontend/public/vite.svg
deleted file mode 100644
index e7b8dfb..0000000
--- a/frontend/public/vite.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx
deleted file mode 100644
index fc71c1e..0000000
--- a/frontend/src/App.jsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { MetaProvider } from '@solidjs/meta'
-import { Toaster } from 'solid-toast'
-import './App.scss'
-import { SiteContextProvider } from './context/SiteContext'
-
-function App(props) {
- return (
-
-
- = 0
- ? null
- : { 'margin-top': '60px' }
- }
- />
- {props.children}
-
-
- )
-}
-
-export default App
diff --git a/frontend/src/App.scss b/frontend/src/App.scss
deleted file mode 100644
index d99b35f..0000000
--- a/frontend/src/App.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-#root {
- margin: 0 auto;
-
- --white: #fff;
- --black: #212121;
- --primary: #03c9d7;
- --green: #05b187;
- --orange: #fb9678;
- --yellow: #fec90f;
-}
-
-* {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
-}
-
-#main-page {
- height: calc(100svh - 64px);
- display: flex;
- overflow: hidden;
-}
-
-#main-page .main-content {
- max-height: calc(100svh - 64px);
- overflow-y: auto;
-}
-
-a {
- font-weight: 500;
- color: #646cff;
- text-decoration: inherit;
-}
-
-a:hover {
- color: #535bf2;
-}
diff --git a/frontend/src/api/auth.js b/frontend/src/api/auth.js
deleted file mode 100644
index f28cc87..0000000
--- a/frontend/src/api/auth.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import { protocol } from './index'
-import { POST_LOGIN, POST_LOGOUT, POST_REFRESH } from './url'
-
-export const postLogin = (payload) => {
- return protocol.post(POST_LOGIN, payload)
-}
-
-export const getLogout = () => {
- return protocol.get(POST_LOGOUT, {})
-}
-
-export const refreshToken = () => {
- return protocol.get(POST_REFRESH, {})
-}
diff --git a/frontend/src/api/index.js b/frontend/src/api/index.js
deleted file mode 100644
index ee226b4..0000000
--- a/frontend/src/api/index.js
+++ /dev/null
@@ -1,80 +0,0 @@
-import { LOGIN_KEY } from '@utils/enum'
-import axios from 'axios'
-import { Helpers } from '../utils/helper'
-import { refreshToken } from './auth'
-
-const protocol = axios.create({
- baseURL: '/',
-})
-
-const forceLogout = () => {
- Helpers.clearStorage()
- window.location.href = '/login'
-}
-
-protocol.interceptors.request.use(async (config) => {
- config.headers.set(
- 'Content-Type',
- config.headers.get('Content-Type') ?? 'application/json',
- )
-
- if (
- config.url.indexOf('/login') >= 0 ||
- config.url.indexOf('/refresh') >= 0
- ) {
- return config
- }
-
- const { accessToken, exp } = await JSON.parse(
- Helpers.decrypt(localStorage.getItem(LOGIN_KEY)),
- )
- if (accessToken && !Helpers.checkTokenExpired(exp)) {
- config.headers.set('Authorization', `Bearer ${accessToken}`)
- }
-
- return config
-})
-
-protocol.interceptors.response.use(
- (response) => {
- return response.data || {}
- },
- async (error) => {
- const {
- response: { status, data },
- config,
- } = error
-
- if (
- config.url.indexOf('/login') >= 0 ||
- config.url.indexOf('/refresh') >= 0
- ) {
- return Promise.reject(data)
- }
-
- if (status === 401 && !config._retry) {
- config._retry = true
- try {
- // call refresh token
- const resp = await refreshToken()
- if (resp.status === 200) {
- const { data } = resp
- localStorage.setItem(LOGIN_KEY, Helpers.encrypt(JSON.stringify(data)))
-
- config.headers['Authorization'] = `Bearer ${data.accessToken}`
- return protocol(config)
- }
- } catch (error) {
- forceLogout()
- return Promise.reject(error)
- }
- }
- if (status === 403) {
- forceLogout()
- }
-
- return Promise.reject(data)
- },
-)
-
-export { protocol }
diff --git a/frontend/src/api/url.js b/frontend/src/api/url.js
deleted file mode 100644
index d2402e0..0000000
--- a/frontend/src/api/url.js
+++ /dev/null
@@ -1,5 +0,0 @@
-export const POST_LOGIN = '/api/auth/login'
-export const POST_LOGOUT = '/api/auth/logout'
-export const POST_REFRESH = '/api/auth/refresh'
-export const GET_USER_PROFILE = '/api/user/me'
-export const PUT_UPDATE_USER_PROFILE = '/api/user/update-profile'
diff --git a/frontend/src/api/user.js b/frontend/src/api/user.js
deleted file mode 100644
index 7b3dda6..0000000
--- a/frontend/src/api/user.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import { protocol } from './index'
-import { GET_USER_PROFILE, PUT_UPDATE_USER_PROFILE } from './url'
-
-export const getProfile = () => {
- return protocol.get(GET_USER_PROFILE, {})
-}
-
-export const putUpdateProfile = (payload) => {
- return protocol.put(PUT_UPDATE_USER_PROFILE, payload)
-}
diff --git a/frontend/src/assets/logo.svg b/frontend/src/assets/logo.svg
deleted file mode 100644
index d7859b3..0000000
--- a/frontend/src/assets/logo.svg
+++ /dev/null
@@ -1,585 +0,0 @@
-
-
-
diff --git a/frontend/src/assets/solid.svg b/frontend/src/assets/solid.svg
deleted file mode 100644
index 025aa30..0000000
--- a/frontend/src/assets/solid.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/frontend/src/components/Header.jsx b/frontend/src/components/Header.jsx
deleted file mode 100644
index f0a2a64..0000000
--- a/frontend/src/components/Header.jsx
+++ /dev/null
@@ -1,79 +0,0 @@
-import { getProfile } from '@api/user'
-import Logo from '@assets/logo.svg'
-import { useSiteContext } from '@context/SiteContext'
-import useAuth from '@hooks/useAuth'
-import useToast from '@hooks/useToast'
-import { A } from '@solidjs/router'
-import { IconLogout, IconMenuDeep } from '@tabler/icons-solidjs'
-import { Show, onMount } from 'solid-js'
-
-export default function Header() {
- const { store, setAuth, setUser } = useSiteContext()
- const { clickLogOut } = useAuth(setAuth)
- const notify = useToast()
-
- onMount(async () => {
- try {
- const resp = await getProfile()
- if (resp.status === 200) {
- setUser(resp.data)
- }
- } catch (error) {
- notify.error({
- title: 'Get profile fail!',
- closable: false,
- description: error?.data || 'Can not get user profile!',
- })
- }
- })
-
- const logOut = async () => {
- try {
- await clickLogOut()
- } catch (error) {
- console.log({
- status: 'danger',
- title: 'Logout fail!',
- closable: false,
- })
- }
- }
-
- return (
-
- )
-}
diff --git a/frontend/src/components/Navbar/Navbar.jsx b/frontend/src/components/Navbar/Navbar.jsx
deleted file mode 100644
index bfeb854..0000000
--- a/frontend/src/components/Navbar/Navbar.jsx
+++ /dev/null
@@ -1,89 +0,0 @@
-import { useSiteContext } from '@context/SiteContext'
-import useAuth from '@hooks/useAuth'
-import useLanguage from '@hooks/useLanguage'
-import { A } from '@solidjs/router'
-import { IconDashboard, IconLogout, IconTriangle } from '@tabler/icons-solidjs'
-import UserHelper from '@utils/auth'
-import { For, Show } from 'solid-js'
-import { Dynamic } from 'solid-js/web'
-import './navbar.scss'
-
-const language = useLanguage()
-const userHelper = new UserHelper()
-
-console.log(userHelper.isAdmin)
-
-const NAV_ITEM = [
- {
- path: '/dashboard',
- show: false,
- icon: IconDashboard,
- text: language?.ui.dashboard,
- },
- {
- path: '/ware-house',
- show: true,
- icon: IconDashboard,
- text: language?.ui.houses,
- },
-]
-
-export default function Navbar() {
- const { store, setAuth } = useSiteContext()
- const { clickLogOut } = useAuth(setAuth)
-
- const logOut = async () => {
- try {
- await clickLogOut()
- } catch (error) {
- console.log({
- status: 'danger',
- title: 'Logout fail!',
- closable: false,
- })
- }
- }
-
- return (
-
- )
-}
diff --git a/frontend/src/components/Navbar/index.js b/frontend/src/components/Navbar/index.js
deleted file mode 100644
index e6400ae..0000000
--- a/frontend/src/components/Navbar/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './Navbar'
diff --git a/frontend/src/components/Navbar/navbar.scss b/frontend/src/components/Navbar/navbar.scss
deleted file mode 100644
index af9bd03..0000000
--- a/frontend/src/components/Navbar/navbar.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-.menu {
- li {
- a {
- color: var(--black);
- font-weight: normal;
-
- &:not(ul, .menu-title, details, .btn).active {
- background-color: var(--primary);
- color: var(--white);
- }
-
- &:hover {
- background-color: rgba(var(--primary), 0.05);
- color: var(--primary);
- }
- }
- }
-}
diff --git a/frontend/src/components/Notify.jsx b/frontend/src/components/Notify.jsx
deleted file mode 100644
index c5fc280..0000000
--- a/frontend/src/components/Notify.jsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import {
- IconCircleCheck,
- IconFaceIdError,
- IconInfoCircle,
- IconX,
-} from '@tabler/icons-solidjs'
-import { Show } from 'solid-js'
-import { Dynamic } from 'solid-js/web'
-
-const STATUS = Object.freeze(
- new Proxy(
- {
- success: {
- icon: IconCircleCheck,
- color: 'text-green-500',
- },
- error: {
- icon: IconFaceIdError,
- color: 'text-red-500',
- },
- info: {
- icon: IconInfoCircle,
- color: 'text-blue-500',
- },
- },
- {
- get: (target, prop) =>
- target[prop] ?? { icon: IconInfoCircle, color: 'text-blue-500' },
- },
- ),
-)
-
-export default function Notify(props) {
- return (
-
-
-
-
-
- {props.title}
-
-
-
- {props.description}
-
-
-
-
-
-
- )
-}
diff --git a/frontend/src/components/common/TextInput/TextInput.jsx b/frontend/src/components/common/TextInput/TextInput.jsx
deleted file mode 100644
index cba0c2b..0000000
--- a/frontend/src/components/common/TextInput/TextInput.jsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import { Field } from 'solid-form-handler'
-import { Show, splitProps } from 'solid-js'
-import { Dynamic } from 'solid-js/web'
-
-export default function Finput(props) {
- const [local, rest] = splitProps(props, ['label', 'icon'])
-
- return (
- (
-
- )}
- />
- )
-}
diff --git a/frontend/src/components/common/TextInput/index.js b/frontend/src/components/common/TextInput/index.js
deleted file mode 100644
index 30a59db..0000000
--- a/frontend/src/components/common/TextInput/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './TextInput'
diff --git a/frontend/src/context/SiteContext.jsx b/frontend/src/context/SiteContext.jsx
deleted file mode 100644
index dbfe70f..0000000
--- a/frontend/src/context/SiteContext.jsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import { STORE_KEY } from '@utils/enum'
-import { Helpers } from '@utils/helper'
-import { createContext, onMount, useContext } from 'solid-js'
-import { createStore, produce } from 'solid-js/store'
-
-export const SiteContext = createContext()
-
-export function SiteContextProvider(props) {
- const [store, setStore] = createStore({
- auth: false,
- userInfo: null,
- })
-
- onMount(() => {
- const storeData = Helpers.decrypt(localStorage.getItem(STORE_KEY))
- if (!storeData) return
- setStore(storeData)
- })
-
- const setLocalStore = () => {
- if (store.auth) {
- localStorage.setItem(STORE_KEY, Helpers.encrypt(store))
- } else {
- localStorage.removeItem(STORE_KEY)
- }
- }
-
- const setAuth = ({ auth, user }) => {
- setStore(
- produce((s) => {
- s.auth = auth
- s.userInfo = user
- }),
- )
- setLocalStore()
- }
-
- const setUser = (user) => {
- setStore(
- produce((s) => {
- s.userInfo = user
- }),
- )
- setLocalStore()
- }
-
- return (
-
- {props.children}
-
- )
-}
-
-export function useSiteContext() {
- return useContext(SiteContext)
-}
diff --git a/frontend/src/hooks/useAuth.js b/frontend/src/hooks/useAuth.js
deleted file mode 100644
index 68bba11..0000000
--- a/frontend/src/hooks/useAuth.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import { getLogout, postLogin } from '@api/auth'
-import { useNavigate } from '@solidjs/router'
-import { LOGIN_KEY } from '@utils/enum'
-import { Helpers } from '@utils/helper'
-
-export default function useAuth(setAuth) {
- const navigate = useNavigate()
-
- const clickLogIn = async (username, password, cbFormReset) => {
- const resp = await postLogin({ username, password })
-
- if (resp.status === 200) {
- const token = resp.data || {}
- if (token) {
- const { name, ...rest } = token
- setAuth({ auth: true, user: { name } })
- localStorage.setItem(LOGIN_KEY, Helpers.encrypt(JSON.stringify(rest)))
- }
-
- cbFormReset()
- navigate('/', { replace: true })
- }
- }
-
- const clickLogOut = async () => {
- await getLogout()
- Helpers.clearStorage()
- setAuth({ auth: false, user: null })
- navigate('/login', { replace: false })
- }
-
- return {
- clickLogOut,
- clickLogIn,
- }
-}
diff --git a/frontend/src/hooks/useLanguage.js b/frontend/src/hooks/useLanguage.js
deleted file mode 100644
index 202a8b1..0000000
--- a/frontend/src/hooks/useLanguage.js
+++ /dev/null
@@ -1,15 +0,0 @@
-export default function useLanguage(selectLanguage = 'vi') {
- const data = import.meta.glob('@lang/*.json', {
- import: 'default',
- eager: true,
- })
-
- const imp = {}
-
- for (const path in data) {
- const keypath = path.match(/\/[a-zA-Z]+\./)[0].replace(/\/(\w+)\./, '$1')
- imp[keypath] = data[path]
- }
-
- return imp[selectLanguage]
-}
diff --git a/frontend/src/hooks/useToast.jsx b/frontend/src/hooks/useToast.jsx
deleted file mode 100644
index 5c35c4b..0000000
--- a/frontend/src/hooks/useToast.jsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import Notify from '@components/Notify'
-import toast from 'solid-toast'
-
-export default function useToast() {
- const notify = {}
-
- notify.show = ({ status, title, description, closable = false }) => {
- return toast.custom((t) => (
- toast.dismiss(t.id) : null}
- />
- ))
- }
-
- notify.success = ({ title, description, closable = false }) => {
- return notify.show({ status: 'success', title, description, closable })
- }
-
- notify.error = ({ title, description, closable = false }) => {
- return notify.show({ status: 'error', title, description, closable })
- }
-
- notify.info = ({ title, description, closable = false }) => {
- return notify.show({ status: 'info', title, description, closable })
- }
-
- return notify
-}
diff --git a/frontend/src/index.jsx b/frontend/src/index.jsx
deleted file mode 100644
index 73ac930..0000000
--- a/frontend/src/index.jsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import Layout from '@pages/Layout'
-import { Route, Router } from '@solidjs/router'
-import { For, lazy } from 'solid-js'
-import { render } from 'solid-js/web'
-import App from './App'
-import './index.scss'
-import { ROUTES } from './routes'
-
-const root = document.getElementById('root')
-
-render(
- () => (
-
- import('@pages/Login'))} />
-
-
- {(route) => (
-
- )}
-
-
- import('@pages/NotFound'))} />
-
- ),
- root,
-)
diff --git a/frontend/src/index.scss b/frontend/src/index.scss
deleted file mode 100644
index 4cc5076..0000000
--- a/frontend/src/index.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-@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(0, 0, 0, 1);
- background-color: #ffffff;
-
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-body {
- margin: 0;
- padding: 0;
- min-width: 320px;
- min-height: 100vh;
- font-size: 14px;
-}
diff --git a/frontend/src/lang/en.json b/frontend/src/lang/en.json
deleted file mode 100644
index 8c6f4fa..0000000
--- a/frontend/src/lang/en.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "login": "Login",
- "logout": "Logout"
-}
diff --git a/frontend/src/lang/vi.json b/frontend/src/lang/vi.json
deleted file mode 100644
index 62a1140..0000000
--- a/frontend/src/lang/vi.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "ui": {
- "username": "Tên người dùng",
- "password": "Mật khẩu",
- "login": "Đăng Nhập",
- "logout": "Đăng xuất",
- "dashboard": "Bảng điều khiển",
- "profile": "Hồ sơ",
- "changeInfo": "Đổi thông tin",
- "save": "Lưu",
- "clear": "Xóa",
- "houses": "Kho",
- "displayName": "Display Name",
- "newPassword": "New Password",
- "confirmNewPassword": "Confirm New Password"
- },
- "message": {
- "CREATED_USER": "Username already registered!",
- "LOGIN_WRONG": "Your username or password input is wrong!",
- "USER_LOCK": "Your Account was locked"
- }
-}
diff --git a/frontend/src/pages/Dashboard.jsx b/frontend/src/pages/Dashboard.jsx
deleted file mode 100644
index 4156868..0000000
--- a/frontend/src/pages/Dashboard.jsx
+++ /dev/null
@@ -1,3 +0,0 @@
-export default function Dashboard() {
- return <>Dashboard>
-}
diff --git a/frontend/src/pages/Home.jsx b/frontend/src/pages/Home.jsx
deleted file mode 100644
index ef07ed7..0000000
--- a/frontend/src/pages/Home.jsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import { useNavigate } from '@solidjs/router'
-import { onMount } from 'solid-js'
-
-export default function Home() {
- const navigate = useNavigate()
-
- onMount(() => {
- // const first = NAV_ROUTES.filter((item) => item.show)[0]?.path || '/me'
- navigate('/me', { replace: true })
- })
-
- return <>>
-}
diff --git a/frontend/src/pages/Layout.jsx b/frontend/src/pages/Layout.jsx
deleted file mode 100644
index 5103ff0..0000000
--- a/frontend/src/pages/Layout.jsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import Header from '@components/Header'
-import Navbar from '@components/Navbar'
-import { useSiteContext } from '@context/SiteContext'
-import { useNavigate } from '@solidjs/router'
-import { onMount } from 'solid-js'
-
-export default function Layout(props) {
- const { store } = useSiteContext()
- const navigate = useNavigate()
-
- onMount(() => {
- if (!store.auth) {
- navigate('/login', { replace: true })
- }
- })
-
- return (
-
-
-
-
-
-
- {props.children}
-
-
-
-
-
- )
-}
diff --git a/frontend/src/pages/Login/Login.jsx b/frontend/src/pages/Login/Login.jsx
deleted file mode 100644
index 1fa57c8..0000000
--- a/frontend/src/pages/Login/Login.jsx
+++ /dev/null
@@ -1,94 +0,0 @@
-import { useSiteContext } from '@context/SiteContext'
-import useLanguage from '@hooks/useLanguage'
-import { useNavigate } from '@solidjs/router'
-import { IconKey, IconUser } from '@tabler/icons-solidjs'
-import { useFormHandler } from 'solid-form-handler'
-import { yupSchema } from 'solid-form-handler/yup'
-import { onMount } from 'solid-js'
-import * as yup from 'yup'
-import './login.scss'
-
-import Logo from '@assets/logo.svg'
-import TextInput from '@components/common/TextInput'
-import useAuth from '@hooks/useAuth'
-import useToast from '@hooks/useToast'
-
-const loginSchema = yup.object({
- username: yup.string().required('Username is required'),
- password: yup.string().required('Password is required'),
-})
-
-const language = useLanguage()
-
-export default function Login() {
- const { store, setAuth } = useSiteContext()
- const navigate = useNavigate()
- const { clickLogIn } = useAuth(setAuth)
- const notify = useToast()
- const formHandler = useFormHandler(yupSchema(loginSchema))
- const { formData } = formHandler
-
- onMount(() => {
- if (store.auth) {
- navigate('/', { replace: true })
- }
- })
-
- const submit = async (event) => {
- event.preventDefault()
- await formHandler.validateForm()
- try {
- const { username, password } = formData()
- await clickLogIn(username, password, formHandler.resetForm)
- notify.success({
- title: 'Login success!',
- description: 'Welcome back!',
- closable: true,
- })
- } catch (error) {
- notify.error({
- title: 'Login fail!',
- description: error?.data
- ? language.message[error.data]
- : 'Your username or password input is wrong!',
- closable: true,
- })
- }
- }
-
- return (
-
-
-
-
-
-
-
-
-
-
{language.ui.login}
-
-
-
-
- )
-}
diff --git a/frontend/src/pages/Login/index.js b/frontend/src/pages/Login/index.js
deleted file mode 100644
index 626bc07..0000000
--- a/frontend/src/pages/Login/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './Login'
diff --git a/frontend/src/pages/Login/login.scss b/frontend/src/pages/Login/login.scss
deleted file mode 100644
index e6080e1..0000000
--- a/frontend/src/pages/Login/login.scss
+++ /dev/null
@@ -1,69 +0,0 @@
-.login-page {
- width: 100%;
- height: 100svh;
- display: flex;
- padding-left: 15px;
- padding-right: 15px;
- background: #fff url('/images/bg-login.jpg') no-repeat fixed center;
- background-size: cover;
- place-items: center;
-
- .login-wrap {
- width: 40%;
- max-width: 500px;
- min-width: 320px;
- margin: 0 auto;
- overflow: hidden;
- position: relative;
-
- &:after {
- content: '';
- display: block;
- width: 500px;
- height: 500px;
- border-radius: 15px;
- position: absolute;
- z-index: 2;
- top: -120px;
- left: -285px;
- background: #10b981;
- transform: rotate(45deg);
- }
-
- &:before {
- content: '';
- display: block;
- width: 500px;
- height: 500px;
- border-radius: 15px;
- position: absolute;
- z-index: 2;
- top: -40px;
- left: -130px;
- background: #ff6600;
- transform: rotate(20deg);
- }
-
- .card-body {
- position: relative;
- z-index: 4;
- }
-
- .logo {
- position: relative;
- z-index: 4;
- display: block;
- width: 40%;
- max-width: 150px;
- min-width: 100px;
- margin: 0 auto;
- margin-top: 15px;
- }
-
- .login-box {
- box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.25);
- border-radius: 5px;
- padding: 1rem;
- }
- }
-}
diff --git a/frontend/src/pages/NotFound.jsx b/frontend/src/pages/NotFound.jsx
deleted file mode 100644
index 5757a78..0000000
--- a/frontend/src/pages/NotFound.jsx
+++ /dev/null
@@ -1,3 +0,0 @@
-export default function NotFound() {
- return <>404>
-}
diff --git a/frontend/src/pages/Profile/Profile.jsx b/frontend/src/pages/Profile/Profile.jsx
deleted file mode 100644
index 48fd998..0000000
--- a/frontend/src/pages/Profile/Profile.jsx
+++ /dev/null
@@ -1,115 +0,0 @@
-import { putUpdateProfile } from '@api/user'
-import TextInput from '@components/common/TextInput'
-import { useSiteContext } from '@context/SiteContext'
-import useLanguage from '@hooks/useLanguage'
-import useToast from '@hooks/useToast'
-import { IconKey, IconLetterN, IconUserCircle } from '@tabler/icons-solidjs'
-import { Helpers } from '@utils/helper'
-import { useFormHandler } from 'solid-form-handler'
-import { yupSchema } from 'solid-form-handler/yup'
-import { createEffect } from 'solid-js'
-import * as yup from 'yup'
-
-const profileSchema = yup.object({
- name: yup.string().required('Name is required'),
- password: yup.string().nullable().optional(),
- 'confirm-password': yup.string().when('password', {
- is: (val) => !!(val && val.length > 0),
- then: (schema) =>
- schema.oneOf([yup.ref('password'), null], 'Passwords must match'),
- }),
-})
-
-const language = useLanguage()
-const notify = useToast()
-
-export default function Profile() {
- const {
- store: { userInfo },
- setUser,
- } = useSiteContext()
- const formHandler = useFormHandler(yupSchema(profileSchema))
- const { formData } = formHandler
-
- createEffect(() => {
- formHandler.fillForm({
- name: userInfo?.name,
- })
- })
-
- const submit = async (event) => {
- event.preventDefault()
- await formHandler.validateForm()
- try {
- const { name, password } = formData()
- const clearObj = Helpers.clearObject({
- name: name || null,
- password: password || null,
- })
- const resp = await putUpdateProfile(clearObj)
-
- if (resp.status === 200) {
- setUser(resp.data)
- formHandler.setFieldValue('password', '')
- formHandler.setFieldValue('confirm-password', '')
- notify.success({
- title: 'Update profile success!',
- description: 'Your profile has been updated!',
- })
- }
- } catch (error) {
- notify.error({
- title: 'Update profile fail!',
- description: error?.data
- ? language.message[error.data]
- : 'Your username or password input is wrong!',
- closable: true,
- })
- }
- }
-
- return (
-
-
-
-
-
- {language.ui.profile}
-
-
-
- )
-}
diff --git a/frontend/src/pages/Profile/index.js b/frontend/src/pages/Profile/index.js
deleted file mode 100644
index aa67a44..0000000
--- a/frontend/src/pages/Profile/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './Profile'
diff --git a/frontend/src/pages/WareHouse.jsx b/frontend/src/pages/WareHouse.jsx
deleted file mode 100644
index 5caccd1..0000000
--- a/frontend/src/pages/WareHouse.jsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import { useNavigate } from '@solidjs/router'
-import { onMount } from 'solid-js'
-
-export default function WareHouse() {
- const navigate = useNavigate()
-
- onMount(() => {
- navigate('/me', { replace: true })
- })
-
- return <>>
-}
diff --git a/frontend/src/routes/index.js b/frontend/src/routes/index.js
deleted file mode 100644
index 49800c7..0000000
--- a/frontend/src/routes/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export * from './routes'
diff --git a/frontend/src/routes/routes.js b/frontend/src/routes/routes.js
deleted file mode 100644
index 6f07c67..0000000
--- a/frontend/src/routes/routes.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import { lazy } from 'solid-js'
-
-export const ROUTES = [
- {
- path: '/',
- components: lazy(() => import('@pages/Home')),
- filter: {},
- },
- {
- path: '/dashboard',
- components: lazy(() => import('@pages/Dashboard')),
- filter: {},
- },
- {
- path: '/profile',
- components: lazy(() => import('@pages/Profile')),
- filter: {},
- },
- {
- path: '/ware-house',
- components: lazy(() => import('@pages/WareHouse')),
- filter: {},
- },
- {
- path: '/me',
- components: lazy(() => import('@pages/Profile')),
- filter: {},
- },
-]
diff --git a/frontend/src/utils/auth.js b/frontend/src/utils/auth.js
deleted file mode 100644
index 825a2fa..0000000
--- a/frontend/src/utils/auth.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import { STORE_KEY } from './enum'
-import { Helpers } from './helper'
-
-export default class UserHelper {
- #user
-
- constructor() {
- this.#user = Helpers.decrypt(localStorage.getItem(STORE_KEY))
- }
-
- get isAdmin() {
- return this.#user?.userInfo?.isAdmin
- }
-}
diff --git a/frontend/src/utils/enum.js b/frontend/src/utils/enum.js
deleted file mode 100644
index 0c96433..0000000
--- a/frontend/src/utils/enum.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// const PRODUCTION = import.meta.env.NODE_ENV === 'production'
-
-export const SECRET_KEY = 'bGV0IGRvIGl0IGZvciBlbmNyeXRo'
-export const STORE_KEY = 'dXNlciBsb2dpbiBpbmZv'
-export const LOGIN_KEY = '7fo24CMyIc'
diff --git a/frontend/src/utils/helper.js b/frontend/src/utils/helper.js
deleted file mode 100644
index 8f4c3bb..0000000
--- a/frontend/src/utils/helper.js
+++ /dev/null
@@ -1,59 +0,0 @@
-import { AES, enc } from 'crypto-js'
-import { LOGIN_KEY, SECRET_KEY, STORE_KEY } from './enum'
-
-export class Helpers {
- static setCookie = (cname, cvalue, exdays) => {
- const d = new Date()
- d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000)
- let expires = `expires=${d.toUTCString()}`
- document.cookie = `${cname}=${cvalue};${expires};path=/`
- }
-
- static getCookie = (cname) => {
- let name = cname + '='
- let ca = document.cookie.split(';')
- for (let i = 0; i < ca.length; i++) {
- let c = ca[i]
- while (c.charAt(0) == ' ') {
- c = c.substring(1)
- }
- if (c.indexOf(name) == 0) {
- return c.substring(name.length, c.length)
- }
- }
- return ''
- }
-
- static deleteCookie = (cname) => {
- document.cookie = `${cname}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`
- }
-
- static clearStorage = () => {
- localStorage.removeItem(LOGIN_KEY)
- localStorage.removeItem(STORE_KEY)
- }
-
- static checkTokenExpired = (exp) => {
- const currentTime = Math.floor(new Date().getTime() / 1000)
- return exp < currentTime
- }
-
- static encrypt = (obj) => {
- return AES.encrypt(JSON.stringify(obj), SECRET_KEY).toString()
- }
-
- static decrypt = (hash, defaultValue = {}) => {
- return hash
- ? JSON.parse(AES.decrypt(hash, SECRET_KEY).toString(enc.Utf8))
- : defaultValue
- }
-
- static clearObject = (object) => {
- for (var propName in object) {
- if (object[propName] === null || object[propName] === undefined) {
- delete object[propName]
- }
- }
- return object
- }
-}
diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js
deleted file mode 100644
index cf8adf0..0000000
--- a/frontend/tailwind.config.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import daisyui from 'daisyui'
-import themes from 'daisyui/src/theming/themes'
-
-/** @type {import('tailwindcss').Config} */
-export default {
- content: ['./src/**/*.{js,jsx}'],
- theme: {
- extend: {
- colors: {
- fu: {
- white: '#fff',
- black: '#212121',
- primary: '#03c9d7',
- green: '#05b187',
- orange: '#fb9678',
- yellow: '#fec90f',
- },
- },
- },
- },
- plugins: [daisyui],
- daisyui: {
- themes: [
- {
- light: {
- ...themes['light'],
- primary: '#03c9d7',
- 'primary-content': '#ffff',
- secondary: '#fb9678',
- 'secondary-content': '#ffff',
- },
- },
- ],
- },
-}
diff --git a/frontend/vite.config.js b/frontend/vite.config.js
deleted file mode 100644
index 0bca92f..0000000
--- a/frontend/vite.config.js
+++ /dev/null
@@ -1,74 +0,0 @@
-import path, { dirname } from 'path'
-import { fileURLToPath } from 'url'
-import { defineConfig, loadEnv } from 'vite'
-// import mkcert from 'vite-plugin-mkcert'
-import solid from 'vite-plugin-solid'
-
-const _dirname = dirname(fileURLToPath(import.meta.url))
-
-// https://vitejs.dev/config/
-// production
-export default defineConfig(({ mode }) => {
- // eslint-disable-next-line no-undef
- const env = loadEnv(mode, process.cwd(), '')
-
- if (env.NODE_ENV === 'production') {
- return {
- resolve: {
- alias: {
- '@': path.resolve(_dirname, './src'),
- '@lang': path.resolve(_dirname, './src/lang'),
- '@api': path.resolve(_dirname, './src/api'),
- '@hooks': path.resolve(_dirname, './src/hooks'),
- '@pages': path.resolve(_dirname, './src/pages'),
- '@components': path.resolve(_dirname, './src/components'),
- '@routes': path.resolve(_dirname, './src/routes'),
- '@utils': path.resolve(_dirname, './src/utils'),
- '@assets': path.resolve(_dirname, './src/assets'),
- '@context': path.resolve(_dirname, './src/context'),
- },
- },
- plugins: [solid()],
- server: {
- https: false,
- host: true,
- port: 5001,
- strictPort: true,
- watch: {
- usePolling: true,
- },
- },
- }
- }
-
- return {
- resolve: {
- alias: {
- '@': path.resolve(_dirname, './src'),
- '@lang': path.resolve(_dirname, './src/lang'),
- '@api': path.resolve(_dirname, './src/api'),
- '@hooks': path.resolve(_dirname, './src/hooks'),
- '@pages': path.resolve(_dirname, './src/pages'),
- '@components': path.resolve(_dirname, './src/components'),
- '@routes': path.resolve(_dirname, './src/routes'),
- '@utils': path.resolve(_dirname, './src/utils'),
- '@assets': path.resolve(_dirname, './src/assets'),
- '@context': path.resolve(_dirname, './src/context'),
- },
- },
- // plugins: [solid(), mkcert()],
- plugins: [solid()],
- server: {
- https: false,
- host: true,
- port: 5001,
- strictPort: true,
- watch: {
- usePolling: true,
- },
- proxy: {
- '/api': 'http://localhost:9000',
- },
- },
- }
-})
diff --git a/pyproject.toml b/pyproject.toml
index 9f555ce..6875407 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,7 +3,6 @@ name = "backend"
version = "0.1.0"
description = "project for manage item with exp date"
authors = ["Sam Liu "]
-readme = "README.md"
[tool.poetry.dependencies]
python = "^3.10"