diff --git a/app/db/__init__.py b/app/db/__init__.py index 620f4eb..13ae45d 100644 --- a/app/db/__init__.py +++ b/app/db/__init__.py @@ -2,7 +2,6 @@ from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session from .base import Base, SessionLocal, engine # noqa - from .crud import ( create_admin, create_notification_reminder, # noqa @@ -27,9 +26,7 @@ from .crud import ( update_user, update_user_status, update_user_sub, - start_user_expire, ) - from .models import JWT, System, User # noqa @@ -56,7 +53,6 @@ __all__ = [ "remove_user", "update_user", "update_user_status", - "start_user_expire", "update_user_sub", "revoke_user_sub", "set_owner", diff --git a/app/db/crud.py b/app/db/crud.py index c55200a..d584f23 100644 --- a/app/db/crud.py +++ b/app/db/crud.py @@ -7,7 +7,6 @@ from typing import List, Optional, Tuple, Union from sqlalchemy import and_, delete, update, select from sqlalchemy.orm import Session -from app.config.env import NOTIFY_DAYS_LEFT, NOTIFY_REACHED_USAGE_PERCENT from app.db.models import ( JWT, TLS, @@ -34,14 +33,11 @@ from app.models.service import Service as ServiceModify, ServiceCreate from app.models.user import ( ReminderType, UserCreate, - UserDataLimitResetStrategy, + UserDataUsageResetStrategy, UserModify, UserStatus, UserUsageResponse, -) -from app.utils.helpers import ( - calculate_expiration_days, - calculate_usage_percent, + UserExpireStrategy, ) @@ -110,19 +106,16 @@ def assure_node_inbounds(db: Session, inbounds: List[Inbound], node_id: int): def get_node_users( db: Session, - node_id: Optional[int], - statuses: Optional[List[UserStatus]] = None, + node_id: int, ): query = ( db.query(User.id, User.username, User.key, Inbound) .distinct() - .where(User.enabled == True) .join(Inbound.services) .join(Service.users) .filter(Inbound.node_id == node_id) + .filter(User.activated == True) ) - if isinstance(statuses, list): - query = query.filter(User.status.in_(statuses)) return query.all() @@ -210,12 +203,12 @@ UsersSortingOptions = Enum( "username": User.username.asc(), "used_traffic": User.used_traffic.asc(), "data_limit": User.data_limit.asc(), - "expire": User.expire.asc(), + "expire": User.expire_date.asc(), "created_at": User.created_at.asc(), "-username": User.username.desc(), "-used_traffic": User.used_traffic.desc(), "-data_limit": User.data_limit.desc(), - "-expire": User.expire.desc(), + "-expire": User.expire_date.desc(), "-created_at": User.created_at.desc(), }, ) @@ -226,11 +219,16 @@ def get_users( offset: Optional[int] = None, limit: Optional[int] = None, usernames: Optional[List[str]] = None, - status: Optional[Union[UserStatus, list]] = None, sort: Optional[List[UsersSortingOptions]] = None, admin: Optional[Admin] = None, - reset_strategy: Optional[Union[UserDataLimitResetStrategy, list]] = None, - return_with_count: bool = False, + reset_strategy: Optional[Union[UserDataUsageResetStrategy, list]] = None, + expire_strategy: ( + UserExpireStrategy | list[UserExpireStrategy] | None + ) = None, + is_active: bool | None = None, + activated: bool | None = None, + expired: bool | None = None, + data_limit_reached: bool | None = None, ) -> Union[List[User], Tuple[List[User], int]]: query = db.query(User) @@ -240,12 +238,6 @@ def get_users( else: query = query.filter(User.username.in_(usernames)) - if status: - if isinstance(status, list): - query = query.filter(User.status.in_(status)) - else: - query = query.filter(User.status == status) - if reset_strategy: if isinstance(reset_strategy, list): query = query.filter( @@ -256,24 +248,36 @@ def get_users( User.data_limit_reset_strategy == reset_strategy ) + if expire_strategy: + if isinstance(expire_strategy, list): + query = query.filter(User.expire_strategy.in_(expire_strategy)) + else: + query = query.filter(User.expire_strategy == expire_strategy) + + if isinstance(is_active, bool): + query = query.filter(User.is_active == is_active) + + if isinstance(activated, bool): + query = query.filter(User.activated == activated) + + if isinstance(expired, bool): + query = query.filter(User.expired == expired) + + if isinstance(data_limit_reached, bool): + query = query.filter(User.data_limit_reached == data_limit_reached) + if admin: query = query.filter(User.admin == admin) - # count it before applying limit and offset - if return_with_count: - count = query.count() - if sort: query = query.order_by(*(opt.value for opt in sort)) if offset: query = query.offset(offset) + if limit: query = query.limit(limit) - if return_with_count: - return query.all(), count - return query.all() @@ -307,41 +311,54 @@ def get_user_usages( def get_users_count( db: Session, - status: UserStatus | None = None, admin: Admin | None = None, enabled: bool | None = None, online: bool | None = None, + expire_strategy: UserExpireStrategy | None = None, + is_active: bool | None = None, + expired: bool | None = None, + data_limit_reached: bool | None = None, ): query = db.query(User.id) if admin: query = query.filter(User.admin_id == admin.id) - if status: - query = query.filter(User.status == status) + if is_active: + query = query.filter(User.is_active == is_active) + if expired: + query = query.filter(User.expired == expired) + if data_limit_reached: + query = query.filter(User.data_limit_reached == data_limit_reached) if enabled: query = query.filter(User.enabled == enabled) - if online: + if online is True: query = query.filter( User.online_at > (datetime.utcnow() - timedelta(seconds=30)) ) + elif online is False: + query = query.filter( + User.online_at < (datetime.utcnow() - timedelta(seconds=30)) + ) + if expire_strategy: + query = query.filter(User.expire_strategy == expire_strategy) + return query.count() def create_user(db: Session, user: UserCreate, admin: Admin = None): dbuser = User( username=user.username, - # proxies=proxies, key=user.key, + expire_strategy=user.expire_strategy, + expire_date=user.expire_date, + usage_duration=user.usage_duration, + activation_deadline=user.activation_deadline, services=db.query(Service) .filter(Service.id.in_(user.service_ids)) .all(), # user.services, - status=user.status, data_limit=(user.data_limit or None), - expire=(user.expire or None), admin=admin, data_limit_reset_strategy=user.data_limit_reset_strategy, note=user.note, - on_hold_expire_duration=(user.on_hold_expire_duration or None), - on_hold_timeout=(user.on_hold_timeout or None), ) db.add(dbuser) db.commit() @@ -356,64 +373,26 @@ def remove_user(db: Session, dbuser: User): def update_user(db: Session, dbuser: User, modify: UserModify): - if modify.status is not None: - dbuser.status = modify.status - if modify.data_limit is not None: - # in case there is modification to a user's data limit - dbuser.data_limit = ( - modify.data_limit or None - ) # set it to the new limit - if dbuser.status is not UserStatus.expired: - # in case the user isn't already disabled/expired - if ( - not dbuser.data_limit - or dbuser.used_traffic < dbuser.data_limit - ): - # in case the user is unlimited or hasn't reached the limit already - if dbuser.status != UserStatus.on_hold: - dbuser.status = UserStatus.active - - if not dbuser.data_limit or ( - calculate_usage_percent( - dbuser.used_traffic, dbuser.data_limit - ) - < NOTIFY_REACHED_USAGE_PERCENT - ): - delete_notification_reminder_by_type( - db, dbuser.id, ReminderType.data_usage - ) - else: - # the user has reached the new data limit - dbuser.status = UserStatus.limited - - if modify.expire is not None: - dbuser.expire = modify.expire or None - if dbuser.status in (UserStatus.active, UserStatus.expired): - if not dbuser.expire or dbuser.expire > datetime.utcnow(): - dbuser.status = UserStatus.active - if not dbuser.expire or ( - calculate_expiration_days(dbuser.expire) > NOTIFY_DAYS_LEFT - ): - delete_notification_reminder_by_type( - db, dbuser.id, ReminderType.expiration_date - ) - else: - dbuser.status = UserStatus.expired + dbuser.data_limit = modify.data_limit or None + + if modify.expire_strategy is not None: + dbuser.expire_strategy = modify.expire_strategy or None + + if modify.expire_date is not None: + dbuser.expire_date = modify.expire_date or None if modify.note is not None: dbuser.note = modify.note or None if modify.data_limit_reset_strategy is not None: - dbuser.data_limit_reset_strategy = ( - modify.data_limit_reset_strategy.value - ) + dbuser.data_limit_reset_strategy = modify.data_limit_reset_strategy - if modify.on_hold_timeout is not None: - dbuser.on_hold_timeout = modify.on_hold_timeout + if modify.activation_deadline is not None: + dbuser.activation_deadline = modify.activation_deadline - if modify.on_hold_expire_duration is not None: - dbuser.on_hold_expire_duration = modify.on_hold_expire_duration + if modify.usage_duration is not None: + dbuser.usage_duration = modify.usage_duration if modify.service_ids is not None: dbuser.services = ( @@ -432,8 +411,6 @@ def reset_user_data_usage(db: Session, dbuser: User): dbuser.used_traffic = 0 - if dbuser.status == UserStatus.limited: - dbuser.status = UserStatus.active.value db.add(dbuser) db.commit() @@ -463,16 +440,8 @@ def reset_all_users_data_usage(db: Session, admin: Optional[Admin] = None): if admin: query = query.filter(User.admin == admin) - for dbuser in query.all(): - dbuser.used_traffic = 0 - if dbuser.status not in [ - UserStatus.on_hold, - UserStatus.expired, - ]: - dbuser.status = UserStatus.active - dbuser.usage_logs.clear() - dbuser.node_usages.clear() - db.add(dbuser) + for db_user in query.all(): + db_user.used_traffic = 0 db.commit() @@ -491,16 +460,6 @@ def set_owner(db: Session, dbuser: User, admin: Admin): return dbuser -def start_user_expire(db: Session, dbuser: User): - expire = datetime.utcnow() + timedelta( - seconds=dbuser.on_hold_expire_duration - ) - dbuser.expire = expire - db.commit() - db.refresh(dbuser) - return dbuser - - def get_system_usage(db: Session): return db.query(System).first() diff --git a/app/db/migrations/versions/a83e4dd22672_refactor_user_expire.py b/app/db/migrations/versions/a83e4dd22672_refactor_user_expire.py new file mode 100644 index 0000000..0afe928 --- /dev/null +++ b/app/db/migrations/versions/a83e4dd22672_refactor_user_expire.py @@ -0,0 +1,141 @@ +"""refactor user expire + +Revision ID: a83e4dd22672 +Revises: 9001356f0063 +Create Date: 2024-06-27 01:04:34.974520 + +""" + +import sqlalchemy as sa +from alembic import op +from sqlalchemy import table, column +from sqlalchemy.dialects import postgresql + +# revision identifiers, used by Alembic. +revision = "a83e4dd22672" +down_revision = "9001356f0063" +branch_labels = None +depends_on = None + + +def upgrade() -> None: + bind = op.get_bind() + dialect = bind.dialect.name + + if dialect == "postgresql": + op.execute( + """ + DO $$ + BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'userexpirestrategy') THEN + CREATE TYPE userexpirestrategy AS ENUM ('NEVER', 'FIXED_DATE', 'START_ON_FIRST_USE'); + END IF; + END $$; + """ + ) + op.add_column( + "users", + sa.Column( + "activated", + sa.Boolean(), + nullable=False, + server_default=sa.sql.true(), + ), + ) + op.add_column( + "users", + sa.Column( + "expire_strategy", + sa.Enum( + "NEVER", + "FIXED_DATE", + "START_ON_FIRST_USE", + name="userexpirestrategy", + ), + server_default="NEVER", + nullable=False, + ), + ) + + if dialect == "sqlite": + for old, new, type_ in [ + ("on_hold_timeout", "activation_deadline", sa.DateTime), + ("expire", "expire_date", sa.DateTime), + ("on_hold_expire_duration", "usage_duration", sa.Integer), + ]: + op.add_column("users", sa.Column(new, type_)) + + # Step 2: Copy data from the old column to the new column + op.execute(f"UPDATE users SET {new} = {old}") + + with op.batch_alter_table("users") as batch_op: + batch_op.drop_column(old) + else: + op.alter_column( + "users", "on_hold_timeout", new_column_name="activation_deadline" + ) + op.alter_column("users", "expire", new_column_name="expire_date") + op.alter_column( + "users", + "on_hold_expire_duration", + new_column_name="usage_duration", + ) + # ### end Alembic commands ### + users_table = table( + "users", + column("id", sa.Integer), + column("status", sa.String), + column("expire_date", sa.DateTime), + column("expire_strategy", sa.Enum(name="userexpirestrategy")), + ) + + connection = op.get_bind() + results = connection.execute( + sa.select( + users_table.c.id, users_table.c.status, users_table.c.expire_date + ) + ) + + for user in results: + status = user[1] + expire_date = user[2] + + if status == "on_hold": + expire_strategy = "START_ON_FIRST_USE" + elif expire_date: + expire_strategy = "FIXED_DATE" + else: + expire_strategy = "NEVER" + connection.execute( + users_table.update() + .where(users_table.c.id == user[0]) + .values(expire_strategy=expire_strategy) + ) + + op.drop_column("users", "status") + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column( + "users", + sa.Column( + "status", + postgresql.ENUM( + "active", "limited", "expired", "on_hold", name="userstatus" + ), + autoincrement=False, + nullable=False, + server_default="active", + ), + ) + op.alter_column( + "users", "activation_deadline", new_column_name="on_hold_timeout" + ) + op.alter_column( + "users", "usage_duration", new_column_name="on_hold_expire_duration" + ) + op.alter_column("users", "expire_date", new_column_name="expire") + op.drop_column("users", "expire_strategy") + op.drop_column("users", "activated") + # ### end Alembic commands ### diff --git a/app/db/models.py b/app/db/models.py index 291c08d..4a92a9a 100644 --- a/app/db/models.py +++ b/app/db/models.py @@ -15,7 +15,10 @@ from sqlalchemy import ( Table, UniqueConstraint, JSON, + and_, + func, ) +from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.orm import relationship from sqlalchemy.sql.expression import text @@ -29,8 +32,9 @@ from app.models.proxy import ( ) from app.models.user import ( ReminderType, - UserDataLimitResetStrategy, + UserDataUsageResetStrategy, UserStatus, + UserExpireStrategy, ) @@ -87,6 +91,7 @@ class User(Base): id = Column(Integer, primary_key=True) username = Column(String(32), unique=True, index=True) key = Column(String(64), unique=True) + activated = Column(Boolean, nullable=False, default=True) enabled = Column( Boolean, nullable=False, @@ -106,10 +111,6 @@ class User(Base): viewonly=True, distinct_target_key=True, ) - # proxies = relationship("Proxy", back_populates="user", cascade="all, delete-orphan") - status = Column( - Enum(UserStatus), nullable=False, default=UserStatus.active - ) used_traffic = Column(BigInteger, default=0) lifetime_used_traffic = Column( BigInteger, default=0, server_default="0", nullable=False @@ -127,13 +128,20 @@ class User(Base): ) data_limit = Column(BigInteger) data_limit_reset_strategy = Column( - Enum(UserDataLimitResetStrategy), + Enum(UserDataUsageResetStrategy), nullable=False, - default=UserDataLimitResetStrategy.no_reset, + default=UserDataUsageResetStrategy.no_reset, ) ip_limit = Column(Integer, nullable=False, default=-1) settings = Column(String(1024)) - expire = Column(DateTime) + expire_strategy = Column( + Enum(UserExpireStrategy), + nullable=False, + default=UserExpireStrategy.NEVER, + ) + expire_date = Column(DateTime) + usage_duration = Column(BigInteger) + activation_deadline = Column(DateTime) admin_id = Column(Integer, ForeignKey("admins.id")) admin = relationship("Admin", back_populates="users") sub_updated_at = Column(DateTime) @@ -141,14 +149,50 @@ class User(Base): created_at = Column(DateTime, default=datetime.utcnow) note = Column(String(500)) online_at = Column(DateTime) - on_hold_expire_duration = Column(BigInteger) - on_hold_timeout = Column(DateTime) edit_at = Column(DateTime) @property def service_ids(self): return [service.id for service in self.services] + @hybrid_property + def expired(self): + if self.expire_strategy == "fixed_date": + return self.expire_date < datetime.utcnow() + return False + + @expired.expression + def expired(cls): + return and_( + cls.expire_strategy == "fixed_date", cls.expire_date < func.now() + ) + + @hybrid_property + def data_limit_reached(self): + if self.data_limit is not None: + return self.used_traffic >= self.data_limit + return False + + @data_limit_reached.expression + def data_limit_reached(cls): + return and_( + cls.data_limit.isnot(None), cls.used_traffic >= cls.data_limit + ) + + @hybrid_property + def is_active(self): + return ( + self.enabled and not self.expired and not self.data_limit_reached + ) + + @is_active.expression + def is_active(cls): + return and_(cls.enabled == True, ~cls.expired, ~cls.data_limit_reached) + + @property + def status(self): + return UserStatus.ACTIVE if self.is_active else UserStatus.INACTIVE + class Inbound(Base): __tablename__ = "inbounds" diff --git a/app/marzneshin.py b/app/marzneshin.py index db50858..5552947 100644 --- a/app/marzneshin.py +++ b/app/marzneshin.py @@ -1,10 +1,9 @@ import asyncio import logging +from contextlib import asynccontextmanager from datetime import datetime as dt from datetime import timedelta as td - from typing import AsyncGenerator -from contextlib import asynccontextmanager from apscheduler.schedulers.asyncio import AsyncIOScheduler from fastapi import FastAPI, Request, status @@ -82,7 +81,7 @@ app.add_middleware( scheduler = AsyncIOScheduler(timezone="UTC") scheduler.add_job(record_user_usages, "interval", coalesce=True, seconds=30) scheduler.add_job( - review_users, "interval", seconds=600, coalesce=True, max_instances=1 + review_users, "interval", seconds=30, coalesce=True, max_instances=1 ) scheduler.add_job(reset_user_data_usage, "interval", coalesce=True, hours=1) scheduler.add_job( diff --git a/app/marznode/database.py b/app/marznode/database.py index ac00079..66fff55 100644 --- a/app/marznode/database.py +++ b/app/marznode/database.py @@ -1,14 +1,11 @@ from app.db import crud, GetDB from app.models.node import NodeStatus -from app.models.user import UserStatus class MarzNodeDB: def list_users(self): with GetDB() as db: - relations = crud.get_node_users( - db, self.id, [UserStatus.active, UserStatus.on_hold] - ) + relations = crud.get_node_users(db, self.id) users = dict() for rel in relations: if not users.get(rel[0]): diff --git a/app/marznode/operations.py b/app/marznode/operations.py index 1443a64..db6f987 100644 --- a/app/marznode/operations.py +++ b/app/marznode/operations.py @@ -6,32 +6,32 @@ from app import marznode from .grpcio import MarzNodeGRPCIO from .grpclib import MarzNodeGRPCLIB from ..models.node import NodeConnectionBackend -from ..models.user import UserStatus if TYPE_CHECKING: from app.db import User as DBUser -async def update_user(user: "DBUser", old_inbounds: set | None = None): - """updates a user on all nodes - even though this isn't efficient it is extremely precise""" +def update_user( + user: "DBUser", old_inbounds: set | None = None, remove: bool = False +): + """updates a user on all related nodes""" if old_inbounds is None: old_inbounds = set() node_inbounds = defaultdict(list) - if user.status in (UserStatus.on_hold, UserStatus.active): + if remove: for inb in user.inbounds: - node_inbounds[inb.node_id].append(inb.tag) + node_inbounds[inb.node_id] else: for inb in user.inbounds: - node_inbounds[inb.node_id] + node_inbounds[inb.node_id].append(inb.tag) for inb in old_inbounds: node_inbounds[inb[0]] for node_id, tags in node_inbounds.items(): if marznode.nodes.get(node_id): - asyncio.create_task( + asyncio.ensure_future( marznode.nodes[node_id].update_user(user=user, inbounds=tags) ) @@ -41,7 +41,9 @@ async def remove_user(user: "DBUser"): for node_id in node_ids: if marznode.nodes.get(node_id): - await marznode.nodes[node_id].update_user(user=user, inbounds=[]) + asyncio.ensure_future( + marznode.nodes[node_id].update_user(user=user, inbounds=[]) + ) async def remove_node(node_id: int): diff --git a/app/models/user.py b/app/models/user.py index 6655bd2..2c84436 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -1,10 +1,9 @@ import secrets from datetime import datetime from enum import Enum -from typing import List, Union, Annotated, Literal +from typing import Annotated from pydantic import ( - field_validator, ConfigDict, BaseModel, Field, @@ -24,23 +23,11 @@ class ReminderType(str, Enum): class UserStatus(str, Enum): - active = "active" - on_hold = "on_hold" - limited = "limited" - expired = "expired" + ACTIVE = "active" + INACTIVE = "inactive" -class UserStatusModify(str, Enum): - active = "active" - on_hold = "on_hold" - - -class UserStatusCreate(str, Enum): - active = "active" - on_hold = "on_hold" - - -class UserDataLimitResetStrategy(str, Enum): +class UserDataUsageResetStrategy(str, Enum): no_reset = "no_reset" day = "day" week = "week" @@ -48,129 +35,97 @@ class UserDataLimitResetStrategy(str, Enum): year = "year" +class UserExpireStrategy(str, Enum): + NEVER = "never" + FIXED_DATE = "fixed_date" + START_ON_FIRST_USE = "start_on_first_use" + + class User(BaseModel): id: int | None = None username: Annotated[ str, StringConstraints(to_lower=True, pattern=USERNAME_REGEXP) ] - expire: Union[datetime, None, Literal[0]] = Field(None) + expire_strategy: UserExpireStrategy + expire_date: datetime | None = Field(None) + usage_duration: int | None = Field(None) + activation_deadline: datetime | None = Field(None) key: str = Field(default_factory=lambda: secrets.token_hex(16)) data_limit: int | None = Field( ge=0, default=None, description="data_limit can be 0 or greater" ) - enabled: bool = Field(default=True) - data_limit_reset_strategy: UserDataLimitResetStrategy = ( - UserDataLimitResetStrategy.no_reset + data_limit_reset_strategy: UserDataUsageResetStrategy = ( + UserDataUsageResetStrategy.no_reset ) note: Annotated[str, Field(max_length=500)] | None = None sub_updated_at: datetime | None = Field(None) sub_last_user_agent: str | None = Field(None) online_at: datetime | None = Field(None) - on_hold_expire_duration: int | None = Field(None) - on_hold_timeout: datetime | None = Field(None) model_config = ConfigDict(from_attributes=True) class UserCreate(User): - status: UserStatusCreate = Field(UserStatusCreate.active) service_ids: list[int] = Field([]) model_config = ConfigDict( json_schema_extra={ "example": { "username": "user1234", "services": [1, 2, 3], - "expire": "2023-11-03T20:30:00", + "expire_strategy": "start_on_first_use", + "usage_duration": 86400 * 14, + "activation_deadline": "2024-11-03T20:30:00", "data_limit": 0, "data_limit_reset_strategy": "no_reset", - "status": "active", "note": "", - "on_hold_timeout": "2023-11-03T20:30:00", - "on_hold_expire_duration": 0, } } ) @model_validator(mode="after") def validate_expiry(self): - if self.status == UserStatusCreate.on_hold: - if not self.on_hold_expire_duration: + if self.expire_strategy == UserExpireStrategy.START_ON_FIRST_USE: + if not self.usage_duration: raise ValueError( - "User cannot be on hold without a valid on_hold_expire_duration." + "User expire_strategy can not be start_on_first_use without a valid usage_duration." ) - if self.expire: - raise ValueError( - "User cannot be on hold with specified expire." - ) - elif self.status == UserStatusCreate.active and ( - self.on_hold_expire_duration or self.on_hold_timeout + elif ( + self.expire_strategy == UserExpireStrategy.FIXED_DATE + and not self.expire_date ): raise ValueError( - "on hold parameters set when user status isn't on_hold." + "User expire_strategy can not be fixed_date without a valid expire date." ) return self - @field_validator("expire") - @classmethod - def validate_expire(cls, v: Union[datetime, None, Literal[0]]): - if isinstance(v, datetime) and (v.tzinfo is not None): - raise ValueError( - "Expire date should be offset naive, and preferably in utc timezone." - ) - if isinstance(v, datetime) and v < datetime.utcnow(): - raise ValueError( - "Expire date should be in the future, not in the past." - ) - return v - -class UserModify(User): - status: UserStatusModify | None = Field(None) +class UserModify(UserCreate): service_ids: list[int] | None = Field(None) - data_limit_reset_strategy: UserDataLimitResetStrategy | None = Field(None) + data_limit_reset_strategy: UserDataUsageResetStrategy | None = Field(None) model_config = ConfigDict( json_schema_extra={ "example": { "username": "mammad1234", - "services": [1, 2, 3], - "expire": 0, + "service_ids": [1, 2, 3], + "expire_strategy": "fixed_date", + "expire_date": "2023-11-03T20:30:00", "data_limit": 0, "data_limit_reset_strategy": "no_reset", - "status": "active", "note": "", - "on_hold_timeout": "2023-11-03T20:30:00", - "on_hold_expire_duration": 0, } } ) - @model_validator(mode="after") - def validate_expiry(self): - if self.on_hold_expire_duration and self.expire: - raise ValueError( - "can't set both expire and on hold expire at the same time." - ) - return self - - @field_validator("expire") - @classmethod - def validate_expire(cls, v: Union[datetime, None, Literal[0]]): - if isinstance(v, datetime) and v.tzinfo is not None: - raise ValueError( - "Expire date should be offset naive, and preferably in utc timezone." - ) - if isinstance(v, datetime) and v < datetime.utcnow(): - raise ValueError( - "Expire date should be in the future, not in the past." - ) - return v - class UserResponse(User): id: int - status: UserStatus + activated: bool + is_active: bool + expired: bool + data_limit_reached: bool + enabled: bool used_traffic: int - lifetime_used_traffic: int = 0 + lifetime_used_traffic: int created_at: datetime service_ids: list[int] @@ -185,11 +140,11 @@ class UserResponse(User): class UserUsageResponse(BaseModel): - node_id: Union[int, None] = None + node_id: int | None = None node_name: str used_traffic: int class UserUsagesResponse(BaseModel): username: str - usages: List[UserUsageResponse] + usages: list[UserUsageResponse] diff --git a/app/routes/service.py b/app/routes/service.py index 6873ae1..9a384bf 100644 --- a/app/routes/service.py +++ b/app/routes/service.py @@ -110,9 +110,10 @@ async def modify_service( ) else: for user in response.users: - await marznode.operations.update_user( - user, old_inbounds=old_inbounds - ) + if user.activated: + marznode.operations.update_user( + user, old_inbounds=old_inbounds + ) return response diff --git a/app/routes/system.py b/app/routes/system.py index aee3cf3..81d2cb1 100644 --- a/app/routes/system.py +++ b/app/routes/system.py @@ -7,7 +7,7 @@ from app.dependencies import DBDep, AdminDep, SudoAdminDep from app.models.node import NodeStatus from app.models.settings import SubscriptionSettings, TelegramSettings from app.models.system import UsersStats, NodesStats, AdminsStats -from app.models.user import UserStatus +from app.models.user import UserExpireStrategy router = APIRouter(tags=["System"], prefix="/system") @@ -67,24 +67,22 @@ def get_users_stats(db: DBDep, admin: AdminDep): db, admin=admin if not admin.is_sudo else None ), active=crud.get_users_count( - db, - admin=admin if not admin.is_sudo else None, - status=UserStatus.active, + db, admin=admin if not admin.is_sudo else None, is_active=True ), on_hold=crud.get_users_count( db, admin=admin if not admin.is_sudo else None, - status=UserStatus.on_hold, + expire_strategy=UserExpireStrategy.START_ON_FIRST_USE, ), expired=crud.get_users_count( db, admin=admin if not admin.is_sudo else None, - status=UserStatus.expired, + expired=True, ), limited=crud.get_users_count( db, admin=admin if not admin.is_sudo else None, - status=UserStatus.limited, + data_limit_reached=True, ), online=crud.get_users_count( db, admin=admin if not admin.is_sudo else None, online=True diff --git a/app/routes/user.py b/app/routes/user.py index 33c5825..dd31d12 100644 --- a/app/routes/user.py +++ b/app/routes/user.py @@ -1,6 +1,6 @@ import asyncio import logging -from datetime import datetime, timezone +from datetime import datetime, timedelta from enum import Enum import sqlalchemy @@ -25,7 +25,6 @@ from app.models.user import ( UserCreate, UserModify, UserResponse, - UserStatus, UserUsagesResponse, ) from app.utils import report @@ -35,11 +34,21 @@ router = APIRouter(prefix="/users", tags=["User"]) class UsersSortingOptions(str, Enum): - username = "username" - used_traffic = "used_traffic" - data_limit = "data_limit" - expire = "expire" - created_at = "created_at" + USERNAME = "username" + USED_TRAFFIC = "used_traffic" + DATA_LIMIT = "data_limit" + EXPIRE_DATE = "expire_date" + CREATED_AT = "created_at" + + +user_filters = [ + "username", + "is_active", + "activated", + "expired", + "data_limit_reached", + "enabled", +] @router.get("", response_model=Page[UserResponse]) @@ -47,9 +56,13 @@ def get_users( db: DBDep, admin: AdminDep, username: list[str] = Query(None), - status: list[UserStatus] = Query(None), order_by: UsersSortingOptions = Query(None), descending: bool = Query(False), + is_active: bool | None = Query(None), + activated: bool | None = Query(None), + expired: bool | None = Query(None), + data_limit_reached: bool | None = Query(None), + enabled: bool | None = Query(None), ): """ Filters users based on the options @@ -60,14 +73,18 @@ def get_users( admin = dbadmin if not admin.is_sudo else None - if username: - if len(username) > 1: - query = query.filter(User.username.in_(username)) - else: - query = query.filter(User.username.ilike(f"%{username[0]}%")) - - if status: - query = query.filter(User.status.in_(status)) + for name in user_filters: + value = locals().get(name) + if value is not None: + if name == "username": + if len(username) > 1: + query = query.filter(User.username.in_(username)) + else: + query = query.filter( + User.username.ilike(f"%{username[0]}%") + ) + else: + query = query.filter(getattr(User, name) == value) if admin: query = query.filter(User.admin == admin) @@ -87,7 +104,7 @@ async def add_user(new_user: UserCreate, db: DBDep, admin: AdminDep): Add a new user - **username** must have 3 to 32 characters and is allowed to contain a-z, 0-9, and underscores in between - - **expire** must be a UTC timestamp + - **expire_date** must be a datetime - **data_limit** must be in Bytes, e.g. 1073741824B = 1GB - **services** list of service ids """ @@ -101,8 +118,8 @@ async def add_user(new_user: UserCreate, db: DBDep, admin: AdminDep): raise HTTPException(status_code=409, detail="User already exists") user = UserResponse.model_validate(db_user) - await marznode.operations.update_user(user=db_user) - asyncio.create_task( + marznode.operations.update_user(user=db_user) + asyncio.ensure_future( report.user_created(user=user, user_id=db_user.id, by=admin) ) logger.info("New user `%s` added", db_user.username) @@ -121,7 +138,7 @@ async def reset_users_data_usage(db: DBDep, admin: SudoAdminDep): @router.delete("/expired") -def delete_expired(passed_time: int, db: DBDep, admin: AdminDep): +async def delete_expired(passed_time: int, db: DBDep, admin: AdminDep): """ Delete expired users - **passed_time** must be a timestamp @@ -132,12 +149,12 @@ def delete_expired(passed_time: int, db: DBDep, admin: AdminDep): db_users = crud.get_users( db=db, - status=[UserStatus.expired, UserStatus.limited], + expired=True, admin=dbadmin if not admin.is_sudo else None, ) - current_time = int(datetime.now(timezone.utc).timestamp()) - expiration_threshold = current_time - passed_time + current_time = datetime.utcnow() + expiration_threshold = current_time - timedelta(seconds=passed_time) expired_users = [ user for user in db_users @@ -147,9 +164,11 @@ def delete_expired(passed_time: int, db: DBDep, admin: AdminDep): raise HTTPException(status_code=404, detail="No expired user found.") for db_user in expired_users: + if db_user.activated and not db_user.is_active: + marznode.operations.update_user(db_user) crud.remove_user(db, db_user) - asyncio.create_task( + asyncio.ensure_future( report.user_deleted(username=db_user.username, by=admin) ) @@ -173,46 +192,52 @@ async def modify_user( """ Modify a user - - set **expire** to 0 to make the user unlimited in time, null for no change - set **data_limit** to 0 to make the user unlimited in data, null for no change """ - old_status = db_user.status - status_change = bool( - modifications.status and modifications.status != db_user.status - ) + active_before = db_user.is_active old_inbounds = {(i.node_id, i.protocol, i.tag) for i in db_user.inbounds} new_user = crud.update_user(db, db_user, modifications) + active_after = new_user.is_active new_inbounds = {(i.node_id, i.protocol, i.tag) for i in new_user.inbounds} - user = UserResponse.model_validate(db_user) inbound_change = old_inbounds != new_inbounds + if ( - inbound_change - and user.enabled - and user.status in {UserStatus.active, UserStatus.on_hold} - ): - await marznode.operations.update_user(new_user, old_inbounds) + inbound_change and new_user.is_active + ) or active_before != active_after: + marznode.operations.update_user( + new_user, old_inbounds, remove=~db_user.is_active + ) + db_user.activated = db_user.is_active + db.commit() - asyncio.create_task(report.user_updated(user=user, by=admin)) + asyncio.ensure_future( + report.user_updated( + user=UserResponse.model_validate(db_user), by=admin + ) + ) - logger.info("User `%s` modified", user.username) + logger.info("User `%s` modified", db_user.username) - if status_change: - asyncio.create_task( + if active_before != active_after: + asyncio.ensure_future( report.status_change( - username=user.username, status=user.status, user=user, by=admin + username=db_user.username, + activation=db_user.activated, + user=UserResponse.model_validate(db_user), + by=admin, ) ) logger.info( - "User `%s` status changed from `%s` to `%s`", - user.username, - old_status, - user.status, + "User `%s` activation changed from `%s` to `%s`", + db_user.username, + active_before, + active_after, ) - return user + return db_user @router.delete("/{username}") @@ -220,12 +245,12 @@ async def remove_user(db_user: UserDep, db: DBDep, admin: AdminDep): """ Remove a user """ - await marznode.operations.remove_user(db_user) + marznode.operations.update_user(db_user, remove=True) crud.remove_user(db, db_user) db.flush() - asyncio.create_task( + asyncio.ensure_future( report.user_deleted(username=db_user.username, by=admin) ) logger.info("User %s deleted", db_user.username) @@ -254,17 +279,16 @@ async def reset_user_data_usage(db_user: UserDep, db: DBDep, admin: AdminDep): """ Reset user data usage """ - previous_status = db_user.status + was_active = db_user.status db_user = crud.reset_user_data_usage(db, db_user) - if ( - db_user.status == UserStatus.active - and previous_status == UserStatus.limited - ): - await marznode.operations.update_user(db_user) + if db_user.is_active and not was_active: + marznode.operations.update_user(db_user) + db_user.activated = True + db.commit() user = UserResponse.model_validate(db_user) - asyncio.create_task(report.user_data_usage_reset(user=user, by=admin)) + asyncio.ensure_future(report.user_data_usage_reset(user=user, by=admin)) logger.info("User `%s`'s usage was reset", db_user.username) @@ -279,9 +303,10 @@ async def enable_user(db_user: UserDep, db: DBDep, admin: AdminDep): if db_user.enabled: raise HTTPException(409, "User is already enabled") db_user.enabled = True + db_user.activated = True db.commit() - await marznode.operations.update_user(db_user) + marznode.operations.update_user(db_user) user = UserResponse.model_validate(db_user) @@ -298,9 +323,10 @@ async def disable_user(db_user: UserDep, db: DBDep, admin: AdminDep): if not db_user.enabled: raise HTTPException(409, "User is not enabled") db_user.enabled = False + db_user.activated = False db.commit() - await marznode.operations.remove_user(db_user) + marznode.operations.update_user(db_user, remove=True) user = UserResponse.model_validate(db_user) @@ -318,11 +344,13 @@ async def revoke_user_subscription( """ db_user = crud.revoke_user_sub(db, db_user) - if db_user.status in [UserStatus.active, UserStatus.on_hold]: - await marznode.operations.remove_user(db_user) - await marznode.operations.update_user(db_user) + if db_user.is_active: + marznode.operations.update_user(db_user, remove=True) + marznode.operations.update_user(db_user) user = UserResponse.model_validate(db_user) - asyncio.create_task(report.user_subscription_revoked(user=user, by=admin)) + asyncio.ensure_future( + report.user_subscription_revoked(user=user, by=admin) + ) logger.info("User %s subscription revoked", db_user.username) diff --git a/app/tasks/reset_user_data_usage.py b/app/tasks/reset_user_data_usage.py index 3e009e5..57a2fdb 100644 --- a/app/tasks/reset_user_data_usage.py +++ b/app/tasks/reset_user_data_usage.py @@ -3,15 +3,15 @@ from datetime import datetime from app import marznode from app.db import crud, GetDB, get_users -from app.models.user import UserDataLimitResetStrategy, UserStatus +from app.models.user import UserDataUsageResetStrategy logger = logging.getLogger(__name__) reset_strategy_to_days = { - UserDataLimitResetStrategy.day.value: 1, - UserDataLimitResetStrategy.week.value: 7, - UserDataLimitResetStrategy.month.value: 30, - UserDataLimitResetStrategy.year.value: 365, + UserDataUsageResetStrategy.day.value: 1, + UserDataUsageResetStrategy.week.value: 7, + UserDataUsageResetStrategy.month.value: 30, + UserDataUsageResetStrategy.year.value: 365, } @@ -21,10 +21,10 @@ async def reset_user_data_usage(): for user in get_users( db, reset_strategy=[ - UserDataLimitResetStrategy.day.value, - UserDataLimitResetStrategy.week.value, - UserDataLimitResetStrategy.month.value, - UserDataLimitResetStrategy.year.value, + UserDataUsageResetStrategy.day.value, + UserDataUsageResetStrategy.week.value, + UserDataUsageResetStrategy.month.value, + UserDataUsageResetStrategy.year.value, ], ): last_reset_time = user.traffic_reset_at or user.created_at @@ -35,14 +35,12 @@ async def reset_user_data_usage(): if not (now - last_reset_time).days >= num_days_to_reset: continue - old_status = user.status + was_active = user.is_active crud.reset_user_data_usage(db, user) # make user active if limited on usage reset - if ( - user.enabled - and user.status == UserStatus.active - and old_status == UserStatus.limited - ): - await marznode.operations.update_user(user) - - logger.info(f'User data usage reset for User "{user.username}"') + if user.is_active and not was_active: + marznode.operations.update_user(user) + user.activated = True + db.commit() + + logger.info("User data usage reset for User `%s`", user.username) diff --git a/app/tasks/review_users.py b/app/tasks/review_users.py index 643e0de..97bc044 100644 --- a/app/tasks/review_users.py +++ b/app/tasks/review_users.py @@ -1,91 +1,37 @@ import asyncio import logging -from datetime import datetime +from datetime import datetime, timedelta from typing import TYPE_CHECKING -from sqlalchemy.orm import Session - from app import marznode -from app.config.env import ( - NOTIFY_DAYS_LEFT, - NOTIFY_REACHED_USAGE_PERCENT, - WEBHOOK_ADDRESS, -) from app.db import ( GetDB, - get_notification_reminder, get_users, - start_user_expire, - update_user_status, ) -from app.models.user import ReminderType, UserResponse, UserStatus -from app.utils import report -from app.utils.helpers import ( - calculate_expiration_days, - calculate_usage_percent, +from app.models.user import ( + UserResponse, + UserExpireStrategy, ) +from app.utils import report if TYPE_CHECKING: - from app.db.models import User + pass logger = logging.getLogger(__name__) -def add_notification_reminders( - db: Session, user: "User", now: datetime = datetime.utcnow() -) -> None: - if user.data_limit: - usage_percent = calculate_usage_percent( - user.used_traffic, user.data_limit - ) - if (usage_percent >= NOTIFY_REACHED_USAGE_PERCENT) and ( - not get_notification_reminder(db, user.id, ReminderType.data_usage) - ): - report.data_usage_percent_reached( - db, - usage_percent, - UserResponse.model_validate(user), - user.id, - user.expire, - ) - - if user.expire and ((now - user.created_at).days >= NOTIFY_DAYS_LEFT): - expire_days = calculate_expiration_days(user.expire) - if (expire_days <= NOTIFY_DAYS_LEFT) and ( - not get_notification_reminder( - db, user.id, ReminderType.expiration_date - ) - ): - report.expire_days_reached( - db, - expire_days, - UserResponse.model_validate(user), - user.id, - user.expire, - ) - - async def review_users(): now = datetime.utcnow() with GetDB() as db: - for user in get_users(db, status=UserStatus.active): - - limited = user.data_limit and user.used_traffic >= user.data_limit - expired = user.expire and user.expire <= now - if limited: - status = UserStatus.limited - elif expired: - status = UserStatus.expired - else: - if WEBHOOK_ADDRESS: - add_notification_reminders(db, user, now) - continue - - await marznode.operations.remove_user(user) - update_user_status(db, user, status) - - asyncio.create_task( + for user in get_users(db, activated=True, is_active=False): + """looking for expired/to be limited users who are still active""" + + marznode.operations.update_user(user, remove=True) + user.activated = False + db.commit() + db.refresh(user) + asyncio.ensure_future( report.status_change( user.username, user.status, @@ -93,33 +39,42 @@ async def review_users(): ) ) - logger.info(f'User "{user.username}" status changed to {status}') - - for user in get_users(db, status=UserStatus.on_hold): - - if user.edit_at: - base_time = user.edit_at - else: - base_time = user.created_at - - # Check if the user is online After or at 'base_time' - if user.online_at and base_time <= user.online_at: - status = UserStatus.active - - elif user.on_hold_timeout and (user.on_hold_timeout <= now): - # If the user didn't connect within the timeout period, change status to "Active" - status = UserStatus.active + logger.info( + "User `%s` activation state changed to `%s`", + user.username, + str(user.activated), + ) - else: + for user in get_users( + db, + expire_strategy=UserExpireStrategy.START_ON_FIRST_USE, + is_active=True, + ): + """looking for to be activated, on hold users""" + base_time = user.edit_at or user.created_at + + # Check if the user is online After or at 'base_time' or... + # If the user didn't connect until activation_deadline; change status to "Active" + if not ( + (user.online_at and base_time <= user.online_at) + or ( + user.activation_deadline + and (user.activation_deadline <= now) + ) + ): continue - update_user_status(db, user, status) - start_user_expire(db, user) - asyncio.create_task( + user.expire_date = datetime.utcnow() + timedelta( + seconds=user.usage_duration + ) + user.expire_strategy = UserExpireStrategy.FIXED_DATE + db.commit() + db.refresh(user) + asyncio.ensure_future( report.status_change( user.username, user.status, UserResponse.model_validate(user), ) ) - logger.info(f"on hold user `{user.username}` has been activated") + logger.info("on hold user `%s` has been activated", user.username) diff --git a/app/templates/subscription/index.html b/app/templates/subscription/index.html index 539f26e..a16597b 100644 --- a/app/templates/subscription/index.html +++ b/app/templates/subscription/index.html @@ -35,17 +35,7 @@ color: white; } - .limited { - background-color: #F44336; - color: white; - } - - .expired { - background-color: #FF9800; - color: white; - } - - .disabled { + .inactive { background-color: #9E9E9E; color: white; } @@ -73,79 +63,81 @@ -

User Information

-

Username: {{ user.username }}

-

Status: {{ - user.status.value }}

-

Data Limit: {% if not user.data_limit %}∞{% else %}{{ user.data_limit | bytesformat }}{% endif %}

-

Data Used: {{ user.used_traffic | bytesformat }}{% if user.data_limit_reset_strategy != 'no_reset' %} (resets - every {{ user.data_limit_reset_strategy.value }}){% endif %}

-

Expiration Date: - {% if not user.expire %} - ∞ - {% else %} - {% set current_datetime = now() %} - {% set remaining_days = ((user.expire - current_datetime).days) %} - {{ user.expire | datetime }} ({{ remaining_days | int }} days - remaining) - {% endif %}

- - {% if user.status == 'active' or user.status == 'on_hold' %} -

Links:

- -
-
- -
-
+

User Information

+

Username: {{ user.username }} {{ + "Active" if user.is_active else "Inactive"}}

+ +

Data Used: {{ user.used_traffic | bytesformat }}{% if user.data_limit_reset_strategy != 'no_reset' %} (resets + every {{ user.data_limit_reset_strategy.value }}){% endif %}

+

Data Limit: {% if not user.data_limit %}∞{% else %}{{ user.data_limit | bytesformat }}{% endif %}

+

Expiration Date: + {% if user.expire_strategy == "never" %} + never + {% elif user.expire_strategy == "start_on_first_use" %} + {{ user.usage_duration // 3600 // 24}} days after the first use + {% else %} + {% set current_datetime = now() %} + {% set remaining_days = ((user.expire_date - current_datetime).days) %} + {{ user.expire_date | datetime }} ({{ remaining_days | int }} days + remaining) + {% endif %}

+ +{% if user.is_active %} +

Links:

+ +
+
+
- {% endif %} - - + }); + function closeQrPopup() { + document.getElementById('qrPopup').style.display = 'none'; + } + \ No newline at end of file diff --git a/app/utils/report.py b/app/utils/report.py index 4cdbea4..a217532 100644 --- a/app/utils/report.py +++ b/app/utils/report.py @@ -3,7 +3,6 @@ from typing import Optional from app import telegram from app.db import Session, create_notification_reminder -from app.db.models import UserStatus from app.models.admin import Admin from app.models.user import ReminderType, UserResponse from app.utils.notification import ( @@ -14,7 +13,6 @@ from app.utils.notification import ( UserDataUsageReset, UserDeleted, UserEnabled, - UserExpired, UserLimited, UserSubscriptionRevoked, UserUpdated, @@ -24,7 +22,7 @@ from app.utils.notification import ( async def status_change( username: str, - status: UserStatus, + activation: bool, user: UserResponse, by: Optional[Admin] = None, ) -> None: @@ -32,23 +30,15 @@ async def status_change( await telegram.report_status_change(username, status) except Exception: pass - if status == UserStatus.limited: + if activation is False: await notify( UserLimited( username=username, - action=Notification.Type.user_limited, + action=Notification.Type.user_disabled, user=user, ) ) - elif status == UserStatus.expired: - await notify( - UserExpired( - username=username, - action=Notification.Type.user_expired, - user=user, - ) - ) - elif status == UserStatus.active: + elif activation is True: await notify( UserEnabled( username=username, @@ -64,7 +54,7 @@ async def user_created(user: UserResponse, user_id: int, by: Admin) -> None: user_id=user_id, username=user.username, by=by.username, - expire_date=user.expire, + expire_date=user.expire_date, data_limit=user.data_limit, # proxies=[] services=user.services, @@ -84,7 +74,7 @@ async def user_updated(user: UserResponse, by: Admin) -> None: try: await telegram.report_user_modification( username=user.username, - expire_date=user.expire, + expire_date=user.expire_date, data_limit=user.data_limit, services=user.services, by=by.username, diff --git a/app/utils/share.py b/app/utils/share.py index f504d65..9ad3837 100644 --- a/app/utils/share.py +++ b/app/utils/share.py @@ -27,8 +27,7 @@ from app.db import GetDB, crud from app.models.proxy import ( InboundHostSecurity, ) -from app.models.user import UserResponse -from app.models.user import UserStatus +from app.models.user import UserResponse, UserExpireStrategy from app.utils.keygen import gen_uuid, gen_password from app.utils.system import get_public_ip, readable_size @@ -36,10 +35,7 @@ SERVER_IP = get_public_ip() STATUS_EMOJIS = { "active": "✅", - "expired": "⌛️", - "limited": "🪫", - "disabled": "❌", - "on_hold": "🔌", + "inactive": "❌", } subscription_handlers = { @@ -118,12 +114,11 @@ def format_time_left(seconds_left: int) -> str: def setup_format_variables(extra_data: dict) -> dict: + expire_strategy = extra_data.get("expire_strategy") + expire_datetime = extra_data.get("expire_date") + usage_duration = extra_data.get("usage_duration") - user_status = extra_data.get("status") - expire_datetime = extra_data.get("expire") - on_hold_expire_duration = extra_data.get("on_hold_expire_duration") - - if user_status != UserStatus.on_hold: + if expire_strategy != UserExpireStrategy.START_ON_FIRST_USE: if expire_datetime is not None: seconds_left = (expire_datetime - dt.utcnow()).total_seconds() expire_date = expire_datetime.date() @@ -135,24 +130,15 @@ def setup_format_variables(extra_data: dict) -> dict: days_left = (expire_datetime - dt.utcnow()).days + 1 time_left = format_time_left(seconds_left) else: - days_left = "∞" - time_left = "∞" - expire_date = "∞" - jalali_expire_date = "∞" + days_left, time_left, expire_date, jalali_expire_date = "∞" * 4 else: - if ( - on_hold_expire_duration is not None - and on_hold_expire_duration >= 0 - ): - days_left = timedelta(seconds=on_hold_expire_duration).days - time_left = format_time_left(on_hold_expire_duration) + if usage_duration is not None and usage_duration >= 0: + days_left = timedelta(seconds=usage_duration).days + time_left = format_time_left(usage_duration) expire_date = "-" jalali_expire_date = "-" else: - days_left = "∞" - time_left = "∞" - expire_date = "∞" - jalali_expire_date = "∞" + days_left, time_left, expire_date, jalali_expire_date = "∞" * 4 if extra_data.get("data_limit"): data_limit = readable_size(extra_data["data_limit"]) diff --git a/dashboard/.eslintrc.cjs b/dashboard/.eslintrc.cjs index 7a02611..ce7d448 100644 --- a/dashboard/.eslintrc.cjs +++ b/dashboard/.eslintrc.cjs @@ -1,14 +1,15 @@ module.exports = { - root: true, - env: { browser: true, es2020: true }, - extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:react-hooks/recommended', 'plugin:storybook/recommended'], - ignorePatterns: ['dist', '.eslintrc.cjs'], - parser: '@typescript-eslint/parser', - plugins: ['react-refresh'], - rules: { - '@typescript-eslint/unused-disable-directives': ['off'], - '@typescript-eslint/ban-ts-comment': ['off'], - '@typescript-eslint/no-explicit-any': ['off'], - 'react-refresh/only-export-components': ['off'], - }, + root: true, + env: { browser: true, es2020: true }, + extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:react-hooks/recommended', 'plugin:storybook/recommended'], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parser: '@typescript-eslint/parser', + plugins: ['eslint-plugin-react-compiler', 'react-refresh'], + rules: { + 'react-compiler/react-compiler': "off", + '@typescript-eslint/unused-disable-directives': ['off'], + '@typescript-eslint/ban-ts-comment': ['off'], + '@typescript-eslint/no-explicit-any': ['off'], + 'react-refresh/only-export-components': ['off'], + }, }; diff --git a/dashboard/package.json b/dashboard/package.json index 695f065..d22bed8 100644 --- a/dashboard/package.json +++ b/dashboard/package.json @@ -77,6 +77,7 @@ "cmdk": "^1.0.0", "date-fns": "^3.6.0", "dayjs": "^1.11.11", + "eslint-plugin-react-compiler": "0.0.0-experimental-0998c1e-20240625", "framer-motion": "^11.2.10", "i18next": "^23.11.5", "i18next-browser-languagedetector": "^7.2.1", diff --git a/dashboard/pnpm-lock.yaml b/dashboard/pnpm-lock.yaml index ae277d4..233477d 100644 --- a/dashboard/pnpm-lock.yaml +++ b/dashboard/pnpm-lock.yaml @@ -16,13 +16,13 @@ importers: version: 6.10.2 '@dnd-kit/core': specifier: ^6.1.0 - version: 6.1.0(react-dom@18.3.1)(react@18.3.1) + version: 6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@dnd-kit/modifiers': specifier: ^7.0.0 - version: 7.0.0(@dnd-kit/core@6.1.0)(react@18.3.1) + version: 7.0.0(@dnd-kit/core@6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@dnd-kit/sortable': specifier: ^8.0.0 - version: 8.0.0(@dnd-kit/core@6.1.0)(react@18.3.1) + version: 8.0.0(@dnd-kit/core@6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@dnd-kit/utilities': specifier: ^3.2.2 version: 3.2.2(react@18.3.1) @@ -31,88 +31,88 @@ importers: version: 2.1.3(react@18.3.1) '@hookform/resolvers': specifier: ^3.4.2 - version: 3.4.2(react-hook-form@7.51.5) + version: 3.4.2(react-hook-form@7.51.5(react@18.3.1)) '@kodingdotninja/use-tailwind-breakpoint': specifier: ^0.0.5 version: 0.0.5(react@18.3.1) '@monaco-editor/react': specifier: ^4.6.0 - version: 4.6.0(monaco-editor@0.49.0)(react-dom@18.3.1)(react@18.3.1) + version: 4.6.0(monaco-editor@0.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/progress': specifier: ^2.0.30 - version: 2.0.30(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) + version: 2.0.30(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react': specifier: ^2.4.1 - version: 2.4.1(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.3) + version: 2.4.1(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.3) '@nextui-org/system': specifier: ^2.2.1 - version: 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + version: 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': specifier: ^2.2.5 version: 2.2.5(tailwindcss@3.4.3) '@radix-ui/react-accordion': specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-alert-dialog': specifier: ^1.0.5 - version: 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-aspect-ratio': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-checkbox': specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-collapsible': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dialog': specifier: ^1.0.5 - version: 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dropdown-menu': specifier: ^2.0.6 - version: 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-icons': specifier: ^1.3.0 version: 1.3.0(react@18.3.1) '@radix-ui/react-label': specifier: ^2.0.2 - version: 2.0.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 2.0.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-popover': specifier: ^1.0.7 - version: 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-progress': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-radio-group': specifier: ^1.1.3 - version: 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-scroll-area': specifier: ^1.0.5 - version: 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-select': specifier: ^2.0.0 - version: 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-separator': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': specifier: ^1.0.2 version: 1.0.2(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-switch': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tabs': specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-toggle': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-toggle-group': specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tooltip': specifier: ^1.0.7 - version: 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-hook/media-query': specifier: ^1.1.1 version: 1.1.1(react@18.3.1) @@ -133,22 +133,22 @@ importers: version: 5.40.1(react@18.3.1) '@tanstack/react-router': specifier: ^1.34.9 - version: 1.34.9(react-dom@18.3.1)(react@18.3.1) + version: 1.34.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-table': specifier: ^8.17.3 - version: 8.17.3(react-dom@18.3.1)(react@18.3.1) + version: 8.17.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@testing-library/jest-dom': specifier: ^6.4.5 - version: 6.4.5(jest@29.7.0)(vitest@1.6.0) + version: 6.4.5(@jest/globals@29.7.0)(jest@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0))(vitest@1.6.0(@types/node@20.14.1)(@vitest/ui@1.6.0)(jsdom@24.1.0)) '@testing-library/react': specifier: ^14.3.1 - version: 14.3.1(react-dom@18.3.1)(react@18.3.1) + version: 14.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@testing-library/user-event': specifier: ^14.5.2 - version: 14.5.2(@testing-library/dom@10.1.0) + version: 14.5.2(@testing-library/dom@9.3.4) '@uidotdev/usehooks': specifier: ^2.4.1 - version: 2.4.1(react-dom@18.3.1)(react@18.3.1) + version: 2.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@visx/group': specifier: ^3.3.0 version: 3.3.0(react@18.3.1) @@ -166,7 +166,7 @@ importers: version: 3.3.0(react@18.3.1) '@vitest/coverage-istanbul': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0) + version: 1.6.0(vitest@1.6.0(@types/node@20.14.1)(@vitest/ui@1.6.0)(jsdom@24.1.0)) class-variance-authority: specifier: ^0.7.0 version: 0.7.0 @@ -175,16 +175,19 @@ importers: version: 2.1.1 cmdk: specifier: ^1.0.0 - version: 1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) date-fns: specifier: ^3.6.0 version: 3.6.0 dayjs: specifier: ^1.11.11 version: 1.11.11 + eslint-plugin-react-compiler: + specifier: 0.0.0-experimental-0998c1e-20240625 + version: 0.0.0-experimental-0998c1e-20240625(eslint@8.57.0) framer-motion: specifier: ^11.2.10 - version: 11.2.10(react-dom@18.3.1)(react@18.3.1) + version: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) i18next: specifier: ^23.11.5 version: 23.11.5 @@ -202,7 +205,7 @@ importers: version: 0.359.0(react@18.3.1) next-themes: specifier: ^0.3.0 - version: 0.3.0(react-dom@18.3.1)(react@18.3.1) + version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ofetch: specifier: ^1.3.4 version: 1.3.4 @@ -223,22 +226,22 @@ importers: version: 7.51.5(react@18.3.1) react-i18next: specifier: ^14.1.2 - version: 14.1.2(i18next@23.11.5)(react-dom@18.3.1)(react@18.3.1) + version: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-qr-code: specifier: ^2.0.14 version: 2.0.14(react@18.3.1) react-resizable-panels: specifier: ^2.0.19 - version: 2.0.19(react-dom@18.3.1)(react@18.3.1) + version: 2.0.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-use-websocket: specifier: ^4.8.1 - version: 4.8.1(react-dom@18.3.1)(react@18.3.1) + version: 4.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) remirror: specifier: ^2.0.39 - version: 2.0.39(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) + version: 2.0.39(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0)(prettier@3.3.2) sonner: specifier: ^1.4.41 - version: 1.4.41(react-dom@18.3.1)(react@18.3.1) + version: 1.4.41(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwind-merge: specifier: ^2.3.0 version: 2.3.0 @@ -247,7 +250,7 @@ importers: version: 1.0.7(tailwindcss@3.4.3) vaul: specifier: ^0.9.1 - version: 0.9.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 0.9.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) zod: specifier: ^3.23.8 version: 3.23.8 @@ -260,16 +263,16 @@ importers: version: 1.5.0(react@18.3.1) '@hookform/devtools': specifier: ^4.3.1 - version: 4.3.1(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 4.3.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/addon-a11y': specifier: ^8.1.5 version: 8.1.5 '@storybook/addon-essentials': specifier: ^8.1.5 - version: 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/addon-interactions': specifier: ^8.1.5 - version: 8.1.5(jest@29.7.0)(vitest@1.6.0) + version: 8.1.5(@jest/globals@29.7.0)(jest@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0))(vitest@1.6.0(@types/node@20.14.1)(@vitest/ui@1.6.0)(jsdom@24.1.0)) '@storybook/addon-links': specifier: ^8.1.5 version: 8.1.5(react@18.3.1) @@ -278,25 +281,25 @@ importers: version: 8.1.5(react@18.3.1) '@storybook/blocks': specifier: ^8.1.5 - version: 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/react': specifier: ^8.1.5 - version: 8.1.5(prettier@3.3.2)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + version: 8.1.5(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) '@storybook/react-vite': specifier: ^8.1.5 - version: 8.1.5(prettier@3.3.2)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5)(vite@5.2.12) + version: 8.1.5(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.12(@types/node@20.14.1)) '@storybook/test': specifier: ^8.1.5 - version: 8.1.5(jest@29.7.0)(vitest@1.6.0) + version: 8.1.5(@jest/globals@29.7.0)(jest@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0))(vitest@1.6.0(@types/node@20.14.1)(@vitest/ui@1.6.0)(jsdom@24.1.0)) '@storybook/test-runner': specifier: ^0.18.2 - version: 0.18.2(@types/node@20.14.1)(prettier@3.3.2) + version: 0.18.2(@swc/helpers@0.5.11)(@types/node@20.14.1)(babel-plugin-macros@3.1.0)(prettier@3.3.2) '@tanstack/router-cli': specifier: ^1.34.8 version: 1.34.8 '@tanstack/router-vite-plugin': specifier: ^1.34.8 - version: 1.34.8(vite@5.2.12) + version: 1.34.8(vite@5.2.12(@types/node@20.14.1)) '@types/node': specifier: ^20.14.1 version: 20.14.1 @@ -311,13 +314,13 @@ importers: version: 18.3.0 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) '@vitejs/plugin-react-swc': specifier: ^3.7.0 - version: 3.7.0(vite@5.2.12) + version: 3.7.0(@swc/helpers@0.5.11)(vite@5.2.12(@types/node@20.14.1)) '@vitest/ui': specifier: ^1.6.0 version: 1.6.0(vitest@1.6.0) @@ -347,7 +350,7 @@ importers: version: 8.4.38 storybook: specifier: ^8.1.9 - version: 8.1.9(react-dom@18.3.1)(react@18.3.1) + version: 8.1.9(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwindcss: specifier: ^3.4.3 version: 3.4.3 @@ -359,7 +362,7 @@ importers: version: 5.2.12(@types/node@20.14.1) vite-tsconfig-paths: specifier: ^4.3.2 - version: 4.3.2(typescript@5.4.5)(vite@5.2.12) + version: 4.3.2(typescript@5.4.5)(vite@5.2.12(@types/node@20.14.1)) vitest: specifier: ^1.6.0 version: 1.6.0(@types/node@20.14.1)(@vitest/ui@1.6.0)(jsdom@24.1.0) @@ -651,6 +654,13 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-private-methods@7.18.6': + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} @@ -3354,8 +3364,6 @@ packages: peerDependenciesMeta: '@types/prettier': optional: true - '@types/refractor': - optional: true prettier: optional: true @@ -4215,10 +4223,6 @@ packages: resolution: {integrity: sha512-mPBodDGVL+fl6d90wUREepHa/7lhsghg2A3vFpakEhrhtbIlgNAZiMr7ccTgak5qbHqF14Fwy+W1yFWQt+WmYQ==} engines: {node: '>=12'} - '@testing-library/dom@10.1.0': - resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} - engines: {node: '>=18'} - '@testing-library/dom@9.3.4': resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} @@ -5643,6 +5647,12 @@ packages: engines: {node: '>=6.0'} hasBin: true + eslint-plugin-react-compiler@0.0.0-experimental-0998c1e-20240625: + resolution: {integrity: sha512-npq2RomExoQI3jETs4OrifaygyJYgOcX/q74Q9OC7GmffLh5zSJaQpzjs2fi61NMNkJyIvTBD0C6sKTGGcetOw==} + engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} + peerDependencies: + eslint: '>=7' + eslint-plugin-react-hooks@4.6.2: resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} engines: {node: '>=10'} @@ -6103,6 +6113,12 @@ packages: hastscript@6.0.0: resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} + hermes-estree@0.20.1: + resolution: {integrity: sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==} + + hermes-parser@0.20.1: + resolution: {integrity: sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==} + hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} @@ -8825,6 +8841,12 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} + zod-validation-error@3.3.0: + resolution: {integrity: sha512-Syib9oumw1NTqEv4LT0e6U83Td9aVRk9iTXPUQr1otyV1PuXQKOvOwhMNqZIq5hluzHP2pMgnOmHEo7kPdI2mw==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.18.0 + zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} @@ -9029,7 +9051,7 @@ snapshots: '@babel/helper-member-expression-to-functions@7.24.6': dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.7 '@babel/helper-member-expression-to-functions@7.24.7': dependencies: @@ -9071,7 +9093,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.24.6': dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.7 '@babel/helper-optimise-call-expression@7.24.7': dependencies: @@ -9119,7 +9141,7 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.24.6': dependencies: - '@babel/types': 7.24.6 + '@babel/types': 7.24.7 '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: @@ -9218,9 +9240,17 @@ snapshots: '@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + transitivePeerDependencies: + - supports-color + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 @@ -9228,27 +9258,32 @@ snapshots: '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.6)': dependencies: '@babel/core': 7.24.6 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.6)': dependencies: '@babel/core': 7.24.6 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.6)': dependencies: '@babel/core': 7.24.6 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.7)': dependencies: @@ -9258,12 +9293,12 @@ snapshots: '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-flow@7.24.7(@babel/core@7.24.7)': dependencies: @@ -9283,22 +9318,22 @@ snapshots: '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.6)': dependencies: '@babel/core': 7.24.6 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.6)': dependencies: '@babel/core': 7.24.6 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-jsx@7.24.6(@babel/core@7.24.6)': dependencies: @@ -9313,62 +9348,62 @@ snapshots: '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.6)': dependencies: '@babel/core': 7.24.6 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.6)': dependencies: '@babel/core': 7.24.6 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.6)': dependencies: '@babel/core': 7.24.6 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.6)': dependencies: '@babel/core': 7.24.6 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.6)': dependencies: '@babel/core': 7.24.6 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.6)': dependencies: '@babel/core': 7.24.6 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.7)': dependencies: @@ -9378,12 +9413,12 @@ snapshots: '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.6)': dependencies: '@babel/core': 7.24.6 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-typescript@7.24.6(@babel/core@7.24.6)': dependencies: @@ -9563,7 +9598,7 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-plugin-utils': 7.24.7 '@babel/helper-simple-access': 7.24.6 transitivePeerDependencies: - supports-color @@ -10006,7 +10041,7 @@ snapshots: react: 18.3.1 tslib: 2.6.2 - '@dnd-kit/core@6.1.0(react-dom@18.3.1)(react@18.3.1)': + '@dnd-kit/core@6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@dnd-kit/accessibility': 3.1.0(react@18.3.1) '@dnd-kit/utilities': 3.2.2(react@18.3.1) @@ -10014,16 +10049,16 @@ snapshots: react-dom: 18.3.1(react@18.3.1) tslib: 2.6.2 - '@dnd-kit/modifiers@7.0.0(@dnd-kit/core@6.1.0)(react@18.3.1)': + '@dnd-kit/modifiers@7.0.0(@dnd-kit/core@6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@dnd-kit/core': 6.1.0(react-dom@18.3.1)(react@18.3.1) + '@dnd-kit/core': 6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@dnd-kit/utilities': 3.2.2(react@18.3.1) react: 18.3.1 tslib: 2.6.2 - '@dnd-kit/sortable@8.0.0(@dnd-kit/core@6.1.0)(react@18.3.1)': + '@dnd-kit/sortable@8.0.0(@dnd-kit/core@6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@dnd-kit/core': 6.1.0(react-dom@18.3.1)(react@18.3.1) + '@dnd-kit/core': 6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@dnd-kit/utilities': 3.2.2(react@18.3.1) react: 18.3.1 tslib: 2.6.2 @@ -10072,9 +10107,10 @@ snapshots: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 - '@types/react': 18.3.3 hoist-non-react-statics: 3.3.2 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@emotion/serialize@1.1.4': dependencies: @@ -10086,7 +10122,7 @@ snapshots: '@emotion/sheet@1.2.2': {} - '@emotion/styled@11.11.5(@emotion/react@11.11.4)(@types/react@18.3.3)(react@18.3.1)': + '@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@emotion/babel-plugin': 11.11.0 @@ -10095,8 +10131,9 @@ snapshots: '@emotion/serialize': 1.1.4 '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) '@emotion/utils': 1.2.1 - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@emotion/unitless@0.8.1': {} @@ -10211,7 +10248,7 @@ snapshots: '@floating-ui/core': 1.6.2 '@floating-ui/utils': 0.2.2 - '@floating-ui/react-dom@2.1.0(react-dom@18.3.1)(react@18.3.1)': + '@floating-ui/react-dom@2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/dom': 1.6.5 react: 18.3.1 @@ -10253,22 +10290,22 @@ snapshots: dependencies: react: 18.3.1 - '@hookform/devtools@4.3.1(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@hookform/devtools@4.3.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1) - '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.3.3)(react@18.3.1) + '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1) '@types/lodash': 4.17.4 little-state-machine: 4.8.0(react@18.3.1) lodash: 4.17.21 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-simple-animate: 3.5.2(react-dom@18.3.1) + react-simple-animate: 3.5.2(react-dom@18.3.1(react@18.3.1)) use-deep-compare-effect: 1.8.1(react@18.3.1) uuid: 8.3.2 transitivePeerDependencies: - '@types/react' - '@hookform/resolvers@3.4.2(react-hook-form@7.51.5)': + '@hookform/resolvers@3.4.2(react-hook-form@7.51.5(react@18.3.1))': dependencies: react-hook-form: 7.51.5(react@18.3.1) @@ -10329,7 +10366,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -10343,7 +10380,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.14.1) + jest-config: 29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -10486,14 +10523,15 @@ snapshots: '@types/yargs': 17.0.32 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.1(typescript@5.4.5)(vite@5.2.12)': + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.1(typescript@5.4.5)(vite@5.2.12(@types/node@20.14.1))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.4.5) - typescript: 5.4.5 vite: 5.2.12(@types/node@20.14.1) + optionalDependencies: + typescript: 5.4.5 '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -10513,7 +10551,7 @@ snapshots: '@jridgewell/sourcemap-codec': 1.4.15 '@kodingdotninja/use-tailwind-breakpoint@0.0.5(react@18.3.1)': - dependencies: + optionalDependencies: react: 18.3.1 '@lezer/common@1.2.1': {} @@ -10596,7 +10634,7 @@ snapshots: monaco-editor: 0.49.0 state-local: 1.0.7 - '@monaco-editor/react@4.6.0(monaco-editor@0.49.0)(react-dom@18.3.1)(react@18.3.1)': + '@monaco-editor/react@4.6.0(monaco-editor@0.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@monaco-editor/loader': 1.4.0(monaco-editor@0.49.0) monaco-editor: 0.49.0 @@ -10609,17 +10647,17 @@ snapshots: pump: 3.0.0 tar-fs: 2.1.1 - '@nextui-org/accordion@2.0.34(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/accordion@2.0.34(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/divider': 2.0.28(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/divider': 2.0.28(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-icons': 2.0.7(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) - '@nextui-org/use-aria-accordion': 2.0.5(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/use-aria-accordion': 2.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/button': 3.9.3(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) @@ -10627,15 +10665,15 @@ snapshots: '@react-stately/tree': 3.7.6(react@18.3.1) '@react-types/accordion': 3.0.0-alpha.19(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/aria-utils@2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/aria-utils@2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-rsc-utils': 2.0.12 '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/collections': 3.10.5(react@18.3.1) '@react-stately/overlays': 3.6.5(react@18.3.1) @@ -10647,23 +10685,23 @@ snapshots: - '@nextui-org/theme' - framer-motion - '@nextui-org/autocomplete@2.1.1(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/autocomplete@2.1.1(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/button': 2.0.33(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/input': 2.2.1(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/listbox': 2.1.21(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/popover': 2.1.23(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/button': 2.0.33(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/input': 2.2.1(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/listbox': 2.1.21(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/popover': 2.1.23(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) - '@nextui-org/scroll-shadow': 2.1.16(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/scroll-shadow': 2.1.16(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/shared-icons': 2.0.7(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/spinner': 2.0.29(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/spinner': 2.0.29(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-aria-button': 2.0.8(react@18.3.1) '@nextui-org/use-safe-layout-effect': 2.0.5(react@18.3.1) - '@react-aria/combobox': 3.8.4(react-dom@18.3.1)(react@18.3.1) + '@react-aria/combobox': 3.8.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/i18n': 3.10.2(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) @@ -10672,17 +10710,17 @@ snapshots: '@react-stately/combobox': 3.8.2(react@18.3.1) '@react-types/combobox': 3.10.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - '@types/react' - '@nextui-org/avatar@2.0.29(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/avatar@2.0.29(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-image': 2.0.5(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) @@ -10691,21 +10729,21 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/badge@2.0.28(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/badge@2.0.28(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/breadcrumbs@2.0.9(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/breadcrumbs@2.0.9(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-icons': 2.0.7(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@react-aria/breadcrumbs': 3.5.11(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) @@ -10715,13 +10753,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/button@2.0.33(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/button@2.0.33(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) - '@nextui-org/ripple': 2.0.29(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/ripple': 2.0.29(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/spinner': 2.0.29(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/spinner': 2.0.29(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-aria-button': 2.0.8(react@18.3.1) '@react-aria/button': 3.9.3(react@18.3.1) @@ -10730,22 +10768,22 @@ snapshots: '@react-aria/utils': 3.24.1(react@18.3.1) '@react-types/button': 3.9.2(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/calendar@2.0.6(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/calendar@2.0.6(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@internationalized/date': 3.5.4 - '@nextui-org/button': 2.0.33(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/button': 2.0.33(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-icons': 2.0.7(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-aria-button': 2.0.8(react@18.3.1) - '@react-aria/calendar': 3.5.6(react-dom@18.3.1)(react@18.3.1) + '@react-aria/calendar': 3.5.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/i18n': 3.10.2(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) @@ -10764,12 +10802,12 @@ snapshots: transitivePeerDependencies: - framer-motion - '@nextui-org/card@2.0.30(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/card@2.0.30(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) - '@nextui-org/ripple': 2.0.29(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/ripple': 2.0.29(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-aria-button': 2.0.8(react@18.3.1) '@react-aria/button': 3.9.3(react@18.3.1) @@ -10777,15 +10815,15 @@ snapshots: '@react-aria/interactions': 3.21.1(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/checkbox@2.1.1(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/checkbox@2.1.1(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-callback-ref': 2.0.5(react@18.3.1) '@nextui-org/use-safe-layout-effect': 2.0.5(react@18.3.1) @@ -10801,12 +10839,12 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/chip@2.0.29(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/chip@2.0.29(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-icons': 2.0.7(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) @@ -10815,23 +10853,23 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/code@2.0.28(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/code@2.0.28(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system-rsc': 2.1.2(@nextui-org/theme@2.2.5)(react@18.3.1) + '@nextui-org/system-rsc': 2.1.2(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/date-input@2.1.0(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/date-input@2.1.0(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@internationalized/date': 3.5.4 '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) - '@react-aria/datepicker': 3.9.3(react-dom@18.3.1)(react@18.3.1) + '@react-aria/datepicker': 3.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/i18n': 3.10.2(react@18.3.1) '@react-aria/utils': 3.23.2(react@18.3.1) '@react-stately/datepicker': 3.9.2(react@18.3.1) @@ -10840,20 +10878,20 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/date-picker@2.1.1(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/date-picker@2.1.1(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@internationalized/date': 3.5.4 - '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/button': 2.0.33(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/calendar': 2.0.6(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/date-input': 2.1.0(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/popover': 2.1.23(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/button': 2.0.33(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/calendar': 2.0.6(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/date-input': 2.1.0(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/popover': 2.1.23(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-icons': 2.0.7(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) - '@react-aria/datepicker': 3.9.3(react-dom@18.3.1)(react@18.3.1) + '@react-aria/datepicker': 3.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/i18n': 3.10.2(react@18.3.1) '@react-aria/utils': 3.23.2(react@18.3.1) '@react-stately/datepicker': 3.9.2(react@18.3.1) @@ -10867,63 +10905,63 @@ snapshots: - '@types/react' - framer-motion - '@nextui-org/divider@2.0.28(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/divider@2.0.28(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-rsc-utils': 2.0.12 '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system-rsc': 2.1.2(@nextui-org/theme@2.2.5)(react@18.3.1) + '@nextui-org/system-rsc': 2.1.2(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@react-types/shared': 3.22.1(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/dropdown@2.1.25(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/dropdown@2.1.25(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/menu': 2.0.24(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/popover': 2.1.23(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/menu': 2.0.24(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/popover': 2.1.23(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@react-aria/focus': 3.16.2(react@18.3.1) - '@react-aria/menu': 3.13.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/menu': 3.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/menu': 3.6.1(react@18.3.1) '@react-types/menu': 3.9.7(react@18.3.1) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - '@types/react' - '@nextui-org/framer-utils@2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/framer-utils@2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/use-measure': 2.0.1(react@18.3.1) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - '@nextui-org/theme' - '@nextui-org/image@2.0.28(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/image@2.0.28(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-image': 2.0.5(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/input@2.2.1(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/input@2.2.1(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-icons': 2.0.7(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-safe-layout-effect': 2.0.5(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) @@ -10939,22 +10977,22 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@nextui-org/kbd@2.0.29(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/kbd@2.0.29(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system-rsc': 2.1.2(@nextui-org/theme@2.2.5)(react@18.3.1) + '@nextui-org/system-rsc': 2.1.2(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@react-aria/utils': 3.23.2(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/link@2.0.31(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/link@2.0.31(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-icons': 2.0.7(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-aria-link': 2.0.17(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) @@ -10964,18 +11002,18 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/listbox@2.1.21(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/listbox@2.1.21(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/divider': 2.0.28(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/divider': 2.0.28(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-is-mobile': 2.0.7(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) - '@react-aria/listbox': 3.11.5(react-dom@18.3.1)(react@18.3.1) + '@react-aria/listbox': 3.11.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/list': 3.10.3(react@18.3.1) '@react-types/menu': 3.9.7(react@18.3.1) @@ -10985,19 +11023,19 @@ snapshots: transitivePeerDependencies: - framer-motion - '@nextui-org/menu@2.0.24(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/menu@2.0.24(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/divider': 2.0.28(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/divider': 2.0.28(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) - '@nextui-org/use-aria-menu': 2.0.4(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/use-aria-menu': 2.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/use-is-mobile': 2.0.7(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) - '@react-aria/menu': 3.13.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/menu': 3.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/menu': 3.6.1(react@18.3.1) '@react-stately/tree': 3.7.6(react@18.3.1) @@ -11008,56 +11046,56 @@ snapshots: transitivePeerDependencies: - framer-motion - '@nextui-org/modal@2.0.35(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/modal@2.0.35(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-icons': 2.0.7(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-aria-button': 2.0.8(react@18.3.1) - '@nextui-org/use-aria-modal-overlay': 2.0.9(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/use-aria-modal-overlay': 2.0.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/use-disclosure': 2.0.8(react@18.3.1) - '@react-aria/dialog': 3.5.12(react-dom@18.3.1)(react@18.3.1) + '@react-aria/dialog': 3.5.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) - '@react-aria/overlays': 3.21.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/overlays': 3.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/overlays': 3.6.5(react@18.3.1) '@react-types/overlays': 3.8.5(react@18.3.1) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/navbar@2.0.32(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/navbar@2.0.32(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-aria-toggle-button': 2.0.8(react@18.3.1) '@nextui-org/use-scroll-position': 2.0.6(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) - '@react-aria/overlays': 3.21.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/overlays': 3.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/toggle': 3.7.2(react@18.3.1) '@react-stately/utils': 3.9.1(react@18.3.1) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.5.10(@types/react@18.3.3)(react@18.3.1) transitivePeerDependencies: - '@types/react' - '@nextui-org/pagination@2.0.32(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/pagination@2.0.32(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-icons': 2.0.7(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-pagination': 2.0.6(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) @@ -11068,37 +11106,37 @@ snapshots: react-dom: 18.3.1(react@18.3.1) scroll-into-view-if-needed: 3.0.10 - '@nextui-org/popover@2.1.23(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/popover@2.1.23(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/button': 2.0.33(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/button': 2.0.33(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-aria-button': 2.0.8(react@18.3.1) '@nextui-org/use-safe-layout-effect': 2.0.5(react@18.3.1) - '@react-aria/dialog': 3.5.12(react-dom@18.3.1)(react@18.3.1) + '@react-aria/dialog': 3.5.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) - '@react-aria/overlays': 3.21.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/overlays': 3.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/overlays': 3.6.5(react@18.3.1) '@react-types/button': 3.9.2(react@18.3.1) '@react-types/overlays': 3.8.5(react@18.3.1) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.5.10(@types/react@18.3.3)(react@18.3.1) transitivePeerDependencies: - '@types/react' - '@nextui-org/progress@2.0.30(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/progress@2.0.30(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-is-mounted': 2.0.5(react@18.3.1) '@react-aria/i18n': 3.10.2(react@18.3.1) @@ -11108,11 +11146,11 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/radio@2.1.1(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/radio@2.1.1(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) @@ -11133,93 +11171,93 @@ snapshots: '@nextui-org/shared-utils': 2.0.5 react: 18.3.1 - '@nextui-org/react@2.4.1(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.3)': - dependencies: - '@nextui-org/accordion': 2.0.34(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/autocomplete': 2.1.1(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/avatar': 2.0.29(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/badge': 2.0.28(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/breadcrumbs': 2.0.9(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/button': 2.0.33(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/calendar': 2.0.6(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/card': 2.0.30(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/checkbox': 2.1.1(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/chip': 2.0.29(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/code': 2.0.28(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/date-input': 2.1.0(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/date-picker': 2.1.1(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/divider': 2.0.28(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/dropdown': 2.1.25(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/image': 2.0.28(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/input': 2.2.1(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/kbd': 2.0.29(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/link': 2.0.31(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/listbox': 2.1.21(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/menu': 2.0.24(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/modal': 2.0.35(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/navbar': 2.0.32(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/pagination': 2.0.32(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/popover': 2.1.23(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/progress': 2.0.30(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/radio': 2.1.1(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/ripple': 2.0.29(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/scroll-shadow': 2.1.16(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/select': 2.2.1(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/skeleton': 2.0.28(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/slider': 2.2.11(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/snippet': 2.0.37(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/spacer': 2.0.28(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/spinner': 2.0.29(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/switch': 2.0.30(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/table': 2.0.35(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/tabs': 2.0.31(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/react@2.4.1(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.3)': + dependencies: + '@nextui-org/accordion': 2.0.34(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/autocomplete': 2.1.1(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/avatar': 2.0.29(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/badge': 2.0.28(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/breadcrumbs': 2.0.9(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/button': 2.0.33(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/calendar': 2.0.6(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/card': 2.0.30(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/checkbox': 2.1.1(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/chip': 2.0.29(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/code': 2.0.28(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/date-input': 2.1.0(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/date-picker': 2.1.1(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/divider': 2.0.28(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/dropdown': 2.1.25(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/image': 2.0.28(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/input': 2.2.1(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/kbd': 2.0.29(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/link': 2.0.31(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/listbox': 2.1.21(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/menu': 2.0.24(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/modal': 2.0.35(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/navbar': 2.0.32(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/pagination': 2.0.32(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/popover': 2.1.23(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/progress': 2.0.30(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/radio': 2.1.1(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/ripple': 2.0.29(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/scroll-shadow': 2.1.16(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/select': 2.2.1(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/skeleton': 2.0.28(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/slider': 2.2.11(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/snippet': 2.0.37(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/spacer': 2.0.28(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/spinner': 2.0.29(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/switch': 2.0.30(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/table': 2.0.35(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/tabs': 2.0.31(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) - '@nextui-org/tooltip': 2.0.35(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/user': 2.0.30(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/tooltip': 2.0.35(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/user': 2.0.30(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/visually-hidden': 3.8.10(react@18.3.1) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - '@types/react' - tailwindcss - '@nextui-org/ripple@2.0.29(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/ripple@2.0.29(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/scroll-shadow@2.1.16(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/scroll-shadow@2.1.16(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-data-scroll-overflow': 2.1.4(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/select@2.2.1(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/select@2.2.1(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/listbox': 2.1.21(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/popover': 2.1.23(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(@types/react@18.3.3)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/listbox': 2.1.21(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/popover': 2.1.23(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(@types/react@18.3.3)(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) - '@nextui-org/scroll-shadow': 2.1.16(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/scroll-shadow': 2.1.16(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/shared-icons': 2.0.7(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/spinner': 2.0.29(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/spinner': 2.0.29(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-aria-button': 2.0.8(react@18.3.1) - '@nextui-org/use-aria-multiselect': 2.2.1(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/use-aria-multiselect': 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/use-safe-layout-effect': 2.0.5(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/form': 3.0.3(react@18.3.1) @@ -11227,7 +11265,7 @@ snapshots: '@react-aria/utils': 3.24.1(react@18.3.1) '@react-aria/visually-hidden': 3.8.10(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -11239,22 +11277,22 @@ snapshots: '@nextui-org/shared-utils@2.0.5': {} - '@nextui-org/skeleton@2.0.28(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/skeleton@2.0.28(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/slider@2.2.11(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/slider@2.2.11(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) - '@nextui-org/tooltip': 2.0.35(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/tooltip': 2.0.35(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/i18n': 3.10.2(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) @@ -11267,45 +11305,45 @@ snapshots: transitivePeerDependencies: - framer-motion - '@nextui-org/snippet@2.0.37(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/snippet@2.0.37(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@nextui-org/button': 2.0.33(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/button': 2.0.33(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-icons': 2.0.7(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) - '@nextui-org/tooltip': 2.0.35(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/tooltip': 2.0.35(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/use-clipboard': 2.0.5(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/utils': 3.23.2(react@18.3.1) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/spacer@2.0.28(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/spacer@2.0.28(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system-rsc': 2.1.2(@nextui-org/theme@2.2.5)(react@18.3.1) + '@nextui-org/system-rsc': 2.1.2(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/spinner@2.0.29(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/spinner@2.0.29(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system-rsc': 2.1.2(@nextui-org/theme@2.2.5)(react@18.3.1) + '@nextui-org/system-rsc': 2.1.2(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/switch@2.0.30(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/switch@2.0.30(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-safe-layout-effect': 2.0.5(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) @@ -11318,39 +11356,39 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/system-rsc@2.1.2(@nextui-org/theme@2.2.5)(react@18.3.1)': + '@nextui-org/system-rsc@2.1.2(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react@18.3.1)': dependencies: '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) clsx: 1.2.1 react: 18.3.1 - '@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@internationalized/date': 3.5.4 '@nextui-org/react-utils': 2.0.13(react@18.3.1) - '@nextui-org/system-rsc': 2.1.2(@nextui-org/theme@2.2.5)(react@18.3.1) + '@nextui-org/system-rsc': 2.1.2(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react@18.3.1) '@react-aria/i18n': 3.10.2(react@18.3.1) - '@react-aria/overlays': 3.21.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/overlays': 3.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/utils': 3.9.1(react@18.3.1) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - '@nextui-org/theme' - '@nextui-org/table@2.0.35(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/table@2.0.35(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@nextui-org/checkbox': 2.1.1(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/checkbox': 2.1.1(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-icons': 2.0.7(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/spacer': 2.0.28(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/spacer': 2.0.28(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) - '@react-aria/table': 3.13.5(react-dom@18.3.1)(react@18.3.1) + '@react-aria/table': 3.13.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-aria/visually-hidden': 3.8.10(react@18.3.1) '@react-stately/table': 3.11.6(react@18.3.1) @@ -11360,24 +11398,24 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/tabs@2.0.31(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/tabs@2.0.31(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-is-mounted': 2.0.5(react@18.3.1) '@nextui-org/use-update-effect': 2.0.5(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) - '@react-aria/tabs': 3.8.5(react-dom@18.3.1)(react@18.3.1) + '@react-aria/tabs': 3.8.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/tabs': 3.6.4(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) '@react-types/tabs': 3.3.5(react@18.3.1) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) scroll-into-view-if-needed: 3.0.10 @@ -11398,31 +11436,31 @@ snapshots: tailwind-variants: 0.1.20(tailwindcss@3.4.3) tailwindcss: 3.4.3 - '@nextui-org/tooltip@2.0.35(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/tooltip@2.0.35(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) - '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/aria-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@nextui-org/framer-utils': 2.0.20(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@nextui-org/use-safe-layout-effect': 2.0.5(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) - '@react-aria/overlays': 3.21.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/overlays': 3.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/tooltip': 3.7.2(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/tooltip': 3.4.7(react@18.3.1) '@react-types/overlays': 3.8.5(react@18.3.1) '@react-types/tooltip': 3.4.7(react@18.3.1) - framer-motion: 11.2.10(react-dom@18.3.1)(react@18.3.1) + framer-motion: 11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/use-aria-accordion@2.0.5(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/use-aria-accordion@2.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/button': 3.9.3(react@18.3.1) '@react-aria/focus': 3.16.2(react@18.3.1) - '@react-aria/selection': 3.17.5(react-dom@18.3.1)(react@18.3.1) + '@react-aria/selection': 3.17.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/tree': 3.7.6(react@18.3.1) '@react-types/accordion': 3.0.0-alpha.19(react@18.3.1) @@ -11449,12 +11487,12 @@ snapshots: '@react-types/shared': 3.23.1(react@18.3.1) react: 18.3.1 - '@nextui-org/use-aria-menu@2.0.4(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/use-aria-menu@2.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/i18n': 3.10.2(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) - '@react-aria/menu': 3.13.1(react-dom@18.3.1)(react@18.3.1) - '@react-aria/selection': 3.17.5(react-dom@18.3.1)(react@18.3.1) + '@react-aria/menu': 3.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.17.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/collections': 3.10.5(react@18.3.1) '@react-stately/tree': 3.7.6(react@18.3.1) @@ -11463,23 +11501,23 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/use-aria-modal-overlay@2.0.9(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/use-aria-modal-overlay@2.0.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/overlays': 3.21.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/overlays': 3.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/overlays': 3.6.5(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@nextui-org/use-aria-multiselect@2.2.1(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/use-aria-multiselect@2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/i18n': 3.10.2(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) '@react-aria/label': 3.7.6(react@18.3.1) - '@react-aria/listbox': 3.11.5(react-dom@18.3.1)(react@18.3.1) - '@react-aria/menu': 3.13.1(react-dom@18.3.1)(react@18.3.1) - '@react-aria/selection': 3.17.5(react-dom@18.3.1)(react@18.3.1) + '@react-aria/listbox': 3.11.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/menu': 3.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.17.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/form': 3.0.1(react@18.3.1) '@react-stately/list': 3.10.3(react@18.3.1) @@ -11557,12 +11595,12 @@ snapshots: dependencies: react: 18.3.1 - '@nextui-org/user@2.0.30(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1)': + '@nextui-org/user@2.0.30(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@nextui-org/avatar': 2.0.29(@nextui-org/system@2.2.1)(@nextui-org/theme@2.2.5)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/avatar': 2.0.29(@nextui-org/system@2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/react-utils': 2.0.13(react@18.3.1) '@nextui-org/shared-utils': 2.0.5 - '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5)(framer-motion@11.2.10)(react-dom@18.3.1)(react@18.3.1) + '@nextui-org/system': 2.2.1(@nextui-org/theme@2.2.5(tailwindcss@3.4.3))(framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@nextui-org/theme': 2.2.5(tailwindcss@3.4.3) '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/utils': 3.23.2(react@18.3.1) @@ -11598,183 +11636,198 @@ snapshots: dependencies: '@babel/runtime': 7.24.6 - '@radix-ui/react-accordion@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-accordion@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-aspect-ratio@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-aspect-ratio@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-context@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 '@radix-ui/react-direction@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 '@radix-ui/react-icons@1.3.0(react@18.3.1)': dependencies: @@ -11784,159 +11837,170 @@ snapshots: dependencies: '@babel/runtime': 7.24.6 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-label@2.0.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-label@2.0.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-menu@2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-menu@2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-popover@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-popover@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-popper@1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-popper@1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 - '@floating-ui/react-dom': 2.1.0(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/react-dom': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/rect': 1.0.1 - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-progress@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-progress@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-radio-group@1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-radio-group@1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-scroll-area@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-scroll-area@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/number': 1.0.1 @@ -11944,191 +12008,208 @@ snapshots: '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-select@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-select@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-separator@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-separator@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 '@radix-ui/react-slot@1.0.2(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-switch@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-switch@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-tabs@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-tabs@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-toggle@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-toggle@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-previous@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/rect': 1.0.1 - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-size@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 '@radix-ui/rect@1.0.1': dependencies: @@ -12155,7 +12236,7 @@ snapshots: '@swc/helpers': 0.5.11 react: 18.3.1 - '@react-aria/calendar@3.5.6(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/calendar@3.5.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@internationalized/date': 3.5.4 '@react-aria/i18n': 3.10.2(react@18.3.1) @@ -12185,14 +12266,14 @@ snapshots: '@swc/helpers': 0.5.11 react: 18.3.1 - '@react-aria/combobox@3.8.4(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/combobox@3.8.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/i18n': 3.10.2(react@18.3.1) - '@react-aria/listbox': 3.12.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/listbox': 3.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/live-announcer': 3.3.4 - '@react-aria/menu': 3.14.1(react-dom@18.3.1)(react@18.3.1) - '@react-aria/overlays': 3.22.1(react-dom@18.3.1)(react@18.3.1) - '@react-aria/selection': 3.18.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/menu': 3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/overlays': 3.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.18.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/textfield': 3.14.5(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/collections': 3.10.7(react@18.3.1) @@ -12205,7 +12286,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-aria/datepicker@3.9.3(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/datepicker@3.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@internationalized/date': 3.5.4 '@internationalized/number': 3.5.3 @@ -12215,7 +12296,7 @@ snapshots: '@react-aria/i18n': 3.10.2(react@18.3.1) '@react-aria/interactions': 3.21.3(react@18.3.1) '@react-aria/label': 3.7.8(react@18.3.1) - '@react-aria/spinbutton': 3.6.5(react-dom@18.3.1)(react@18.3.1) + '@react-aria/spinbutton': 3.6.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.23.2(react@18.3.1) '@react-stately/datepicker': 3.9.2(react@18.3.1) '@react-stately/form': 3.0.3(react@18.3.1) @@ -12228,10 +12309,10 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-aria/dialog@3.5.12(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/dialog@3.5.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/focus': 3.16.2(react@18.3.1) - '@react-aria/overlays': 3.21.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/overlays': 3.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-types/dialog': 3.5.10(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) @@ -12275,13 +12356,13 @@ snapshots: '@swc/helpers': 0.5.11 react: 18.3.1 - '@react-aria/grid@3.9.1(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/grid@3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/focus': 3.17.1(react@18.3.1) '@react-aria/i18n': 3.11.1(react@18.3.1) '@react-aria/interactions': 3.21.3(react@18.3.1) '@react-aria/live-announcer': 3.3.4 - '@react-aria/selection': 3.18.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/selection': 3.18.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/collections': 3.10.7(react@18.3.1) '@react-stately/grid': 3.8.7(react@18.3.1) @@ -12358,11 +12439,11 @@ snapshots: '@swc/helpers': 0.5.11 react: 18.3.1 - '@react-aria/listbox@3.11.5(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/listbox@3.11.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/interactions': 3.21.1(react@18.3.1) '@react-aria/label': 3.7.8(react@18.3.1) - '@react-aria/selection': 3.18.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/selection': 3.18.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/collections': 3.10.7(react@18.3.1) '@react-stately/list': 3.10.3(react@18.3.1) @@ -12372,11 +12453,11 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-aria/listbox@3.12.1(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/listbox@3.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/interactions': 3.21.3(react@18.3.1) '@react-aria/label': 3.7.8(react@18.3.1) - '@react-aria/selection': 3.18.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/selection': 3.18.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/collections': 3.10.7(react@18.3.1) '@react-stately/list': 3.10.5(react@18.3.1) @@ -12390,13 +12471,13 @@ snapshots: dependencies: '@swc/helpers': 0.5.11 - '@react-aria/menu@3.13.1(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/menu@3.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/i18n': 3.11.1(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) - '@react-aria/overlays': 3.22.1(react-dom@18.3.1)(react@18.3.1) - '@react-aria/selection': 3.18.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/overlays': 3.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.18.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/collections': 3.10.7(react@18.3.1) '@react-stately/menu': 3.6.1(react@18.3.1) @@ -12408,13 +12489,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-aria/menu@3.14.1(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/menu@3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/focus': 3.17.1(react@18.3.1) '@react-aria/i18n': 3.11.1(react@18.3.1) '@react-aria/interactions': 3.21.3(react@18.3.1) - '@react-aria/overlays': 3.22.1(react-dom@18.3.1)(react@18.3.1) - '@react-aria/selection': 3.18.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/overlays': 3.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.18.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/collections': 3.10.7(react@18.3.1) '@react-stately/menu': 3.7.1(react@18.3.1) @@ -12426,7 +12507,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-aria/overlays@3.21.1(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/overlays@3.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/focus': 3.17.1(react@18.3.1) '@react-aria/i18n': 3.10.2(react@18.3.1) @@ -12442,7 +12523,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-aria/overlays@3.22.1(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/overlays@3.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/focus': 3.17.1(react@18.3.1) '@react-aria/i18n': 3.11.1(react@18.3.1) @@ -12482,7 +12563,7 @@ snapshots: '@swc/helpers': 0.5.11 react: 18.3.1 - '@react-aria/selection@3.17.5(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/selection@3.17.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/i18n': 3.10.2(react@18.3.1) @@ -12494,7 +12575,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-aria/selection@3.18.1(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/selection@3.18.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/focus': 3.17.1(react@18.3.1) '@react-aria/i18n': 3.11.1(react@18.3.1) @@ -12519,7 +12600,7 @@ snapshots: '@swc/helpers': 0.5.11 react: 18.3.1 - '@react-aria/spinbutton@3.6.5(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/spinbutton@3.6.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/i18n': 3.11.1(react@18.3.1) '@react-aria/live-announcer': 3.3.4 @@ -12543,10 +12624,10 @@ snapshots: '@swc/helpers': 0.5.11 react: 18.3.1 - '@react-aria/table@3.13.5(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/table@3.13.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/focus': 3.16.2(react@18.3.1) - '@react-aria/grid': 3.9.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/grid': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/i18n': 3.11.1(react@18.3.1) '@react-aria/interactions': 3.21.1(react@18.3.1) '@react-aria/live-announcer': 3.3.4 @@ -12564,11 +12645,11 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-aria/tabs@3.8.5(react-dom@18.3.1)(react@18.3.1)': + '@react-aria/tabs@3.8.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/focus': 3.16.2(react@18.3.1) '@react-aria/i18n': 3.11.1(react@18.3.1) - '@react-aria/selection': 3.18.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/selection': 3.18.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.24.1(react@18.3.1) '@react-stately/tabs': 3.6.4(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) @@ -13116,11 +13197,12 @@ snapshots: '@remirror/messages': 2.0.6 '@remirror/pm': 2.0.8 '@types/min-document': 2.19.2 - '@types/node': 20.14.1 css-in-js-utils: 3.1.0 get-dom-document: 0.1.3(jsdom@24.1.0) min-document: 2.19.0 parenthesis: 3.1.8 + optionalDependencies: + '@types/node': 20.14.1 transitivePeerDependencies: - jsdom @@ -13214,7 +13296,7 @@ snapshots: - jsdom - supports-color - '@remirror/extension-code-block@2.0.18(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0)': + '@remirror/extension-code-block@2.0.18(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0)(prettier@3.3.2)': dependencies: '@babel/runtime': 7.24.6 '@remirror/core': 2.0.19(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) @@ -13223,6 +13305,8 @@ snapshots: '@remirror/theme': 2.0.9(@remirror/pm@2.0.8) '@types/refractor': 3.4.1 refractor: 3.6.0 + optionalDependencies: + prettier: 3.3.2 transitivePeerDependencies: - '@types/node' - jsdom @@ -13750,7 +13834,7 @@ snapshots: prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 prosemirror-view: 1.33.7 - y-prosemirror: 1.2.5(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.7)(y-protocols@1.0.6)(yjs@13.6.15) + y-prosemirror: 1.2.5(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.7)(y-protocols@1.0.6(yjs@13.6.15))(yjs@13.6.15) y-protocols: 1.0.6(yjs@13.6.15) yjs: 13.6.15 transitivePeerDependencies: @@ -13840,7 +13924,7 @@ snapshots: - jsdom - supports-color - '@remirror/preset-wysiwyg@2.0.19(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0)': + '@remirror/preset-wysiwyg@2.0.19(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0)(prettier@3.3.2)': dependencies: '@babel/runtime': 7.24.6 '@remirror/core': 2.0.19(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) @@ -13848,7 +13932,7 @@ snapshots: '@remirror/extension-blockquote': 2.0.14(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) '@remirror/extension-bold': 2.0.13(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) '@remirror/extension-code': 2.0.13(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) - '@remirror/extension-code-block': 2.0.18(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) + '@remirror/extension-code-block': 2.0.18(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0)(prettier@3.3.2) '@remirror/extension-drop-cursor': 2.0.13(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) '@remirror/extension-embed': 2.0.14(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) '@remirror/extension-gap-cursor': 2.0.13(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) @@ -13888,11 +13972,13 @@ snapshots: dependencies: type-fest: 2.19.0 - '@rollup/pluginutils@5.1.0': + '@rollup/pluginutils@5.1.0(rollup@4.18.0)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 + optionalDependencies: + rollup: 4.18.0 '@rollup/rollup-android-arm-eabi@4.18.0': optional: true @@ -13982,9 +14068,9 @@ snapshots: memoizerific: 1.11.3 ts-dedent: 2.2.0 - '@storybook/addon-controls@8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@storybook/addon-controls@8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@storybook/blocks': 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1)(react@18.3.1) + '@storybook/blocks': 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) dequal: 2.0.3 lodash: 4.17.21 ts-dedent: 2.2.0 @@ -14001,16 +14087,16 @@ snapshots: dependencies: '@babel/core': 7.24.6 '@mdx-js/react': 3.0.1(@types/react@18.3.3)(react@18.3.1) - '@storybook/blocks': 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1)(react@18.3.1) + '@storybook/blocks': 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/client-logger': 8.1.5 - '@storybook/components': 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@storybook/components': 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/csf-plugin': 8.1.5 '@storybook/csf-tools': 8.1.5 '@storybook/global': 5.0.0 '@storybook/node-logger': 8.1.5 '@storybook/preview-api': 8.1.5 - '@storybook/react-dom-shim': 8.1.5(react-dom@18.3.1)(react@18.3.1) - '@storybook/theming': 8.1.5(react-dom@18.3.1)(react@18.3.1) + '@storybook/react-dom-shim': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/theming': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/types': 8.1.5 '@types/react': 18.3.3 fs-extra: 11.2.0 @@ -14025,11 +14111,11 @@ snapshots: - prettier - supports-color - '@storybook/addon-essentials@8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@storybook/addon-essentials@8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/addon-actions': 8.1.5 '@storybook/addon-backgrounds': 8.1.5 - '@storybook/addon-controls': 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1)(react@18.3.1) + '@storybook/addon-controls': 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/addon-docs': 8.1.5(@types/react-dom@18.3.0)(prettier@3.3.2) '@storybook/addon-highlight': 8.1.5 '@storybook/addon-measure': 8.1.5 @@ -14037,7 +14123,7 @@ snapshots: '@storybook/addon-toolbars': 8.1.5 '@storybook/addon-viewport': 8.1.5 '@storybook/core-common': 8.1.5(prettier@3.3.2) - '@storybook/manager-api': 8.1.5(react-dom@18.3.1)(react@18.3.1) + '@storybook/manager-api': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/node-logger': 8.1.5 '@storybook/preview-api': 8.1.5 ts-dedent: 2.2.0 @@ -14054,11 +14140,11 @@ snapshots: dependencies: '@storybook/global': 5.0.0 - '@storybook/addon-interactions@8.1.5(jest@29.7.0)(vitest@1.6.0)': + '@storybook/addon-interactions@8.1.5(@jest/globals@29.7.0)(jest@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0))(vitest@1.6.0(@types/node@20.14.1)(@vitest/ui@1.6.0)(jsdom@24.1.0))': dependencies: '@storybook/global': 5.0.0 '@storybook/instrumenter': 8.1.5 - '@storybook/test': 8.1.5(jest@29.7.0)(vitest@1.6.0) + '@storybook/test': 8.1.5(@jest/globals@29.7.0)(jest@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0))(vitest@1.6.0(@types/node@20.14.1)(@vitest/ui@1.6.0)(jsdom@24.1.0)) '@storybook/types': 8.1.5 polished: 4.3.1 ts-dedent: 2.2.0 @@ -14073,8 +14159,9 @@ snapshots: dependencies: '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 - react: 18.3.1 ts-dedent: 2.2.0 + optionalDependencies: + react: 18.3.1 '@storybook/addon-measure@8.1.5': dependencies: @@ -14098,19 +14185,19 @@ snapshots: dependencies: memoizerific: 1.11.3 - '@storybook/blocks@8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@storybook/blocks@8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/channels': 8.1.5 '@storybook/client-logger': 8.1.5 - '@storybook/components': 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@storybook/components': 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/core-events': 8.1.5 '@storybook/csf': 0.1.8 '@storybook/docs-tools': 8.1.5(prettier@3.3.2) '@storybook/global': 5.0.0 - '@storybook/icons': 1.2.9(react-dom@18.3.1)(react@18.3.1) - '@storybook/manager-api': 8.1.5(react-dom@18.3.1)(react@18.3.1) + '@storybook/icons': 1.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/manager-api': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/preview-api': 8.1.5 - '@storybook/theming': 8.1.5(react-dom@18.3.1)(react@18.3.1) + '@storybook/theming': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/types': 8.1.5 '@types/lodash': 4.17.4 color-convert: 2.0.1 @@ -14119,13 +14206,14 @@ snapshots: markdown-to-jsx: 7.3.2(react@18.3.1) memoizerific: 1.11.3 polished: 4.3.1 - react: 18.3.1 - react-colorful: 5.6.1(react-dom@18.3.1)(react@18.3.1) - react-dom: 18.3.1(react@18.3.1) + react-colorful: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) telejson: 7.2.0 tocbot: 4.28.2 ts-dedent: 2.2.0 util-deprecate: 1.0.2 + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -14154,7 +14242,7 @@ snapshots: - prettier - supports-color - '@storybook/builder-vite@8.1.5(prettier@3.3.2)(typescript@5.4.5)(vite@5.2.12)': + '@storybook/builder-vite@8.1.5(prettier@3.3.2)(typescript@5.4.5)(vite@5.2.12(@types/node@20.14.1))': dependencies: '@storybook/channels': 8.1.5 '@storybook/client-logger': 8.1.5 @@ -14173,8 +14261,9 @@ snapshots: fs-extra: 11.2.0 magic-string: 0.30.10 ts-dedent: 2.2.0 - typescript: 5.4.5 vite: 5.2.12(@types/node@20.14.1) + optionalDependencies: + typescript: 5.4.5 transitivePeerDependencies: - encoding - prettier @@ -14196,7 +14285,7 @@ snapshots: telejson: 7.2.0 tiny-invariant: 1.3.3 - '@storybook/cli@8.1.9(react-dom@18.3.1)(react@18.3.1)': + '@storybook/cli@8.1.9(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/core': 7.24.7 '@babel/types': 7.24.7 @@ -14204,7 +14293,7 @@ snapshots: '@storybook/codemod': 8.1.9 '@storybook/core-common': 8.1.9(prettier@3.3.2) '@storybook/core-events': 8.1.9 - '@storybook/core-server': 8.1.9(prettier@3.3.2)(react-dom@18.3.1)(react@18.3.1) + '@storybook/core-server': 8.1.9(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/csf-tools': 8.1.9 '@storybook/node-logger': 8.1.9 '@storybook/telemetry': 8.1.9(prettier@3.3.2) @@ -14223,7 +14312,7 @@ snapshots: get-npm-tarball-url: 2.1.0 giget: 1.2.3 globby: 14.0.1 - jscodeshift: 0.15.2(@babel/preset-env@7.24.7) + jscodeshift: 0.15.2(@babel/preset-env@7.24.7(@babel/core@7.24.7)) leven: 3.1.0 ora: 5.4.1 prettier: 3.3.2 @@ -14263,7 +14352,7 @@ snapshots: '@types/cross-spawn': 6.0.6 cross-spawn: 7.0.3 globby: 14.0.1 - jscodeshift: 0.15.2(@babel/preset-env@7.24.7) + jscodeshift: 0.15.2(@babel/preset-env@7.24.7(@babel/core@7.24.7)) lodash: 4.17.21 prettier: 3.3.2 recast: 0.23.9 @@ -14271,15 +14360,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/components@8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@storybook/components@8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) '@storybook/client-logger': 8.1.5 '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 - '@storybook/icons': 1.2.9(react-dom@18.3.1)(react@18.3.1) - '@storybook/theming': 8.1.5(react-dom@18.3.1)(react@18.3.1) + '@storybook/icons': 1.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/theming': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/types': 8.1.5 memoizerific: 1.11.3 react: 18.3.1 @@ -14312,7 +14401,6 @@ snapshots: node-fetch: 2.7.0 picomatch: 2.3.1 pkg-dir: 5.0.0 - prettier: 3.3.2 prettier-fallback: prettier@3.3.2 pretty-hrtime: 1.0.3 resolve-from: 5.0.0 @@ -14321,6 +14409,8 @@ snapshots: tiny-invariant: 1.3.3 ts-dedent: 2.2.0 util: 0.12.5 + optionalDependencies: + prettier: 3.3.2 transitivePeerDependencies: - encoding - supports-color @@ -14348,7 +14438,6 @@ snapshots: node-fetch: 2.7.0 picomatch: 2.3.1 pkg-dir: 5.0.0 - prettier: 3.3.2 prettier-fallback: prettier@3.3.2 pretty-hrtime: 1.0.3 resolve-from: 5.0.0 @@ -14357,6 +14446,8 @@ snapshots: tiny-invariant: 1.3.3 ts-dedent: 2.2.0 util: 0.12.5 + optionalDependencies: + prettier: 3.3.2 transitivePeerDependencies: - encoding - supports-color @@ -14371,7 +14462,7 @@ snapshots: '@storybook/csf': 0.1.8 ts-dedent: 2.2.0 - '@storybook/core-server@8.1.9(prettier@3.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@storybook/core-server@8.1.9(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@aw-web-design/x-default-browser': 1.4.126 '@babel/core': 7.24.7 @@ -14386,7 +14477,7 @@ snapshots: '@storybook/docs-mdx': 3.1.0-next.0 '@storybook/global': 5.0.0 '@storybook/manager': 8.1.9 - '@storybook/manager-api': 8.1.9(react-dom@18.3.1)(react@18.3.1) + '@storybook/manager-api': 8.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/node-logger': 8.1.9 '@storybook/preview-api': 8.1.9 '@storybook/telemetry': 8.1.9(prettier@3.3.2) @@ -14489,7 +14580,7 @@ snapshots: '@storybook/global@5.0.0': {} - '@storybook/icons@1.2.9(react-dom@18.3.1)(react@18.3.1)': + '@storybook/icons@1.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -14504,16 +14595,16 @@ snapshots: '@vitest/utils': 1.6.0 util: 0.12.5 - '@storybook/manager-api@8.1.5(react-dom@18.3.1)(react@18.3.1)': + '@storybook/manager-api@8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/channels': 8.1.5 '@storybook/client-logger': 8.1.5 '@storybook/core-events': 8.1.5 '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 - '@storybook/icons': 1.2.9(react-dom@18.3.1)(react@18.3.1) + '@storybook/icons': 1.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/router': 8.1.5 - '@storybook/theming': 8.1.5(react-dom@18.3.1)(react@18.3.1) + '@storybook/theming': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/types': 8.1.5 dequal: 2.0.3 lodash: 4.17.21 @@ -14525,16 +14616,16 @@ snapshots: - react - react-dom - '@storybook/manager-api@8.1.9(react-dom@18.3.1)(react@18.3.1)': + '@storybook/manager-api@8.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/channels': 8.1.9 '@storybook/client-logger': 8.1.9 '@storybook/core-events': 8.1.9 '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 - '@storybook/icons': 1.2.9(react-dom@18.3.1)(react@18.3.1) + '@storybook/icons': 1.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/router': 8.1.9 - '@storybook/theming': 8.1.9(react-dom@18.3.1)(react@18.3.1) + '@storybook/theming': 8.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/types': 8.1.9 dequal: 2.0.3 lodash: 4.17.21 @@ -14588,18 +14679,18 @@ snapshots: '@storybook/preview@8.1.5': {} - '@storybook/react-dom-shim@8.1.5(react-dom@18.3.1)(react@18.3.1)': + '@storybook/react-dom-shim@8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/react-vite@8.1.5(prettier@3.3.2)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5)(vite@5.2.12)': + '@storybook/react-vite@8.1.5(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.12(@types/node@20.14.1))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.1(typescript@5.4.5)(vite@5.2.12) - '@rollup/pluginutils': 5.1.0 - '@storybook/builder-vite': 8.1.5(prettier@3.3.2)(typescript@5.4.5)(vite@5.2.12) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.1(typescript@5.4.5)(vite@5.2.12(@types/node@20.14.1)) + '@rollup/pluginutils': 5.1.0(rollup@4.18.0) + '@storybook/builder-vite': 8.1.5(prettier@3.3.2)(typescript@5.4.5)(vite@5.2.12(@types/node@20.14.1)) '@storybook/node-logger': 8.1.5 - '@storybook/react': 8.1.5(prettier@3.3.2)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@storybook/react': 8.1.5(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) '@storybook/types': 8.1.5 find-up: 5.0.0 magic-string: 0.30.10 @@ -14618,13 +14709,13 @@ snapshots: - typescript - vite-plugin-glimmerx - '@storybook/react@8.1.5(prettier@3.3.2)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5)': + '@storybook/react@8.1.5(prettier@3.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5)': dependencies: '@storybook/client-logger': 8.1.5 '@storybook/docs-tools': 8.1.5(prettier@3.3.2) '@storybook/global': 5.0.0 '@storybook/preview-api': 8.1.5 - '@storybook/react-dom-shim': 8.1.5(react-dom@18.3.1)(react@18.3.1) + '@storybook/react-dom-shim': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/types': 8.1.5 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 @@ -14638,12 +14729,13 @@ snapshots: prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-element-to-jsx-string: 15.0.0(react-dom@18.3.1)(react@18.3.1) + react-element-to-jsx-string: 15.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) semver: 7.6.2 ts-dedent: 2.2.0 type-fest: 2.19.0 - typescript: 5.4.5 util-deprecate: 1.0.2 + optionalDependencies: + typescript: 5.4.5 transitivePeerDependencies: - encoding - prettier @@ -14676,7 +14768,7 @@ snapshots: - prettier - supports-color - '@storybook/test-runner@0.18.2(@types/node@20.14.1)(prettier@3.3.2)': + '@storybook/test-runner@0.18.2(@swc/helpers@0.5.11)(@types/node@20.14.1)(babel-plugin-macros@3.1.0)(prettier@3.3.2)': dependencies: '@babel/core': 7.24.6 '@babel/generator': 7.24.6 @@ -14687,17 +14779,17 @@ snapshots: '@storybook/csf': 0.1.8 '@storybook/csf-tools': 8.1.5 '@storybook/preview-api': 8.1.5 - '@swc/core': 1.5.7 - '@swc/jest': 0.2.36(@swc/core@1.5.7) + '@swc/core': 1.5.7(@swc/helpers@0.5.11) + '@swc/jest': 0.2.36(@swc/core@1.5.7(@swc/helpers@0.5.11)) expect-playwright: 0.8.0 - jest: 29.7.0(@types/node@20.14.1) - jest-circus: 29.7.0 + jest: 29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0) + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) jest-environment-node: 29.7.0 jest-junit: 16.0.0 - jest-playwright-preset: 4.0.0(jest-circus@29.7.0)(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0) + jest-playwright-preset: 4.0.0(jest-circus@29.7.0(babel-plugin-macros@3.1.0))(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0)) jest-runner: 29.7.0 jest-serializer-html: 7.1.0 - jest-watch-typeahead: 2.2.2(jest@29.7.0) + jest-watch-typeahead: 2.2.2(jest@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0)) nyc: 15.1.0 playwright: 1.44.1 transitivePeerDependencies: @@ -14711,14 +14803,14 @@ snapshots: - supports-color - ts-node - '@storybook/test@8.1.5(jest@29.7.0)(vitest@1.6.0)': + '@storybook/test@8.1.5(@jest/globals@29.7.0)(jest@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0))(vitest@1.6.0(@types/node@20.14.1)(@vitest/ui@1.6.0)(jsdom@24.1.0))': dependencies: '@storybook/client-logger': 8.1.5 '@storybook/core-events': 8.1.5 '@storybook/instrumenter': 8.1.5 '@storybook/preview-api': 8.1.5 '@testing-library/dom': 9.3.4 - '@testing-library/jest-dom': 6.4.5(jest@29.7.0)(vitest@1.6.0) + '@testing-library/jest-dom': 6.4.5(@jest/globals@29.7.0)(jest@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0))(vitest@1.6.0(@types/node@20.14.1)(@vitest/ui@1.6.0)(jsdom@24.1.0)) '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) '@vitest/expect': 1.3.1 '@vitest/spy': 1.6.0 @@ -14730,21 +14822,23 @@ snapshots: - jest - vitest - '@storybook/theming@8.1.5(react-dom@18.3.1)(react@18.3.1)': + '@storybook/theming@8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) '@storybook/client-logger': 8.1.5 '@storybook/global': 5.0.0 memoizerific: 1.11.3 + optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/theming@8.1.9(react-dom@18.3.1)(react@18.3.1)': + '@storybook/theming@8.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) '@storybook/client-logger': 8.1.9 '@storybook/global': 5.0.0 memoizerific: 1.11.3 + optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -14849,7 +14943,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.5.7': optional: true - '@swc/core@1.5.24': + '@swc/core@1.5.24(@swc/helpers@0.5.11)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.7 @@ -14864,8 +14958,9 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.5.24 '@swc/core-win32-ia32-msvc': 1.5.24 '@swc/core-win32-x64-msvc': 1.5.24 + '@swc/helpers': 0.5.11 - '@swc/core@1.5.7': + '@swc/core@1.5.7(@swc/helpers@0.5.11)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.7 @@ -14880,6 +14975,7 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.5.7 '@swc/core-win32-ia32-msvc': 1.5.7 '@swc/core-win32-x64-msvc': 1.5.7 + '@swc/helpers': 0.5.11 '@swc/counter@0.1.3': {} @@ -14887,10 +14983,10 @@ snapshots: dependencies: tslib: 2.6.2 - '@swc/jest@0.2.36(@swc/core@1.5.7)': + '@swc/jest@0.2.36(@swc/core@1.5.7(@swc/helpers@0.5.11))': dependencies: '@jest/create-cache-key-function': 29.7.0 - '@swc/core': 1.5.7 + '@swc/core': 1.5.7(@swc/helpers@0.5.11) '@swc/counter': 0.1.3 jsonc-parser: 3.2.1 @@ -14924,23 +15020,23 @@ snapshots: '@tanstack/query-core': 5.40.0 react: 18.3.1 - '@tanstack/react-router@1.34.9(react-dom@18.3.1)(react@18.3.1)': + '@tanstack/react-router@1.34.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/history': 1.31.16 - '@tanstack/react-store': 0.2.1(react-dom@18.3.1)(react@18.3.1) + '@tanstack/react-store': 0.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-store@0.2.1(react-dom@18.3.1)(react@18.3.1)': + '@tanstack/react-store@0.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/store': 0.1.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) use-sync-external-store: 1.2.2(react@18.3.1) - '@tanstack/react-table@8.17.3(react-dom@18.3.1)(react@18.3.1)': + '@tanstack/react-table@8.17.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/table-core': 8.17.3 react: 18.3.1 @@ -14957,7 +15053,7 @@ snapshots: prettier: 3.3.0 zod: 3.23.8 - '@tanstack/router-vite-plugin@1.34.8(vite@5.2.12)': + '@tanstack/router-vite-plugin@1.34.8(vite@5.2.12(@types/node@20.14.1))': dependencies: '@babel/core': 7.24.6 '@babel/generator': 7.24.6 @@ -14973,7 +15069,7 @@ snapshots: '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 - '@vitejs/plugin-react': 4.3.0(vite@5.2.12) + '@vitejs/plugin-react': 4.3.0(vite@5.2.12(@types/node@20.14.1)) zod: 3.23.8 transitivePeerDependencies: - supports-color @@ -14983,17 +15079,6 @@ snapshots: '@tanstack/table-core@8.17.3': {} - '@testing-library/dom@10.1.0': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/runtime': 7.24.7 - '@types/aria-query': 5.0.4 - aria-query: 5.3.0 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - '@testing-library/dom@9.3.4': dependencies: '@babel/code-frame': 7.24.6 @@ -15005,7 +15090,7 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.4.5(jest@29.7.0)(vitest@1.6.0)': + '@testing-library/jest-dom@6.4.5(@jest/globals@29.7.0)(jest@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0))(vitest@1.6.0(@types/node@20.14.1)(@vitest/ui@1.6.0)(jsdom@24.1.0))': dependencies: '@adobe/css-tools': 4.3.3 '@babel/runtime': 7.24.6 @@ -15013,12 +15098,14 @@ snapshots: chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 - jest: 29.7.0(@types/node@20.14.1) lodash: 4.17.21 redent: 3.0.0 + optionalDependencies: + '@jest/globals': 29.7.0 + jest: 29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0) vitest: 1.6.0(@types/node@20.14.1)(@vitest/ui@1.6.0)(jsdom@24.1.0) - '@testing-library/react@14.3.1(react-dom@18.3.1)(react@18.3.1)': + '@testing-library/react@14.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.6 '@testing-library/dom': 9.3.4 @@ -15026,10 +15113,6 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@testing-library/user-event@14.5.2(@testing-library/dom@10.1.0)': - dependencies: - '@testing-library/dom': 10.1.0 - '@testing-library/user-event@14.5.2(@testing-library/dom@9.3.4)': dependencies: '@testing-library/dom': 9.3.4 @@ -15275,7 +15358,7 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.1 '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -15288,6 +15371,7 @@ snapshots: ignore: 5.3.1 natural-compare: 1.4.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -15300,6 +15384,7 @@ snapshots: '@typescript-eslint/visitor-keys': 7.12.0 debug: 4.3.5 eslint: 8.57.0 + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -15321,6 +15406,7 @@ snapshots: debug: 4.3.5 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -15338,6 +15424,7 @@ snapshots: is-glob: 4.0.3 semver: 7.6.2 tsutils: 3.21.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -15352,6 +15439,7 @@ snapshots: 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 @@ -15392,7 +15480,7 @@ snapshots: '@typescript-eslint/types': 7.12.0 eslint-visitor-keys: 3.4.3 - '@uidotdev/usehooks@2.4.1(react-dom@18.3.1)(react@18.3.1)': + '@uidotdev/usehooks@2.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -15472,14 +15560,14 @@ snapshots: d3-time-format: 4.1.0 internmap: 2.0.3 - '@vitejs/plugin-react-swc@3.7.0(vite@5.2.12)': + '@vitejs/plugin-react-swc@3.7.0(@swc/helpers@0.5.11)(vite@5.2.12(@types/node@20.14.1))': dependencies: - '@swc/core': 1.5.24 + '@swc/core': 1.5.24(@swc/helpers@0.5.11) vite: 5.2.12(@types/node@20.14.1) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@4.3.0(vite@5.2.12)': + '@vitejs/plugin-react@4.3.0(vite@5.2.12(@types/node@20.14.1))': dependencies: '@babel/core': 7.24.6 '@babel/plugin-transform-react-jsx-self': 7.24.6(@babel/core@7.24.6) @@ -15490,7 +15578,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-istanbul@1.6.0(vitest@1.6.0)': + '@vitest/coverage-istanbul@1.6.0(vitest@1.6.0(@types/node@20.14.1)(@vitest/ui@1.6.0)(jsdom@24.1.0))': dependencies: debug: 4.3.5 istanbul-lib-coverage: 3.2.2 @@ -15730,13 +15818,13 @@ snapshots: dependencies: '@babel/core': 7.24.7 - babel-jest@29.7.0(@babel/core@7.24.6): + babel-jest@29.7.0(@babel/core@7.24.7): dependencies: - '@babel/core': 7.24.6 + '@babel/core': 7.24.7 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.6) + babel-preset-jest: 29.6.3(@babel/core@7.24.7) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -15761,8 +15849,8 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.24.6 - '@babel/types': 7.24.6 + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 @@ -15812,11 +15900,27 @@ snapshots: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.6) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.6) - babel-preset-jest@29.6.3(@babel/core@7.24.6): + babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.7): dependencies: - '@babel/core': 7.24.6 + '@babel/core': 7.24.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) + + babel-preset-jest@29.6.3(@babel/core@7.24.7): + dependencies: + '@babel/core': 7.24.7 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.6) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) balanced-match@0.4.2: {} @@ -16052,10 +16156,10 @@ snapshots: clsx@2.1.1: {} - cmdk@1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + cmdk@1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -16164,13 +16268,13 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - create-jest@29.7.0(@types/node@20.14.1): + create-jest@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.14.1) + jest-config: 29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -16279,7 +16383,9 @@ snapshots: decimal.js@10.4.3: {} - dedent@1.5.3: {} + dedent@1.5.3(babel-plugin-macros@3.1.0): + optionalDependencies: + babel-plugin-macros: 3.1.0 deep-eql@4.1.3: dependencies: @@ -16552,6 +16658,18 @@ snapshots: optionalDependencies: source-map: 0.6.1 + eslint-plugin-react-compiler@0.0.0-experimental-0998c1e-20240625(eslint@8.57.0): + dependencies: + '@babel/core': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.24.7) + eslint: 8.57.0 + hermes-parser: 0.20.1 + zod: 3.23.8 + zod-validation-error: 3.3.0(zod@3.23.8) + transitivePeerDependencies: + - supports-color + eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): dependencies: eslint: 8.57.0 @@ -16874,11 +16992,13 @@ snapshots: fraction.js@4.3.7: {} - framer-motion@11.2.10(react-dom@18.3.1)(react@18.3.1): + framer-motion@11.2.10(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: + tslib: 2.6.2 + optionalDependencies: + '@emotion/is-prop-valid': 1.2.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.6.2 fresh@0.5.2: {} @@ -16921,7 +17041,7 @@ snapshots: get-caller-file@2.0.5: {} get-dom-document@0.1.3(jsdom@24.1.0): - dependencies: + optionalDependencies: jsdom: 24.1.0 get-func-name@2.0.2: {} @@ -17102,6 +17222,12 @@ snapshots: property-information: 5.6.0 space-separated-tokens: 1.1.5 + hermes-estree@0.20.1: {} + + hermes-parser@0.20.1: + dependencies: + hermes-estree: 0.20.1 + hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 @@ -17415,7 +17541,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.24.6 + '@babel/core': 7.24.7 '@babel/parser': 7.24.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 @@ -17488,7 +17614,7 @@ snapshots: jest-util: 29.7.0 p-limit: 3.1.0 - jest-circus@29.7.0: + jest-circus@29.7.0(babel-plugin-macros@3.1.0): dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 @@ -17497,7 +17623,7 @@ snapshots: '@types/node': 20.14.1 chalk: 4.1.2 co: 4.6.0 - dedent: 1.5.3 + dedent: 1.5.3(babel-plugin-macros@3.1.0) is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -17514,16 +17640,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.14.1): + jest-cli@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0): dependencies: - '@jest/core': 29.7.0 + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.14.1) + create-jest: 29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.14.1) + jest-config: 29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -17533,19 +17659,18 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.14.1): + jest-config@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0): dependencies: - '@babel/core': 7.24.6 + '@babel/core': 7.24.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.1 - babel-jest: 29.7.0(@babel/core@7.24.6) + babel-jest: 29.7.0(@babel/core@7.24.7) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.7.0 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) jest-environment-node: 29.7.0 jest-get-type: 29.6.3 jest-regex-util: 29.6.3 @@ -17558,6 +17683,8 @@ snapshots: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.14.1 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -17645,11 +17772,11 @@ snapshots: '@types/node': 20.14.1 jest-util: 29.7.0 - jest-playwright-preset@4.0.0(jest-circus@29.7.0)(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0): + jest-playwright-preset@4.0.0(jest-circus@29.7.0(babel-plugin-macros@3.1.0))(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0)): dependencies: expect-playwright: 0.8.0 - jest: 29.7.0(@types/node@20.14.1) - jest-circus: 29.7.0 + jest: 29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0) + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) jest-environment-node: 29.7.0 jest-process-manager: 0.4.0 jest-runner: 29.7.0 @@ -17662,7 +17789,7 @@ snapshots: - supports-color jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - dependencies: + optionalDependencies: jest-resolve: 29.7.0 jest-process-manager@0.4.0: @@ -17802,11 +17929,11 @@ snapshots: leven: 3.1.0 pretty-format: 29.7.0 - jest-watch-typeahead@2.2.2(jest@29.7.0): + jest-watch-typeahead@2.2.2(jest@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0)): dependencies: ansi-escapes: 6.2.1 chalk: 5.3.0 - jest: 29.7.0(@types/node@20.14.1) + jest: 29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0) jest-regex-util: 29.6.3 jest-watcher: 29.7.0 slash: 5.1.0 @@ -17831,12 +17958,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.14.1): + jest@29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0): dependencies: - '@jest/core': 29.7.0 + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.14.1) + jest-cli: 29.7.0(@types/node@20.14.1)(babel-plugin-macros@3.1.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -17868,7 +17995,7 @@ snapshots: dependencies: argparse: 2.0.1 - jscodeshift@0.15.2(@babel/preset-env@7.24.7): + jscodeshift@0.15.2(@babel/preset-env@7.24.7(@babel/core@7.24.7)): dependencies: '@babel/core': 7.24.7 '@babel/parser': 7.24.7 @@ -17877,7 +18004,6 @@ snapshots: '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.7) - '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/preset-flow': 7.24.7(@babel/core@7.24.7) '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) '@babel/register': 7.24.6(@babel/core@7.24.7) @@ -17891,6 +18017,8 @@ snapshots: recast: 0.23.9 temp: 0.8.4 write-file-atomic: 2.4.3 + optionalDependencies: + '@babel/preset-env': 7.24.7(@babel/core@7.24.7) transitivePeerDependencies: - supports-color @@ -18199,7 +18327,7 @@ snapshots: neo-async@2.6.2: {} - next-themes@0.3.0(react-dom@18.3.1)(react@18.3.1): + next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -18531,8 +18659,9 @@ snapshots: postcss-load-config@4.0.2(postcss@8.4.38): dependencies: lilconfig: 3.1.1 - postcss: 8.4.38 yaml: 2.4.3 + optionalDependencies: + postcss: 8.4.38 postcss-nested@6.0.1(postcss@8.4.38): dependencies: @@ -18782,7 +18911,7 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - react-colorful@5.6.1(react-dom@18.3.1)(react@18.3.1): + react-colorful@5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -18828,7 +18957,7 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 - react-element-to-jsx-string@15.0.0(react-dom@18.3.1)(react@18.3.1): + react-element-to-jsx-string@15.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@base2/pretty-print-object': 1.0.1 is-plain-object: 5.0.0 @@ -18840,12 +18969,13 @@ snapshots: dependencies: react: 18.3.1 - react-i18next@14.1.2(i18next@23.11.5)(react-dom@18.3.1)(react@18.3.1): + react-i18next@14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.24.6 html-parse-stringify: 3.0.1 i18next: 23.11.5 react: 18.3.1 + optionalDependencies: react-dom: 18.3.1(react@18.3.1) react-is@16.13.1: {} @@ -18866,47 +18996,51 @@ snapshots: react-remove-scroll-bar@2.3.6(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.3 react: 18.3.1 react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.3.3 react-remove-scroll@2.5.10(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.3 react: 18.3.1 react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1) react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) tslib: 2.6.2 use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1) use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 react-remove-scroll@2.5.5(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.3 react: 18.3.1 react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1) react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) tslib: 2.6.2 use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1) use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 - react-resizable-panels@2.0.19(react-dom@18.3.1)(react@18.3.1): + react-resizable-panels@2.0.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-simple-animate@3.5.2(react-dom@18.3.1): + react-simple-animate@3.5.2(react-dom@18.3.1(react@18.3.1)): dependencies: react-dom: 18.3.1(react@18.3.1) react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.3 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.3.3 react-textarea-autosize@8.5.3(@types/react@18.3.3)(react@18.3.1): dependencies: @@ -18917,7 +19051,7 @@ snapshots: transitivePeerDependencies: - '@types/react' - react-use-websocket@4.8.1(react-dom@18.3.1)(react@18.3.1): + react-use-websocket@4.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -19045,7 +19179,7 @@ snapshots: dependencies: es6-error: 4.1.1 - remirror@2.0.39(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0): + remirror@2.0.39(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0)(prettier@3.3.2): dependencies: '@babel/runtime': 7.24.6 '@remirror/core': 2.0.19(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) @@ -19060,7 +19194,7 @@ snapshots: '@remirror/extension-bold': 2.0.13(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) '@remirror/extension-callout': 2.0.15(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) '@remirror/extension-code': 2.0.13(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) - '@remirror/extension-code-block': 2.0.18(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) + '@remirror/extension-code-block': 2.0.18(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0)(prettier@3.3.2) '@remirror/extension-codemirror5': 2.0.13(@remirror/pm@2.0.8)(@types/codemirror@5.60.15)(@types/node@20.14.1)(codemirror@5.65.16)(jsdom@24.1.0) '@remirror/extension-collaboration': 2.0.13(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) '@remirror/extension-columns': 2.0.14(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) @@ -19108,13 +19242,15 @@ snapshots: '@remirror/pm': 2.0.8 '@remirror/preset-core': 2.0.16(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) '@remirror/preset-formatting': 2.0.14(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) - '@remirror/preset-wysiwyg': 2.0.19(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0) + '@remirror/preset-wysiwyg': 2.0.19(@remirror/pm@2.0.8)(@types/node@20.14.1)(jsdom@24.1.0)(prettier@3.3.2) '@remirror/theme': 2.0.9(@remirror/pm@2.0.8) '@types/codemirror': 5.60.15 '@types/refractor': 3.4.1 codemirror: 5.65.16 refractor: 3.6.0 yjs: 13.6.15 + optionalDependencies: + prettier: 3.3.2 transitivePeerDependencies: - '@types/node' - jsdom @@ -19326,7 +19462,7 @@ snapshots: slash@5.1.0: {} - sonner@1.4.41(react-dom@18.3.1)(react@18.3.1): + sonner@1.4.41(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -19403,9 +19539,9 @@ snapshots: store2@2.14.3: {} - storybook@8.1.9(react-dom@18.3.1)(react@18.3.1): + storybook@8.1.9(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@storybook/cli': 8.1.9(react-dom@18.3.1)(react@18.3.1) + '@storybook/cli': 8.1.9(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@babel/preset-env' - bufferutil @@ -19672,7 +19808,7 @@ snapshots: ts-interface-checker@0.1.13: {} tsconfck@3.1.0(typescript@5.4.5): - dependencies: + optionalDependencies: typescript: 5.4.5 tsconfig-paths@4.2.0: @@ -19808,9 +19944,10 @@ snapshots: use-callback-ref@1.3.2(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.3 react: 18.3.1 tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.3.3 use-composed-ref@1.3.0(react@18.3.1): dependencies: @@ -19824,21 +19961,24 @@ snapshots: use-isomorphic-layout-effect@1.1.2(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 use-latest@1.2.1(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.3 react: 18.3.1 use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.3 detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.3.3 use-sync-external-store@1.2.0(react@18.3.1): dependencies: @@ -19877,9 +20017,9 @@ snapshots: vary@1.1.2: {} - vaul@0.9.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + vaul@0.9.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -19903,11 +20043,12 @@ snapshots: - supports-color - terser - vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.12): + vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.12(@types/node@20.14.1)): dependencies: debug: 4.3.5 globrex: 0.1.2 tsconfck: 3.1.0(typescript@5.4.5) + optionalDependencies: vite: 5.2.12(@types/node@20.14.1) transitivePeerDependencies: - supports-color @@ -19915,27 +20056,24 @@ snapshots: vite@5.2.12(@types/node@20.14.1): dependencies: - '@types/node': 20.14.1 esbuild: 0.20.2 postcss: 8.4.38 rollup: 4.18.0 optionalDependencies: + '@types/node': 20.14.1 fsevents: 2.3.3 vitest@1.6.0(@types/node@20.14.1)(@vitest/ui@1.6.0)(jsdom@24.1.0): dependencies: - '@types/node': 20.14.1 '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 '@vitest/snapshot': 1.6.0 '@vitest/spy': 1.6.0 - '@vitest/ui': 1.6.0(vitest@1.6.0) '@vitest/utils': 1.6.0 acorn-walk: 8.3.2 chai: 4.4.1 debug: 4.3.5 execa: 8.0.1 - jsdom: 24.1.0 local-pkg: 0.5.0 magic-string: 0.30.10 pathe: 1.1.2 @@ -19947,6 +20085,10 @@ snapshots: vite: 5.2.12(@types/node@20.14.1) vite-node: 1.6.0(@types/node@20.14.1) why-is-node-running: 2.2.2 + optionalDependencies: + '@types/node': 20.14.1 + '@vitest/ui': 1.6.0(vitest@1.6.0) + jsdom: 24.1.0 transitivePeerDependencies: - less - lightningcss @@ -20109,7 +20251,7 @@ snapshots: xtend@4.0.2: {} - y-prosemirror@1.2.5(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.7)(y-protocols@1.0.6)(yjs@13.6.15): + y-prosemirror@1.2.5(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.7)(y-protocols@1.0.6(yjs@13.6.15))(yjs@13.6.15): dependencies: lib0: 0.2.94 prosemirror-model: 1.21.1 @@ -20174,10 +20316,15 @@ snapshots: yocto-queue@1.0.0: {} + zod-validation-error@3.3.0(zod@3.23.8): + dependencies: + zod: 3.23.8 + zod@3.23.8: {} zustand@4.5.2(@types/react@18.3.3)(react@18.3.1): dependencies: + use-sync-external-store: 1.2.0(react@18.3.1) + optionalDependencies: '@types/react': 18.3.3 react: 18.3.1 - use-sync-external-store: 1.2.0(react@18.3.1) diff --git a/dashboard/public/locales/en.json b/dashboard/public/locales/en.json index 87a327d..215b049 100644 --- a/dashboard/public/locales/en.json +++ b/dashboard/public/locales/en.json @@ -38,6 +38,13 @@ "mux": "Mux", "fragment": "Fragment", "enable": "Enable", + "enabled": "Enabled", + "activated": "Activated", + "unlimited": "Unlimited", + "left": "Left", + "reached": "Reached", + "inactive": "Inactive", + "active": "Active", "disable": "Disable", "close": "Close", "save": "Save", @@ -140,6 +147,7 @@ } }, "users": { + "data_limit_reached": "Data Limit Reached", "note-placeholder": "Additional information about user", "data_limit": "Data Limit", "traffic": "Traffic", @@ -148,15 +156,16 @@ "online_at": "Last Use", "expire_date": "Expire Date", "unlimited": "Unlimited", + "never": "Never", "limited": "Limited", "data_limit_method": "Data Limit", - "determined_expire": "Determined", + "fixed_date": "Fixed Date", "expire_method": "Expiration", - "onhold_expire": "On Hold", + "on_first_use": "On first use", "reset_usage": "Reset Usage", "revoke_subscription": "Revoke Subscription", - "on_hold_expire_duration": "On Hold", - "on_hold_timeout": "On Hold Timeout", + "usage_duration": "Usage Duration", + "activation_deadline": "Activation Deadline", "settings": { "subscription_link": { "copied": "Subscription Link Copied", diff --git a/dashboard/src/components/awaiting/index.tsx b/dashboard/src/components/awaiting/index.tsx index 58742ad..02edfe6 100644 --- a/dashboard/src/components/awaiting/index.tsx +++ b/dashboard/src/components/awaiting/index.tsx @@ -1,10 +1,10 @@ import { type FC } from "react"; interface AwaitingProps { - isFetching: boolean; - isNotFound: boolean; - NotFound: JSX.Element; - Skeleton: JSX.Element; + isFetching?: boolean; + isNotFound?: boolean; + NotFound?: JSX.Element; + Skeleton?: JSX.Element; Component: JSX.Element; } diff --git a/dashboard/src/components/boolean-pill/index.tsx b/dashboard/src/components/boolean-pill/index.tsx new file mode 100644 index 0000000..18b5aff --- /dev/null +++ b/dashboard/src/components/boolean-pill/index.tsx @@ -0,0 +1,16 @@ +import type { FC } from "react"; +import { Badge } from "@marzneshin/components"; + +interface BooleanPillProps { + active: boolean; + activeLabel: string; + inactiveLabel: string; +} + +export const BooleanPill: FC = ({ active, activeLabel, inactiveLabel }) => { + return ( + + {active ? activeLabel : inactiveLabel} + + ) +} diff --git a/dashboard/src/components/index.ts b/dashboard/src/components/index.ts index 9461323..2949f2b 100644 --- a/dashboard/src/components/index.ts +++ b/dashboard/src/components/index.ts @@ -14,3 +14,5 @@ export * from "./loading"; export * from "./entity-field-card"; export * from "./logo"; export * from "./awaiting"; +export * from "./boolean-pill"; +export * from "./info-table"; diff --git a/dashboard/src/components/info-table/circular-progress-bar.tsx b/dashboard/src/components/info-table/circular-progress-bar.tsx new file mode 100644 index 0000000..853f021 --- /dev/null +++ b/dashboard/src/components/info-table/circular-progress-bar.tsx @@ -0,0 +1,23 @@ +import { CircularProgress } from "@nextui-org/progress"; +import { + TableCell, + TableRow, +} from "@marzneshin/components"; +import { useTranslation } from "react-i18next"; +import type { FC } from "react"; + +export const CircularProgressBarRow: FC<{ + label: string; + value: number; + limit: number | undefined; +}> = ({ label, value, limit }) => { + const { t } = useTranslation() + return ( + + {label} + + {limit ? : t("unlimited")} + + + ) +}; diff --git a/dashboard/src/components/info-table/date-table-row.tsx b/dashboard/src/components/info-table/date-table-row.tsx new file mode 100644 index 0000000..29c10a9 --- /dev/null +++ b/dashboard/src/components/info-table/date-table-row.tsx @@ -0,0 +1,14 @@ +import { FC } from "react"; +import { TableRowWithCell } from "./table-row-with-cell"; +import { format, isValid } from "date-fns"; + +export const DateTableRow: FC<{ label: string; date?: Date | null | string }> = ({ + label, + date, +}) => { + let formattedDate = ""; + if (date && isValid(new Date(date))) { + formattedDate = format(date, "PPP"); + } + return ; +}; diff --git a/dashboard/src/components/info-table/index.ts b/dashboard/src/components/info-table/index.ts new file mode 100644 index 0000000..6cd9098 --- /dev/null +++ b/dashboard/src/components/info-table/index.ts @@ -0,0 +1,3 @@ +export * from "./date-table-row" +export * from "./table-row-with-cell" +export * from "./circular-progress-bar" diff --git a/dashboard/src/components/info-table/table-row-with-cell.tsx b/dashboard/src/components/info-table/table-row-with-cell.tsx new file mode 100644 index 0000000..8236c98 --- /dev/null +++ b/dashboard/src/components/info-table/table-row-with-cell.tsx @@ -0,0 +1,15 @@ +import { + TableCell, + TableRow, +} from "@marzneshin/components"; +import { FC } from "react"; + +export const TableRowWithCell: FC<{ + label: string; + value?: string | number | JSX.Element | null; +}> = ({ label, value }) => ( + + {label} + {value} + +); diff --git a/dashboard/src/features/hosts/dialogs/settings/index.tsx b/dashboard/src/features/hosts/dialogs/settings/index.tsx index 469f0bc..26b663e 100644 --- a/dashboard/src/features/hosts/dialogs/settings/index.tsx +++ b/dashboard/src/features/hosts/dialogs/settings/index.tsx @@ -6,9 +6,7 @@ import { SheetTitle, Table, TableBody, - TableCell, - TableHead, - TableRow, + TableRowWithCell, } from "@marzneshin/components" import { useTranslation } from "react-i18next" import { HostType } from "../.." @@ -37,62 +35,13 @@ export const HostSettingsDialog: FC = ({ onOpenChange, - - - {t('remark')} - - - {entity.remark} - - - - - {t('address')} - - - {entity.address} - - - - - {t('port')} - - - {entity.port} - - - - - {t('host')} - - - {entity.host} - - - - - {t('path')} - - - {entity.path} - - - - - {t('sni')} - - - {entity.sni} - - - - - {t('alpn')} - - - {entity.alpn} - - + + + + + + +
diff --git a/dashboard/src/features/services/tables/users/columns.tsx b/dashboard/src/features/services/tables/users/columns.tsx index e8899e9..4d251e3 100644 --- a/dashboard/src/features/services/tables/users/columns.tsx +++ b/dashboard/src/features/services/tables/users/columns.tsx @@ -3,11 +3,12 @@ import { DataTableColumnHeader } from "@marzneshin/components/data-table/column- import i18n from "@marzneshin/features/i18n" import { UserType, - UsersStatus, - UsersStatusBadge + UserActivatedPill, + UserEnabledPill, + UserExpirationValue, + userTrafficSortingFn, } from "@marzneshin/features/users" import { CircularProgress } from "@nextui-org/progress"; -import { format } from "date-fns"; import { Badge } from "@marzneshin/components"; export const columns: ColumnDef[] = [ @@ -16,9 +17,24 @@ export const columns: ColumnDef[] = [ header: ({ column }) => , }, { - accessorKey: 'status', - header: ({ column }) => , - cell: ({ row }) => , + accessorKey: "activated", + header: ({ column }) => ( + + ), + cell: ({ row }) => , + }, + { + accessorKey: "enabled", + header: ({ column }) => ( + + ), + cell: ({ row }) => , }, { accessorKey: "used_traffic", @@ -35,19 +51,16 @@ export const columns: ColumnDef[] = [ return No Limit } }, - sortingFn: (rowA, rowB) => { - if (rowA.original.data_limit && rowB.original.data_limit) { - const rowAUsedTraffic = (rowA.original.used_traffic / rowA.original.data_limit) * 100 - const rowBUsedTraffic = (rowA.original.used_traffic / rowA.original.data_limit) * 100 - return rowAUsedTraffic > rowBUsedTraffic ? 1 : rowBUsedTraffic > rowAUsedTraffic ? -1 : 0 - } else { - return 0 - } - } + sortingFn: (rowA, rowB) => userTrafficSortingFn(rowA.original, rowB.original) }, { - accessorKey: 'expire', - header: ({ column }) => , - cell: ({ row }) => row.original.expire && format(row.original.expire, "PPP") - } + accessorKey: "expire", + header: ({ column }) => ( + + ), + cell: ({ row }) => , + }, ]; diff --git a/dashboard/src/features/users/components/dialogs/mutation/fields/activation-deadline.tsx b/dashboard/src/features/users/components/dialogs/mutation/fields/activation-deadline.tsx new file mode 100644 index 0000000..04f1650 --- /dev/null +++ b/dashboard/src/features/users/components/dialogs/mutation/fields/activation-deadline.tsx @@ -0,0 +1,7 @@ + +import { DateField } from "@marzneshin/features/users"; +import { FC } from "react"; + +export const ActivationDeadlineField: FC = () => { + return ; +}; diff --git a/dashboard/src/features/users/components/dialogs/mutation/fields/expire-date.tsx b/dashboard/src/features/users/components/dialogs/mutation/fields/expire-date.tsx index 018cf1a..6279a21 100644 --- a/dashboard/src/features/users/components/dialogs/mutation/fields/expire-date.tsx +++ b/dashboard/src/features/users/components/dialogs/mutation/fields/expire-date.tsx @@ -2,5 +2,5 @@ import { DateField } from "@marzneshin/features/users"; import { FC } from "react"; export const ExpireDateField: FC = () => { - return ; + return ; }; diff --git a/dashboard/src/features/users/components/dialogs/mutation/fields/index.ts b/dashboard/src/features/users/components/dialogs/mutation/fields/index.ts index dfe10ab..c050de0 100644 --- a/dashboard/src/features/users/components/dialogs/mutation/fields/index.ts +++ b/dashboard/src/features/users/components/dialogs/mutation/fields/index.ts @@ -4,5 +4,5 @@ export * from "./note" export * from "./services" export * from "./data-limit-reset-strategy" export * from "./username" -export * from "./onhold-timeout" -export * from "./onhold-expire-duration" +export * from "./activation-deadline" +export * from "./usage-duration" diff --git a/dashboard/src/features/users/components/dialogs/mutation/fields/onhold-timeout.tsx b/dashboard/src/features/users/components/dialogs/mutation/fields/onhold-timeout.tsx deleted file mode 100644 index 9eb5b66..0000000 --- a/dashboard/src/features/users/components/dialogs/mutation/fields/onhold-timeout.tsx +++ /dev/null @@ -1,7 +0,0 @@ - -import { DateField } from "@marzneshin/features/users"; -import { FC } from "react"; - -export const OnHoldTimeoutField: FC = () => { - return ; -}; diff --git a/dashboard/src/features/users/components/dialogs/mutation/fields/onhold-expire-duration.tsx b/dashboard/src/features/users/components/dialogs/mutation/fields/usage-duration.tsx similarity index 73% rename from dashboard/src/features/users/components/dialogs/mutation/fields/onhold-expire-duration.tsx rename to dashboard/src/features/users/components/dialogs/mutation/fields/usage-duration.tsx index ce5499b..3ae60f4 100644 --- a/dashboard/src/features/users/components/dialogs/mutation/fields/onhold-expire-duration.tsx +++ b/dashboard/src/features/users/components/dialogs/mutation/fields/usage-duration.tsx @@ -6,28 +6,28 @@ import { FormLabel, FormMessage } from '@marzneshin/components'; -import { FC, useEffect, useState } from 'react' +import { type FC, useEffect, useState } from 'react' import { useFormContext } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; -export const OnHoldExpireDurationField: FC = () => { +export const UsageDurationField: FC = () => { const form = useFormContext(); const { t } = useTranslation(); - const defaultDuration = (form.getValues('on_hold_expire_duration') ?? 0) / 86400; + const defaultDuration = (form.getValues('usage_duration') ?? 0) / 86400; const [duration, setDuration] = useState(defaultDuration); useEffect(() => { - form.setValue('on_hold_expire_duration', duration * 86400); + form.setValue('usage_duration', duration * 86400); }, [form, duration]); return ( ( - {t('page.users.on_hold_expire_duration')} ({t('days')}) + {t('page.users.usage_duration')} ({t('days')}) = ({ const getDefaultValues = useCallback( (): UserMutationType => ({ service_ids: [], - data_limit: undefined, - expire: null, + expire_strategy: "fixed_date", username: "", data_limit_reset_strategy: "no_reset", - status: "active", note: "", - on_hold_expire_duration: 0, - on_hold_timeout: undefined, }), [], ); @@ -72,8 +67,8 @@ export const UsersMutationDialog: FC = ({ return ( - - + + {entity ? t("page.users.dialogs.edition.title") @@ -81,15 +76,15 @@ export const UsersMutationDialog: FC = ({
- +
-
+
- + - + - +
diff --git a/dashboard/src/features/users/components/dialogs/mutation/schema.ts b/dashboard/src/features/users/components/dialogs/mutation/schema.ts deleted file mode 100644 index be058b2..0000000 --- a/dashboard/src/features/users/components/dialogs/mutation/schema.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { z } from 'zod'; -import { DATA_LIMIT_METRIC } from '@marzneshin/features/users'; - -export const UserSchema = z.object({ - username: z.string().min(1, { message: 'Username is required' }), - note: z.string().nullable(), - data_limit: z - .union([z.string().transform((str) => Number(str) * DATA_LIMIT_METRIC), z.number()]) - .refine(val => val >= 0, { message: 'The minimum number is 0' }) - .nullable() - .optional() - .transform((val) => val ?? 0), - expire: z.string().or(z.number()).nullable().optional(), - data_limit_reset_strategy: z.string().nullable().optional(), - status: z.string(), - on_hold_expire_duration: z.number().nullable().optional(), - on_hold_timeout: z.string().nullable().optional(), - service_ids: z.array(z.number().or(z.string())).nonempty({ message: 'At least one service is required' }) - .transform((v) => v.map(Number)), -}); diff --git a/dashboard/src/features/users/components/dialogs/mutation/sections/data-limit/use-data-limit.ts b/dashboard/src/features/users/components/dialogs/mutation/sections/data-limit/use-data-limit.ts index a75a5a5..47505a7 100644 --- a/dashboard/src/features/users/components/dialogs/mutation/sections/data-limit/use-data-limit.ts +++ b/dashboard/src/features/users/components/dialogs/mutation/sections/data-limit/use-data-limit.ts @@ -3,20 +3,21 @@ import { useFormContext } from "react-hook-form"; export const useDataLimit = () => { const form = useFormContext(); - const data_limit = form.watch("data_limit"); + const dataLimit = form.watch("data_limit"); - const [isDataLimitEnabled, setIsDataLimitEnabled] = useState(data_limit !== 0); + const [isDataLimitEnabled, setIsDataLimitEnabled] = useState(dataLimit !== 0); useEffect(() => { - setIsDataLimitEnabled(data_limit !== 0); - }, [data_limit]); + setIsDataLimitEnabled(dataLimit !== 0); + }, [dataLimit]); useEffect(() => { if (!isDataLimitEnabled) { form.setValue("data_limit", 0); form.setValue("data_limit_reset_strategy", "no_reset"); } - }, [isDataLimitEnabled, form]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [isDataLimitEnabled]); return { isDataLimitEnabled, setIsDataLimitEnabled }; }; diff --git a/dashboard/src/features/users/components/dialogs/mutation/sections/expiration-method/expiration-method.strategy.ts b/dashboard/src/features/users/components/dialogs/mutation/sections/expiration-method/expiration-method.strategy.ts new file mode 100644 index 0000000..4598aea --- /dev/null +++ b/dashboard/src/features/users/components/dialogs/mutation/sections/expiration-method/expiration-method.strategy.ts @@ -0,0 +1,56 @@ +import { useFormContext } from "react-hook-form"; +import { ExpireStrategy } from "@marzneshin/features/users"; + +class ExpirationMethodErrorClear { + protected clearErrors(form: ReturnType) { + form.clearErrors("expire_date"); + form.clearErrors("usage_duration"); + form.clearErrors("activation_deadline"); + } +} + +abstract class ExpirationMethodStrategy { + abstract apply(form: ReturnType): void; +} + +export class FirstUseStrategy + extends ExpirationMethodErrorClear + implements ExpirationMethodStrategy { + + apply(form: ReturnType) { + form.setValue("expire_strategy", "start_on_first_use"); + form.setValue("expire", undefined); + this.clearErrors(form); + } +} + +export class NeverStrategy + extends ExpirationMethodErrorClear + implements ExpirationMethodStrategy { + + apply(form: ReturnType) { + form.setValue("expire_strategy", 'never'); + form.setValue("expire_date", undefined); + form.setValue("activation_deadline", undefined); + form.setValue("usage_duration", undefined); + this.clearErrors(form); + } +} + +export class FixedStrategy + extends ExpirationMethodErrorClear + implements ExpirationMethodStrategy { + + apply(form: ReturnType) { + form.setValue("expire_strategy", 'fixed_date'); + form.setValue("on_hold_expire_duration", 0); + form.setValue("activation_deadline", null); + this.clearErrors(form); + } +} + +export const strategies: { [key in ExpireStrategy]: ExpirationMethodStrategy } = { + start_on_first_use: new FirstUseStrategy(), + never: new NeverStrategy(), + fixed_date: new FixedStrategy(), +}; diff --git a/dashboard/src/features/users/components/dialogs/mutation/sections/expiration-method/index.tsx b/dashboard/src/features/users/components/dialogs/mutation/sections/expiration-method/index.tsx index 660a9f8..56dd25d 100644 --- a/dashboard/src/features/users/components/dialogs/mutation/sections/expiration-method/index.tsx +++ b/dashboard/src/features/users/components/dialogs/mutation/sections/expiration-method/index.tsx @@ -5,19 +5,19 @@ import { TabsContent, FormLabel } from '@marzneshin/components'; -import { +import type { UserMutationType, + ExpireStrategy, } from "@marzneshin/features/users"; import { ExpireDateField, - OnHoldTimeoutField, - OnHoldExpireDurationField, + ActivationDeadlineField, + UsageDurationField, } from "@marzneshin/features/users/components/dialogs/mutation/fields"; import { TabsList } from "@radix-ui/react-tabs"; import { useTranslation } from "react-i18next"; import { useExpirationMethodTabs, - type ExpirationMethodStrategy } from "./use-expiration-method-tabs"; interface ExpirationMethodProps { @@ -32,7 +32,7 @@ export const ExpirationMethodFields: FC = ({ entity }) => } = useExpirationMethodTabs({ entity }); const handleTabChange = (value: string) => { - setSelectedExpirationMethodTab(value as ExpirationMethodStrategy); + setSelectedExpirationMethodTab(value as ExpireStrategy); }; return ( @@ -43,31 +43,31 @@ export const ExpirationMethodFields: FC = ({ entity }) => - {t('page.users.determined_expire')} + value="fixed_date"> + {t('page.users.fixed_date')} - {t('page.users.onhold_expire')} + value="start_on_first_use"> + {t('page.users.on_first_use')} - {t('page.users.unlimited')} + value="never"> + {t('page.users.never')} - + - - - + + + diff --git a/dashboard/src/features/users/components/dialogs/mutation/sections/expiration-method/use-expiration-method-tabs.ts b/dashboard/src/features/users/components/dialogs/mutation/sections/expiration-method/use-expiration-method-tabs.ts index 0388bc0..381b819 100644 --- a/dashboard/src/features/users/components/dialogs/mutation/sections/expiration-method/use-expiration-method-tabs.ts +++ b/dashboard/src/features/users/components/dialogs/mutation/sections/expiration-method/use-expiration-method-tabs.ts @@ -1,45 +1,23 @@ -import { UserMutationType } from "@marzneshin/features/users"; -import { useEffect, useState } from "react"; +import { UserMutationType, ExpireStrategy } from "@marzneshin/features/users"; +import { useState, useEffect } from "react"; import { useFormContext } from "react-hook-form"; +import { strategies } from "./expiration-method.strategy" -export type ExpirationMethodStrategy = "onhold" | "determined" | "unlimited"; - -const getUserExpirationMethod = (entity: UserMutationType): ExpirationMethodStrategy => { - if (entity.status === "on_hold") return 'onhold'; - if (entity.expire != null) return 'determined'; - return 'unlimited'; -}; export const useExpirationMethodTabs = ({ entity }: { entity: UserMutationType | null }) => { const form = useFormContext(); - const defaultExpirationMethodTab = entity ? getUserExpirationMethod(entity) : 'determined'; - const [selectedExpirationMethodTab, setSelectedExpirationMethodTab] = useState(defaultExpirationMethodTab); + const defaultExpirationMethodTab = entity ? entity.expire_strategy : 'fixed_date'; + const [selectedExpirationMethodTab, setSelectedExpirationMethodTab] = useState(defaultExpirationMethodTab); useEffect(() => { - form.setValue("status", selectedExpirationMethodTab === 'onhold' ? 'on_hold' : 'active'); - - if (selectedExpirationMethodTab === 'onhold') { - form.setValue("expire", undefined); - } else if (selectedExpirationMethodTab === "unlimited") { - form.setValue("expire", 0); - form.setValue("on_hold_expire_duration", undefined); - form.setValue("on_hold_timeout", undefined); - } else { - form.setValue("on_hold_expire_duration", 0); - form.setValue("on_hold_timeout", null); - } - - form.clearErrors("expire"); - form.clearErrors("on_hold_expire_duration"); - form.clearErrors("on_hold_timeout"); - - // eslint-disable-next-line + strategies[selectedExpirationMethodTab as ExpireStrategy].apply(form); + // eslint-disable-next-line react-hooks/exhaustive-deps }, [selectedExpirationMethodTab]); return { - selectedExpirationMethodTab, + selectedExpirationMethodTab: selectedExpirationMethodTab, defaultExpirationMethodTab, - setSelectedExpirationMethodTab + setSelectedExpirationMethodTab, }; }; diff --git a/dashboard/src/features/users/components/dialogs/settings/index.tsx b/dashboard/src/features/users/components/dialogs/settings/index.tsx index 86bbe51..9ffa521 100644 --- a/dashboard/src/features/users/components/dialogs/settings/index.tsx +++ b/dashboard/src/features/users/components/dialogs/settings/index.tsx @@ -9,23 +9,29 @@ import { TabsContent, TabsList, TabsTrigger, + Awaiting, } from "@marzneshin/components"; -import { UserServicesTable } from "@marzneshin/features/users"; import { + UserServicesTable, useUserUsageResetCmd, type UserType } from "@marzneshin/features/users"; import { type FC, useEffect } from "react"; import { useTranslation } from "react-i18next"; -import { QRCodeSection, UserInfoTable } from "./user-info"; -import { SubscriptionActions } from "./user-info/subscription-actions"; -import { UserStatusEnableButton } from "./user-info/user-status-enable-button"; +import { + UserStatusEnableButton, + SubscriptionActions, + QRCodeSection, + UserInfoTable +} from "./user-info"; +import { UserInfoSkeleton } from "./skeleton"; interface UsersSettingsDialogProps { onOpenChange: (state: boolean) => void; open: boolean; - entity: UserType; + entity: UserType | null; onClose: () => void; + isPending: boolean; } export const UsersSettingsDialog: FC = ({ @@ -33,6 +39,7 @@ export const UsersSettingsDialog: FC = ({ open, entity, onClose, + isPending, }) => { const { t } = useTranslation(); const { mutate: resetUsage } = useUserUsageResetCmd(); @@ -43,44 +50,50 @@ export const UsersSettingsDialog: FC = ({ return ( - - - - {t("settings")} - - - - - {t("user_info")} - - - {t("services")} - - - {t("subscription")} - - - - -
- - -
-
- - - - - - - -
-
+ + + {t("settings")} + + + + + + {t("user_info")} + + + {t("services")} + + + {t("subscription")} + + + + +
+ + +
+
+ + + + + + + +
+ + ) : (
Not Found
)} + Skeleton={} + isFetching={isPending} + />
); diff --git a/dashboard/src/features/users/components/dialogs/settings/skeleton.tsx b/dashboard/src/features/users/components/dialogs/settings/skeleton.tsx new file mode 100644 index 0000000..649aa11 --- /dev/null +++ b/dashboard/src/features/users/components/dialogs/settings/skeleton.tsx @@ -0,0 +1,39 @@ +import { Skeleton } from "@marzneshin/components"; + +export const UserInfoSkeleton = () => { + return ( +
+

+ +

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+
+ ); +}; diff --git a/dashboard/src/features/users/components/dialogs/settings/user-info/index.ts b/dashboard/src/features/users/components/dialogs/settings/user-info/index.ts index 74edbfb..689a8bf 100644 --- a/dashboard/src/features/users/components/dialogs/settings/user-info/index.ts +++ b/dashboard/src/features/users/components/dialogs/settings/user-info/index.ts @@ -1,3 +1,4 @@ export * from './table' +export * from './subscription-actions' export * from './user-status-enable-button' export * from './qrcode' diff --git a/dashboard/src/features/users/components/dialogs/settings/user-info/table.tsx b/dashboard/src/features/users/components/dialogs/settings/user-info/table.tsx index 6da46a3..ac66534 100644 --- a/dashboard/src/features/users/components/dialogs/settings/user-info/table.tsx +++ b/dashboard/src/features/users/components/dialogs/settings/user-info/table.tsx @@ -5,63 +5,23 @@ import { CardTitle, Table, TableBody, - TableCell, - TableRow, + TableRowWithCell, + DateTableRow, } from "@marzneshin/components"; import { FC } from "react"; import { - UserType, - UsersStatus, - UsersStatusBadge, + type UserProp, + UserEnabledPill, + UserUsedTraffic, + UserActivatedPill, + UserDataLimitReachedPill, } from "@marzneshin/features/users"; -import { CircularProgress } from "@nextui-org/progress"; import { useTranslation } from "react-i18next"; -import { format, isDate, isValid } from "date-fns"; -interface UserInfoTableProps { - entity: UserType; -} - -const TableRowWithCell: FC<{ - label: string; - value: string | number | JSX.Element; -}> = ({ label, value }) => ( - - {label} - {value} - -); - -const DateTableRow: FC<{ label: string; date: Date | string }> = ({ - label, - date, -}) => { - let formattedDate = ""; - if (date && isValid(date)) { - formattedDate = format(date, "PPP"); - } - return ; -}; - -const CircularProgressBarRow: FC<{ - label: string; - value: number; - limit: number; -}> = ({ label, value, limit }) => ( - - {label} - - - - -); - -export const UserInfoTable: FC = ({ entity }) => { +export const UserInfoTable: FC = ({ user: entity }) => { const { t } = useTranslation(); - const expireDate = entity.expire - ? isDate(entity.expire) - ? entity.expire - : new Date(entity.expire) + const expireDate = entity.expire_date + ? new Date(entity.expire_date) : null; return ( @@ -74,35 +34,48 @@ export const UserInfoTable: FC = ({ entity }) => { } + label={t("enabled")} + value={} /> - {expireDate && entity.on_hold_expire_duration === 0 ? ( - - ) : ( - <> - } + /> + {{ + fixed_date: ( + - {entity.on_hold_timeout && ( + ), + start_on_first_use: ( + <> + - )} - - )} - {entity.data_limit && ( - - )} + + ), + never: ( + + ) + }[entity.expire_strategy]} + + } + /> + } + /> = ({ user }) => { + const { t } = useTranslation(); + return ( + + ) +} diff --git a/dashboard/src/features/users/components/pills/user-data-limit-reached-pill.tsx b/dashboard/src/features/users/components/pills/user-data-limit-reached-pill.tsx new file mode 100644 index 0000000..53f21b1 --- /dev/null +++ b/dashboard/src/features/users/components/pills/user-data-limit-reached-pill.tsx @@ -0,0 +1,15 @@ +import { type FC } from "react"; +import { BooleanPill } from "@marzneshin/components"; +import { useTranslation } from "react-i18next"; +import { UserProp } from "@marzneshin/features/users"; + +export const UserDataLimitReachedPill: FC = ({ user }) => { + const { t } = useTranslation(); + return ( + + ) +} diff --git a/dashboard/src/features/users/components/pills/user-enabled-pill.tsx b/dashboard/src/features/users/components/pills/user-enabled-pill.tsx new file mode 100644 index 0000000..5667955 --- /dev/null +++ b/dashboard/src/features/users/components/pills/user-enabled-pill.tsx @@ -0,0 +1,15 @@ +import { type FC } from "react"; +import { BooleanPill } from "@marzneshin/components"; +import { useTranslation } from "react-i18next"; +import { UserProp } from "@marzneshin/features/users"; + +export const UserEnabledPill: FC = ({ user }) => { + const { t } = useTranslation(); + return ( + + ) +} diff --git a/dashboard/src/features/users/components/pills/user-expire-strategy-pill.tsx b/dashboard/src/features/users/components/pills/user-expire-strategy-pill.tsx new file mode 100644 index 0000000..2168da8 --- /dev/null +++ b/dashboard/src/features/users/components/pills/user-expire-strategy-pill.tsx @@ -0,0 +1,25 @@ + +import { type FC } from "react"; +import { Badge } from "@marzneshin/components"; +import { useTranslation } from "react-i18next"; +import { UserProp } from "@marzneshin/features/users"; + +export const UserExpireStrategyPill: FC = ({ user }) => { + const { t } = useTranslation(); + const label = { + start_on_first_use: t("page.users.on_first_use"), + fixed_date: t("page.users.fixed_date"), + never: t("page.users.never"), + }[user.expire_strategy] + const variant = { + start_on_first_use: "royal", + fixed_date: "warning", + never: "disabled", + }[user.expire_strategy] + return ( + + {label} + + ) +} + diff --git a/dashboard/src/features/users/components/tables/users/columns.tsx b/dashboard/src/features/users/components/tables/users/columns.tsx index 585a2b4..313cefe 100644 --- a/dashboard/src/features/users/components/tables/users/columns.tsx +++ b/dashboard/src/features/users/components/tables/users/columns.tsx @@ -1,10 +1,12 @@ import type { ColumnDef } from "@tanstack/react-table"; -import type { UserType } from "@marzneshin/features/users"; import { - UsersStatusBadge, - UsersStatus, + type UserType, OnlineStatus, UserUsedTraffic, + UserActivatedPill, + UserEnabledPill, + UserExpireStrategyPill, + UserExpirationValue } from "@marzneshin/features/users"; import { DataTableColumnHeader } from "@marzneshin/components/data-table/column-header"; import i18n from "@marzneshin/features/i18n"; @@ -15,7 +17,6 @@ import { } from "@marzneshin/components"; import { LinkIcon } from "lucide-react"; import { getSubscriptionLink } from "@marzneshin/utils"; -import { format } from "date-fns"; interface ColumnAction { onDelete: (user: UserType) => void; @@ -36,14 +37,15 @@ export const columns = (actions: ColumnAction): ColumnDef[] => [ ), }, { - accessorKey: "status", + accessorKey: "activated", + enableSorting: false, header: ({ column }) => ( - - ), - cell: ({ row }) => ( - + ), - enableSorting: false, + cell: ({ row }) => , }, { accessorKey: "used_traffic", @@ -56,17 +58,36 @@ export const columns = (actions: ColumnAction): ColumnDef[] => [ cell: ({ row }) => , }, { - accessorKey: "expire", + accessorKey: "enabled", + enableSorting: false, + header: ({ column }) => ( + + ), + cell: ({ row }) => , + }, + { + accessorKey: "expire_strategy", + header: ({ column }) => ( + + ), + cell: ({ row }) => , + enableSorting: false, + }, + { + accessorKey: "expire_date", header: ({ column }) => ( ), - cell: ({ row }) => - row.original.expire - ? format(row.original.expire.toLocaleString(), "PPP") - : "Unlimited", + cell: ({ row }) => , }, { id: "actions", diff --git a/dashboard/src/features/users/components/user-expiration-value.tsx b/dashboard/src/features/users/components/user-expiration-value.tsx new file mode 100644 index 0000000..791cc84 --- /dev/null +++ b/dashboard/src/features/users/components/user-expiration-value.tsx @@ -0,0 +1,14 @@ +import { format } from "date-fns"; +import { type FC } from 'react' +import { UserProp } from "@marzneshin/features/users"; +import { useTranslation } from "react-i18next"; + +export const UserExpirationValue: FC = ({ user }) => { + const { t } = useTranslation(); + return ({ + start_on_first_use: user.usage_duration && `${(user.usage_duration / 86400)} Day`, + fixed_date: user.expire_date && format(user.expire_date?.toLocaleString(), "PPP"), + never: t('never'), + }[user.expire_strategy]) +} + diff --git a/dashboard/src/features/users/contexts/router.ts b/dashboard/src/features/users/contexts/router.ts index 9102f6d..5a90998 100644 --- a/dashboard/src/features/users/contexts/router.ts +++ b/dashboard/src/features/users/contexts/router.ts @@ -2,7 +2,8 @@ import { createContext, useContext } from "react"; import { UserType } from "@marzneshin/features/users"; interface RouterUserContextProps { - user: UserType; + user: UserType | null; + isPending?: boolean; } export const RouterUserContext = createContext(null); diff --git a/dashboard/src/features/users/domain/index.ts b/dashboard/src/features/users/domain/index.ts new file mode 100644 index 0000000..f5ad89d --- /dev/null +++ b/dashboard/src/features/users/domain/index.ts @@ -0,0 +1 @@ +export * from "./user-traffic-sorting-fn" diff --git a/dashboard/src/features/users/domain/user-traffic-sorting-fn.ts b/dashboard/src/features/users/domain/user-traffic-sorting-fn.ts new file mode 100644 index 0000000..f423fd4 --- /dev/null +++ b/dashboard/src/features/users/domain/user-traffic-sorting-fn.ts @@ -0,0 +1,13 @@ +import { UserType } from "@marzneshin/features/users"; + +export const userTrafficSortingFn = (userA: UserType, userB: UserType) => { + if (userA.data_limit && userB.data_limit) { + const rowAUsedTraffic = (userA.used_traffic / userA.data_limit) * 100 + const rowBUsedTraffic = (userB.used_traffic / userB.data_limit) * 100 + return ( + rowAUsedTraffic > rowBUsedTraffic + && rowAUsedTraffic !== rowBUsedTraffic + ) ? 1 : -1 + } + return 0 +} diff --git a/dashboard/src/features/users/index.ts b/dashboard/src/features/users/index.ts index b07e497..378fbed 100644 --- a/dashboard/src/features/users/index.ts +++ b/dashboard/src/features/users/index.ts @@ -3,3 +3,4 @@ export * from './types' export * from './components' export * from './constants' export * from './contexts/router' +export * from "./domain" diff --git a/dashboard/src/features/users/services/user-status.mutate.ts b/dashboard/src/features/users/services/user-status.mutate.ts index c6eb383..969d253 100644 --- a/dashboard/src/features/users/services/user-status.mutate.ts +++ b/dashboard/src/features/users/services/user-status.mutate.ts @@ -13,7 +13,7 @@ interface UsersStatusEnabledQuery { } export async function userStatusEnabled({ user, enabled }: UsersStatusEnabledQuery): Promise { - const action = enabled ? 'enable' : 'disable' + const action = enabled ? 'enable' : 'disable'; return fetch(`/users/${user.username}/${action}`, { method: 'post' }).then((user) => { return user; }); @@ -34,6 +34,7 @@ const handleSuccess = (value: UserMutationType) => { description: i18n.t('events.user_status.success.desc') }) queryClient.invalidateQueries({ queryKey: [UsersStatusEnabledFetchKey] }) + queryClient.invalidateQueries({ queryKey: [UsersStatusEnabledFetchKey, value.username] }) } diff --git a/dashboard/src/features/users/services/user.query.ts b/dashboard/src/features/users/services/user.query.ts index 4fcd087..1838d13 100644 --- a/dashboard/src/features/users/services/user.query.ts +++ b/dashboard/src/features/users/services/user.query.ts @@ -1,4 +1,4 @@ -import { useQuery } from "@tanstack/react-query"; +import { queryOptions, useQuery } from "@tanstack/react-query"; import { fetch } from "@marzneshin/utils"; import type { UserType } from "../types"; @@ -10,6 +10,14 @@ export async function fetchUser({ export const UserQueryFetchKey = "users"; +export const userQueryOptions = ({ username }: { username: string }) => { + return queryOptions({ + queryKey: [UserQueryFetchKey, username], + queryFn: fetchUser, + initialData: null, + }); +}; + export const useUserQuery = ({ username }: { username: string }) => { return useQuery({ queryKey: [UserQueryFetchKey, username], diff --git a/dashboard/src/features/users/services/users.query.ts b/dashboard/src/features/users/services/users.query.ts index 6aae8e7..28f1d1e 100644 --- a/dashboard/src/features/users/services/users.query.ts +++ b/dashboard/src/features/users/services/users.query.ts @@ -8,7 +8,7 @@ import { EntityQueryKeyType } from "@marzneshin/features/entity-table"; -export type SortUserBy = "username" | "used_traffic" | "data_limit" | "expire" | "created_at" +export type SortUserBy = "username" | "used_traffic" | "data_limit" | "expire_date" | "created_at" export async function fetchUsers({ queryKey }: EntityQueryKeyType): FetchEntityReturn { return fetch(`/users`, { diff --git a/dashboard/src/features/users/types/data-limit-reset-strategy.ts b/dashboard/src/features/users/types/data-limit-reset-strategy.ts new file mode 100644 index 0000000..ee814e4 --- /dev/null +++ b/dashboard/src/features/users/types/data-limit-reset-strategy.ts @@ -0,0 +1,8 @@ + +export type DataLimitResetStrategy = + | 'no_reset' + | 'day' + | 'week' + | 'month' + | 'year'; + diff --git a/dashboard/src/features/users/types/expire-strategy.ts b/dashboard/src/features/users/types/expire-strategy.ts new file mode 100644 index 0000000..f8f3be3 --- /dev/null +++ b/dashboard/src/features/users/types/expire-strategy.ts @@ -0,0 +1 @@ +export type ExpireStrategy = "never" | "fixed_date" | "start_on_first_use"; diff --git a/dashboard/src/features/users/types/index.ts b/dashboard/src/features/users/types/index.ts index 6229374..93671ca 100644 --- a/dashboard/src/features/users/types/index.ts +++ b/dashboard/src/features/users/types/index.ts @@ -1,49 +1,5 @@ -export type DataLimitResetStrategy = - | 'no_reset' - | 'day' - | 'week' - | 'month' - | 'year'; - -export type Status = - | 'active' - | 'disabled' - | 'limited' - | 'expired' - | 'on_hold' - | 'error' - | 'connecting' - | 'healthy' - | 'unhealthy' - | 'connected'; - -export interface UserType { - on_hold_timeout: Date | string | undefined; - on_hold_expire_duration: number; - expire: Date | string | null; - data_limit: number | null | undefined; - data_limit_reset_strategy: DataLimitResetStrategy; - lifetime_used_traffic: number; - enabled: boolean; - username: string; - used_traffic: number; - status: Status; - links: string[]; - subscription_url: string; - service_ids: number[]; - note: string; - online_at: string; -} - -export type UserMutationType = Pick< - UserType, - | 'service_ids' - | 'expire' - | 'data_limit' - | 'data_limit_reset_strategy' - | 'on_hold_timeout' - | 'on_hold_expire_duration' - | 'username' - | 'status' - | 'note' ->; +export * from "./user" +export * from "./user-prop" +export * from "./schema" +export * from "./expire-strategy" +export * from "./data-limit-reset-strategy" diff --git a/dashboard/src/features/users/types/schema.ts b/dashboard/src/features/users/types/schema.ts new file mode 100644 index 0000000..2636bfd --- /dev/null +++ b/dashboard/src/features/users/types/schema.ts @@ -0,0 +1,36 @@ +import { z } from 'zod'; +import { DATA_LIMIT_METRIC } from '@marzneshin/features/users'; + +export const UserSchema = z.object({ + username: z.string().min(1, { message: 'Username is required' }), + note: z.string().nullable(), + data_limit: z + .union([z.string().transform((str) => Number(str) * DATA_LIMIT_METRIC), z.number()]) + .refine(val => val >= 0, { message: 'The minimum number is 0' }) + .transform((val) => val ?? 0) + .nullable() + .optional(), + data_limit_reset_strategy: z + .enum(["no_reset", "day", "week", "month", "year"]) + .or(z.number()) + .or(z.string()) + .nullable().optional(), + expire_strategy: z.enum(["never", "fixed_date", "start_on_first_use"]), + usage_duration: z.number().nullable().optional(), + activation_deadline: z + .string() + .or(z.date()) + .nullable() + .optional(), + expire_date: z + .string() + .or(z.date()) + .nullable() + .optional(), + service_ids: z + .array(z.number().or(z.string())) + .nonempty({ message: 'At least one service is required' }) + .transform((v) => v.map(Number)), +}); + +export type UserMutationType = z.infer; diff --git a/dashboard/src/features/users/types/user-prop.ts b/dashboard/src/features/users/types/user-prop.ts new file mode 100644 index 0000000..d6373f6 --- /dev/null +++ b/dashboard/src/features/users/types/user-prop.ts @@ -0,0 +1,5 @@ +import { UserType } from "@marzneshin/features/users"; + +export interface UserProp { + user: UserType; +} diff --git a/dashboard/src/features/users/types/user.ts b/dashboard/src/features/users/types/user.ts new file mode 100644 index 0000000..a14644f --- /dev/null +++ b/dashboard/src/features/users/types/user.ts @@ -0,0 +1,28 @@ +import { DataLimitResetStrategy } from "./data-limit-reset-strategy" +import { ExpireStrategy } from "./expire-strategy" + +export interface UserType { + expire_strategy: ExpireStrategy; + usage_duration?: number | null; + activation_deadline?: Date | string | null; + expire_date?: Date | string | null; + data_limit?: number; + data_limit_reset_strategy: DataLimitResetStrategy; + lifetime_used_traffic: number; + used_traffic: number; + sub_updated_at?: Date | string; + sub_last_user_agent?: string; + enabled: boolean; + activated: boolean; + is_active: boolean; + expired: boolean; + data_limit_reached: boolean; + username: string; + created_at: string | Date; + links: string[]; + subscription_url: string; + service_ids: number[]; + note: string; + online_at: string; +} + diff --git a/dashboard/src/routes/_dashboard/users/$userId.tsx b/dashboard/src/routes/_dashboard/users/$userId.tsx index 57049b6..4df3b6b 100644 --- a/dashboard/src/routes/_dashboard/users/$userId.tsx +++ b/dashboard/src/routes/_dashboard/users/$userId.tsx @@ -1,46 +1,36 @@ import { createFileRoute, - defer, - Await, Outlet, } from "@tanstack/react-router"; +import { useSuspenseQuery } from "@tanstack/react-query"; +import { queryClient } from "@marzneshin/utils"; import { RouterUserContext, - fetchUser, + userQueryOptions, } from "@marzneshin/features/users"; -import { Suspense } from "react"; +import { Suspense, useMemo } from "react"; import { AlertDialog, AlertDialogContent, - Loading } from "@marzneshin/components"; const UserProvider = () => { - const { user } = Route.useLoaderData() + const { username } = Route.useLoaderData() + const { data: user, isPending } = useSuspenseQuery(userQueryOptions({ username })) + const value = useMemo(() => ({ user, isPending }), [user, isPending]) return ( - }> - - {(user) => ( - - - - - - )} - - + + + + + ) } export const Route = createFileRoute('/_dashboard/users/$userId')({ loader: async ({ params }) => { - const userPromise = fetchUser({ - queryKey: ["users", params.userId] - }); - - return { - user: defer(userPromise) - } + queryClient.ensureQueryData(userQueryOptions({ username: params.userId })) + return { username: params.userId }; }, errorComponent: () => ( diff --git a/dashboard/src/routes/_dashboard/users/$userId/delete.tsx b/dashboard/src/routes/_dashboard/users/$userId/delete.tsx index 43f230d..00c05b8 100644 --- a/dashboard/src/routes/_dashboard/users/$userId/delete.tsx +++ b/dashboard/src/routes/_dashboard/users/$userId/delete.tsx @@ -13,7 +13,7 @@ const UserDelete = () => { const value = useRouterUserContext() const navigate = useNavigate({ from: "/users/$userId/delete" }); - return value && ( + return !!(value?.user) && ( { open={settingsDialogOpen} onOpenChange={setSettingsDialogOpen} entity={value.user} + isPending={!!value.isPending} onClose={() => navigate({ to: "/users" })} /> ); diff --git a/dashboard/src/utils/compose-refs.ts b/dashboard/src/utils/compose-refs.ts index f89676a..b5a567b 100644 --- a/dashboard/src/utils/compose-refs.ts +++ b/dashboard/src/utils/compose-refs.ts @@ -1,8 +1,6 @@ -// @see https://github.com/radix-ui/primitives/blob/main/packages/react/compose-refs/src/composeRefs.tsx +import React from "react"; -import * as React from "react" - -type PossibleRef = React.Ref | undefined +type PossibleRef = React.Ref | undefined; /** * Set a given ref to a given value @@ -10,9 +8,9 @@ type PossibleRef = React.Ref | undefined */ function setRef(ref: PossibleRef, value: T) { if (typeof ref === "function") { - ref(value) + ref(value); } else if (ref !== null && ref !== undefined) { - (ref as React.MutableRefObject).current = value + (ref as React.MutableRefObject).current = value; } } @@ -21,7 +19,9 @@ function setRef(ref: PossibleRef, value: T) { * Accepts callback refs and RefObject(s) */ function composeRefs(...refs: PossibleRef[]) { - return (node: T) => refs.forEach((ref) => setRef(ref, node)) + return (node: T) => { + refs.forEach((ref) => setRef(ref, node)); + }; } /** @@ -29,8 +29,9 @@ function composeRefs(...refs: PossibleRef[]) { * Accepts callback refs and RefObject(s) */ function useComposedRefs(...refs: PossibleRef[]) { - // eslint-disable-next-line react-hooks/exhaustive-deps - return React.useCallback(composeRefs(...refs), refs) + return React.useCallback((node: T) => { + refs.forEach((ref) => setRef(ref, node)); + }, [refs]); } -export { composeRefs, useComposedRefs } +export { composeRefs, useComposedRefs };