From 0b5f821cb4186574ad53893e5541618dabae46d3 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Thu, 21 Aug 2025 17:50:23 +0300 Subject: [PATCH 01/20] =?UTF-8?q?=D0=901:=20=D0=A0=D0=B5=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D1=80=20=D1=81=D1=85=D0=B5=D0=BC:=20=D0=B7=D0=B0=D0=B3=D1=80?= =?UTF-8?q?=D1=83=D0=B7=D0=BA=D0=B0=20XSD,=20=D0=BF=D0=B0=D1=80=D1=81?= =?UTF-8?q?=D0=B8=D0=BD=D0=B3=20=D0=BC=D0=B5=D1=82=D0=B0=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D1=85,=20=D0=BF=D0=B5=D1=80=D0=B2=D0=B8=D1=87?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 62 +++++++++++++++++++++++++ .vscode/settings.json | 5 ++ alembic.ini | 10 ++-- alembic/versions/0001_init.py | 2 +- alembic/versions/0002_schemas.py | 32 +++++++++++++ app/api/routes/schemas.py | 80 ++++++++++++++++++++++++++++---- app/db.py | 7 +++ app/models_sqlalchemy.py | 13 +++++- app/routers/schemas.py | 71 ++++++++++++++++++++++++++++ app/services/schema_parser.py | 21 +++++++++ app/storage.py | 35 ++++++++++++++ docker-compose.yml | 6 ++- requirements.txt | 2 + tests/conftest.py | 24 ++++++++++ tests/test_health.py | 8 ++++ tests/test_schema_parser.py | 14 ++++++ 16 files changed, 372 insertions(+), 20 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 .vscode/settings.json create mode 100644 alembic/versions/0002_schemas.py create mode 100644 app/routers/schemas.py create mode 100644 app/services/schema_parser.py create mode 100644 app/storage.py create mode 100644 tests/conftest.py create mode 100644 tests/test_health.py create mode 100644 tests/test_schema_parser.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..3769c53 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,62 @@ +name: CI + +on: + push: + branches: [ master, main, feature/** ] + pull_request: + +jobs: + test: + runs-on: ubuntu-latest + services: + postgres: + image: postgres:16 + env: + POSTGRES_USER: xmlsvc + POSTGRES_PASSWORD: xmlsvc + POSTGRES_DB: xmlsvc + ports: ["5432:5432"] + options: >- + --health-cmd="pg_isready -U xmlsvc" + --health-interval=10s + --health-timeout=5s + --health-retries=5 + + minio: + image: minio/minio:latest + ports: ["9000:9000", "9001:9001"] + env: + MINIO_ROOT_USER: minioadmin + MINIO_ROOT_PASSWORD: minioadmin + options: >- + --health-cmd="curl -f http://localhost:9000/minio/health/ready || exit 1" + --health-interval=5s + --health-timeout=5s + --health-retries=20 + command: server /data --address :9000 --console-address :9001 + + env: + DATABASE_URL: postgresql+psycopg://xmlsvc:xmlsvc@localhost:5432/xmlsvc + S3_ENDPOINT: http://localhost:9000 + S3_BUCKET: xmlsvc + S3_ACCESS_KEY: minioadmin + S3_SECRET_KEY: minioadmin + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install deps + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install pytest + + - name: Alembic upgrade + run: alembic upgrade head + + - name: Run tests + run: pytest -q diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c3b3b6f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "python.defaultInterpreterPath": "${workspaceFolder}\\.venv\\Scripts\\python.exe", + "python.analysis.extraPaths": ["app"], + "python.analysis.typeCheckingMode": "basic" +} diff --git a/alembic.ini b/alembic.ini index d2f4380..b44fff8 100644 --- a/alembic.ini +++ b/alembic.ini @@ -2,28 +2,26 @@ script_location = alembic sqlalchemy.url = %(DATABASE_URL)s -[loggers] -keys = root,sqlalchemy,alembic - [handlers] keys = console [formatters] keys = generic -[logger_root] -level = WARN -handlers = console +[loggers] +keys = sqlalchemy,alembic [logger_sqlalchemy] level = WARN handlers = console qualname = sqlalchemy.engine +propagate = 0 [logger_alembic] level = INFO handlers = console qualname = alembic +propagate = 0 [handler_console] class = StreamHandler diff --git a/alembic/versions/0001_init.py b/alembic/versions/0001_init.py index 50d2936..13a6d89 100644 --- a/alembic/versions/0001_init.py +++ b/alembic/versions/0001_init.py @@ -2,7 +2,7 @@ Revision ID: 0001_init Revises: -Create Date: 2025-08-21 00:00:00 +Create Date: 2025-08-21 16:45:00 """ from alembic import op diff --git a/alembic/versions/0002_schemas.py b/alembic/versions/0002_schemas.py new file mode 100644 index 0000000..412538a --- /dev/null +++ b/alembic/versions/0002_schemas.py @@ -0,0 +1,32 @@ +"""add schemas table + +Revision ID: 0002_schemas +Revises: 0001_init +Create Date: 2025-08-21 17:15:00 + +""" +from alembic import op +import sqlalchemy as sa + + +revision = '0002_schemas' +down_revision = '0001_init' +branch_labels = None +depends_on = None + + +def upgrade(): + op.create_table( + 'schemas', + sa.Column('id', sa.Integer, primary_key=True), + sa.Column('name', sa.String, nullable=False), + sa.Column('version', sa.String, nullable=True), + sa.Column('namespace', sa.String, nullable=True), + sa.Column('description', sa.String, nullable=True), + sa.Column('file_path', sa.String, nullable=False), + sa.Column('created_at', sa.DateTime, nullable=False), + ) + + +def downgrade(): + op.drop_table('schemas') diff --git a/app/api/routes/schemas.py b/app/api/routes/schemas.py index a09fef4..8379287 100644 --- a/app/api/routes/schemas.py +++ b/app/api/routes/schemas.py @@ -1,14 +1,74 @@ -from fastapi import APIRouter, UploadFile, File -from app.services.xsd_registry import list_schemas, save_schema_file +# app/api/routes/schemas.py +from fastapi import APIRouter, UploadFile, File, Depends +from fastapi.responses import HTMLResponse +from sqlalchemy.orm import Session +from datetime import datetime -router = APIRouter() +from app.db import get_db +from app.models_sqlalchemy import Schema +from app.services import schema_parser +from app.storage import save_file_minio -@router.get("/schemas") -def get_schemas(): - return list_schemas() +router = APIRouter(prefix="/schemas", tags=["schemas"]) -@router.post("/schemas/upload") -async def upload_schema(file: UploadFile = File(...)): + +@router.get("/", response_class=HTMLResponse) +def list_schemas(db: Session = Depends(get_db)): + items = db.query(Schema).order_by(Schema.created_at.desc()).all() + rows = "".join( + f"
  • {s.name} (версия {s.version or '—'})
  • " + for s in items + ) + return HTMLResponse( + f"

    Загруженные схемы

    " + "Загрузить новую схему" + ) + + +@router.get("/upload", response_class=HTMLResponse) # <-- ОБЯЗАТЕЛЬНО GET +def upload_form(): + return HTMLResponse(""" +

    Загрузить XSD

    +
    +

    + +
    + """) + + +@router.post("/upload", response_class=HTMLResponse) +async def upload_schema(file: UploadFile = File(...), db: Session = Depends(get_db)): content = await file.read() - saved = save_schema_file(file.filename, content) - return saved \ No newline at end of file + key = save_file_minio("schemas", file.filename, content) + info = schema_parser.extract_metadata(content) + + schema = Schema( + name=info.get("name") or file.filename, + version=info.get("version"), + namespace=info.get("namespace"), + description=info.get("description"), + file_path=key, + created_at=datetime.utcnow(), + ) + db.add(schema) + db.commit() + db.refresh(schema) + + return HTMLResponse(f"Схема {schema.name} загружена. " + f"Перейти | " + f"К списку") + + +@router.get("/{schema_id}", response_class=HTMLResponse) +def view_schema(schema_id: int, db: Session = Depends(get_db)): + schema = db.query(Schema).get(schema_id) + if not schema: + return HTMLResponse("Схема не найдена", status_code=404) + return HTMLResponse(f""" +

    {schema.name}

    +

    Версия: {schema.version or '—'}

    +

    Namespace: {schema.namespace or '—'}

    +

    Описание: {schema.description or '—'}

    +

    Файл (MinIO key): {schema.file_path}

    +

    Назад к списку

    + """) diff --git a/app/db.py b/app/db.py index e8f6789..5735246 100644 --- a/app/db.py +++ b/app/db.py @@ -9,3 +9,10 @@ class Base(DeclarativeBase): pass + +def get_db(): + db = SessionLocal() + try: + yield db + finally: + db.close() \ No newline at end of file diff --git a/app/models_sqlalchemy.py b/app/models_sqlalchemy.py index 7eb9b65..34aafa4 100644 --- a/app/models_sqlalchemy.py +++ b/app/models_sqlalchemy.py @@ -1,4 +1,4 @@ -from sqlalchemy import String, Integer, JSON, LargeBinary, ForeignKey, DateTime, func +from sqlalchemy import Column, String, Integer, JSON, LargeBinary, ForeignKey, DateTime, func from sqlalchemy.orm import Mapped, mapped_column, relationship from app.db import Base @@ -29,3 +29,14 @@ class RuleRow(Base): content: Mapped[dict] = mapped_column(JSON) version: Mapped[str | None] = mapped_column(String(32), nullable=True) created_at: Mapped = mapped_column(DateTime(timezone=True), server_default=func.now()) + +class Schema(Base): + __tablename__ = "schemas" + + id = Column(Integer, primary_key=True, index=True) + name = Column(String, nullable=False) + version = Column(String, nullable=True) + namespace = Column(String, nullable=True) + description = Column(String, nullable=True) + file_path = Column(String, nullable=False) + created_at = Column(DateTime, nullable=False) \ No newline at end of file diff --git a/app/routers/schemas.py b/app/routers/schemas.py new file mode 100644 index 0000000..9d11d9b --- /dev/null +++ b/app/routers/schemas.py @@ -0,0 +1,71 @@ +from fastapi import APIRouter, UploadFile, File, Depends +from fastapi.responses import HTMLResponse +from sqlalchemy.orm import Session +from app.db import get_db +from app.models_sqlalchemy import Schema +from app.services import schema_parser +from app.storage import save_file_minio +from datetime import datetime + +router = APIRouter(prefix="/schemas", tags=["schemas"]) + + +@router.get("/", response_class=HTMLResponse) +def list_schemas(db: Session = Depends(get_db)): + schemas = db.query(Schema).all() + html = "

    Загруженные схемы

    Загрузить новую схему" + return html + + +@router.get("/upload", response_class=HTMLResponse) +def upload_form(): + return """ +

    Загрузить XSD

    +
    +

    + +
    + """ + + +@router.post("/upload", response_class=HTMLResponse) +async def upload_schema(file: UploadFile, db: Session = Depends(get_db)): + content = await file.read() + # сохраняем в MinIO + object_name = save_file_minio("schemas", file.filename, content) + + # парсим XSD и вытягиваем данные + info = schema_parser.extract_metadata(content) + + schema = Schema( + name=info.get("name") or file.filename, + version=info.get("version"), + namespace=info.get("namespace"), + description=info.get("description"), + file_path=object_name, + created_at=datetime.utcnow() + ) + db.add(schema) + db.commit() + db.refresh(schema) + + return f"Схема {schema.name} загружена. Перейти" + + +@router.get("/{schema_id}", response_class=HTMLResponse) +def view_schema(schema_id: int, db: Session = Depends(get_db)): + schema = db.query(Schema).get(schema_id) + if not schema: + return "Схема не найдена" + html = f""" +

    {schema.name}

    +

    Версия: {schema.version or '—'}

    +

    Namespace: {schema.namespace or '—'}

    +

    Описание: {schema.description or '—'}

    +

    Файл в MinIO: {schema.file_path}

    + Назад к списку + """ + return html diff --git a/app/services/schema_parser.py b/app/services/schema_parser.py new file mode 100644 index 0000000..c6f592b --- /dev/null +++ b/app/services/schema_parser.py @@ -0,0 +1,21 @@ +from lxml import etree + +def extract_metadata(content: bytes) -> dict: + info = {} + try: + root = etree.XML(content) + except Exception: + return info + + info["namespace"] = root.get("targetNamespace") + info["version"] = root.get("version") + + docs = root.findall(".//xs:documentation", namespaces={"xs": "http://www.w3.org/2001/XMLSchema"}) + if docs: + info["description"] = " ".join([d.text.strip() for d in docs if d is not None and d.text]) + + el = root.find(".//xs:element", namespaces={"xs": "http://www.w3.org/2001/XMLSchema"}) + if el is not None: + info["name"] = el.get("name") + + return info diff --git a/app/storage.py b/app/storage.py new file mode 100644 index 0000000..9a2040e --- /dev/null +++ b/app/storage.py @@ -0,0 +1,35 @@ +import os +import uuid +from typing import Optional +import boto3 +from botocore.client import Config + +S3_ENDPOINT = os.getenv("S3_ENDPOINT", "http://minio:9000") +S3_BUCKET = os.getenv("S3_BUCKET", "xmlsvc") +S3_ACCESS_KEY = os.getenv("S3_ACCESS_KEY", "minioadmin") +S3_SECRET_KEY = os.getenv("S3_SECRET_KEY", "minioadmin") + +_s3 = boto3.client( + "s3", + endpoint_url=S3_ENDPOINT, + aws_access_key_id=S3_ACCESS_KEY, + aws_secret_access_key=S3_SECRET_KEY, + config=Config(signature_version="s3v4"), + region_name="us-east-1", +) + +def save_file_minio(prefix: str, filename: str, content: bytes) -> str: + # ключ вида: schemas/_<имя> + key = f"{prefix}/{uuid.uuid4().hex}_{filename}" + _s3.put_object(Bucket=S3_BUCKET, Key=key, Body=content) + return key + +def presigned_url(key: str, expires: int = 3600) -> Optional[str]: + try: + return _s3.generate_presigned_url( + "get_object", + Params={"Bucket": S3_BUCKET, "Key": key}, + ExpiresIn=expires, + ) + except Exception: + return None diff --git a/docker-compose.yml b/docker-compose.yml index fba47c8..25f9361 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,9 @@ -version: "3.9" - services: app: build: . container_name: xmlsvc_app env_file: .env + working_dir: /app command: > uvicorn app.main:app --host 0.0.0.0 @@ -12,9 +11,12 @@ services: --reload environment: # Internal service URLs (container network) + - PYTHONPATH=/app - DATABASE_URL=postgresql+psycopg://$PG_USER:$PG_PASSWORD@postgres:5432/$PG_DB - S3_ENDPOINT=http://minio:9000 - S3_BUCKET=${S3_BUCKET} + - S3_ACCESS_KEY=${MINIO_ROOT_USER} + - S3_SECRET_KEY=${MINIO_ROOT_PASSWORD} - MAX_UPLOAD_MB=80 ports: - "${APP_PORT}:${APP_PORT_INTERNAL}" diff --git a/requirements.txt b/requirements.txt index e0448c7..af2c0ab 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,3 +9,5 @@ cryptography SQLAlchemy>=2.0.30 alembic>=1.13.2 psycopg[binary]>=3.1.19 +python-multipart>=0.0.9 +boto3>=1.34.0 \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..30ad40f --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,24 @@ +import os +import boto3 +import pytest +from botocore.client import Config + +@pytest.fixture(scope="session", autouse=True) +def ensure_bucket(): + endpoint = os.getenv("S3_ENDPOINT", "http://localhost:19000") + bucket = os.getenv("S3_BUCKET", "xmlsvc") + ak = os.getenv("S3_ACCESS_KEY", "minioadmin") + sk = os.getenv("S3_SECRET_KEY", "minioadmin") + + s3 = boto3.client( + "s3", + endpoint_url=endpoint, + aws_access_key_id=ak, + aws_secret_access_key=sk, + config=Config(signature_version="s3v4"), + region_name="us-east-1", + ) + # создать, если нет + buckets = [b["Name"] for b in s3.list_buckets().get("Buckets", [])] + if bucket not in buckets: + s3.create_bucket(Bucket=bucket) diff --git a/tests/test_health.py b/tests/test_health.py new file mode 100644 index 0000000..8237e2c --- /dev/null +++ b/tests/test_health.py @@ -0,0 +1,8 @@ +from fastapi.testclient import TestClient +from app.main import app + +def test_health(): + c = TestClient(app) + r = c.get("/health") + assert r.status_code == 200 + assert r.json() == {"status": "ok"} diff --git a/tests/test_schema_parser.py b/tests/test_schema_parser.py new file mode 100644 index 0000000..065d3fe --- /dev/null +++ b/tests/test_schema_parser.py @@ -0,0 +1,14 @@ +from app.services.schema_parser import extract_metadata + +def test_extract_metadata_minimal(): + xsd = b''' + Demo + + ''' + info = extract_metadata(xsd) + assert info["namespace"] == "http://example.org" + assert info["version"] == "1.2" + assert "Demo" in info.get("description", "") + assert info["name"] == "DesignAssignment" From 25ffe684260f1813d5943a5ece4892c7575bb8e7 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Thu, 21 Aug 2025 17:59:06 +0300 Subject: [PATCH 02/20] =?UTF-8?q?=D0=901:=20=D0=9F=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=20Actions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 6 ++++-- requirements.txt | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3769c53..1efa7b5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,6 +8,7 @@ on: jobs: test: runs-on: ubuntu-latest + services: postgres: image: postgres:16 @@ -24,7 +25,9 @@ jobs: minio: image: minio/minio:latest - ports: ["9000:9000", "9001:9001"] + # В services нельзя указывать 'command', используем дефолтный CMD образа. + # Оставляем только порт 9000 (S3 API); консоль 9001 не нужна для CI. + ports: ["9000:9000"] env: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin @@ -33,7 +36,6 @@ jobs: --health-interval=5s --health-timeout=5s --health-retries=20 - command: server /data --address :9000 --console-address :9001 env: DATABASE_URL: postgresql+psycopg://xmlsvc:xmlsvc@localhost:5432/xmlsvc diff --git a/requirements.txt b/requirements.txt index af2c0ab..4b333b0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,4 +10,5 @@ SQLAlchemy>=2.0.30 alembic>=1.13.2 psycopg[binary]>=3.1.19 python-multipart>=0.0.9 -boto3>=1.34.0 \ No newline at end of file +boto3>=1.34.0 +pytest \ No newline at end of file From 68d1a22357e259537054563f5bda3934fd94b544 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Thu, 21 Aug 2025 18:13:40 +0300 Subject: [PATCH 03/20] =?UTF-8?q?=D0=901:=20=D0=B5=D1=89=D0=B5=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=B8=D0=BC=20Actions=20-=20=D0=92=20=D1=8D?= =?UTF-8?q?=D1=82=D0=BE=D1=82=20=D1=80=D0=B0=D0=B7=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B1=D1=83=D0=B5=D0=BC=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20MinIO=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=BC=20=D1=88=D0=B0=D0=B3=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1efa7b5..3757045 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,7 +50,17 @@ jobs: - uses: actions/setup-python@v5 with: python-version: "3.11" - + - name: Start MinIO (official image) + run: | + docker run -d --name gha-minio \ + -e MINIO_ROOT_USER=minioadmin \ + -e MINIO_ROOT_PASSWORD=minioadmin \ + -p 9000:9000 \ + minio/minio:latest server /data + for i in {1..60}; do + curl -fsS http://localhost:9000/minio/health/ready && break + sleep 1 + done - name: Install deps run: | python -m pip install --upgrade pip From 3388975f8b7bf77b475a9344c16c2624dee8498a Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Thu, 21 Aug 2025 18:15:53 +0300 Subject: [PATCH 04/20] =?UTF-8?q?A1:=20=D0=9F=D1=80=D0=BE=D0=B1=D1=83?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD=D0=B8=D1=82=D1=8C?= =?UTF-8?q?=20minio=20=D0=BD=D0=B0=20=D0=B4=D1=80=D1=83=D0=B3=D0=BE=D0=B9?= =?UTF-8?q?=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3757045..6c44e71 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,18 +24,17 @@ jobs: --health-retries=5 minio: - image: minio/minio:latest - # В services нельзя указывать 'command', используем дефолтный CMD образа. - # Оставляем только порт 9000 (S3 API); консоль 9001 не нужна для CI. - ports: ["9000:9000"] + image: bitnami/minio:latest # <-- ключевая замена + ports: ["9000:9000"] # API порт env: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin + MINIO_DEFAULT_BUCKETS: xmlsvc # создаст бакет автоматически options: >- - --health-cmd="curl -f http://localhost:9000/minio/health/ready || exit 1" + --health-cmd="curl -fsS http://localhost:9000/minio/health/ready || exit 1" --health-interval=5s --health-timeout=5s - --health-retries=20 + --health-retries=30 env: DATABASE_URL: postgresql+psycopg://xmlsvc:xmlsvc@localhost:5432/xmlsvc @@ -50,17 +49,7 @@ jobs: - uses: actions/setup-python@v5 with: python-version: "3.11" - - name: Start MinIO (official image) - run: | - docker run -d --name gha-minio \ - -e MINIO_ROOT_USER=minioadmin \ - -e MINIO_ROOT_PASSWORD=minioadmin \ - -p 9000:9000 \ - minio/minio:latest server /data - for i in {1..60}; do - curl -fsS http://localhost:9000/minio/health/ready && break - sleep 1 - done + - name: Install deps run: | python -m pip install --upgrade pip From 1fda77c3d4b9967a051bc0e981cbdcc087e9c659 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Thu, 21 Aug 2025 18:22:16 +0300 Subject: [PATCH 05/20] Alembic logging: restore root logger and prevent duplicates (propagate=0) --- alembic.ini | 8 ++++++-- alembic/env.py | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/alembic.ini b/alembic.ini index b44fff8..4e1c815 100644 --- a/alembic.ini +++ b/alembic.ini @@ -2,14 +2,18 @@ script_location = alembic sqlalchemy.url = %(DATABASE_URL)s +[loggers] +keys = root,sqlalchemy,alembic + [handlers] keys = console [formatters] keys = generic -[loggers] -keys = sqlalchemy,alembic +[logger_root] +level = WARN +handlers = console [logger_sqlalchemy] level = WARN diff --git a/alembic/env.py b/alembic/env.py index 6123ec5..e5a9716 100644 --- a/alembic/env.py +++ b/alembic/env.py @@ -20,7 +20,11 @@ # Logging if config.config_file_name is not None: - fileConfig(config.config_file_name) + try: + fileConfig(config.config_file_name, disable_existing_loggers=False) + except Exception as e: + # не валим миграции из-за логирования + pass # Import metadata try: From 7472aeec111d4e00aee15a7eda4e028a1db51b14 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Thu, 21 Aug 2025 18:45:03 +0300 Subject: [PATCH 06/20] =?UTF-8?q?=D0=9B=D0=BE=D0=BA=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=B5=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=85=D0=BE=D0=B4=D1=8F=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/tasks.json | 25 ++++++++++++++++++++ app/db.py | 2 +- app/models_sqlalchemy.py | 45 +++++++++++++++++++++--------------- app/rules/example_rules.yaml | 2 +- app/services/rules.py | 2 +- pytest.ini | 3 +++ requirements.txt | 3 ++- 7 files changed, 60 insertions(+), 22 deletions(-) create mode 100644 pytest.ini diff --git a/.vscode/tasks.json b/.vscode/tasks.json index b2b2454..5426542 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -32,6 +32,31 @@ "group": "build", "presentation": { "reveal": "always", "panel": "dedicated" }, "problemMatcher": [] + }, + { + "label": "Pytest (container)", + "type": "shell", + "command": "docker compose exec -e DATABASE_URL=postgresql+psycopg://xmlsvc:xmlsvc@postgres:5432/xmlsvc -e S3_ENDPOINT=http://minio:9000 -e S3_BUCKET=xmlsvc -e S3_ACCESS_KEY=minioadmin -e S3_SECRET_KEY=minioadmin app pytest -q", + "group": "test", + "presentation": { "reveal": "always", "panel": "dedicated" }, + "problemMatcher": [] + }, + { + "label": "Pytest (host venv)", + "type": "shell", + "command": "pytest -q", + "options": { + "env": { + "DATABASE_URL": "postgresql+psycopg://xmlsvc:xmlsvc@localhost:15433/xmlsvc", + "S3_ENDPOINT": "http://localhost:19000", + "S3_BUCKET": "xmlsvc", + "S3_ACCESS_KEY": "minioadmin", + "S3_SECRET_KEY": "minioadmin" + } + }, + "group": "test", + "presentation": { "reveal": "always", "panel": "dedicated" }, + "problemMatcher": [] } ] } diff --git a/app/db.py b/app/db.py index 5735246..b00298e 100644 --- a/app/db.py +++ b/app/db.py @@ -1,5 +1,5 @@ -from sqlalchemy import create_engine from sqlalchemy.orm import DeclarativeBase, sessionmaker +from sqlalchemy import create_engine import os DATABASE_URL = os.getenv("DATABASE_URL", "postgresql+psycopg://xmlsvc:xmlsvc@localhost:15433/xmlsvc") diff --git a/app/models_sqlalchemy.py b/app/models_sqlalchemy.py index 34aafa4..71ba5fb 100644 --- a/app/models_sqlalchemy.py +++ b/app/models_sqlalchemy.py @@ -1,42 +1,51 @@ -from sqlalchemy import Column, String, Integer, JSON, LargeBinary, ForeignKey, DateTime, func -from sqlalchemy.orm import Mapped, mapped_column, relationship +from __future__ import annotations +from datetime import datetime +from typing import Optional + +from sqlalchemy import String, Integer, JSON, DateTime +from sqlalchemy.orm import Mapped, mapped_column + from app.db import Base class DocumentRow(Base): __tablename__ = "documents" + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) doc_uid: Mapped[str] = mapped_column(String(64), unique=True, index=True) cdm: Mapped[dict] = mapped_column(JSON) - schema_id: Mapped[str | None] = mapped_column(String(64), nullable=True) - schema_version: Mapped[str | None] = mapped_column(String(32), nullable=True) - created_at: Mapped = mapped_column(DateTime(timezone=True), server_default=func.now()) - updated_at: Mapped = mapped_column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) + schema_id: Mapped[Optional[str]] = mapped_column(String(64), nullable=True) + schema_version: Mapped[Optional[str]] = mapped_column(String(32), nullable=True) + created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True)) + updated_at: Mapped[datetime] = mapped_column(DateTime(timezone=True)) + class FileRow(Base): __tablename__ = "files" + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) filename: Mapped[str] = mapped_column(String(255)) sha256: Mapped[str] = mapped_column(String(64), index=True) size: Mapped[int] = mapped_column(Integer) - mime: Mapped[str | None] = mapped_column(String(128), nullable=True) - meta: Mapped[dict | None] = mapped_column(JSON, nullable=True) - created_at: Mapped = mapped_column(DateTime(timezone=True), server_default=func.now()) + mime: Mapped[Optional[str]] = mapped_column(String(128), nullable=True) + meta: Mapped[Optional[dict]] = mapped_column(JSON, nullable=True) + created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True)) class RuleRow(Base): __tablename__ = "rules" + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) rule_id: Mapped[str] = mapped_column(String(128), unique=True, index=True) content: Mapped[dict] = mapped_column(JSON) - version: Mapped[str | None] = mapped_column(String(32), nullable=True) - created_at: Mapped = mapped_column(DateTime(timezone=True), server_default=func.now()) + version: Mapped[Optional[str]] = mapped_column(String(32), nullable=True) + created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True)) class Schema(Base): __tablename__ = "schemas" - id = Column(Integer, primary_key=True, index=True) - name = Column(String, nullable=False) - version = Column(String, nullable=True) - namespace = Column(String, nullable=True) - description = Column(String, nullable=True) - file_path = Column(String, nullable=False) - created_at = Column(DateTime, nullable=False) \ No newline at end of file + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) + name: Mapped[str] = mapped_column(String, nullable=False) + version: Mapped[Optional[str]] = mapped_column(String, nullable=True) + namespace: Mapped[Optional[str]] = mapped_column(String, nullable=True) + description: Mapped[Optional[str]] = mapped_column(String, nullable=True) + file_path: Mapped[str] = mapped_column(String, nullable=False) + created_at: Mapped[datetime] = mapped_column(DateTime, nullable=False) \ No newline at end of file diff --git a/app/rules/example_rules.yaml b/app/rules/example_rules.yaml index 8392834..8ca624f 100644 --- a/app/rules/example_rules.yaml +++ b/app/rules/example_rules.yaml @@ -13,7 +13,7 @@ formula: "Project.object.volumeTotal * 0.6" - field: "Project.object.volumeBelow0" formula: "Project.object.volumeTotal - Project.object.volumeAbove0" - validate: + condition: - rule: "abs(Project.object.volumeAbove0 + Project.object.volumeBelow0 - Project.object.volumeTotal) <= 0.01" message: "Сумма частей должна равняться общему строительному объему" severity: "warning" diff --git a/app/services/rules.py b/app/services/rules.py index f353c8d..50cef04 100644 --- a/app/services/rules.py +++ b/app/services/rules.py @@ -10,7 +10,7 @@ class Rule(BaseModel): id: str when: str | None = None generate: List[Dict[str, Any]] | None = None - validate: List[Dict[str, Any]] | None = None + condition: List[Dict[str, Any]] | None = None severity: str | None = None version: str | None = None diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..9573638 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,3 @@ +[pytest] +testpaths = tests +pythonpath = app diff --git a/requirements.txt b/requirements.txt index 4b333b0..174e0ae 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,4 +11,5 @@ alembic>=1.13.2 psycopg[binary]>=3.1.19 python-multipart>=0.0.9 boto3>=1.34.0 -pytest \ No newline at end of file +httpx>=0.24 +pytest>=8.0 \ No newline at end of file From d9884ea9cc6ce7e86042170079e470474d8f54a3 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Thu, 21 Aug 2025 18:50:47 +0300 Subject: [PATCH 07/20] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=B8=D0=BC=20?= =?UTF-8?q?=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B8=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20CI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6c44e71..c49352b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,10 +1,3 @@ -name: CI - -on: - push: - branches: [ master, main, feature/** ] - pull_request: - jobs: test: runs-on: ubuntu-latest @@ -24,12 +17,12 @@ jobs: --health-retries=5 minio: - image: bitnami/minio:latest # <-- ключевая замена - ports: ["9000:9000"] # API порт + image: bitnami/minio:latest + ports: ["9000:9000"] env: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin - MINIO_DEFAULT_BUCKETS: xmlsvc # создаст бакет автоматически + MINIO_DEFAULT_BUCKETS: xmlsvc options: >- --health-cmd="curl -fsS http://localhost:9000/minio/health/ready || exit 1" --health-interval=5s @@ -37,6 +30,7 @@ jobs: --health-retries=30 env: + PYTHONPATH: ${{ github.workspace }} # <— ключевой фикс DATABASE_URL: postgresql+psycopg://xmlsvc:xmlsvc@localhost:5432/xmlsvc S3_ENDPOINT: http://localhost:9000 S3_BUCKET: xmlsvc @@ -45,7 +39,6 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 with: python-version: "3.11" From 0fb3a5a172d2e4c8186f54a5b56cb2acbbda3dd8 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Thu, 21 Aug 2025 18:52:27 +0300 Subject: [PATCH 08/20] =?UTF-8?q?=D0=9F=D0=BE=D1=82=D0=B5=D1=80=D1=8F?= =?UTF-8?q?=D0=BB=D0=B8=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c49352b..db01b23 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,3 +1,10 @@ +name: CI + +on: + push: + branches: [ master, main, feature/** ] + pull_request: + jobs: test: runs-on: ubuntu-latest From ddca9666e422158f0db3a6c9da8bc64013bc8e76 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Thu, 21 Aug 2025 18:59:10 +0300 Subject: [PATCH 09/20] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=D0=B8=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=B4=D0=BD=D1=83=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0=20alembic=20=D0=B8?= =?UTF-8?q?=D0=B7-=D0=B7=D0=B0=20=D1=81=D0=BC=D0=B5=D0=BD=D1=8B=20=D0=BE?= =?UTF-8?q?=D0=BA=D1=80=D1=83=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index db01b23..98c40c5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,7 +57,7 @@ jobs: pip install pytest - name: Alembic upgrade - run: alembic upgrade head + run: python -m alembic upgrade head - name: Run tests run: pytest -q From 280a446d0b82f308395b6d408295cbdc93267721 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Thu, 21 Aug 2025 19:09:50 +0300 Subject: [PATCH 10/20] =?UTF-8?q?=D0=91=D0=BE=D1=80=D0=B5=D0=BC=D1=81?= =?UTF-8?q?=D1=8F=20=D1=81=20=D0=BA=D0=BE=D0=BB=D0=BB=D0=B8=D0=B7=D0=B8?= =?UTF-8?q?=D0=B5=D0=B9=20=D0=B8=D0=BC=D0=B5=D0=BD=20alembic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- alembic.ini | 2 +- {alembic => migrations}/__init__.py | 0 {alembic => migrations}/env.py | 0 {alembic => migrations}/versions/0001_init.py | 0 {alembic => migrations}/versions/0002_schemas.py | 0 5 files changed, 1 insertion(+), 1 deletion(-) rename {alembic => migrations}/__init__.py (100%) rename {alembic => migrations}/env.py (100%) rename {alembic => migrations}/versions/0001_init.py (100%) rename {alembic => migrations}/versions/0002_schemas.py (100%) diff --git a/alembic.ini b/alembic.ini index 4e1c815..a678392 100644 --- a/alembic.ini +++ b/alembic.ini @@ -1,5 +1,5 @@ [alembic] -script_location = alembic +script_location = migrations sqlalchemy.url = %(DATABASE_URL)s [loggers] diff --git a/alembic/__init__.py b/migrations/__init__.py similarity index 100% rename from alembic/__init__.py rename to migrations/__init__.py diff --git a/alembic/env.py b/migrations/env.py similarity index 100% rename from alembic/env.py rename to migrations/env.py diff --git a/alembic/versions/0001_init.py b/migrations/versions/0001_init.py similarity index 100% rename from alembic/versions/0001_init.py rename to migrations/versions/0001_init.py diff --git a/alembic/versions/0002_schemas.py b/migrations/versions/0002_schemas.py similarity index 100% rename from alembic/versions/0002_schemas.py rename to migrations/versions/0002_schemas.py From 531ff5487c9995d78d6ee46dc063c49f0355a282 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Fri, 22 Aug 2025 11:30:43 +0300 Subject: [PATCH 11/20] =?UTF-8?q?=D0=9D=D0=B0=D1=81=D1=82=D1=80=D0=B0?= =?UTF-8?q?=D0=B8=D0=B2=D0=B0=D0=B5=D0=BC=20=D0=BF=D0=B0=D1=80=D1=81=D0=B8?= =?UTF-8?q?=D0=BD=D0=B3=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B5?= =?UTF-8?q?=20=D1=81=D1=85=D0=B5=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 4 +- app/api/routes/schemas.py | 109 ++++++++++++------ app/routers/schemas.py | 71 ------------ app/services/schema_parser.py | 64 ++++++++-- app/storage.py | 7 ++ templates/base.html | 34 ++++++ .../print/html/example.html | 0 templates/schemas/list.html | 35 ++++++ templates/schemas/upload.html | 15 +++ templates/schemas/view.html | 39 +++++++ tests/conftest.py | 46 +++++++- tests/test_health.py | 8 +- tests/test_schema_parser.py | 30 +++-- tests/test_schemas_delete.py | 25 ++++ tests/test_schemas_upload.py | 28 +++++ 15 files changed, 378 insertions(+), 137 deletions(-) delete mode 100644 app/routers/schemas.py create mode 100644 templates/base.html rename {app/templates => templates}/print/html/example.html (100%) create mode 100644 templates/schemas/list.html create mode 100644 templates/schemas/upload.html create mode 100644 templates/schemas/view.html create mode 100644 tests/test_schemas_delete.py create mode 100644 tests/test_schemas_upload.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 98c40c5..f2102c3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,9 +2,9 @@ name: CI on: push: - branches: [ master, main, feature/** ] + branches: [ master, main ] pull_request: - + branches: [ master, main ] jobs: test: runs-on: ubuntu-latest diff --git a/app/api/routes/schemas.py b/app/api/routes/schemas.py index 8379287..a352aa0 100644 --- a/app/api/routes/schemas.py +++ b/app/api/routes/schemas.py @@ -1,46 +1,69 @@ -# app/api/routes/schemas.py -from fastapi import APIRouter, UploadFile, File, Depends -from fastapi.responses import HTMLResponse -from sqlalchemy.orm import Session from datetime import datetime +import os + +from fastapi import ( + APIRouter, + UploadFile, + File, + Depends, + Request, + HTTPException, +) +from fastapi.responses import HTMLResponse, RedirectResponse +from fastapi.templating import Jinja2Templates +from sqlalchemy.orm import Session from app.db import get_db from app.models_sqlalchemy import Schema from app.services import schema_parser -from app.storage import save_file_minio +from app.storage import save_file_minio, delete_file_minio + router = APIRouter(prefix="/schemas", tags=["schemas"]) +templates = Jinja2Templates(directory="templates") + +# делаем доступной функцию now() для шаблонов +templates.env.globals["now"] = datetime.utcnow + +MAX_UPLOAD_MB = int(os.getenv("MAX_UPLOAD_MB", "80")) @router.get("/", response_class=HTMLResponse) -def list_schemas(db: Session = Depends(get_db)): +def list_schemas(request: Request, db: Session = Depends(get_db)): items = db.query(Schema).order_by(Schema.created_at.desc()).all() - rows = "".join( - f"
  • {s.name} (версия {s.version or '—'})
  • " - for s in items - ) - return HTMLResponse( - f"

    Загруженные схемы

      {rows or '
    • пусто
    • '}
    " - "Загрузить новую схему" + flash = request.query_params.get("msg") + return templates.TemplateResponse( + "schemas/list.html", + {"request": request, "items": items, "flash": flash}, ) -@router.get("/upload", response_class=HTMLResponse) # <-- ОБЯЗАТЕЛЬНО GET -def upload_form(): - return HTMLResponse(""" -

    Загрузить XSD

    -
    -

    - -
    - """) +@router.get("/upload", response_class=HTMLResponse) +def upload_form(request: Request): + return templates.TemplateResponse( + "schemas/upload.html", + {"request": request, "max_upload_mb": MAX_UPLOAD_MB}, + ) @router.post("/upload", response_class=HTMLResponse) -async def upload_schema(file: UploadFile = File(...), db: Session = Depends(get_db)): +async def upload_schema( + request: Request, + file: UploadFile = File(...), + db: Session = Depends(get_db), +): + # проверки + if not file.filename.lower().endswith(".xsd"): + raise HTTPException(status_code=400, detail="Ожидается файл .xsd") content = await file.read() + if len(content) > MAX_UPLOAD_MB * 1024 * 1024: + raise HTTPException(status_code=413, detail=f"Файл превышает {MAX_UPLOAD_MB} МБ") + + # сохраняем в MinIO key = save_file_minio("schemas", file.filename, content) - info = schema_parser.extract_metadata(content) + + # парсим метаданные из XSD + info = schema_parser.extract_metadata(content, filename=file.filename) schema = Schema( name=info.get("name") or file.filename, @@ -54,21 +77,31 @@ async def upload_schema(file: UploadFile = File(...), db: Session = Depends(get_ db.commit() db.refresh(schema) - return HTMLResponse(f"Схема {schema.name} загружена. " - f"Перейти | " - f"К списку") + return RedirectResponse(url=f"/schemas/{schema.id}", status_code=303) @router.get("/{schema_id}", response_class=HTMLResponse) -def view_schema(schema_id: int, db: Session = Depends(get_db)): - schema = db.query(Schema).get(schema_id) +def view_schema(schema_id: int, request: Request, db: Session = Depends(get_db)): + schema = db.get(Schema, schema_id) + if not schema: + raise HTTPException(status_code=404, detail="Схема не найдена") + return templates.TemplateResponse( + "schemas/view.html", + {"request": request, "schema": schema}, + ) + + +@router.post("/{schema_id}/delete") +def delete_schema(schema_id: int, request: Request, db: Session = Depends(get_db)): + schema = db.get(Schema, schema_id) if not schema: - return HTMLResponse("Схема не найдена", status_code=404) - return HTMLResponse(f""" -

    {schema.name}

    -

    Версия: {schema.version or '—'}

    -

    Namespace: {schema.namespace or '—'}

    -

    Описание: {schema.description or '—'}

    -

    Файл (MinIO key): {schema.file_path}

    -

    Назад к списку

    - """) + raise HTTPException(status_code=404, detail="Схема не найдена") + + # удалить файл в MinIO + if schema.file_path: + delete_file_minio(schema.file_path) + + db.delete(schema) + db.commit() + + return RedirectResponse(url="/schemas?msg=Схема%20удалена", status_code=303) diff --git a/app/routers/schemas.py b/app/routers/schemas.py deleted file mode 100644 index 9d11d9b..0000000 --- a/app/routers/schemas.py +++ /dev/null @@ -1,71 +0,0 @@ -from fastapi import APIRouter, UploadFile, File, Depends -from fastapi.responses import HTMLResponse -from sqlalchemy.orm import Session -from app.db import get_db -from app.models_sqlalchemy import Schema -from app.services import schema_parser -from app.storage import save_file_minio -from datetime import datetime - -router = APIRouter(prefix="/schemas", tags=["schemas"]) - - -@router.get("/", response_class=HTMLResponse) -def list_schemas(db: Session = Depends(get_db)): - schemas = db.query(Schema).all() - html = "

    Загруженные схемы

    Загрузить новую схему" - return html - - -@router.get("/upload", response_class=HTMLResponse) -def upload_form(): - return """ -

    Загрузить XSD

    -
    -

    - -
    - """ - - -@router.post("/upload", response_class=HTMLResponse) -async def upload_schema(file: UploadFile, db: Session = Depends(get_db)): - content = await file.read() - # сохраняем в MinIO - object_name = save_file_minio("schemas", file.filename, content) - - # парсим XSD и вытягиваем данные - info = schema_parser.extract_metadata(content) - - schema = Schema( - name=info.get("name") or file.filename, - version=info.get("version"), - namespace=info.get("namespace"), - description=info.get("description"), - file_path=object_name, - created_at=datetime.utcnow() - ) - db.add(schema) - db.commit() - db.refresh(schema) - - return f"Схема {schema.name} загружена. Перейти" - - -@router.get("/{schema_id}", response_class=HTMLResponse) -def view_schema(schema_id: int, db: Session = Depends(get_db)): - schema = db.query(Schema).get(schema_id) - if not schema: - return "Схема не найдена" - html = f""" -

    {schema.name}

    -

    Версия: {schema.version or '—'}

    -

    Namespace: {schema.namespace or '—'}

    -

    Описание: {schema.description or '—'}

    -

    Файл в MinIO: {schema.file_path}

    - Назад к списку - """ - return html diff --git a/app/services/schema_parser.py b/app/services/schema_parser.py index c6f592b..e79a424 100644 --- a/app/services/schema_parser.py +++ b/app/services/schema_parser.py @@ -1,21 +1,67 @@ +from __future__ import annotations +import re +from typing import Optional from lxml import etree -def extract_metadata(content: bytes) -> dict: - info = {} +XS = "http://www.w3.org/2001/XMLSchema" +NS = {"xs": XS} + +def _version_from_filename(filename: Optional[str]) -> Optional[str]: + if not filename: + return None + # Ищем *-NN-MM.xsd → NN.MM + m = re.search(r"-([0-9]{2})[-._]([0-9]{2})\.xsd$", filename, flags=re.IGNORECASE) + if m: + return f"{m.group(1)}.{m.group(2)}" + return None + +def extract_metadata(content: bytes, *, filename: Optional[str] = None) -> dict: + """ + Извлекает базовые метаданные из XSD: + - name: первый верхнеуровневый xs:element/@name + - version: xs:attribute[@name='SchemaVersion']/@fixed ИЛИ из имени файла (*-NN-MM.xsd) + - namespace: schema/@targetNamespace (если есть) + - description: объединённый текст xs:documentation + """ + info: dict = {} try: root = etree.XML(content) except Exception: + # невалидный XML — вернём пусто (выше по стеку решим, что с этим делать) return info - info["namespace"] = root.get("targetNamespace") - info["version"] = root.get("version") + # namespace (если есть) + ns_attr = root.get("targetNamespace") + if ns_attr: + info["namespace"] = ns_attr - docs = root.findall(".//xs:documentation", namespaces={"xs": "http://www.w3.org/2001/XMLSchema"}) - if docs: - info["description"] = " ".join([d.text.strip() for d in docs if d is not None and d.text]) + # description (все документации) + docs_txt = [] + for d in root.findall(".//xs:documentation", namespaces=NS): + if d is not None and d.text: + t = d.text.strip() + if t: + docs_txt.append(t) + if docs_txt: + info["description"] = " ".join(docs_txt) - el = root.find(".//xs:element", namespaces={"xs": "http://www.w3.org/2001/XMLSchema"}) - if el is not None: + # имя документа — первый верхнеуровневый элемент + el = root.find("./xs:element", namespaces=NS) + if el is None: + # fallback — любой element в схеме + el = root.find(".//xs:element", namespaces=NS) + if el is not None and el.get("name"): info["name"] = el.get("name") + # версия — сначала SchemaVersion/@fixed… + ver = None + attr = root.find(".//xs:attribute[@name='SchemaVersion']", namespaces=NS) + if attr is not None: + ver = attr.get("fixed") or attr.get("default") + # …если нет — из имени файла (*-NN-MM.xsd → NN.MM) + if not ver: + ver = _version_from_filename(filename) + if ver: + info["version"] = ver + return info diff --git a/app/storage.py b/app/storage.py index 9a2040e..094ae4a 100644 --- a/app/storage.py +++ b/app/storage.py @@ -24,6 +24,13 @@ def save_file_minio(prefix: str, filename: str, content: bytes) -> str: _s3.put_object(Bucket=S3_BUCKET, Key=key, Body=content) return key +def delete_file_minio(key: str) -> None: + try: + _s3.delete_object(Bucket=S3_BUCKET, Key=key) + except Exception: + # на проде логируем; для MVP — молча + pass + def presigned_url(key: str, expires: int = 3600) -> Optional[str]: try: return _s3.generate_presigned_url( diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..dd69ffb --- /dev/null +++ b/templates/base.html @@ -0,0 +1,34 @@ + + + + + {{ title or "Минстрой XML Service" }} + + + + + +
    + +
    + +
    + {% if flash %} +
    + {{ flash|safe }} +
    + {% endif %} + {% block content %}{% endblock %} +
    + +
    + © {{ now().year }} • MVP +
    + + diff --git a/app/templates/print/html/example.html b/templates/print/html/example.html similarity index 100% rename from app/templates/print/html/example.html rename to templates/print/html/example.html diff --git a/templates/schemas/list.html b/templates/schemas/list.html new file mode 100644 index 0000000..4e5c740 --- /dev/null +++ b/templates/schemas/list.html @@ -0,0 +1,35 @@ +{% extends "base.html" %} +{% block content %} +

    Загруженные XSD/XSL

    + + + +
    + + + + + + + + + + + {% for s in items %} + + + + + + + {% else %} + + {% endfor %} + +
    НазваниеВерсияNamespaceСоздана
    + {{ s.name }} + {{ s.version or "—" }}{{ s.namespace or "—" }}{{ s.created_at }}
    Пока пусто
    +
    +{% endblock %} diff --git a/templates/schemas/upload.html b/templates/schemas/upload.html new file mode 100644 index 0000000..2dfdcd9 --- /dev/null +++ b/templates/schemas/upload.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} +{% block content %} +

    Загрузить XSD

    + +
    +
    + + +

    Макс. размер: {{ max_upload_mb }} МБ

    +
    + + +
    +{% endblock %} diff --git a/templates/schemas/view.html b/templates/schemas/view.html new file mode 100644 index 0000000..3c10b7b --- /dev/null +++ b/templates/schemas/view.html @@ -0,0 +1,39 @@ +{% extends "base.html" %} +{% block content %} +

    {{ schema.name }}

    + +
    +
    +
    +
    Версия
    +
    {{ schema.version or "—" }}
    + +
    Namespace
    +
    {{ schema.namespace or "—" }}
    + +
    Описание
    +
    {{ schema.description or "—" }}
    + +
    MinIO Key
    +
    {{ schema.file_path }}
    + + +
    Источник (URL)
    +
    + +
    Действует
    +
    с — по —
    +
    +
    +
    + +
    + ← К списку + +
    + +
    +
    +{% endblock %} diff --git a/tests/conftest.py b/tests/conftest.py index 30ad40f..5321dad 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,9 +3,17 @@ import pytest from botocore.client import Config +from fastapi.testclient import TestClient +from sqlalchemy.orm import sessionmaker + +from app.main import app +from app.db import engine, get_db + + +# ---- S3: гарантируем, что бакет есть (один раз на сессию) ---- @pytest.fixture(scope="session", autouse=True) def ensure_bucket(): - endpoint = os.getenv("S3_ENDPOINT", "http://localhost:19000") + endpoint = os.getenv("S3_ENDPOINT", "http://localhost:9000") bucket = os.getenv("S3_BUCKET", "xmlsvc") ak = os.getenv("S3_ACCESS_KEY", "minioadmin") sk = os.getenv("S3_SECRET_KEY", "minioadmin") @@ -22,3 +30,39 @@ def ensure_bucket(): buckets = [b["Name"] for b in s3.list_buckets().get("Buckets", [])] if bucket not in buckets: s3.create_bucket(Bucket=bucket) + + +# ---- DB: транзакция на каждый тест, откатываем в конце ---- +@pytest.fixture(scope="function") +def db_session(): + """ + Создаёт соединение и внешнюю транзакцию для теста. + Все изменения откатываются по завершении теста. + """ + connection = engine.connect() + transaction = connection.begin() + + TestingSessionLocal = sessionmaker(bind=connection, autoflush=False, autocommit=False, future=True) + session = TestingSessionLocal() + + try: + yield session + finally: + session.close() + transaction.rollback() + connection.close() + + +# ---- FastAPI TestClient, переопределяем get_db, чтобы он отдавал тестовую сессию ---- +@pytest.fixture(scope="function") +def client(db_session): + def override_get_db(): + try: + yield db_session + finally: + pass + + app.dependency_overrides[get_db] = override_get_db + with TestClient(app) as c: + yield c + app.dependency_overrides.clear() diff --git a/tests/test_health.py b/tests/test_health.py index 8237e2c..42cd9cf 100644 --- a/tests/test_health.py +++ b/tests/test_health.py @@ -1,8 +1,4 @@ -from fastapi.testclient import TestClient -from app.main import app - -def test_health(): - c = TestClient(app) - r = c.get("/health") +def test_health_endpoint(client): + r = client.get("/health") assert r.status_code == 200 assert r.json() == {"status": "ok"} diff --git a/tests/test_schema_parser.py b/tests/test_schema_parser.py index 065d3fe..05f9d9f 100644 --- a/tests/test_schema_parser.py +++ b/tests/test_schema_parser.py @@ -1,14 +1,24 @@ from app.services.schema_parser import extract_metadata -def test_extract_metadata_minimal(): - xsd = b''' - Demo + +def test_extract_metadata_with_schema_version(): + xsd = b''' + + Schema Sample + + + ''' + info = extract_metadata(xsd, filename="DesignAssignment-01-03.xsd") + assert info.get("name") == "DesignAssignment" + assert info.get("version") == "01.03" + assert "Schema Sample" in info.get("description", "") + + +def test_extract_version_from_filename_only(): + xsd = b''' + ''' - info = extract_metadata(xsd) - assert info["namespace"] == "http://example.org" - assert info["version"] == "1.2" - assert "Demo" in info.get("description", "") - assert info["name"] == "DesignAssignment" + info = extract_metadata(xsd, filename="ExpertConclusion-01-00.xsd") + assert info.get("version") == "01.00" + assert info.get("name") == "Conclusion" diff --git a/tests/test_schemas_delete.py b/tests/test_schemas_delete.py new file mode 100644 index 0000000..9af1b91 --- /dev/null +++ b/tests/test_schemas_delete.py @@ -0,0 +1,25 @@ +from app.models_sqlalchemy import Schema + +def test_delete_schema(client, db_session, monkeypatch): + # Заготовим запись напрямую в БД + s = Schema( + name="DesignAssignment", + version="01.03", + namespace=None, + description="Для удаления", + file_path="schemas/fake_DesignAssignment-01-03.xsd", + created_at=__import__("datetime").datetime.utcnow(), + ) + db_session.add(s) + db_session.flush() # получим id, не коммитим (мы в транзакции теста) + + # мок удаления файла из MinIO + monkeypatch.setattr("app.api.routes.schemas.delete_file_minio", lambda key: None) + + r = client.post(f"/schemas/{s.id}/delete", follow_redirects=False) + assert r.status_code == 303 + assert r.headers["Location"].startswith("/schemas") + + # запись удалена в рамках той же транзакции + found = db_session.get(Schema, s.id) + assert found is None diff --git a/tests/test_schemas_upload.py b/tests/test_schemas_upload.py new file mode 100644 index 0000000..00b53d8 --- /dev/null +++ b/tests/test_schemas_upload.py @@ -0,0 +1,28 @@ +from app.models_sqlalchemy import Schema + + +def test_upload_schema_success(client, db_session, monkeypatch): + # мок MinIO — чтобы не ходить в сеть + def fake_save(prefix, filename, content): + return f"{prefix}/fake_{filename}" + monkeypatch.setattr("app.api.routes.schemas.save_file_minio", fake_save) + + xsd = b''' + Test Schema + + + ''' + + files = {"file": ("DesignAssignment-01-03.xsd", xsd, "application/xml")} + r = client.post("/schemas/upload", files=files, follow_redirects=False) + assert r.status_code == 303 + assert r.headers["Location"].startswith("/schemas/") + + # проверяем запись в той же сессии (видна внутри транзакции) + items = db_session.query(Schema).order_by(Schema.id.desc()).all() + assert len(items) >= 1 + s = items[0] + assert s.name == "DesignAssignment" + assert s.version == "01.03" + assert "Test Schema" in (s.description or "") + assert s.file_path.startswith("schemas/fake_") From 9794b6d7505b60579241c320cdc9bc66eded9224 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Fri, 22 Aug 2025 15:38:31 +0300 Subject: [PATCH 12/20] =?UTF-8?q?A1:=20UI=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83?= =?UTF-8?q?=D0=B7=D0=BA=D0=B8=20XSD=20+=20=D0=B8=D0=B7=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BC=D0=B5=D1=82=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B8=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=81=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлен базовый UI (Jinja + Tailwind CDN): список схем, карточка, форма загрузки. - Реализована загрузка XSD в MinIO, извлечение версии из SchemaVersion/@fixed (fallback из имени файла *-NN-MM.xsd), имя/описание из первого верхнего . - Добавлен терпимый к ошибкам парсер XSD (lxml, recover=True, huge_tree=True). - Введён справочник типов схем (YAML) и классификация по имени файла. - На карточке отображаются извлечённые поля, добавлена кнопка «Удалить схему» (удаляет запись и файл в MinIO). - Тесты: изоляция транзакциями (ничего не остаётся в БД), мок MinIO, добавлен интеграционный тест на реальный XSD; устранены варнинги (lxml). - CI: стабильный Alembic upgrade; тесты зелёные --- app/api/routes/schemas.py | 15 +- app/services/schema_classifier.py | 61 + app/services/schema_parser.py | 51 +- config/schema_types.yml | 15 + tests/fixtures/DesignAssignment-01-00.xsd | 9715 +++++++++++++++++++++ tests/test_schema_parser_real_file.py | 16 + tests/test_schemas_upload.py | 20 +- 7 files changed, 9866 insertions(+), 27 deletions(-) create mode 100644 app/services/schema_classifier.py create mode 100644 config/schema_types.yml create mode 100644 tests/fixtures/DesignAssignment-01-00.xsd create mode 100644 tests/test_schema_parser_real_file.py diff --git a/app/api/routes/schemas.py b/app/api/routes/schemas.py index a352aa0..577b365 100644 --- a/app/api/routes/schemas.py +++ b/app/api/routes/schemas.py @@ -65,11 +65,22 @@ async def upload_schema( # парсим метаданные из XSD info = schema_parser.extract_metadata(content, filename=file.filename) + # классифицируем по реестру типов + from app.services import schema_classifier + rule = schema_classifier.classify(file.filename, content) + + display_name = info.get("name") or file.filename + description = info.get("description") + if rule: + # приоритет имени/описания — из справочника типов + display_name = rule.title or display_name + description = rule.description or description + schema = Schema( - name=info.get("name") or file.filename, + name=display_name, version=info.get("version"), namespace=info.get("namespace"), - description=info.get("description"), + description=description, file_path=key, created_at=datetime.utcnow(), ) diff --git a/app/services/schema_classifier.py b/app/services/schema_classifier.py new file mode 100644 index 0000000..453dea8 --- /dev/null +++ b/app/services/schema_classifier.py @@ -0,0 +1,61 @@ +from __future__ import annotations +import os +import re +from dataclasses import dataclass +from typing import List, Optional + +import yaml + +@dataclass +class SchemaTypeRule: + code: str + title: str + description: str = "" + filename_pattern: Optional[str] = None + +_registry: Optional[List[SchemaTypeRule]] = None + +def load_registry() -> List[SchemaTypeRule]: + path = os.getenv("SCHEMA_TYPES_YAML", "config/schema_types.yml") + rules: List[SchemaTypeRule] = [] + try: + with open(path, "r", encoding="utf-8") as f: + data = yaml.safe_load(f) or [] + for item in data: + rules.append(SchemaTypeRule(**item)) + except Exception: + # Фолбэк по умолчанию, если файла нет/битый + rules = [ + SchemaTypeRule( + code="design_assignment", + title="Задание на проектирование", + description="Схема задания на проектирование (MCS).", + filename_pattern=r"(?i)DesignAssignment-[0-9]{2}[-_.][0-9]{2}\.xsd", + ), + SchemaTypeRule( + code="explanatory_note", + title="Пояснительная записка", + description="Схема пояснительной записки (Раздел 1).", + filename_pattern=r"(?i)ExplanatoryNote-[0-9]{2}[-_.][0-9]{2}\.xsd", + ), + SchemaTypeRule( + code="expert_conclusion", + title="Заключение экспертизы", + description="Схема заключения экспертизы.", + filename_pattern=r"(?i)(Expert|Examination)Conclusion-[0-9]{2}[-_.][0-9]{2}\.xsd", + ), + ] + return rules + +def get_registry() -> List[SchemaTypeRule]: + global _registry + if _registry is None: + _registry = load_registry() + return _registry + +def classify(filename: str, content: bytes) -> Optional[SchemaTypeRule]: + # Пока используем только имя файла; при необходимости добавим эвристики по содержимому + for rule in get_registry(): + if rule.filename_pattern and re.search(rule.filename_pattern, filename): + return rule + return None diff --git a/app/services/schema_parser.py b/app/services/schema_parser.py index e79a424..e9988ed 100644 --- a/app/services/schema_parser.py +++ b/app/services/schema_parser.py @@ -9,7 +9,6 @@ def _version_from_filename(filename: Optional[str]) -> Optional[str]: if not filename: return None - # Ищем *-NN-MM.xsd → NN.MM m = re.search(r"-([0-9]{2})[-._]([0-9]{2})\.xsd$", filename, flags=re.IGNORECASE) if m: return f"{m.group(1)}.{m.group(2)}" @@ -17,48 +16,54 @@ def _version_from_filename(filename: Optional[str]) -> Optional[str]: def extract_metadata(content: bytes, *, filename: Optional[str] = None) -> dict: """ - Извлекает базовые метаданные из XSD: - - name: первый верхнеуровневый xs:element/@name - - version: xs:attribute[@name='SchemaVersion']/@fixed ИЛИ из имени файла (*-NN-MM.xsd) + Извлекаем базовые метаданные из XSD, устойчиво к «грязным» файлам: + - name: первый верхнеуровневый xs:element/@name (или любой xs:element) + - version: xs:attribute[@name='SchemaVersion']/@fixed (или @default), + иначе — из имени файла (*-NN-MM.xsd -> NN.MM) - namespace: schema/@targetNamespace (если есть) - - description: объединённый текст xs:documentation + - description: ТОЛЬКО первое xs:schema/xs:annotation/xs:documentation (сжатый текст) """ info: dict = {} + + # Терпимый к ошибкам парсер + parser = etree.XMLParser(recover=True, resolve_entities=False, huge_tree=True) try: - root = etree.XML(content) + root = etree.fromstring(content, parser=parser) except Exception: - # невалидный XML — вернём пусто (выше по стеку решим, что с этим делать) return info - # namespace (если есть) + # namespace (если вдруг есть) ns_attr = root.get("targetNamespace") if ns_attr: info["namespace"] = ns_attr - # description (все документации) - docs_txt = [] - for d in root.findall(".//xs:documentation", namespaces=NS): - if d is not None and d.text: - t = d.text.strip() - if t: - docs_txt.append(t) - if docs_txt: - info["description"] = " ".join(docs_txt) + # description: только верхнеуровневый [1] + desc = None + try: + doc = root.find("./xs:annotation/xs:documentation", namespaces=NS) + if doc is not None and doc.text: + txt = " ".join(doc.text.split()) + if txt: + desc = txt + except Exception: + pass + if desc: + info["description"] = desc - # имя документа — первый верхнеуровневый элемент + # name: сначала верхнеуровневый element, если нет — любой element el = root.find("./xs:element", namespaces=NS) if el is None: - # fallback — любой element в схеме el = root.find(".//xs:element", namespaces=NS) - if el is not None and el.get("name"): - info["name"] = el.get("name") + if el is not None: + name_attr = el.get("name") + if name_attr: + info["name"] = name_attr - # версия — сначала SchemaVersion/@fixed… + # version: SchemaVersion/@fixed -> @default -> из имени файла ver = None attr = root.find(".//xs:attribute[@name='SchemaVersion']", namespaces=NS) if attr is not None: ver = attr.get("fixed") or attr.get("default") - # …если нет — из имени файла (*-NN-MM.xsd → NN.MM) if not ver: ver = _version_from_filename(filename) if ver: diff --git a/config/schema_types.yml b/config/schema_types.yml new file mode 100644 index 0000000..31f99eb --- /dev/null +++ b/config/schema_types.yml @@ -0,0 +1,15 @@ +# Примерный реестр типов схем Минстроя +- code: design_assignment + title: "Задание на проектирование" + description: "Схема задания на проектирование (MCS)." + filename_pattern: "(?i)DesignAssignment-[0-9]{2}[-_.][0-9]{2}\\.xsd" + +- code: explanatory_note + title: "Пояснительная записка" + description: "Схема пояснительной записки (Раздел 1)." + filename_pattern: "(?i)ExplanatoryNote-[0-9]{2}[-_.][0-9]{2}\\.xsd" + +- code: expert_conclusion + title: "Заключение экспертизы" + description: "Схема заключения экспертизы." + filename_pattern: "(?i)(Expert|Examination)Conclusion-[0-9]{2}[-_.][0-9]{2}\\.xsd" diff --git a/tests/fixtures/DesignAssignment-01-00.xsd b/tests/fixtures/DesignAssignment-01-00.xsd new file mode 100644 index 0000000..51c91ce --- /dev/null +++ b/tests/fixtures/DesignAssignment-01-00.xsd @@ -0,0 +1,9715 @@ + + + + + + + + + + + Документ: задание на проектирование + + + + + + + + + + Документ + + + + + Реквизиты документа + + + + + Предыдущие версии документа + + + + Проверка уникальности предыдущих версий xml-документа по порядковому номеру + + + + + + + Проверка уникальности предыдущих версий xml-документа по хэш-сумме файла + + + + + + + + Содержимое документа + + + + Проверка уникальности кодов всех объектов строительства, указанных в документе + + + + + + + + + Идентификатор документа + + + + + Код вида документа + + + + + Порядковый номер текущей версии документа + + + + + Нумерация версий xml-документа начинается с 1 + + + + + + + + Номер версии XML-схемы, использованной при формировании версии документа + + + + + URL ссылка на официально опубликованную XML-схему + + + + + + Проверка соответствия количества версий документа + + + + + + + + + Номер версии XML-схемы, использованной при формировании версии документа + + + + + + + + + + Сведения о предыдущих версиях документа + + + + + Сведения о предыдущей версии документа + + + + + Номер версии из предыдущей версии документа (указанный в Document/@VersionNumber) + + + + + + + + + + Идентификатор документа из предыдущей версии документа (указан в Document/@Id) + + + + + Дата разработки из предыдущей версии документа (указнная в реквизитной части Requisites/Date) + + + + + Номер документа из предыдущей версии документа (указн в реквизитной части Requisites/Number) + + + + + Контрольная сумма файла из предыдущей версии документа (по алгоритму CRC32-IEEE) + + + + + + + + + + Номер версии XML-схемы, использованной при формировании версии документа + + + + + + + + + + + + Реквизиты документа + + + + + Дата разработки документа + + + + + + Номер документа + + + + + Авторы документа + + + + + + Автор документа + + + + + + Проверка, что должен быть указан утверждающий документа + + + + + + + Гриф ограничения доступа к документу + + + + + + + + Глобальный идентификатор + + + + + + + + + Код объекта капитального строительства + + + + + + + + + Автор документа + + + + + + + Юридическое лицо + + + + + Представители организации, подписавшие документ + + + + + + Представитель + + + + + + + + + + + Индивидуальный предприниматель + + + + + + + Функциональная роль подписанта + + + + + + + + + Физическое лицо + + + + + + + Функциональная роль подписанта + + + + + + + + + + + + + + + + Представитель организации, подписавший документ + + + + + Фамилия Имя Отчество + + + + + Должность + + + + + + + Функциональная роль подписанта + + + + + + + Функциональная роль представителя организации, индивидуального предпринимателя или физического лица, подписавшего документ + + + + + Утверждено + + + + + Согласовано + + + + + + + + Справочник: Коды грифов ограничения доступа к документу + + + + + Без грифа + + + + + Конфиденциально + + + + + Коммерческая тайна + + + + + Данный материал запрещается размножать, передавать другим организациям и лицам для целей, не предусмотренных настоящим документом + + + + + + + + + + Содержимое документа + + + + + Цель реализации проекта + + + + + Перечень документов, являющихся основанием для проектирования объекта строительства + + + + + Застройщики + + + + + Технический заказчик + + + + + Разработчики проектной документации + + + + + Источники финансирования строительства объекта + + + + + Требования о необходимости соответствия проектной документации обоснованию безопасности опасного производственного объекта (указываются в случае подготовки проектной документации в отношении опасного производственного объекта) + + + + + Требования к качеству, конкурентоспособности, экологичности и энергоэффективности проектных решений + + + + + Предполагаемая (предельная) стоимость строительства объекта + + + + + Требования к выделению этапов строительства объекта + + + + + Стадийность проектирования и задачи + + + + Уникальность стадий проектирования + + + + + + + + Сведения о климатической, географической и инженерно-геологической характеристике района, на территории которого предполагается осуществлять строительство объекта + + + + + Сведения о земельных участках + + + + + Исходно-разрешительная документация + + + + + Необходимость выполнения инженерных изысканий для подготовки проектной документации + + + + + Требования к объекту капитального строительства + + + + + Смежные объекты капитального строительства + + + + + Перечень необходимых согласований задания на проектирование + + + + + + Согласование + + + + + + + + + Проверка, что указан застройщик(и) и/или технический заказчик + + + + + + + + + Сведения о документах + + + + + + Сведения о документе + + + + + + Дополнительные сведения + + + + + + + + Сведения о документе + + + + + Наименование + + + + + Номер + + + + + Дата + + + + + Автор (организация, индивидуальный предприниматель или физическое лицо) + + + + Организация, индивидуальный предприниматель или физическое лицо + + + + + + + + + + Автор в неформализованной форме + + + + + + Отметка об изменении документа + + + + + + + Файл документа или фрагмента документа + + + + + Информационно-удостоверяющий лист к документу + + + + + + Ссылка на локальный идентификатор (Id) документа, в составе приложений которого находится данный документ + + + + + Ссылка на официально опубликованный документ в сети Интернет + + + + + + + Локальный идентификатор документа + + + + + Код вида документа + + + + + ИУЛ может быть приложен только к документам проектной документаци и документам результатов инженерных изысканий + + + + + + + Файл документа + + + + + Наименование + + + + + Расширение(формат) + + + + + + + + + + Относительный путь к файлу + + + + + Контрольная сумма файла (по алгоритму CRC32-IEEE) + + + + + + + + + + Файл подписи к основному файлу документа + + + + + + + + Файл подписи к документу + + + + + Наименование + + + + + Расширение(формат) + + + + + + + + + + Относительный путь к файлу + + + + + Контрольная сумма файла (по алгоритму CRC32-IEEE) + + + + + + + + + + + + + + + + + Описание cтадии проектирования + + + + + Дополнительные требования + + + + + + + + + + Задача проектирования + + + + + + Стадия проектирования + + + + + + + Стадии проектирования + + + + + Проектная документация + + + + + Рабочая документация + + + + + + + + + + Этапы строительства + + + + + + Общие сведения: + - для производственного/непроизводственного объекта обоснование возможности осуществления строительства объекта капитального строительства по этапам строительства с выделением этих этапов (при необходимости); + - для линейного объекта: описание принципиальных проектных решений, обеспечивающих надежность линейного объекта, последовательность его строительства, намечаемые этапы строительства и планируемые сроки ввода их в эксплуатацию; + + + + + + Описание этапа + + + + + + + + Описание этапа + + + + + Номер или наименование + + + + + Дата начала строительства + + + + + Дата окончания строительства + + + + + Дата ввода в эксплуатацию + + + + + Дополнительные сведения + + + + + + Проверка, что дата начала строительства меньше даты окончания строительства + + + + + Проверка, что дата начала строительства меньше даты ввода в эксплуатацию + + + + + Проверка, что дата окончания строительства меньше даты ввода в эксплуатацию + + + + + + + + Сведения о климатической, географической и инженерно-геологической характеристиках района, на территории которого предполагается осуществлять строительство, реконструкцию или капитальный ремонт объекта капитального строительства + + + + + Общие сведения о климатической, географической и инженерно-геологической характеристике района + + + + + Возможность опасных природных процессов, явлений и техногенных воздействий на территории, на которой будут осуществляться строительство, реконструкция и эксплуатация здания или сооружения + + + + + Климатический район, подрайон + + + + + Категория сложности инженерно-геологических(геокриологических) условий + + + + + Ветровой район + + + + + Снеговой район + + + + + Интенсивность сейсмических воздействий + + + + + + + + Климатический район (подрайон) + + + + + климатический район I + + + + + климатический подрайон IА + + + + + климатический подрайон IБ + + + + + климатический подрайон IВ + + + + + климатический подрайон IГ + + + + + климатический подрайон IД + + + + + климатический район II + + + + + климатический подрайон IIА + + + + + климатический подрайон IIБ + + + + + климатический подрайон IIВ + + + + + климатический подрайон IIГ + + + + + климатический район III + + + + + климатический подрайон IIIА + + + + + климатический подрайон IIIБ + + + + + климатический подрайон IIIВ + + + + + климатический район IV + + + + + климатический подрайон IVА + + + + + климатический подрайон IVБ + + + + + климатический подрайон IVВ + + + + + климатический подрайон IVГ + + + + + + + + Инженерно-геологические условия + + + + + I (простые) + + + + + II (средней сложности) + + + + + III (сложные) + + + + + + + + Ветровой район + + + + + Ветровой район Iа + + + + + Ветровой район I + + + + + Ветровой район II + + + + + Ветровой район III + + + + + Ветровой район IV + + + + + Ветровой район V + + + + + Ветровой район VI + + + + + Ветровой район VII + + + + + + + + Снеговой район + + + + + Снеговой район I + + + + + Снеговой район II + + + + + Снеговой район III + + + + + Снеговой район IV + + + + + Снеговой район V + + + + + Снеговой район VI + + + + + Снеговой район VII + + + + + Снеговой район VIII + + + + + + + + Интенсивность сейсмических воздействий + + + + + 5 и менее баллов + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + + + Более 9 баллов + + + + + + + + + + Сведения о земельных участках + + + + + Общие сведения + + + + + Сведения о категории земель, на которых располагается (будет располагаться) объект капитального строительства + + + + + + Категория земель + + + + + + + + Общие сведения о земельных участках, изымаемых для государственных или муниципальных нужд, о земельных участках, в отношении которых устанавливается сервитут, публичный сервитут, обоснование их размеров, если такие размеры не установлены нормами отвода земель для конкретных видов деятельности, или правилами землепользования и застройки, или проектами планировки, проектами межевания территории, - при необходимости изъятия земельного участка для государственных или муниципальных нужд, установления сервитута, публичного сервитута + + + + + + + + Общие сведения о земельных участках, изымаемых для государственных или муниципальных нужд, о земельных участках, в отношении которых устанавливается сервитут, публичный сервитут, обоснование их размеров, если такие размеры не установлены нормами отвода земель для конкретных видов деятельности, или правилами землепользования и застройки, или проектами планировки, проектами межевания территории, - при необходимости изъятия земельного участка для государственных или муниципальных нужд, установления сервитута, публичного сервитута + + + + + Общие сведения + + + + + Сведения о земельном участке + + + + + + + + Сведения о земельном участке + + + + + Кадастровый номер участка + + + + + Категория земель + + + + + Обоснования действия с земельным участком (изъятие, установление сервитута и пр.), дополнительные сведения об участке + + + + + + + + Кадастровый номер участка + + + + + + + + + Категория земель + + + + + Земли сельскохозяйственного назначения + + + + + Земли населенных пунктов + + + + + Земли промышленности, энергетики, транспорта, связи, радиовещания, телевидения, информатики, земли для обеспечения космической деятельности, земли обороны, безопасности и земли иного специального назначения + + + + + Земли особо охраняемых территорий и объектов + + + + + Земли лесного фонда + + + + + Земли водного фонда + + + + + Земли запаса + + + + + + + + + + Cмежные объекты капитального строительства + + + + + Смежный объект капитального строительства + + + + + + + + Смежный объект капитального строительства + + + + + Наименование + + + + + + Адрес пересечения + + + + + Сведения о параллельном следовании + + + + + + Адрес начального пункта линейного объекта + + + + + Адрес конечного пункта линейного объекта + + + + + Протяженность параллельного следования + + + + + + + + + Разработчик документации + + + + + + Юридическое лицо или индивидуальный предприниматель + + + + + + + + Владелец объекта + + + + + + + + + + Технико-экономические показатели + + + + + Дополнительные сведения + + + + + + Глобальный идентификатор объекта капитального строительства + + + + + Код объекта капитального строительства + + + + + + + Протяженность параллельного следования + + + + + Единица измерения (код по ОКЕИ) + + + + + Значение + + + + + + + + + + Сведения о застройщиках + + + + + Юридическое или физическое лицо + + + + + + + + Сведения о техническом заказчике + + + + + Юридическое лицо + + + + + Сведения о членстве в саморегулируемых организациях (СРО) + + + + Проверка уникальности СРО + + + + + + + + + + + + + Требования к разработчикам проектной документации + + + + + Разработчик проектной документации + + + + + + + Юридическое лицо + + + + + Индивидуальный предприниматель + + + + + + Сведения о членстве в саморегулируемых организациях (СРО) + + + + Проверка уникальности по типу СРО + + + + + + + + + Признак: является генеральным разработчиком проектной документации + + + + + + + Требования к разработчикам проектной документации + + + + + + Требование + + + + + + + + + Проверка, что указаны сведения о разработчике проектной докуметации и(или) требования к разработчику проектной документации + + + + + + + + + Сведения о членстве в саморегулируемых организациях (СРО) + + + + + Сведения о саморегулируемой организации (СРО) + + + + + + + + Сведения о саморегулируемой организации + + + + + + Тип саморегулируемой организации + + + + + + + + + Виды саморегулируемых организаций в строительной области + + + + + + + + + + + + + Сведения об источниках финансирования + + + + + + Бюджетные средства + + + + + + Уровень бюджета + + + + + Размер финансирования (доля в процентах) + + + + + Дополнительные сведения + + + + + + + + Средства юридических лиц, перечисленных в части 2 статьи 8.3 Градостроительного кодекса Российской Федерации + + + + + + Юридическое лицо + + + + + Размер финансирования (доля в процентах) + + + + + Дополнительные сведения + + + + + + + + Средства, не входящие в перечень, указанный в части 2 статьи 8.3 Градостроительного кодекса Российской Федерации + + + + + + >Юридическое лицо, индивидуальный предприниматель или физическое лицо + + + + + Размер финансирования (доля в процентах) + + + + + Дополнительные сведения + + + + + + + + + Дополнительные сведения + + + + + + Проверка, что сумма указанных долей не более 100% + + + + + Проверка, что сумма указанных долей финансирования не равна 100% при наличии других источниках без указания доли финансирования + + + + + + + Значение размера (процентной доли) финансирования + + + + + + + + + + Уровень бюджета + + + + + Федеральный бюджет + + + + + Бюджет субъекта Российской Федерации + + + + + Местный бюджет + + + + + Бюджет государственного внебюджетного фонда Российской Федерации + + + + + Бюджет территориального государственного внебюджетного фонда + + + + + + + + + + Требования к разделам проектной документации по типу объекта капитального строительства + + + + + + Объект производственного назначения + + + + + Объект непроизводственного назначения + + + + + Линейный объект + + + + + + Дополнительные требования + + + + + + + + Описание нелинейного производственного объекта + + + + + Состав проектной документации + + + + + + + + Описание нелинейного непроизводственного объекта + + + + + Состав проектной документации + + + + + + + + Состав проектной документации производственного или непроизводственного объекта капитального строительства + + + + + Раздел 1. «Пояснительная записка» + + + + + Раздел 2. «Схема планировочной организации земельного участка» + + + + + Раздел 3. «Объемно-планировочные и архитектурные решения» + + + + + Раздел 4. «Конструктивные решения» + + + + + Раздел 5. «Сведения об инженерном оборудовании, о сетях и системах инженерно-технического обеспечения» + + + + + Подразделы Раздела 5. «Сведения об инженерном оборудовании, о сетях инженерно-технического обеспечения, перечень инженерно-технических мероприятий, + содержание технологических решений» проектной документации нелинейного объекта капитального строительства + + + + + + Подраздел «Система электроснабжения» + + + + + Подраздел «Система водоснабжения» + + + + + Подраздел «Система водоотведения» + + + + + Подраздел «Отопление, вентиляция и кондиционирование воздуха, тепловые сети» + + + + + Подраздел «Сети связи» + + + + + Подраздел «Система газоснабжения» + + + + + + + + Раздел 6. «Технологические решения» + + + + + Раздел 7. «Проект организации строительства», содержащий в том числе проект организации работ по сносу объектов капитального строительства, их частей (при необходимости сноса объектов капитального строительства, их частей для строительства, + реконструкции других объектов капитального строительства)» + + + + + Раздел 8. «Мероприятия по охране окружающей среды» + + + + + Раздел 9. «Мероприятия по обеспечению пожарной безопасности» + + + + + Раздел 10. «Требования к обеспечению безопасной эксплуатации объектов капитального строительства» + + + + + Раздел 11. «Мероприятия по обеспечению доступа инвалидов к объекту капитального строительства» + + + + + Раздел 12. «Смета на строительство, реконструкцию, капитальный ремонт, снос объекта капитального строительства» + + + + + Раздел 13. «Иная документация в случаях, предусмотренных законодательными и иными нормативными правовыми актами Российской Федерации» + + + + + + + + Подраздел "Смета на строительство" + + + + + Пояснительная записка к сметной документации + + + + + Сводка затрат + + + + + Сводный сметный расчет + + + + + Объектные и локальные расчеты + + + + + Сметные расчеты на отдельные виды затрат + + + + + + + + Подраздел "Иная документация в случаях, предусмотренных законодательными и иными нормативными правовыми актами Российской Федерации" + + + + + Декларация промышленной безопасности опасных производственных объектов + + + + + Декларация безопасности гидротехнических сооружений + + + + + Перечень мероприятий по гражданской обороне, мероприятий по предупреждению чрезвычайных ситуаций природного и техногенного характера, мероприятий по противодействию терроризму для объектов использования атомной энергии (в том числе ядерных установок, пунктов хранения ядерных материалов и радиоактивных веществ), опасных производственных объектов, определяемых таковыми в соответствии с законодательством Российской Федерации, особо опасных, технически сложных, уникальных объектов, объектов обороны и безопасности + + + + + Иная документация, установленная законодательными и иными нормативными правовыми актами Российской Федерации + + + + + + + + Описание линейного объекта + + + + + Состав проектной документации + + + + + + + + Состав проектной документации линейного объекта капитального строительства + + + + + Раздел 1. «Пояснительная записка» + + + + + Раздел 2. «Проект полосы отвода» + + + + + Раздел 3. «Технологические и конструктивные решения линейного объекта. Искусственные сооружения» + + + + + Раздел 4. «Здания, строения и сооружения, входящие в инфраструктуру линейного объекта» + + + + + Раздел 5. «Проект организации строительства» + + + + + Раздел 6. «Мероприятия по охране окружающей среды» + + + + + Раздел 7. «Мероприятия по обеспечению пожарной безопасности» + + + + + Раздел 8. «Требования к обеспечению безопасной эксплуатации линейного объекта» + + + + + Раздел 9. «Смета на строительство, реконструкцию, капитальный ремонт, снос объекта капитального строительства» + + + + + Раздел 10. «Иная документация в случаях, предусмотренных законодательными и иными нормативными правовыми актами Российской Федерации» + + + + + + + + Описание требований к разделу проектной документации + + + + + Требования к разделу проектной документации + + + + + Подраздел проектной документации + + + + + + + + Требования к разделу (подразделу) проектной документации + + + + + Требования к разделу (подразделу) + + + + + Перечень ссылок на нормативные документы + + + + + + + + Требования к подразделу проектной документации + + + + + Требование к подразделу проектной документации + + + + + Подраздел проектной документации + + + + + + Наименование подраздела + + + + + + + + + Необходимость выполнения инженерных изысканий для подготовки проектной документации + + + + + Общие требования + + + + + + Необходимо выполнить инженерные изыскания для подготовки проектной документации + + + + Местоположение района (площадки, трассы) проведения инженерных изысканий + + + + + Требования к инженерным изысканиям (по виду изысканий) + + + + + Требования к содержанию выпускаемых документов (по виду документа) + + + + Проверка уникальности указанных документов (по виду документа) + + + + + + + + Перечень ссылок на нормативные документы + + + + + Переиспользуемые материалы инженерных изысканий и обследований прошлых лет + + + + + + Ссылка на локальный идентификатор документа + + + + + + + Проверка уникальности ссылок на документы + + + + + + + + + Необходимо использовать материалы инженерных изысканий и обследований прошлых лет + + + + Переиспользуемые материалы инженерных изысканий и обследований прошлых лет + + + + + + Ссылка на локальный идентификатор документа + + + + + + + Проверка уникальности ссылок на документы + + + + + + + + + + + + + Местоположение района изысканий + + + + + Код субъекта Российской Федерации + + + + + Описание района изысканий (наименование муниципального района, в случае проведения изысканий на территории Российской Федерации) + + + + + Система координат + + + + + Система высот + + + + + + + + + + Требования к инженерным изысканиям (по виду изысканий) + + + + + + + Масштаб + + + + + + Минимальный масштаб + + + + + Максимальный масштаб + + + + + + + Границы изысканий + + + + + Требования + + + + + + Вид инженерных изысканий + + + + + Вид дополнительных обследований + + + + + Проверка, что указан либо вид инженерных изысканий (@Type), либо вид дополнительных обследований (@SpecialType) + + + + + + + + + + + + Требования к содержанию выпускаемых документов (по виду документа) + + + + + + Требования к документу + + + + + Наименование документа + + + + + Перечень ссылок на нормативные документы + + + + + + Код вида документа + + + + + + + + + + Перечень ссылок на нормативные документы + + + + + Ссылка и наименование нормативного документа (неформализованное описание) + + + + + + + + Вид инженерных изысканий + + + + + Инженерно-геодезические изыскания + + + + + Инженерно-геологические изыскания + + + + + Инженерно-гидрометеорологические изыскания + + + + + Инженерно-экологические изыскания + + + + + Инженерно-геотехнические изыскания + + + + + Геотехнические исследования + + + + + Обследования состояния грунтов оснований зданий и сооружений, их строительных конструкций + + + + + Поиск и разведка подземных вод для целей водоснабжения + + + + + Локальный мониторинг компонентов окружающей среды + + + + + Разведка грунтовых строительных материалов + + + + + Локальные обследования загрязнения грунтов и грунтовых вод + + + + + + + + Специальный вид инженерных изысканий + + + + + Карстологические исследования + + + + + Сейсмическое микрорайонирование + + + + + Археологические изыскания + + + + + Геоботанические исследования + + + + + Математическое моделирование. Расчет гидрологических характеристик + + + + + Геолого-разведочные работы + + + + + Оценка территории распространения многолетнемерзлых грунтов по степени благоприятности для строительного освоения + + + + + Воздушное лазерное сканирование + + + + + + + + Тип: Масштаб + + + + + + + + + + + Объект капитального строительства + + + + + Наименование + + + + + + Почтовый (строительный) адрес (местоположение) + + + + + + Адрес начального пункта линейного объекта + + + + + Адрес конечного пункта линейного объекта + + + + + + + Вид объекта + + + + + Вид работ + + + + + Код классификатора функционального назначения + + + + + Функциональное назначение (неформализованное описание) + + + + + Требования к проектной мощности + + + + + Требования к технико-экономическим показателям + + + + + Объекты капитального строительства, входящие в состав объекта капитального строительства + + + + + Основные требования к проектным решениям + + + + + Требования к составу проектной документации, в том числе требования о разработке разделов проектной документации, наличие которых не является обязательным + + + + + Требования к подготовке сметной документации + + + + + Требования к разработке специальных технических условий + + + + + Требования о применении при разработке проектной документации документов в области стандартизации + + + + + Требования к выполнению демонстрационных материалов, макетов + + + + + Требования о подготовке проектной документации, содержащей материалы в форме информационной модели + + + + + Требование о применении типовой проектной документации, типового проектного решения + + + + + Прочие дополнительные требования и указания, конкретизирующие объем проектных работ + + + + + Условия ввода в эксплуатацию + + + + + + Перечень атрибутов объекта капитального строительства + + + + + + Проверка, что перечень разделов должен соответствовать указанному виду объекта строительства + + + + + Проверка, что производственный/непроизводственный объект должен содержать адрес, линейный объект должен содержать начальный и конечный адреса + + + + + + Проверка: производственный/непроизводственный объект не должен содержать требований к проектным решениям линейного объекта + + + + + + Проверка: линейный объект не должен содержать требований к проектным решениям производственного/непроизводственного объекта + + + + + + Проверка, что дата начала строительства меньше даты окончания строительства + + + + + Проверка, что дата окончания строительства меньше даты ввода в эксплуатацию + + + + + Проверка, что дата начала строительства меньше даты ввода в эксплуатацию + + + + + + + Описание частей сложного объекта (содержащего в себе 2 и более объектов капитального строительства) + + + + + Часть объекта - сложный объект (содержит в себе 2 и более объектов капитального строительства) + + + + + Часть объекта - объект капитального строительства + + + + + + + + Часть объекта - сложный объект + + + + + Наименование + + + + + + Почтовый (строительный) адрес (местоположение) нелинейного объекта + + + + + + Адрес начального пункта линейного объекта + + + + + Адрес конечного пункта линейного объекта + + + + + + + Вид объекта + + + + + Вид работ + + + + + Код классификатора функционального назначения группы объектов капитального строительства + + + + + Функциональное назначение (неформализованное описание) + + + + + Проектная мощность + + + + + Технико-экономические показатели + + + + + Составные части сложного объекта + + + + + + + Перечень атрибутов группы объектов строительства (сложный объект, состоянищий из двух и более объектов капитального строительства) + + + + + + + Перечень атрибутов сложного объекта строительства (сложный объект - состоянищий из двух и более объектов капитального строительства) + + + + Глобальный идентификатор сложного объекта капитального строительства + + + + + Код сложного объекта капитального строительства + + + + + Класс опасности опасного производственного объекта + + + + + Признак принадлежности к объектам транспортной инфраструктуры и к другим объектам, функционально-технологические особенности, которых, влияют на их безопасность + + + + + + + + Часть объекта - объект капитального строительства, входящий в состав сложного объекта + + + + + Наименование + + + + + + Почтовый (строительный) адрес (местоположение) нелинейного объекта + + + + + + Адрес начального пункта линейного объекта + + + + + Адрес конечного пункта линейного объекта + + + + + + + Вид объекта капитального строительства + + + + + Вид работ + + + + + Код классификатора функционального назначения объектов капитального строительства + + + + + Функциональное назначение (неформализованное описание) + + + + + Требования к проектной мощности + + + + + Требования к технико-экономическим показателям + + + + + Основные требования к проектным решениям + + + + + Требования к составу проектной документации, в том числе требования о разработке разделов проектной документации + + + + + Требования к подготовке сметной документации + + + + + Требования к разработке специальных технических условий + + + + + Требования о применении при разработке проектной документации документов в области стандартизации + + + + + Требования к выполнению демонстрационных материалов, макетов + + + + + Требования о подготовке проектной документации, содержащей материалы в форме информационной модели + + + + + Требование о применении типовой проектной документации, типового проектного решения + + + + + Прочие дополнительные требования и указания, конкретизирующие объем проектных работ + + + + + Условия ввода + + + + + + Перечень атрибутов объекта капитального строительства + + + + + + Проверка, что дата начала строительства меньше даты окончания строительства + + + + + Проверка, что дата окончания строительства меньше даты ввода в эксплуатацию + + + + + Проверка, что дата начала строительства меньше даты ввода в эксплуатацию + + + + + + + Перечень атрибутов объекта строительства + + + + Глобальный идентификатор объекта капитального строительства + + + + + Код объекта капитального строительства + + + + + Дата начала строительства + + + + + Дата окончания строительства + + + + + Дата ввода в эксплуатацию + + + + + Принадлежность к объектам транспортной инфраструктуры и к другим объектам, функционально-технологические особенности, которых, влияют на их безопасность + + + + + Возможность опасных природных процессов и явлений и техногенных воздействий на территории, на которой будут осуществляться строительство, реконструкция и эксплуатация здания или сооружения + + + + + Класс опасности опасного производственного объекта + + + + + Категория пожарной и взрывопожарной опасности + + + + + Наличие помещений с постоянным пребыванием людей + + + + + Уровень ответственности + + + + + Сведения об отнесении объекта к особо опасным и технически сложным объектам (номер подпункта пункта 1 статьи 48.1 Градостроительного кодекса Российской Федерации) + + + + + Сведения об отнесении объекта к уникальным объектам (номер подпункта пункта 2 статьи 48.1 Градостроительного кодекса Российской Федерации) + + + + + Сведения о месте расположения объекта капитального строительства + + + + + Принадлежность к объектам культурного наследия (памятникам истории и культуры) народов Российской Федерации + + + + + + + Основные требования к проектным решениям + + + + + Требования к схеме планировочной организации земельного участка + + + + + Требования к проекту полосы отвода + + + + + Требования к архитектурно-художественным решениям, включая требования к графическим материалам + + + + + + + + Требования к зонированию и помещениям + + + + + + Зона + + + + + + Помещение + + + + + Наименование помещения + + + + + Код по КСИ + + + + + Количество + + + + + Минимальная площадь + + + + + Единица измерения площади + + + + + Проверка, что для площади помещения указана единица измерения + + + + + Проверка наличия атрибута минимальной площади помещения при указанном атрибуте единицы измерения + + + + + + + + Наименование зоны + + + + + Код по КСИ + + + + + Количество + + + + + + + + + + + + + + + Требования к технологическим решениям + + + + + Требования к конструктивным и объемно-планировочным решениям + + + + Проверка уникальности подразделов требований по @наименованию + + + + + + + + Требования к технологическим и конструктивным решениям линейного объекта + + + + + Требования к зданиям, строениям и сооружениям, входящим в инфраструктуру линейного объекта + + + + + Требования к инженерно-техническим решениям + + + + Проверка уникальности систем по @Наименованию + + + + + + + Проверка уникальности наружных сетей по @Наименованию + + + + + + + + Требования к мероприятиям по охране окружающей среды + + + + + Требования к мероприятиям по обеспечению пожарной безопасности + + + + + Требования к мероприятиям по обеспечению соблюдения требований энергетической эффективности и по оснащенности объекта приборами учета используемых энергетических ресурсов + + + + + Требования к мероприятиям по обеспечению доступа маломобильных групп населения к объекту + + + + + Требования к инженерно-техническому укреплению объекта в целях обеспечения его антитеррористической защищенности + + + + + Требования к соблюдению безопасных для здоровья человека условий проживания и пребывания в объекте и требования к соблюдению безопасного уровня воздействия объекта на окружающую среду + + + + + Требования к технической эксплуатации и техническому обслуживанию объекта + + + + + Требования к проекту организации строительства объекта + + + + + Требования о необходимости сноса или сохранения зданий, сооружений, вырубки или сохранения зеленых насаждений, реконструкции, капитального ремонта существующих линейных объектов в связи с планируемым строительством объекта, расположенных на земельном участке, на котором планируется строительство объекта + + + + + Требования к решениям по благоустройству прилегающей территории, малым архитектурным формам и планировочной организации земельного участка + + + + + Требования к разработке проекта рекультивации земель + + + + + Требования к местам складирования излишков грунта и (или) мусора при строительстве и протяженность маршрута их доставки + + + + + Требования к выполнению научно-исследовательских и опытно-конструкторских работ в процессе проектирования и строительства объекта + + + + + + Проверка, что указаны требования хотя бы по одному разделу + + + + + + + Требования к конструктивным и объемно-планировочным решениям + + + + + Подраздел + + + + + + + Наименование подраздела + + + + + + + + + + + + Подразделы требований к конструктивным и объемно-планировочным решениям + + + + + Порядок выбора и применения материалов, изделий, конструкций, оборудования и их согласования застройщиком (техническим заказчиком) + + + + + Требования к строительным конструкциям + + + + + Требования к фундаментам + + + + + Требования к стенам, подвалам и цокольному этажу + + + + + Требования к наружным стенам + + + + + Требования к внутренним стенам и перегородкам + + + + + Требования к перекрытиям + + + + + Требования к колоннам, ригелям + + + + + Требования к лестницам + + + + + Требования к полам + + + + + Требования к кровле + + + + + Требования к витражам, окнам + + + + + Требования к дверям + + + + + Требования к внутренней отделке + + + + + Требования к наружной отделке + + + + + Требования к обеспечению безопасности объекта при опасных природных процессах, явлениях и техногенных воздействиях + + + + + Требования к инженерной защите территории объекта + + + + + + + + Требования к инженерно-техническим решениям + + + + + Требования к основному технологическому оборудованию + + + + + + + Наименование технологической системы + + + + + + + + + Требования к наружным сетям инженерно-технического обеспечения, точкам присоединения + + + + + + + Наименование технологической системы + + + + + + + + + + + + Инженерно-технические системы + + + + + Отопление + + + + + Вентиляция + + + + + Водопровод + + + + + Канализация + + + + + Электроснабжение + + + + + Телефонизация + + + + + Радиофикация + + + + + Информационно-телекоммуникационная сеть "Интернет" + + + + + Телевидение + + + + + Газификация + + + + + Автоматизация и диспетчеризация + + + + + Иные системы инженерно-технического обеспечения + + + + + + + + Наружные сети инженерно-технического обеспечения + + + + + Водоснабжение + + + + + Водоотведение + + + + + Теплоснабжение + + + + + Электроснабжение + + + + + Телефонизация + + + + + Радиофикация + + + + + Информационно-телекоммуникационная сеть "Интернет" + + + + + Телевидение + + + + + Газоснабжение + + + + + Иные сети инженерно-технического обеспечения + + + + + + + + Код классификатора функционального назначения объектов капитального строительства + + + + + + + Код классификатора функционального назначения группы объектов капитального строительства + + + + + + + + + Код классификатора функционального назначения объектов капитального строительства + + + + + + + + + Технико-экономический показатель (показатель мощности) и его значение + + + + + Наименование + + + + + Единица измерения (код по ОКЕИ) + + + + + + Значение показателя + + + + + + Минимальное значение показателя + + + + + Максимальное значение показателя + + + + + + + + Предыдущее значение показателя (при реконструкции) + + + + + + Предыдущее минимальное значение показателя (при реконструкции) + + + + + Предыдущее максимальное значение показателя (при реконструкции) + + + + + + + + Идентификатор элемента + + + + + + + Требования к техническим решениям + + + + + Общие требования к техническим решениям + + + + + Требования к техническим решениям компонента + + + + + + + + Требования к техническим решениям компонента объекта капитального строительства + + + + + Наименование компонента + + + + + Описание компонента + + + + + Требования к техническим решениям + + + + + + + + Требования к техническим решениям + + + + + Требование + + + + + + Содержание + + + + + Перечень ссылок на нормативные документы + + + + + Автор + + + + + + + + + + + Сведения об отнесении объекта к уникальным объектам (номер подпункта пункта 2 статьи 48.1 Градостроительного кодекса Российской Федерации) + + + + + 1) высота более чем 100 метров, для ветроэнергетических установок - более чем 250 метров + + + + + 2) пролеты более чем 100 метров + + + + + 3) наличие консоли более чем 20 метров + + + + + 4) заглубление подземной части (полностью или частично) ниже планировочной отметки земли более чем на 15 метров + + + + + + + + + + Не относится к опасным производственным объектам + + + + + I класс опасности - опасные производственные объекты чрезвычайно высокой опасности + + + + + II класс опасности - опасные производственные объекты высокой опасности + + + + + III класс опасности - опасные производственные объекты средней опасности + + + + + IV класс опасности - опасные производственные объекты низкой опасности + + + + + + + + Сведения об отнесении объекта к особо опасным и технически сложным объектам (номер подпункта пункта 1 статьи 48.1 Градостроительного кодекса Российской Федерации) + + + + + + 1) объекты использования атомной энергии в соответствии с законодательством Российской Федерации об использовании атомной энергии, за исключением объектов, содержащих: + а) только радиационные источники, в которых генерируется ионизирующее излучение, на объектах, радиационное воздействие от которых в случае аварии ограничивается помещениями, где осуществляется непосредственное обращение с источниками ионизирующего излучения; + б) радиационные источники, содержащие в своем составе только радионуклидные источники четвертой и пятой категорий радиационной опасности в соответствии с законодательством Российской Федерации об использовании атомной энергии + + + + + + 2) гидротехнические сооружения первого и второго классов, устанавливаемые в соответствии с законодательством о безопасности гидротехнических сооружений + + + + + 3) сооружения связи, являющиеся особо опасными, технически сложными в соответствии с законодательством Российской Федерации в области связи + + + + + 4) линии электропередачи и иные объекты электросетевого хозяйства напряжением 330 киловольт и более + + + + + 5) объекты космической инфраструктуры + + + + + 6) объекты инфраструктуры воздушного транспорта, являющиеся особо опасными, технически сложными объектами в соответствии с воздушным законодательством Российской Федерации + + + + + 7) объекты капитального строительства инфраструктуры железнодорожного транспорта общего пользования, являющиеся особо опасными, технически сложными объектами в соответствии с законодательством Российской Федерации о железнодорожном + транспорте + + + + + 8) объекты инфраструктуры внеуличного транспорта + + + + + 9) портовые гидротехнические сооружения, относящиеся к объектам инфраструктуры морского порта, за исключением объектов инфраструктуры морского порта, предназначенных для стоянок и обслуживания маломерных, спортивных парусных и прогулочных + судов + + + + + 10.1) тепловые электростанции мощностью 150 мегаватт и выше + + + + + 10.2) подвесные канатные дороги + + + + + 11. а) опасные производственные объекты I и II классов опасности, на которых получаются, используются, перерабатываются, образуются, хранятся, транспортируются, уничтожаются опасные вещества + + + + + 11. б) опасные производственные объекты, на которых получаются, транспортируются, используются расплавы черных и цветных металлов, сплавы на основе этих расплавов с применением оборудования, рассчитанного на максимальное количество расплава 500 + килограммов и более + + + + + 11. в) опасные производственные объекты, на которых ведутся горные работы (за исключением добычи общераспространенных полезных ископаемых и разработки россыпных месторождений полезных ископаемых, осуществляемых открытым способом без применения + взрывных работ), работы по обогащению полезных ископаемых + + + + + + + + Сведения о месте расположения объекта капитального строительства + + + + + Объекты, расположенные на суше + + + + + Водный объект + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Объект производственного назначения + + + + + Объект непроизводственного назначения + + + + + Линейный объект + + + + + + + + + + Справчоник: Вид объекта экспертизы + + + + + Результаты инженерных изысканий + + + + + Проектная документация + + + + + Проектная документация и результаты инженерных изысканий + + + + + + + + + + Справочник: виды работ + + + + + Строительство + + + + + Реконструкция + + + + + Капитальный ремонт + + + + + Снос + + + + + Сохранение объекта культурного наследия + + + + + + + + + + Юридическое лицо + + + + + Полное наименование + + + + + Сокращенное наименование + + + + + + Основной государственный регистрационный номер + + + + + Номер записи аккредитации Реестра аккредитованных филиалов, представительств иностранных юридических лиц (РАФП) + + + + + + Индивидуальный номер налогоплательщика + + + + + Код причины постановки на учет + + + + + Адрес (местонахождение) в Российской Федерации + + + + + Адрес электронной почты + + + + + + + + Индивидуальный предприниматель + + + + + Фамилия Имя Отчество + + + + + Основной государственный регистрационный номер + + + + + Индивидуальный номер налогоплательщика + + + + + Почтовый адрес + + + + + Адрес электронной почты + + + + + + + + Физическое лицо + + + + + Фамилия Имя Отчество + + + + + Страховой номер индивидуального лицевого счёта + + + + + Почтовый адрес + + + + + Адрес электронной почты + + + + + + + + Группа: Фамилия Имя Отчество + + + + + Фамилия + + + + + Имя + + + + + Отчество + + + + + + + + Группа: Юридическое лицо или индивидуальный предприниматель + + + + + Юридическое лицо + + + + + Индивидуальный предприниматель + + + + + + + + Группа: Юридическое лицо, индивидуальный предприниматель или физическое лицо + + + + + Юридическое лицо + + + + + Индивидуальный предприниматель + + + + + Физическое лицо + + + + + + + + Группа: Юридическое или физическое лицо + + + + + Юридическое лицо + + + + + Физическое лицо + + + + + + + + ОГРН + + + + + + + + + + Номер записи об аккредитации (НЗА) государственного реестра аккредитованных филиалов, представительств иностранных юридических лиц (РАФП) + + + + + + + + + + ОГРНИП + + + + + + + + + + КПП + + + + + + + + + + ИНН + + + + + + + + + + ИНН + + + + + + + + + + СНИЛС + + + + + + + + + Адрес электронной почты + + + + + + + + + Фамилия, имя, отчество в кириллице + + + + + + + + + + + Справочник: коды видов документов + + + + + + + Справочник: коды видов документов - проектная докуметация + + + + + + + Документы-основания проведения экспертизы + + + + + Документы-основания проведения экспертизы: Заявление о проведении экспертизы + + + + + Документы-основания проведения экспертизы: Договор о проведении экспертизы + + + + + + Документы-основания проведения экспертизы: Документ, подтверждающий полномочия заявителя действовать от имени застройщика, технического заказчика, лица, обеспечившего выполнение инженерных изысканий и (или) подготовку проектной документации в + случаях, предусмотренных частями 1.1 и 1.2 статьи 48 Градостроительного кодекса Российской Федерации + + + + + + Документы-основания проведения экспертизы: Иные документы + + + + + + + + Заключение экспертизы + + + + + Заключение экспертизы: Заключение экспертизы проектной документации и/или результатов инженерных изысканий, выданное ранее в отношении этого же объекта + + + + + Заключение экспертизы: Заключение по результатам оценки соответствия в рамках экспертного сопровождения + + + + + Заключение экспертизы: Заключение государственной экологической экспертизы + + + + + Заключение экспертизы: Заключение государственной историко-культурной экспертизы + + + + + Заключение экспертизы: Сводное заключение о проведении публичного технологического аудита крупного инвестиционного проекта с государственным участием + + + + + Заключение экспертизы: Заключение технологического и ценового аудита обоснования инвестиций + + + + + Заключение экспертизы: Заключение государственной экспертизы запасов подземных вод + + + + + Заключение экспертизы: Заключение государственной экспертизы запасов полезных ископаемых + + + + + Заключение экспертизы: Иные заключения + + + + + + + + Документы размещения объекта строительства + + + + + Документы размещения объекта строительства: Документ территориального планирования + + + + + Документы размещения объекта строительства: Градостроительный план земельного участка + + + + + Документы размещения объекта строительства: Проект планировки территории + + + + + Документы размещения объекта строительства: Проект межевания территории + + + + + Документы размещения объекта строительства: Согласование включения в границы территории, подлежащей комплексному развитию по инициативе правообладателей земельных участков, для размещения объектов коммунальной, транспортной, социальной + инфраструктур, находящихся в государственной и (или) муниципальной собственности и не обремененных правами третьих лиц + + + + + Документы размещения объекта строительства: Согласование при осуществлении строительства помещений и сооружений, необходимых для организации пограничного, таможенного и иных видов контроля в пункте пропуска через Государственную + границу + + + + + Документы размещения объекта строительства: Иные документы + + + + + + + + Документы подключения объекта строительства к инженерным сетям + + + + + Документы подключения объекта строительства к инженерным сетям: Технические условия на подключение объекта капитального строительства к сетям инженерно-технического обеспечения + + + + + Документы подключения объекта строительства к инженерным сетям: Документ о согласовании отступлений от положений технических условий + + + + + Документы подключения объекта строительства к инженерным сетям: Технические условия на перенос и переустройство линий связи и сооружений связи + + + + + Документы подключения объекта строительства к инженерным сетям: Иные документы + + + + + + + + Задания и программы + + + + + Задания и программы: Задание на проведение инженерных изысканий + + + + + Задания и программы: Программа инженерных изысканий + + + + + Задания и программы: Задание на проектирование + + + + + Задания и программы: Иные задания + + + + + + + + Результаты инженерных изысканий + + + + + Результаты инженерных изысканий: Инженерно-геодезические изыскания + + + + + Результаты инженерных изысканий: Инженерно-геологические изыскания + + + + + Результаты инженерных изысканий: Инженерно-гидрометеорологические изыскания + + + + + Результаты инженерных изысканий: Инженерно-экологические изыскания + + + + + Результаты инженерных изысканий: Инженерно-геотехнические изыскания + + + + + Результаты инженерных изысканий: Геотехнические исследования + + + + + Результаты инженерных изысканий: Обследования состояния грунтов оснований зданий и сооружений, их строительных конструкций + + + + + Результаты инженерных изысканий: Поиск и разведка подземных вод для целей водоснабжения + + + + + Результаты инженерных изысканий: Локальный мониторинг компонентов окружающей среды + + + + + Результаты инженерных изысканий: Разведка грунтовых строительных материалов + + + + + Результаты инженерных изысканий: Локальные обследования загрязнения грунтов и грунтовых вод + + + + + Результаты инженерных изысканий: Иной документ + + + + + + + + Проектная документация: проризводственный / непроизводственный объект + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 1. «Пояснительная записка» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 2. «Схема планировочной организации земельного участка» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 3. «Архитектурные решения» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 4. «Конструктивные и объемно-планировочные решения» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 5. Подраздел «Система электроснабжения» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 5. Подраздел «Система водоснабжения» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 5. Подраздел «Система водоотведения» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 5. Подраздел «Отопление, вентиляция и кондиционирование воздуха, тепловые сети» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 5. Подраздел «Сети связи» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 5. Подраздел «Система газоснабжения» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 5. Подраздел «Технологические решения» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 6. «Проект организации строительства» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 7. «Проект организации работ по сносу или демонтажу объектов капитального строительства» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 8. «Перечень мероприятий по охране окружающей среды» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 9. «Мероприятия по обеспечению пожарной безопасности» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 10. «Мероприятия по обеспечению доступа инвалидов» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 10.1. «Мероприятия по обеспечению соблюдения требований энергетической эффективности и требований оснащенности зданий, строений и сооружений приборами учета используемых энергетических ресурсов» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 11. «Смета на строительство объектов капитального строительства» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 12. «Иная документация в случаях, предусмотренных федеральными законами» (действовал до 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 1. «Пояснительная записка» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 2. «Схема планировочной организации земельного участка» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 3. «Объемно-планировочные и архитектурные решения» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 4. «Конструктивные решения» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 5. Подраздел «Система электроснабжения» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 5. Подраздел «Система водоснабжения» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 5. Подраздел «Система водоотведения» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 5. Подраздел «Отопление, вентиляция и кондиционирование воздуха, тепловые сети» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 5. Подраздел «Сети связи» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 5. Подраздел «Система газоснабжения» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 6. «Технологические решения» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 7. «Проект организации строительства» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 8. «Мероприятия по охране окружающей среды» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 9. «Мероприятия по обеспечению пожарной безопасности» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 10. «Требования к обеспечению безопасной эксплуатации объектов капитального строительства» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 11. «Мероприятия по обеспечению доступа инвалидов к объекту капитального строительства» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 12. «Смета на строительство, реконструкцию, капитальный ремонт, снос объекта капитального строительства» (действует с 01.09.2022) + + + + + Проектная документация: проризводственный / непроизводственный объект: Раздел 13. «Иная документация в случаях, предусмотренных законодательными и иными нормативными правовыми актами Российской Федерации» (действует с 01.09.2022) + + + + + + + + Проектная документация: линейный объект + + + + + Проектная документация: линейный объект: Раздел 1. «Пояснительная записка» (действовал до 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 2. «Проект полосы отвода» (действовал до 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 3. «Технологические и конструктивные решения линейного объекта. Искусственные сооружения» (действовал до 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 4. «Здания, строения и сооружения, входящие в инфраструктуру линейного объекта» (действовал до 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 5. «Проект организации строительства» (действовал до 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 6. «Проект организации работ по сносу (демонтажу) линейного объекта» (действовал до 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 7. «Мероприятия по охране окружающей среды» (действовал до 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 8. «Мероприятия по обеспечению пожарной безопасности» (действовал до 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 9. «Смета на строительство» (действовал до 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 10. «Иная документация в случаях, предусмотренных федеральными законами» (действует с 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 1. «Пояснительная записка» (действует с 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 2. «Проект полосы отвода» (действует с 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 3. «Технологические и конструктивные решения линейного объекта. Искусственные сооружения» (действует с 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 4. «Здания, строения и сооружения, входящие в инфраструктуру линейного объекта» (действует с 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 5. «Проект организации строительства» (действует с 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 6. «Мероприятия по охране окружающей среды» (действует с 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 7. «Мероприятия по обеспечению пожарной безопасности» (действует с 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 8. «Требования к обеспечению безопасной эксплуатации линейного объекта» (действует с 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 9. «Смета на строительство, реконструкцию, капитальный ремонт, снос объекта капитального строительства» (действует с 01.09.2022) + + + + + Проектная документация: линейный объект: Раздел 10. «Иная документация в случаях, предусмотренных законодательными и иными нормативными правовыми актами Российской Федерации» (действует с 01.09.2022) + + + + + + + + Переписка по вопросам проведения экспертизы + + + + + Переписка по вопросам проведения экспертизы: Уведомление о выявлении недостатков + + + + + Переписка по вопросам проведения экспертизы: Сопроводительное письмо заявителя с откорректированной проектной документацией + + + + + Переписка по вопросам проведения экспертизы: Иной документ + + + + + + + + Документы о членстве в саморегулируемой организации + + + + + Документы о членстве в саморегулируемой организации: Выписка из реестра членов саморегулируемой организации + + + + + Документы о членстве в саморегулируемой организации: Иной документ + + + + + + + + Документы для проведения проверки достоверности определения сметной стоимости + + + + + Документы для проведения проверки достоверности определения сметной стоимости: Ведомость объемов работ + + + + + Документы для проведения проверки достоверности определения сметной стоимости: Решение по объекту капитального строительства + + + + + Документы для проведения проверки достоверности определения сметной стоимости: Акт, содержащий перечень дефектов оснований, строительных конструкций, систем инженерно-технического обеспечения и сетей инженерно-технического обеспечения + + + + + Документы для проведения проверки достоверности определения сметной стоимости: Решение о разработке и применении индивидуальных сметных нормативов + + + + + Документы для проведения проверки достоверности определения сметной стоимости: Коньюктурный анализ + + + + + Документы для проведения проверки достоверности определения сметной стоимости: Прайс-лист + + + + + Документы для проведения проверки достоверности определения сметной стоимости: Иной документ + + + + + + + + Документы в отношении экономически эффективной (типовой) проектной документации повторного использования + + + + + Документы в отношении экономически эффективной (типовой) проектной документации повторного использования: Положительное заключение экспертизы в отношении экономически эффективной (типовой) проектной документации повторного использования + + + + + Документы в отношении экономически эффективной (типовой) проектной документации повторного использования: Справка с указанием разделов, которые не подвергались изменению + + + + + Документы в отношении экономически эффективной (типовой) проектной документации повторного использования: Документ, подтверждающий аналогичность + + + + + Документы в отношении экономически эффективной (типовой) проектной документации повторного использования: Иной документ + + + + + + + + Документы в отношении работ по сносу объектов капитального строительства + + + + + Документы в отношении работ по сносу объектов капитального строительства: Проект организации работ по сносу объекта капитального строительства + + + + + Документы в отношении работ по сносу объектов капитального строительства: Смета на снос объекта капитального строительства + + + + + Документы в отношении работ по сносу объектов капитального строительства: Акт (решение) собственника здания (сооружения, строения) о выведении из эксплуатации и ликвидации объекта капитального строительства + + + + + Документы в отношении работ по сносу объектов капитального строительства: Решение федерального органа исполнительной власти, органа исполнительной власти субъекта Российской Федерации или органа местного самоуправления о признании многоквартирного + дома аварийным и подлежащим сносу + + + + + Документы в отношении работ по сносу объектов капитального строительства: Результаты и материалы обследования объекта капитального строительства в соответствии с требованиями технических регламентов, санитарно-эпидемиологическими требованиями, требованиями в области охраны окружающей среды, требованиями безопасности + деятельности в области использования атомной энергии, требованиями к осуществлению деятельности в области промышленной безопасности + + + + + Документы в отношении работ по сносу объектов капитального строительства: Документ, подтверждающий передачу проекта организации работ по сносу объекта капитального строительства застройщику, техническому заказчику или лицу, обеспечившему выполнение инженерных изысканий и (или) подготовку проектной + документации + + + + + Документы в отношении работ по сносу объектов капитального строительства: Иной документ + + + + + + + + Программы развития + + + + + Программы развития: Федеральная целевая программа + + + + + Программы развития: Программа развития субъекта Российской Федерации + + + + + Программы развития: Программа развития муниципального образования + + + + + Программы развития: Ведомственная целевая программа + + + + + Программы развития: Иная программа + + + + + + + + Решение о разработке проектной документации + + + + + Решение о разработке проектной документации: Решение Президента Российской федерации + + + + + Решение о разработке проектной документации: Нормативный правовой акт Правительства Российской Федерации + + + + + Решение о разработке проектной документации: Нормативный правовой акт высшего органа исполнительной власти субъекта Российской Федерации + + + + + Решение о разработке проектной документации: Муниципальный правовой акт местной администрации муниципального образования + + + + + Решение о разработке проектной документации: Решение главного распорядителя средств федерального бюджета о подготовке и реализации бюджетных инвестиций, о предоставлении субсидий на осуществление капитальных вложений в объект капитального + строительства + + + + + Решение о разработке проектной документации: Решение руководителя государственной компании и корпорации об осуществлении капитальных вложений в объект капитального строительства + + + + + Решение о разработке проектной документации: Решение по объекту капитального строительства, принятое в порядке, установленном методикой, приведенной в приложении к соответствующей федеральной целевой программе, определяющей порядок детализации + мероприятий (укрупненных инвестиционных проектов), содержащее информацию об объекте капитального строительства, входящем в мероприятие (укрупненный инвестиционный проект) + + + + + Решение о разработке проектной документации: Решение застройщика + + + + + Решение о разработке проектной документации: Решение иного лица + + + + + + + + Международные договоры + + + + + Международные договоры: Международный договор + + + + + Международные договоры: Соглашение о разделе продукции + + + + + Международные договоры: Иные договоры + + + + + + + + Правоустанавливающие документы + + + + + Правоустанавливающие документы: Выписка из Единого государственного реестра недвижимости + + + + + Правоустанавливающие документы: Иной правоустанавливающий документ + + + + + + + + Документы о безопасности производственных объектов + + + + + Документы о безопасности производственных объектов: Обоснование безопасности опасного производственного объекта в случаях, предусмотренных частью 4 статьи 3 Федерального закона «О промышленной безопасности опасных производственных + объектов» + + + + + Документы о безопасности производственных объектов: Положительное заключение экспертизы промышленной безопасности такого обоснования, внесенное в реестр заключений экспертизы промышленной безопасности + + + + + Документы о безопасности производственных объектов: Документ о регистрации в государственном реестре опасных производственных объектов + + + + + Документы о безопасности производственных объектов: Иные документы + + + + + + + + Специальные технические условия + + + + + Специальные технические условия + + + + + Специальные технические условия: Документ о согласовании отступлений от положений специальных технических условий + + + + + Специальные технические условия: Технические требования и условия, подлежащие обязательному исполнению при подготовке проектной документации в целях реконструкции, капитального ремонта существующих линейного объекта или линейных объектов, а также + при осуществлении таких реконструкций, капитального ремонта + + + + + Специальные технические условия: Иные документы + + + + + + + + Разрешения + + + + + Разрешения: Разрешение на строительство + + + + + Разрешения: Разрешение на ввод объектов в эксплуатацию + + + + + Разрешения: Акт освидетельствования проведения основных работ по строительству, реконструкции + + + + + Разрешения: Разрешение на условно разрешенный вид использования земельного участка или объекта капитального строительства + + + + + Разрешения: Разрешение на отклонение от предельных параметров разрешенного строительства, реконструкции объектов капитального строительства + + + + + Разрешения: Разрешение на застройку земельных участков, которые расположены за границами населенных пунктов и находятся на площадях залегания полезных ископаемых, а также на размещение за границами населенных пунктов в местах залегания полезных + ископаемых подземных сооружений в пределах горного отвода + + + + + Разрешения: Разрешение на установку радиопередающих средств на высотных зданиях + + + + + Разрешения: Иные разрешения + + + + + + + + Документы в сфере охраны окружающей среды и недропользования + + + + + Документы в сфере охраны окружающей среды и недропользования: Расчет нормативов допустимых выбросов, нормативов допустимых сбросов + + + + + Документы в сфере охраны окружающей среды и недропользования: Горноотводный акт с планом границ горного отвода или его копия + + + + + Документы в сфере охраны окружающей среды и недропользования: Лицензия на пользование недрами + + + + + Документы в сфере охраны окружающей среды и недропользования: Заключение о согласовании строительства и реконструкции объектов капитального строительства, внедрения новых технологических процессов и осуществления иной деятельности, оказывающей + воздействие на водные биологические ресурсы и среду их обитания + + + + + Документы в сфере охраны окружающей среды и недропользования: Согласование проектной документации в отношении строительства и эксплуатации в пластах горных пород различных видов хранилищ углеводородного сырья и продуктов его + переработки + + + + + Документы в сфере охраны окружающей среды и недропользования: Заключение об отсутствии полезных ископаемых в недрах под участком предстоящей застройки + + + + + Документы в сфере охраны окружающей среды и недропользования: Санитарно-эпидемиологическое заключение о соответствии санитарным правилам проекта зон санитарной охраны источника хозяйственно-питьевого водоснабжения + + + + + Документы в сфере охраны окружающей среды и недропользования: Документ о согласовании сооружения линий связи, электропередач, трубопроводов, дорог и других объектов на мелиорируемых (мелиорированных) землях + + + + + Документы в сфере охраны окружающей среды и недропользования: Документ об утверждении нормативов образования отходов производства и потребления и лимитов на их размещение + + + + + Документы в сфере охраны окружающей среды и недропользования: Согласование плана предупреждения и ликвидации разливов нефти и нефтепродуктов + + + + + Документы в сфере охраны окружающей среды и недропользования: Сведения о размерах водоохранных зон и прибрежных защитных полос, затрагиваемых в ходе строительства, поверхностных водных объектов + + + + + Документы в сфере охраны окружающей среды и недропользования: Сведения о наличии и месторасположении в районе размещения проектируемого объекта зон санитарной охраны источников водоснабжения (поверхностных и подземных) + + + + + Документы в сфере охраны окружающей среды и недропользования: Решение об установлении, изменении или о прекращении существования санитарно-защитной зоны + + + + + Документы в сфере охраны окружающей среды и недропользования: Иные документы + + + + + + + + Документы в области организации транспортной инфраструктуры + + + + + Документы в области организации транспортной инфраструктуры: Сведения о согласовании предварительной категории строящегося объекта транспортной инфраструктуры с компетентным органом в области обеспечения транспортной безопасности + + + + + Документы в области организации транспортной инфраструктуры: Согласование типов и конструкций устройств со специальными проходами, ограждающими опасные участки транспортных магистралей в местах концентрации объектов животного мира и на путях их + миграции + + + + + Документы в области организации транспортной инфраструктуры: Решение о согласовании размещения объекта в границах полос воздушных подходов для аэродромов экспериментальной авиации, аэродромов государственной авиации, аэродромов гражданской + авиации + + + + + Документы в области организации транспортной инфраструктуры: Решение об установлении приаэродромной территории + + + + + Документы в области организации транспортной инфраструктуры: Сведения о зонах с особыми условиями использования территорий объектов инфраструктуры метрополитена + + + + + Документы в области организации транспортной инфраструктуры: Иные документы + + + + + + + + Документы в отношении объектов культурного наследия + + + + + Документы в отношении объектов культурного наследия: Паспорт объекта культурного наследия + + + + + Документы в отношении объектов культурного наследия: Согласование проектных решений раздела по обеспечению сохранности объектов культурного наследия либо проектной документации по реставрации и приспособлению объекта культурного наследия + + + + + Документы в отношении объектов культурного наследия: Иные документы + + + + + + + + Расчеты + + + + + Расчеты конструктивных, технологических и других решений, используемых в проектной документации + + + + + + + + Состав сметной документации + + + + + Состав сметной документации: Пояснительная записка к сметной документации + + + + + Состав сметной документации: Сводка затрат + + + + + Состав сметной документации: Сводный сметный расчет + + + + + Состав сметной документации: Объектный сметный расчет + + + + + Состав сметной документации: Локальный сметный расчет + + + + + Состав сметной документации: Сметные расчеты на отдельные виды затрат + + + + + + + + Обоснование соответствия проектных значений параметров и других проектных характеристик здания или сооружения требованиям безопасности + + + + + Обоснование соответствия проектных значений параметров и других проектных характеристик здания или сооружения требованиям безопасности: Результаты исследований + + + + + Обоснование соответствия проектных значений параметров и других проектных характеристик здания или сооружения требованиям безопасности: Расчеты и (или) испытания, выполненные по сертифицированным или апробированным иным способом методикам + + + + + Обоснование соответствия проектных значений параметров и других проектных характеристик здания или сооружения требованиям безопасности: Моделирование сценариев возникновения опасных природных процессов и явлений и (или) техногенных воздействий, в том числе при неблагоприятном сочетании опасных природных процессов и явлений и (или) техногенных воздействий + + + + + Обоснование соответствия проектных значений параметров и других проектных характеристик здания или сооружения требованиям безопасности: Оценка риска возникновения опасных природных процессов и явлений и (или) техногенных воздействий + + + + + + + + Группа дополнительных документов + + + + + Группа дополнительных документов: Документ, подтверждающий передачу проектной документации и (или) результатов инженерных изысканий застройщику (техническому заказчику) + + + + + Группа дополнительных документов: Справка с описанием изменений, внесенных в проектную документацию и (или) результаты инженерных изысканий + + + + + Группа дополнительных документов: Акт (решение) собственника здания (строения, сооружения), содержащий условия реконструкции, капитального ремонта или сноса объекта капитального строительства или его части + + + + + Группа дополнительных документов: Иной документ + + + + + + + + + + + Классификатор ОКЕИ: + - Международные единицы измерения, включенные в ОКЕИ; + - Национальные единицы измерения, включенные в ОКЕИ; + - Четырехзначные национальные единицы измерения, включенные в ОКЕИ. по состонию на 05.12.2022 + + + + + + Без единицы измерения + - + + + + + Миллиметр + мм + + + + + Сантиметр + см + + + + + Дециметр + дм + + + + + Метр + м + + + + + Километр; тысяча метров + км; 10^3 м + + + + + Мегаметр; миллион метров + Мм; 10^6 м + + + + + Дюйм (25,4 мм) + дюйм + + + + + Фут (0,3048 м) + фут + + + + + Ярд (0,9144 м) + ярд + + + + + Морская миля (1852 м) + миля + + + + + Квадратный миллиметр + мм^2 + + + + + Квадратный сантиметр + см^2 + + + + + Квадратный дециметр + дм^2 + + + + + Квадратный метр + м^2 + + + + + Тысяча квадратных метров + 10^3 м^2 + + + + + Гектар + га + + + + + Квадратный километр + км^2 + + + + + Квадратный дюйм (645,16 мм^2) + дюйм^2 + + + + + Квадратный фут (0,092903 м^2) + фут^2 + + + + + Квадратный ярд (0,8361274 м^2) + ярд^2 + + + + + Ар (100 м^2) + а + + + + + Кубический миллиметр + мм^3 + + + + + Кубический сантиметр; миллилитр + см^3; мл + + + + + Литр; кубический дециметр + л; дм^3 + + + + + Кубический метр + м^3 + + + + + Децилитр + дл + + + + + Гектолитр + гл + + + + + Мегалитр + Мл + + + + + Кубический дюйм (16387,1 мм^3) + дюйм^3 + + + + + Кубический фут (0,02831685 м^3) + фут^3 + + + + + Кубический ярд (0,764555 м^3) + ярд^3 + + + + + Миллион кубических метров + 10^6 м^3 + + + + + Гектограмм + гг + + + + + Миллиграмм + мг + + + + + Метрический карат + кар + + + + + Грамм + г + + + + + Килограмм + кг + + + + + Тонна; метрическая тонна (1000 кг) + т + + + + + Килотонна + 10^3 т + + + + + Сантиграмм + сг + + + + + Брутто-регистровая тонна (2,8316 м^3) + БРТ + + + + + Грузоподъемность в метрических тоннах + т грп + + + + + Центнер (метрический) (100 кг); гектокилограмм; квинтал (метрический); децитонна + ц + + + + + Ватт + Вт + + + + + Киловатт + кВт + + + + + Мегаватт; тысяча киловатт + МВт; 10^3 кВт + + + + + Вольт + В + + + + + Киловольт + кВ + + + + + Киловольт-ампер + кВ.А + + + + + Мегавольт-ампер (тысяча киловольт-ампер) + МВ.А + + + + + Киловар + квар + + + + + Ватт-час + Вт.ч + + + + + Киловатт-час + кВт.ч + + + + + Мегаватт-час; 1000 киловатт-часов + МВт.ч; 10^3 кВт.ч + + + + + Гигаватт-час (миллион киловатт-часов) + ГВт.ч + + + + + Ампер + А + + + + + Ампер-час (3,6 кКл) + А.ч + + + + + Тысяча ампер-часов + 10^3 А.ч + + + + + Кулон + Кл + + + + + Джоуль + Дж + + + + + Килоджоуль + кДж + + + + + Ом + Ом + + + + + Градус Цельсия + °C + + + + + Градус Фаренгейта + °F + + + + + Кандела + кд + + + + + Люкс + лк + + + + + Люмен + лм + + + + + Кельвин + K + + + + + Ньютон + Н + + + + + Герц + Гц + + + + + Килогерц + кГц + + + + + Мегагерц + МГц + + + + + Паскаль + Па + + + + + Сименс + См + + + + + Килопаскаль + кПа + + + + + Мегапаскаль + МПа + + + + + Физическая атмосфера (101325 Па) + атм + + + + + Техническая атмосфера (98066,5 Па) + ат + + + + + Гигабеккерель + ГБк + + + + + Милликюри + мКи + + + + + Кюри + Ки + + + + + Грамм делящихся изотопов + г Д/И + + + + + Миллибар + мб + + + + + Бар + бар + + + + + Гектобар + гб + + + + + Килобар + кб + + + + + Фарад + Ф + + + + + Килограмм на кубический метр + кг/м^3 + + + + + Беккерель + Бк + + + + + Вебер + Вб + + + + + Узел (миля/ч) + уз + + + + + Метр в секунду + м/с + + + + + Оборот в секунду + об/с + + + + + Оборот в минуту + об/мин + + + + + Километр в час + км/ч + + + + + Метр на секунду в квадрате + м/с^2 + + + + + Кулон на килограмм + Кл/кг + + + + + Секунда + с + + + + + Минута + мин + + + + + Час + ч + + + + + Сутки + сут; дн + + + + + Неделя + нед + + + + + Декада + дек + + + + + Месяц + мес + + + + + Квартал + кварт + + + + + Полугодие + полгода + + + + + Год + г; лет + + + + + Десятилетие + деслет + + + + + Килограмм в секунду + кг/с + + + + + Тонна пара в час + т пар/ч + + + + + Кубический метр в секунду + м^3/с + + + + + Кубический метр в час + м^3/ч + + + + + Тысяча кубических метров в сутки + 10^3 м^3/сут + + + + + Бобина + боб + + + + + Лист + л. + + + + + Сто листов + 100 л. + + + + + Тысяча стандартных условных кирпичей + тыс станд. усл. кирп + + + + + Дюжина (12 шт.) + дюжина + + + + + Изделие + изд + + + + + Сто ящиков + 100 ящ. + + + + + Набор + набор + + + + + Пара (2 шт.) + пар + + + + + Два десятка + 20 + + + + + Десять пар + 10 пар + + + + + Дюжина пар + дюжина пар + + + + + Посылка + посыл + + + + + Часть + часть + + + + + Рулон + рул + + + + + Дюжина рулонов + дюжина рул + + + + + Дюжина штук + дюжина шт + + + + + Элемент + элем + + + + + Упаковка + упак + + + + + Дюжина упаковок + дюжина упак + + + + + Сто упаковок + 100 упак + + + + + Штука + шт + + + + + Сто штук + 100 шт + + + + + Тысяча штук + тыс. шт; 1000 шт + + + + + Миллион штук + 10^6 шт + + + + + Миллиард штук + 10^9 шт + + + + + Биллион штук (Европа); триллион штук + 10^12 шт + + + + + Квинтильон штук (Европа) + 10^18 шт + + + + + Крепость спирта по массе + креп. спирта по массе + + + + + Крепость спирта по объему + креп. спирта по объему + + + + + Литр чистого (100%) спирта + л 100% спирта + + + + + Гектолитр чистого (100%) спирта + Гл 100% спирта + + + + + Килограмм пероксида водорода + кг H^^2О^^2 + + + + + Килограмм 90%-го сухого вещества + кг 90% с/в + + + + + Тонна 90%-го сухого вещества + т 90% с/в + + + + + Килограмм оксида калия + кг К^^2О + + + + + Килограмм гидроксида калия + кг КОН + + + + + Килограмм азота + кг N + + + + + Килограмм гидроксида натрия + кг NaOH + + + + + Килограмм пятиокиси фосфора + кг Р^^2О^^5 + + + + + Килограмм урана + кг U + + + + + Погонный метр + пог. м + + + + + Тысяча погонных метров + 10^3 пог. м + + + + + Условный метр + усл. м + + + + + Тысяча условных метров + 10^3 усл. м + + + + + Километр условных труб + км усл. труб + + + + + Тысяча квадратных дециметров + 10^3 дм^2 + + + + + Миллион квадратных дециметров + 10^6 дм^2 + + + + + Миллион квадратных метров + 10^6 м^2 + + + + + Тысяча гектаров + 10^3 га + + + + + Условный квадратный метр + усл. м^2 + + + + + Тысяча условных квадратных метров + 10^3 усл. м^2 + + + + + Миллион условных квадратных метров + 10^6 усл. м^2 + + + + + Квадратный метр общей площади + м^2 общ. пл + + + + + Тысяча квадратных метров общей площади + 10^3 м^2 общ. пл + + + + + Миллион квадратных метров общей площади + 10^6 м^2 общ. пл + + + + + Квадратный метр жилой площади + м^2 жил. пл + + + + + Тысяча квадратных метров жилой площади + 10^3 м^2 жил. пл + + + + + Миллион квадратных метров жилой площади + 10^6 м^2 жил. пл + + + + + Квадратный метр учебно-лабораторных зданий + м^2 уч. лаб. здан + + + + + Тысяча квадратных метров учебно-лабораторных зданий + 10^3 м^2 уч. лаб. здан + + + + + Миллион квадратных метров в двухмиллиметровом исчислении + 10^6 м^2 2 мм исч + + + + + Тысяча кубических метров + 10^3 м^3 + + + + + Миллиард кубических метров + 10^9 м^3 + + + + + Декалитр + дкл + + + + + Тысяча декалитров + 10^3 дкл + + + + + Миллион декалитров + 10^6 дкл + + + + + Плотный кубический метр + плотн. м^3 + + + + + Условный кубический метр + усл. м^3 + + + + + Тысяча условных кубических метров + 10^3 усл. м^3 + + + + + Миллион кубических метров переработки газа + 10^6 м^3 перераб. газа + + + + + Тысяча плотных кубических метров + 10^3 плотн. м^3 + + + + + Тысяча полулитров + 10^3 пол. л + + + + + Миллион полулитров + 10^6 пол. л + + + + + Тысяча литров; 1000 литров + 10^3 л; 1000 л + + + + + Тысяча каратов метрических + 10^3 кар + + + + + Миллион каратов метрических + 10^6 кар + + + + + Тысяча тонн + 10^3 т + + + + + Миллион тонн + 10^6 т + + + + + Тонна условного топлива + т усл. топл + + + + + Тысяча тонн условного топлива + 10^3 т усл. топл + + + + + Миллион тонн условного топлива + 10^6 т усл. топл + + + + + Тысяча тонн единовременного хранения + 10^3 т единовр. хран + + + + + Тысяча тонн переработки + 10^3 т перераб + + + + + Условная тонна + усл. т + + + + + Тысяча центнеров + 10^3 ц + + + + + Вольт-ампер + В.А + + + + + Метр в час + м/ч + + + + + Килокалория + ккал + + + + + Гигакалория + Гкал + + + + + Тысяча гигакалорий + 10^3 Гкал + + + + + Миллион гигакалорий + 10^6 Гкал + + + + + Калория в час + кал/ч + + + + + Килокалория в час + ккал/ч + + + + + Гигакалория в час + Гкал/ч + + + + + Тысяча гигакалорий в час + 10^3 Гкал/ч + + + + + Миллион ампер-часов + 10^6 А.ч + + + + + Миллион киловольт-ампер + 10^6 кВ.А + + + + + Киловольт-ампер реактивный + кВ.А Р + + + + + Миллиард киловатт-часов + 10^9 кВт.ч + + + + + Тысяча киловольт-ампер реактивных + 10^3 кВ.А Р + + + + + Лошадиная сила + л. с + + + + + Тысяча лошадиных сил + 10^3 л. с + + + + + Миллион лошадиных сил + 10^6 л. с + + + + + Бит + бит + + + + + Байт + байт + + + + + Килобайт + кбайт + + + + + Мегабайт + Мбайт + + + + + Бод + бод + + + + + Генри + Гн + + + + + Тесла + Тл + + + + + Килограмм на квадратный сантиметр + кг/см^2 + + + + + Миллиметр водяного столба + мм вод. ст + + + + + Миллиметр ртутного столба + мм рт. ст + + + + + Сантиметр водяного столба + см вод. ст + + + + + Микросекунда + мкс + + + + + Миллисекунда + млс + + + + + Рубль + руб + + + + + Тысяча рублей + 10^3 руб + + + + + Миллион рублей + 10^6 руб + + + + + Миллиард рублей + 10^9 руб + + + + + Триллион рублей + 10^12 руб + + + + + Квадрильон рублей + 10^15 руб + + + + + Пассажиро-километр + пасс.км + + + + + Пассажирское место (пассажирских мест) + пасс. мест + + + + + Тысяча пассажиро-километров + 10^3 пасс.км + + + + + Миллион пассажиро-километров + 10^6 пасс. км + + + + + Пассажиропоток + пасс.поток + + + + + Тонно-километр + т.км + + + + + Тысяча тонно-километров + 10^3 т.км + + + + + Миллион тонно-километров + 10^6 т. км + + + + + Тысяча наборов + 10^3 набор + + + + + Грамм на киловатт-час + г/кВт.ч + + + + + Килограмм на гигакалорию + кг/Гкал + + + + + Тонно-номер + т.ном + + + + + Автотонна + авто т + + + + + Тонна тяги + т.тяги + + + + + Дедвейт-тонна + дедвейт.т + + + + + Тонно-танид + т.танид + + + + + Человек на квадратный метр + чел/м^2 + + + + + Человек на квадратный километр + чел/км^2 + + + + + Тонна в час + т/ч + + + + + Тонна в сутки + т/сут + + + + + Тонна в смену + т/смен + + + + + Тысяча тонн в сезон + 10^3 т/сез + + + + + Тысяча тонн в год + 10^3 т/год + + + + + Человеко-час + чел.ч + + + + + Человеко-день + чел.дн + + + + + Тысяча человеко-дней + 10^3 чел.дн + + + + + Тысяча человеко-часов + 10^3 чел.ч + + + + + Тысяча условных банок в смену + 10^3 усл. банк/ смен + + + + + Миллион единиц в год + 10^6 ед/год + + + + + Посещение в смену + посещ/смен + + + + + Тысяча посещений в смену + 10^3 посещ/смен + + + + + Пара в смену + пар/смен + + + + + Тысяча пар в смену + 10^3 пар/смен + + + + + Миллион тонн в год + 10^6 т/год + + + + + Тонна переработки в сутки + т перераб/сут + + + + + Тысяча тонн переработки в сутки + 10^3 т перераб/ сут + + + + + Центнер переработки в сутки + ц перераб/сут + + + + + Тысяча центнеров переработки в сутки + 10^3 ц перераб/ сут + + + + + Тысяча голов в год + 10^3 гол/год + + + + + Миллион голов в год + 10^6 гол/год + + + + + Тысяча птицемест + 10^3 птицемест + + + + + Тысяча кур-несушек + 10^3 кур. несуш + + + + + Бит в секунду + бит/с + + + + + Килобит в секунду + кбит/с + + + + + Тысяча тонн пара в час + 10^3 т пар/ч + + + + + Тысяча прядильных веретен + 10^3 пряд.верет + + + + + Тысяча прядильных мест + 10^3 пряд.мест + + + + + Доза + доз + + + + + Тысяча доз + 10^3 доз + + + + + Единица + ед + + + + + Тысяча единиц + 10^3 ед + + + + + Миллион единиц + 10^6 ед + + + + + Канал + канал + + + + + Тысяча комплектов + 10^3 компл + + + + + Место + мест + + + + + Тысяча мест + 10^3 мест + + + + + Тысяча номеров + 10^3 ном + + + + + Тысяча гектаров порций + 10^3 га порц + + + + + Тысяча пачек + 10^3 пач + + + + + Процент + % + + + + + Промилле (0,1 процента) + + + + + + Тысяча рулонов + 10^3 рул + + + + + Тысяча станов + 10^3 стан + + + + + Станция + станц + + + + + Тысяча тюбиков + 10^3 тюбик + + + + + Тысяча условных тубов + 10^3 усл.туб + + + + + Миллион упаковок + 10^6 упак + + + + + Тысяча упаковок + 10^3 упак + + + + + Человек + чел + + + + + Тысяча человек + 10^3 чел + + + + + Миллион человек + 10^6 чел + + + + + Миллион экземпляров + 10^6 экз + + + + + Ячейка + яч + + + + + Ящик + ящ + + + + + Голова + гол + + + + + Тысяча пар + 10^3 пар + + + + + Миллион пар + 10^6 пар + + + + + Комплект + компл + + + + + Секция + секц + + + + + Бутылка + бут + + + + + Тысяча бутылок + 10^3 бут + + + + + Ампула + ампул + + + + + Тысяча ампул + 10^3 ампул + + + + + Флакон + флак + + + + + Тысяча флаконов + 10^3 флак + + + + + Тысяча тубов + 10^3 туб + + + + + Тысяча коробок + 10^3 кор + + + + + Условная единица + усл. ед + + + + + Тысяча условных единиц + 10^3 усл. ед + + + + + Миллион условных единиц + 10^6 усл. ед + + + + + Условная штука + усл. шт + + + + + Тысяча условных штук + 10^3 усл. шт + + + + + Условная банка + усл. банк + + + + + Тысяча условных банок + 10^3 усл. банк + + + + + Миллион условных банок + 10^6 усл. банк + + + + + Условный кусок + усл. кус + + + + + Тысяча условных кусков + 10^3 усл. кус + + + + + Миллион условных кусков + 10^6 усл. кус + + + + + Условный ящик + усл. ящ + + + + + Тысяча условных ящиков + 10^3 усл. ящ + + + + + Условная катушка + усл. кат + + + + + Тысяча условных катушек + 10^3 усл. кат + + + + + Условная плитка + усл. плит + + + + + Тысяча условных плиток + 10^3 усл. плит + + + + + Условный кирпич + усл. кирп + + + + + Тысяча условных кирпичей + 10^3 усл. кирп + + + + + Миллион условных кирпичей + 10^6 усл. кирп + + + + + Семья + семей + + + + + Тысяча семей + 10^3 семей + + + + + Миллион семей + 10^6 семей + + + + + Домохозяйство + домхоз + + + + + Тысяча домохозяйств + 10^3 домхоз + + + + + Миллион домохозяйств + 10^6 домхоз + + + + + Ученическое место + учен. мест + + + + + Тысяча ученических мест + 10^3 учен. мест + + + + + Рабочее место + раб. мест + + + + + Тысяча рабочих мест + 10^3 раб. мест + + + + + Посадочное место + посад. мест + + + + + Тысяча посадочных мест + 10^3 посад. мест + + + + + Номер + ном + + + + + Квартира + кварт + + + + + Тысяча квартир + 10^3 кварт + + + + + Койка + коек + + + + + Тысяча коек + 10^3 коек + + + + + Том книжного фонда + том книжн. фонд + + + + + Тысяча томов книжного фонда + 10^3 том. книжн. фонд + + + + + Условный ремонт + усл. рем + + + + + Условный ремонт в год + усл. рем/год + + + + + Смена + смен + + + + + Лист авторский + л. авт + + + + + Лист печатный + л. печ + + + + + Лист учетно-издательский + л. уч.-изд + + + + + Знак + знак + + + + + Слово + слово + + + + + Символ + символ + + + + + Условная труба + усл. труб + + + + + Тысяча пластин + 10^3 пласт + + + + + Миллион доз + 10^6 доз + + + + + Миллион листов-оттисков + 10^6 лист.оттиск + + + + + Вагоно(машино)-день + ваг (маш).дн + + + + + Тысяча вагоно-(машино)-часов + 10^3 ваг (маш).ч + + + + + Тысяча вагоно-(машино)-километров + 10^3 ваг (маш).км + + + + + Тысяча место-километров + 10 ^3мест.км + + + + + Вагоно-сутки + ваг.сут + + + + + Тысяча поездо-часов + 10^3 поезд.ч + + + + + Тысяча поездо-километров + 10^3 поезд.км + + + + + Тысяча тонно-миль + 10^3 т.миль + + + + + Тысяча пассажиро-миль + 10^3 пасс.миль + + + + + Автомобиле-день + автомоб.дн + + + + + Тысяча автомобиле-тонно-дней + 10^3 автомоб.т.дн + + + + + Тысяча автомобиле-часов + 10^3 автомоб.ч + + + + + Тысяча автомобиле-место-дней + 10^3 автомоб.мест. дн + + + + + Приведенный час + привед.ч + + + + + Самолето-километр + самолет.км + + + + + Тысяча километров + 10^3 км + + + + + Тысяча тоннаже-рейсов + 10^3 тоннаж. рейс + + + + + Миллион тонно-миль + 10^6 т. миль + + + + + Миллион пассажиро-миль + 10^6 пасс. миль + + + + + Миллион тоннаже-миль + 10^6 тоннаж. миль + + + + + Миллион пассажиро-место-миль + 10^6 пасс. мест. миль + + + + + Кормо-день + корм. дн + + + + + Центнер кормовых единиц + ц корм ед + + + + + Тысяча автомобиле-километров + 10^3 автомоб. км + + + + + Тысяча тоннаже-сут + 10^3 тоннаж. сут + + + + + Суго-сутки + суго. сут. + + + + + Штук в 20-футовом эквиваленте (ДФЭ) + штук в 20-футовом эквиваленте + + + + + Канало-километр + канал. км + + + + + Канало-концы + канал. конц + + + + + Тысяча экземпляров + 10^3 экз + + + + + Тысяча долларов + 10^3 доллар + + + + + Тысяча тонн кормовых единиц + 10^3 корм ед + + + + + Миллион тонн кормовых единиц + 10^6 корм ед + + + + + Судо-сутки + суд.сут + + + + + Гектометр + + + + + + Миля (уставная) (1609,344 м) + + + + + + Акр (4840 квадратных ярдов) + + + + + + Квадратная миля + + + + + + Жидкостная унция СК (28,413 см3) + + + + + + Джилл СК (0,142065 дм3) + + + + + + Пинта СК (0,568262 дм3) + + + + + + Кварта СК (1,136523 дм3) + + + + + + Галлон СК (4,546092 дм3) + + + + + + Бушель СК (36,36874 дм3) + + + + + + Жидкостная унция США (29,5735 см3) + + + + + + Джилл США (11,8294 см3) + + + + + + Жидкостная пинта США (0,473176 дм3) + + + + + + Жидкостная кварта США (0,946353 дм3) + + + + + + Жидкостный галлон США (3,78541 дм3) + + + + + + Баррель (нефтяной) США (158,987 дм3) + + + + + + Сухая пинта США (0,55061 дм3) + + + + + + Сухая кварта США (1,101221 дм3) + + + + + + Сухой галлон США (4,404884 дм3) + + + + + + Бушель США (35,2391 дм3) + + + + + + Сухой баррель США (115,627 дм3) + + + + + + Стандарт + + + + + + Корд (3,63 м3) + + + + + + Тысячи бордфутов (2,36 м3) + + + + + + Нетто-регистровая тонна + + + + + + Обмерная (фрахтовая) тонна + + + + + + Водоизмещение + + + + + + Фунт СК, США (0,45359237 кг) + + + + + + Унция СК, США (28,349523 г) + + + + + + Драхма СК (1,771745 г) + + + + + + Гран СК, США (64,798910 мг) + + + + + + Стоун СК (6,350293 кг) + + + + + + Квартер СК (12,700586 кг) + + + + + + Центал СК (45,359237 кг) + + + + + + Центнер США (45,3592 кг) + + + + + + Длинный центнер СК (50,802345 кг) + + + + + + Короткая тонна СК, США (0,90718474 т) [2*] + + + + + + Длинная тонна СК, США (1,0160469 т) [2*] + + + + + + Скрупул СК, США (1,295982 г) + + + + + + Пеннивейт СК, США (1,555174 г) + + + + + + Драхма СК (3,887935 г) + + + + + + Драхма США (3,887935 г) + + + + + + Унция СК, США (31,10348 г); тройская унция + + + + + + Тройский фунт США (373,242 г) + + + + + + Эффективная мощность (245,7 ватт) + + + + + + Британская тепловая единица (1,055 кДж) + + + + + + Гросс (144 шт.) + + + + + + Большой гросс (12 гроссов) + + + + + + Короткий стандарт (7200 единиц) + + + + + + Галлон спирта установленной крепости + + + + + + Международная единица + + + + + + Сто международных единиц + + + + + + Мегабит в секунду + Мбит/с + + + + + Гигабит в секунду + Гбит/с + + + + + Байт в секунду + Байт/с + + + + + Гигабайт в секунду + Гбайт/с + + + + + Килобайт в секунду + кбайт/с + + + + + Мегабайт в секунду + Мбайт/с + + + + + Эрланг + Эрл + + + + + Грей + Гр + + + + + Децибел + Дб + + + + + Абонент + Абонент + + + + + Миллион гектаров + 10^6 га + + + + + Миллиард гектаров + 10^9 га + + + + + Миллион голов + 10^6 гол + + + + + Балл + балл + + + + + Миллион долларов + 10^6 доллар + + + + + Центнеров с гектара + ц/га + + + + + Тысяча голов + 10^3 гол + + + + + Тысяча краско-оттисков + 10^3 краск. оттиск + + + + + Миллион краско-оттисков + 10^6 краск. оттиск + + + + + Миллион условных плиток + 10^6 усл. плит + + + + + Человек в час + чел/ч + + + + + Пассажиров в час + пасс/ч + + + + + Пассажиро-миля + пасс. миля + + + + + Гигабайт + Гбайт + + + + + Терабайт + Тбайт + + + + + Петабайт + Пбайт + + + + + Эксабайт + Эбайт + + + + + Зеттабайт + Збайт + + + + + Йоттабайт + Йбайт + + + + + Рубль тонна + руб. тонна + + + + + Дето-день + дет. дн + + + + + Человек в год + чел/год + + + + + Посещение + посещ + + + + + Тысяча гнезд + 10^3 гнезд + + + + + Единиц в год + ед/год + + + + + Вызов + вызов + + + + + Штамм + штамм + + + + + Особь + ос + + + + + Коробка + кор + + + + + Койко-день + койк. дн + + + + + Пациенто-день + пациент. дн + + + + + Запись + запись + + + + + Документ + докум + + + + + Лист-оттиск + лист. оттиск + + + + + Вагоно (машино)-час + ваг (маш) ч + + + + + Летный час + летн. ч + + + + + Миллиард долларов + 10^9 доллар + + + + + Доллар за тонну + доллар за тонну + + + + + Посевная единица + пос.ед + + + + + Тысяча метров кубических в час + 103 м^3/ч + + + + + Микрограмм + мкг + + + + + Килобеккерель + кБк + + + + + Мегабеккерель + МБк + + + + + Моль + моль + + + + + Международная единица биологической активности + МЕ + + + + + Тысяча международных единиц биологической активности + тыс. МЕ + + + + + Миллион международных единиц биологической активности + млн. МЕ + + + + + Международная единица биологической активности на грамм + МЕ/г + + + + + Тысяча международных единиц биологической активности на грамм + тыс. МЕ/г + + + + + Миллион международных единиц биологической активности на грамм + млн. МЕ/г + + + + + Международная единица биологической активности на миллилитр + МЕ/мл + + + + + Тысяча международных единиц биологической активности на миллилитр + тыс. МЕ/мл + + + + + Миллион международных единиц биологической активности на миллилитр + млн. МЕ/мл + + + + + Единица действия биологической активности + ЕД + + + + + Единица биологической активности на грамм + ЕД/г + + + + + Тысяча единиц действия биологической активности на грамм + тыс. ЕД/г + + + + + Единица действия биологической активности на микролитр + ЕД/мкл + + + + + Единица действия биологической активности на миллилитр + ЕД/мл + + + + + Тысяча единиц действия биологической активности на миллилитр + тыс. ЕД/мл + + + + + Миллион единиц действия биологической активности на миллилитр + млн. ЕД/мл + + + + + Единица действия биологической активности в сутки + ЕД/сут + + + + + Антитоксическая единица + АЕ + + + + + Тысяча антитоксических единиц + тыс. АЕ + + + + + Антитрипсиновая единица + АТрЕ + + + + + Тысяча антитрипсиновых единиц + тыс. АТрЕ + + + + + Индекс Реактивности + ИР + + + + + Индекс Реактивности на миллилитр + ИР/мл + + + + + Килобеккерель на миллилитр + кБк/мл + + + + + Мегабеккерель на миллилитр + МБк/мл + + + + + Мегабеккерель на метр квадратный + МБк/м2 + + + + + + Калликреиновая ингибирующая единица на миллилитр + КИЕ/мл + + + + + Тысяча калликреиновых ингибирующих единиц на миллилитр + тыс. КИЕ/МЛ + + + + + Миллион колониеобразующих единиц + млн. КОЕ + + + + + Миллион колониеобразующих единиц на пакет + млн. КОЕ/пакет + + + + + Миллиард колониеобразующих единиц + млрд. КОЕ + + + + + Протеолитическая единица + ПЕ + + + + + Микрограмм на миллилитр + Мкг/мл + + + + + Микрограмм в сутки + Мкг/сут + + + + + Микрограмм в час + Мкг/ч + + + + + Микрограмм на дозу + Мкг/доза + + + + + Миллимоль на миллилитр + моль/мл + + + + + Миллимоль на литр + ммоль/л + + + + + Пачка + пач + + + + + Километр в сутки + км/сут + + + + + Микрогрей + мкГр + + + + + Миллигрей + мГр + + + + + Килогрей + кГр + + + + + Гигагерц + ГГц + + + + + Терагерц + ТГц + + + + + Наносекунда + нс + + + + + Зиверт + Зв + + + + + Микрозиверт + мкЗв + + + + + Миллизиверт + мЗв + + + + + Фемтосекунда + фс + + + + + Пикосекунда + пс + + + + + Грей в секунду + Гр/с + + + + + Грей в минуту + Гр/мин + + + + + Грей в час + Гр/ч + + + + + Микрогрей в секунду + мкГр/с + + + + + Микрогрей в час + мкГр/ч + + + + + Миллигрей в час + мГр/ч + + + + + Зиверт в час + Зв/ч + + + + + Микрозиверт в секунду + мкЗв/с + + + + + Микрозиверт в час + мкЗв/ч + + + + + Миллизиверт в час + мЗв/ч + + + + + Градус (плоского угла) + + + + + + Минута (плоского угла) + + + + + + Секунда (плоского угла) + + + + + + Пар грузовых поездов в сутки + пар груз поезд/сут + + + + + Базисный пункт + б.п. + + + + + Грамм условного топлива на киловатт-час + г у.т./кВт•ч + + + + + Килограмм условного топлива на гигакалорию + кг у.т./Гкал + + + + + Миллиард евро + 10^9 евро + + + + + Миллион евро + 10^6 евро + + + + + Человеко-зиверт + чел.-Зв + + + + + Беккерель на метр кубический + Бк/м^3 + + + + + + + + + + Адрес + + + + + Страна + + + + + Код субъекта Российской Федерации + + + + + Район + + + + + Город + + + + + Населенный пункт + + + + + Улица + + + + + Номер здания/сооружения + + + + + Номер помещения + + + + + Неформализованное описание адреса + + + + + + + Проверка, что адрес не может состоять только из кода субъекта Российской Федерации + + + + + + + Тип: Почтовый адрес + + + + + Страна + + + + + Код субъекта Российской Федерации + + + + + Почтовый индекс + + + + + + + + + + + Район + + + + + Город + + + + + Населенный пункт + + + + + Улица + + + + + Номер здания/сооружения + + + + + Номер помещения + + + + + Неформализованное описание адреса + + + + + + Проверка, что адрес не может состоять только из кода субъекта Российской Федерации и почтового индекса + + + + + + + + + Объект расположен за пределами территории Российской Федерации, во внутренних морских водах, территориальном море и прилежащей зоне Российской Федерации, в исключительной экономической зоне Российской Федерации, в границах российской части (российском секторе) дна Каспийского моря и континентального шельфа Российской Федерации + + + + + Республика Адыгея (Адыгея) + + + + + Республика Башкортостан + + + + + Республика Бурятия + + + + + Республика Алтай + + + + + Республика Дагестан + + + + + Республика Ингушетия + + + + + Кабардино-Балкарская Республика + + + + + Республика Калмыкия + + + + + Карачаево-Черкесская Республика + + + + + Республика Карелия + + + + + Республика Коми + + + + + Республика Марий Эл + + + + + Республика Мордовия + + + + + Республика Саха (Якутия) + + + + + Республика Северная Осетия-Алания + + + + + Республика Татарстан (Татарстан) + + + + + Республика Тыва + + + + + Удмуртская Республика + + + + + Республика Хакасия + + + + + Чеченская Республика + + + + + Чувашская Республика-Чувашия + + + + + Алтайский край + + + + + Краснодарский край + + + + + Красноярский край + + + + + Приморский край + + + + + Ставропольский край + + + + + Хабаровский край + + + + + Амурская область + + + + + Архангельская область + + + + + Астраханская область + + + + + Белгородская область + + + + + Брянская область + + + + + Владимирская область + + + + + Волгоградская область + + + + + Вологодская область + + + + + Воронежская область + + + + + Ивановская область + + + + + Иркутская область + + + + + Калининградская область + + + + + Калужская область + + + + + Камчатский край + + + + + Кемеровская область - Кузбасс + + + + + Кировская область + + + + + Костромская область + + + + + Курганская область + + + + + Курская область + + + + + Ленинградская область + + + + + Липецкая область + + + + + Магаданская область + + + + + Московская область + + + + + Мурманская область + + + + + Нижегородская область + + + + + Новгородская область + + + + + Новосибирская область + + + + + Омская область + + + + + Оренбургская область + + + + + Орловская область + + + + + Пензенская область + + + + + Пермский край + + + + + Псковская область + + + + + Ростовская область + + + + + Рязанская область + + + + + Самарская область + + + + + Саратовская область + + + + + Сахалинская область + + + + + Свердловская область + + + + + Смоленская область + + + + + Тамбовская область + + + + + Тверская область + + + + + Томская область + + + + + Тульская область + + + + + Тюменская область + + + + + Ульяновская область + + + + + Челябинская область + + + + + Забайкальский край + + + + + Ярославская область + + + + + Москва + + + + + Санкт-Петербург + + + + + Еврейская автономная область + + + + + Донецкая Народная Республика + + + + + Луганская Народная Республика + + + + + Ненецкий автономный округ + + + + + Херсонская область + + + + + Запорожская область + + + + + Ханты-Мансийский автономный округ - Югра + + + + + Чукотский автономный округ + + + + + Ямало-Ненецкий автономный округ + + + + + Республика Крым + + + + + Севастополь + + + + + + + + + + + + + Подзаголовок + + + + + Текст + + + + + + + Именованный элемент + + + + + Идентификатор элемента + + + + + + + + + Изображение + + + + + Таблица + + + + + + + Заголовок + + + + + + + Таблица + + + + + Заголовок + + + + + + Строка + + + + + + + + Содержимое + + + + + + Строка + + + + + + + + Подвал + + + + + + Строка + + + + + + + + + Идентификатор таблицы + + + + + + + Строка таблицы + + + + + + + Идентификатор строки + + + + + Выравнивание сведений в строке + + + + + + + Ячейка таблицы + + + + + + Объединение столбцов + + + + + Объединение строк + + + + + Выравнивание сведений в ячейке + + + + + Именованная ячейка + + + + + Идентификатор ячейки + + + + + + + + + Варианты выравнивания текста + + + + + + + + + + + + + Изображение BASE64 + + + + + Комментарии + + + + + + Тип изображения + + + + + Именованное изображение + + + + + Идентификатор изображения + + + + + + + Типы изображений + + + + + + + + + + + + Тип: Идентификатор ячейки + + + + + + + + + + + Тип: Непустая текстовая строка + + + + + + + + + Тип: Непустая текстовая строка (максимальной длиной 100 символов) + + + + + + + + + + + Тип: Непустая текстовая строка (максимальной длиной 200 символов) + + + + + + + + + + + Тип: Непустая текстовая строка (максимальной длиной 1000 символов) + + + + + + + + + + + Тип: Непустая текстовая строка (максимальной длиной 2000 символов) + + + + + + + + + diff --git a/tests/test_schema_parser_real_file.py b/tests/test_schema_parser_real_file.py new file mode 100644 index 0000000..afc01b8 --- /dev/null +++ b/tests/test_schema_parser_real_file.py @@ -0,0 +1,16 @@ +import os +import pytest +from pathlib import Path +from app.services.schema_parser import extract_metadata + +# Путь к реальному файлу-фикстуре +FIX = Path("tests/fixtures/DesignAssignment-01-00.xsd") + +@pytest.mark.skipif(not FIX.exists(), reason="Нет реального файла XSD для интеграционного теста") +def test_extract_metadata_real_design_assignment(): + content = FIX.read_bytes() + info = extract_metadata(content, filename=FIX.name) + # Проверяем реальные ожидания + assert info.get("version") == "01.00" + assert info.get("name") # имя корневого элемента должно быть + # description и namespace могут отсутствовать — не проверяем жёстко diff --git a/tests/test_schemas_upload.py b/tests/test_schemas_upload.py index 00b53d8..82e00b1 100644 --- a/tests/test_schemas_upload.py +++ b/tests/test_schemas_upload.py @@ -7,6 +7,21 @@ def fake_save(prefix, filename, content): return f"{prefix}/fake_{filename}" monkeypatch.setattr("app.api.routes.schemas.save_file_minio", fake_save) + # мок реестра типов — чтобы имя/описание шли из справочника + from app.services import schema_classifier + monkeypatch.setattr( + schema_classifier, + "get_registry", + lambda: [ + schema_classifier.SchemaTypeRule( + code="design_assignment", + title="Задание на проектирование", + description="Описание из справочника", + filename_pattern=r"(?i)DesignAssignment-[0-9]{2}-[0-9]{2}\.xsd", + ) + ], + ) + xsd = b''' Test Schema @@ -22,7 +37,8 @@ def fake_save(prefix, filename, content): items = db_session.query(Schema).order_by(Schema.id.desc()).all() assert len(items) >= 1 s = items[0] - assert s.name == "DesignAssignment" + # имя и описание — из справочника типов + assert s.name == "Задание на проектирование" assert s.version == "01.03" - assert "Test Schema" in (s.description or "") + assert "Описание из справочника" in (s.description or "") assert s.file_path.startswith("schemas/fake_") From 6ec8958106b2350ffd318eab75f2d063d3ce9d67 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Fri, 22 Aug 2025 18:22:26 +0300 Subject: [PATCH 13/20] =?UTF-8?q?A1:=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=BA=D0=B0=20=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BE?= =?UTF-8?q?=D1=87=D0=BD=D0=B8=D0=BA=D0=B0=20=D1=82=D0=B8=D0=BF=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B2=20=D0=91=D0=94,=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=BD=D0=B0=D1=8F=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81?= =?UTF-8?q?=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B8=20?= =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлена таблица schema_types (Alembic 0003), связь с schemas (FK type_id). - Реализован DB-only классификатор (regex + устойчивый фолбэк по префиксу). - UI: добавлен CRUD для типов схем (справочник) с формой и таблицей. - При загрузке XSD схема теперь получает type_id, название и описание из справочника. - Удалена зависимость от YAML — все правила типов ведём в БД. - Тесты: * фикстура seed_schema_types наполняет базу базовыми типами; * CRUD и загрузка схем проверяются на корректную привязку к типу; * исправлена изоляция транзакций (nested SAVEPOINT). - Все тесты зелёные, UI ручной загрузки корректно подставляет тип/описание. --- app/api/routes/schema_types.py | 80 +++++++++++++++++++++ app/api/routes/schemas.py | 25 ++++--- app/main.py | 2 + app/models_sqlalchemy.py | 24 ++++++- app/services/schema_classifier.py | 91 +++++++++++++----------- app/web/templates.py | 6 ++ migrations/versions/0003_schema_types.py | 41 +++++++++++ templates/schema_types/form.html | 35 +++++++++ templates/schema_types/list.html | 38 ++++++++++ tests/conftest.py | 49 +++++++++++-- tests/test_schema_types_crud.py | 48 +++++++++++++ tests/test_schemas_upload.py | 34 +++------ 12 files changed, 387 insertions(+), 86 deletions(-) create mode 100644 app/api/routes/schema_types.py create mode 100644 app/web/templates.py create mode 100644 migrations/versions/0003_schema_types.py create mode 100644 templates/schema_types/form.html create mode 100644 templates/schema_types/list.html create mode 100644 tests/test_schema_types_crud.py diff --git a/app/api/routes/schema_types.py b/app/api/routes/schema_types.py new file mode 100644 index 0000000..6386a7e --- /dev/null +++ b/app/api/routes/schema_types.py @@ -0,0 +1,80 @@ +from datetime import datetime +from fastapi import APIRouter, Depends, HTTPException, Request, Form +from fastapi.responses import HTMLResponse, RedirectResponse +from fastapi.templating import Jinja2Templates +from sqlalchemy.orm import Session + +from app.db import get_db +from app.models_sqlalchemy import SchemaType + +router = APIRouter(prefix="/schema-types", tags=["schema-types"]) +from app.web.templates import templates + +@router.get("/", response_class=HTMLResponse) +def list_types(request: Request, db: Session = Depends(get_db)): + items = db.query(SchemaType).order_by(SchemaType.id.asc()).all() + flash = request.query_params.get("msg") + return templates.TemplateResponse("schema_types/list.html", {"request": request, "items": items, "flash": flash}) + +@router.get("/new", response_class=HTMLResponse) +def new_form(request: Request): + return templates.TemplateResponse("schema_types/form.html", {"request": request, "item": None}) + +@router.post("/new") +def create_type( + code: str = Form(...), + title: str = Form(...), + description: str = Form(""), + filename_pattern: str = Form(""), + db: Session = Depends(get_db), +): + if db.query(SchemaType).filter_by(code=code).first(): + raise HTTPException(status_code=400, detail="Тип с таким code уже существует") + now = datetime.utcnow() + st = SchemaType( + code=code.strip(), + title=title.strip(), + description=description.strip() or None, + filename_pattern=filename_pattern.strip() or None, + created_at=now, + updated_at=now, + ) + db.add(st) + db.commit() + return RedirectResponse("/schema-types?msg=Тип%20создан", status_code=303) + +@router.get("/{type_id}", response_class=HTMLResponse) +def edit_form(type_id: int, request: Request, db: Session = Depends(get_db)): + st = db.get(SchemaType, type_id) + if not st: + raise HTTPException(status_code=404, detail="Тип не найден") + return templates.TemplateResponse("schema_types/form.html", {"request": request, "item": st}) + +@router.post("/{type_id}/save") +def update_type( + type_id: int, + code: str = Form(...), + title: str = Form(...), + description: str = Form(""), + filename_pattern: str = Form(""), + db: Session = Depends(get_db), +): + st = db.get(SchemaType, type_id) + if not st: + raise HTTPException(status_code=404, detail="Тип не найден") + st.code = code.strip() + st.title = title.strip() + st.description = description.strip() or None + st.filename_pattern = filename_pattern.strip() or None + st.updated_at = datetime.utcnow() + db.commit() + return RedirectResponse("/schema-types?msg=Тип%20обновлён", status_code=303) + +@router.post("/{type_id}/delete") +def delete_type(type_id: int, db: Session = Depends(get_db)): + st = db.get(SchemaType, type_id) + if not st: + raise HTTPException(status_code=404, detail="Тип не найден") + db.delete(st) + db.commit() + return RedirectResponse("/schema-types?msg=Тип%20удалён", status_code=303) diff --git a/app/api/routes/schemas.py b/app/api/routes/schemas.py index 577b365..ebb8f55 100644 --- a/app/api/routes/schemas.py +++ b/app/api/routes/schemas.py @@ -14,13 +14,13 @@ from sqlalchemy.orm import Session from app.db import get_db -from app.models_sqlalchemy import Schema -from app.services import schema_parser +from app.models_sqlalchemy import Schema, SchemaType +from app.services import schema_parser, schema_classifier from app.storage import save_file_minio, delete_file_minio router = APIRouter(prefix="/schemas", tags=["schemas"]) -templates = Jinja2Templates(directory="templates") +from app.web.templates import templates # делаем доступной функцию now() для шаблонов templates.env.globals["now"] = datetime.utcnow @@ -64,17 +64,19 @@ async def upload_schema( # парсим метаданные из XSD info = schema_parser.extract_metadata(content, filename=file.filename) - - # классифицируем по реестру типов - from app.services import schema_classifier - rule = schema_classifier.classify(file.filename, content) + matched = schema_classifier.classify(file.filename, content, db=db) display_name = info.get("name") or file.filename description = info.get("description") - if rule: - # приоритет имени/описания — из справочника типов - display_name = rule.title or display_name - description = rule.description or description + type_id = None + + if matched: + st = db.query(SchemaType).filter(SchemaType.code == matched.code).first() + if st: + type_id = st.id + display_name = st.title or display_name + if st.description: + description = st.description schema = Schema( name=display_name, @@ -83,6 +85,7 @@ async def upload_schema( description=description, file_path=key, created_at=datetime.utcnow(), + type_id=type_id, ) db.add(schema) db.commit() diff --git a/app/main.py b/app/main.py index 61e11ef..8fcc9ad 100644 --- a/app/main.py +++ b/app/main.py @@ -1,6 +1,7 @@ from fastapi import FastAPI from app.api.routes.health import router as health_router from app.api.routes.schemas import router as schemas_router +from app.api.routes.schema_types import router as schema_types_router from app.api.routes.documents import router as documents_router from app.api.routes.files import router as files_router from app.api.routes.rules import router as rules_router @@ -10,6 +11,7 @@ app.include_router(health_router, tags=["system"]) app.include_router(schemas_router, tags=["schemas"]) +app.include_router(schema_types_router, tags=["schema-types"]) app.include_router(documents_router, tags=["documents"]) app.include_router(files_router, tags=["files"]) app.include_router(rules_router, tags=["rules"]) diff --git a/app/models_sqlalchemy.py b/app/models_sqlalchemy.py index 71ba5fb..6e3e1ec 100644 --- a/app/models_sqlalchemy.py +++ b/app/models_sqlalchemy.py @@ -2,11 +2,25 @@ from datetime import datetime from typing import Optional -from sqlalchemy import String, Integer, JSON, DateTime -from sqlalchemy.orm import Mapped, mapped_column +from sqlalchemy import String, Integer, JSON, DateTime, ForeignKey, UniqueConstraint +from sqlalchemy.orm import Mapped, mapped_column, relationship from app.db import Base +class SchemaType(Base): + __tablename__ = "schema_types" + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) + code: Mapped[str] = mapped_column(String(64), unique=True, index=True) + title: Mapped[str] = mapped_column(String(255)) + description: Mapped[Optional[str]] = mapped_column(String, nullable=True) + filename_pattern: Mapped[Optional[str]] = mapped_column(String, nullable=True) + created_at: Mapped[datetime] = mapped_column(DateTime, nullable=False, default=datetime.utcnow) + updated_at: Mapped[datetime] = mapped_column(DateTime, nullable=False, default=datetime.utcnow) + + __table_args__ = ( + UniqueConstraint("code", name="uq_schema_types_code"), + ) + class DocumentRow(Base): __tablename__ = "documents" @@ -48,4 +62,8 @@ class Schema(Base): namespace: Mapped[Optional[str]] = mapped_column(String, nullable=True) description: Mapped[Optional[str]] = mapped_column(String, nullable=True) file_path: Mapped[str] = mapped_column(String, nullable=False) - created_at: Mapped[datetime] = mapped_column(DateTime, nullable=False) \ No newline at end of file + created_at: Mapped[datetime] = mapped_column(DateTime, nullable=False, default=datetime.utcnow) + + # Новое: связь с типом схемы + type_id: Mapped[Optional[int]] = mapped_column(ForeignKey("schema_types.id"), nullable=True) + type: Mapped[Optional[SchemaType]] = relationship("SchemaType", lazy="joined") \ No newline at end of file diff --git a/app/services/schema_classifier.py b/app/services/schema_classifier.py index 453dea8..4484a3e 100644 --- a/app/services/schema_classifier.py +++ b/app/services/schema_classifier.py @@ -3,8 +3,9 @@ import re from dataclasses import dataclass from typing import List, Optional +from sqlalchemy.orm import Session +from app.models_sqlalchemy import SchemaType -import yaml @dataclass class SchemaTypeRule: @@ -13,49 +14,53 @@ class SchemaTypeRule: description: str = "" filename_pattern: Optional[str] = None -_registry: Optional[List[SchemaTypeRule]] = None +def db_registry(db: Session) -> List[SchemaTypeRule]: + rows = db.query(SchemaType).order_by(SchemaType.id.asc()).all() + return [ + SchemaTypeRule( + code=r.code, + title=r.title, + description=(r.description or ""), + filename_pattern=(r.filename_pattern or None), + ) + for r in rows + ] -def load_registry() -> List[SchemaTypeRule]: - path = os.getenv("SCHEMA_TYPES_YAML", "config/schema_types.yml") - rules: List[SchemaTypeRule] = [] - try: - with open(path, "r", encoding="utf-8") as f: - data = yaml.safe_load(f) or [] - for item in data: - rules.append(SchemaTypeRule(**item)) - except Exception: - # Фолбэк по умолчанию, если файла нет/битый - rules = [ - SchemaTypeRule( - code="design_assignment", - title="Задание на проектирование", - description="Схема задания на проектирование (MCS).", - filename_pattern=r"(?i)DesignAssignment-[0-9]{2}[-_.][0-9]{2}\.xsd", - ), - SchemaTypeRule( - code="explanatory_note", - title="Пояснительная записка", - description="Схема пояснительной записки (Раздел 1).", - filename_pattern=r"(?i)ExplanatoryNote-[0-9]{2}[-_.][0-9]{2}\.xsd", - ), - SchemaTypeRule( - code="expert_conclusion", - title="Заключение экспертизы", - description="Схема заключения экспертизы.", - filename_pattern=r"(?i)(Expert|Examination)Conclusion-[0-9]{2}[-_.][0-9]{2}\.xsd", - ), - ] - return rules +def classify(filename: str, content: bytes, db: Session) -> Optional[SchemaTypeRule]: + """ + 1) Сначала пытаемся сматчить regex из БД (case-insensitive). + 2) Если не получилось — применяем устойчивую эвристику по префиксу имени файла. + """ + fname = os.path.basename(filename or "") -def get_registry() -> List[SchemaTypeRule]: - global _registry - if _registry is None: - _registry = load_registry() - return _registry - -def classify(filename: str, content: bytes) -> Optional[SchemaTypeRule]: - # Пока используем только имя файла; при необходимости добавим эвристики по содержимому - for rule in get_registry(): - if rule.filename_pattern and re.search(rule.filename_pattern, filename): + # 1) Regex + for rule in db_registry(db): + pat = (rule.filename_pattern or "").strip() + if not pat: + continue + try: + rx = re.compile(pat, flags=re.IGNORECASE | re.UNICODE) + except re.error: + continue + if rx.search(fname): return rule + + # 2) Эвристика по префиксу (без регекса) + low = fname.lower() + prefix_map = { + "designassignment": "design_assignment", + "explanatorynote": "explanatory_note", + "expertconclusion": "expert_conclusion", + "examinationconclusion": "expert_conclusion", + } + for prefix, code in prefix_map.items(): + if low.startswith(prefix): + row = db.query(SchemaType).filter(SchemaType.code == code).first() + if row: + return SchemaTypeRule( + code=row.code, + title=row.title, + description=row.description or "", + filename_pattern=row.filename_pattern or None, + ) return None diff --git a/app/web/templates.py b/app/web/templates.py new file mode 100644 index 0000000..2d70f02 --- /dev/null +++ b/app/web/templates.py @@ -0,0 +1,6 @@ +# app/web/templates.py +from datetime import datetime +from fastapi.templating import Jinja2Templates + +templates = Jinja2Templates(directory="templates") +templates.env.globals["now"] = datetime.utcnow diff --git a/migrations/versions/0003_schema_types.py b/migrations/versions/0003_schema_types.py new file mode 100644 index 0000000..5380937 --- /dev/null +++ b/migrations/versions/0003_schema_types.py @@ -0,0 +1,41 @@ +"""add schema_types table and fk from schemas""" +from alembic import op +import sqlalchemy as sa +from datetime import datetime + +# ИД предыдущей миграции адаптируй под свой 0002 +revision = "0003_schema_types" +down_revision = "0002_schemas" +branch_labels = None +depends_on = None + + +def upgrade(): + op.create_table( + "schema_types", + sa.Column("id", sa.Integer(), primary_key=True, autoincrement=True), + sa.Column("code", sa.String(length=64), nullable=False, unique=True), + sa.Column("title", sa.String(length=255), nullable=False), + sa.Column("description", sa.String(), nullable=True), + sa.Column("filename_pattern", sa.String(), nullable=True), + sa.Column("created_at", sa.DateTime(), nullable=False, default=datetime.utcnow), + sa.Column("updated_at", sa.DateTime(), nullable=False, default=datetime.utcnow), + ) + op.create_index("ix_schema_types_code", "schema_types", ["code"], unique=True) + + op.add_column("schemas", sa.Column("type_id", sa.Integer(), nullable=True)) + op.create_foreign_key( + "fk_schemas_type", + "schemas", + "schema_types", + ["type_id"], + ["id"], + ondelete="SET NULL", + ) + + +def downgrade(): + op.drop_constraint("fk_schemas_type", "schemas", type_="foreignkey") + op.drop_column("schemas", "type_id") + op.drop_index("ix_schema_types_code", table_name="schema_types") + op.drop_table("schema_types") diff --git a/templates/schema_types/form.html b/templates/schema_types/form.html new file mode 100644 index 0000000..a48eba9 --- /dev/null +++ b/templates/schema_types/form.html @@ -0,0 +1,35 @@ +{% extends "base.html" %} +{% block content %} +

    + {% if item %}Изменить тип{% else %}Новый тип{% endif %} +

    + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +

    Напр.: (?i)DesignAssignment-[0-9]{2}-[0-9]{2}\.xsd

    +
    + + +
    +{% endblock %} diff --git a/templates/schema_types/list.html b/templates/schema_types/list.html new file mode 100644 index 0000000..80ebd5d --- /dev/null +++ b/templates/schema_types/list.html @@ -0,0 +1,38 @@ +{% extends "base.html" %} +{% block content %} +

    Справочник типов схем

    + + + +
    + + + + + + + + + + + {% for t in items %} + + + + + + + {% else %} + + {% endfor %} + +
    CodeНазваниеШаблон имени файла
    {{ t.code }}{{ t.title }}{{ t.filename_pattern or "—" }} + Изменить +
    + +
    +
    Пока пусто
    +
    +{% endblock %} diff --git a/tests/conftest.py b/tests/conftest.py index 5321dad..f4723ac 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -5,6 +5,8 @@ from fastapi.testclient import TestClient from sqlalchemy.orm import sessionmaker +from sqlalchemy import event +from app.models_sqlalchemy import SchemaType from app.main import app from app.db import engine, get_db @@ -35,16 +37,23 @@ def ensure_bucket(): # ---- DB: транзакция на каждый тест, откатываем в конце ---- @pytest.fixture(scope="function") def db_session(): - """ - Создаёт соединение и внешнюю транзакцию для теста. - Все изменения откатываются по завершении теста. - """ connection = engine.connect() transaction = connection.begin() TestingSessionLocal = sessionmaker(bind=connection, autoflush=False, autocommit=False, future=True) session = TestingSessionLocal() + # стартуем SAVEPOINT поверх внешней транзакции + nested = session.begin_nested() + + # если код приложения вызвал session.commit(), SAVEPOINT завершится; + # этот хук пересоздаёт его автоматически, сохраняя изоляцию теста + @event.listens_for(session, "after_transaction_end") + def restart_savepoint(sess, trans): + nonlocal nested + if trans.nested and not trans._parent.nested: + nested = sess.begin_nested() + try: yield session finally: @@ -55,7 +64,7 @@ def db_session(): # ---- FastAPI TestClient, переопределяем get_db, чтобы он отдавал тестовую сессию ---- @pytest.fixture(scope="function") -def client(db_session): +def client(db_session, seed_schema_types): def override_get_db(): try: yield db_session @@ -66,3 +75,33 @@ def override_get_db(): with TestClient(app) as c: yield c app.dependency_overrides.clear() + +@pytest.fixture(scope="function") +def seed_schema_types(db_session): + """Гарантирует наличие базовых типов в рамках ТЕКУЩЕЙ тестовой транзакции.""" + base = [ + dict( + code="design_assignment", + title="Задание на проектирование", + description="Схема задания на проектирование (MCS).", + filename_pattern=r"(?i)DesignAssignment-[0-9]{2}[-_.][0-9]{2}\.xsd", + ), + dict( + code="explanatory_note", + title="Пояснительная записка", + description="Схема пояснительной записки (Раздел 1).", + filename_pattern=r"(?i)ExplanatoryNote-[0-9]{2}[-_.][0-9]{2}\.xsd", + ), + dict( + code="expert_conclusion", + title="Заключение экспертизы", + description="Схема заключения экспертизы.", + filename_pattern=r"(?i)(Expert|Examination)Conclusion-[0-9]{2}[-_.][0-9]{2}\.xsd", + ), + ] + for r in base: + exists = db_session.query(SchemaType).filter(SchemaType.code == r["code"]).first() + if not exists: + db_session.add(SchemaType(**r)) + db_session.flush() + yield diff --git a/tests/test_schema_types_crud.py b/tests/test_schema_types_crud.py new file mode 100644 index 0000000..0a58ad1 --- /dev/null +++ b/tests/test_schema_types_crud.py @@ -0,0 +1,48 @@ +from app.models_sqlalchemy import SchemaType, Schema + +def test_schema_types_crud(client, db_session): + # используем уникальный code, чтобы не пересекаться с базовыми + r = client.post("/schema-types/new", data={ + "code": "custom_type_ui", + "title": "Произвольный тип", + "description": "desc", + "filename_pattern": r"(?i)CustomDoc-[0-9]{2}-[0-9]{2}\.xsd", + }, follow_redirects=False) + assert r.status_code == 303 + + st = db_session.query(SchemaType).filter_by(code="custom_type_ui").first() + assert st is not None + + # update + r = client.post(f"/schema-types/{st.id}/save", data={ + "code": "custom_type_ui", + "title": "Произвольный тип (обновл.)", + "description": "desc2", + "filename_pattern": r"(?i)CustomDoc-[0-9]{2}-[0-9]{2}\.xsd", + }, follow_redirects=False) + assert r.status_code == 303 + + st2 = db_session.get(SchemaType, st.id) + assert st2.title == "Произвольный тип (обновл.)" + +def test_upload_schema_sets_type_id(seed_schema_types, client, db_session, monkeypatch): + # базовые типы уже есть в транзакции благодаря seed_schema_types + from app.models_sqlalchemy import SchemaType + st = db_session.query(SchemaType).filter_by(code="design_assignment").first() + assert st is not None + + # мок MinIO + monkeypatch.setattr("app.api.routes.schemas.save_file_minio", lambda p, f, c: f"schemas/fake_{f}") + + xsd = b''' + + + ''' + files = {"file": ("DesignAssignment-01-03.xsd", xsd, "application/xml")} + r = client.post("/schemas/upload", files=files, follow_redirects=False) + assert r.status_code == 303 + + s = db_session.query(Schema).order_by(Schema.id.desc()).first() + assert s is not None + assert s.type_id == st.id + assert s.name == st.title diff --git a/tests/test_schemas_upload.py b/tests/test_schemas_upload.py index 82e00b1..aec32ae 100644 --- a/tests/test_schemas_upload.py +++ b/tests/test_schemas_upload.py @@ -1,27 +1,15 @@ -from app.models_sqlalchemy import Schema +from app.models_sqlalchemy import Schema, SchemaType +def test_upload_schema_success(seed_schema_types, client, db_session, monkeypatch): + # есть тип в БД (из сидера) + st = db_session.query(SchemaType).filter_by(code="design_assignment").first() + assert st is not None -def test_upload_schema_success(client, db_session, monkeypatch): # мок MinIO — чтобы не ходить в сеть def fake_save(prefix, filename, content): return f"{prefix}/fake_{filename}" monkeypatch.setattr("app.api.routes.schemas.save_file_minio", fake_save) - # мок реестра типов — чтобы имя/описание шли из справочника - from app.services import schema_classifier - monkeypatch.setattr( - schema_classifier, - "get_registry", - lambda: [ - schema_classifier.SchemaTypeRule( - code="design_assignment", - title="Задание на проектирование", - description="Описание из справочника", - filename_pattern=r"(?i)DesignAssignment-[0-9]{2}-[0-9]{2}\.xsd", - ) - ], - ) - xsd = b''' Test Schema @@ -33,12 +21,10 @@ def fake_save(prefix, filename, content): assert r.status_code == 303 assert r.headers["Location"].startswith("/schemas/") - # проверяем запись в той же сессии (видна внутри транзакции) - items = db_session.query(Schema).order_by(Schema.id.desc()).all() - assert len(items) >= 1 - s = items[0] - # имя и описание — из справочника типов - assert s.name == "Задание на проектирование" + # проверяем запись (видна в транзакции) + s = db_session.query(Schema).order_by(Schema.id.desc()).first() + assert s is not None + assert s.name == st.title # из БД assert s.version == "01.03" - assert "Описание из справочника" in (s.description or "") + assert "Test Schema" in (s.description or "") or (s.description == st.description) assert s.file_path.startswith("schemas/fake_") From 6f0ccc0e7ee455524f03704ce86e201a6c903f8d Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Sun, 24 Aug 2025 16:05:06 +0300 Subject: [PATCH 14/20] =?UTF-8?q?A1:=20=D0=97=D0=B0=D0=BA=D1=80=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D0=B5=D0=BC=20Issues=20A1-7=20=D0=B8=20A1-8.=20See?= =?UTF-8?q?d=20=D0=B1=D0=B0=D0=B7=D0=BE=D0=B2=D1=8B=D1=85=20=D1=82=D0=B8?= =?UTF-8?q?=D0=BF=D0=BE=D0=B2=20+=20=D0=BD=D0=B5=D0=BA=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B0=D1=8F=20=D0=BF=D0=BE=D0=BB=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9?= =?UTF-8?q?=D1=81=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CODE_OF_CONDUCT.md | 30 +++++++++++++++++ CONTRIBUTING.md | 55 +++++++++++++++++++++++++++++++ LICENSE | 16 +++++++++ README.md | 81 ++++++++++++++++++++++++---------------------- 4 files changed, 144 insertions(+), 38 deletions(-) create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..9171193 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,30 @@ + +## 📄 CODE_OF_CONDUCT.md + +# Кодекс поведения участников + +Мы придерживаемся [Contributor Covenant](https://www.contributor-covenant.org/) версии 2.1. + +## Наши обязательства + +Мы, как участники и мейнтейнеры, обязуемся создать дружелюбную и безопасную среду для всех, независимо от возраста, пола, опыта, национальности, религии или политических взглядов. + +## Ожидаемое поведение + +- Демонстрировать уважение к другим участникам +- Принимать конструктивную критику +- Использовать корректный и профессиональный язык +- Поддерживать атмосферу сотрудничества + +## Недопустимое поведение + +- Оскорбления, унижения, личные нападки +- Дискриминация и домогательства +- Публичное или личное преследование +- Публикация личной информации без согласия + +## Применение + +Нарушения кодекса поведения могут привести к предупреждению или удалению из сообщества. + +Контакты для вопросов и жалоб: [открыть issue](https://github.com/knoff/construction_xml/issues) или связаться с мейнтейнером напрямую. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..555a26c --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,55 @@ +# Вклад в проект + +Спасибо, что хотите помочь развитию **Construction XML Service**! + +## Как начать + +1. Форкните репозиторий и создайте ветку для вашей задачи: + ```bash + git checkout -b feature/my-feature + ``` + +2. Поднимите окружение локально: + + ```bash + docker compose up -d + ``` + + Сервис поднимется вместе с PostgreSQL и MinIO. + +3. Выполните миграции: + + ```bash + docker compose exec app alembic upgrade head + ``` + +4. Запустите тесты: + + ```bash + docker compose exec app pytest -q + ``` + +## Стиль кода + +* Python 3.11, придерживаемся PEP8. +* Используем `black` для форматирования. +* Типизация: `mypy` и аннотации обязательны. +* Коммиты оформляем в стиле: + + ``` + A2-1: Краткое описание задачи + ``` + +## Pull Request + +* Перед PR убедитесь, что тесты проходят (`pytest`) и код отформатирован. +* PR должен ссылаться на соответствующий Issue или Milestone. +* В PR описать: + + * Что сделано + * Как протестировать + * Замечания или TODO + +## Вопросы + +Если есть вопросы — используйте [Issues](https://github.com/knoff/construction_xml/issues). \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a85d742 --- /dev/null +++ b/LICENSE @@ -0,0 +1,16 @@ +Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) + +Это произведение лицензируется на условиях лицензии Creative Commons +«Attribution-NonCommercial» (Атрибуция — Некоммерческое использование) версии 4.0. + +Вы можете: +- Делиться — копировать и распространять материал на любом носителе и в любом формате. +- Адаптировать — ремикшировать, трансформировать и брать за основу этот материал. + +На следующих условиях: +- Атрибуция — необходимо указывать авторство, предоставлять ссылку на лицензию и + указывать, были ли внесены изменения. +- Некоммерческое использование — запрещено использовать материал в коммерческих целях. + +Для получения полного текста лицензии посетите: +https://creativecommons.org/licenses/by-nc/4.0/ diff --git a/README.md b/README.md index 6b52d2a..f78eee8 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,43 @@ -# Минстрой XML Service (Python/FastAPI) — MVP-скелет - -**Назначение**: сервис для формирования и увязки документов (Задание, Пояснительная записка и др.) на базе **CDM** (канонической модели), с загрузкой правил, валидациями и работой с файлами. - -## Быстрый старт (локально) - -```bash -python -m venv .venv && source .venv/bin/activate -pip install -r requirements.txt -uvicorn app.main:app --reload -``` - -Откройте: http://127.0.0.1:8000/docs - -## Что уже есть -- FastAPI-приложение, модульные роутеры. -- **CDM** (минимальный фрагмент) и простое создание черновиков документов. -- Загрузка файлов с расчётом **SHA-256** и контролем размера (порог задаётся в env). -- Загрузка правил-хэлперов (YAML), хранение их в файловой системе, базовая проверка структуры. -- Заготовки для: реестра XSD, печатных шаблонов, верификации откреплённых подписей. - -## Структура -``` -app/ - api/routes/ # эндпоинты - core/ # конфиг, utils - models/ # CDM-модели - services/ # логика: файлы, правила, подписи, схемы - templates/ # шаблоны печати - rules/ # примеры правил (YAML) -tests/ -``` - -## Дальше -- Подключить реальные XSD, автогенерацию JSON Schema форм. -- Реализовать движок правил (JSONLogic) и кросс-док проверки. -- Добавить генерацию PDF/DOCX из Jinja2/docxtpl. -- Подключить верификацию .sig и (опционально) подписание. \ No newline at end of file +# Construction XML Service + +Веб-сервис для работы с нормативными XML-схемами Минстроя (XSD/XSL) +при проектировании и экспертизе объектов недвижимости. +Система разрабатывается для использования любыми участниками процесса проектирования, экспертизы и строительства объектов недвижимости. + +## Возможности +Суть проекта в реализации сквозного заполнения документов с использованием ранее внесенных данных с формированием единого пространства данных для объекта недвижимости. + +Проект основывается на опубликованных схемах XSD Минстроя для различных форм документов. +Фактически мы повторяем функционал отдельных сервисов по заполнению отдельных документов, но в общем интерфейсе, едином пространстве и, как следствие, с возможностью переиспользования данных. +В процессе заполнения любого документа формируется предстваление объекта CDM данные из которого подтягиваются в другие документы по этому же объекту. +В системе используются дополнительные средства контроля данных, проверки и хелперы, которые позволяют сократить число операций, необхедимых для получения полного комплекта документов по объекту, выявлять ошибки на более ранних этапах и проводить перекреную проверку данных в разных документах. + +## Milestones +Разработка ведётся по [Milestones](https://github.com/knoff/construction_xml/milestones): + +- **A1** — Реестр XSD-схем и базовый интерфейс. +- **A2** — Генерация форм из XSD. +- **A3** — Правила и хелперы (логика сверх XSD). +- **A4** — Шаблоны печатных форм. +- **B1–B5** — Работа с файлами, ЭП, интеграции, доступы. + +## Технологии +- Backend: Python 3.11, FastAPI +- ORM: SQLAlchemy, Alembic +- Хранение файлов: MinIO (S3-совместимый) +- DB: PostgreSQL +- CI/CD: GitHub Actions +- Docker Compose для локальной разработки + +## Ограничение ответственности +Система находится в активной разработке, авторы не несут ответственности за возможные ошибки в формируемых документах и их последствия. +Система не передает вводимые данные на внешние сервера и в сторонние сервисы, однако авторы не несут ответственность за возможные нарушения Закона о защите персональных данных при использовании системы. Ответственность за выполнение требований законодательства лежит на операторе персональных данных, осуществляющем их обработку в процессе использования системы. +Напоминаем всем участникам процесса, что само формирование документов на основе схем Минстроя является обработкой персональных данных и требует соблюдения требований законодательства. + +## Участие +Pull-requests приветствуются. +Для предложений и багов используйте [Issues](https://github.com/knoff/construction_xml/issues). + +## Лицензия +Проект распространяется под лицензией [CC-BY-NC 4.0](LICENSE). +⚠️ **Коммерческое использование запрещено.** From 07a8bf7e264ded203732892863198491c6adc44a Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Sun, 24 Aug 2025 16:13:50 +0300 Subject: [PATCH 15/20] =?UTF-8?q?A1:=20=D0=97=D0=B0=D0=BA=D1=80=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D0=B5=D0=BC=20Issues=20A1-7=20=D0=B8=20A1-8.=20See?= =?UTF-8?q?d=20=D0=B1=D0=B0=D0=B7=D0=BE=D0=B2=D1=8B=D1=85=20=D1=82=D0=B8?= =?UTF-8?q?=D0=BF=D0=BE=D0=B2=20+=20=D0=BD=D0=B5=D0=BA=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B0=D1=8F=20=D0=BF=D0=BE=D0=BB=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9?= =?UTF-8?q?=D1=81=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- STRUCTURE.md | 77 +++++++++++++++++++ app/api/routes/schemas.py | 21 ++++- migrations/versions/0004_seed_schema_types.py | 58 ++++++++++++++ templates/base.html | 1 + templates/schema_types/list.html | 5 +- templates/schemas/list.html | 21 +++++ templates/schemas/view.html | 3 + 7 files changed, 181 insertions(+), 5 deletions(-) create mode 100644 STRUCTURE.md create mode 100644 migrations/versions/0004_seed_schema_types.py diff --git a/STRUCTURE.md b/STRUCTURE.md new file mode 100644 index 0000000..8b64fe5 --- /dev/null +++ b/STRUCTURE.md @@ -0,0 +1,77 @@ +# STRUCTURE.md — слепок структуры репозитория (PR #1 `feature/xsd-registry-form`) + +Этот файл — «точка входа»: содержит дерево каталогов и назначение каждого файла. Поддерживаем его в актуальном состоянии при любом изменении структуры. + +> Базовая идея сервиса: FastAPI-приложение, хранение метаданных в PostgreSQL (SQLAlchemy/Alembic), файлов — в MinIO (S3), интерфейсы для загрузки/просмотра XSD и справочника типов схем. + +--- + +## Корень репозитория + +- `/README.md` — обзор проекта, цели и майлстоуны A1–A4/B1–B5 (основано на содержимом файла). +- `/LICENSE` — лицензия CC-BY-NC 4.0 (основано на содержимом файла). +- `/requirements.txt` — зависимости Python (FastAPI, SQLAlchemy, Alembic, lxml, Jinja2 и др.) (основано на содержимом файла). +- `/.env.example` — пример переменных окружения (порты, параметры Postgres/MinIO, S3_BUCKET и т. д.) (основано на содержимом файла). +- `/docker-compose.yml` — локальная инфраструктура: сервисы `app`, `postgres`, `minio`; проброс портов; переменные окружения для S3 (основано на содержимом файла). +- `/alembic.ini` → **в PR меняется** на `script_location = migrations` (т. е. каталог миграций переезжает в `migrations/`) (основано на диффе PR). +- `/init-minio.ps1` — утилита для инициализации MinIO и создания бакета из Windows/PowerShell (основано на содержимом файла). +- `/.github/workflows/ci.yml` — **новый в PR** CI: поднимает Postgres и MinIO, выполняет Alembic upgrade, запускает pytest (основано на диффе PR). +- `/.vscode/tasks.json` — задачи для `docker compose`, Alembic upgrade/downgrade, pytest (основано на содержимом файла). +- `/.vscode/settings.json` — **новый/обновлённый в PR** настройки Python для рабочей папки (основано на диффе PR). + +--- + +## Приложение (`/app`) + +- `/app/main.py` — создание FastAPI-приложения и регистрация роутеров: `health`, `schemas`, `schema-types` (новый в PR), `documents`, `files`, `rules`, `sign` (основано на импортах и диффе PR). +- `/app/db.py` — инициализация SQLAlchemy (`engine`, `SessionLocal`, `Base`) + **в PR добавляется** `get_db()` (зависимость FastAPI для сессии БД) (основано на диффе PR). + +### Конфигурация и модели + +- `/app/core/config.py` — pydantic-настройки приложения: лимиты загрузки, каталоги хранения и пр. (основано на содержимом файла). +- `/app/models/cdm.py` — pydantic-модели CDM (Project/Document/…); используются API `/documents` для MVP (основано на содержимом файла и импортах `app/api/routes/documents.py`). +- `/app/models_sqlalchemy.py` — ORM-модели: + - **в PR добавлено**: `SchemaType` (справочник типов схем) и `Schema` (метаданные XSD, путь к файлу в S3/MinIO, связь с `SchemaType`); + - уже были: `DocumentRow`, `FileRow`, `RuleRow` (основано на диффе PR). + +### Роуты API (`/app/api/routes`) + +- `/app/api/routes/health.py` — `GET /health` (простой статус) (основано на содержимом файла). +- `/app/api/routes/schemas.py` — **переписан в PR**: теперь префикс `"/schemas"` и HTML-интерфейс (Jinja2), загрузка `.xsd` с проверкой размера, сохранение файла в MinIO (`save_file_minio`), парсинг метаданных (`schema_parser`), классификация (`schema_classifier`), запись в БД (`Schema`), просмотр карточки, удаление с очисткой файла в MinIO (основано на диффе PR). +- `/app/api/routes/schema_types.py` — **новый в PR**: CRUD HTML-форм для справочника типов схем (листинг, создание/редактирование/удаление) (основано на диффе PR). +- `/app/api/routes/documents.py` — MVP-эндпоинты `/documents` с in-memory хранилищем CDM-документов (основано на содержимом файла). +- `/app/api/routes/files.py` — загрузка произвольных файлов, проверка размера против `MAX_UPLOAD_MB`, сохранение (локальный стор) (основано на содержимом файла). +- `/app/api/routes/rules.py` — загрузка YAML-правил, в PR меняется поле модели с `validate` на `condition` (основано на диффе PR). +- `/app/api/routes/sign.py` — проверка detached-подписи (пока заглушка через `app.services.signatures`) (основано на содержимом файла). + +### Сервисы (`/app/services`) + +- `/app/services/schema_parser.py` — **новый в PR**: извлечение `name/version/namespace/description` из XSD; терпимый парсер (`lxml`) и эвристика извлечения версии из имени файла (основано на диффе PR). +- `/app/services/schema_classifier.py` — **новый в PR**: классификация загруженной схемы: сначала regex-паттерны из БД `SchemaType.filename_pattern`, затем устойчивые эвристики по префиксу имени (основано на диффе PR). +- `/app/services/files.py` — операции сохранения загружаемых файлов в локальное хранилище (используется `/files/upload`) (основано на содержимом файла). +- `/app/services/rules.py` — валидация и сохранение YAML-правил в `app/rules/*.yaml`; модель `Rule` (в PR поле `condition`) (основано на содержимом файла и диффе PR). +- `/app/services/signatures.py` — заглушка для проверки ЭП (структура ответа, пометки «не реализовано в MVP») (основано на содержимом файла). +- `/app/services/xsd_registry.py` — **legacy**: файловый «реестр» `data/schemas` (не используется после PR, к удалению после миграции) (основано на содержимом файла и замене импорта в PR). + +### Хранилище и шаблоны + +- `/app/storage/__init__.py` (или `/app/storage.py`) — **новый в PR**: адаптер MinIO с функциями `save_file_minio` / `delete_file_minio`, используется роутером `schemas` при загрузке/удалении XSD (основано на импорте в диффе PR). +- `/app/web/templates/__init__.py` — **новый в PR**: инициализация Jinja2 (`templates`), используется в `schemas.py` и `schema_types.py` (основано на импортах в диффе PR). +- `/app/web/templates/schemas/list.html` — **новый в PR**: HTML-список загруженных схем (основано на использовании в диффе PR). +- `/app/web/templates/schemas/upload.html` — **новый в PR**: HTML-форма загрузки XSD (основано на использовании в диффе PR). +- `/app/web/templates/schemas/view.html` — **новый в PR**: HTML-карточка схемы (основано на использовании в диффе PR). +- `/app/web/templates/schema_types/list.html` — **новый в PR**: HTML-список типов (основано на использовании в диффе PR). +- `/app/web/templates/schema_types/form.html` — **новый в PR**: HTML-форма создания/редактирования типа (основано на использовании в диффе PR). + +--- + +## Миграции БД + +- **До PR**: каталог `/alembic/` (в т. ч. `/alembic/env.py`, `/alembic/versions/0001_init.py`) — начальные таблицы `documents`, `files`, `rules` (основано на содержимом файлов). +- **В PR**: `alembic.ini` указывает `script_location = migrations` — планируется перенос миграций в `/migrations/` (после мержа привести структуру в соответствие и перенести версии). + +--- + +## Прочее + +- `/app/rules/example_rules.yaml` — пример файла правил для разработки/тестов (основано на содержимом файла). diff --git a/app/api/routes/schemas.py b/app/api/routes/schemas.py index ebb8f55..ba1df4f 100644 --- a/app/api/routes/schemas.py +++ b/app/api/routes/schemas.py @@ -29,12 +29,27 @@ @router.get("/", response_class=HTMLResponse) -def list_schemas(request: Request, db: Session = Depends(get_db)): - items = db.query(Schema).order_by(Schema.created_at.desc()).all() +def list_schemas( + request: Request, + db: Session = Depends(get_db), + type_id: int | None = None, +): + q = db.query(Schema).order_by(Schema.created_at.desc()) + if type_id and type_id!=0: + q = q.filter(Schema.type_id == type_id) + items = q.all() + + schema_types = db.query(SchemaType).order_by(SchemaType.title.asc()).all() flash = request.query_params.get("msg") return templates.TemplateResponse( "schemas/list.html", - {"request": request, "items": items, "flash": flash}, + { + "request": request, + "items": items, + "flash": flash, + "schema_types": schema_types, + "selected_type_id": type_id, + }, ) diff --git a/migrations/versions/0004_seed_schema_types.py b/migrations/versions/0004_seed_schema_types.py new file mode 100644 index 0000000..2beb0cf --- /dev/null +++ b/migrations/versions/0004_seed_schema_types.py @@ -0,0 +1,58 @@ +"""Seed base schema types (design_assignment, explanatory_note, expert_conclusion) + +Revision ID: 0004_seed_schema_types +Revises: 0003_schema_types +Create Date: 2025-08-23 +""" +from alembic import op +import sqlalchemy as sa + +# --- Alembic identifiers --- +revision = "0004_seed_schema_types" +down_revision = "0003_schema_types" +branch_labels = None +depends_on = None + +BASE_TYPES = [ + # code, name, filename_pattern (regex, optional) + ("design_assignment", "Задание на проектирование", r"(?i)DesignAssignment-[0-9]{2}[-_.][0-9]{2}\\.xsd"), + ("explanatory_note", "Пояснительная записка", r"(?i)ExplanatoryNote-[0-9]{2}[-_.][0-9]{2}\\.xsd"), + ("expert_conclusion", "Заключение экспертизы", r"(?i)(Expert|Examination)Conclusion-[0-9]{2}[-_.][0-9]{2}\\.xsd"), +] + + +def upgrade() -> None: + conn = op.get_bind() + meta = sa.MetaData() + meta.reflect(bind=conn) + + schema_types = sa.Table("schema_types", meta, + autoload_with=conn + ) + + # читаем уже существующие коды, чтобы сид был идемпотентным + existing = { + row[0] for row in conn.execute(sa.select(schema_types.c.code)) + } + + to_insert = [ + dict(code=code, name=name, filename_pattern=pattern) + for code, name, pattern in BASE_TYPES + if code not in existing + ] + + if to_insert: + conn.execute(sa.insert(schema_types), to_insert) + + +def downgrade() -> None: + conn = op.get_bind() + meta = sa.MetaData() + meta.reflect(bind=conn) + schema_types = sa.Table("schema_types", meta, autoload_with=conn) + + conn.execute( + sa.delete(schema_types).where( + schema_types.c.code.in_([code for code, *_ in BASE_TYPES]) + ) + ) diff --git a/templates/base.html b/templates/base.html index dd69ffb..d897b9e 100644 --- a/templates/base.html +++ b/templates/base.html @@ -12,6 +12,7 @@
    Минстрой XML Service diff --git a/templates/schema_types/list.html b/templates/schema_types/list.html index 80ebd5d..0590848 100644 --- a/templates/schema_types/list.html +++ b/templates/schema_types/list.html @@ -19,11 +19,12 @@

    Справочник типов схем< {% for t in items %} - {{ t.code }} + + {{ t.code }} + {{ t.title }} {{ t.filename_pattern or "—" }} - Изменить
    diff --git a/templates/schemas/list.html b/templates/schemas/list.html index 4e5c740..8c693fa 100644 --- a/templates/schemas/list.html +++ b/templates/schemas/list.html @@ -7,13 +7,28 @@

    Загруженные XSD/XSL

    + {% if schema_types is defined %} +
    + + +
    + {% endif %} + + @@ -22,9 +37,15 @@

    Загруженные XSD/XSL

    + + {% else %} diff --git a/templates/schemas/view.html b/templates/schemas/view.html index 3c10b7b..fbea96c 100644 --- a/templates/schemas/view.html +++ b/templates/schemas/view.html @@ -5,6 +5,9 @@

    {{ schema.name }}

    +
    Тип схемы
    +
    {{ schema.type.title or "—" }}
    +
    Версия
    {{ schema.version or "—" }}
    From 756f9dc56f1c15be45190058702bc00bc33b0997 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Sun, 24 Aug 2025 16:45:28 +0300 Subject: [PATCH 16/20] A1-9: add frontend lockfile --- frontend/package-lock.json | 3442 ++++++++++++++++++++++++++++++++++++ 1 file changed, 3442 insertions(+) create mode 100644 frontend/package-lock.json diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..df9bb44 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,3442 @@ +{ + "name": "xsd-registry-ui", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "xsd-registry-ui", + "version": "0.1.0", + "dependencies": { + "@radix-ui/react-dialog": "1.1.1", + "@tanstack/react-table": "8.20.5", + "axios": "1.7.7", + "class-variance-authority": "0.7.0", + "clsx": "2.1.1", + "react": "18.3.1", + "react-dom": "18.3.1", + "react-hook-form": "7.53.0", + "react-router-dom": "6.26.2", + "tailwind-merge": "2.5.2" + }, + "devDependencies": { + "@types/react": "18.3.5", + "@types/react-dom": "18.3.0", + "autoprefixer": "10.4.20", + "postcss": "8.4.45", + "tailwindcss": "3.4.9", + "typescript": "5.5.4", + "vite": "5.4.2" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.1.tgz", + "integrity": "sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.0", + "@radix-ui/react-focus-guards": "1.1.0", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-portal": "1.1.1", + "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.7" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz", + "integrity": "sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz", + "integrity": "sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", + "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz", + "integrity": "sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz", + "integrity": "sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", + "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@remix-run/router": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.48.0.tgz", + "integrity": "sha512-aVzKH922ogVAWkKiyKXorjYymz2084zrhrZRXtLrA5eEx5SO8Dj0c/4FpCHZyn7MKzhW2pW4tK28vVr+5oQ2xw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.48.0.tgz", + "integrity": "sha512-diOdQuw43xTa1RddAFbhIA8toirSzFMcnIg8kvlzRbK26xqEnKJ/vqQnghTAajy2Dcy42v+GMPMo6jq67od+Dw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.48.0.tgz", + "integrity": "sha512-QhR2KA18fPlJWFefySJPDYZELaVqIUVnYgAOdtJ+B/uH96CFg2l1TQpX19XpUMWUqMyIiyY45wje8K6F4w4/CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.48.0.tgz", + "integrity": "sha512-Q9RMXnQVJ5S1SYpNSTwXDpoQLgJ/fbInWOyjbCnnqTElEyeNvLAB3QvG5xmMQMhFN74bB5ZZJYkKaFPcOG8sGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.48.0.tgz", + "integrity": "sha512-3jzOhHWM8O8PSfyft+ghXZfBkZawQA0PUGtadKYxFqpcYlOYjTi06WsnYBsbMHLawr+4uWirLlbhcYLHDXR16w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.48.0.tgz", + "integrity": "sha512-NcD5uVUmE73C/TPJqf78hInZmiSBsDpz3iD5MF/BuB+qzm4ooF2S1HfeTChj5K4AV3y19FFPgxonsxiEpy8v/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.48.0.tgz", + "integrity": "sha512-JWnrj8qZgLWRNHr7NbpdnrQ8kcg09EBBq8jVOjmtlB3c8C6IrynAJSMhMVGME4YfTJzIkJqvSUSVJRqkDnu/aA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.48.0.tgz", + "integrity": "sha512-9xu92F0TxuMH0tD6tG3+GtngwdgSf8Bnz+YcsPG91/r5Vgh5LNofO48jV55priA95p3c92FLmPM7CvsVlnSbGQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.48.0.tgz", + "integrity": "sha512-NLtvJB5YpWn7jlp1rJiY0s+G1Z1IVmkDuiywiqUhh96MIraC0n7XQc2SZ1CZz14shqkM+XN2UrfIo7JB6UufOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.48.0.tgz", + "integrity": "sha512-QJ4hCOnz2SXgCh+HmpvZkM+0NSGcZACyYS8DGbWn2PbmA0e5xUk4bIP8eqJyNXLtyB4gZ3/XyvKtQ1IFH671vQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.48.0.tgz", + "integrity": "sha512-Pk0qlGJnhILdIC5zSKQnprFjrGmjfDM7TPZ0FKJxRkoo+kgMRAg4ps1VlTZf8u2vohSicLg7NP+cA5qE96PaFg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.48.0.tgz", + "integrity": "sha512-/dNFc6rTpoOzgp5GKoYjT6uLo8okR/Chi2ECOmCZiS4oqh3mc95pThWma7Bgyk6/WTEvjDINpiBCuecPLOgBLQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.48.0.tgz", + "integrity": "sha512-YBwXsvsFI8CVA4ej+bJF2d9uAeIiSkqKSPQNn0Wyh4eMDY4wxuSp71BauPjQNCKK2tD2/ksJ7uhJ8X/PVY9bHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.48.0.tgz", + "integrity": "sha512-FI3Rr2aGAtl1aHzbkBIamsQyuauYtTF9SDUJ8n2wMXuuxwchC3QkumZa1TEXYIv/1AUp1a25Kwy6ONArvnyeVQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.48.0.tgz", + "integrity": "sha512-Dx7qH0/rvNNFmCcIRe1pyQ9/H0XO4v/f0SDoafwRYwc2J7bJZ5N4CHL/cdjamISZ5Cgnon6iazAVRFlxSoHQnQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.48.0.tgz", + "integrity": "sha512-GUdZKTeKBq9WmEBzvFYuC88yk26vT66lQV8D5+9TgkfbewhLaTHRNATyzpQwwbHIfJvDJ3N9WJ90wK/uR3cy3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.48.0.tgz", + "integrity": "sha512-ao58Adz/v14MWpQgYAb4a4h3fdw73DrDGtaiF7Opds5wNyEQwtO6M9dBh89nke0yoZzzaegq6J/EXs7eBebG8A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.48.0.tgz", + "integrity": "sha512-kpFno46bHtjZVdRIOxqaGeiABiToo2J+st7Yce+aiAoo1H0xPi2keyQIP04n2JjDVuxBN6bSz9R6RdTK5hIppw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.48.0.tgz", + "integrity": "sha512-rFYrk4lLk9YUTIeihnQMiwMr6gDhGGSbWThPEDfBoU/HdAtOzPXeexKi7yU8jO+LWRKnmqPN9NviHQf6GDwBcQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.48.0.tgz", + "integrity": "sha512-sq0hHLTgdtwOPDB5SJOuaoHyiP1qSwg+71TQWk8iDS04bW1wIE0oQ6otPiRj2ZvLYNASLMaTp8QRGUVZ+5OL5A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tanstack/react-table": { + "version": "8.20.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.20.5.tgz", + "integrity": "sha512-WEHopKw3znbUZ61s9i0+i9g8drmDo6asTWbrQh8Us63DAk/M0FkmIqERew6P71HI75ksZ2Pxyuf4vvKh9rAkiA==", + "license": "MIT", + "dependencies": { + "@tanstack/table-core": "8.20.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.20.5", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.20.5.tgz", + "integrity": "sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.5.tgz", + "integrity": "sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", + "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.3.tgz", + "integrity": "sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001735", + "electron-to-chromium": "^1.5.204", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001737", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001737.tgz", + "integrity": "sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", + "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "2.0.0" + }, + "funding": { + "url": "https://joebell.co.uk" + } + }, + "node_modules/class-variance-authority/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.208", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.208.tgz", + "integrity": "sha512-ozZyibehoe7tOhNaf16lKmljVf+3npZcJIEbJRVftVsmAg5TeA1mGS9dVCZzOwr2xT7xK15V0p7+GZqSPgkuPg==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.45", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz", + "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-hook-form": { + "version": "7.53.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.0.tgz", + "integrity": "sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz", + "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.4", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-router": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.48.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.48.0.tgz", + "integrity": "sha512-BXHRqK1vyt9XVSEHZ9y7xdYtuYbwVod2mLwOMFP7t/Eqoc1pHRlG/WdV2qNeNvZHRQdLedaFycljaYYM96RqJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.48.0", + "@rollup/rollup-android-arm64": "4.48.0", + "@rollup/rollup-darwin-arm64": "4.48.0", + "@rollup/rollup-darwin-x64": "4.48.0", + "@rollup/rollup-freebsd-arm64": "4.48.0", + "@rollup/rollup-freebsd-x64": "4.48.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.48.0", + "@rollup/rollup-linux-arm-musleabihf": "4.48.0", + "@rollup/rollup-linux-arm64-gnu": "4.48.0", + "@rollup/rollup-linux-arm64-musl": "4.48.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.48.0", + "@rollup/rollup-linux-ppc64-gnu": "4.48.0", + "@rollup/rollup-linux-riscv64-gnu": "4.48.0", + "@rollup/rollup-linux-riscv64-musl": "4.48.0", + "@rollup/rollup-linux-s390x-gnu": "4.48.0", + "@rollup/rollup-linux-x64-gnu": "4.48.0", + "@rollup/rollup-linux-x64-musl": "4.48.0", + "@rollup/rollup-win32-arm64-msvc": "4.48.0", + "@rollup/rollup-win32-ia32-msvc": "4.48.0", + "@rollup/rollup-win32-x64-msvc": "4.48.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.2.tgz", + "integrity": "sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.9.tgz", + "integrity": "sha512-1SEOvRr6sSdV5IDf9iC+NU4dhwdqzF4zKKq3sAbasUWHEM6lsMhX+eNN5gkPx1BvLFEnZQEUFbXnGj8Qlp83Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz", + "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.41", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + } + } +} From 1ecbc3d45b0404b1f748c359255af1a110cdd0df Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Sun, 24 Aug 2025 16:54:22 +0300 Subject: [PATCH 17/20] A1-9: add @vitejs/plugin-react dev dependency --- frontend/package-lock.json | 475 +++++++++++++++++++++++++++++++++++++ 1 file changed, 475 insertions(+) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index df9bb44..585ed7a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -22,6 +22,7 @@ "devDependencies": { "@types/react": "18.3.5", "@types/react-dom": "18.3.0", + "@vitejs/plugin-react": "^4.7.0", "autoprefixer": "10.4.20", "postcss": "8.4.45", "tailwindcss": "3.4.9", @@ -42,6 +43,312 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", + "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.3", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz", + "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", + "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -860,6 +1167,13 @@ "node": ">=14.0.0" } }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.48.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.48.0.tgz", @@ -1173,6 +1487,51 @@ "url": "https://github.com/sponsors/tannerlinsley" } }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -1208,6 +1567,27 @@ "@types/react": "*" } }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, "node_modules/ansi-regex": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", @@ -1559,6 +1939,13 @@ "node": ">= 6" } }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -1594,6 +1981,24 @@ "devOptional": true, "license": "MIT" }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1896,6 +2301,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -2138,6 +2553,32 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -2254,6 +2695,13 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -2644,6 +3092,16 @@ "react": "^16.8.0 || ^17 || ^18 || ^19" } }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react-remove-scroll": { "version": "2.5.7", "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz", @@ -2873,6 +3331,16 @@ "loose-envify": "^1.1.0" } }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3425,6 +3893,13 @@ "node": ">=8" } }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, "node_modules/yaml": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", From 3c8f7e04bbbf709f467560d5224e520cfaecf6a6 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Mon, 25 Aug 2025 12:55:56 +0300 Subject: [PATCH 18/20] =?UTF-8?q?A1-9:=20=D0=A1=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B1=D0=B0=D0=B7=D0=BE=D0=B2=D0=B0=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D1=81=20React.=20=D0=9F?= =?UTF-8?q?=D1=80=D0=BE=D0=BC=D0=B5=D0=B6=D1=83=D1=82=D0=BE=D1=87=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B8=D1=82.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 ++ .vscode/tasks.json | 32 +++++---- Dockerfile | 16 ++++- app/api/routes/schemas.py | 100 +++++++++----------------- app/main.py | 59 ++++++++++++--- app/static/assets/index-C1fPBhUf.js | 95 ++++++++++++++++++++++++ app/static/assets/index-QKPzKNrt.css | 1 + app/static/index.html | 13 ++++ frontend/index.html | 12 ++++ frontend/package.json | 33 +++++++++ frontend/postcss.config.js | 6 ++ frontend/src/App.tsx | 20 ++++++ frontend/src/components/ui/button.tsx | 7 ++ frontend/src/components/ui/input.tsx | 8 +++ frontend/src/components/ui/table.tsx | 7 ++ frontend/src/index.css | 5 ++ frontend/src/lib/api.ts | 6 ++ frontend/src/main.tsx | 27 +++++++ frontend/src/pages/SchemaUpload.tsx | 35 +++++++++ frontend/src/pages/SchemaView.tsx | 4 ++ frontend/src/pages/SchemasList.tsx | 48 +++++++++++++ frontend/tailwind.config.js | 6 ++ frontend/tsconfig.json | 14 ++++ frontend/vite.config.ts | 20 ++++++ 24 files changed, 487 insertions(+), 91 deletions(-) create mode 100644 app/static/assets/index-C1fPBhUf.js create mode 100644 app/static/assets/index-QKPzKNrt.css create mode 100644 app/static/index.html create mode 100644 frontend/index.html create mode 100644 frontend/package.json create mode 100644 frontend/postcss.config.js create mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/components/ui/button.tsx create mode 100644 frontend/src/components/ui/input.tsx create mode 100644 frontend/src/components/ui/table.tsx create mode 100644 frontend/src/index.css create mode 100644 frontend/src/lib/api.ts create mode 100644 frontend/src/main.tsx create mode 100644 frontend/src/pages/SchemaUpload.tsx create mode 100644 frontend/src/pages/SchemaView.tsx create mode 100644 frontend/src/pages/SchemasList.tsx create mode 100644 frontend/tailwind.config.js create mode 100644 frontend/tsconfig.json create mode 100644 frontend/vite.config.ts diff --git a/.gitignore b/.gitignore index 5fdb306..b134cd3 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,10 @@ venv/ dist/ *.egg-info/ +# frontend build artifacts +frontend/node_modules/ +frontend/dist/ + # Local data data/ uploads/ diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 5426542..4a0aed7 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -34,27 +34,29 @@ "problemMatcher": [] }, { - "label": "Pytest (container)", + "label": "UI Build (vite prod)", "type": "shell", - "command": "docker compose exec -e DATABASE_URL=postgresql+psycopg://xmlsvc:xmlsvc@postgres:5432/xmlsvc -e S3_ENDPOINT=http://minio:9000 -e S3_BUCKET=xmlsvc -e S3_ACCESS_KEY=minioadmin -e S3_SECRET_KEY=minioadmin app pytest -q", - "group": "test", + "options": { "cwd": "${workspaceFolder}/frontend" }, + "command": "npm run build", + "group": "build", + "presentation": { "reveal": "always", "panel": "dedicated" }, + "problemMatcher": [] + }, + { + "label": "UI Deploy to backend static", + "type": "shell", + "command": "powershell -NoProfile -ExecutionPolicy Bypass -Command \"mkdir ${workspaceFolder}\\app\\static -ea 0 | Out-Null; robocopy ${workspaceFolder}\\frontend\\dist ${workspaceFolder}\\app\\static /MIR | Out-Null; docker compose restart app\"", + "group": "build", "presentation": { "reveal": "always", "panel": "dedicated" }, "problemMatcher": [] }, { - "label": "Pytest (host venv)", + "label": "Dev: Build+Deploy UI", "type": "shell", - "command": "pytest -q", - "options": { - "env": { - "DATABASE_URL": "postgresql+psycopg://xmlsvc:xmlsvc@localhost:15433/xmlsvc", - "S3_ENDPOINT": "http://localhost:19000", - "S3_BUCKET": "xmlsvc", - "S3_ACCESS_KEY": "minioadmin", - "S3_SECRET_KEY": "minioadmin" - } - }, - "group": "test", + "command": "echo Building and deploying UI to backend static...", + "dependsOn": ["UI Build (vite prod)", "UI Deploy to backend static"], + "dependsOrder": "sequence", + "group": "build", "presentation": { "reveal": "always", "panel": "dedicated" }, "problemMatcher": [] } diff --git a/Dockerfile b/Dockerfile index a513f09..eeee253 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,14 @@ -# Minimal Dockerfile for the FastAPI app (Windows-friendly build) +### --- Stage 1: build frontend (React/Vite) --- +FROM node:20-alpine AS frontend-build +WORKDIR /frontend +# Copy only frontend to leverage Docker cache +COPY frontend/package.json frontend/package-lock.json ./ +RUN npm ci --no-audit --no-fund +COPY frontend/ ./ +# Build production assets (bundled, no CDN) +RUN npm run build + +### --- Stage 2: backend (FastAPI) --- FROM python:3.11-slim # Avoid interactive tzdata prompts, speed up pip @@ -17,5 +27,9 @@ RUN pip install -r requirements.txt # Copy app sources COPY app ./app +# Copy built frontend +# Result of Vite build goes to /frontend/dist; we place it under app/static +COPY --from=frontend-build /frontend/dist /app/app/static + EXPOSE 8000 CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/app/api/routes/schemas.py b/app/api/routes/schemas.py index ba1df4f..0609e0c 100644 --- a/app/api/routes/schemas.py +++ b/app/api/routes/schemas.py @@ -1,18 +1,8 @@ from datetime import datetime import os - -from fastapi import ( - APIRouter, - UploadFile, - File, - Depends, - Request, - HTTPException, -) -from fastapi.responses import HTMLResponse, RedirectResponse -from fastapi.templating import Jinja2Templates +from typing import Any, Dict, List, Optional +from fastapi import APIRouter, UploadFile, File, Depends, HTTPException from sqlalchemy.orm import Session - from app.db import get_db from app.models_sqlalchemy import Schema, SchemaType from app.services import schema_parser, schema_classifier @@ -20,55 +10,34 @@ router = APIRouter(prefix="/schemas", tags=["schemas"]) -from app.web.templates import templates - -# делаем доступной функцию now() для шаблонов -templates.env.globals["now"] = datetime.utcnow - MAX_UPLOAD_MB = int(os.getenv("MAX_UPLOAD_MB", "80")) - -@router.get("/", response_class=HTMLResponse) -def list_schemas( - request: Request, - db: Session = Depends(get_db), - type_id: int | None = None, -): - q = db.query(Schema).order_by(Schema.created_at.desc()) - if type_id and type_id!=0: - q = q.filter(Schema.type_id == type_id) - items = q.all() - - schema_types = db.query(SchemaType).order_by(SchemaType.title.asc()).all() - flash = request.query_params.get("msg") - return templates.TemplateResponse( - "schemas/list.html", - { - "request": request, - "items": items, - "flash": flash, - "schema_types": schema_types, - "selected_type_id": type_id, - }, - ) - - -@router.get("/upload", response_class=HTMLResponse) -def upload_form(request: Request): - return templates.TemplateResponse( - "schemas/upload.html", - {"request": request, "max_upload_mb": MAX_UPLOAD_MB}, - ) - - -@router.post("/upload", response_class=HTMLResponse) -async def upload_schema( - request: Request, - file: UploadFile = File(...), - db: Session = Depends(get_db), -): +def _row_to_dict(s: Schema) -> Dict[str, Any]: + return { + "id": s.id, + "name": s.name, + "version": s.version, + "namespace": s.namespace, + "description": s.description, + "file_path": s.file_path, + "created_at": s.created_at.isoformat() if getattr(s, "created_at", None) else None, + "type": { + "id": s.type.id, + "code": s.type.code, + "title": s.type.title, + } if getattr(s, "type", None) else None, + } + + +@router.get("/") +def list_schemas(db: Session = Depends(get_db)) -> List[Dict[str, Any]]: + items = db.query(Schema).order_by(Schema.created_at.desc()).all() + return [_row_to_dict(s) for s in items] + +@router.post("/upload") +async def upload_schema(file: UploadFile = File(...), db: Session = Depends(get_db)) -> Dict[str, Any]: # проверки - if not file.filename.lower().endswith(".xsd"): + if not (file.filename or "").lower().endswith(".xsd"): raise HTTPException(status_code=400, detail="Ожидается файл .xsd") content = await file.read() if len(content) > MAX_UPLOAD_MB * 1024 * 1024: @@ -106,22 +75,19 @@ async def upload_schema( db.commit() db.refresh(schema) - return RedirectResponse(url=f"/schemas/{schema.id}", status_code=303) + return {"saved": True, "schema": _row_to_dict(schema)} -@router.get("/{schema_id}", response_class=HTMLResponse) -def view_schema(schema_id: int, request: Request, db: Session = Depends(get_db)): +@router.get("/{schema_id}") +def view_schema(schema_id: int, db: Session = Depends(get_db)) -> Dict[str, Any]: schema = db.get(Schema, schema_id) if not schema: raise HTTPException(status_code=404, detail="Схема не найдена") - return templates.TemplateResponse( - "schemas/view.html", - {"request": request, "schema": schema}, - ) + return _row_to_dict(schema) @router.post("/{schema_id}/delete") -def delete_schema(schema_id: int, request: Request, db: Session = Depends(get_db)): +def delete_schema(schema_id: int, db: Session = Depends(get_db)) -> Dict[str, Any]: schema = db.get(Schema, schema_id) if not schema: raise HTTPException(status_code=404, detail="Схема не найдена") @@ -133,4 +99,4 @@ def delete_schema(schema_id: int, request: Request, db: Session = Depends(get_db db.delete(schema) db.commit() - return RedirectResponse(url="/schemas?msg=Схема%20удалена", status_code=303) + return {"deleted": True, "id": schema_id} diff --git a/app/main.py b/app/main.py index 8fcc9ad..c12c2cb 100644 --- a/app/main.py +++ b/app/main.py @@ -1,4 +1,7 @@ -from fastapi import FastAPI +from fastapi import FastAPI, HTTPException, UploadFile, File, APIRouter +from fastapi.staticfiles import StaticFiles +from starlette.responses import FileResponse, JSONResponse +from pathlib import Path from app.api.routes.health import router as health_router from app.api.routes.schemas import router as schemas_router from app.api.routes.schema_types import router as schema_types_router @@ -9,10 +12,50 @@ app = FastAPI(title="Минстрой XML Service (MVP)") -app.include_router(health_router, tags=["system"]) -app.include_router(schemas_router, tags=["schemas"]) -app.include_router(schema_types_router, tags=["schema-types"]) -app.include_router(documents_router, tags=["documents"]) -app.include_router(files_router, tags=["files"]) -app.include_router(rules_router, tags=["rules"]) -app.include_router(sign_router, tags=["sign"]) \ No newline at end of file +app.include_router(health_router, tags=["system"], prefix="/api") +app.include_router(schemas_router, tags=["schemas"], prefix="/api") +app.include_router(schema_types_router, tags=["schema-types"], prefix="/api") +app.include_router(documents_router, tags=["documents"], prefix="/api") +app.include_router(files_router, tags=["files"], prefix="/api") +app.include_router(rules_router, tags=["rules"], prefix="/api") +app.include_router(sign_router, tags=["sign"], prefix="/api") + +# --- SPA & API separation --- +BASE_DIR = Path(__file__).resolve().parent +SPA_DIR = BASE_DIR / "static" + +if SPA_DIR.is_dir(): + app.mount("/ui", StaticFiles(directory=SPA_DIR, html=True), name="ui") + # опционально оставляем прямой доступ к статике + app.mount("/static", StaticFiles(directory=SPA_DIR), name="static") +''' +# 1) JSON API под /api/* (простой роутер для фронта) +api = APIRouter(prefix="/api", tags=["api"]) +try: + # используем существующие сервисы реестра + from app.services.xsd_registry import list_schemas, save_schema_file # type: ignore +except Exception: + list_schemas = None + save_schema_file = None + +@api.get("/schemas") +def api_schemas_list(): + if not callable(list_schemas): + raise HTTPException(500, "list_schemas() is unavailable") + return JSONResponse(list_schemas()) + +@api.post("/schemas/upload") +async def api_schemas_upload(file: UploadFile = File(...)): + if not callable(save_schema_file): + raise HTTPException(500, "save_schema_file() is unavailable") + return JSONResponse(save_schema_file(file)) + +app.include_router(api) + +# 2) SPA раздаём из /ui (без перехвата /api/* и прочих серверных путей) +if SPA_DIR.is_dir(): + # html=True включает fallback на index.html только в префиксе /ui/* + app.mount("/ui", StaticFiles(directory=SPA_DIR, html=True), name="ui") + # при желании оставить прямой доступ к ассетам: + app.mount("/static", StaticFiles(directory=SPA_DIR), name="static") +''' \ No newline at end of file diff --git a/app/static/assets/index-C1fPBhUf.js b/app/static/assets/index-C1fPBhUf.js new file mode 100644 index 0000000..7564c3d --- /dev/null +++ b/app/static/assets/index-C1fPBhUf.js @@ -0,0 +1,95 @@ +function bd(e,t){for(var n=0;nr[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const l of i.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&r(l)}).observe(document,{childList:!0,subtree:!0});function n(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(o){if(o.ep)return;o.ep=!0;const i=n(o);fetch(o.href,i)}})();function ep(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var tp={exports:{}},bl={},np={exports:{}},ae={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var di=Symbol.for("react.element"),Fm=Symbol.for("react.portal"),Dm=Symbol.for("react.fragment"),Lm=Symbol.for("react.strict_mode"),Tm=Symbol.for("react.profiler"),Mm=Symbol.for("react.provider"),Om=Symbol.for("react.context"),Nm=Symbol.for("react.forward_ref"),Am=Symbol.for("react.suspense"),Im=Symbol.for("react.memo"),zm=Symbol.for("react.lazy"),qc=Symbol.iterator;function Vm(e){return e===null||typeof e!="object"?null:(e=qc&&e[qc]||e["@@iterator"],typeof e=="function"?e:null)}var rp={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},op=Object.assign,ip={};function uo(e,t,n){this.props=e,this.context=t,this.refs=ip,this.updater=n||rp}uo.prototype.isReactComponent={};uo.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};uo.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function lp(){}lp.prototype=uo.prototype;function _a(e,t,n){this.props=e,this.context=t,this.refs=ip,this.updater=n||rp}var Pa=_a.prototype=new lp;Pa.constructor=_a;op(Pa,uo.prototype);Pa.isPureReactComponent=!0;var Xc=Array.isArray,sp=Object.prototype.hasOwnProperty,ka={current:null},up={key:!0,ref:!0,__self:!0,__source:!0};function ap(e,t,n){var r,o={},i=null,l=null;if(t!=null)for(r in t.ref!==void 0&&(l=t.ref),t.key!==void 0&&(i=""+t.key),t)sp.call(t,r)&&!up.hasOwnProperty(r)&&(o[r]=t[r]);var s=arguments.length-2;if(s===1)o.children=n;else if(1>>1,ve=$[he];if(0>>1;heo(Ht,ee))zeo(ut,Ht)?($[he]=ut,$[ze]=ee,he=ze):($[he]=Ht,$[Ze]=ee,he=Ze);else if(zeo(ut,ee))$[he]=ut,$[ze]=ee,he=ze;else break e}}return B}function o($,B){var ee=$.sortIndex-B.sortIndex;return ee!==0?ee:$.id-B.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();e.unstable_now=function(){return l.now()-s}}var u=[],a=[],c=1,f=null,p=3,g=!1,m=!1,y=!1,E=typeof setTimeout=="function"?setTimeout:null,h=typeof clearTimeout=="function"?clearTimeout:null,d=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function v($){for(var B=n(a);B!==null;){if(B.callback===null)r(a);else if(B.startTime<=$)r(a),B.sortIndex=B.expirationTime,t(u,B);else break;B=n(a)}}function x($){if(y=!1,v($),!m)if(n(u)!==null)m=!0,Fe(F);else{var B=n(a);B!==null&&Ie(x,B.startTime-$)}}function F($,B){m=!1,y&&(y=!1,h(C),C=-1),g=!0;var ee=p;try{for(v(B),f=n(u);f!==null&&(!(f.expirationTime>B)||$&&!Y());){var he=f.callback;if(typeof he=="function"){f.callback=null,p=f.priorityLevel;var ve=he(f.expirationTime<=B);B=e.unstable_now(),typeof ve=="function"?f.callback=ve:f===n(u)&&r(u),v(B)}else r(u);f=n(u)}if(f!==null)var nt=!0;else{var Ze=n(a);Ze!==null&&Ie(x,Ze.startTime-B),nt=!1}return nt}finally{f=null,p=ee,g=!1}}var M=!1,A=null,C=-1,U=5,I=-1;function Y(){return!(e.unstable_now()-I$||125<$?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):U=0<$?Math.floor(1e3/$):5},e.unstable_getCurrentPriorityLevel=function(){return p},e.unstable_getFirstCallbackNode=function(){return n(u)},e.unstable_next=function($){switch(p){case 1:case 2:case 3:var B=3;break;default:B=p}var ee=p;p=B;try{return $()}finally{p=ee}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function($,B){switch($){case 1:case 2:case 3:case 4:case 5:break;default:$=3}var ee=p;p=$;try{return B()}finally{p=ee}},e.unstable_scheduleCallback=function($,B,ee){var he=e.unstable_now();switch(typeof ee=="object"&&ee!==null?(ee=ee.delay,ee=typeof ee=="number"&&0he?($.sortIndex=ee,t(a,$),n(u)===null&&$===n(a)&&(y?(h(C),C=-1):y=!0,Ie(x,ee-he))):($.sortIndex=ve,t(u,$),m||g||(m=!0,Fe(F))),$},e.unstable_shouldYield=Y,e.unstable_wrapCallback=function($){var B=p;return function(){var ee=p;p=B;try{return $.apply(this,arguments)}finally{p=ee}}}})(hp);pp.exports=hp;var Jm=pp.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Ym=T,Tt=Jm;function O(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),yu=Object.prototype.hasOwnProperty,Zm=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Yc={},Zc={};function bm(e){return yu.call(Zc,e)?!0:yu.call(Yc,e)?!1:Zm.test(e)?Zc[e]=!0:(Yc[e]=!0,!1)}function ev(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function tv(e,t,n,r){if(t===null||typeof t>"u"||ev(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function ht(e,t,n,r,o,i,l){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=l}var tt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){tt[e]=new ht(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];tt[t]=new ht(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){tt[e]=new ht(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){tt[e]=new ht(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){tt[e]=new ht(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){tt[e]=new ht(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){tt[e]=new ht(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){tt[e]=new ht(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){tt[e]=new ht(e,5,!1,e.toLowerCase(),null,!1,!1)});var Da=/[\-:]([a-z])/g;function La(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Da,La);tt[t]=new ht(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Da,La);tt[t]=new ht(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Da,La);tt[t]=new ht(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){tt[e]=new ht(e,1,!1,e.toLowerCase(),null,!1,!1)});tt.xlinkHref=new ht("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){tt[e]=new ht(e,1,!1,e.toLowerCase(),null,!0,!0)});function Ta(e,t,n,r){var o=tt.hasOwnProperty(t)?tt[t]:null;(o!==null?o.type!==0:r||!(2s||o[l]!==i[s]){var u=` +`+o[l].replace(" at new "," at ");return e.displayName&&u.includes("")&&(u=u.replace("",e.displayName)),u}while(1<=l&&0<=s);break}}}finally{Ts=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Lo(e):""}function nv(e){switch(e.tag){case 5:return Lo(e.type);case 16:return Lo("Lazy");case 13:return Lo("Suspense");case 19:return Lo("SuspenseList");case 0:case 2:case 15:return e=Ms(e.type,!1),e;case 11:return e=Ms(e.type.render,!1),e;case 1:return e=Ms(e.type,!0),e;default:return""}}function Ru(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Nr:return"Fragment";case Or:return"Portal";case wu:return"Profiler";case Ma:return"StrictMode";case Su:return"Suspense";case Cu:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case vp:return(e.displayName||"Context")+".Consumer";case mp:return(e._context.displayName||"Context")+".Provider";case Oa:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Na:return t=e.displayName||null,t!==null?t:Ru(e.type)||"Memo";case Nn:t=e._payload,e=e._init;try{return Ru(e(t))}catch{}}return null}function rv(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Ru(t);case 8:return t===Ma?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Yn(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function wp(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function ov(e){var t=wp(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(l){r=""+l,i.call(this,l)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(l){r=""+l},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function zi(e){e._valueTracker||(e._valueTracker=ov(e))}function Sp(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=wp(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Sl(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Eu(e,t){var n=t.checked;return Me({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function ef(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Yn(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Cp(e,t){t=t.checked,t!=null&&Ta(e,"checked",t,!1)}function xu(e,t){Cp(e,t);var n=Yn(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?_u(e,t.type,n):t.hasOwnProperty("defaultValue")&&_u(e,t.type,Yn(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function tf(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function _u(e,t,n){(t!=="number"||Sl(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var To=Array.isArray;function Qr(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o"+t.valueOf().toString()+"",t=Vi.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Qo(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Ao={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},iv=["Webkit","ms","Moz","O"];Object.keys(Ao).forEach(function(e){iv.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Ao[t]=Ao[e]})});function _p(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Ao.hasOwnProperty(e)&&Ao[e]?(""+t).trim():t+"px"}function Pp(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,o=_p(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}var lv=Me({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Fu(e,t){if(t){if(lv[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(O(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(O(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(O(61))}if(t.style!=null&&typeof t.style!="object")throw Error(O(62))}}function Du(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Lu=null;function Aa(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Tu=null,qr=null,Xr=null;function of(e){if(e=gi(e)){if(typeof Tu!="function")throw Error(O(280));var t=e.stateNode;t&&(t=os(t),Tu(e.stateNode,e.type,t))}}function kp(e){qr?Xr?Xr.push(e):Xr=[e]:qr=e}function Fp(){if(qr){var e=qr,t=Xr;if(Xr=qr=null,of(e),t)for(e=0;e>>=0,e===0?32:31-(vv(e)/yv|0)|0}var $i=64,ji=4194304;function Mo(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function xl(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,o=e.suspendedLanes,i=e.pingedLanes,l=n&268435455;if(l!==0){var s=l&~o;s!==0?r=Mo(s):(i&=l,i!==0&&(r=Mo(i)))}else l=n&~o,l!==0?r=Mo(l):i!==0&&(r=Mo(i));if(r===0)return 0;if(t!==0&&t!==r&&!(t&o)&&(o=r&-r,i=t&-t,o>=i||o===16&&(i&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function pi(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Zt(t),e[t]=n}function Rv(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=zo),hf=" ",gf=!1;function qp(e,t){switch(e){case"keyup":return Jv.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Xp(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ar=!1;function Zv(e,t){switch(e){case"compositionend":return Xp(t);case"keypress":return t.which!==32?null:(gf=!0,hf);case"textInput":return e=t.data,e===hf&&gf?null:e;default:return null}}function bv(e,t){if(Ar)return e==="compositionend"||!Ha&&qp(e,t)?(e=Kp(),ll=ja=$n=null,Ar=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=wf(n)}}function bp(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?bp(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function eh(){for(var e=window,t=Sl();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Sl(e.document)}return t}function Ga(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function uy(e){var t=eh(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&bp(n.ownerDocument.documentElement,n)){if(r!==null&&Ga(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var o=n.textContent.length,i=Math.min(r.start,o);r=r.end===void 0?i:Math.min(r.end,o),!e.extend&&i>r&&(o=r,r=i,i=o),o=Sf(n,i);var l=Sf(n,r);o&&l&&(e.rangeCount!==1||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==l.node||e.focusOffset!==l.offset)&&(t=t.createRange(),t.setStart(o.node,o.offset),e.removeAllRanges(),i>r?(e.addRange(t),e.extend(l.node,l.offset)):(t.setEnd(l.node,l.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Ir=null,zu=null,$o=null,Vu=!1;function Cf(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Vu||Ir==null||Ir!==Sl(r)||(r=Ir,"selectionStart"in r&&Ga(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),$o&&bo($o,r)||($o=r,r=kl(zu,"onSelect"),0$r||(e.current=Gu[$r],Gu[$r]=null,$r--)}function Ce(e,t){$r++,Gu[$r]=e.current,e.current=t}var Zn={},st=tr(Zn),wt=tr(!1),wr=Zn;function eo(e,t){var n=e.type.contextTypes;if(!n)return Zn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in n)o[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function St(e){return e=e.childContextTypes,e!=null}function Dl(){_e(wt),_e(st)}function Ff(e,t,n){if(st.current!==Zn)throw Error(O(168));Ce(st,t),Ce(wt,n)}function ah(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var o in r)if(!(o in t))throw Error(O(108,rv(e)||"Unknown",o));return Me({},n,r)}function Ll(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Zn,wr=st.current,Ce(st,e),Ce(wt,wt.current),!0}function Df(e,t,n){var r=e.stateNode;if(!r)throw Error(O(169));n?(e=ah(e,t,wr),r.__reactInternalMemoizedMergedChildContext=e,_e(wt),_e(st),Ce(st,e)):_e(wt),Ce(wt,n)}var yn=null,is=!1,Ks=!1;function ch(e){yn===null?yn=[e]:yn.push(e)}function Sy(e){is=!0,ch(e)}function nr(){if(!Ks&&yn!==null){Ks=!0;var e=0,t=me;try{var n=yn;for(me=1;e>=l,o-=l,wn=1<<32-Zt(t)+o|n<C?(U=A,A=null):U=A.sibling;var I=p(h,A,v[C],x);if(I===null){A===null&&(A=U);break}e&&A&&I.alternate===null&&t(h,A),d=i(I,d,C),M===null?F=I:M.sibling=I,M=I,A=U}if(C===v.length)return n(h,A),ke&&ur(h,C),F;if(A===null){for(;CC?(U=A,A=null):U=A.sibling;var Y=p(h,A,I.value,x);if(Y===null){A===null&&(A=U);break}e&&A&&Y.alternate===null&&t(h,A),d=i(Y,d,C),M===null?F=Y:M.sibling=Y,M=Y,A=U}if(I.done)return n(h,A),ke&&ur(h,C),F;if(A===null){for(;!I.done;C++,I=v.next())I=f(h,I.value,x),I!==null&&(d=i(I,d,C),M===null?F=I:M.sibling=I,M=I);return ke&&ur(h,C),F}for(A=r(h,A);!I.done;C++,I=v.next())I=g(A,h,C,I.value,x),I!==null&&(e&&I.alternate!==null&&A.delete(I.key===null?C:I.key),d=i(I,d,C),M===null?F=I:M.sibling=I,M=I);return e&&A.forEach(function(W){return t(h,W)}),ke&&ur(h,C),F}function E(h,d,v,x){if(typeof v=="object"&&v!==null&&v.type===Nr&&v.key===null&&(v=v.props.children),typeof v=="object"&&v!==null){switch(v.$$typeof){case Ii:e:{for(var F=v.key,M=d;M!==null;){if(M.key===F){if(F=v.type,F===Nr){if(M.tag===7){n(h,M.sibling),d=o(M,v.props.children),d.return=h,h=d;break e}}else if(M.elementType===F||typeof F=="object"&&F!==null&&F.$$typeof===Nn&&Mf(F)===M.type){n(h,M.sibling),d=o(M,v.props),d.ref=Co(h,M,v),d.return=h,h=d;break e}n(h,M);break}else t(h,M);M=M.sibling}v.type===Nr?(d=vr(v.props.children,h.mode,x,v.key),d.return=h,h=d):(x=hl(v.type,v.key,v.props,null,h.mode,x),x.ref=Co(h,d,v),x.return=h,h=x)}return l(h);case Or:e:{for(M=v.key;d!==null;){if(d.key===M)if(d.tag===4&&d.stateNode.containerInfo===v.containerInfo&&d.stateNode.implementation===v.implementation){n(h,d.sibling),d=o(d,v.children||[]),d.return=h,h=d;break e}else{n(h,d);break}else t(h,d);d=d.sibling}d=eu(v,h.mode,x),d.return=h,h=d}return l(h);case Nn:return M=v._init,E(h,d,M(v._payload),x)}if(To(v))return m(h,d,v,x);if(mo(v))return y(h,d,v,x);Qi(h,v)}return typeof v=="string"&&v!==""||typeof v=="number"?(v=""+v,d!==null&&d.tag===6?(n(h,d.sibling),d=o(d,v),d.return=h,h=d):(n(h,d),d=bs(v,h.mode,x),d.return=h,h=d),l(h)):n(h,d)}return E}var no=hh(!0),gh=hh(!1),Ol=tr(null),Nl=null,Br=null,qa=null;function Xa(){qa=Br=Nl=null}function Ja(e){var t=Ol.current;_e(Ol),e._currentValue=t}function Qu(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Yr(e,t){Nl=e,qa=Br=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(yt=!0),e.firstContext=null)}function Ut(e){var t=e._currentValue;if(qa!==e)if(e={context:e,memoizedValue:t,next:null},Br===null){if(Nl===null)throw Error(O(308));Br=e,Nl.dependencies={lanes:0,firstContext:e}}else Br=Br.next=e;return t}var dr=null;function Ya(e){dr===null?dr=[e]:dr.push(e)}function mh(e,t,n,r){var o=t.interleaved;return o===null?(n.next=n,Ya(t)):(n.next=o.next,o.next=n),t.interleaved=n,Pn(e,r)}function Pn(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var An=!1;function Za(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function vh(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Rn(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Qn(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,fe&2){var o=r.pending;return o===null?t.next=t:(t.next=o.next,o.next=t),r.pending=t,Pn(e,n)}return o=r.interleaved,o===null?(t.next=t,Ya(r)):(t.next=o.next,o.next=t),r.interleaved=t,Pn(e,n)}function ul(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,za(e,n)}}function Of(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var o=null,i=null;if(n=n.firstBaseUpdate,n!==null){do{var l={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};i===null?o=i=l:i=i.next=l,n=n.next}while(n!==null);i===null?o=i=t:i=i.next=t}else o=i=t;n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:i,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Al(e,t,n,r){var o=e.updateQueue;An=!1;var i=o.firstBaseUpdate,l=o.lastBaseUpdate,s=o.shared.pending;if(s!==null){o.shared.pending=null;var u=s,a=u.next;u.next=null,l===null?i=a:l.next=a,l=u;var c=e.alternate;c!==null&&(c=c.updateQueue,s=c.lastBaseUpdate,s!==l&&(s===null?c.firstBaseUpdate=a:s.next=a,c.lastBaseUpdate=u))}if(i!==null){var f=o.baseState;l=0,c=a=u=null,s=i;do{var p=s.lane,g=s.eventTime;if((r&p)===p){c!==null&&(c=c.next={eventTime:g,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var m=e,y=s;switch(p=t,g=n,y.tag){case 1:if(m=y.payload,typeof m=="function"){f=m.call(g,f,p);break e}f=m;break e;case 3:m.flags=m.flags&-65537|128;case 0:if(m=y.payload,p=typeof m=="function"?m.call(g,f,p):m,p==null)break e;f=Me({},f,p);break e;case 2:An=!0}}s.callback!==null&&s.lane!==0&&(e.flags|=64,p=o.effects,p===null?o.effects=[s]:p.push(s))}else g={eventTime:g,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},c===null?(a=c=g,u=f):c=c.next=g,l|=p;if(s=s.next,s===null){if(s=o.shared.pending,s===null)break;p=s,s=p.next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}while(!0);if(c===null&&(u=f),o.baseState=u,o.firstBaseUpdate=a,o.lastBaseUpdate=c,t=o.shared.interleaved,t!==null){o=t;do l|=o.lane,o=o.next;while(o!==t)}else i===null&&(o.shared.lanes=0);Rr|=l,e.lanes=l,e.memoizedState=f}}function Nf(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=qs.transition;qs.transition={};try{e(!1),t()}finally{me=n,qs.transition=r}}function Nh(){return Bt().memoizedState}function xy(e,t,n){var r=Xn(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Ah(e))Ih(t,n);else if(n=mh(e,t,n,r),n!==null){var o=dt();bt(n,e,r,o),zh(n,t,r)}}function _y(e,t,n){var r=Xn(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Ah(e))Ih(t,o);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var l=t.lastRenderedState,s=i(l,n);if(o.hasEagerState=!0,o.eagerState=s,tn(s,l)){var u=t.interleaved;u===null?(o.next=o,Ya(t)):(o.next=u.next,u.next=o),t.interleaved=o;return}}catch{}finally{}n=mh(e,t,o,r),n!==null&&(o=dt(),bt(n,e,r,o),zh(n,t,r))}}function Ah(e){var t=e.alternate;return e===Te||t!==null&&t===Te}function Ih(e,t){jo=zl=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function zh(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,za(e,n)}}var Vl={readContext:Ut,useCallback:rt,useContext:rt,useEffect:rt,useImperativeHandle:rt,useInsertionEffect:rt,useLayoutEffect:rt,useMemo:rt,useReducer:rt,useRef:rt,useState:rt,useDebugValue:rt,useDeferredValue:rt,useTransition:rt,useMutableSource:rt,useSyncExternalStore:rt,useId:rt,unstable_isNewReconciler:!1},Py={readContext:Ut,useCallback:function(e,t){return ln().memoizedState=[e,t===void 0?null:t],e},useContext:Ut,useEffect:If,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,cl(4194308,4,Dh.bind(null,t,e),n)},useLayoutEffect:function(e,t){return cl(4194308,4,e,t)},useInsertionEffect:function(e,t){return cl(4,2,e,t)},useMemo:function(e,t){var n=ln();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=ln();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=xy.bind(null,Te,e),[r.memoizedState,e]},useRef:function(e){var t=ln();return e={current:e},t.memoizedState=e},useState:Af,useDebugValue:lc,useDeferredValue:function(e){return ln().memoizedState=e},useTransition:function(){var e=Af(!1),t=e[0];return e=Ey.bind(null,e[1]),ln().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Te,o=ln();if(ke){if(n===void 0)throw Error(O(407));n=n()}else{if(n=t(),Ye===null)throw Error(O(349));Cr&30||Ch(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,If(Eh.bind(null,r,i,e),[e]),r.flags|=2048,si(9,Rh.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=ln(),t=Ye.identifierPrefix;if(ke){var n=Sn,r=wn;n=(r&~(1<<32-Zt(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=ii++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),n==="select"&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[un]=t,e[ni]=r,Qh(e,t,!1,!1),t.stateNode=e;e:{switch(l=Du(n,r),n){case"dialog":Ee("cancel",e),Ee("close",e),o=r;break;case"iframe":case"object":case"embed":Ee("load",e),o=r;break;case"video":case"audio":for(o=0;oio&&(t.flags|=128,r=!0,Ro(i,!1),t.lanes=4194304)}else{if(!r)if(e=Il(l),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Ro(i,!0),i.tail===null&&i.tailMode==="hidden"&&!l.alternate&&!ke)return ot(t),null}else 2*$e()-i.renderingStartTime>io&&n!==1073741824&&(t.flags|=128,r=!0,Ro(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(n=i.last,n!==null?n.sibling=l:t.child=l,i.last=l)}return i.tail!==null?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=$e(),t.sibling=null,n=Le.current,Ce(Le,r?n&1|2:n&1),t):(ot(t),null);case 22:case 23:return dc(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Pt&1073741824&&(ot(t),t.subtreeFlags&6&&(t.flags|=8192)):ot(t),null;case 24:return null;case 25:return null}throw Error(O(156,t.tag))}function Ny(e,t){switch(Ka(t),t.tag){case 1:return St(t.type)&&Dl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ro(),_e(wt),_e(st),tc(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return ec(t),null;case 13:if(_e(Le),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(O(340));to()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return _e(Le),null;case 4:return ro(),null;case 10:return Ja(t.type._context),null;case 22:case 23:return dc(),null;case 24:return null;default:return null}}var Xi=!1,lt=!1,Ay=typeof WeakSet=="function"?WeakSet:Set,G=null;function Hr(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Ae(e,t,r)}else n.current=null}function na(e,t,n){try{n()}catch(r){Ae(e,t,r)}}var Qf=!1;function Iy(e,t){if($u=_l,e=eh(),Ga(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch{n=null;break e}var l=0,s=-1,u=-1,a=0,c=0,f=e,p=null;t:for(;;){for(var g;f!==n||o!==0&&f.nodeType!==3||(s=l+o),f!==i||r!==0&&f.nodeType!==3||(u=l+r),f.nodeType===3&&(l+=f.nodeValue.length),(g=f.firstChild)!==null;)p=f,f=g;for(;;){if(f===e)break t;if(p===n&&++a===o&&(s=l),p===i&&++c===r&&(u=l),(g=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=g}n=s===-1||u===-1?null:{start:s,end:u}}else n=null}n=n||{start:0,end:0}}else n=null;for(ju={focusedElem:e,selectionRange:n},_l=!1,G=t;G!==null;)if(t=G,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,G=e;else for(;G!==null;){t=G;try{var m=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(m!==null){var y=m.memoizedProps,E=m.memoizedState,h=t.stateNode,d=h.getSnapshotBeforeUpdate(t.elementType===t.type?y:Qt(t.type,y),E);h.__reactInternalSnapshotBeforeUpdate=d}break;case 3:var v=t.stateNode.containerInfo;v.nodeType===1?v.textContent="":v.nodeType===9&&v.documentElement&&v.removeChild(v.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(O(163))}}catch(x){Ae(t,t.return,x)}if(e=t.sibling,e!==null){e.return=t.return,G=e;break}G=t.return}return m=Qf,Qf=!1,m}function Uo(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var o=r=r.next;do{if((o.tag&e)===e){var i=o.destroy;o.destroy=void 0,i!==void 0&&na(t,n,i)}o=o.next}while(o!==r)}}function us(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function ra(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Jh(e){var t=e.alternate;t!==null&&(e.alternate=null,Jh(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[un],delete t[ni],delete t[Hu],delete t[yy],delete t[wy])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Yh(e){return e.tag===5||e.tag===3||e.tag===4}function qf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Yh(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function oa(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Fl));else if(r!==4&&(e=e.child,e!==null))for(oa(e,t,n),e=e.sibling;e!==null;)oa(e,t,n),e=e.sibling}function ia(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(ia(e,t,n),e=e.sibling;e!==null;)ia(e,t,n),e=e.sibling}var be=null,qt=!1;function Tn(e,t,n){for(n=n.child;n!==null;)Zh(e,t,n),n=n.sibling}function Zh(e,t,n){if(cn&&typeof cn.onCommitFiberUnmount=="function")try{cn.onCommitFiberUnmount(es,n)}catch{}switch(n.tag){case 5:lt||Hr(n,t);case 6:var r=be,o=qt;be=null,Tn(e,t,n),be=r,qt=o,be!==null&&(qt?(e=be,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):be.removeChild(n.stateNode));break;case 18:be!==null&&(qt?(e=be,n=n.stateNode,e.nodeType===8?Ws(e.parentNode,n):e.nodeType===1&&Ws(e,n),Yo(e)):Ws(be,n.stateNode));break;case 4:r=be,o=qt,be=n.stateNode.containerInfo,qt=!0,Tn(e,t,n),be=r,qt=o;break;case 0:case 11:case 14:case 15:if(!lt&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){o=r=r.next;do{var i=o,l=i.destroy;i=i.tag,l!==void 0&&(i&2||i&4)&&na(n,t,l),o=o.next}while(o!==r)}Tn(e,t,n);break;case 1:if(!lt&&(Hr(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){Ae(n,t,s)}Tn(e,t,n);break;case 21:Tn(e,t,n);break;case 22:n.mode&1?(lt=(r=lt)||n.memoizedState!==null,Tn(e,t,n),lt=r):Tn(e,t,n);break;default:Tn(e,t,n)}}function Xf(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Ay),t.forEach(function(r){var o=Wy.bind(null,e,r);n.has(r)||(n.add(r),r.then(o,o))})}}function Kt(e,t){var n=t.deletions;if(n!==null)for(var r=0;ro&&(o=l),r&=~i}if(r=o,r=$e()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Vy(r/1960))-r,10e?16:e,jn===null)var r=!1;else{if(e=jn,jn=null,Ul=0,fe&6)throw Error(O(331));var o=fe;for(fe|=4,G=e.current;G!==null;){var i=G,l=i.child;if(G.flags&16){var s=i.deletions;if(s!==null){for(var u=0;u$e()-cc?mr(e,0):ac|=n),Ct(e,t)}function lg(e,t){t===0&&(e.mode&1?(t=ji,ji<<=1,!(ji&130023424)&&(ji=4194304)):t=1);var n=dt();e=Pn(e,t),e!==null&&(pi(e,t,n),Ct(e,n))}function Gy(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),lg(e,n)}function Wy(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;o!==null&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(O(314))}r!==null&&r.delete(t),lg(e,n)}var sg;sg=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||wt.current)yt=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return yt=!1,My(e,t,n);yt=!!(e.flags&131072)}else yt=!1,ke&&t.flags&1048576&&fh(t,Ml,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;fl(e,t),e=t.pendingProps;var o=eo(t,st.current);Yr(t,n),o=rc(null,t,r,e,o,n);var i=oc();return t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,St(r)?(i=!0,Ll(t)):i=!1,t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,Za(t),o.updater=ss,t.stateNode=o,o._reactInternals=t,Xu(t,r,e,n),t=Zu(null,t,r,!0,i,n)):(t.tag=0,ke&&i&&Wa(t),ct(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(fl(e,t),e=t.pendingProps,o=r._init,r=o(r._payload),t.type=r,o=t.tag=Qy(r),e=Qt(r,e),o){case 0:t=Yu(null,t,r,e,n);break e;case 1:t=Gf(null,t,r,e,n);break e;case 11:t=Bf(null,t,r,e,n);break e;case 14:t=Hf(null,t,r,Qt(r.type,e),n);break e}throw Error(O(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Qt(r,o),Yu(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Qt(r,o),Gf(e,t,r,o,n);case 3:e:{if(Gh(t),e===null)throw Error(O(387));r=t.pendingProps,i=t.memoizedState,o=i.element,vh(e,t),Al(t,r,null,n);var l=t.memoizedState;if(r=l.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:l.cache,pendingSuspenseBoundaries:l.pendingSuspenseBoundaries,transitions:l.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){o=oo(Error(O(423)),t),t=Wf(e,t,r,n,o);break e}else if(r!==o){o=oo(Error(O(424)),t),t=Wf(e,t,r,n,o);break e}else for(Ft=Kn(t.stateNode.containerInfo.firstChild),Dt=t,ke=!0,Jt=null,n=gh(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(to(),r===o){t=kn(e,t,n);break e}ct(e,t,r,n)}t=t.child}return t;case 5:return yh(t),e===null&&Ku(t),r=t.type,o=t.pendingProps,i=e!==null?e.memoizedProps:null,l=o.children,Uu(r,o)?l=null:i!==null&&Uu(r,i)&&(t.flags|=32),Hh(e,t),ct(e,t,l,n),t.child;case 6:return e===null&&Ku(t),null;case 13:return Wh(e,t,n);case 4:return ba(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=no(t,null,r,n):ct(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Qt(r,o),Bf(e,t,r,o,n);case 7:return ct(e,t,t.pendingProps,n),t.child;case 8:return ct(e,t,t.pendingProps.children,n),t.child;case 12:return ct(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,l=o.value,Ce(Ol,r._currentValue),r._currentValue=l,i!==null)if(tn(i.value,l)){if(i.children===o.children&&!wt.current){t=kn(e,t,n);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var s=i.dependencies;if(s!==null){l=i.child;for(var u=s.firstContext;u!==null;){if(u.context===r){if(i.tag===1){u=Rn(-1,n&-n),u.tag=2;var a=i.updateQueue;if(a!==null){a=a.shared;var c=a.pending;c===null?u.next=u:(u.next=c.next,c.next=u),a.pending=u}}i.lanes|=n,u=i.alternate,u!==null&&(u.lanes|=n),Qu(i.return,n,t),s.lanes|=n;break}u=u.next}}else if(i.tag===10)l=i.type===t.type?null:i.child;else if(i.tag===18){if(l=i.return,l===null)throw Error(O(341));l.lanes|=n,s=l.alternate,s!==null&&(s.lanes|=n),Qu(l,n,t),l=i.sibling}else l=i.child;if(l!==null)l.return=i;else for(l=i;l!==null;){if(l===t){l=null;break}if(i=l.sibling,i!==null){i.return=l.return,l=i;break}l=l.return}i=l}ct(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,Yr(t,n),o=Ut(o),r=r(o),t.flags|=1,ct(e,t,r,n),t.child;case 14:return r=t.type,o=Qt(r,t.pendingProps),o=Qt(r.type,o),Hf(e,t,r,o,n);case 15:return Uh(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Qt(r,o),fl(e,t),t.tag=1,St(r)?(e=!0,Ll(t)):e=!1,Yr(t,n),Vh(t,r,o),Xu(t,r,o,n),Zu(null,t,r,!0,e,n);case 19:return Kh(e,t,n);case 22:return Bh(e,t,n)}throw Error(O(156,t.tag))};function ug(e,t){return Ap(e,t)}function Ky(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function $t(e,t,n,r){return new Ky(e,t,n,r)}function hc(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Qy(e){if(typeof e=="function")return hc(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Oa)return 11;if(e===Na)return 14}return 2}function Jn(e,t){var n=e.alternate;return n===null?(n=$t(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function hl(e,t,n,r,o,i){var l=2;if(r=e,typeof e=="function")hc(e)&&(l=1);else if(typeof e=="string")l=5;else e:switch(e){case Nr:return vr(n.children,o,i,t);case Ma:l=8,o|=8;break;case wu:return e=$t(12,n,t,o|2),e.elementType=wu,e.lanes=i,e;case Su:return e=$t(13,n,t,o),e.elementType=Su,e.lanes=i,e;case Cu:return e=$t(19,n,t,o),e.elementType=Cu,e.lanes=i,e;case yp:return cs(n,o,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case mp:l=10;break e;case vp:l=9;break e;case Oa:l=11;break e;case Na:l=14;break e;case Nn:l=16,r=null;break e}throw Error(O(130,e==null?e:typeof e,""))}return t=$t(l,n,t,o),t.elementType=e,t.type=r,t.lanes=i,t}function vr(e,t,n,r){return e=$t(7,e,r,t),e.lanes=n,e}function cs(e,t,n,r){return e=$t(22,e,r,t),e.elementType=yp,e.lanes=n,e.stateNode={isHidden:!1},e}function bs(e,t,n){return e=$t(6,e,null,t),e.lanes=n,e}function eu(e,t,n){return t=$t(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function qy(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Ns(0),this.expirationTimes=Ns(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ns(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function gc(e,t,n,r,o,i,l,s,u){return e=new qy(e,t,n,s,u),t===1?(t=1,i===!0&&(t|=8)):t=0,i=$t(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Za(i),e}function Xy(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(dg)}catch(e){console.error(e)}}dg(),dp.exports=Ot;var wc=dp.exports;const e0=ep(wc),t0=bd({__proto__:null,default:e0},[wc]);var pg,rd=wc;pg=rd.createRoot,rd.hydrateRoot;/** + * @remix-run/router v1.19.2 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function De(){return De=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function lo(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function r0(){return Math.random().toString(36).substr(2,8)}function ld(e,t){return{usr:e.state,key:e.key,idx:t}}function ai(e,t,n,r){return n===void 0&&(n=null),De({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?rr(t):t,{state:n,key:t&&t.key||r||r0()})}function xr(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&n!=="?"&&(t+=n.charAt(0)==="?"?n:"?"+n),r&&r!=="#"&&(t+=r.charAt(0)==="#"?r:"#"+r),t}function rr(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function o0(e,t,n,r){r===void 0&&(r={});let{window:o=document.defaultView,v5Compat:i=!1}=r,l=o.history,s=Be.Pop,u=null,a=c();a==null&&(a=0,l.replaceState(De({},l.state,{idx:a}),""));function c(){return(l.state||{idx:null}).idx}function f(){s=Be.Pop;let E=c(),h=E==null?null:E-a;a=E,u&&u({action:s,location:y.location,delta:h})}function p(E,h){s=Be.Push;let d=ai(y.location,E,h);a=c()+1;let v=ld(d,a),x=y.createHref(d);try{l.pushState(v,"",x)}catch(F){if(F instanceof DOMException&&F.name==="DataCloneError")throw F;o.location.assign(x)}i&&u&&u({action:s,location:y.location,delta:1})}function g(E,h){s=Be.Replace;let d=ai(y.location,E,h);a=c();let v=ld(d,a),x=y.createHref(d);l.replaceState(v,"",x),i&&u&&u({action:s,location:y.location,delta:0})}function m(E){let h=o.location.origin!=="null"?o.location.origin:o.location.href,d=typeof E=="string"?E:xr(E);return d=d.replace(/ $/,"%20"),ue(h,"No window.location.(origin|href) available to create URL for href: "+d),new URL(d,h)}let y={get action(){return s},get location(){return e(o,l)},listen(E){if(u)throw new Error("A history only accepts one active listener");return o.addEventListener(od,f),u=E,()=>{o.removeEventListener(od,f),u=null}},createHref(E){return t(o,E)},createURL:m,encodeLocation(E){let h=m(E);return{pathname:h.pathname,search:h.search,hash:h.hash}},push:p,replace:g,go(E){return l.go(E)}};return y}var ye;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(ye||(ye={}));const i0=new Set(["lazy","caseSensitive","path","id","index","children"]);function l0(e){return e.index===!0}function ci(e,t,n,r){return n===void 0&&(n=[]),r===void 0&&(r={}),e.map((o,i)=>{let l=[...n,String(i)],s=typeof o.id=="string"?o.id:l.join("-");if(ue(o.index!==!0||!o.children,"Cannot specify children on an index route"),ue(!r[s],'Found a route id collision on id "'+s+`". Route id's must be globally unique within Data Router usages`),l0(o)){let u=De({},o,t(o),{id:s});return r[s]=u,u}else{let u=De({},o,t(o),{id:s,children:void 0});return r[s]=u,o.children&&(u.children=ci(o.children,t,l,r)),u}})}function cr(e,t,n){return n===void 0&&(n="/"),gl(e,t,n,!1)}function gl(e,t,n,r){let o=typeof t=="string"?rr(t):t,i=Fn(o.pathname||"/",n);if(i==null)return null;let l=hg(e);u0(l);let s=null;for(let u=0;s==null&&u{let u={relativePath:s===void 0?i.path||"":s,caseSensitive:i.caseSensitive===!0,childrenIndex:l,route:i};u.relativePath.startsWith("/")&&(ue(u.relativePath.startsWith(r),'Absolute route path "'+u.relativePath+'" nested under path '+('"'+r+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),u.relativePath=u.relativePath.slice(r.length));let a=En([r,u.relativePath]),c=n.concat(u);i.children&&i.children.length>0&&(ue(i.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+a+'".')),hg(i.children,t,c,a)),!(i.path==null&&!i.index)&&t.push({path:a,score:g0(a,i.index),routesMeta:c})};return e.forEach((i,l)=>{var s;if(i.path===""||!((s=i.path)!=null&&s.includes("?")))o(i,l);else for(let u of gg(i.path))o(i,l,u)}),t}function gg(e){let t=e.split("/");if(t.length===0)return[];let[n,...r]=t,o=n.endsWith("?"),i=n.replace(/\?$/,"");if(r.length===0)return o?[i,""]:[i];let l=gg(r.join("/")),s=[];return s.push(...l.map(u=>u===""?i:[i,u].join("/"))),o&&s.push(...l),s.map(u=>e.startsWith("/")&&u===""?"/":u)}function u0(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:m0(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}const a0=/^:[\w-]+$/,c0=3,f0=2,d0=1,p0=10,h0=-2,sd=e=>e==="*";function g0(e,t){let n=e.split("/"),r=n.length;return n.some(sd)&&(r+=h0),t&&(r+=f0),n.filter(o=>!sd(o)).reduce((o,i)=>o+(a0.test(i)?c0:i===""?d0:p0),r)}function m0(e,t){return e.length===t.length&&e.slice(0,-1).every((r,o)=>r===t[o])?e[e.length-1]-t[t.length-1]:0}function v0(e,t,n){n===void 0&&(n=!1);let{routesMeta:r}=e,o={},i="/",l=[];for(let s=0;s{let{paramName:p,isOptional:g}=c;if(p==="*"){let y=s[f]||"";l=i.slice(0,i.length-y.length).replace(/(.)\/+$/,"$1")}const m=s[f];return g&&!m?a[p]=void 0:a[p]=(m||"").replace(/%2F/g,"/"),a},{}),pathname:i,pathnameBase:l,pattern:e}}function y0(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!0),lo(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let r=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(l,s,u)=>(r.push({paramName:s,isOptional:u!=null}),u?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(r.push({paramName:"*"}),o+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":e!==""&&e!=="/"&&(o+="(?:(?=\\/|$))"),[new RegExp(o,t?void 0:"i"),r]}function w0(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return lo(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function Fn(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&r!=="/"?null:e.slice(n)||"/"}function S0(e,t){t===void 0&&(t="/");let{pathname:n,search:r="",hash:o=""}=typeof e=="string"?rr(e):e;return{pathname:n?n.startsWith("/")?n:C0(n,t):t,search:E0(r),hash:x0(o)}}function C0(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(o=>{o===".."?n.length>1&&n.pop():o!=="."&&n.push(o)}),n.length>1?n.join("/"):"/"}function tu(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the ")+("`to."+n+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function mg(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function Sc(e,t){let n=mg(e);return t?n.map((r,o)=>o===n.length-1?r.pathname:r.pathnameBase):n.map(r=>r.pathnameBase)}function Cc(e,t,n,r){r===void 0&&(r=!1);let o;typeof e=="string"?o=rr(e):(o=De({},e),ue(!o.pathname||!o.pathname.includes("?"),tu("?","pathname","search",o)),ue(!o.pathname||!o.pathname.includes("#"),tu("#","pathname","hash",o)),ue(!o.search||!o.search.includes("#"),tu("#","search","hash",o)));let i=e===""||o.pathname==="",l=i?"/":o.pathname,s;if(l==null)s=n;else{let f=t.length-1;if(!r&&l.startsWith("..")){let p=l.split("/");for(;p[0]==="..";)p.shift(),f-=1;o.pathname=p.join("/")}s=f>=0?t[f]:"/"}let u=S0(o,s),a=l&&l!=="/"&&l.endsWith("/"),c=(i||l===".")&&n.endsWith("/");return!u.pathname.endsWith("/")&&(a||c)&&(u.pathname+="/"),u}const En=e=>e.join("/").replace(/\/\/+/g,"/"),R0=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),E0=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,x0=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;class Wl{constructor(t,n,r,o){o===void 0&&(o=!1),this.status=t,this.statusText=n||"",this.internal=o,r instanceof Error?(this.data=r.toString(),this.error=r):this.data=r}}function gs(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const vg=["post","put","patch","delete"],_0=new Set(vg),P0=["get",...vg],k0=new Set(P0),F0=new Set([301,302,303,307,308]),D0=new Set([307,308]),nu={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},L0={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},xo={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},Rc=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,T0=e=>({hasErrorBoundary:!!e.hasErrorBoundary}),yg="remix-router-transitions";function M0(e){const t=e.window?e.window:typeof window<"u"?window:void 0,n=typeof t<"u"&&typeof t.document<"u"&&typeof t.document.createElement<"u",r=!n;ue(e.routes.length>0,"You must provide a non-empty routes array to createRouter");let o;if(e.mapRouteProperties)o=e.mapRouteProperties;else if(e.detectErrorBoundary){let S=e.detectErrorBoundary;o=R=>({hasErrorBoundary:S(R)})}else o=T0;let i={},l=ci(e.routes,o,void 0,i),s,u=e.basename||"/",a=e.unstable_dataStrategy||V0,c=e.unstable_patchRoutesOnNavigation,f=De({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_partialHydration:!1,v7_prependBasename:!1,v7_relativeSplatPath:!1,v7_skipActionErrorRevalidation:!1},e.future),p=null,g=new Set,m=1e3,y=new Set,E=null,h=null,d=null,v=e.hydrationData!=null,x=cr(l,e.history.location,u),F=null;if(x==null&&!c){let S=at(404,{pathname:e.history.location.pathname}),{matches:R,route:P}=md(l);x=R,F={[P.id]:S}}x&&!e.hydrationData&&Di(x,l,e.history.location.pathname).active&&(x=null);let M;if(x)if(x.some(S=>S.route.lazy))M=!1;else if(!x.some(S=>S.route.loader))M=!0;else if(f.v7_partialHydration){let S=e.hydrationData?e.hydrationData.loaderData:null,R=e.hydrationData?e.hydrationData.errors:null,P=L=>L.route.loader?typeof L.route.loader=="function"&&L.route.loader.hydrate===!0?!1:S&&S[L.route.id]!==void 0||R&&R[L.route.id]!==void 0:!0;if(R){let L=x.findIndex(H=>R[H.route.id]!==void 0);M=x.slice(0,L+1).every(P)}else M=x.every(P)}else M=e.hydrationData!=null;else if(M=!1,x=[],f.v7_partialHydration){let S=Di(null,l,e.history.location.pathname);S.active&&S.matches&&(x=S.matches)}let A,C={historyAction:e.history.action,location:e.history.location,matches:x,initialized:M,navigation:nu,restoreScrollPosition:e.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:e.hydrationData&&e.hydrationData.loaderData||{},actionData:e.hydrationData&&e.hydrationData.actionData||null,errors:e.hydrationData&&e.hydrationData.errors||F,fetchers:new Map,blockers:new Map},U=Be.Pop,I=!1,Y,W=!1,Z=new Map,oe=null,we=!1,Fe=!1,Ie=[],$=new Set,B=new Map,ee=0,he=-1,ve=new Map,nt=new Set,Ze=new Map,Ht=new Map,ze=new Set,ut=new Map,Gt=new Map,Ei=new Map,Fr;function xi(){if(p=e.history.listen(S=>{let{action:R,location:P,delta:L}=S;if(Fr){Fr(),Fr=void 0;return}lo(Gt.size===0||L!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let H=Hc({currentLocation:C.location,nextLocation:P,historyAction:R});if(H&&L!=null){let J=new Promise(re=>{Fr=re});e.history.go(L*-1),ki(H,{state:"blocked",location:P,proceed(){ki(H,{state:"proceeding",proceed:void 0,reset:void 0,location:P}),J.then(()=>e.history.go(L))},reset(){let re=new Map(C.blockers);re.set(H,xo),qe({blockers:re})}});return}return w(R,P)}),n){b0(t,Z);let S=()=>ew(t,Z);t.addEventListener("pagehide",S),oe=()=>t.removeEventListener("pagehide",S)}return C.initialized||w(Be.Pop,C.location,{initialHydration:!0}),A}function xs(){p&&p(),oe&&oe(),g.clear(),Y&&Y.abort(),C.fetchers.forEach((S,R)=>sr(R)),C.blockers.forEach((S,R)=>Bc(R))}function _i(S){return g.add(S),()=>g.delete(S)}function qe(S,R){R===void 0&&(R={}),C=De({},C,S);let P=[],L=[];f.v7_fetcherPersist&&C.fetchers.forEach((H,J)=>{H.state==="idle"&&(ze.has(J)?L.push(J):P.push(J))}),[...g].forEach(H=>H(C,{deletedFetchers:L,unstable_viewTransitionOpts:R.viewTransitionOpts,unstable_flushSync:R.flushSync===!0})),f.v7_fetcherPersist&&(P.forEach(H=>C.fetchers.delete(H)),L.forEach(H=>sr(H)))}function lr(S,R,P){var L,H;let{flushSync:J}=P===void 0?{}:P,re=C.actionData!=null&&C.navigation.formMethod!=null&&Xt(C.navigation.formMethod)&&C.navigation.state==="loading"&&((L=S.state)==null?void 0:L._isRedirect)!==!0,V;R.actionData?Object.keys(R.actionData).length>0?V=R.actionData:V=null:re?V=C.actionData:V=null;let b=R.loaderData?hd(C.loaderData,R.loaderData,R.matches||[],R.errors):C.loaderData,Q=C.blockers;Q.size>0&&(Q=new Map(Q),Q.forEach((ge,Re)=>Q.set(Re,xo)));let q=I===!0||C.navigation.formMethod!=null&&Xt(C.navigation.formMethod)&&((H=S.state)==null?void 0:H._isRedirect)!==!0;s&&(l=s,s=void 0),we||U===Be.Pop||(U===Be.Push?e.history.push(S,S.state):U===Be.Replace&&e.history.replace(S,S.state));let pe;if(U===Be.Pop){let ge=Z.get(C.location.pathname);ge&&ge.has(S.pathname)?pe={currentLocation:C.location,nextLocation:S}:Z.has(S.pathname)&&(pe={currentLocation:S,nextLocation:C.location})}else if(W){let ge=Z.get(C.location.pathname);ge?ge.add(S.pathname):(ge=new Set([S.pathname]),Z.set(C.location.pathname,ge)),pe={currentLocation:C.location,nextLocation:S}}qe(De({},R,{actionData:V,loaderData:b,historyAction:U,location:S,initialized:!0,navigation:nu,revalidation:"idle",restoreScrollPosition:Wc(S,R.matches||C.matches),preventScrollReset:q,blockers:Q}),{viewTransitionOpts:pe,flushSync:J===!0}),U=Be.Pop,I=!1,W=!1,we=!1,Fe=!1,Ie=[]}async function _s(S,R){if(typeof S=="number"){e.history.go(S);return}let P=ca(C.location,C.matches,u,f.v7_prependBasename,S,f.v7_relativeSplatPath,R==null?void 0:R.fromRouteId,R==null?void 0:R.relative),{path:L,submission:H,error:J}=ud(f.v7_normalizeFormMethod,!1,P,R),re=C.location,V=ai(C.location,L,R&&R.state);V=De({},V,e.history.encodeLocation(V));let b=R&&R.replace!=null?R.replace:void 0,Q=Be.Push;b===!0?Q=Be.Replace:b===!1||H!=null&&Xt(H.formMethod)&&H.formAction===C.location.pathname+C.location.search&&(Q=Be.Replace);let q=R&&"preventScrollReset"in R?R.preventScrollReset===!0:void 0,pe=(R&&R.unstable_flushSync)===!0,ge=Hc({currentLocation:re,nextLocation:V,historyAction:Q});if(ge){ki(ge,{state:"blocked",location:V,proceed(){ki(ge,{state:"proceeding",proceed:void 0,reset:void 0,location:V}),_s(S,R)},reset(){let Re=new Map(C.blockers);Re.set(ge,xo),qe({blockers:Re})}});return}return await w(Q,V,{submission:H,pendingError:J,preventScrollReset:q,replace:R&&R.replace,enableViewTransition:R&&R.unstable_viewTransition,flushSync:pe})}function Vc(){if(ho(),qe({revalidation:"loading"}),C.navigation.state!=="submitting"){if(C.navigation.state==="idle"){w(C.historyAction,C.location,{startUninterruptedRevalidation:!0});return}w(U||C.historyAction,C.navigation.location,{overrideNavigation:C.navigation,enableViewTransition:W===!0})}}async function w(S,R,P){Y&&Y.abort(),Y=null,U=S,we=(P&&P.startUninterruptedRevalidation)===!0,xm(C.location,C.matches),I=(P&&P.preventScrollReset)===!0,W=(P&&P.enableViewTransition)===!0;let L=s||l,H=P&&P.overrideNavigation,J=cr(L,R,u),re=(P&&P.flushSync)===!0,V=Di(J,L,R.pathname);if(V.active&&V.matches&&(J=V.matches),!J){let{error:ce,notFoundMatches:Xe,route:Ue}=ks(R.pathname);lr(R,{matches:Xe,loaderData:{},errors:{[Ue.id]:ce}},{flushSync:re});return}if(C.initialized&&!Fe&&G0(C.location,R)&&!(P&&P.submission&&Xt(P.submission.formMethod))){lr(R,{matches:J},{flushSync:re});return}Y=new AbortController;let b=Tr(e.history,R,Y.signal,P&&P.submission),Q;if(P&&P.pendingError)Q=[Wr(J).route.id,{type:ye.error,error:P.pendingError}];else if(P&&P.submission&&Xt(P.submission.formMethod)){let ce=await _(b,R,P.submission,J,V.active,{replace:P.replace,flushSync:re});if(ce.shortCircuited)return;if(ce.pendingActionResult){let[Xe,Ue]=ce.pendingActionResult;if(kt(Ue)&&gs(Ue.error)&&Ue.error.status===404){Y=null,lr(R,{matches:ce.matches,loaderData:{},errors:{[Xe]:Ue.error}});return}}J=ce.matches||J,Q=ce.pendingActionResult,H=ru(R,P.submission),re=!1,V.active=!1,b=Tr(e.history,b.url,b.signal)}let{shortCircuited:q,matches:pe,loaderData:ge,errors:Re}=await D(b,R,J,V.active,H,P&&P.submission,P&&P.fetcherSubmission,P&&P.replace,P&&P.initialHydration===!0,re,Q);q||(Y=null,lr(R,De({matches:pe||J},gd(Q),{loaderData:ge,errors:Re})))}async function _(S,R,P,L,H,J){J===void 0&&(J={}),ho();let re=Y0(R,P);if(qe({navigation:re},{flushSync:J.flushSync===!0}),H){let Q=await Li(L,R.pathname,S.signal);if(Q.type==="aborted")return{shortCircuited:!0};if(Q.type==="error"){let{boundaryId:q,error:pe}=Fi(R.pathname,Q);return{matches:Q.partialMatches,pendingActionResult:[q,{type:ye.error,error:pe}]}}else if(Q.matches)L=Q.matches;else{let{notFoundMatches:q,error:pe,route:ge}=ks(R.pathname);return{matches:q,pendingActionResult:[ge.id,{type:ye.error,error:pe}]}}}let V,b=No(L,R);if(!b.route.action&&!b.route.lazy)V={type:ye.error,error:at(405,{method:S.method,pathname:R.pathname,routeId:b.route.id})};else if(V=(await Pe("action",C,S,[b],L,null))[b.route.id],S.signal.aborted)return{shortCircuited:!0};if(hr(V)){let Q;return J&&J.replace!=null?Q=J.replace:Q=fd(V.response.headers.get("Location"),new URL(S.url),u)===C.location.pathname+C.location.search,await Se(S,V,!0,{submission:P,replace:Q}),{shortCircuited:!0}}if(Un(V))throw at(400,{type:"defer-action"});if(kt(V)){let Q=Wr(L,b.route.id);return(J&&J.replace)!==!0&&(U=Be.Push),{matches:L,pendingActionResult:[Q.route.id,V]}}return{matches:L,pendingActionResult:[b.route.id,V]}}async function D(S,R,P,L,H,J,re,V,b,Q,q){let pe=H||ru(R,J),ge=J||re||yd(pe),Re=!we&&(!f.v7_partialHydration||!b);if(L){if(Re){let Oe=j(q);qe(De({navigation:pe},Oe!==void 0?{actionData:Oe}:{}),{flushSync:Q})}let le=await Li(P,R.pathname,S.signal);if(le.type==="aborted")return{shortCircuited:!0};if(le.type==="error"){let{boundaryId:Oe,error:_t}=Fi(R.pathname,le);return{matches:le.partialMatches,loaderData:{},errors:{[Oe]:_t}}}else if(le.matches)P=le.matches;else{let{error:Oe,notFoundMatches:_t,route:Ne}=ks(R.pathname);return{matches:_t,loaderData:{},errors:{[Ne.id]:Oe}}}}let ce=s||l,[Xe,Ue]=ad(e.history,C,P,ge,R,f.v7_partialHydration&&b===!0,f.v7_skipActionErrorRevalidation,Fe,Ie,$,ze,Ze,nt,ce,u,q);if(Fs(le=>!(P&&P.some(Oe=>Oe.route.id===le))||Xe&&Xe.some(Oe=>Oe.route.id===le)),he=++ee,Xe.length===0&&Ue.length===0){let le=jc();return lr(R,De({matches:P,loaderData:{},errors:q&&kt(q[1])?{[q[0]]:q[1].error}:null},gd(q),le?{fetchers:new Map(C.fetchers)}:{}),{flushSync:Q}),{shortCircuited:!0}}if(Re){let le={};if(!L){le.navigation=pe;let Oe=j(q);Oe!==void 0&&(le.actionData=Oe)}Ue.length>0&&(le.fetchers=z(Ue)),qe(le,{flushSync:Q})}Ue.forEach(le=>{B.has(le.key)&&Wt(le.key),le.controller&&B.set(le.key,le.controller)});let go=()=>Ue.forEach(le=>Wt(le.key));Y&&Y.signal.addEventListener("abort",go);let{loaderResults:dn,fetcherResults:Dr}=await rn(C,P,Xe,Ue,S);if(S.signal.aborted)return{shortCircuited:!0};Y&&Y.signal.removeEventListener("abort",go),Ue.forEach(le=>B.delete(le.key));let Ln=Zi(dn);if(Ln)return await Se(S,Ln.result,!0,{replace:V}),{shortCircuited:!0};if(Ln=Zi(Dr),Ln)return nt.add(Ln.key),await Se(S,Ln.result,!0,{replace:V}),{shortCircuited:!0};let{loaderData:Ti,errors:pn}=pd(C,P,Xe,dn,q,Ue,Dr,ut);ut.forEach((le,Oe)=>{le.subscribe(_t=>{(_t||le.done)&&ut.delete(Oe)})}),f.v7_partialHydration&&b&&C.errors&&Object.entries(C.errors).filter(le=>{let[Oe]=le;return!Xe.some(_t=>_t.route.id===Oe)}).forEach(le=>{let[Oe,_t]=le;pn=Object.assign(pn||{},{[Oe]:_t})});let Mi=jc(),Oi=Uc(he),Ni=Mi||Oi||Ue.length>0;return De({matches:P,loaderData:Ti,errors:pn},Ni?{fetchers:new Map(C.fetchers)}:{})}function j(S){if(S&&!kt(S[1]))return{[S[0]]:S[1].data};if(C.actionData)return Object.keys(C.actionData).length===0?null:C.actionData}function z(S){return S.forEach(R=>{let P=C.fetchers.get(R.key),L=_o(void 0,P?P.data:void 0);C.fetchers.set(R.key,L)}),new Map(C.fetchers)}function N(S,R,P,L){if(r)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");B.has(S)&&Wt(S);let H=(L&&L.unstable_flushSync)===!0,J=s||l,re=ca(C.location,C.matches,u,f.v7_prependBasename,P,f.v7_relativeSplatPath,R,L==null?void 0:L.relative),V=cr(J,re,u),b=Di(V,J,re);if(b.active&&b.matches&&(V=b.matches),!V){xt(S,R,at(404,{pathname:re}),{flushSync:H});return}let{path:Q,submission:q,error:pe}=ud(f.v7_normalizeFormMethod,!0,re,L);if(pe){xt(S,R,pe,{flushSync:H});return}let ge=No(V,Q);if(I=(L&&L.preventScrollReset)===!0,q&&Xt(q.formMethod)){X(S,R,Q,ge,V,b.active,H,q);return}Ze.set(S,{routeId:R,path:Q}),de(S,R,Q,ge,V,b.active,H,q)}async function X(S,R,P,L,H,J,re,V){ho(),Ze.delete(S);function b(Ne){if(!Ne.route.action&&!Ne.route.lazy){let hn=at(405,{method:V.formMethod,pathname:P,routeId:R});return xt(S,R,hn,{flushSync:re}),!0}return!1}if(!J&&b(L))return;let Q=C.fetchers.get(S);At(S,Z0(V,Q),{flushSync:re});let q=new AbortController,pe=Tr(e.history,P,q.signal,V);if(J){let Ne=await Li(H,P,pe.signal);if(Ne.type==="aborted")return;if(Ne.type==="error"){let{error:hn}=Fi(P,Ne);xt(S,R,hn,{flushSync:re});return}else if(Ne.matches){if(H=Ne.matches,L=No(H,P),b(L))return}else{xt(S,R,at(404,{pathname:P}),{flushSync:re});return}}B.set(S,q);let ge=ee,ce=(await Pe("action",C,pe,[L],H,S))[L.route.id];if(pe.signal.aborted){B.get(S)===q&&B.delete(S);return}if(f.v7_fetcherPersist&&ze.has(S)){if(hr(ce)||kt(ce)){At(S,On(void 0));return}}else{if(hr(ce))if(B.delete(S),he>ge){At(S,On(void 0));return}else return nt.add(S),At(S,_o(V)),Se(pe,ce,!1,{fetcherSubmission:V});if(kt(ce)){xt(S,R,ce.error);return}}if(Un(ce))throw at(400,{type:"defer-action"});let Xe=C.navigation.location||C.location,Ue=Tr(e.history,Xe,q.signal),go=s||l,dn=C.navigation.state!=="idle"?cr(go,C.navigation.location,u):C.matches;ue(dn,"Didn't find any matches after fetcher action");let Dr=++ee;ve.set(S,Dr);let Ln=_o(V,ce.data);C.fetchers.set(S,Ln);let[Ti,pn]=ad(e.history,C,dn,V,Xe,!1,f.v7_skipActionErrorRevalidation,Fe,Ie,$,ze,Ze,nt,go,u,[L.route.id,ce]);pn.filter(Ne=>Ne.key!==S).forEach(Ne=>{let hn=Ne.key,Qc=C.fetchers.get(hn),km=_o(void 0,Qc?Qc.data:void 0);C.fetchers.set(hn,km),B.has(hn)&&Wt(hn),Ne.controller&&B.set(hn,Ne.controller)}),qe({fetchers:new Map(C.fetchers)});let Mi=()=>pn.forEach(Ne=>Wt(Ne.key));q.signal.addEventListener("abort",Mi);let{loaderResults:Oi,fetcherResults:Ni}=await rn(C,dn,Ti,pn,Ue);if(q.signal.aborted)return;q.signal.removeEventListener("abort",Mi),ve.delete(S),B.delete(S),pn.forEach(Ne=>B.delete(Ne.key));let le=Zi(Oi);if(le)return Se(Ue,le.result,!1);if(le=Zi(Ni),le)return nt.add(le.key),Se(Ue,le.result,!1);let{loaderData:Oe,errors:_t}=pd(C,dn,Ti,Oi,void 0,pn,Ni,ut);if(C.fetchers.has(S)){let Ne=On(ce.data);C.fetchers.set(S,Ne)}Uc(Dr),C.navigation.state==="loading"&&Dr>he?(ue(U,"Expected pending action"),Y&&Y.abort(),lr(C.navigation.location,{matches:dn,loaderData:Oe,errors:_t,fetchers:new Map(C.fetchers)})):(qe({errors:_t,loaderData:hd(C.loaderData,Oe,dn,_t),fetchers:new Map(C.fetchers)}),Fe=!1)}async function de(S,R,P,L,H,J,re,V){let b=C.fetchers.get(S);At(S,_o(V,b?b.data:void 0),{flushSync:re});let Q=new AbortController,q=Tr(e.history,P,Q.signal);if(J){let ce=await Li(H,P,q.signal);if(ce.type==="aborted")return;if(ce.type==="error"){let{error:Xe}=Fi(P,ce);xt(S,R,Xe,{flushSync:re});return}else if(ce.matches)H=ce.matches,L=No(H,P);else{xt(S,R,at(404,{pathname:P}),{flushSync:re});return}}B.set(S,Q);let pe=ee,Re=(await Pe("loader",C,q,[L],H,S))[L.route.id];if(Un(Re)&&(Re=await Ec(Re,q.signal,!0)||Re),B.get(S)===Q&&B.delete(S),!q.signal.aborted){if(ze.has(S)){At(S,On(void 0));return}if(hr(Re))if(he>pe){At(S,On(void 0));return}else{nt.add(S),await Se(q,Re,!1);return}if(kt(Re)){xt(S,R,Re.error);return}ue(!Un(Re),"Unhandled fetcher deferred data"),At(S,On(Re.data))}}async function Se(S,R,P,L){let{submission:H,fetcherSubmission:J,replace:re}=L===void 0?{}:L;R.response.headers.has("X-Remix-Revalidate")&&(Fe=!0);let V=R.response.headers.get("Location");ue(V,"Expected a Location header on the redirect Response"),V=fd(V,new URL(S.url),u);let b=ai(C.location,V,{_isRedirect:!0});if(n){let ce=!1;if(R.response.headers.has("X-Remix-Reload-Document"))ce=!0;else if(Rc.test(V)){const Xe=e.history.createURL(V);ce=Xe.origin!==t.location.origin||Fn(Xe.pathname,u)==null}if(ce){re?t.location.replace(V):t.location.assign(V);return}}Y=null;let Q=re===!0||R.response.headers.has("X-Remix-Replace")?Be.Replace:Be.Push,{formMethod:q,formAction:pe,formEncType:ge}=C.navigation;!H&&!J&&q&&pe&&ge&&(H=yd(C.navigation));let Re=H||J;if(D0.has(R.response.status)&&Re&&Xt(Re.formMethod))await w(Q,b,{submission:De({},Re,{formAction:V}),preventScrollReset:I,enableViewTransition:P?W:void 0});else{let ce=ru(b,H);await w(Q,b,{overrideNavigation:ce,fetcherSubmission:J,preventScrollReset:I,enableViewTransition:P?W:void 0})}}async function Pe(S,R,P,L,H,J){let re,V={};try{re=await $0(a,S,R,P,L,H,J,i,o)}catch(b){return L.forEach(Q=>{V[Q.route.id]={type:ye.error,error:b}}),V}for(let[b,Q]of Object.entries(re))if(K0(Q)){let q=Q.result;V[b]={type:ye.redirect,response:B0(q,P,b,H,u,f.v7_relativeSplatPath)}}else V[b]=await U0(Q);return V}async function rn(S,R,P,L,H){let J=S.matches,re=Pe("loader",S,H,P,R,null),V=Promise.all(L.map(async q=>{if(q.matches&&q.match&&q.controller){let ge=(await Pe("loader",S,Tr(e.history,q.path,q.controller.signal),[q.match],q.matches,q.key))[q.match.route.id];return{[q.key]:ge}}else return Promise.resolve({[q.key]:{type:ye.error,error:at(404,{pathname:q.path})}})})),b=await re,Q=(await V).reduce((q,pe)=>Object.assign(q,pe),{});return await Promise.all([X0(R,b,H.signal,J,S.loaderData),J0(R,Q,L)]),{loaderResults:b,fetcherResults:Q}}function ho(){Fe=!0,Ie.push(...Fs()),Ze.forEach((S,R)=>{B.has(R)&&($.add(R),Wt(R))})}function At(S,R,P){P===void 0&&(P={}),C.fetchers.set(S,R),qe({fetchers:new Map(C.fetchers)},{flushSync:(P&&P.flushSync)===!0})}function xt(S,R,P,L){L===void 0&&(L={});let H=Wr(C.matches,R);sr(S),qe({errors:{[H.route.id]:P},fetchers:new Map(C.fetchers)},{flushSync:(L&&L.flushSync)===!0})}function Pi(S){return f.v7_fetcherPersist&&(Ht.set(S,(Ht.get(S)||0)+1),ze.has(S)&&ze.delete(S)),C.fetchers.get(S)||L0}function sr(S){let R=C.fetchers.get(S);B.has(S)&&!(R&&R.state==="loading"&&ve.has(S))&&Wt(S),Ze.delete(S),ve.delete(S),nt.delete(S),ze.delete(S),$.delete(S),C.fetchers.delete(S)}function Ps(S){if(f.v7_fetcherPersist){let R=(Ht.get(S)||0)-1;R<=0?(Ht.delete(S),ze.add(S)):Ht.set(S,R)}else sr(S);qe({fetchers:new Map(C.fetchers)})}function Wt(S){let R=B.get(S);ue(R,"Expected fetch controller: "+S),R.abort(),B.delete(S)}function $c(S){for(let R of S){let P=Pi(R),L=On(P.data);C.fetchers.set(R,L)}}function jc(){let S=[],R=!1;for(let P of nt){let L=C.fetchers.get(P);ue(L,"Expected fetcher: "+P),L.state==="loading"&&(nt.delete(P),S.push(P),R=!0)}return $c(S),R}function Uc(S){let R=[];for(let[P,L]of ve)if(L0}function Rm(S,R){let P=C.blockers.get(S)||xo;return Gt.get(S)!==R&&Gt.set(S,R),P}function Bc(S){C.blockers.delete(S),Gt.delete(S)}function ki(S,R){let P=C.blockers.get(S)||xo;ue(P.state==="unblocked"&&R.state==="blocked"||P.state==="blocked"&&R.state==="blocked"||P.state==="blocked"&&R.state==="proceeding"||P.state==="blocked"&&R.state==="unblocked"||P.state==="proceeding"&&R.state==="unblocked","Invalid blocker state transition: "+P.state+" -> "+R.state);let L=new Map(C.blockers);L.set(S,R),qe({blockers:L})}function Hc(S){let{currentLocation:R,nextLocation:P,historyAction:L}=S;if(Gt.size===0)return;Gt.size>1&&lo(!1,"A router only supports one blocker at a time");let H=Array.from(Gt.entries()),[J,re]=H[H.length-1],V=C.blockers.get(J);if(!(V&&V.state==="proceeding")&&re({currentLocation:R,nextLocation:P,historyAction:L}))return J}function ks(S){let R=at(404,{pathname:S}),P=s||l,{matches:L,route:H}=md(P);return Fs(),{notFoundMatches:L,route:H,error:R}}function Fi(S,R){return{boundaryId:Wr(R.partialMatches).route.id,error:at(400,{type:"route-discovery",pathname:S,message:R.error!=null&&"message"in R.error?R.error:String(R.error)})}}function Fs(S){let R=[];return ut.forEach((P,L)=>{(!S||S(L))&&(P.cancel(),R.push(L),ut.delete(L))}),R}function Em(S,R,P){if(E=S,d=R,h=P||null,!v&&C.navigation===nu){v=!0;let L=Wc(C.location,C.matches);L!=null&&qe({restoreScrollPosition:L})}return()=>{E=null,d=null,h=null}}function Gc(S,R){return h&&h(S,R.map(L=>s0(L,C.loaderData)))||S.key}function xm(S,R){if(E&&d){let P=Gc(S,R);E[P]=d()}}function Wc(S,R){if(E){let P=Gc(S,R),L=E[P];if(typeof L=="number")return L}return null}function Di(S,R,P){if(c){if(y.has(P))return{active:!1,matches:S};if(S){if(Object.keys(S[0].params).length>0)return{active:!0,matches:gl(R,P,u,!0)}}else return{active:!0,matches:gl(R,P,u,!0)||[]}}return{active:!1,matches:null}}async function Li(S,R,P){let L=S;for(;;){let H=s==null,J=s||l;try{await I0(c,R,L,J,i,o,Ei,P)}catch(b){return{type:"error",error:b,partialMatches:L}}finally{H&&(l=[...l])}if(P.aborted)return{type:"aborted"};let re=cr(J,R,u);if(re)return Kc(R,y),{type:"success",matches:re};let V=gl(J,R,u,!0);if(!V||L.length===V.length&&L.every((b,Q)=>b.route.id===V[Q].route.id))return Kc(R,y),{type:"success",matches:null};L=V}}function Kc(S,R){if(R.size>=m){let P=R.values().next().value;R.delete(P)}R.add(S)}function _m(S){i={},s=ci(S,o,void 0,i)}function Pm(S,R){let P=s==null;Sg(S,R,s||l,i,o),P&&(l=[...l],qe({}))}return A={get basename(){return u},get future(){return f},get state(){return C},get routes(){return l},get window(){return t},initialize:xi,subscribe:_i,enableScrollRestoration:Em,navigate:_s,fetch:N,revalidate:Vc,createHref:S=>e.history.createHref(S),encodeLocation:S=>e.history.encodeLocation(S),getFetcher:Pi,deleteFetcher:Ps,dispose:xs,getBlocker:Rm,deleteBlocker:Bc,patchRoutes:Pm,_internalFetchControllers:B,_internalActiveDeferreds:ut,_internalSetRoutes:_m},A}function O0(e){return e!=null&&("formData"in e&&e.formData!=null||"body"in e&&e.body!==void 0)}function ca(e,t,n,r,o,i,l,s){let u,a;if(l){u=[];for(let f of t)if(u.push(f),f.route.id===l){a=f;break}}else u=t,a=t[t.length-1];let c=Cc(o||".",Sc(u,i),Fn(e.pathname,n)||e.pathname,s==="path");return o==null&&(c.search=e.search,c.hash=e.hash),(o==null||o===""||o===".")&&a&&a.route.index&&!xc(c.search)&&(c.search=c.search?c.search.replace(/^\?/,"?index&"):"?index"),r&&n!=="/"&&(c.pathname=c.pathname==="/"?n:En([n,c.pathname])),xr(c)}function ud(e,t,n,r){if(!r||!O0(r))return{path:n};if(r.formMethod&&!q0(r.formMethod))return{path:n,error:at(405,{method:r.formMethod})};let o=()=>({path:n,error:at(400,{type:"invalid-body"})}),i=r.formMethod||"get",l=e?i.toUpperCase():i.toLowerCase(),s=Cg(n);if(r.body!==void 0){if(r.formEncType==="text/plain"){if(!Xt(l))return o();let p=typeof r.body=="string"?r.body:r.body instanceof FormData||r.body instanceof URLSearchParams?Array.from(r.body.entries()).reduce((g,m)=>{let[y,E]=m;return""+g+y+"="+E+` +`},""):String(r.body);return{path:n,submission:{formMethod:l,formAction:s,formEncType:r.formEncType,formData:void 0,json:void 0,text:p}}}else if(r.formEncType==="application/json"){if(!Xt(l))return o();try{let p=typeof r.body=="string"?JSON.parse(r.body):r.body;return{path:n,submission:{formMethod:l,formAction:s,formEncType:r.formEncType,formData:void 0,json:p,text:void 0}}}catch{return o()}}}ue(typeof FormData=="function","FormData is not available in this environment");let u,a;if(r.formData)u=fa(r.formData),a=r.formData;else if(r.body instanceof FormData)u=fa(r.body),a=r.body;else if(r.body instanceof URLSearchParams)u=r.body,a=dd(u);else if(r.body==null)u=new URLSearchParams,a=new FormData;else try{u=new URLSearchParams(r.body),a=dd(u)}catch{return o()}let c={formMethod:l,formAction:s,formEncType:r&&r.formEncType||"application/x-www-form-urlencoded",formData:a,json:void 0,text:void 0};if(Xt(c.formMethod))return{path:n,submission:c};let f=rr(n);return t&&f.search&&xc(f.search)&&u.append("index",""),f.search="?"+u,{path:xr(f),submission:c}}function N0(e,t){let n=e;if(t){let r=e.findIndex(o=>o.route.id===t);r>=0&&(n=e.slice(0,r))}return n}function ad(e,t,n,r,o,i,l,s,u,a,c,f,p,g,m,y){let E=y?kt(y[1])?y[1].error:y[1].data:void 0,h=e.createURL(t.location),d=e.createURL(o),v=y&&kt(y[1])?y[0]:void 0,x=v?N0(n,v):n,F=y?y[1].statusCode:void 0,M=l&&F&&F>=400,A=x.filter((U,I)=>{let{route:Y}=U;if(Y.lazy)return!0;if(Y.loader==null)return!1;if(i)return typeof Y.loader!="function"||Y.loader.hydrate?!0:t.loaderData[Y.id]===void 0&&(!t.errors||t.errors[Y.id]===void 0);if(A0(t.loaderData,t.matches[I],U)||u.some(oe=>oe===U.route.id))return!0;let W=t.matches[I],Z=U;return cd(U,De({currentUrl:h,currentParams:W.params,nextUrl:d,nextParams:Z.params},r,{actionResult:E,actionStatus:F,defaultShouldRevalidate:M?!1:s||h.pathname+h.search===d.pathname+d.search||h.search!==d.search||wg(W,Z)}))}),C=[];return f.forEach((U,I)=>{if(i||!n.some(we=>we.route.id===U.routeId)||c.has(I))return;let Y=cr(g,U.path,m);if(!Y){C.push({key:I,routeId:U.routeId,path:U.path,matches:null,match:null,controller:null});return}let W=t.fetchers.get(I),Z=No(Y,U.path),oe=!1;p.has(I)?oe=!1:a.has(I)?(a.delete(I),oe=!0):W&&W.state!=="idle"&&W.data===void 0?oe=s:oe=cd(Z,De({currentUrl:h,currentParams:t.matches[t.matches.length-1].params,nextUrl:d,nextParams:n[n.length-1].params},r,{actionResult:E,actionStatus:F,defaultShouldRevalidate:M?!1:s})),oe&&C.push({key:I,routeId:U.routeId,path:U.path,matches:Y,match:Z,controller:new AbortController})}),[A,C]}function A0(e,t,n){let r=!t||n.route.id!==t.route.id,o=e[n.route.id]===void 0;return r||o}function wg(e,t){let n=e.route.path;return e.pathname!==t.pathname||n!=null&&n.endsWith("*")&&e.params["*"]!==t.params["*"]}function cd(e,t){if(e.route.shouldRevalidate){let n=e.route.shouldRevalidate(t);if(typeof n=="boolean")return n}return t.defaultShouldRevalidate}async function I0(e,t,n,r,o,i,l,s){let u=[t,...n.map(a=>a.route.id)].join("-");try{let a=l.get(u);a||(a=e({path:t,matches:n,patch:(c,f)=>{s.aborted||Sg(c,f,r,o,i)}}),l.set(u,a)),a&&W0(a)&&await a}finally{l.delete(u)}}function Sg(e,t,n,r,o){if(e){var i;let l=r[e];ue(l,"No route found to patch children into: routeId = "+e);let s=ci(t,o,[e,"patch",String(((i=l.children)==null?void 0:i.length)||"0")],r);l.children?l.children.push(...s):l.children=s}else{let l=ci(t,o,["patch",String(n.length||"0")],r);n.push(...l)}}async function z0(e,t,n){if(!e.lazy)return;let r=await e.lazy();if(!e.lazy)return;let o=n[e.id];ue(o,"No route found in manifest");let i={};for(let l in r){let u=o[l]!==void 0&&l!=="hasErrorBoundary";lo(!u,'Route "'+o.id+'" has a static property "'+l+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+l+'" will be ignored.')),!u&&!i0.has(l)&&(i[l]=r[l])}Object.assign(o,i),Object.assign(o,De({},t(o),{lazy:void 0}))}async function V0(e){let{matches:t}=e,n=t.filter(o=>o.shouldLoad);return(await Promise.all(n.map(o=>o.resolve()))).reduce((o,i,l)=>Object.assign(o,{[n[l].route.id]:i}),{})}async function $0(e,t,n,r,o,i,l,s,u,a){let c=i.map(g=>g.route.lazy?z0(g.route,u,s):void 0),f=i.map((g,m)=>{let y=c[m],E=o.some(d=>d.route.id===g.route.id);return De({},g,{shouldLoad:E,resolve:async d=>(d&&r.method==="GET"&&(g.route.lazy||g.route.loader)&&(E=!0),E?j0(t,r,g,y,d,a):Promise.resolve({type:ye.data,result:void 0}))})}),p=await e({matches:f,request:r,params:i[0].params,fetcherKey:l,context:a});try{await Promise.all(c)}catch{}return p}async function j0(e,t,n,r,o,i){let l,s,u=a=>{let c,f=new Promise((m,y)=>c=y);s=()=>c(),t.signal.addEventListener("abort",s);let p=m=>typeof a!="function"?Promise.reject(new Error("You cannot call the handler for a route which defines a boolean "+('"'+e+'" [routeId: '+n.route.id+"]"))):a({request:t,params:n.params,context:i},...m!==void 0?[m]:[]),g=(async()=>{try{return{type:"data",result:await(o?o(y=>p(y)):p())}}catch(m){return{type:"error",result:m}}})();return Promise.race([g,f])};try{let a=n.route[e];if(r)if(a){let c,[f]=await Promise.all([u(a).catch(p=>{c=p}),r]);if(c!==void 0)throw c;l=f}else if(await r,a=n.route[e],a)l=await u(a);else if(e==="action"){let c=new URL(t.url),f=c.pathname+c.search;throw at(405,{method:t.method,pathname:f,routeId:n.route.id})}else return{type:ye.data,result:void 0};else if(a)l=await u(a);else{let c=new URL(t.url),f=c.pathname+c.search;throw at(404,{pathname:f})}ue(l.result!==void 0,"You defined "+(e==="action"?"an action":"a loader")+" for route "+('"'+n.route.id+"\" but didn't return anything from your `"+e+"` ")+"function. Please return a value or `null`.")}catch(a){return{type:ye.error,result:a}}finally{s&&t.signal.removeEventListener("abort",s)}return l}async function U0(e){let{result:t,type:n}=e;if(Rg(t)){let a;try{let c=t.headers.get("Content-Type");c&&/\bapplication\/json\b/.test(c)?t.body==null?a=null:a=await t.json():a=await t.text()}catch(c){return{type:ye.error,error:c}}return n===ye.error?{type:ye.error,error:new Wl(t.status,t.statusText,a),statusCode:t.status,headers:t.headers}:{type:ye.data,data:a,statusCode:t.status,headers:t.headers}}if(n===ye.error){if(vd(t)){var r;if(t.data instanceof Error){var o;return{type:ye.error,error:t.data,statusCode:(o=t.init)==null?void 0:o.status}}t=new Wl(((r=t.init)==null?void 0:r.status)||500,void 0,t.data)}return{type:ye.error,error:t,statusCode:gs(t)?t.status:void 0}}if(Q0(t)){var i,l;return{type:ye.deferred,deferredData:t,statusCode:(i=t.init)==null?void 0:i.status,headers:((l=t.init)==null?void 0:l.headers)&&new Headers(t.init.headers)}}if(vd(t)){var s,u;return{type:ye.data,data:t.data,statusCode:(s=t.init)==null?void 0:s.status,headers:(u=t.init)!=null&&u.headers?new Headers(t.init.headers):void 0}}return{type:ye.data,data:t}}function B0(e,t,n,r,o,i){let l=e.headers.get("Location");if(ue(l,"Redirects returned/thrown from loaders/actions must have a Location header"),!Rc.test(l)){let s=r.slice(0,r.findIndex(u=>u.route.id===n)+1);l=ca(new URL(t.url),s,o,!0,l,i),e.headers.set("Location",l)}return e}function fd(e,t,n){if(Rc.test(e)){let r=e,o=r.startsWith("//")?new URL(t.protocol+r):new URL(r),i=Fn(o.pathname,n)!=null;if(o.origin===t.origin&&i)return o.pathname+o.search+o.hash}return e}function Tr(e,t,n,r){let o=e.createURL(Cg(t)).toString(),i={signal:n};if(r&&Xt(r.formMethod)){let{formMethod:l,formEncType:s}=r;i.method=l.toUpperCase(),s==="application/json"?(i.headers=new Headers({"Content-Type":s}),i.body=JSON.stringify(r.json)):s==="text/plain"?i.body=r.text:s==="application/x-www-form-urlencoded"&&r.formData?i.body=fa(r.formData):i.body=r.formData}return new Request(o,i)}function fa(e){let t=new URLSearchParams;for(let[n,r]of e.entries())t.append(n,typeof r=="string"?r:r.name);return t}function dd(e){let t=new FormData;for(let[n,r]of e.entries())t.append(n,r);return t}function H0(e,t,n,r,o){let i={},l=null,s,u=!1,a={},c=n&&kt(n[1])?n[1].error:void 0;return e.forEach(f=>{if(!(f.route.id in t))return;let p=f.route.id,g=t[p];if(ue(!hr(g),"Cannot handle redirect results in processLoaderData"),kt(g)){let m=g.error;c!==void 0&&(m=c,c=void 0),l=l||{};{let y=Wr(e,p);l[y.route.id]==null&&(l[y.route.id]=m)}i[p]=void 0,u||(u=!0,s=gs(g.error)?g.error.status:500),g.headers&&(a[p]=g.headers)}else Un(g)?(r.set(p,g.deferredData),i[p]=g.deferredData.data,g.statusCode!=null&&g.statusCode!==200&&!u&&(s=g.statusCode),g.headers&&(a[p]=g.headers)):(i[p]=g.data,g.statusCode&&g.statusCode!==200&&!u&&(s=g.statusCode),g.headers&&(a[p]=g.headers))}),c!==void 0&&n&&(l={[n[0]]:c},i[n[0]]=void 0),{loaderData:i,errors:l,statusCode:s||200,loaderHeaders:a}}function pd(e,t,n,r,o,i,l,s){let{loaderData:u,errors:a}=H0(t,r,o,s);return i.forEach(c=>{let{key:f,match:p,controller:g}=c,m=l[f];if(ue(m,"Did not find corresponding fetcher result"),!(g&&g.signal.aborted))if(kt(m)){let y=Wr(e.matches,p==null?void 0:p.route.id);a&&a[y.route.id]||(a=De({},a,{[y.route.id]:m.error})),e.fetchers.delete(f)}else if(hr(m))ue(!1,"Unhandled fetcher revalidation redirect");else if(Un(m))ue(!1,"Unhandled fetcher deferred data");else{let y=On(m.data);e.fetchers.set(f,y)}}),{loaderData:u,errors:a}}function hd(e,t,n,r){let o=De({},t);for(let i of n){let l=i.route.id;if(t.hasOwnProperty(l)?t[l]!==void 0&&(o[l]=t[l]):e[l]!==void 0&&i.route.loader&&(o[l]=e[l]),r&&r.hasOwnProperty(l))break}return o}function gd(e){return e?kt(e[1])?{actionData:{}}:{actionData:{[e[0]]:e[1].data}}:{}}function Wr(e,t){return(t?e.slice(0,e.findIndex(r=>r.route.id===t)+1):[...e]).reverse().find(r=>r.route.hasErrorBoundary===!0)||e[0]}function md(e){let t=e.length===1?e[0]:e.find(n=>n.index||!n.path||n.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:t}],route:t}}function at(e,t){let{pathname:n,routeId:r,method:o,type:i,message:l}=t===void 0?{}:t,s="Unknown Server Error",u="Unknown @remix-run/router error";return e===400?(s="Bad Request",i==="route-discovery"?u='Unable to match URL "'+n+'" - the `unstable_patchRoutesOnNavigation()` '+(`function threw the following error: +`+l):o&&n&&r?u="You made a "+o+' request to "'+n+'" but '+('did not provide a `loader` for route "'+r+'", ')+"so there is no way to handle the request.":i==="defer-action"?u="defer() is not supported in actions":i==="invalid-body"&&(u="Unable to encode submission body")):e===403?(s="Forbidden",u='Route "'+r+'" does not match URL "'+n+'"'):e===404?(s="Not Found",u='No route matches URL "'+n+'"'):e===405&&(s="Method Not Allowed",o&&n&&r?u="You made a "+o.toUpperCase()+' request to "'+n+'" but '+('did not provide an `action` for route "'+r+'", ')+"so there is no way to handle the request.":o&&(u='Invalid request method "'+o.toUpperCase()+'"')),new Wl(e||500,s,new Error(u),!0)}function Zi(e){let t=Object.entries(e);for(let n=t.length-1;n>=0;n--){let[r,o]=t[n];if(hr(o))return{key:r,result:o}}}function Cg(e){let t=typeof e=="string"?rr(e):e;return xr(De({},t,{hash:""}))}function G0(e,t){return e.pathname!==t.pathname||e.search!==t.search?!1:e.hash===""?t.hash!=="":e.hash===t.hash?!0:t.hash!==""}function W0(e){return typeof e=="object"&&e!=null&&"then"in e}function K0(e){return Rg(e.result)&&F0.has(e.result.status)}function Un(e){return e.type===ye.deferred}function kt(e){return e.type===ye.error}function hr(e){return(e&&e.type)===ye.redirect}function vd(e){return typeof e=="object"&&e!=null&&"type"in e&&"data"in e&&"init"in e&&e.type==="DataWithResponseInit"}function Q0(e){let t=e;return t&&typeof t=="object"&&typeof t.data=="object"&&typeof t.subscribe=="function"&&typeof t.cancel=="function"&&typeof t.resolveData=="function"}function Rg(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.headers=="object"&&typeof e.body<"u"}function q0(e){return k0.has(e.toLowerCase())}function Xt(e){return _0.has(e.toLowerCase())}async function X0(e,t,n,r,o){let i=Object.entries(t);for(let l=0;l(p==null?void 0:p.route.id)===s);if(!a)continue;let c=r.find(p=>p.route.id===a.route.id),f=c!=null&&!wg(c,a)&&(o&&o[a.route.id])!==void 0;Un(u)&&f&&await Ec(u,n,!1).then(p=>{p&&(t[s]=p)})}}async function J0(e,t,n){for(let r=0;r(a==null?void 0:a.route.id)===i)&&Un(s)&&(ue(l,"Expected an AbortController for revalidating fetcher deferred result"),await Ec(s,l.signal,!0).then(a=>{a&&(t[o]=a)}))}}async function Ec(e,t,n){if(n===void 0&&(n=!1),!await e.deferredData.resolveData(t)){if(n)try{return{type:ye.data,data:e.deferredData.unwrappedData}}catch(o){return{type:ye.error,error:o}}return{type:ye.data,data:e.deferredData.data}}}function xc(e){return new URLSearchParams(e).getAll("index").some(t=>t==="")}function No(e,t){let n=typeof t=="string"?rr(t).search:t.search;if(e[e.length-1].route.index&&xc(n||""))return e[e.length-1];let r=mg(e);return r[r.length-1]}function yd(e){let{formMethod:t,formAction:n,formEncType:r,text:o,formData:i,json:l}=e;if(!(!t||!n||!r)){if(o!=null)return{formMethod:t,formAction:n,formEncType:r,formData:void 0,json:void 0,text:o};if(i!=null)return{formMethod:t,formAction:n,formEncType:r,formData:i,json:void 0,text:void 0};if(l!==void 0)return{formMethod:t,formAction:n,formEncType:r,formData:void 0,json:l,text:void 0}}}function ru(e,t){return t?{state:"loading",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}:{state:"loading",location:e,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function Y0(e,t){return{state:"submitting",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}}function _o(e,t){return e?{state:"loading",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:t}}function Z0(e,t){return{state:"submitting",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t?t.data:void 0}}function On(e){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:e}}function b0(e,t){try{let n=e.sessionStorage.getItem(yg);if(n){let r=JSON.parse(n);for(let[o,i]of Object.entries(r||{}))i&&Array.isArray(i)&&t.set(o,new Set(i||[]))}}catch{}}function ew(e,t){if(t.size>0){let n={};for(let[r,o]of t)n[r]=[...o];try{e.sessionStorage.setItem(yg,JSON.stringify(n))}catch(r){lo(!1,"Failed to save applied view transitions in sessionStorage ("+r+").")}}}/** + * React Router v6.26.2 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function Kl(){return Kl=Object.assign?Object.assign.bind():function(e){for(var t=1;t{s.current=!0}),T.useCallback(function(a,c){if(c===void 0&&(c={}),!s.current)return;if(typeof a=="number"){r.go(a);return}let f=Cc(a,JSON.parse(l),i,c.relative==="path");e==null&&t!=="/"&&(f.pathname=f.pathname==="/"?t:En([t,f.pathname])),(c.replace?r.replace:r.push)(f,c.state,c)},[t,r,l,i,e])}const ow=T.createContext(null);function iw(e){let t=T.useContext(ir).outlet;return t&&T.createElement(ow.Provider,{value:e},t)}function ms(e,t){let{relative:n}=t===void 0?{}:t,{future:r}=T.useContext(or),{matches:o}=T.useContext(ir),{pathname:i}=wi(),l=JSON.stringify(Sc(o,r.v7_relativeSplatPath));return T.useMemo(()=>Cc(e,JSON.parse(l),i,n==="path"),[e,l,i,n])}function lw(e,t,n,r){yi()||ue(!1);let{navigator:o}=T.useContext(or),{matches:i}=T.useContext(ir),l=i[i.length-1],s=l?l.params:{};l&&l.pathname;let u=l?l.pathnameBase:"/";l&&l.route;let a=wi(),c;c=a;let f=c.pathname||"/",p=f;if(u!=="/"){let y=u.replace(/^\//,"").split("/");p="/"+f.replace(/^\//,"").split("/").slice(y.length).join("/")}let g=cr(e,{pathname:p});return fw(g&&g.map(y=>Object.assign({},y,{params:Object.assign({},s,y.params),pathname:En([u,o.encodeLocation?o.encodeLocation(y.pathname).pathname:y.pathname]),pathnameBase:y.pathnameBase==="/"?u:En([u,o.encodeLocation?o.encodeLocation(y.pathnameBase).pathname:y.pathnameBase])})),i,n,r)}function sw(){let e=gw(),t=gs(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,o={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return T.createElement(T.Fragment,null,T.createElement("h2",null,"Unexpected Application Error!"),T.createElement("h3",{style:{fontStyle:"italic"}},t),n?T.createElement("pre",{style:o},n):null,null)}const uw=T.createElement(sw,null);class aw extends T.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,n){return n.location!==t.location||n.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:n.error,location:n.location,revalidation:t.revalidation||n.revalidation}}componentDidCatch(t,n){console.error("React Router caught the following error during render",t,n)}render(){return this.state.error!==void 0?T.createElement(ir.Provider,{value:this.props.routeContext},T.createElement(Eg.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function cw(e){let{routeContext:t,match:n,children:r}=e,o=T.useContext(vi);return o&&o.static&&o.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=n.route.id),T.createElement(ir.Provider,{value:t},r)}function fw(e,t,n,r){var o;if(t===void 0&&(t=[]),n===void 0&&(n=null),r===void 0&&(r=null),e==null){var i;if(!n)return null;if(n.errors)e=n.matches;else if((i=r)!=null&&i.v7_partialHydration&&t.length===0&&!n.initialized&&n.matches.length>0)e=n.matches;else return null}let l=e,s=(o=n)==null?void 0:o.errors;if(s!=null){let c=l.findIndex(f=>f.route.id&&(s==null?void 0:s[f.route.id])!==void 0);c>=0||ue(!1),l=l.slice(0,Math.min(l.length,c+1))}let u=!1,a=-1;if(n&&r&&r.v7_partialHydration)for(let c=0;c=0?l=l.slice(0,a+1):l=[l[0]];break}}}return l.reduceRight((c,f,p)=>{let g,m=!1,y=null,E=null;n&&(g=s&&f.route.id?s[f.route.id]:void 0,y=f.route.errorElement||uw,u&&(a<0&&p===0?(vw("route-fallback"),m=!0,E=null):a===p&&(m=!0,E=f.route.hydrateFallbackElement||null)));let h=t.concat(l.slice(0,p+1)),d=()=>{let v;return g?v=y:m?v=E:f.route.Component?v=T.createElement(f.route.Component,null):f.route.element?v=f.route.element:v=c,T.createElement(cw,{match:f,routeContext:{outlet:c,matches:h,isDataRoute:n!=null},children:v})};return n&&(f.route.ErrorBoundary||f.route.errorElement||p===0)?T.createElement(aw,{location:n.location,revalidation:n.revalidation,component:y,error:g,children:d(),routeContext:{outlet:null,matches:h,isDataRoute:!0}}):d()},null)}var _g=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(_g||{}),Pg=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Pg||{});function dw(e){let t=T.useContext(vi);return t||ue(!1),t}function pw(e){let t=T.useContext(_c);return t||ue(!1),t}function hw(e){let t=T.useContext(ir);return t||ue(!1),t}function kg(e){let t=hw(),n=t.matches[t.matches.length-1];return n.route.id||ue(!1),n.route.id}function gw(){var e;let t=T.useContext(Eg),n=pw(),r=kg();return t!==void 0?t:(e=n.errors)==null?void 0:e[r]}function mw(){let{router:e}=dw(_g.UseNavigateStable),t=kg(Pg.UseNavigateStable),n=T.useRef(!1);return xg(()=>{n.current=!0}),T.useCallback(function(o,i){i===void 0&&(i={}),n.current&&(typeof o=="number"?e.navigate(o):e.navigate(o,Kl({fromRouteId:t},i)))},[e,t])}const wd={};function vw(e,t,n){wd[e]||(wd[e]=!0)}function yw(e){return iw(e.context)}function ww(e){let{basename:t="/",children:n=null,location:r,navigationType:o=Be.Pop,navigator:i,static:l=!1,future:s}=e;yi()&&ue(!1);let u=t.replace(/^\/*/,"/"),a=T.useMemo(()=>({basename:u,navigator:i,static:l,future:Kl({v7_relativeSplatPath:!1},s)}),[u,s,i,l]);typeof r=="string"&&(r=rr(r));let{pathname:c="/",search:f="",hash:p="",state:g=null,key:m="default"}=r,y=T.useMemo(()=>{let E=Fn(c,u);return E==null?null:{location:{pathname:E,search:f,hash:p,state:g,key:m},navigationType:o}},[u,c,f,p,g,m,o]);return y==null?null:T.createElement(or.Provider,{value:a},T.createElement(Pc.Provider,{children:n,value:y}))}new Promise(()=>{});function Sw(e){let t={hasErrorBoundary:e.ErrorBoundary!=null||e.errorElement!=null};return e.Component&&Object.assign(t,{element:T.createElement(e.Component),Component:void 0}),e.HydrateFallback&&Object.assign(t,{hydrateFallbackElement:T.createElement(e.HydrateFallback),HydrateFallback:void 0}),e.ErrorBoundary&&Object.assign(t,{errorElement:T.createElement(e.ErrorBoundary),ErrorBoundary:void 0}),t}/** + * React Router DOM v6.26.2 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function so(){return so=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(n[o]=e[o]);return n}function Cw(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Rw(e,t){return e.button===0&&(!t||t==="_self")&&!Cw(e)}const Ew=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"],xw=["aria-current","caseSensitive","className","end","style","to","unstable_viewTransition","children"],_w="6";try{window.__reactRouterVersion=_w}catch{}function Pw(e,t){return M0({basename:t==null?void 0:t.basename,future:so({},t==null?void 0:t.future,{v7_prependBasename:!0}),history:n0({window:t==null?void 0:t.window}),hydrationData:(t==null?void 0:t.hydrationData)||kw(),routes:e,mapRouteProperties:Sw,unstable_dataStrategy:t==null?void 0:t.unstable_dataStrategy,unstable_patchRoutesOnNavigation:t==null?void 0:t.unstable_patchRoutesOnNavigation,window:t==null?void 0:t.window}).initialize()}function kw(){var e;let t=(e=window)==null?void 0:e.__staticRouterHydrationData;return t&&t.errors&&(t=so({},t,{errors:Fw(t.errors)})),t}function Fw(e){if(!e)return null;let t=Object.entries(e),n={};for(let[r,o]of t)if(o&&o.__type==="RouteErrorResponse")n[r]=new Wl(o.status,o.statusText,o.data,o.internal===!0);else if(o&&o.__type==="Error"){if(o.__subType){let i=window[o.__subType];if(typeof i=="function")try{let l=new i(o.message);l.stack="",n[r]=l}catch{}}if(n[r]==null){let i=new Error(o.message);i.stack="",n[r]=i}}else n[r]=o;return n}const Dg=T.createContext({isTransitioning:!1}),Dw=T.createContext(new Map),Lw="startTransition",Sd=Hm[Lw],Tw="flushSync",Cd=t0[Tw];function Mw(e){Sd?Sd(e):e()}function Po(e){Cd?Cd(e):e()}class Ow{constructor(){this.status="pending",this.promise=new Promise((t,n)=>{this.resolve=r=>{this.status==="pending"&&(this.status="resolved",t(r))},this.reject=r=>{this.status==="pending"&&(this.status="rejected",n(r))}})}}function Nw(e){let{fallbackElement:t,router:n,future:r}=e,[o,i]=T.useState(n.state),[l,s]=T.useState(),[u,a]=T.useState({isTransitioning:!1}),[c,f]=T.useState(),[p,g]=T.useState(),[m,y]=T.useState(),E=T.useRef(new Map),{v7_startTransition:h}=r||{},d=T.useCallback(C=>{h?Mw(C):C()},[h]),v=T.useCallback((C,U)=>{let{deletedFetchers:I,unstable_flushSync:Y,unstable_viewTransitionOpts:W}=U;I.forEach(oe=>E.current.delete(oe)),C.fetchers.forEach((oe,we)=>{oe.data!==void 0&&E.current.set(we,oe.data)});let Z=n.window==null||n.window.document==null||typeof n.window.document.startViewTransition!="function";if(!W||Z){Y?Po(()=>i(C)):d(()=>i(C));return}if(Y){Po(()=>{p&&(c&&c.resolve(),p.skipTransition()),a({isTransitioning:!0,flushSync:!0,currentLocation:W.currentLocation,nextLocation:W.nextLocation})});let oe=n.window.document.startViewTransition(()=>{Po(()=>i(C))});oe.finished.finally(()=>{Po(()=>{f(void 0),g(void 0),s(void 0),a({isTransitioning:!1})})}),Po(()=>g(oe));return}p?(c&&c.resolve(),p.skipTransition(),y({state:C,currentLocation:W.currentLocation,nextLocation:W.nextLocation})):(s(C),a({isTransitioning:!0,flushSync:!1,currentLocation:W.currentLocation,nextLocation:W.nextLocation}))},[n.window,p,c,E,d]);T.useLayoutEffect(()=>n.subscribe(v),[n,v]),T.useEffect(()=>{u.isTransitioning&&!u.flushSync&&f(new Ow)},[u]),T.useEffect(()=>{if(c&&l&&n.window){let C=l,U=c.promise,I=n.window.document.startViewTransition(async()=>{d(()=>i(C)),await U});I.finished.finally(()=>{f(void 0),g(void 0),s(void 0),a({isTransitioning:!1})}),g(I)}},[d,l,c,n.window]),T.useEffect(()=>{c&&l&&o.location.key===l.location.key&&c.resolve()},[c,p,o.location,l]),T.useEffect(()=>{!u.isTransitioning&&m&&(s(m.state),a({isTransitioning:!0,flushSync:!1,currentLocation:m.currentLocation,nextLocation:m.nextLocation}),y(void 0))},[u.isTransitioning,m]),T.useEffect(()=>{},[]);let x=T.useMemo(()=>({createHref:n.createHref,encodeLocation:n.encodeLocation,go:C=>n.navigate(C),push:(C,U,I)=>n.navigate(C,{state:U,preventScrollReset:I==null?void 0:I.preventScrollReset}),replace:(C,U,I)=>n.navigate(C,{replace:!0,state:U,preventScrollReset:I==null?void 0:I.preventScrollReset})}),[n]),F=n.basename||"/",M=T.useMemo(()=>({router:n,navigator:x,static:!1,basename:F}),[n,x,F]),A=T.useMemo(()=>({v7_relativeSplatPath:n.future.v7_relativeSplatPath}),[n.future.v7_relativeSplatPath]);return T.createElement(T.Fragment,null,T.createElement(vi.Provider,{value:M},T.createElement(_c.Provider,{value:o},T.createElement(Dw.Provider,{value:E.current},T.createElement(Dg.Provider,{value:u},T.createElement(ww,{basename:F,location:o.location,navigationType:o.historyAction,navigator:x,future:A},o.initialized||n.future.v7_partialHydration?T.createElement(Aw,{routes:n.routes,future:n.future,state:o}):t))))),null)}const Aw=T.memo(Iw);function Iw(e){let{routes:t,future:n,state:r}=e;return lw(t,void 0,r,n)}const zw=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",Vw=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Lg=T.forwardRef(function(t,n){let{onClick:r,relative:o,reloadDocument:i,replace:l,state:s,target:u,to:a,preventScrollReset:c,unstable_viewTransition:f}=t,p=Fg(t,Ew),{basename:g}=T.useContext(or),m,y=!1;if(typeof a=="string"&&Vw.test(a)&&(m=a,zw))try{let v=new URL(window.location.href),x=a.startsWith("//")?new URL(v.protocol+a):new URL(a),F=Fn(x.pathname,g);x.origin===v.origin&&F!=null?a=F+x.search+x.hash:y=!0}catch{}let E=tw(a,{relative:o}),h=jw(a,{replace:l,state:s,target:u,preventScrollReset:c,relative:o,unstable_viewTransition:f});function d(v){r&&r(v),v.defaultPrevented||h(v)}return T.createElement("a",so({},p,{href:m||E,onClick:y||i?r:d,ref:n,target:u}))}),Rd=T.forwardRef(function(t,n){let{"aria-current":r="page",caseSensitive:o=!1,className:i="",end:l=!1,style:s,to:u,unstable_viewTransition:a,children:c}=t,f=Fg(t,xw),p=ms(u,{relative:f.relative}),g=wi(),m=T.useContext(_c),{navigator:y,basename:E}=T.useContext(or),h=m!=null&&Uw(p)&&a===!0,d=y.encodeLocation?y.encodeLocation(p).pathname:p.pathname,v=g.pathname,x=m&&m.navigation&&m.navigation.location?m.navigation.location.pathname:null;o||(v=v.toLowerCase(),x=x?x.toLowerCase():null,d=d.toLowerCase()),x&&E&&(x=Fn(x,E)||x);const F=d!=="/"&&d.endsWith("/")?d.length-1:d.length;let M=v===d||!l&&v.startsWith(d)&&v.charAt(F)==="/",A=x!=null&&(x===d||!l&&x.startsWith(d)&&x.charAt(d.length)==="/"),C={isActive:M,isPending:A,isTransitioning:h},U=M?r:void 0,I;typeof i=="function"?I=i(C):I=[i,M?"active":null,A?"pending":null,h?"transitioning":null].filter(Boolean).join(" ");let Y=typeof s=="function"?s(C):s;return T.createElement(Lg,so({},f,{"aria-current":U,className:I,ref:n,style:Y,to:u,unstable_viewTransition:a}),typeof c=="function"?c(C):c)});var da;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(da||(da={}));var Ed;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(Ed||(Ed={}));function $w(e){let t=T.useContext(vi);return t||ue(!1),t}function jw(e,t){let{target:n,replace:r,state:o,preventScrollReset:i,relative:l,unstable_viewTransition:s}=t===void 0?{}:t,u=nw(),a=wi(),c=ms(e,{relative:l});return T.useCallback(f=>{if(Rw(f,n)){f.preventDefault();let p=r!==void 0?r:xr(a)===xr(c);u(e,{replace:p,state:o,preventScrollReset:i,relative:l,unstable_viewTransition:s})}},[a,u,c,r,o,n,e,i,l,s])}function Uw(e,t){t===void 0&&(t={});let n=T.useContext(Dg);n==null&&ue(!1);let{basename:r}=$w(da.useViewTransitionState),o=ms(e,{relative:t.relative});if(!n.isTransitioning)return!1;let i=Fn(n.currentLocation.pathname,r)||n.currentLocation.pathname,l=Fn(n.nextLocation.pathname,r)||n.nextLocation.pathname;return Gl(o.pathname,l)!=null||Gl(o.pathname,i)!=null}function Bw(){return se.jsxs("div",{className:"min-h-screen",children:[se.jsx("header",{className:"border-b",children:se.jsxs("div",{className:"mx-auto max-w-5xl p-4 flex gap-6",children:[se.jsx(Lg,{to:"/",className:"font-semibold",children:"XSD Registry"}),se.jsxs("nav",{className:"flex gap-4",children:[se.jsx(Rd,{to:"/schemas",className:({isActive:e})=>e?"underline":"",children:"Схемы"}),se.jsx(Rd,{to:"/schemas/upload",className:({isActive:e})=>e?"underline":"",children:"Загрузка"})]})]})}),se.jsx("main",{className:"mx-auto max-w-5xl p-4",children:se.jsx(yw,{})})]})}/** + * table-core + * + * Copyright (c) TanStack + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function Bn(e,t){return typeof e=="function"?e(t):e}function Mt(e,t){return n=>{t.setState(r=>({...r,[e]:Bn(n,r[e])}))}}function vs(e){return e instanceof Function}function Hw(e){return Array.isArray(e)&&e.every(t=>typeof t=="number")}function Gw(e,t){const n=[],r=o=>{o.forEach(i=>{n.push(i);const l=t(i);l!=null&&l.length&&r(l)})};return r(e),n}function te(e,t,n){let r=[],o;return i=>{let l;n.key&&n.debug&&(l=Date.now());const s=e(i);if(!(s.length!==r.length||s.some((c,f)=>r[f]!==c)))return o;r=s;let a;if(n.key&&n.debug&&(a=Date.now()),o=t(...s),n==null||n.onChange==null||n.onChange(o),n.key&&n.debug&&n!=null&&n.debug()){const c=Math.round((Date.now()-l)*100)/100,f=Math.round((Date.now()-a)*100)/100,p=f/16,g=(m,y)=>{for(m=String(m);m.length{var o;return(o=e==null?void 0:e.debugAll)!=null?o:e[t]},key:!1,onChange:r}}function Ww(e,t,n,r){const o=()=>{var l;return(l=i.getValue())!=null?l:e.options.renderFallbackValue},i={id:`${t.id}_${n.id}`,row:t,column:n,getValue:()=>t.getValue(r),renderValue:o,getContext:te(()=>[e,n,t,i],(l,s,u,a)=>({table:l,column:s,row:u,cell:a,getValue:a.getValue,renderValue:a.renderValue}),ne(e.options,"debugCells"))};return e._features.forEach(l=>{l.createCell==null||l.createCell(i,n,t,e)},{}),i}function Kw(e,t,n,r){var o,i;const s={...e._getDefaultColumnDef(),...t},u=s.accessorKey;let a=(o=(i=s.id)!=null?i:u?typeof String.prototype.replaceAll=="function"?u.replaceAll(".","_"):u.replace(/\./g,"_"):void 0)!=null?o:typeof s.header=="string"?s.header:void 0,c;if(s.accessorFn?c=s.accessorFn:u&&(u.includes(".")?c=p=>{let g=p;for(const y of u.split(".")){var m;g=(m=g)==null?void 0:m[y]}return g}:c=p=>p[s.accessorKey]),!a)throw new Error;let f={id:`${String(a)}`,accessorFn:c,parent:r,depth:n,columnDef:s,columns:[],getFlatColumns:te(()=>[!0],()=>{var p;return[f,...(p=f.columns)==null?void 0:p.flatMap(g=>g.getFlatColumns())]},ne(e.options,"debugColumns")),getLeafColumns:te(()=>[e._getOrderColumnsFn()],p=>{var g;if((g=f.columns)!=null&&g.length){let m=f.columns.flatMap(y=>y.getLeafColumns());return p(m)}return[f]},ne(e.options,"debugColumns"))};for(const p of e._features)p.createColumn==null||p.createColumn(f,e);return f}const it="debugHeaders";function xd(e,t,n){var r;let i={id:(r=n.id)!=null?r:t.id,column:t,index:n.index,isPlaceholder:!!n.isPlaceholder,placeholderId:n.placeholderId,depth:n.depth,subHeaders:[],colSpan:0,rowSpan:0,headerGroup:null,getLeafHeaders:()=>{const l=[],s=u=>{u.subHeaders&&u.subHeaders.length&&u.subHeaders.map(s),l.push(u)};return s(i),l},getContext:()=>({table:e,header:i,column:t})};return e._features.forEach(l=>{l.createHeader==null||l.createHeader(i,e)}),i}const Qw={createTable:e=>{e.getHeaderGroups=te(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,o)=>{var i,l;const s=(i=r==null?void 0:r.map(f=>n.find(p=>p.id===f)).filter(Boolean))!=null?i:[],u=(l=o==null?void 0:o.map(f=>n.find(p=>p.id===f)).filter(Boolean))!=null?l:[],a=n.filter(f=>!(r!=null&&r.includes(f.id))&&!(o!=null&&o.includes(f.id)));return bi(t,[...s,...a,...u],e)},ne(e.options,it)),e.getCenterHeaderGroups=te(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,o)=>(n=n.filter(i=>!(r!=null&&r.includes(i.id))&&!(o!=null&&o.includes(i.id))),bi(t,n,e,"center")),ne(e.options,it)),e.getLeftHeaderGroups=te(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left],(t,n,r)=>{var o;const i=(o=r==null?void 0:r.map(l=>n.find(s=>s.id===l)).filter(Boolean))!=null?o:[];return bi(t,i,e,"left")},ne(e.options,it)),e.getRightHeaderGroups=te(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.right],(t,n,r)=>{var o;const i=(o=r==null?void 0:r.map(l=>n.find(s=>s.id===l)).filter(Boolean))!=null?o:[];return bi(t,i,e,"right")},ne(e.options,it)),e.getFooterGroups=te(()=>[e.getHeaderGroups()],t=>[...t].reverse(),ne(e.options,it)),e.getLeftFooterGroups=te(()=>[e.getLeftHeaderGroups()],t=>[...t].reverse(),ne(e.options,it)),e.getCenterFooterGroups=te(()=>[e.getCenterHeaderGroups()],t=>[...t].reverse(),ne(e.options,it)),e.getRightFooterGroups=te(()=>[e.getRightHeaderGroups()],t=>[...t].reverse(),ne(e.options,it)),e.getFlatHeaders=te(()=>[e.getHeaderGroups()],t=>t.map(n=>n.headers).flat(),ne(e.options,it)),e.getLeftFlatHeaders=te(()=>[e.getLeftHeaderGroups()],t=>t.map(n=>n.headers).flat(),ne(e.options,it)),e.getCenterFlatHeaders=te(()=>[e.getCenterHeaderGroups()],t=>t.map(n=>n.headers).flat(),ne(e.options,it)),e.getRightFlatHeaders=te(()=>[e.getRightHeaderGroups()],t=>t.map(n=>n.headers).flat(),ne(e.options,it)),e.getCenterLeafHeaders=te(()=>[e.getCenterFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),ne(e.options,it)),e.getLeftLeafHeaders=te(()=>[e.getLeftFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),ne(e.options,it)),e.getRightLeafHeaders=te(()=>[e.getRightFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),ne(e.options,it)),e.getLeafHeaders=te(()=>[e.getLeftHeaderGroups(),e.getCenterHeaderGroups(),e.getRightHeaderGroups()],(t,n,r)=>{var o,i,l,s,u,a;return[...(o=(i=t[0])==null?void 0:i.headers)!=null?o:[],...(l=(s=n[0])==null?void 0:s.headers)!=null?l:[],...(u=(a=r[0])==null?void 0:a.headers)!=null?u:[]].map(c=>c.getLeafHeaders()).flat()},ne(e.options,it))}};function bi(e,t,n,r){var o,i;let l=0;const s=function(p,g){g===void 0&&(g=1),l=Math.max(l,g),p.filter(m=>m.getIsVisible()).forEach(m=>{var y;(y=m.columns)!=null&&y.length&&s(m.columns,g+1)},0)};s(e);let u=[];const a=(p,g)=>{const m={depth:g,id:[r,`${g}`].filter(Boolean).join("_"),headers:[]},y=[];p.forEach(E=>{const h=[...y].reverse()[0],d=E.column.depth===m.depth;let v,x=!1;if(d&&E.column.parent?v=E.column.parent:(v=E.column,x=!0),h&&(h==null?void 0:h.column)===v)h.subHeaders.push(E);else{const F=xd(n,v,{id:[r,g,v.id,E==null?void 0:E.id].filter(Boolean).join("_"),isPlaceholder:x,placeholderId:x?`${y.filter(M=>M.column===v).length}`:void 0,depth:g,index:y.length});F.subHeaders.push(E),y.push(F)}m.headers.push(E),E.headerGroup=m}),u.push(m),g>0&&a(y,g-1)},c=t.map((p,g)=>xd(n,p,{depth:l,index:g}));a(c,l-1),u.reverse();const f=p=>p.filter(m=>m.column.getIsVisible()).map(m=>{let y=0,E=0,h=[0];m.subHeaders&&m.subHeaders.length?(h=[],f(m.subHeaders).forEach(v=>{let{colSpan:x,rowSpan:F}=v;y+=x,h.push(F)})):y=1;const d=Math.min(...h);return E=E+d,m.colSpan=y,m.rowSpan=E,{colSpan:y,rowSpan:E}});return f((o=(i=u[0])==null?void 0:i.headers)!=null?o:[]),u}const qw=(e,t,n,r,o,i,l)=>{let s={id:t,index:r,original:n,depth:o,parentId:l,_valuesCache:{},_uniqueValuesCache:{},getValue:u=>{if(s._valuesCache.hasOwnProperty(u))return s._valuesCache[u];const a=e.getColumn(u);if(a!=null&&a.accessorFn)return s._valuesCache[u]=a.accessorFn(s.original,r),s._valuesCache[u]},getUniqueValues:u=>{if(s._uniqueValuesCache.hasOwnProperty(u))return s._uniqueValuesCache[u];const a=e.getColumn(u);if(a!=null&&a.accessorFn)return a.columnDef.getUniqueValues?(s._uniqueValuesCache[u]=a.columnDef.getUniqueValues(s.original,r),s._uniqueValuesCache[u]):(s._uniqueValuesCache[u]=[s.getValue(u)],s._uniqueValuesCache[u])},renderValue:u=>{var a;return(a=s.getValue(u))!=null?a:e.options.renderFallbackValue},subRows:[],getLeafRows:()=>Gw(s.subRows,u=>u.subRows),getParentRow:()=>s.parentId?e.getRow(s.parentId,!0):void 0,getParentRows:()=>{let u=[],a=s;for(;;){const c=a.getParentRow();if(!c)break;u.push(c),a=c}return u.reverse()},getAllCells:te(()=>[e.getAllLeafColumns()],u=>u.map(a=>Ww(e,s,a,a.id)),ne(e.options,"debugRows")),_getAllCellsByColumnId:te(()=>[s.getAllCells()],u=>u.reduce((a,c)=>(a[c.column.id]=c,a),{}),ne(e.options,"debugRows"))};for(let u=0;u{e._getFacetedRowModel=t.options.getFacetedRowModel&&t.options.getFacetedRowModel(t,e.id),e.getFacetedRowModel=()=>e._getFacetedRowModel?e._getFacetedRowModel():t.getPreFilteredRowModel(),e._getFacetedUniqueValues=t.options.getFacetedUniqueValues&&t.options.getFacetedUniqueValues(t,e.id),e.getFacetedUniqueValues=()=>e._getFacetedUniqueValues?e._getFacetedUniqueValues():new Map,e._getFacetedMinMaxValues=t.options.getFacetedMinMaxValues&&t.options.getFacetedMinMaxValues(t,e.id),e.getFacetedMinMaxValues=()=>{if(e._getFacetedMinMaxValues)return e._getFacetedMinMaxValues()}}},Tg=(e,t,n)=>{var r,o;const i=n==null||(r=n.toString())==null?void 0:r.toLowerCase();return!!(!((o=e.getValue(t))==null||(o=o.toString())==null||(o=o.toLowerCase())==null)&&o.includes(i))};Tg.autoRemove=e=>en(e);const Mg=(e,t,n)=>{var r;return!!(!((r=e.getValue(t))==null||(r=r.toString())==null)&&r.includes(n))};Mg.autoRemove=e=>en(e);const Og=(e,t,n)=>{var r;return((r=e.getValue(t))==null||(r=r.toString())==null?void 0:r.toLowerCase())===(n==null?void 0:n.toLowerCase())};Og.autoRemove=e=>en(e);const Ng=(e,t,n)=>{var r;return(r=e.getValue(t))==null?void 0:r.includes(n)};Ng.autoRemove=e=>en(e)||!(e!=null&&e.length);const Ag=(e,t,n)=>!n.some(r=>{var o;return!((o=e.getValue(t))!=null&&o.includes(r))});Ag.autoRemove=e=>en(e)||!(e!=null&&e.length);const Ig=(e,t,n)=>n.some(r=>{var o;return(o=e.getValue(t))==null?void 0:o.includes(r)});Ig.autoRemove=e=>en(e)||!(e!=null&&e.length);const zg=(e,t,n)=>e.getValue(t)===n;zg.autoRemove=e=>en(e);const Vg=(e,t,n)=>e.getValue(t)==n;Vg.autoRemove=e=>en(e);const kc=(e,t,n)=>{let[r,o]=n;const i=e.getValue(t);return i>=r&&i<=o};kc.resolveFilterValue=e=>{let[t,n]=e,r=typeof t!="number"?parseFloat(t):t,o=typeof n!="number"?parseFloat(n):n,i=t===null||Number.isNaN(r)?-1/0:r,l=n===null||Number.isNaN(o)?1/0:o;if(i>l){const s=i;i=l,l=s}return[i,l]};kc.autoRemove=e=>en(e)||en(e[0])&&en(e[1]);const vn={includesString:Tg,includesStringSensitive:Mg,equalsString:Og,arrIncludes:Ng,arrIncludesAll:Ag,arrIncludesSome:Ig,equals:zg,weakEquals:Vg,inNumberRange:kc};function en(e){return e==null||e===""}const Jw={getDefaultColumnDef:()=>({filterFn:"auto"}),getInitialState:e=>({columnFilters:[],...e}),getDefaultOptions:e=>({onColumnFiltersChange:Mt("columnFilters",e),filterFromLeafRows:!1,maxLeafRowFilterDepth:100}),createColumn:(e,t)=>{e.getAutoFilterFn=()=>{const n=t.getCoreRowModel().flatRows[0],r=n==null?void 0:n.getValue(e.id);return typeof r=="string"?vn.includesString:typeof r=="number"?vn.inNumberRange:typeof r=="boolean"||r!==null&&typeof r=="object"?vn.equals:Array.isArray(r)?vn.arrIncludes:vn.weakEquals},e.getFilterFn=()=>{var n,r;return vs(e.columnDef.filterFn)?e.columnDef.filterFn:e.columnDef.filterFn==="auto"?e.getAutoFilterFn():(n=(r=t.options.filterFns)==null?void 0:r[e.columnDef.filterFn])!=null?n:vn[e.columnDef.filterFn]},e.getCanFilter=()=>{var n,r,o;return((n=e.columnDef.enableColumnFilter)!=null?n:!0)&&((r=t.options.enableColumnFilters)!=null?r:!0)&&((o=t.options.enableFilters)!=null?o:!0)&&!!e.accessorFn},e.getIsFiltered=()=>e.getFilterIndex()>-1,e.getFilterValue=()=>{var n;return(n=t.getState().columnFilters)==null||(n=n.find(r=>r.id===e.id))==null?void 0:n.value},e.getFilterIndex=()=>{var n,r;return(n=(r=t.getState().columnFilters)==null?void 0:r.findIndex(o=>o.id===e.id))!=null?n:-1},e.setFilterValue=n=>{t.setColumnFilters(r=>{const o=e.getFilterFn(),i=r==null?void 0:r.find(c=>c.id===e.id),l=Bn(n,i?i.value:void 0);if(_d(o,l,e)){var s;return(s=r==null?void 0:r.filter(c=>c.id!==e.id))!=null?s:[]}const u={id:e.id,value:l};if(i){var a;return(a=r==null?void 0:r.map(c=>c.id===e.id?u:c))!=null?a:[]}return r!=null&&r.length?[...r,u]:[u]})}},createRow:(e,t)=>{e.columnFilters={},e.columnFiltersMeta={}},createTable:e=>{e.setColumnFilters=t=>{const n=e.getAllLeafColumns(),r=o=>{var i;return(i=Bn(t,o))==null?void 0:i.filter(l=>{const s=n.find(u=>u.id===l.id);if(s){const u=s.getFilterFn();if(_d(u,l.value,s))return!1}return!0})};e.options.onColumnFiltersChange==null||e.options.onColumnFiltersChange(r)},e.resetColumnFilters=t=>{var n,r;e.setColumnFilters(t?[]:(n=(r=e.initialState)==null?void 0:r.columnFilters)!=null?n:[])},e.getPreFilteredRowModel=()=>e.getCoreRowModel(),e.getFilteredRowModel=()=>(!e._getFilteredRowModel&&e.options.getFilteredRowModel&&(e._getFilteredRowModel=e.options.getFilteredRowModel(e)),e.options.manualFiltering||!e._getFilteredRowModel?e.getPreFilteredRowModel():e._getFilteredRowModel())}};function _d(e,t,n){return(e&&e.autoRemove?e.autoRemove(t,n):!1)||typeof t>"u"||typeof t=="string"&&!t}const Yw=(e,t,n)=>n.reduce((r,o)=>{const i=o.getValue(e);return r+(typeof i=="number"?i:0)},0),Zw=(e,t,n)=>{let r;return n.forEach(o=>{const i=o.getValue(e);i!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}),r},bw=(e,t,n)=>{let r;return n.forEach(o=>{const i=o.getValue(e);i!=null&&(r=i)&&(r=i)}),r},eS=(e,t,n)=>{let r,o;return n.forEach(i=>{const l=i.getValue(e);l!=null&&(r===void 0?l>=l&&(r=o=l):(r>l&&(r=l),o{let n=0,r=0;if(t.forEach(o=>{let i=o.getValue(e);i!=null&&(i=+i)>=i&&(++n,r+=i)}),n)return r/n},nS=(e,t)=>{if(!t.length)return;const n=t.map(i=>i.getValue(e));if(!Hw(n))return;if(n.length===1)return n[0];const r=Math.floor(n.length/2),o=n.sort((i,l)=>i-l);return n.length%2!==0?o[r]:(o[r-1]+o[r])/2},rS=(e,t)=>Array.from(new Set(t.map(n=>n.getValue(e))).values()),oS=(e,t)=>new Set(t.map(n=>n.getValue(e))).size,iS=(e,t)=>t.length,ou={sum:Yw,min:Zw,max:bw,extent:eS,mean:tS,median:nS,unique:rS,uniqueCount:oS,count:iS},lS={getDefaultColumnDef:()=>({aggregatedCell:e=>{var t,n;return(t=(n=e.getValue())==null||n.toString==null?void 0:n.toString())!=null?t:null},aggregationFn:"auto"}),getInitialState:e=>({grouping:[],...e}),getDefaultOptions:e=>({onGroupingChange:Mt("grouping",e),groupedColumnMode:"reorder"}),createColumn:(e,t)=>{e.toggleGrouping=()=>{t.setGrouping(n=>n!=null&&n.includes(e.id)?n.filter(r=>r!==e.id):[...n??[],e.id])},e.getCanGroup=()=>{var n,r;return((n=e.columnDef.enableGrouping)!=null?n:!0)&&((r=t.options.enableGrouping)!=null?r:!0)&&(!!e.accessorFn||!!e.columnDef.getGroupingValue)},e.getIsGrouped=()=>{var n;return(n=t.getState().grouping)==null?void 0:n.includes(e.id)},e.getGroupedIndex=()=>{var n;return(n=t.getState().grouping)==null?void 0:n.indexOf(e.id)},e.getToggleGroupingHandler=()=>{const n=e.getCanGroup();return()=>{n&&e.toggleGrouping()}},e.getAutoAggregationFn=()=>{const n=t.getCoreRowModel().flatRows[0],r=n==null?void 0:n.getValue(e.id);if(typeof r=="number")return ou.sum;if(Object.prototype.toString.call(r)==="[object Date]")return ou.extent},e.getAggregationFn=()=>{var n,r;if(!e)throw new Error;return vs(e.columnDef.aggregationFn)?e.columnDef.aggregationFn:e.columnDef.aggregationFn==="auto"?e.getAutoAggregationFn():(n=(r=t.options.aggregationFns)==null?void 0:r[e.columnDef.aggregationFn])!=null?n:ou[e.columnDef.aggregationFn]}},createTable:e=>{e.setGrouping=t=>e.options.onGroupingChange==null?void 0:e.options.onGroupingChange(t),e.resetGrouping=t=>{var n,r;e.setGrouping(t?[]:(n=(r=e.initialState)==null?void 0:r.grouping)!=null?n:[])},e.getPreGroupedRowModel=()=>e.getFilteredRowModel(),e.getGroupedRowModel=()=>(!e._getGroupedRowModel&&e.options.getGroupedRowModel&&(e._getGroupedRowModel=e.options.getGroupedRowModel(e)),e.options.manualGrouping||!e._getGroupedRowModel?e.getPreGroupedRowModel():e._getGroupedRowModel())},createRow:(e,t)=>{e.getIsGrouped=()=>!!e.groupingColumnId,e.getGroupingValue=n=>{if(e._groupingValuesCache.hasOwnProperty(n))return e._groupingValuesCache[n];const r=t.getColumn(n);return r!=null&&r.columnDef.getGroupingValue?(e._groupingValuesCache[n]=r.columnDef.getGroupingValue(e.original),e._groupingValuesCache[n]):e.getValue(n)},e._groupingValuesCache={}},createCell:(e,t,n,r)=>{e.getIsGrouped=()=>t.getIsGrouped()&&t.id===n.groupingColumnId,e.getIsPlaceholder=()=>!e.getIsGrouped()&&t.getIsGrouped(),e.getIsAggregated=()=>{var o;return!e.getIsGrouped()&&!e.getIsPlaceholder()&&!!((o=n.subRows)!=null&&o.length)}}};function sS(e,t,n){if(!(t!=null&&t.length)||!n)return e;const r=e.filter(i=>!t.includes(i.id));return n==="remove"?r:[...t.map(i=>e.find(l=>l.id===i)).filter(Boolean),...r]}const uS={getInitialState:e=>({columnOrder:[],...e}),getDefaultOptions:e=>({onColumnOrderChange:Mt("columnOrder",e)}),createColumn:(e,t)=>{e.getIndex=te(n=>[Go(t,n)],n=>n.findIndex(r=>r.id===e.id),ne(t.options,"debugColumns")),e.getIsFirstColumn=n=>{var r;return((r=Go(t,n)[0])==null?void 0:r.id)===e.id},e.getIsLastColumn=n=>{var r;const o=Go(t,n);return((r=o[o.length-1])==null?void 0:r.id)===e.id}},createTable:e=>{e.setColumnOrder=t=>e.options.onColumnOrderChange==null?void 0:e.options.onColumnOrderChange(t),e.resetColumnOrder=t=>{var n;e.setColumnOrder(t?[]:(n=e.initialState.columnOrder)!=null?n:[])},e._getOrderColumnsFn=te(()=>[e.getState().columnOrder,e.getState().grouping,e.options.groupedColumnMode],(t,n,r)=>o=>{let i=[];if(!(t!=null&&t.length))i=o;else{const l=[...t],s=[...o];for(;s.length&&l.length;){const u=l.shift(),a=s.findIndex(c=>c.id===u);a>-1&&i.push(s.splice(a,1)[0])}i=[...i,...s]}return sS(i,n,r)},ne(e.options,"debugTable"))}},iu=()=>({left:[],right:[]}),aS={getInitialState:e=>({columnPinning:iu(),...e}),getDefaultOptions:e=>({onColumnPinningChange:Mt("columnPinning",e)}),createColumn:(e,t)=>{e.pin=n=>{const r=e.getLeafColumns().map(o=>o.id).filter(Boolean);t.setColumnPinning(o=>{var i,l;if(n==="right"){var s,u;return{left:((s=o==null?void 0:o.left)!=null?s:[]).filter(f=>!(r!=null&&r.includes(f))),right:[...((u=o==null?void 0:o.right)!=null?u:[]).filter(f=>!(r!=null&&r.includes(f))),...r]}}if(n==="left"){var a,c;return{left:[...((a=o==null?void 0:o.left)!=null?a:[]).filter(f=>!(r!=null&&r.includes(f))),...r],right:((c=o==null?void 0:o.right)!=null?c:[]).filter(f=>!(r!=null&&r.includes(f)))}}return{left:((i=o==null?void 0:o.left)!=null?i:[]).filter(f=>!(r!=null&&r.includes(f))),right:((l=o==null?void 0:o.right)!=null?l:[]).filter(f=>!(r!=null&&r.includes(f)))}})},e.getCanPin=()=>e.getLeafColumns().some(r=>{var o,i,l;return((o=r.columnDef.enablePinning)!=null?o:!0)&&((i=(l=t.options.enableColumnPinning)!=null?l:t.options.enablePinning)!=null?i:!0)}),e.getIsPinned=()=>{const n=e.getLeafColumns().map(s=>s.id),{left:r,right:o}=t.getState().columnPinning,i=n.some(s=>r==null?void 0:r.includes(s)),l=n.some(s=>o==null?void 0:o.includes(s));return i?"left":l?"right":!1},e.getPinnedIndex=()=>{var n,r;const o=e.getIsPinned();return o?(n=(r=t.getState().columnPinning)==null||(r=r[o])==null?void 0:r.indexOf(e.id))!=null?n:-1:0}},createRow:(e,t)=>{e.getCenterVisibleCells=te(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left,t.getState().columnPinning.right],(n,r,o)=>{const i=[...r??[],...o??[]];return n.filter(l=>!i.includes(l.column.id))},ne(t.options,"debugRows")),e.getLeftVisibleCells=te(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left],(n,r)=>(r??[]).map(i=>n.find(l=>l.column.id===i)).filter(Boolean).map(i=>({...i,position:"left"})),ne(t.options,"debugRows")),e.getRightVisibleCells=te(()=>[e._getAllVisibleCells(),t.getState().columnPinning.right],(n,r)=>(r??[]).map(i=>n.find(l=>l.column.id===i)).filter(Boolean).map(i=>({...i,position:"right"})),ne(t.options,"debugRows"))},createTable:e=>{e.setColumnPinning=t=>e.options.onColumnPinningChange==null?void 0:e.options.onColumnPinningChange(t),e.resetColumnPinning=t=>{var n,r;return e.setColumnPinning(t?iu():(n=(r=e.initialState)==null?void 0:r.columnPinning)!=null?n:iu())},e.getIsSomeColumnsPinned=t=>{var n;const r=e.getState().columnPinning;if(!t){var o,i;return!!((o=r.left)!=null&&o.length||(i=r.right)!=null&&i.length)}return!!((n=r[t])!=null&&n.length)},e.getLeftLeafColumns=te(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left],(t,n)=>(n??[]).map(r=>t.find(o=>o.id===r)).filter(Boolean),ne(e.options,"debugColumns")),e.getRightLeafColumns=te(()=>[e.getAllLeafColumns(),e.getState().columnPinning.right],(t,n)=>(n??[]).map(r=>t.find(o=>o.id===r)).filter(Boolean),ne(e.options,"debugColumns")),e.getCenterLeafColumns=te(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r)=>{const o=[...n??[],...r??[]];return t.filter(i=>!o.includes(i.id))},ne(e.options,"debugColumns"))}},el={size:150,minSize:20,maxSize:Number.MAX_SAFE_INTEGER},lu=()=>({startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}),cS={getDefaultColumnDef:()=>el,getInitialState:e=>({columnSizing:{},columnSizingInfo:lu(),...e}),getDefaultOptions:e=>({columnResizeMode:"onEnd",columnResizeDirection:"ltr",onColumnSizingChange:Mt("columnSizing",e),onColumnSizingInfoChange:Mt("columnSizingInfo",e)}),createColumn:(e,t)=>{e.getSize=()=>{var n,r,o;const i=t.getState().columnSizing[e.id];return Math.min(Math.max((n=e.columnDef.minSize)!=null?n:el.minSize,(r=i??e.columnDef.size)!=null?r:el.size),(o=e.columnDef.maxSize)!=null?o:el.maxSize)},e.getStart=te(n=>[n,Go(t,n),t.getState().columnSizing],(n,r)=>r.slice(0,e.getIndex(n)).reduce((o,i)=>o+i.getSize(),0),ne(t.options,"debugColumns")),e.getAfter=te(n=>[n,Go(t,n),t.getState().columnSizing],(n,r)=>r.slice(e.getIndex(n)+1).reduce((o,i)=>o+i.getSize(),0),ne(t.options,"debugColumns")),e.resetSize=()=>{t.setColumnSizing(n=>{let{[e.id]:r,...o}=n;return o})},e.getCanResize=()=>{var n,r;return((n=e.columnDef.enableResizing)!=null?n:!0)&&((r=t.options.enableColumnResizing)!=null?r:!0)},e.getIsResizing=()=>t.getState().columnSizingInfo.isResizingColumn===e.id},createHeader:(e,t)=>{e.getSize=()=>{let n=0;const r=o=>{if(o.subHeaders.length)o.subHeaders.forEach(r);else{var i;n+=(i=o.column.getSize())!=null?i:0}};return r(e),n},e.getStart=()=>{if(e.index>0){const n=e.headerGroup.headers[e.index-1];return n.getStart()+n.getSize()}return 0},e.getResizeHandler=n=>{const r=t.getColumn(e.column.id),o=r==null?void 0:r.getCanResize();return i=>{if(!r||!o||(i.persist==null||i.persist(),su(i)&&i.touches&&i.touches.length>1))return;const l=e.getSize(),s=e?e.getLeafHeaders().map(h=>[h.column.id,h.column.getSize()]):[[r.id,r.getSize()]],u=su(i)?Math.round(i.touches[0].clientX):i.clientX,a={},c=(h,d)=>{typeof d=="number"&&(t.setColumnSizingInfo(v=>{var x,F;const M=t.options.columnResizeDirection==="rtl"?-1:1,A=(d-((x=v==null?void 0:v.startOffset)!=null?x:0))*M,C=Math.max(A/((F=v==null?void 0:v.startSize)!=null?F:0),-.999999);return v.columnSizingStart.forEach(U=>{let[I,Y]=U;a[I]=Math.round(Math.max(Y+Y*C,0)*100)/100}),{...v,deltaOffset:A,deltaPercentage:C}}),(t.options.columnResizeMode==="onChange"||h==="end")&&t.setColumnSizing(v=>({...v,...a})))},f=h=>c("move",h),p=h=>{c("end",h),t.setColumnSizingInfo(d=>({...d,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]}))},g=n||typeof document<"u"?document:null,m={moveHandler:h=>f(h.clientX),upHandler:h=>{g==null||g.removeEventListener("mousemove",m.moveHandler),g==null||g.removeEventListener("mouseup",m.upHandler),p(h.clientX)}},y={moveHandler:h=>(h.cancelable&&(h.preventDefault(),h.stopPropagation()),f(h.touches[0].clientX),!1),upHandler:h=>{var d;g==null||g.removeEventListener("touchmove",y.moveHandler),g==null||g.removeEventListener("touchend",y.upHandler),h.cancelable&&(h.preventDefault(),h.stopPropagation()),p((d=h.touches[0])==null?void 0:d.clientX)}},E=fS()?{passive:!1}:!1;su(i)?(g==null||g.addEventListener("touchmove",y.moveHandler,E),g==null||g.addEventListener("touchend",y.upHandler,E)):(g==null||g.addEventListener("mousemove",m.moveHandler,E),g==null||g.addEventListener("mouseup",m.upHandler,E)),t.setColumnSizingInfo(h=>({...h,startOffset:u,startSize:l,deltaOffset:0,deltaPercentage:0,columnSizingStart:s,isResizingColumn:r.id}))}}},createTable:e=>{e.setColumnSizing=t=>e.options.onColumnSizingChange==null?void 0:e.options.onColumnSizingChange(t),e.setColumnSizingInfo=t=>e.options.onColumnSizingInfoChange==null?void 0:e.options.onColumnSizingInfoChange(t),e.resetColumnSizing=t=>{var n;e.setColumnSizing(t?{}:(n=e.initialState.columnSizing)!=null?n:{})},e.resetHeaderSizeInfo=t=>{var n;e.setColumnSizingInfo(t?lu():(n=e.initialState.columnSizingInfo)!=null?n:lu())},e.getTotalSize=()=>{var t,n;return(t=(n=e.getHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0},e.getLeftTotalSize=()=>{var t,n;return(t=(n=e.getLeftHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0},e.getCenterTotalSize=()=>{var t,n;return(t=(n=e.getCenterHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0},e.getRightTotalSize=()=>{var t,n;return(t=(n=e.getRightHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0}}};let tl=null;function fS(){if(typeof tl=="boolean")return tl;let e=!1;try{const t={get passive(){return e=!0,!1}},n=()=>{};window.addEventListener("test",n,t),window.removeEventListener("test",n)}catch{e=!1}return tl=e,tl}function su(e){return e.type==="touchstart"}const dS={getInitialState:e=>({columnVisibility:{},...e}),getDefaultOptions:e=>({onColumnVisibilityChange:Mt("columnVisibility",e)}),createColumn:(e,t)=>{e.toggleVisibility=n=>{e.getCanHide()&&t.setColumnVisibility(r=>({...r,[e.id]:n??!e.getIsVisible()}))},e.getIsVisible=()=>{var n,r;const o=e.columns;return(n=o.length?o.some(i=>i.getIsVisible()):(r=t.getState().columnVisibility)==null?void 0:r[e.id])!=null?n:!0},e.getCanHide=()=>{var n,r;return((n=e.columnDef.enableHiding)!=null?n:!0)&&((r=t.options.enableHiding)!=null?r:!0)},e.getToggleVisibilityHandler=()=>n=>{e.toggleVisibility==null||e.toggleVisibility(n.target.checked)}},createRow:(e,t)=>{e._getAllVisibleCells=te(()=>[e.getAllCells(),t.getState().columnVisibility],n=>n.filter(r=>r.column.getIsVisible()),ne(t.options,"debugRows")),e.getVisibleCells=te(()=>[e.getLeftVisibleCells(),e.getCenterVisibleCells(),e.getRightVisibleCells()],(n,r,o)=>[...n,...r,...o],ne(t.options,"debugRows"))},createTable:e=>{const t=(n,r)=>te(()=>[r(),r().filter(o=>o.getIsVisible()).map(o=>o.id).join("_")],o=>o.filter(i=>i.getIsVisible==null?void 0:i.getIsVisible()),ne(e.options,"debugColumns"));e.getVisibleFlatColumns=t("getVisibleFlatColumns",()=>e.getAllFlatColumns()),e.getVisibleLeafColumns=t("getVisibleLeafColumns",()=>e.getAllLeafColumns()),e.getLeftVisibleLeafColumns=t("getLeftVisibleLeafColumns",()=>e.getLeftLeafColumns()),e.getRightVisibleLeafColumns=t("getRightVisibleLeafColumns",()=>e.getRightLeafColumns()),e.getCenterVisibleLeafColumns=t("getCenterVisibleLeafColumns",()=>e.getCenterLeafColumns()),e.setColumnVisibility=n=>e.options.onColumnVisibilityChange==null?void 0:e.options.onColumnVisibilityChange(n),e.resetColumnVisibility=n=>{var r;e.setColumnVisibility(n?{}:(r=e.initialState.columnVisibility)!=null?r:{})},e.toggleAllColumnsVisible=n=>{var r;n=(r=n)!=null?r:!e.getIsAllColumnsVisible(),e.setColumnVisibility(e.getAllLeafColumns().reduce((o,i)=>({...o,[i.id]:n||!(i.getCanHide!=null&&i.getCanHide())}),{}))},e.getIsAllColumnsVisible=()=>!e.getAllLeafColumns().some(n=>!(n.getIsVisible!=null&&n.getIsVisible())),e.getIsSomeColumnsVisible=()=>e.getAllLeafColumns().some(n=>n.getIsVisible==null?void 0:n.getIsVisible()),e.getToggleAllColumnsVisibilityHandler=()=>n=>{var r;e.toggleAllColumnsVisible((r=n.target)==null?void 0:r.checked)}}};function Go(e,t){return t?t==="center"?e.getCenterVisibleLeafColumns():t==="left"?e.getLeftVisibleLeafColumns():e.getRightVisibleLeafColumns():e.getVisibleLeafColumns()}const pS={createTable:e=>{e._getGlobalFacetedRowModel=e.options.getFacetedRowModel&&e.options.getFacetedRowModel(e,"__global__"),e.getGlobalFacetedRowModel=()=>e.options.manualFiltering||!e._getGlobalFacetedRowModel?e.getPreFilteredRowModel():e._getGlobalFacetedRowModel(),e._getGlobalFacetedUniqueValues=e.options.getFacetedUniqueValues&&e.options.getFacetedUniqueValues(e,"__global__"),e.getGlobalFacetedUniqueValues=()=>e._getGlobalFacetedUniqueValues?e._getGlobalFacetedUniqueValues():new Map,e._getGlobalFacetedMinMaxValues=e.options.getFacetedMinMaxValues&&e.options.getFacetedMinMaxValues(e,"__global__"),e.getGlobalFacetedMinMaxValues=()=>{if(e._getGlobalFacetedMinMaxValues)return e._getGlobalFacetedMinMaxValues()}}},hS={getInitialState:e=>({globalFilter:void 0,...e}),getDefaultOptions:e=>({onGlobalFilterChange:Mt("globalFilter",e),globalFilterFn:"auto",getColumnCanGlobalFilter:t=>{var n;const r=(n=e.getCoreRowModel().flatRows[0])==null||(n=n._getAllCellsByColumnId()[t.id])==null?void 0:n.getValue();return typeof r=="string"||typeof r=="number"}}),createColumn:(e,t)=>{e.getCanGlobalFilter=()=>{var n,r,o,i;return((n=e.columnDef.enableGlobalFilter)!=null?n:!0)&&((r=t.options.enableGlobalFilter)!=null?r:!0)&&((o=t.options.enableFilters)!=null?o:!0)&&((i=t.options.getColumnCanGlobalFilter==null?void 0:t.options.getColumnCanGlobalFilter(e))!=null?i:!0)&&!!e.accessorFn}},createTable:e=>{e.getGlobalAutoFilterFn=()=>vn.includesString,e.getGlobalFilterFn=()=>{var t,n;const{globalFilterFn:r}=e.options;return vs(r)?r:r==="auto"?e.getGlobalAutoFilterFn():(t=(n=e.options.filterFns)==null?void 0:n[r])!=null?t:vn[r]},e.setGlobalFilter=t=>{e.options.onGlobalFilterChange==null||e.options.onGlobalFilterChange(t)},e.resetGlobalFilter=t=>{e.setGlobalFilter(t?void 0:e.initialState.globalFilter)}}},gS={getInitialState:e=>({expanded:{},...e}),getDefaultOptions:e=>({onExpandedChange:Mt("expanded",e),paginateExpandedRows:!0}),createTable:e=>{let t=!1,n=!1;e._autoResetExpanded=()=>{var r,o;if(!t){e._queue(()=>{t=!0});return}if((r=(o=e.options.autoResetAll)!=null?o:e.options.autoResetExpanded)!=null?r:!e.options.manualExpanding){if(n)return;n=!0,e._queue(()=>{e.resetExpanded(),n=!1})}},e.setExpanded=r=>e.options.onExpandedChange==null?void 0:e.options.onExpandedChange(r),e.toggleAllRowsExpanded=r=>{r??!e.getIsAllRowsExpanded()?e.setExpanded(!0):e.setExpanded({})},e.resetExpanded=r=>{var o,i;e.setExpanded(r?{}:(o=(i=e.initialState)==null?void 0:i.expanded)!=null?o:{})},e.getCanSomeRowsExpand=()=>e.getPrePaginationRowModel().flatRows.some(r=>r.getCanExpand()),e.getToggleAllRowsExpandedHandler=()=>r=>{r.persist==null||r.persist(),e.toggleAllRowsExpanded()},e.getIsSomeRowsExpanded=()=>{const r=e.getState().expanded;return r===!0||Object.values(r).some(Boolean)},e.getIsAllRowsExpanded=()=>{const r=e.getState().expanded;return typeof r=="boolean"?r===!0:!(!Object.keys(r).length||e.getRowModel().flatRows.some(o=>!o.getIsExpanded()))},e.getExpandedDepth=()=>{let r=0;return(e.getState().expanded===!0?Object.keys(e.getRowModel().rowsById):Object.keys(e.getState().expanded)).forEach(i=>{const l=i.split(".");r=Math.max(r,l.length)}),r},e.getPreExpandedRowModel=()=>e.getSortedRowModel(),e.getExpandedRowModel=()=>(!e._getExpandedRowModel&&e.options.getExpandedRowModel&&(e._getExpandedRowModel=e.options.getExpandedRowModel(e)),e.options.manualExpanding||!e._getExpandedRowModel?e.getPreExpandedRowModel():e._getExpandedRowModel())},createRow:(e,t)=>{e.toggleExpanded=n=>{t.setExpanded(r=>{var o;const i=r===!0?!0:!!(r!=null&&r[e.id]);let l={};if(r===!0?Object.keys(t.getRowModel().rowsById).forEach(s=>{l[s]=!0}):l=r,n=(o=n)!=null?o:!i,!i&&n)return{...l,[e.id]:!0};if(i&&!n){const{[e.id]:s,...u}=l;return u}return r})},e.getIsExpanded=()=>{var n;const r=t.getState().expanded;return!!((n=t.options.getIsRowExpanded==null?void 0:t.options.getIsRowExpanded(e))!=null?n:r===!0||r!=null&&r[e.id])},e.getCanExpand=()=>{var n,r,o;return(n=t.options.getRowCanExpand==null?void 0:t.options.getRowCanExpand(e))!=null?n:((r=t.options.enableExpanding)!=null?r:!0)&&!!((o=e.subRows)!=null&&o.length)},e.getIsAllParentsExpanded=()=>{let n=!0,r=e;for(;n&&r.parentId;)r=t.getRow(r.parentId,!0),n=r.getIsExpanded();return n},e.getToggleExpandedHandler=()=>{const n=e.getCanExpand();return()=>{n&&e.toggleExpanded()}}}},pa=0,ha=10,uu=()=>({pageIndex:pa,pageSize:ha}),mS={getInitialState:e=>({...e,pagination:{...uu(),...e==null?void 0:e.pagination}}),getDefaultOptions:e=>({onPaginationChange:Mt("pagination",e)}),createTable:e=>{let t=!1,n=!1;e._autoResetPageIndex=()=>{var r,o;if(!t){e._queue(()=>{t=!0});return}if((r=(o=e.options.autoResetAll)!=null?o:e.options.autoResetPageIndex)!=null?r:!e.options.manualPagination){if(n)return;n=!0,e._queue(()=>{e.resetPageIndex(),n=!1})}},e.setPagination=r=>{const o=i=>Bn(r,i);return e.options.onPaginationChange==null?void 0:e.options.onPaginationChange(o)},e.resetPagination=r=>{var o;e.setPagination(r?uu():(o=e.initialState.pagination)!=null?o:uu())},e.setPageIndex=r=>{e.setPagination(o=>{let i=Bn(r,o.pageIndex);const l=typeof e.options.pageCount>"u"||e.options.pageCount===-1?Number.MAX_SAFE_INTEGER:e.options.pageCount-1;return i=Math.max(0,Math.min(i,l)),{...o,pageIndex:i}})},e.resetPageIndex=r=>{var o,i;e.setPageIndex(r?pa:(o=(i=e.initialState)==null||(i=i.pagination)==null?void 0:i.pageIndex)!=null?o:pa)},e.resetPageSize=r=>{var o,i;e.setPageSize(r?ha:(o=(i=e.initialState)==null||(i=i.pagination)==null?void 0:i.pageSize)!=null?o:ha)},e.setPageSize=r=>{e.setPagination(o=>{const i=Math.max(1,Bn(r,o.pageSize)),l=o.pageSize*o.pageIndex,s=Math.floor(l/i);return{...o,pageIndex:s,pageSize:i}})},e.setPageCount=r=>e.setPagination(o=>{var i;let l=Bn(r,(i=e.options.pageCount)!=null?i:-1);return typeof l=="number"&&(l=Math.max(-1,l)),{...o,pageCount:l}}),e.getPageOptions=te(()=>[e.getPageCount()],r=>{let o=[];return r&&r>0&&(o=[...new Array(r)].fill(null).map((i,l)=>l)),o},ne(e.options,"debugTable")),e.getCanPreviousPage=()=>e.getState().pagination.pageIndex>0,e.getCanNextPage=()=>{const{pageIndex:r}=e.getState().pagination,o=e.getPageCount();return o===-1?!0:o===0?!1:re.setPageIndex(r=>r-1),e.nextPage=()=>e.setPageIndex(r=>r+1),e.firstPage=()=>e.setPageIndex(0),e.lastPage=()=>e.setPageIndex(e.getPageCount()-1),e.getPrePaginationRowModel=()=>e.getExpandedRowModel(),e.getPaginationRowModel=()=>(!e._getPaginationRowModel&&e.options.getPaginationRowModel&&(e._getPaginationRowModel=e.options.getPaginationRowModel(e)),e.options.manualPagination||!e._getPaginationRowModel?e.getPrePaginationRowModel():e._getPaginationRowModel()),e.getPageCount=()=>{var r;return(r=e.options.pageCount)!=null?r:Math.ceil(e.getRowCount()/e.getState().pagination.pageSize)},e.getRowCount=()=>{var r;return(r=e.options.rowCount)!=null?r:e.getPrePaginationRowModel().rows.length}}},au=()=>({top:[],bottom:[]}),vS={getInitialState:e=>({rowPinning:au(),...e}),getDefaultOptions:e=>({onRowPinningChange:Mt("rowPinning",e)}),createRow:(e,t)=>{e.pin=(n,r,o)=>{const i=r?e.getLeafRows().map(u=>{let{id:a}=u;return a}):[],l=o?e.getParentRows().map(u=>{let{id:a}=u;return a}):[],s=new Set([...l,e.id,...i]);t.setRowPinning(u=>{var a,c;if(n==="bottom"){var f,p;return{top:((f=u==null?void 0:u.top)!=null?f:[]).filter(y=>!(s!=null&&s.has(y))),bottom:[...((p=u==null?void 0:u.bottom)!=null?p:[]).filter(y=>!(s!=null&&s.has(y))),...Array.from(s)]}}if(n==="top"){var g,m;return{top:[...((g=u==null?void 0:u.top)!=null?g:[]).filter(y=>!(s!=null&&s.has(y))),...Array.from(s)],bottom:((m=u==null?void 0:u.bottom)!=null?m:[]).filter(y=>!(s!=null&&s.has(y)))}}return{top:((a=u==null?void 0:u.top)!=null?a:[]).filter(y=>!(s!=null&&s.has(y))),bottom:((c=u==null?void 0:u.bottom)!=null?c:[]).filter(y=>!(s!=null&&s.has(y)))}})},e.getCanPin=()=>{var n;const{enableRowPinning:r,enablePinning:o}=t.options;return typeof r=="function"?r(e):(n=r??o)!=null?n:!0},e.getIsPinned=()=>{const n=[e.id],{top:r,bottom:o}=t.getState().rowPinning,i=n.some(s=>r==null?void 0:r.includes(s)),l=n.some(s=>o==null?void 0:o.includes(s));return i?"top":l?"bottom":!1},e.getPinnedIndex=()=>{var n,r;const o=e.getIsPinned();if(!o)return-1;const i=(n=o==="top"?t.getTopRows():t.getBottomRows())==null?void 0:n.map(l=>{let{id:s}=l;return s});return(r=i==null?void 0:i.indexOf(e.id))!=null?r:-1}},createTable:e=>{e.setRowPinning=t=>e.options.onRowPinningChange==null?void 0:e.options.onRowPinningChange(t),e.resetRowPinning=t=>{var n,r;return e.setRowPinning(t?au():(n=(r=e.initialState)==null?void 0:r.rowPinning)!=null?n:au())},e.getIsSomeRowsPinned=t=>{var n;const r=e.getState().rowPinning;if(!t){var o,i;return!!((o=r.top)!=null&&o.length||(i=r.bottom)!=null&&i.length)}return!!((n=r[t])!=null&&n.length)},e._getPinnedRows=(t,n,r)=>{var o;return((o=e.options.keepPinnedRows)==null||o?(n??[]).map(l=>{const s=e.getRow(l,!0);return s.getIsAllParentsExpanded()?s:null}):(n??[]).map(l=>t.find(s=>s.id===l))).filter(Boolean).map(l=>({...l,position:r}))},e.getTopRows=te(()=>[e.getRowModel().rows,e.getState().rowPinning.top],(t,n)=>e._getPinnedRows(t,n,"top"),ne(e.options,"debugRows")),e.getBottomRows=te(()=>[e.getRowModel().rows,e.getState().rowPinning.bottom],(t,n)=>e._getPinnedRows(t,n,"bottom"),ne(e.options,"debugRows")),e.getCenterRows=te(()=>[e.getRowModel().rows,e.getState().rowPinning.top,e.getState().rowPinning.bottom],(t,n,r)=>{const o=new Set([...n??[],...r??[]]);return t.filter(i=>!o.has(i.id))},ne(e.options,"debugRows"))}},yS={getInitialState:e=>({rowSelection:{},...e}),getDefaultOptions:e=>({onRowSelectionChange:Mt("rowSelection",e),enableRowSelection:!0,enableMultiRowSelection:!0,enableSubRowSelection:!0}),createTable:e=>{e.setRowSelection=t=>e.options.onRowSelectionChange==null?void 0:e.options.onRowSelectionChange(t),e.resetRowSelection=t=>{var n;return e.setRowSelection(t?{}:(n=e.initialState.rowSelection)!=null?n:{})},e.toggleAllRowsSelected=t=>{e.setRowSelection(n=>{t=typeof t<"u"?t:!e.getIsAllRowsSelected();const r={...n},o=e.getPreGroupedRowModel().flatRows;return t?o.forEach(i=>{i.getCanSelect()&&(r[i.id]=!0)}):o.forEach(i=>{delete r[i.id]}),r})},e.toggleAllPageRowsSelected=t=>e.setRowSelection(n=>{const r=typeof t<"u"?t:!e.getIsAllPageRowsSelected(),o={...n};return e.getRowModel().rows.forEach(i=>{ga(o,i.id,r,!0,e)}),o}),e.getPreSelectedRowModel=()=>e.getCoreRowModel(),e.getSelectedRowModel=te(()=>[e.getState().rowSelection,e.getCoreRowModel()],(t,n)=>Object.keys(t).length?cu(e,n):{rows:[],flatRows:[],rowsById:{}},ne(e.options,"debugTable")),e.getFilteredSelectedRowModel=te(()=>[e.getState().rowSelection,e.getFilteredRowModel()],(t,n)=>Object.keys(t).length?cu(e,n):{rows:[],flatRows:[],rowsById:{}},ne(e.options,"debugTable")),e.getGroupedSelectedRowModel=te(()=>[e.getState().rowSelection,e.getSortedRowModel()],(t,n)=>Object.keys(t).length?cu(e,n):{rows:[],flatRows:[],rowsById:{}},ne(e.options,"debugTable")),e.getIsAllRowsSelected=()=>{const t=e.getFilteredRowModel().flatRows,{rowSelection:n}=e.getState();let r=!!(t.length&&Object.keys(n).length);return r&&t.some(o=>o.getCanSelect()&&!n[o.id])&&(r=!1),r},e.getIsAllPageRowsSelected=()=>{const t=e.getPaginationRowModel().flatRows.filter(o=>o.getCanSelect()),{rowSelection:n}=e.getState();let r=!!t.length;return r&&t.some(o=>!n[o.id])&&(r=!1),r},e.getIsSomeRowsSelected=()=>{var t;const n=Object.keys((t=e.getState().rowSelection)!=null?t:{}).length;return n>0&&n{const t=e.getPaginationRowModel().flatRows;return e.getIsAllPageRowsSelected()?!1:t.filter(n=>n.getCanSelect()).some(n=>n.getIsSelected()||n.getIsSomeSelected())},e.getToggleAllRowsSelectedHandler=()=>t=>{e.toggleAllRowsSelected(t.target.checked)},e.getToggleAllPageRowsSelectedHandler=()=>t=>{e.toggleAllPageRowsSelected(t.target.checked)}},createRow:(e,t)=>{e.toggleSelected=(n,r)=>{const o=e.getIsSelected();t.setRowSelection(i=>{var l;if(n=typeof n<"u"?n:!o,e.getCanSelect()&&o===n)return i;const s={...i};return ga(s,e.id,n,(l=r==null?void 0:r.selectChildren)!=null?l:!0,t),s})},e.getIsSelected=()=>{const{rowSelection:n}=t.getState();return Fc(e,n)},e.getIsSomeSelected=()=>{const{rowSelection:n}=t.getState();return ma(e,n)==="some"},e.getIsAllSubRowsSelected=()=>{const{rowSelection:n}=t.getState();return ma(e,n)==="all"},e.getCanSelect=()=>{var n;return typeof t.options.enableRowSelection=="function"?t.options.enableRowSelection(e):(n=t.options.enableRowSelection)!=null?n:!0},e.getCanSelectSubRows=()=>{var n;return typeof t.options.enableSubRowSelection=="function"?t.options.enableSubRowSelection(e):(n=t.options.enableSubRowSelection)!=null?n:!0},e.getCanMultiSelect=()=>{var n;return typeof t.options.enableMultiRowSelection=="function"?t.options.enableMultiRowSelection(e):(n=t.options.enableMultiRowSelection)!=null?n:!0},e.getToggleSelectedHandler=()=>{const n=e.getCanSelect();return r=>{var o;n&&e.toggleSelected((o=r.target)==null?void 0:o.checked)}}}},ga=(e,t,n,r,o)=>{var i;const l=o.getRow(t,!0);n?(l.getCanMultiSelect()||Object.keys(e).forEach(s=>delete e[s]),l.getCanSelect()&&(e[t]=!0)):delete e[t],r&&(i=l.subRows)!=null&&i.length&&l.getCanSelectSubRows()&&l.subRows.forEach(s=>ga(e,s.id,n,r,o))};function cu(e,t){const n=e.getState().rowSelection,r=[],o={},i=function(l,s){return l.map(u=>{var a;const c=Fc(u,n);if(c&&(r.push(u),o[u.id]=u),(a=u.subRows)!=null&&a.length&&(u={...u,subRows:i(u.subRows)}),c)return u}).filter(Boolean)};return{rows:i(t.rows),flatRows:r,rowsById:o}}function Fc(e,t){var n;return(n=t[e.id])!=null?n:!1}function ma(e,t,n){var r;if(!((r=e.subRows)!=null&&r.length))return!1;let o=!0,i=!1;return e.subRows.forEach(l=>{if(!(i&&!o)&&(l.getCanSelect()&&(Fc(l,t)?i=!0:o=!1),l.subRows&&l.subRows.length)){const s=ma(l,t);s==="all"?i=!0:(s==="some"&&(i=!0),o=!1)}}),o?"all":i?"some":!1}const va=/([0-9]+)/gm,wS=(e,t,n)=>$g(bn(e.getValue(n)).toLowerCase(),bn(t.getValue(n)).toLowerCase()),SS=(e,t,n)=>$g(bn(e.getValue(n)),bn(t.getValue(n))),CS=(e,t,n)=>Dc(bn(e.getValue(n)).toLowerCase(),bn(t.getValue(n)).toLowerCase()),RS=(e,t,n)=>Dc(bn(e.getValue(n)),bn(t.getValue(n))),ES=(e,t,n)=>{const r=e.getValue(n),o=t.getValue(n);return r>o?1:rDc(e.getValue(n),t.getValue(n));function Dc(e,t){return e===t?0:e>t?1:-1}function bn(e){return typeof e=="number"?isNaN(e)||e===1/0||e===-1/0?"":String(e):typeof e=="string"?e:""}function $g(e,t){const n=e.split(va).filter(Boolean),r=t.split(va).filter(Boolean);for(;n.length&&r.length;){const o=n.shift(),i=r.shift(),l=parseInt(o,10),s=parseInt(i,10),u=[l,s].sort();if(isNaN(u[0])){if(o>i)return 1;if(i>o)return-1;continue}if(isNaN(u[1]))return isNaN(l)?-1:1;if(l>s)return 1;if(s>l)return-1}return n.length-r.length}const ko={alphanumeric:wS,alphanumericCaseSensitive:SS,text:CS,textCaseSensitive:RS,datetime:ES,basic:xS},_S={getInitialState:e=>({sorting:[],...e}),getDefaultColumnDef:()=>({sortingFn:"auto",sortUndefined:1}),getDefaultOptions:e=>({onSortingChange:Mt("sorting",e),isMultiSortEvent:t=>t.shiftKey}),createColumn:(e,t)=>{e.getAutoSortingFn=()=>{const n=t.getFilteredRowModel().flatRows.slice(10);let r=!1;for(const o of n){const i=o==null?void 0:o.getValue(e.id);if(Object.prototype.toString.call(i)==="[object Date]")return ko.datetime;if(typeof i=="string"&&(r=!0,i.split(va).length>1))return ko.alphanumeric}return r?ko.text:ko.basic},e.getAutoSortDir=()=>{const n=t.getFilteredRowModel().flatRows[0];return typeof(n==null?void 0:n.getValue(e.id))=="string"?"asc":"desc"},e.getSortingFn=()=>{var n,r;if(!e)throw new Error;return vs(e.columnDef.sortingFn)?e.columnDef.sortingFn:e.columnDef.sortingFn==="auto"?e.getAutoSortingFn():(n=(r=t.options.sortingFns)==null?void 0:r[e.columnDef.sortingFn])!=null?n:ko[e.columnDef.sortingFn]},e.toggleSorting=(n,r)=>{const o=e.getNextSortingOrder(),i=typeof n<"u"&&n!==null;t.setSorting(l=>{const s=l==null?void 0:l.find(g=>g.id===e.id),u=l==null?void 0:l.findIndex(g=>g.id===e.id);let a=[],c,f=i?n:o==="desc";if(l!=null&&l.length&&e.getCanMultiSort()&&r?s?c="toggle":c="add":l!=null&&l.length&&u!==l.length-1?c="replace":s?c="toggle":c="replace",c==="toggle"&&(i||o||(c="remove")),c==="add"){var p;a=[...l,{id:e.id,desc:f}],a.splice(0,a.length-((p=t.options.maxMultiSortColCount)!=null?p:Number.MAX_SAFE_INTEGER))}else c==="toggle"?a=l.map(g=>g.id===e.id?{...g,desc:f}:g):c==="remove"?a=l.filter(g=>g.id!==e.id):a=[{id:e.id,desc:f}];return a})},e.getFirstSortDir=()=>{var n,r;return((n=(r=e.columnDef.sortDescFirst)!=null?r:t.options.sortDescFirst)!=null?n:e.getAutoSortDir()==="desc")?"desc":"asc"},e.getNextSortingOrder=n=>{var r,o;const i=e.getFirstSortDir(),l=e.getIsSorted();return l?l!==i&&((r=t.options.enableSortingRemoval)==null||r)&&(!(n&&(o=t.options.enableMultiRemove)!=null)||o)?!1:l==="desc"?"asc":"desc":i},e.getCanSort=()=>{var n,r;return((n=e.columnDef.enableSorting)!=null?n:!0)&&((r=t.options.enableSorting)!=null?r:!0)&&!!e.accessorFn},e.getCanMultiSort=()=>{var n,r;return(n=(r=e.columnDef.enableMultiSort)!=null?r:t.options.enableMultiSort)!=null?n:!!e.accessorFn},e.getIsSorted=()=>{var n;const r=(n=t.getState().sorting)==null?void 0:n.find(o=>o.id===e.id);return r?r.desc?"desc":"asc":!1},e.getSortIndex=()=>{var n,r;return(n=(r=t.getState().sorting)==null?void 0:r.findIndex(o=>o.id===e.id))!=null?n:-1},e.clearSorting=()=>{t.setSorting(n=>n!=null&&n.length?n.filter(r=>r.id!==e.id):[])},e.getToggleSortingHandler=()=>{const n=e.getCanSort();return r=>{n&&(r.persist==null||r.persist(),e.toggleSorting==null||e.toggleSorting(void 0,e.getCanMultiSort()?t.options.isMultiSortEvent==null?void 0:t.options.isMultiSortEvent(r):!1))}}},createTable:e=>{e.setSorting=t=>e.options.onSortingChange==null?void 0:e.options.onSortingChange(t),e.resetSorting=t=>{var n,r;e.setSorting(t?[]:(n=(r=e.initialState)==null?void 0:r.sorting)!=null?n:[])},e.getPreSortedRowModel=()=>e.getGroupedRowModel(),e.getSortedRowModel=()=>(!e._getSortedRowModel&&e.options.getSortedRowModel&&(e._getSortedRowModel=e.options.getSortedRowModel(e)),e.options.manualSorting||!e._getSortedRowModel?e.getPreSortedRowModel():e._getSortedRowModel())}},PS=[Qw,dS,uS,aS,Xw,Jw,pS,hS,_S,lS,gS,mS,vS,yS,cS];function kS(e){var t,n;const r=[...PS,...(t=e._features)!=null?t:[]];let o={_features:r};const i=o._features.reduce((p,g)=>Object.assign(p,g.getDefaultOptions==null?void 0:g.getDefaultOptions(o)),{}),l=p=>o.options.mergeOptions?o.options.mergeOptions(i,p):{...i,...p};let u={...{},...(n=e.initialState)!=null?n:{}};o._features.forEach(p=>{var g;u=(g=p.getInitialState==null?void 0:p.getInitialState(u))!=null?g:u});const a=[];let c=!1;const f={_features:r,options:{...i,...e},initialState:u,_queue:p=>{a.push(p),c||(c=!0,Promise.resolve().then(()=>{for(;a.length;)a.shift()();c=!1}).catch(g=>setTimeout(()=>{throw g})))},reset:()=>{o.setState(o.initialState)},setOptions:p=>{const g=Bn(p,o.options);o.options=l(g)},getState:()=>o.options.state,setState:p=>{o.options.onStateChange==null||o.options.onStateChange(p)},_getRowId:(p,g,m)=>{var y;return(y=o.options.getRowId==null?void 0:o.options.getRowId(p,g,m))!=null?y:`${m?[m.id,g].join("."):g}`},getCoreRowModel:()=>(o._getCoreRowModel||(o._getCoreRowModel=o.options.getCoreRowModel(o)),o._getCoreRowModel()),getRowModel:()=>o.getPaginationRowModel(),getRow:(p,g)=>{let m=(g?o.getPrePaginationRowModel():o.getRowModel()).rowsById[p];if(!m&&(m=o.getCoreRowModel().rowsById[p],!m))throw new Error;return m},_getDefaultColumnDef:te(()=>[o.options.defaultColumn],p=>{var g;return p=(g=p)!=null?g:{},{header:m=>{const y=m.header.column.columnDef;return y.accessorKey?y.accessorKey:y.accessorFn?y.id:null},cell:m=>{var y,E;return(y=(E=m.renderValue())==null||E.toString==null?void 0:E.toString())!=null?y:null},...o._features.reduce((m,y)=>Object.assign(m,y.getDefaultColumnDef==null?void 0:y.getDefaultColumnDef()),{}),...p}},ne(e,"debugColumns")),_getColumnDefs:()=>o.options.columns,getAllColumns:te(()=>[o._getColumnDefs()],p=>{const g=function(m,y,E){return E===void 0&&(E=0),m.map(h=>{const d=Kw(o,h,E,y),v=h;return d.columns=v.columns?g(v.columns,d,E+1):[],d})};return g(p)},ne(e,"debugColumns")),getAllFlatColumns:te(()=>[o.getAllColumns()],p=>p.flatMap(g=>g.getFlatColumns()),ne(e,"debugColumns")),_getAllFlatColumnsById:te(()=>[o.getAllFlatColumns()],p=>p.reduce((g,m)=>(g[m.id]=m,g),{}),ne(e,"debugColumns")),getAllLeafColumns:te(()=>[o.getAllColumns(),o._getOrderColumnsFn()],(p,g)=>{let m=p.flatMap(y=>y.getLeafColumns());return g(m)},ne(e,"debugColumns")),getColumn:p=>o._getAllFlatColumnsById()[p]};Object.assign(o,f);for(let p=0;pte(()=>[e.options.data],t=>{const n={rows:[],flatRows:[],rowsById:{}},r=function(o,i,l){i===void 0&&(i=0);const s=[];for(let a=0;ae._autoResetPageIndex()))}/** + * react-table + * + * Copyright (c) TanStack + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function Pd(e,t){return e?DS(e)?T.createElement(e,t):e:null}function DS(e){return LS(e)||typeof e=="function"||TS(e)}function LS(e){return typeof e=="function"&&(()=>{const t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function TS(e){return typeof e=="object"&&typeof e.$$typeof=="symbol"&&["react.memo","react.forward_ref"].includes(e.$$typeof.description)}function MS(e){const t={state:{},onStateChange:()=>{},renderFallbackValue:null,...e},[n]=T.useState(()=>({current:kS(t)})),[r,o]=T.useState(()=>n.current.initialState);return n.current.setOptions(i=>({...i,...e,state:{...r,...e.state},onStateChange:l=>{o(l),e.onStateChange==null||e.onStateChange(l)}})),n.current}function jg(e,t){return function(){return e.apply(t,arguments)}}const{toString:OS}=Object.prototype,{getPrototypeOf:Lc}=Object,ys=(e=>t=>{const n=OS.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),nn=e=>(e=e.toLowerCase(),t=>ys(t)===e),ws=e=>t=>typeof t===e,{isArray:fo}=Array,fi=ws("undefined");function NS(e){return e!==null&&!fi(e)&&e.constructor!==null&&!fi(e.constructor)&&Lt(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Ug=nn("ArrayBuffer");function AS(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Ug(e.buffer),t}const IS=ws("string"),Lt=ws("function"),Bg=ws("number"),Ss=e=>e!==null&&typeof e=="object",zS=e=>e===!0||e===!1,ml=e=>{if(ys(e)!=="object")return!1;const t=Lc(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},VS=nn("Date"),$S=nn("File"),jS=nn("Blob"),US=nn("FileList"),BS=e=>Ss(e)&&Lt(e.pipe),HS=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||Lt(e.append)&&((t=ys(e))==="formdata"||t==="object"&&Lt(e.toString)&&e.toString()==="[object FormData]"))},GS=nn("URLSearchParams"),[WS,KS,QS,qS]=["ReadableStream","Request","Response","Headers"].map(nn),XS=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Si(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,o;if(typeof e!="object"&&(e=[e]),fo(e))for(r=0,o=e.length;r0;)if(o=n[r],t===o.toLowerCase())return o;return null}const gr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Gg=e=>!fi(e)&&e!==gr;function ya(){const{caseless:e}=Gg(this)&&this||{},t={},n=(r,o)=>{const i=e&&Hg(t,o)||o;ml(t[i])&&ml(r)?t[i]=ya(t[i],r):ml(r)?t[i]=ya({},r):fo(r)?t[i]=r.slice():t[i]=r};for(let r=0,o=arguments.length;r(Si(t,(o,i)=>{n&&Lt(o)?e[i]=jg(o,n):e[i]=o},{allOwnKeys:r}),e),YS=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),ZS=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},bS=(e,t,n,r)=>{let o,i,l;const s={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)l=o[i],(!r||r(l,e,t))&&!s[l]&&(t[l]=e[l],s[l]=!0);e=n!==!1&&Lc(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},eC=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},tC=e=>{if(!e)return null;if(fo(e))return e;let t=e.length;if(!Bg(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},nC=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Lc(Uint8Array)),rC=(e,t)=>{const r=(e&&e[Symbol.iterator]).call(e);let o;for(;(o=r.next())&&!o.done;){const i=o.value;t.call(e,i[0],i[1])}},oC=(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},iC=nn("HTMLFormElement"),lC=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,o){return r.toUpperCase()+o}),kd=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),sC=nn("RegExp"),Wg=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};Si(n,(o,i)=>{let l;(l=t(o,i,e))!==!1&&(r[i]=l||o)}),Object.defineProperties(e,r)},uC=e=>{Wg(e,(t,n)=>{if(Lt(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const r=e[n];if(Lt(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},aC=(e,t)=>{const n={},r=o=>{o.forEach(i=>{n[i]=!0})};return fo(e)?r(e):r(String(e).split(t)),n},cC=()=>{},fC=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,fu="abcdefghijklmnopqrstuvwxyz",Fd="0123456789",Kg={DIGIT:Fd,ALPHA:fu,ALPHA_DIGIT:fu+fu.toUpperCase()+Fd},dC=(e=16,t=Kg.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n};function pC(e){return!!(e&&Lt(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const hC=e=>{const t=new Array(10),n=(r,o)=>{if(Ss(r)){if(t.indexOf(r)>=0)return;if(!("toJSON"in r)){t[o]=r;const i=fo(r)?[]:{};return Si(r,(l,s)=>{const u=n(l,o+1);!fi(u)&&(i[s]=u)}),t[o]=void 0,i}}return r};return n(e,0)},gC=nn("AsyncFunction"),mC=e=>e&&(Ss(e)||Lt(e))&&Lt(e.then)&&Lt(e.catch),Qg=((e,t)=>e?setImmediate:t?((n,r)=>(gr.addEventListener("message",({source:o,data:i})=>{o===gr&&i===n&&r.length&&r.shift()()},!1),o=>{r.push(o),gr.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",Lt(gr.postMessage)),vC=typeof queueMicrotask<"u"?queueMicrotask.bind(gr):typeof process<"u"&&process.nextTick||Qg,k={isArray:fo,isArrayBuffer:Ug,isBuffer:NS,isFormData:HS,isArrayBufferView:AS,isString:IS,isNumber:Bg,isBoolean:zS,isObject:Ss,isPlainObject:ml,isReadableStream:WS,isRequest:KS,isResponse:QS,isHeaders:qS,isUndefined:fi,isDate:VS,isFile:$S,isBlob:jS,isRegExp:sC,isFunction:Lt,isStream:BS,isURLSearchParams:GS,isTypedArray:nC,isFileList:US,forEach:Si,merge:ya,extend:JS,trim:XS,stripBOM:YS,inherits:ZS,toFlatObject:bS,kindOf:ys,kindOfTest:nn,endsWith:eC,toArray:tC,forEachEntry:rC,matchAll:oC,isHTMLForm:iC,hasOwnProperty:kd,hasOwnProp:kd,reduceDescriptors:Wg,freezeMethods:uC,toObjectSet:aC,toCamelCase:lC,noop:cC,toFiniteNumber:fC,findKey:Hg,global:gr,isContextDefined:Gg,ALPHABET:Kg,generateString:dC,isSpecCompliantForm:pC,toJSONObject:hC,isAsyncFn:gC,isThenable:mC,setImmediate:Qg,asap:vC};function ie(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status?o.status:null)}k.inherits(ie,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:k.toJSONObject(this.config),code:this.code,status:this.status}}});const qg=ie.prototype,Xg={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{Xg[e]={value:e}});Object.defineProperties(ie,Xg);Object.defineProperty(qg,"isAxiosError",{value:!0});ie.from=(e,t,n,r,o,i)=>{const l=Object.create(qg);return k.toFlatObject(e,l,function(u){return u!==Error.prototype},s=>s!=="isAxiosError"),ie.call(l,e.message,t,n,r,o),l.cause=e,l.name=e.name,i&&Object.assign(l,i),l};const yC=null;function wa(e){return k.isPlainObject(e)||k.isArray(e)}function Jg(e){return k.endsWith(e,"[]")?e.slice(0,-2):e}function Dd(e,t,n){return e?e.concat(t).map(function(o,i){return o=Jg(o),!n&&i?"["+o+"]":o}).join(n?".":""):t}function wC(e){return k.isArray(e)&&!e.some(wa)}const SC=k.toFlatObject(k,{},null,function(t){return/^is[A-Z]/.test(t)});function Cs(e,t,n){if(!k.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=k.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(y,E){return!k.isUndefined(E[y])});const r=n.metaTokens,o=n.visitor||c,i=n.dots,l=n.indexes,u=(n.Blob||typeof Blob<"u"&&Blob)&&k.isSpecCompliantForm(t);if(!k.isFunction(o))throw new TypeError("visitor must be a function");function a(m){if(m===null)return"";if(k.isDate(m))return m.toISOString();if(!u&&k.isBlob(m))throw new ie("Blob is not supported. Use a Buffer instead.");return k.isArrayBuffer(m)||k.isTypedArray(m)?u&&typeof Blob=="function"?new Blob([m]):Buffer.from(m):m}function c(m,y,E){let h=m;if(m&&!E&&typeof m=="object"){if(k.endsWith(y,"{}"))y=r?y:y.slice(0,-2),m=JSON.stringify(m);else if(k.isArray(m)&&wC(m)||(k.isFileList(m)||k.endsWith(y,"[]"))&&(h=k.toArray(m)))return y=Jg(y),h.forEach(function(v,x){!(k.isUndefined(v)||v===null)&&t.append(l===!0?Dd([y],x,i):l===null?y:y+"[]",a(v))}),!1}return wa(m)?!0:(t.append(Dd(E,y,i),a(m)),!1)}const f=[],p=Object.assign(SC,{defaultVisitor:c,convertValue:a,isVisitable:wa});function g(m,y){if(!k.isUndefined(m)){if(f.indexOf(m)!==-1)throw Error("Circular reference detected in "+y.join("."));f.push(m),k.forEach(m,function(h,d){(!(k.isUndefined(h)||h===null)&&o.call(t,h,k.isString(d)?d.trim():d,y,p))===!0&&g(h,y?y.concat(d):[d])}),f.pop()}}if(!k.isObject(e))throw new TypeError("data must be an object");return g(e),t}function Ld(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function Tc(e,t){this._pairs=[],e&&Cs(e,this,t)}const Yg=Tc.prototype;Yg.append=function(t,n){this._pairs.push([t,n])};Yg.toString=function(t){const n=t?function(r){return t.call(this,r,Ld)}:Ld;return this._pairs.map(function(o){return n(o[0])+"="+n(o[1])},"").join("&")};function CC(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Zg(e,t,n){if(!t)return e;const r=n&&n.encode||CC,o=n&&n.serialize;let i;if(o?i=o(t,n):i=k.isURLSearchParams(t)?t.toString():new Tc(t,n).toString(r),i){const l=e.indexOf("#");l!==-1&&(e=e.slice(0,l)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}class Td{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){k.forEach(this.handlers,function(r){r!==null&&t(r)})}}const bg={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},RC=typeof URLSearchParams<"u"?URLSearchParams:Tc,EC=typeof FormData<"u"?FormData:null,xC=typeof Blob<"u"?Blob:null,_C={isBrowser:!0,classes:{URLSearchParams:RC,FormData:EC,Blob:xC},protocols:["http","https","file","blob","url","data"]},Mc=typeof window<"u"&&typeof document<"u",Sa=typeof navigator=="object"&&navigator||void 0,PC=Mc&&(!Sa||["ReactNative","NativeScript","NS"].indexOf(Sa.product)<0),kC=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",FC=Mc&&window.location.href||"http://localhost",DC=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Mc,hasStandardBrowserEnv:PC,hasStandardBrowserWebWorkerEnv:kC,navigator:Sa,origin:FC},Symbol.toStringTag,{value:"Module"})),Rt={...DC,..._C};function LC(e,t){return Cs(e,new Rt.classes.URLSearchParams,Object.assign({visitor:function(n,r,o,i){return Rt.isNode&&k.isBuffer(n)?(this.append(r,n.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},t))}function TC(e){return k.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function MC(e){const t={},n=Object.keys(e);let r;const o=n.length;let i;for(r=0;r=n.length;return l=!l&&k.isArray(o)?o.length:l,u?(k.hasOwnProp(o,l)?o[l]=[o[l],r]:o[l]=r,!s):((!o[l]||!k.isObject(o[l]))&&(o[l]=[]),t(n,r,o[l],i)&&k.isArray(o[l])&&(o[l]=MC(o[l])),!s)}if(k.isFormData(e)&&k.isFunction(e.entries)){const n={};return k.forEachEntry(e,(r,o)=>{t(TC(r),o,n,0)}),n}return null}function OC(e,t,n){if(k.isString(e))try{return(t||JSON.parse)(e),k.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}const Ci={transitional:bg,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const r=n.getContentType()||"",o=r.indexOf("application/json")>-1,i=k.isObject(t);if(i&&k.isHTMLForm(t)&&(t=new FormData(t)),k.isFormData(t))return o?JSON.stringify(em(t)):t;if(k.isArrayBuffer(t)||k.isBuffer(t)||k.isStream(t)||k.isFile(t)||k.isBlob(t)||k.isReadableStream(t))return t;if(k.isArrayBufferView(t))return t.buffer;if(k.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let s;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return LC(t,this.formSerializer).toString();if((s=k.isFileList(t))||r.indexOf("multipart/form-data")>-1){const u=this.env&&this.env.FormData;return Cs(s?{"files[]":t}:t,u&&new u,this.formSerializer)}}return i||o?(n.setContentType("application/json",!1),OC(t)):t}],transformResponse:[function(t){const n=this.transitional||Ci.transitional,r=n&&n.forcedJSONParsing,o=this.responseType==="json";if(k.isResponse(t)||k.isReadableStream(t))return t;if(t&&k.isString(t)&&(r&&!this.responseType||o)){const l=!(n&&n.silentJSONParsing)&&o;try{return JSON.parse(t)}catch(s){if(l)throw s.name==="SyntaxError"?ie.from(s,ie.ERR_BAD_RESPONSE,this,null,this.response):s}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Rt.classes.FormData,Blob:Rt.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};k.forEach(["delete","get","head","post","put","patch"],e=>{Ci.headers[e]={}});const NC=k.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),AC=e=>{const t={};let n,r,o;return e&&e.split(` +`).forEach(function(l){o=l.indexOf(":"),n=l.substring(0,o).trim().toLowerCase(),r=l.substring(o+1).trim(),!(!n||t[n]&&NC[n])&&(n==="set-cookie"?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t},Md=Symbol("internals");function Fo(e){return e&&String(e).trim().toLowerCase()}function vl(e){return e===!1||e==null?e:k.isArray(e)?e.map(vl):String(e)}function IC(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}const zC=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function du(e,t,n,r,o){if(k.isFunction(r))return r.call(this,t,n);if(o&&(t=n),!!k.isString(t)){if(k.isString(r))return t.indexOf(r)!==-1;if(k.isRegExp(r))return r.test(t)}}function VC(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function $C(e,t){const n=k.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(o,i,l){return this[r].call(this,t,o,i,l)},configurable:!0})})}let Et=class{constructor(t){t&&this.set(t)}set(t,n,r){const o=this;function i(s,u,a){const c=Fo(u);if(!c)throw new Error("header name must be a non-empty string");const f=k.findKey(o,c);(!f||o[f]===void 0||a===!0||a===void 0&&o[f]!==!1)&&(o[f||u]=vl(s))}const l=(s,u)=>k.forEach(s,(a,c)=>i(a,c,u));if(k.isPlainObject(t)||t instanceof this.constructor)l(t,n);else if(k.isString(t)&&(t=t.trim())&&!zC(t))l(AC(t),n);else if(k.isHeaders(t))for(const[s,u]of t.entries())i(u,s,r);else t!=null&&i(n,t,r);return this}get(t,n){if(t=Fo(t),t){const r=k.findKey(this,t);if(r){const o=this[r];if(!n)return o;if(n===!0)return IC(o);if(k.isFunction(n))return n.call(this,o,r);if(k.isRegExp(n))return n.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=Fo(t),t){const r=k.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||du(this,this[r],r,n)))}return!1}delete(t,n){const r=this;let o=!1;function i(l){if(l=Fo(l),l){const s=k.findKey(r,l);s&&(!n||du(r,r[s],s,n))&&(delete r[s],o=!0)}}return k.isArray(t)?t.forEach(i):i(t),o}clear(t){const n=Object.keys(this);let r=n.length,o=!1;for(;r--;){const i=n[r];(!t||du(this,this[i],i,t,!0))&&(delete this[i],o=!0)}return o}normalize(t){const n=this,r={};return k.forEach(this,(o,i)=>{const l=k.findKey(r,i);if(l){n[l]=vl(o),delete n[i];return}const s=t?VC(i):String(i).trim();s!==i&&delete n[i],n[s]=vl(o),r[s]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return k.forEach(this,(r,o)=>{r!=null&&r!==!1&&(n[o]=t&&k.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const r=new this(t);return n.forEach(o=>r.set(o)),r}static accessor(t){const r=(this[Md]=this[Md]={accessors:{}}).accessors,o=this.prototype;function i(l){const s=Fo(l);r[s]||($C(o,l),r[s]=!0)}return k.isArray(t)?t.forEach(i):i(t),this}};Et.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);k.reduceDescriptors(Et.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});k.freezeMethods(Et);function pu(e,t){const n=this||Ci,r=t||n,o=Et.from(r.headers);let i=r.data;return k.forEach(e,function(s){i=s.call(n,i,o.normalize(),t?t.status:void 0)}),o.normalize(),i}function tm(e){return!!(e&&e.__CANCEL__)}function po(e,t,n){ie.call(this,e??"canceled",ie.ERR_CANCELED,t,n),this.name="CanceledError"}k.inherits(po,ie,{__CANCEL__:!0});function nm(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new ie("Request failed with status code "+n.status,[ie.ERR_BAD_REQUEST,ie.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function jC(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function UC(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o=0,i=0,l;return t=t!==void 0?t:1e3,function(u){const a=Date.now(),c=r[i];l||(l=a),n[o]=u,r[o]=a;let f=i,p=0;for(;f!==o;)p+=n[f++],f=f%e;if(o=(o+1)%e,o===i&&(i=(i+1)%e),a-l{n=c,o=null,i&&(clearTimeout(i),i=null),e.apply(null,a)};return[(...a)=>{const c=Date.now(),f=c-n;f>=r?l(a,c):(o=a,i||(i=setTimeout(()=>{i=null,l(o)},r-f)))},()=>o&&l(o)]}const Ql=(e,t,n=3)=>{let r=0;const o=UC(50,250);return BC(i=>{const l=i.loaded,s=i.lengthComputable?i.total:void 0,u=l-r,a=o(u),c=l<=s;r=l;const f={loaded:l,total:s,progress:s?l/s:void 0,bytes:u,rate:a||void 0,estimated:a&&s&&c?(s-l)/a:void 0,event:i,lengthComputable:s!=null,[t?"download":"upload"]:!0};e(f)},n)},Od=(e,t)=>{const n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Nd=e=>(...t)=>k.asap(()=>e(...t)),HC=Rt.hasStandardBrowserEnv?function(){const t=Rt.navigator&&/(msie|trident)/i.test(Rt.navigator.userAgent),n=document.createElement("a");let r;function o(i){let l=i;return t&&(n.setAttribute("href",l),l=n.href),n.setAttribute("href",l),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return r=o(window.location.href),function(l){const s=k.isString(l)?o(l):l;return s.protocol===r.protocol&&s.host===r.host}}():function(){return function(){return!0}}(),GC=Rt.hasStandardBrowserEnv?{write(e,t,n,r,o,i){const l=[e+"="+encodeURIComponent(t)];k.isNumber(n)&&l.push("expires="+new Date(n).toGMTString()),k.isString(r)&&l.push("path="+r),k.isString(o)&&l.push("domain="+o),i===!0&&l.push("secure"),document.cookie=l.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function WC(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function KC(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function rm(e,t){return e&&!WC(t)?KC(e,t):t}const Ad=e=>e instanceof Et?{...e}:e;function _r(e,t){t=t||{};const n={};function r(a,c,f){return k.isPlainObject(a)&&k.isPlainObject(c)?k.merge.call({caseless:f},a,c):k.isPlainObject(c)?k.merge({},c):k.isArray(c)?c.slice():c}function o(a,c,f){if(k.isUndefined(c)){if(!k.isUndefined(a))return r(void 0,a,f)}else return r(a,c,f)}function i(a,c){if(!k.isUndefined(c))return r(void 0,c)}function l(a,c){if(k.isUndefined(c)){if(!k.isUndefined(a))return r(void 0,a)}else return r(void 0,c)}function s(a,c,f){if(f in t)return r(a,c);if(f in e)return r(void 0,a)}const u={url:i,method:i,data:i,baseURL:l,transformRequest:l,transformResponse:l,paramsSerializer:l,timeout:l,timeoutMessage:l,withCredentials:l,withXSRFToken:l,adapter:l,responseType:l,xsrfCookieName:l,xsrfHeaderName:l,onUploadProgress:l,onDownloadProgress:l,decompress:l,maxContentLength:l,maxBodyLength:l,beforeRedirect:l,transport:l,httpAgent:l,httpsAgent:l,cancelToken:l,socketPath:l,responseEncoding:l,validateStatus:s,headers:(a,c)=>o(Ad(a),Ad(c),!0)};return k.forEach(Object.keys(Object.assign({},e,t)),function(c){const f=u[c]||o,p=f(e[c],t[c],c);k.isUndefined(p)&&f!==s||(n[c]=p)}),n}const om=e=>{const t=_r({},e);let{data:n,withXSRFToken:r,xsrfHeaderName:o,xsrfCookieName:i,headers:l,auth:s}=t;t.headers=l=Et.from(l),t.url=Zg(rm(t.baseURL,t.url),e.params,e.paramsSerializer),s&&l.set("Authorization","Basic "+btoa((s.username||"")+":"+(s.password?unescape(encodeURIComponent(s.password)):"")));let u;if(k.isFormData(n)){if(Rt.hasStandardBrowserEnv||Rt.hasStandardBrowserWebWorkerEnv)l.setContentType(void 0);else if((u=l.getContentType())!==!1){const[a,...c]=u?u.split(";").map(f=>f.trim()).filter(Boolean):[];l.setContentType([a||"multipart/form-data",...c].join("; "))}}if(Rt.hasStandardBrowserEnv&&(r&&k.isFunction(r)&&(r=r(t)),r||r!==!1&&HC(t.url))){const a=o&&i&&GC.read(i);a&&l.set(o,a)}return t},QC=typeof XMLHttpRequest<"u",qC=QC&&function(e){return new Promise(function(n,r){const o=om(e);let i=o.data;const l=Et.from(o.headers).normalize();let{responseType:s,onUploadProgress:u,onDownloadProgress:a}=o,c,f,p,g,m;function y(){g&&g(),m&&m(),o.cancelToken&&o.cancelToken.unsubscribe(c),o.signal&&o.signal.removeEventListener("abort",c)}let E=new XMLHttpRequest;E.open(o.method.toUpperCase(),o.url,!0),E.timeout=o.timeout;function h(){if(!E)return;const v=Et.from("getAllResponseHeaders"in E&&E.getAllResponseHeaders()),F={data:!s||s==="text"||s==="json"?E.responseText:E.response,status:E.status,statusText:E.statusText,headers:v,config:e,request:E};nm(function(A){n(A),y()},function(A){r(A),y()},F),E=null}"onloadend"in E?E.onloadend=h:E.onreadystatechange=function(){!E||E.readyState!==4||E.status===0&&!(E.responseURL&&E.responseURL.indexOf("file:")===0)||setTimeout(h)},E.onabort=function(){E&&(r(new ie("Request aborted",ie.ECONNABORTED,e,E)),E=null)},E.onerror=function(){r(new ie("Network Error",ie.ERR_NETWORK,e,E)),E=null},E.ontimeout=function(){let x=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded";const F=o.transitional||bg;o.timeoutErrorMessage&&(x=o.timeoutErrorMessage),r(new ie(x,F.clarifyTimeoutError?ie.ETIMEDOUT:ie.ECONNABORTED,e,E)),E=null},i===void 0&&l.setContentType(null),"setRequestHeader"in E&&k.forEach(l.toJSON(),function(x,F){E.setRequestHeader(F,x)}),k.isUndefined(o.withCredentials)||(E.withCredentials=!!o.withCredentials),s&&s!=="json"&&(E.responseType=o.responseType),a&&([p,m]=Ql(a,!0),E.addEventListener("progress",p)),u&&E.upload&&([f,g]=Ql(u),E.upload.addEventListener("progress",f),E.upload.addEventListener("loadend",g)),(o.cancelToken||o.signal)&&(c=v=>{E&&(r(!v||v.type?new po(null,e,E):v),E.abort(),E=null)},o.cancelToken&&o.cancelToken.subscribe(c),o.signal&&(o.signal.aborted?c():o.signal.addEventListener("abort",c)));const d=jC(o.url);if(d&&Rt.protocols.indexOf(d)===-1){r(new ie("Unsupported protocol "+d+":",ie.ERR_BAD_REQUEST,e));return}E.send(i||null)})},XC=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let r=new AbortController,o;const i=function(a){if(!o){o=!0,s();const c=a instanceof Error?a:this.reason;r.abort(c instanceof ie?c:new po(c instanceof Error?c.message:c))}};let l=t&&setTimeout(()=>{l=null,i(new ie(`timeout ${t} of ms exceeded`,ie.ETIMEDOUT))},t);const s=()=>{e&&(l&&clearTimeout(l),l=null,e.forEach(a=>{a.unsubscribe?a.unsubscribe(i):a.removeEventListener("abort",i)}),e=null)};e.forEach(a=>a.addEventListener("abort",i));const{signal:u}=r;return u.unsubscribe=()=>k.asap(s),u}},JC=function*(e,t){let n=e.byteLength;if(n{const o=YC(e,t);let i=0,l,s=u=>{l||(l=!0,r&&r(u))};return new ReadableStream({async pull(u){try{const{done:a,value:c}=await o.next();if(a){s(),u.close();return}let f=c.byteLength;if(n){let p=i+=f;n(p)}u.enqueue(new Uint8Array(c))}catch(a){throw s(a),a}},cancel(u){return s(u),o.return()}},{highWaterMark:2})},Rs=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",im=Rs&&typeof ReadableStream=="function",bC=Rs&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),lm=(e,...t)=>{try{return!!e(...t)}catch{return!1}},e1=im&&lm(()=>{let e=!1;const t=new Request(Rt.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),zd=64*1024,Ca=im&&lm(()=>k.isReadableStream(new Response("").body)),ql={stream:Ca&&(e=>e.body)};Rs&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!ql[t]&&(ql[t]=k.isFunction(e[t])?n=>n[t]():(n,r)=>{throw new ie(`Response type '${t}' is not supported`,ie.ERR_NOT_SUPPORT,r)})})})(new Response);const t1=async e=>{if(e==null)return 0;if(k.isBlob(e))return e.size;if(k.isSpecCompliantForm(e))return(await new Request(Rt.origin,{method:"POST",body:e}).arrayBuffer()).byteLength;if(k.isArrayBufferView(e)||k.isArrayBuffer(e))return e.byteLength;if(k.isURLSearchParams(e)&&(e=e+""),k.isString(e))return(await bC(e)).byteLength},n1=async(e,t)=>{const n=k.toFiniteNumber(e.getContentLength());return n??t1(t)},r1=Rs&&(async e=>{let{url:t,method:n,data:r,signal:o,cancelToken:i,timeout:l,onDownloadProgress:s,onUploadProgress:u,responseType:a,headers:c,withCredentials:f="same-origin",fetchOptions:p}=om(e);a=a?(a+"").toLowerCase():"text";let g=XC([o,i&&i.toAbortSignal()],l),m;const y=g&&g.unsubscribe&&(()=>{g.unsubscribe()});let E;try{if(u&&e1&&n!=="get"&&n!=="head"&&(E=await n1(c,r))!==0){let F=new Request(t,{method:"POST",body:r,duplex:"half"}),M;if(k.isFormData(r)&&(M=F.headers.get("content-type"))&&c.setContentType(M),F.body){const[A,C]=Od(E,Ql(Nd(u)));r=Id(F.body,zd,A,C)}}k.isString(f)||(f=f?"include":"omit");const h="credentials"in Request.prototype;m=new Request(t,{...p,signal:g,method:n.toUpperCase(),headers:c.normalize().toJSON(),body:r,duplex:"half",credentials:h?f:void 0});let d=await fetch(m);const v=Ca&&(a==="stream"||a==="response");if(Ca&&(s||v&&y)){const F={};["status","statusText","headers"].forEach(U=>{F[U]=d[U]});const M=k.toFiniteNumber(d.headers.get("content-length")),[A,C]=s&&Od(M,Ql(Nd(s),!0))||[];d=new Response(Id(d.body,zd,A,()=>{C&&C(),y&&y()}),F)}a=a||"text";let x=await ql[k.findKey(ql,a)||"text"](d,e);return!v&&y&&y(),await new Promise((F,M)=>{nm(F,M,{data:x,headers:Et.from(d.headers),status:d.status,statusText:d.statusText,config:e,request:m})})}catch(h){throw y&&y(),h&&h.name==="TypeError"&&/fetch/i.test(h.message)?Object.assign(new ie("Network Error",ie.ERR_NETWORK,e,m),{cause:h.cause||h}):ie.from(h,h&&h.code,e,m)}}),Ra={http:yC,xhr:qC,fetch:r1};k.forEach(Ra,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const Vd=e=>`- ${e}`,o1=e=>k.isFunction(e)||e===null||e===!1,sm={getAdapter:e=>{e=k.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let i=0;i`adapter ${s} `+(u===!1?"is not supported by the environment":"is not available in the build"));let l=t?i.length>1?`since : +`+i.map(Vd).join(` +`):" "+Vd(i[0]):"as no adapter specified";throw new ie("There is no suitable adapter to dispatch the request "+l,"ERR_NOT_SUPPORT")}return r},adapters:Ra};function hu(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new po(null,e)}function $d(e){return hu(e),e.headers=Et.from(e.headers),e.data=pu.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),sm.getAdapter(e.adapter||Ci.adapter)(e).then(function(r){return hu(e),r.data=pu.call(e,e.transformResponse,r),r.headers=Et.from(r.headers),r},function(r){return tm(r)||(hu(e),r&&r.response&&(r.response.data=pu.call(e,e.transformResponse,r.response),r.response.headers=Et.from(r.response.headers))),Promise.reject(r)})}const um="1.7.7",Oc={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Oc[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const jd={};Oc.transitional=function(t,n,r){function o(i,l){return"[Axios v"+um+"] Transitional option '"+i+"'"+l+(r?". "+r:"")}return(i,l,s)=>{if(t===!1)throw new ie(o(l," has been removed"+(n?" in "+n:"")),ie.ERR_DEPRECATED);return n&&!jd[l]&&(jd[l]=!0,console.warn(o(l," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(i,l,s):!0}};function i1(e,t,n){if(typeof e!="object")throw new ie("options must be an object",ie.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const i=r[o],l=t[i];if(l){const s=e[i],u=s===void 0||l(s,i,e);if(u!==!0)throw new ie("option "+i+" must be "+u,ie.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new ie("Unknown option "+i,ie.ERR_BAD_OPTION)}}const Ea={assertOptions:i1,validators:Oc},Mn=Ea.validators;let yr=class{constructor(t){this.defaults=t,this.interceptors={request:new Td,response:new Td}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error){let o;Error.captureStackTrace?Error.captureStackTrace(o={}):o=new Error;const i=o.stack?o.stack.replace(/^.+\n/,""):"";try{r.stack?i&&!String(r.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(r.stack+=` +`+i):r.stack=i}catch{}}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=_r(this.defaults,n);const{transitional:r,paramsSerializer:o,headers:i}=n;r!==void 0&&Ea.assertOptions(r,{silentJSONParsing:Mn.transitional(Mn.boolean),forcedJSONParsing:Mn.transitional(Mn.boolean),clarifyTimeoutError:Mn.transitional(Mn.boolean)},!1),o!=null&&(k.isFunction(o)?n.paramsSerializer={serialize:o}:Ea.assertOptions(o,{encode:Mn.function,serialize:Mn.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let l=i&&k.merge(i.common,i[n.method]);i&&k.forEach(["delete","get","head","post","put","patch","common"],m=>{delete i[m]}),n.headers=Et.concat(l,i);const s=[];let u=!0;this.interceptors.request.forEach(function(y){typeof y.runWhen=="function"&&y.runWhen(n)===!1||(u=u&&y.synchronous,s.unshift(y.fulfilled,y.rejected))});const a=[];this.interceptors.response.forEach(function(y){a.push(y.fulfilled,y.rejected)});let c,f=0,p;if(!u){const m=[$d.bind(this),void 0];for(m.unshift.apply(m,s),m.push.apply(m,a),p=m.length,c=Promise.resolve(n);f{if(!r._listeners)return;let i=r._listeners.length;for(;i-- >0;)r._listeners[i](o);r._listeners=null}),this.promise.then=o=>{let i;const l=new Promise(s=>{r.subscribe(s),i=s}).then(o);return l.cancel=function(){r.unsubscribe(i)},l},t(function(i,l,s){r.reason||(r.reason=new po(i,l,s),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=r=>{t.abort(r)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new am(function(o){t=o}),cancel:t}}};function s1(e){return function(n){return e.apply(null,n)}}function u1(e){return k.isObject(e)&&e.isAxiosError===!0}const xa={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(xa).forEach(([e,t])=>{xa[t]=e});function cm(e){const t=new yr(e),n=jg(yr.prototype.request,t);return k.extend(n,yr.prototype,t,{allOwnKeys:!0}),k.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return cm(_r(e,o))},n}const je=cm(Ci);je.Axios=yr;je.CanceledError=po;je.CancelToken=l1;je.isCancel=tm;je.VERSION=um;je.toFormData=Cs;je.AxiosError=ie;je.Cancel=je.CanceledError;je.all=function(t){return Promise.all(t)};je.spread=s1;je.isAxiosError=u1;je.mergeConfig=_r;je.AxiosHeaders=Et;je.formToJSON=e=>em(k.isHTMLForm(e)?new FormData(e):e);je.getAdapter=sm.getAdapter;je.HttpStatusCode=xa;je.default=je;const{Axios:B1,AxiosError:H1,CanceledError:G1,isCancel:W1,CancelToken:K1,VERSION:Q1,all:q1,Cancel:X1,isAxiosError:J1,spread:Y1,toFormData:Z1,AxiosHeaders:b1,HttpStatusCode:eR,formToJSON:tR,getAdapter:nR,mergeConfig:rR}=je,fm=je.create({baseURL:"/api"}),a1=e=>se.jsx("table",{className:"w-full border",...e}),c1=e=>se.jsx("thead",{className:"bg-gray-50",...e}),f1=e=>se.jsx("tbody",{...e}),Ud=e=>se.jsx("tr",{className:"[&>*]:p-2 border-b",...e}),d1=e=>se.jsx("th",{className:"text-left font-medium",...e}),p1=e=>se.jsx("td",{...e});function Bd(){const[e,t]=T.useState([]);T.useEffect(()=>{fm.get("/schemas").then(o=>t(o.data))},[]);const n=T.useMemo(()=>[{header:"Name",accessorKey:"name"},{header:"Path",accessorKey:"path"}],[]),r=MS({data:e,columns:n,getCoreRowModel:FS()});return se.jsxs("div",{className:"space-y-4",children:[se.jsx("h1",{className:"text-xl font-semibold",children:"Схемы"}),se.jsxs(a1,{children:[se.jsx(c1,{children:r.getHeaderGroups().map(o=>se.jsx(Ud,{children:o.headers.map(i=>se.jsx(d1,{children:Pd(i.column.columnDef.header,i.getContext())},i.id))},o.id))}),se.jsx(f1,{children:r.getRowModel().rows.map(o=>se.jsx(Ud,{children:o.getVisibleCells().map(i=>se.jsx(p1,{children:Pd(i.column.columnDef.cell??i.column.columnDef.header,i.getContext())},i.id))},o.id))})]})]})}var Ri=e=>e.type==="checkbox",Kr=e=>e instanceof Date,ft=e=>e==null;const dm=e=>typeof e=="object";var Ge=e=>!ft(e)&&!Array.isArray(e)&&dm(e)&&!Kr(e),h1=e=>Ge(e)&&e.target?Ri(e.target)?e.target.checked:e.target.value:e,g1=e=>e.substring(0,e.search(/\.\d+(\.|$)/))||e,m1=(e,t)=>e.has(g1(t)),v1=e=>{const t=e.constructor&&e.constructor.prototype;return Ge(t)&&t.hasOwnProperty("isPrototypeOf")},Nc=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function It(e){let t;const n=Array.isArray(e);if(e instanceof Date)t=new Date(e);else if(e instanceof Set)t=new Set(e);else if(!(Nc&&(e instanceof Blob||e instanceof FileList))&&(n||Ge(e)))if(t=n?[]:{},!n&&!v1(e))t=e;else for(const r in e)e.hasOwnProperty(r)&&(t[r]=It(e[r]));else return e;return t}var Es=e=>Array.isArray(e)?e.filter(Boolean):[],Ve=e=>e===void 0,K=(e,t,n)=>{if(!t||!Ge(e))return n;const r=Es(t.split(/[,[\].]+?/)).reduce((o,i)=>ft(o)?o:o[i],e);return Ve(r)||r===e?Ve(e[t])?n:e[t]:r},sn=e=>typeof e=="boolean",Ac=e=>/^\w*$/.test(e),pm=e=>Es(e.replace(/["|']|\]/g,"").split(/\.|\[/)),xe=(e,t,n)=>{let r=-1;const o=Ac(t)?[t]:pm(t),i=o.length,l=i-1;for(;++r{const o={defaultValues:t._defaultValues};for(const i in e)Object.defineProperty(o,i,{get:()=>{const l=i;return t._proxyFormState[l]!==Yt.all&&(t._proxyFormState[l]=!r||Yt.all),e[l]}});return o},gt=e=>Ge(e)&&!Object.keys(e).length,w1=(e,t,n,r)=>{n(e);const{name:o,...i}=e;return gt(i)||Object.keys(i).length>=Object.keys(t).length||Object.keys(i).find(l=>t[l]===Yt.all)},yl=e=>Array.isArray(e)?e:[e];function S1(e){const t=mt.useRef(e);t.current=e,mt.useEffect(()=>{const n=!e.disabled&&t.current.subject&&t.current.subject.subscribe({next:t.current.next});return()=>{n&&n.unsubscribe()}},[e.disabled])}var an=e=>typeof e=="string",C1=(e,t,n,r,o)=>an(e)?(r&&t.watch.add(e),K(n,e,o)):Array.isArray(e)?e.map(i=>(r&&t.watch.add(i),K(n,i))):(r&&(t.watchAll=!0),n),R1=(e,t,n,r,o)=>t?{...n[e],types:{...n[e]&&n[e].types?n[e].types:{},[r]:o||!0}}:{},Gd=e=>({isOnSubmit:!e||e===Yt.onSubmit,isOnBlur:e===Yt.onBlur,isOnChange:e===Yt.onChange,isOnAll:e===Yt.all,isOnTouch:e===Yt.onTouched}),Wd=(e,t,n)=>!n&&(t.watchAll||t.watch.has(e)||[...t.watch].some(r=>e.startsWith(r)&&/^\.\w+/.test(e.slice(r.length))));const Wo=(e,t,n,r)=>{for(const o of n||Object.keys(e)){const i=K(e,o);if(i){const{_f:l,...s}=i;if(l){if(l.refs&&l.refs[0]&&t(l.refs[0],o)&&!r)return!0;if(l.ref&&t(l.ref,l.name)&&!r)return!0;if(Wo(s,t))break}else if(Ge(s)&&Wo(s,t))break}}};var E1=(e,t,n)=>{const r=yl(K(e,n));return xe(r,"root",t[n]),xe(e,n,r),e},Ic=e=>e.type==="file",Cn=e=>typeof e=="function",Xl=e=>{if(!Nc)return!1;const t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},wl=e=>an(e),zc=e=>e.type==="radio",Jl=e=>e instanceof RegExp;const Kd={value:!1,isValid:!1},Qd={value:!0,isValid:!0};var hm=e=>{if(Array.isArray(e)){if(e.length>1){const t=e.filter(n=>n&&n.checked&&!n.disabled).map(n=>n.value);return{value:t,isValid:!!t.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!Ve(e[0].attributes.value)?Ve(e[0].value)||e[0].value===""?Qd:{value:e[0].value,isValid:!0}:Qd:Kd}return Kd};const qd={isValid:!1,value:null};var gm=e=>Array.isArray(e)?e.reduce((t,n)=>n&&n.checked&&!n.disabled?{isValid:!0,value:n.value}:t,qd):qd;function Xd(e,t,n="validate"){if(wl(e)||Array.isArray(e)&&e.every(wl)||sn(e)&&!e)return{type:n,message:wl(e)?e:"",ref:t}}var Mr=e=>Ge(e)&&!Jl(e)?e:{value:e,message:""},Jd=async(e,t,n,r,o)=>{const{ref:i,refs:l,required:s,maxLength:u,minLength:a,min:c,max:f,pattern:p,validate:g,name:m,valueAsNumber:y,mount:E,disabled:h}=e._f,d=K(t,m);if(!E||h)return{};const v=l?l[0]:i,x=W=>{r&&v.reportValidity&&(v.setCustomValidity(sn(W)?"":W||""),v.reportValidity())},F={},M=zc(i),A=Ri(i),C=M||A,U=(y||Ic(i))&&Ve(i.value)&&Ve(d)||Xl(i)&&i.value===""||d===""||Array.isArray(d)&&!d.length,I=R1.bind(null,m,n,F),Y=(W,Z,oe,we=gn.maxLength,Fe=gn.minLength)=>{const Ie=W?Z:oe;F[m]={type:W?we:Fe,message:Ie,ref:i,...I(W?we:Fe,Ie)}};if(o?!Array.isArray(d)||!d.length:s&&(!C&&(U||ft(d))||sn(d)&&!d||A&&!hm(l).isValid||M&&!gm(l).isValid)){const{value:W,message:Z}=wl(s)?{value:!!s,message:s}:Mr(s);if(W&&(F[m]={type:gn.required,message:Z,ref:v,...I(gn.required,Z)},!n))return x(Z),F}if(!U&&(!ft(c)||!ft(f))){let W,Z;const oe=Mr(f),we=Mr(c);if(!ft(d)&&!isNaN(d)){const Fe=i.valueAsNumber||d&&+d;ft(oe.value)||(W=Fe>oe.value),ft(we.value)||(Z=Fenew Date(new Date().toDateString()+" "+ee),$=i.type=="time",B=i.type=="week";an(oe.value)&&d&&(W=$?Ie(d)>Ie(oe.value):B?d>oe.value:Fe>new Date(oe.value)),an(we.value)&&d&&(Z=$?Ie(d)+W.value,we=!ft(Z.value)&&d.length<+Z.value;if((oe||we)&&(Y(oe,W.message,Z.message),!n))return x(F[m].message),F}if(p&&!U&&an(d)){const{value:W,message:Z}=Mr(p);if(Jl(W)&&!d.match(W)&&(F[m]={type:gn.pattern,message:Z,ref:i,...I(gn.pattern,Z)},!n))return x(Z),F}if(g){if(Cn(g)){const W=await g(d,t),Z=Xd(W,v);if(Z&&(F[m]={...Z,...I(gn.validate,Z.message)},!n))return x(Z.message),F}else if(Ge(g)){let W={};for(const Z in g){if(!gt(W)&&!n)break;const oe=Xd(await g[Z](d,t),v,Z);oe&&(W={...oe,...I(Z,oe.message)},x(oe.message),n&&(F[m]=W))}if(!gt(W)&&(F[m]={ref:v,...W},!n))return F}}return x(!0),F};function x1(e,t){const n=t.slice(0,-1).length;let r=0;for(;r{let e=[];return{get observers(){return e},next:o=>{for(const i of e)i.next&&i.next(o)},subscribe:o=>(e.push(o),{unsubscribe:()=>{e=e.filter(i=>i!==o)}}),unsubscribe:()=>{e=[]}}},Yl=e=>ft(e)||!dm(e);function Vn(e,t){if(Yl(e)||Yl(t))return e===t;if(Kr(e)&&Kr(t))return e.getTime()===t.getTime();const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(const o of n){const i=e[o];if(!r.includes(o))return!1;if(o!=="ref"){const l=t[o];if(Kr(i)&&Kr(l)||Ge(i)&&Ge(l)||Array.isArray(i)&&Array.isArray(l)?!Vn(i,l):i!==l)return!1}}return!0}var mm=e=>e.type==="select-multiple",P1=e=>zc(e)||Ri(e),mu=e=>Xl(e)&&e.isConnected,vm=e=>{for(const t in e)if(Cn(e[t]))return!0;return!1};function Zl(e,t={}){const n=Array.isArray(e);if(Ge(e)||n)for(const r in e)Array.isArray(e[r])||Ge(e[r])&&!vm(e[r])?(t[r]=Array.isArray(e[r])?[]:{},Zl(e[r],t[r])):ft(e[r])||(t[r]=!0);return t}function ym(e,t,n){const r=Array.isArray(e);if(Ge(e)||r)for(const o in e)Array.isArray(e[o])||Ge(e[o])&&!vm(e[o])?Ve(t)||Yl(n[o])?n[o]=Array.isArray(e[o])?Zl(e[o],[]):{...Zl(e[o])}:ym(e[o],ft(t)?{}:t[o],n[o]):n[o]=!Vn(e[o],t[o]);return n}var nl=(e,t)=>ym(e,t,Zl(t)),wm=(e,{valueAsNumber:t,valueAsDate:n,setValueAs:r})=>Ve(e)?e:t?e===""?NaN:e&&+e:n&&an(e)?new Date(e):r?r(e):e;function vu(e){const t=e.ref;if(!(e.refs?e.refs.every(n=>n.disabled):t.disabled))return Ic(t)?t.files:zc(t)?gm(e.refs).value:mm(t)?[...t.selectedOptions].map(({value:n})=>n):Ri(t)?hm(e.refs).value:wm(Ve(t.value)?e.ref.value:t.value,e)}var k1=(e,t,n,r)=>{const o={};for(const i of e){const l=K(t,i);l&&xe(o,i,l._f)}return{criteriaMode:n,names:[...e],fields:o,shouldUseNativeValidation:r}},Do=e=>Ve(e)?e:Jl(e)?e.source:Ge(e)?Jl(e.value)?e.value.source:e.value:e;const Yd="AsyncFunction";var F1=e=>(!e||!e.validate)&&!!(Cn(e.validate)&&e.validate.constructor.name===Yd||Ge(e.validate)&&Object.values(e.validate).find(t=>t.constructor.name===Yd)),D1=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate);function Zd(e,t,n){const r=K(e,n);if(r||Ac(n))return{error:r,name:n};const o=n.split(".");for(;o.length;){const i=o.join("."),l=K(t,i),s=K(e,i);if(l&&!Array.isArray(l)&&n!==i)return{name:n};if(s&&s.type)return{name:i,error:s};o.pop()}return{name:n}}var L1=(e,t,n,r,o)=>o.isOnAll?!1:!n&&o.isOnTouch?!(t||e):(n?r.isOnBlur:o.isOnBlur)?!e:(n?r.isOnChange:o.isOnChange)?e:!0,T1=(e,t)=>!Es(K(e,t)).length&&We(e,t);const M1={mode:Yt.onSubmit,reValidateMode:Yt.onChange,shouldFocusError:!0};function O1(e={}){let t={...M1,...e},n={submitCount:0,isDirty:!1,isLoading:Cn(t.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:t.errors||{},disabled:t.disabled||!1},r={},o=Ge(t.defaultValues)||Ge(t.values)?It(t.defaultValues||t.values)||{}:{},i=t.shouldUnregister?{}:It(o),l={action:!1,mount:!1,watch:!1},s={mount:new Set,unMount:new Set,array:new Set,watch:new Set},u,a=0;const c={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},f={values:gu(),array:gu(),state:gu()},p=Gd(t.mode),g=Gd(t.reValidateMode),m=t.criteriaMode===Yt.all,y=w=>_=>{clearTimeout(a),a=setTimeout(w,_)},E=async w=>{if(c.isValid||w){const _=t.resolver?gt((await C()).errors):await I(r,!0);_!==n.isValid&&f.state.next({isValid:_})}},h=(w,_)=>{(c.isValidating||c.validatingFields)&&((w||Array.from(s.mount)).forEach(D=>{D&&(_?xe(n.validatingFields,D,_):We(n.validatingFields,D))}),f.state.next({validatingFields:n.validatingFields,isValidating:!gt(n.validatingFields)}))},d=(w,_=[],D,j,z=!0,N=!0)=>{if(j&&D){if(l.action=!0,N&&Array.isArray(K(r,w))){const X=D(K(r,w),j.argA,j.argB);z&&xe(r,w,X)}if(N&&Array.isArray(K(n.errors,w))){const X=D(K(n.errors,w),j.argA,j.argB);z&&xe(n.errors,w,X),T1(n.errors,w)}if(c.touchedFields&&N&&Array.isArray(K(n.touchedFields,w))){const X=D(K(n.touchedFields,w),j.argA,j.argB);z&&xe(n.touchedFields,w,X)}c.dirtyFields&&(n.dirtyFields=nl(o,i)),f.state.next({name:w,isDirty:W(w,_),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else xe(i,w,_)},v=(w,_)=>{xe(n.errors,w,_),f.state.next({errors:n.errors})},x=w=>{n.errors=w,f.state.next({errors:n.errors,isValid:!1})},F=(w,_,D,j)=>{const z=K(r,w);if(z){const N=K(i,w,Ve(D)?K(o,w):D);Ve(N)||j&&j.defaultChecked||_?xe(i,w,_?N:vu(z._f)):we(w,N),l.mount&&E()}},M=(w,_,D,j,z)=>{let N=!1,X=!1;const de={name:w},Se=!!(K(r,w)&&K(r,w)._f&&K(r,w)._f.disabled);if(!D||j){c.isDirty&&(X=n.isDirty,n.isDirty=de.isDirty=W(),N=X!==de.isDirty);const Pe=Se||Vn(K(o,w),_);X=!!(!Se&&K(n.dirtyFields,w)),Pe||Se?We(n.dirtyFields,w):xe(n.dirtyFields,w,!0),de.dirtyFields=n.dirtyFields,N=N||c.dirtyFields&&X!==!Pe}if(D){const Pe=K(n.touchedFields,w);Pe||(xe(n.touchedFields,w,D),de.touchedFields=n.touchedFields,N=N||c.touchedFields&&Pe!==D)}return N&&z&&f.state.next(de),N?de:{}},A=(w,_,D,j)=>{const z=K(n.errors,w),N=c.isValid&&sn(_)&&n.isValid!==_;if(e.delayError&&D?(u=y(()=>v(w,D)),u(e.delayError)):(clearTimeout(a),u=null,D?xe(n.errors,w,D):We(n.errors,w)),(D?!Vn(z,D):z)||!gt(j)||N){const X={...j,...N&&sn(_)?{isValid:_}:{},errors:n.errors,name:w};n={...n,...X},f.state.next(X)}},C=async w=>{h(w,!0);const _=await t.resolver(i,t.context,k1(w||s.mount,r,t.criteriaMode,t.shouldUseNativeValidation));return h(w),_},U=async w=>{const{errors:_}=await C(w);if(w)for(const D of w){const j=K(_,D);j?xe(n.errors,D,j):We(n.errors,D)}else n.errors=_;return _},I=async(w,_,D={valid:!0})=>{for(const j in w){const z=w[j];if(z){const{_f:N,...X}=z;if(N){const de=s.array.has(N.name),Se=z._f&&F1(z._f);Se&&c.validatingFields&&h([j],!0);const Pe=await Jd(z,i,m,t.shouldUseNativeValidation&&!_,de);if(Se&&c.validatingFields&&h([j]),Pe[N.name]&&(D.valid=!1,_))break;!_&&(K(Pe,N.name)?de?E1(n.errors,Pe,N.name):xe(n.errors,N.name,Pe[N.name]):We(n.errors,N.name))}!gt(X)&&await I(X,_,D)}}return D.valid},Y=()=>{for(const w of s.unMount){const _=K(r,w);_&&(_._f.refs?_._f.refs.every(D=>!mu(D)):!mu(_._f.ref))&&ze(w)}s.unMount=new Set},W=(w,_)=>(w&&_&&xe(i,w,_),!Vn(he(),o)),Z=(w,_,D)=>C1(w,s,{...l.mount?i:Ve(_)?o:an(w)?{[w]:_}:_},D,_),oe=w=>Es(K(l.mount?i:o,w,e.shouldUnregister?K(o,w,[]):[])),we=(w,_,D={})=>{const j=K(r,w);let z=_;if(j){const N=j._f;N&&(!N.disabled&&xe(i,w,wm(_,N)),z=Xl(N.ref)&&ft(_)?"":_,mm(N.ref)?[...N.ref.options].forEach(X=>X.selected=z.includes(X.value)):N.refs?Ri(N.ref)?N.refs.length>1?N.refs.forEach(X=>(!X.defaultChecked||!X.disabled)&&(X.checked=Array.isArray(z)?!!z.find(de=>de===X.value):z===X.value)):N.refs[0]&&(N.refs[0].checked=!!z):N.refs.forEach(X=>X.checked=X.value===z):Ic(N.ref)?N.ref.value="":(N.ref.value=z,N.ref.type||f.values.next({name:w,values:{...i}})))}(D.shouldDirty||D.shouldTouch)&&M(w,z,D.shouldTouch,D.shouldDirty,!0),D.shouldValidate&&ee(w)},Fe=(w,_,D)=>{for(const j in _){const z=_[j],N=`${w}.${j}`,X=K(r,N);(s.array.has(w)||!Yl(z)||X&&!X._f)&&!Kr(z)?Fe(N,z,D):we(N,z,D)}},Ie=(w,_,D={})=>{const j=K(r,w),z=s.array.has(w),N=It(_);xe(i,w,N),z?(f.array.next({name:w,values:{...i}}),(c.isDirty||c.dirtyFields)&&D.shouldDirty&&f.state.next({name:w,dirtyFields:nl(o,i),isDirty:W(w,N)})):j&&!j._f&&!ft(N)?Fe(w,N,D):we(w,N,D),Wd(w,s)&&f.state.next({...n}),f.values.next({name:l.mount?w:void 0,values:{...i}})},$=async w=>{l.mount=!0;const _=w.target;let D=_.name,j=!0;const z=K(r,D),N=()=>_.type?vu(z._f):h1(w),X=de=>{j=Number.isNaN(de)||Vn(de,K(i,D,de))};if(z){let de,Se;const Pe=N(),rn=w.type===Hd.BLUR||w.type===Hd.FOCUS_OUT,ho=!D1(z._f)&&!t.resolver&&!K(n.errors,D)&&!z._f.deps||L1(rn,K(n.touchedFields,D),n.isSubmitted,g,p),At=Wd(D,s,rn);xe(i,D,Pe),rn?(z._f.onBlur&&z._f.onBlur(w),u&&u(0)):z._f.onChange&&z._f.onChange(w);const xt=M(D,Pe,rn,!1),Pi=!gt(xt)||At;if(!rn&&f.values.next({name:D,type:w.type,values:{...i}}),ho)return c.isValid&&(e.mode==="onBlur"?rn&&E():E()),Pi&&f.state.next({name:D,...At?{}:xt});if(!rn&&At&&f.state.next({...n}),t.resolver){const{errors:sr}=await C([D]);if(X(Pe),j){const Ps=Zd(n.errors,r,D),Wt=Zd(sr,r,Ps.name||D);de=Wt.error,D=Wt.name,Se=gt(sr)}}else h([D],!0),de=(await Jd(z,i,m,t.shouldUseNativeValidation))[D],h([D]),X(Pe),j&&(de?Se=!1:c.isValid&&(Se=await I(r,!0)));j&&(z._f.deps&&ee(z._f.deps),A(D,Se,de,xt))}},B=(w,_)=>{if(K(n.errors,_)&&w.focus)return w.focus(),1},ee=async(w,_={})=>{let D,j;const z=yl(w);if(t.resolver){const N=await U(Ve(w)?w:z);D=gt(N),j=w?!z.some(X=>K(N,X)):D}else w?(j=(await Promise.all(z.map(async N=>{const X=K(r,N);return await I(X&&X._f?{[N]:X}:X)}))).every(Boolean),!(!j&&!n.isValid)&&E()):j=D=await I(r);return f.state.next({...!an(w)||c.isValid&&D!==n.isValid?{}:{name:w},...t.resolver||!w?{isValid:D}:{},errors:n.errors}),_.shouldFocus&&!j&&Wo(r,B,w?z:s.mount),j},he=w=>{const _={...l.mount?i:o};return Ve(w)?_:an(w)?K(_,w):w.map(D=>K(_,D))},ve=(w,_)=>({invalid:!!K((_||n).errors,w),isDirty:!!K((_||n).dirtyFields,w),error:K((_||n).errors,w),isValidating:!!K(n.validatingFields,w),isTouched:!!K((_||n).touchedFields,w)}),nt=w=>{w&&yl(w).forEach(_=>We(n.errors,_)),f.state.next({errors:w?n.errors:{}})},Ze=(w,_,D)=>{const j=(K(r,w,{_f:{}})._f||{}).ref,z=K(n.errors,w)||{},{ref:N,message:X,type:de,...Se}=z;xe(n.errors,w,{...Se,..._,ref:j}),f.state.next({name:w,errors:n.errors,isValid:!1}),D&&D.shouldFocus&&j&&j.focus&&j.focus()},Ht=(w,_)=>Cn(w)?f.values.subscribe({next:D=>w(Z(void 0,_),D)}):Z(w,_,!0),ze=(w,_={})=>{for(const D of w?yl(w):s.mount)s.mount.delete(D),s.array.delete(D),_.keepValue||(We(r,D),We(i,D)),!_.keepError&&We(n.errors,D),!_.keepDirty&&We(n.dirtyFields,D),!_.keepTouched&&We(n.touchedFields,D),!_.keepIsValidating&&We(n.validatingFields,D),!t.shouldUnregister&&!_.keepDefaultValue&&We(o,D);f.values.next({values:{...i}}),f.state.next({...n,..._.keepDirty?{isDirty:W()}:{}}),!_.keepIsValid&&E()},ut=({disabled:w,name:_,field:D,fields:j,value:z})=>{if(sn(w)&&l.mount||w){const N=w?void 0:Ve(z)?vu(D?D._f:K(j,_)._f):z;xe(i,_,N),M(_,N,!1,!1,!0)}},Gt=(w,_={})=>{let D=K(r,w);const j=sn(_.disabled)||sn(e.disabled);return xe(r,w,{...D||{},_f:{...D&&D._f?D._f:{ref:{name:w}},name:w,mount:!0,..._}}),s.mount.add(w),D?ut({field:D,disabled:sn(_.disabled)?_.disabled:e.disabled,name:w,value:_.value}):F(w,!0,_.value),{...j?{disabled:_.disabled||e.disabled}:{},...t.progressive?{required:!!_.required,min:Do(_.min),max:Do(_.max),minLength:Do(_.minLength),maxLength:Do(_.maxLength),pattern:Do(_.pattern)}:{},name:w,onChange:$,onBlur:$,ref:z=>{if(z){Gt(w,_),D=K(r,w);const N=Ve(z.value)&&z.querySelectorAll&&z.querySelectorAll("input,select,textarea")[0]||z,X=P1(N),de=D._f.refs||[];if(X?de.find(Se=>Se===N):N===D._f.ref)return;xe(r,w,{_f:{...D._f,...X?{refs:[...de.filter(mu),N,...Array.isArray(K(o,w))?[{}]:[]],ref:{type:N.type,name:w}}:{ref:N}}}),F(w,!1,void 0,N)}else D=K(r,w,{}),D._f&&(D._f.mount=!1),(t.shouldUnregister||_.shouldUnregister)&&!(m1(s.array,w)&&l.action)&&s.unMount.add(w)}}},Ei=()=>t.shouldFocusError&&Wo(r,B,s.mount),Fr=w=>{sn(w)&&(f.state.next({disabled:w}),Wo(r,(_,D)=>{const j=K(r,D);j&&(_.disabled=j._f.disabled||w,Array.isArray(j._f.refs)&&j._f.refs.forEach(z=>{z.disabled=j._f.disabled||w}))},0,!1))},xi=(w,_)=>async D=>{let j;D&&(D.preventDefault&&D.preventDefault(),D.persist&&D.persist());let z=It(i);if(f.state.next({isSubmitting:!0}),t.resolver){const{errors:N,values:X}=await C();n.errors=N,z=X}else await I(r);if(We(n.errors,"root"),gt(n.errors)){f.state.next({errors:{}});try{await w(z,D)}catch(N){j=N}}else _&&await _({...n.errors},D),Ei(),setTimeout(Ei);if(f.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:gt(n.errors)&&!j,submitCount:n.submitCount+1,errors:n.errors}),j)throw j},xs=(w,_={})=>{K(r,w)&&(Ve(_.defaultValue)?Ie(w,It(K(o,w))):(Ie(w,_.defaultValue),xe(o,w,It(_.defaultValue))),_.keepTouched||We(n.touchedFields,w),_.keepDirty||(We(n.dirtyFields,w),n.isDirty=_.defaultValue?W(w,It(K(o,w))):W()),_.keepError||(We(n.errors,w),c.isValid&&E()),f.state.next({...n}))},_i=(w,_={})=>{const D=w?It(w):o,j=It(D),z=gt(w),N=z?o:j;if(_.keepDefaultValues||(o=D),!_.keepValues){if(_.keepDirtyValues)for(const X of s.mount)K(n.dirtyFields,X)?xe(N,X,K(i,X)):Ie(X,K(N,X));else{if(Nc&&Ve(w))for(const X of s.mount){const de=K(r,X);if(de&&de._f){const Se=Array.isArray(de._f.refs)?de._f.refs[0]:de._f.ref;if(Xl(Se)){const Pe=Se.closest("form");if(Pe){Pe.reset();break}}}}r={}}i=e.shouldUnregister?_.keepDefaultValues?It(o):{}:It(N),f.array.next({values:{...N}}),f.values.next({values:{...N}})}s={mount:_.keepDirtyValues?s.mount:new Set,unMount:new Set,array:new Set,watch:new Set,watchAll:!1,focus:""},l.mount=!c.isValid||!!_.keepIsValid||!!_.keepDirtyValues,l.watch=!!e.shouldUnregister,f.state.next({submitCount:_.keepSubmitCount?n.submitCount:0,isDirty:z?!1:_.keepDirty?n.isDirty:!!(_.keepDefaultValues&&!Vn(w,o)),isSubmitted:_.keepIsSubmitted?n.isSubmitted:!1,dirtyFields:z?{}:_.keepDirtyValues?_.keepDefaultValues&&i?nl(o,i):n.dirtyFields:_.keepDefaultValues&&w?nl(o,w):_.keepDirty?n.dirtyFields:{},touchedFields:_.keepTouched?n.touchedFields:{},errors:_.keepErrors?n.errors:{},isSubmitSuccessful:_.keepIsSubmitSuccessful?n.isSubmitSuccessful:!1,isSubmitting:!1})},qe=(w,_)=>_i(Cn(w)?w(i):w,_);return{control:{register:Gt,unregister:ze,getFieldState:ve,handleSubmit:xi,setError:Ze,_executeSchema:C,_getWatch:Z,_getDirty:W,_updateValid:E,_removeUnmounted:Y,_updateFieldArray:d,_updateDisabledField:ut,_getFieldArray:oe,_reset:_i,_resetDefaultValues:()=>Cn(t.defaultValues)&&t.defaultValues().then(w=>{qe(w,t.resetOptions),f.state.next({isLoading:!1})}),_updateFormState:w=>{n={...n,...w}},_disableForm:Fr,_subjects:f,_proxyFormState:c,_setErrors:x,get _fields(){return r},get _formValues(){return i},get _state(){return l},set _state(w){l=w},get _defaultValues(){return o},get _names(){return s},set _names(w){s=w},get _formState(){return n},set _formState(w){n=w},get _options(){return t},set _options(w){t={...t,...w}}},trigger:ee,register:Gt,handleSubmit:xi,watch:Ht,setValue:Ie,getValues:he,reset:qe,resetField:xs,clearErrors:nt,unregister:ze,setError:Ze,setFocus:(w,_={})=>{const D=K(r,w),j=D&&D._f;if(j){const z=j.refs?j.refs[0]:j.ref;z.focus&&(z.focus(),_.shouldSelect&&z.select())}},getFieldState:ve}}function N1(e={}){const t=mt.useRef(),n=mt.useRef(),[r,o]=mt.useState({isDirty:!1,isValidating:!1,isLoading:Cn(e.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:e.errors||{},disabled:e.disabled||!1,defaultValues:Cn(e.defaultValues)?void 0:e.defaultValues});t.current||(t.current={...O1(e),formState:r});const i=t.current.control;return i._options=e,S1({subject:i._subjects.state,next:l=>{w1(l,i._proxyFormState,i._updateFormState)&&o({...i._formState})}}),mt.useEffect(()=>i._disableForm(e.disabled),[i,e.disabled]),mt.useEffect(()=>{if(i._proxyFormState.isDirty){const l=i._getDirty();l!==r.isDirty&&i._subjects.state.next({isDirty:l})}},[i,r.isDirty]),mt.useEffect(()=>{e.values&&!Vn(e.values,n.current)?(i._reset(e.values,i._options.resetOptions),n.current=e.values,o(l=>({...l}))):i._resetDefaultValues()},[e.values,i]),mt.useEffect(()=>{e.errors&&i._setErrors(e.errors)},[e.errors,i]),mt.useEffect(()=>{i._state.mount||(i._updateValid(),i._state.mount=!0),i._state.watch&&(i._state.watch=!1,i._subjects.state.next({...i._formState})),i._removeUnmounted()}),mt.useEffect(()=>{e.shouldUnregister&&i._subjects.values.next({values:i._getWatch()})},[e.shouldUnregister,i]),t.current.formState=y1(r,i),t.current}function Sm(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t{const s=l.file;if(!s||s.length===0)return;const u=s[0],a=new FormData;a.append("file",u);const c=await fm.post("/schemas/upload",a,{headers:{"Content-Type":"multipart/form-data"}});o(`Uploaded: ${c.data.path}`),n()};return se.jsxs("div",{className:"space-y-4",children:[se.jsx("h1",{className:"text-xl font-semibold",children:"Загрузка XSD/XSL"}),se.jsxs("form",{onSubmit:t(i),className:"flex items-center gap-3",children:[se.jsx(I1,{type:"file",accept:".xsd,.xsl",...e("file")}),se.jsx(A1,{type:"submit",children:"Загрузить"})]}),r&&se.jsx("div",{className:"text-sm text-green-600",children:r})]})}function V1(){return se.jsxs("div",{className:"text-sm text-neutral-500",children:["Детальный просмотр будет добавлен, когда появится эндпоинт /schemas/",id,"."]})}const $1=Pw([{path:"/",element:se.jsx(Bw,{}),children:[{index:!0,element:se.jsx(Bd,{})},{path:"schemas",element:se.jsx(Bd,{})},{path:"schemas/upload",element:se.jsx(z1,{})},{path:"schemas/:id",element:se.jsx(V1,{})}]}],{basename:"/ui"});pg(document.getElementById("root")).render(se.jsx(mt.StrictMode,{children:se.jsx(Nw,{router:$1})})); diff --git a/app/static/assets/index-QKPzKNrt.css b/app/static/assets/index-QKPzKNrt.css new file mode 100644 index 0000000..e5f04f0 --- /dev/null +++ b/app/static/assets/index-QKPzKNrt.css @@ -0,0 +1 @@ +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.mx-auto{margin-left:auto;margin-right:auto}.flex{display:flex}.table{display:table}.min-h-screen{min-height:100vh}.w-full{width:100%}.max-w-5xl{max-width:64rem}.items-center{align-items:center}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.p-4{padding:1rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.text-left{text-align:left}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity))}.text-neutral-500{--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity))}.underline{text-decoration-line:underline}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}html,body,#root{height:100%}.\[\&\>\*\]\:p-2>*{padding:.5rem} diff --git a/app/static/index.html b/app/static/index.html new file mode 100644 index 0000000..9990682 --- /dev/null +++ b/app/static/index.html @@ -0,0 +1,13 @@ + + + + + + XSD Registry + + + + +
    + + diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..61b4ff7 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,12 @@ + + + + + + XSD Registry + + +
    + + + diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..2537b9f --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,33 @@ +{ + "name": "xsd-registry-ui", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview --port 4173" + }, + "dependencies": { + "@radix-ui/react-dialog": "1.1.1", + "@tanstack/react-table": "8.20.5", + "axios": "1.7.7", + "class-variance-authority": "0.7.0", + "clsx": "2.1.1", + "react": "18.3.1", + "react-dom": "18.3.1", + "react-hook-form": "7.53.0", + "react-router-dom": "6.26.2", + "tailwind-merge": "2.5.2" + }, + "devDependencies": { + "@types/react": "18.3.5", + "@types/react-dom": "18.3.0", + "@vitejs/plugin-react": "^4.7.0", + "autoprefixer": "10.4.20", + "postcss": "8.4.45", + "tailwindcss": "3.4.9", + "typescript": "5.5.4", + "vite": "5.4.2" + } +} diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 0000000..2b75bd8 --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {} + } +} diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx new file mode 100644 index 0000000..e62dd7a --- /dev/null +++ b/frontend/src/App.tsx @@ -0,0 +1,20 @@ +import { Outlet, Link, NavLink } from 'react-router-dom' + +export default function App() { + return ( +
    +
    +
    + XSD Registry + +
    +
    +
    + +
    +
    + ) +} diff --git a/frontend/src/components/ui/button.tsx b/frontend/src/components/ui/button.tsx new file mode 100644 index 0000000..782248a --- /dev/null +++ b/frontend/src/components/ui/button.tsx @@ -0,0 +1,7 @@ +import { ButtonHTMLAttributes } from 'react' +import { clsx } from 'clsx' + +export function Button(props: ButtonHTMLAttributes) { + const { className, ...rest } = props + return
    НазваниеТип Версия Namespace Создана
    {{ s.name }} {{ s.type.title or "—" }} {{ s.version or "—" }} {{ s.namespace or "—" }} {{ s.created_at }} +
    + +
    +
    Пока пусто
    +export const THead = (p: HTMLAttributes) => +export const TBody = (p: HTMLAttributes) => +export const TR = (p: HTMLAttributes) => +export const TH = (p: HTMLAttributes) =>
    +export const TD = (p: HTMLAttributes) => diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 0000000..fa67a08 --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,5 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +html, body, #root { height: 100%; } diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts new file mode 100644 index 0000000..95470d7 --- /dev/null +++ b/frontend/src/lib/api.ts @@ -0,0 +1,6 @@ +import axios from 'axios' + +// In prod (served by FastAPI) the baseURL is same origin. +// In dev, vite proxy (vite.config.ts) forwards /schemas* to backend. +// All client calls go to JSON API under /api/* +export const api = axios.create({ baseURL: '/api' }) diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx new file mode 100644 index 0000000..e23157b --- /dev/null +++ b/frontend/src/main.tsx @@ -0,0 +1,27 @@ +import React from 'react' +import { createRoot } from 'react-dom/client' +import { createBrowserRouter, RouterProvider } from 'react-router-dom' +import './index.css' +import App from './App' +import SchemasList from './pages/SchemasList' +import SchemaUpload from './pages/SchemaUpload' +import SchemaView from './pages/SchemaView' + +const router = createBrowserRouter([ + { + path: '/', + element: , + children: [ + { index: true, element: }, + { path: 'schemas', element: }, + { path: 'schemas/upload', element: }, + { path: 'schemas/:id', element: } + ] + } +], { basename: import.meta.env.DEV ? '/' : '/ui' }) + +createRoot(document.getElementById('root')!).render( + + + +) diff --git a/frontend/src/pages/SchemaUpload.tsx b/frontend/src/pages/SchemaUpload.tsx new file mode 100644 index 0000000..3ba2489 --- /dev/null +++ b/frontend/src/pages/SchemaUpload.tsx @@ -0,0 +1,35 @@ +import { useState } from 'react' +import { useForm } from 'react-hook-form' +import { api } from '../lib/api' +import { Button } from '../components/ui/button' +import { Input } from '../components/ui/input' + +type Form = { file: FileList } + +export default function SchemaUpload() { + const { register, handleSubmit, reset } = useForm
    () + const [msg, setMsg] = useState('') + + const onSubmit = async (v: Form) => { + const files = v.file + if (!files || files.length === 0) return + const f = files[0] + // NOTE: server enforces MAX_UPLOAD_MB=80; client can add pre-check if desired + const form = new FormData() + form.append('file', f) + const res = await api.post('/schemas/upload', form, { headers: { 'Content-Type': 'multipart/form-data' } }) + setMsg(`Uploaded: ${res.data.path}`) + reset() + } + + return ( +
    +

    Загрузка XSD/XSL

    + + + + + {msg &&
    {msg}
    } +
    + ) +} diff --git a/frontend/src/pages/SchemaView.tsx b/frontend/src/pages/SchemaView.tsx new file mode 100644 index 0000000..b8f8d68 --- /dev/null +++ b/frontend/src/pages/SchemaView.tsx @@ -0,0 +1,4 @@ +export default function SchemaView() { + // Placeholder: backend пока не даёт отдельный /schemas/{id}, показываем список/загрузку + return
    Детальный просмотр будет добавлен, когда появится эндпоинт /schemas/{id}.
    +} diff --git a/frontend/src/pages/SchemasList.tsx b/frontend/src/pages/SchemasList.tsx new file mode 100644 index 0000000..ec8659b --- /dev/null +++ b/frontend/src/pages/SchemasList.tsx @@ -0,0 +1,48 @@ +import { useEffect, useMemo, useState } from 'react' +import { useReactTable, getCoreRowModel, ColumnDef, flexRender } from '@tanstack/react-table' +import { api } from '../lib/api' + +// Minimal shadcn-style table wrappers (local) +import { Table, THead, TBody, TR, TH, TD } from '../components/ui/table' + +type Item = { path: string; name: string } + +export default function SchemasList() { + const [data, setData] = useState([]) + useEffect(() => { + api.get('/schemas').then(r => setData(r.data)) + }, []) + + const columns = useMemo[]>(() => [ + { header: 'Name', accessorKey: 'name' }, + { header: 'Path', accessorKey: 'path' } + ], []) + + const table = useReactTable({ data, columns, getCoreRowModel: getCoreRowModel() }) + + return ( +
    +

    Схемы

    + + + {table.getHeaderGroups().map(hg => ( + + {hg.headers.map(h => ( + + ))} + + ))} + + + {table.getRowModel().rows.map(r => ( + + {r.getVisibleCells().map(c => ( + + ))} + + ))} + +
    {flexRender(h.column.columnDef.header, h.getContext())}
    {flexRender(c.column.columnDef.cell ?? c.column.columnDef.header, c.getContext())}
    +
    + ) +} diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 0000000..dd57675 --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,6 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: ['./index.html', './src/**/*.{ts,tsx}'], + theme: { extend: {} }, + plugins: [] +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..1cb643a --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ES2020", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "jsx": "react-jsx", + "module": "ESNext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "strict": true, + "skipLibCheck": true + }, + "include": ["src"] +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..6076e68 --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// In prod SPA lives under /ui/, dev runs at / +export default defineConfig(({ command }) => ({ + base: command === 'build' ? '/ui/' : '/', + plugins: [react()], + server: { + port: 5173, + proxy: { + // single proxy for JSON API + '/api': 'http://localhost:18080' + } + }, + build: { + outDir: 'dist', + assetsDir: 'assets', + emptyOutDir: true + } +})) From 54c893c29e78ae30c65c11908d1935a599a83ff3 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Mon, 25 Aug 2025 13:14:50 +0300 Subject: [PATCH 19/20] A1-9: 0004 migration fix --- migrations/versions/0004_seed_schema_types.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrations/versions/0004_seed_schema_types.py b/migrations/versions/0004_seed_schema_types.py index 2beb0cf..259a889 100644 --- a/migrations/versions/0004_seed_schema_types.py +++ b/migrations/versions/0004_seed_schema_types.py @@ -36,7 +36,7 @@ def upgrade() -> None: } to_insert = [ - dict(code=code, name=name, filename_pattern=pattern) + dict(code=code, title=name, filename_pattern=pattern) for code, name, pattern in BASE_TYPES if code not in existing ] From 811f1aa742d5617e0f37eac0a0a179f611e11e97 Mon Sep 17 00:00:00 2001 From: Ilia Pismenov Date: Tue, 26 Aug 2025 16:03:39 +0300 Subject: [PATCH 20/20] =?UTF-8?q?=D0=901-9:=20=D0=A1=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=BE=D0=BA=20=D1=81=D1=85=D0=B5=D0=BC=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C=D1=8E=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=20=D0=BD=D0=B0=20React.=20-=20?= =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D1=8B=20?= =?UTF-8?q?=D1=82=D1=80=D0=B5=D0=B1=D1=83=D0=B5=D0=BC=D1=8B=D0=B5=20=D0=B1?= =?UTF-8?q?=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B8=20-=20?= =?UTF-8?q?=D0=A1=D1=84=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80?= =?UTF-8?q?=D0=B0=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81?= =?UTF-8?q?=D0=BE=D0=B2,=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=B1=D1=83=D0=B4=D0=B5=D0=BC=20=D0=BF=D1=80=D0=B8=D0=B4=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=B8=D0=B2=D0=B0=D1=82=D1=8C=D1=81=D1=8F=20=D0=B4?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5=D0=B5=20-=20=D0=9A=D0=BE=D0=BC=D0=BF=D0=BE?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D1=82=D1=8B=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D0=BC=20=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=89?= =?UTF-8?q?=D0=B8=D0=B5,=20=D0=BD=D0=B0=D0=BF=D1=80=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D1=80=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D0=B0,=20=D0=B8?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D0=B4=D0=B5=D1=82=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8E=20=D0=BF=D0=BE=D0=B4=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D0=BA=D1=80=D0=B5=D1=82=D0=BD=D1=83=D1=8E=20=D1=81=D0=B8?= =?UTF-8?q?=D1=82=D1=83=D0=B0=D1=86=D0=B8=D1=8E=20=D0=B8=D1=85=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20-=20=D0=9E=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D0=BA=D1=80=D0=B5?= =?UTF-8?q?=D1=82=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B8=D0=B7=D0=B2=D0=BE?= =?UTF-8?q?=D0=B4=D0=B8=D1=82=D1=81=D1=8F=20=D0=BD=D0=B0=20=D1=82=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=B6=D0=B5=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=86=D0=B5=20=D0=B2=20=D0=B4=D0=B8=D0=B0=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/tasks.json | 10 +- app/static/assets/index-BflQQHQj.css | 1 + app/static/assets/index-C1fPBhUf.js | 95 - app/static/assets/index-C6IcpXes.js | 134 + app/static/assets/index-QKPzKNrt.css | 1 - app/static/index.html | 4 +- frontend/components.json | 21 + frontend/package-lock.json | 2605 +++++++---------- frontend/package.json | 19 +- frontend/postcss.config.js | 6 - frontend/src/components/ui/button.tsx | 38 +- frontend/src/components/ui/card.tsx | 15 + frontend/src/components/ui/data-table.tsx | 193 ++ frontend/src/components/ui/dialog.tsx | 74 + frontend/src/components/ui/dropdown-menu.tsx | 57 + frontend/src/components/ui/input.tsx | 25 +- frontend/src/components/ui/label.tsx | 8 + frontend/src/components/ui/table.tsx | 22 +- frontend/src/components/ui/upload-dialog.tsx | 110 + .../src/features/schemas/SchemaViewDialog.tsx | 96 + frontend/src/features/schemas/columns.tsx | 69 + frontend/src/index.css | 126 +- frontend/src/lib/format.ts | 18 + frontend/src/lib/utils.ts | 8 + frontend/src/pages/SchemaUpload.tsx | 19 +- frontend/src/pages/SchemasList.tsx | 100 +- frontend/tailwind.config.js | 6 - frontend/tsconfig.json | 6 +- frontend/vite.config.ts | 12 +- migrations/versions/0004_seed_schema_types.py | 12 +- 30 files changed, 2213 insertions(+), 1697 deletions(-) create mode 100644 app/static/assets/index-BflQQHQj.css delete mode 100644 app/static/assets/index-C1fPBhUf.js create mode 100644 app/static/assets/index-C6IcpXes.js delete mode 100644 app/static/assets/index-QKPzKNrt.css create mode 100644 frontend/components.json delete mode 100644 frontend/postcss.config.js create mode 100644 frontend/src/components/ui/card.tsx create mode 100644 frontend/src/components/ui/data-table.tsx create mode 100644 frontend/src/components/ui/dialog.tsx create mode 100644 frontend/src/components/ui/dropdown-menu.tsx create mode 100644 frontend/src/components/ui/label.tsx create mode 100644 frontend/src/components/ui/upload-dialog.tsx create mode 100644 frontend/src/features/schemas/SchemaViewDialog.tsx create mode 100644 frontend/src/features/schemas/columns.tsx create mode 100644 frontend/src/lib/format.ts create mode 100644 frontend/src/lib/utils.ts delete mode 100644 frontend/tailwind.config.js diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 4a0aed7..a1660b3 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -59,6 +59,14 @@ "group": "build", "presentation": { "reveal": "always", "panel": "dedicated" }, "problemMatcher": [] - } + }, + { + "label": "Pytest (container)", + "type": "shell", + "command": "docker compose exec -e DATABASE_URL=postgresql+psycopg://xmlsvc:xmlsvc@postgres:5432/xmlsvc -e S3_ENDPOINT=http://minio:9000 -e S3_BUCKET=xmlsvc -e S3_ACCESS_KEY=minioadmin -e S3_SECRET_KEY=minioadmin app pytest -q", + "group": "test", + "presentation": { "reveal": "always", "panel": "dedicated" }, + "problemMatcher": [] + }, ] } diff --git a/app/static/assets/index-BflQQHQj.css b/app/static/assets/index-BflQQHQj.css new file mode 100644 index 0000000..ea656e8 --- /dev/null +++ b/app/static/assets/index-BflQQHQj.css @@ -0,0 +1 @@ +/*! tailwindcss v4.1.12 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-700:oklch(50.5% .213 27.518);--color-green-600:oklch(62.7% .194 149.214);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-600:oklch(44.2% .017 285.786);--color-neutral-500:oklch(55.6% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--font-weight-medium:500;--font-weight-semibold:600;--radius-2xl:1rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}body{background-color:var(--background);color:var(--foreground)}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing)*3)}.right-0{right:calc(var(--spacing)*0)}.right-3{right:calc(var(--spacing)*3)}.left-1\/2{left:50%}.z-10{z-index:10}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[70\]{z-index:70}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.mt-6{margin-top:calc(var(--spacing)*6)}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.table{display:table}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-24{height:calc(var(--spacing)*24)}.h-px{height:1px}.max-h-80{max-height:calc(var(--spacing)*80)}.max-h-\[85vh\]{max-height:85vh}.min-h-screen{min-height:100vh}.w-8{width:calc(var(--spacing)*8)}.w-\[min\(92vw\,900px\)\]{width:min(92vw,900px)}.w-full{width:100%}.max-w-5xl{max-width:var(--container-5xl)}.max-w-\[92vw\]{max-width:92vw}.min-w-\[12rem\]{min-width:12rem}.min-w-\[800px\]{min-width:800px}.flex-1{flex:1}.caption-bottom{caption-side:bottom}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.cursor-pointer{cursor:pointer}.grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-6{column-gap:calc(var(--spacing)*6)}.gap-y-2{row-gap:calc(var(--spacing)*2)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[var\(--radius\)\]{border-radius:var(--radius)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.bg-\[var\(--background\)\]{background-color:var(--background)}.bg-\[var\(--primary\)\]{background-color:var(--primary)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-200{background-color:var(--color-zinc-200)}.p-1{padding:calc(var(--spacing)*1)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-\[var\(--primary-foreground\)\]{color:var(--primary-foreground)}.text-green-600{color:var(--color-green-600)}.text-neutral-500{color:var(--color-neutral-500)}.text-red-700{color:var(--color-red-700)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.underline{text-decoration-line:underline}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.placeholder\:text-zinc-400::placeholder{color:var(--color-zinc-400)}@media (hover:hover){.hover\:bg-\[var\(--muted\)\]:hover{background-color:var(--muted)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:opacity-90:hover{opacity:.9}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-black:focus-visible{--tw-ring-color:var(--color-black)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--destructive-foreground:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.704);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08);--radius:.625rem;--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0)}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(14.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(14.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(98.5% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(39.6% .141 25.723);--destructive-foreground:oklch(63.7% .237 25.331);--border:oklch(26.9% 0 0);--input:oklch(26.9% 0 0);--ring:oklch(43.9% 0 0);--chart-1:oklch(48.8% .243 264.376);--chart-2:oklch(69.6% .17 162.48);--chart-3:oklch(76.9% .188 70.08);--chart-4:oklch(62.7% .265 303.9);--chart-5:oklch(64.5% .246 16.439);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(26.9% 0 0);--sidebar-ring:oklch(43.9% 0 0)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false} diff --git a/app/static/assets/index-C1fPBhUf.js b/app/static/assets/index-C1fPBhUf.js deleted file mode 100644 index 7564c3d..0000000 --- a/app/static/assets/index-C1fPBhUf.js +++ /dev/null @@ -1,95 +0,0 @@ -function bd(e,t){for(var n=0;nr[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const l of i.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&r(l)}).observe(document,{childList:!0,subtree:!0});function n(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(o){if(o.ep)return;o.ep=!0;const i=n(o);fetch(o.href,i)}})();function ep(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var tp={exports:{}},bl={},np={exports:{}},ae={};/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var di=Symbol.for("react.element"),Fm=Symbol.for("react.portal"),Dm=Symbol.for("react.fragment"),Lm=Symbol.for("react.strict_mode"),Tm=Symbol.for("react.profiler"),Mm=Symbol.for("react.provider"),Om=Symbol.for("react.context"),Nm=Symbol.for("react.forward_ref"),Am=Symbol.for("react.suspense"),Im=Symbol.for("react.memo"),zm=Symbol.for("react.lazy"),qc=Symbol.iterator;function Vm(e){return e===null||typeof e!="object"?null:(e=qc&&e[qc]||e["@@iterator"],typeof e=="function"?e:null)}var rp={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},op=Object.assign,ip={};function uo(e,t,n){this.props=e,this.context=t,this.refs=ip,this.updater=n||rp}uo.prototype.isReactComponent={};uo.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};uo.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function lp(){}lp.prototype=uo.prototype;function _a(e,t,n){this.props=e,this.context=t,this.refs=ip,this.updater=n||rp}var Pa=_a.prototype=new lp;Pa.constructor=_a;op(Pa,uo.prototype);Pa.isPureReactComponent=!0;var Xc=Array.isArray,sp=Object.prototype.hasOwnProperty,ka={current:null},up={key:!0,ref:!0,__self:!0,__source:!0};function ap(e,t,n){var r,o={},i=null,l=null;if(t!=null)for(r in t.ref!==void 0&&(l=t.ref),t.key!==void 0&&(i=""+t.key),t)sp.call(t,r)&&!up.hasOwnProperty(r)&&(o[r]=t[r]);var s=arguments.length-2;if(s===1)o.children=n;else if(1>>1,ve=$[he];if(0>>1;heo(Ht,ee))zeo(ut,Ht)?($[he]=ut,$[ze]=ee,he=ze):($[he]=Ht,$[Ze]=ee,he=Ze);else if(zeo(ut,ee))$[he]=ut,$[ze]=ee,he=ze;else break e}}return B}function o($,B){var ee=$.sortIndex-B.sortIndex;return ee!==0?ee:$.id-B.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();e.unstable_now=function(){return l.now()-s}}var u=[],a=[],c=1,f=null,p=3,g=!1,m=!1,y=!1,E=typeof setTimeout=="function"?setTimeout:null,h=typeof clearTimeout=="function"?clearTimeout:null,d=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function v($){for(var B=n(a);B!==null;){if(B.callback===null)r(a);else if(B.startTime<=$)r(a),B.sortIndex=B.expirationTime,t(u,B);else break;B=n(a)}}function x($){if(y=!1,v($),!m)if(n(u)!==null)m=!0,Fe(F);else{var B=n(a);B!==null&&Ie(x,B.startTime-$)}}function F($,B){m=!1,y&&(y=!1,h(C),C=-1),g=!0;var ee=p;try{for(v(B),f=n(u);f!==null&&(!(f.expirationTime>B)||$&&!Y());){var he=f.callback;if(typeof he=="function"){f.callback=null,p=f.priorityLevel;var ve=he(f.expirationTime<=B);B=e.unstable_now(),typeof ve=="function"?f.callback=ve:f===n(u)&&r(u),v(B)}else r(u);f=n(u)}if(f!==null)var nt=!0;else{var Ze=n(a);Ze!==null&&Ie(x,Ze.startTime-B),nt=!1}return nt}finally{f=null,p=ee,g=!1}}var M=!1,A=null,C=-1,U=5,I=-1;function Y(){return!(e.unstable_now()-I$||125<$?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):U=0<$?Math.floor(1e3/$):5},e.unstable_getCurrentPriorityLevel=function(){return p},e.unstable_getFirstCallbackNode=function(){return n(u)},e.unstable_next=function($){switch(p){case 1:case 2:case 3:var B=3;break;default:B=p}var ee=p;p=B;try{return $()}finally{p=ee}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function($,B){switch($){case 1:case 2:case 3:case 4:case 5:break;default:$=3}var ee=p;p=$;try{return B()}finally{p=ee}},e.unstable_scheduleCallback=function($,B,ee){var he=e.unstable_now();switch(typeof ee=="object"&&ee!==null?(ee=ee.delay,ee=typeof ee=="number"&&0he?($.sortIndex=ee,t(a,$),n(u)===null&&$===n(a)&&(y?(h(C),C=-1):y=!0,Ie(x,ee-he))):($.sortIndex=ve,t(u,$),m||g||(m=!0,Fe(F))),$},e.unstable_shouldYield=Y,e.unstable_wrapCallback=function($){var B=p;return function(){var ee=p;p=B;try{return $.apply(this,arguments)}finally{p=ee}}}})(hp);pp.exports=hp;var Jm=pp.exports;/** - * @license React - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Ym=T,Tt=Jm;function O(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),yu=Object.prototype.hasOwnProperty,Zm=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Yc={},Zc={};function bm(e){return yu.call(Zc,e)?!0:yu.call(Yc,e)?!1:Zm.test(e)?Zc[e]=!0:(Yc[e]=!0,!1)}function ev(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function tv(e,t,n,r){if(t===null||typeof t>"u"||ev(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function ht(e,t,n,r,o,i,l){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=l}var tt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){tt[e]=new ht(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];tt[t]=new ht(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){tt[e]=new ht(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){tt[e]=new ht(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){tt[e]=new ht(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){tt[e]=new ht(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){tt[e]=new ht(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){tt[e]=new ht(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){tt[e]=new ht(e,5,!1,e.toLowerCase(),null,!1,!1)});var Da=/[\-:]([a-z])/g;function La(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Da,La);tt[t]=new ht(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Da,La);tt[t]=new ht(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Da,La);tt[t]=new ht(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){tt[e]=new ht(e,1,!1,e.toLowerCase(),null,!1,!1)});tt.xlinkHref=new ht("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){tt[e]=new ht(e,1,!1,e.toLowerCase(),null,!0,!0)});function Ta(e,t,n,r){var o=tt.hasOwnProperty(t)?tt[t]:null;(o!==null?o.type!==0:r||!(2s||o[l]!==i[s]){var u=` -`+o[l].replace(" at new "," at ");return e.displayName&&u.includes("")&&(u=u.replace("",e.displayName)),u}while(1<=l&&0<=s);break}}}finally{Ts=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Lo(e):""}function nv(e){switch(e.tag){case 5:return Lo(e.type);case 16:return Lo("Lazy");case 13:return Lo("Suspense");case 19:return Lo("SuspenseList");case 0:case 2:case 15:return e=Ms(e.type,!1),e;case 11:return e=Ms(e.type.render,!1),e;case 1:return e=Ms(e.type,!0),e;default:return""}}function Ru(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Nr:return"Fragment";case Or:return"Portal";case wu:return"Profiler";case Ma:return"StrictMode";case Su:return"Suspense";case Cu:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case vp:return(e.displayName||"Context")+".Consumer";case mp:return(e._context.displayName||"Context")+".Provider";case Oa:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Na:return t=e.displayName||null,t!==null?t:Ru(e.type)||"Memo";case Nn:t=e._payload,e=e._init;try{return Ru(e(t))}catch{}}return null}function rv(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Ru(t);case 8:return t===Ma?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Yn(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function wp(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function ov(e){var t=wp(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(l){r=""+l,i.call(this,l)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(l){r=""+l},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function zi(e){e._valueTracker||(e._valueTracker=ov(e))}function Sp(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=wp(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Sl(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Eu(e,t){var n=t.checked;return Me({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function ef(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Yn(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Cp(e,t){t=t.checked,t!=null&&Ta(e,"checked",t,!1)}function xu(e,t){Cp(e,t);var n=Yn(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?_u(e,t.type,n):t.hasOwnProperty("defaultValue")&&_u(e,t.type,Yn(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function tf(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function _u(e,t,n){(t!=="number"||Sl(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var To=Array.isArray;function Qr(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o"+t.valueOf().toString()+"",t=Vi.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Qo(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Ao={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},iv=["Webkit","ms","Moz","O"];Object.keys(Ao).forEach(function(e){iv.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Ao[t]=Ao[e]})});function _p(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Ao.hasOwnProperty(e)&&Ao[e]?(""+t).trim():t+"px"}function Pp(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,o=_p(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}var lv=Me({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Fu(e,t){if(t){if(lv[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(O(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(O(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(O(61))}if(t.style!=null&&typeof t.style!="object")throw Error(O(62))}}function Du(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Lu=null;function Aa(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Tu=null,qr=null,Xr=null;function of(e){if(e=gi(e)){if(typeof Tu!="function")throw Error(O(280));var t=e.stateNode;t&&(t=os(t),Tu(e.stateNode,e.type,t))}}function kp(e){qr?Xr?Xr.push(e):Xr=[e]:qr=e}function Fp(){if(qr){var e=qr,t=Xr;if(Xr=qr=null,of(e),t)for(e=0;e>>=0,e===0?32:31-(vv(e)/yv|0)|0}var $i=64,ji=4194304;function Mo(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function xl(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,o=e.suspendedLanes,i=e.pingedLanes,l=n&268435455;if(l!==0){var s=l&~o;s!==0?r=Mo(s):(i&=l,i!==0&&(r=Mo(i)))}else l=n&~o,l!==0?r=Mo(l):i!==0&&(r=Mo(i));if(r===0)return 0;if(t!==0&&t!==r&&!(t&o)&&(o=r&-r,i=t&-t,o>=i||o===16&&(i&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function pi(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Zt(t),e[t]=n}function Rv(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=zo),hf=" ",gf=!1;function qp(e,t){switch(e){case"keyup":return Jv.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Xp(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ar=!1;function Zv(e,t){switch(e){case"compositionend":return Xp(t);case"keypress":return t.which!==32?null:(gf=!0,hf);case"textInput":return e=t.data,e===hf&&gf?null:e;default:return null}}function bv(e,t){if(Ar)return e==="compositionend"||!Ha&&qp(e,t)?(e=Kp(),ll=ja=$n=null,Ar=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=wf(n)}}function bp(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?bp(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function eh(){for(var e=window,t=Sl();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Sl(e.document)}return t}function Ga(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function uy(e){var t=eh(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&bp(n.ownerDocument.documentElement,n)){if(r!==null&&Ga(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var o=n.textContent.length,i=Math.min(r.start,o);r=r.end===void 0?i:Math.min(r.end,o),!e.extend&&i>r&&(o=r,r=i,i=o),o=Sf(n,i);var l=Sf(n,r);o&&l&&(e.rangeCount!==1||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==l.node||e.focusOffset!==l.offset)&&(t=t.createRange(),t.setStart(o.node,o.offset),e.removeAllRanges(),i>r?(e.addRange(t),e.extend(l.node,l.offset)):(t.setEnd(l.node,l.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Ir=null,zu=null,$o=null,Vu=!1;function Cf(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Vu||Ir==null||Ir!==Sl(r)||(r=Ir,"selectionStart"in r&&Ga(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),$o&&bo($o,r)||($o=r,r=kl(zu,"onSelect"),0$r||(e.current=Gu[$r],Gu[$r]=null,$r--)}function Ce(e,t){$r++,Gu[$r]=e.current,e.current=t}var Zn={},st=tr(Zn),wt=tr(!1),wr=Zn;function eo(e,t){var n=e.type.contextTypes;if(!n)return Zn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in n)o[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function St(e){return e=e.childContextTypes,e!=null}function Dl(){_e(wt),_e(st)}function Ff(e,t,n){if(st.current!==Zn)throw Error(O(168));Ce(st,t),Ce(wt,n)}function ah(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var o in r)if(!(o in t))throw Error(O(108,rv(e)||"Unknown",o));return Me({},n,r)}function Ll(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Zn,wr=st.current,Ce(st,e),Ce(wt,wt.current),!0}function Df(e,t,n){var r=e.stateNode;if(!r)throw Error(O(169));n?(e=ah(e,t,wr),r.__reactInternalMemoizedMergedChildContext=e,_e(wt),_e(st),Ce(st,e)):_e(wt),Ce(wt,n)}var yn=null,is=!1,Ks=!1;function ch(e){yn===null?yn=[e]:yn.push(e)}function Sy(e){is=!0,ch(e)}function nr(){if(!Ks&&yn!==null){Ks=!0;var e=0,t=me;try{var n=yn;for(me=1;e>=l,o-=l,wn=1<<32-Zt(t)+o|n<C?(U=A,A=null):U=A.sibling;var I=p(h,A,v[C],x);if(I===null){A===null&&(A=U);break}e&&A&&I.alternate===null&&t(h,A),d=i(I,d,C),M===null?F=I:M.sibling=I,M=I,A=U}if(C===v.length)return n(h,A),ke&&ur(h,C),F;if(A===null){for(;CC?(U=A,A=null):U=A.sibling;var Y=p(h,A,I.value,x);if(Y===null){A===null&&(A=U);break}e&&A&&Y.alternate===null&&t(h,A),d=i(Y,d,C),M===null?F=Y:M.sibling=Y,M=Y,A=U}if(I.done)return n(h,A),ke&&ur(h,C),F;if(A===null){for(;!I.done;C++,I=v.next())I=f(h,I.value,x),I!==null&&(d=i(I,d,C),M===null?F=I:M.sibling=I,M=I);return ke&&ur(h,C),F}for(A=r(h,A);!I.done;C++,I=v.next())I=g(A,h,C,I.value,x),I!==null&&(e&&I.alternate!==null&&A.delete(I.key===null?C:I.key),d=i(I,d,C),M===null?F=I:M.sibling=I,M=I);return e&&A.forEach(function(W){return t(h,W)}),ke&&ur(h,C),F}function E(h,d,v,x){if(typeof v=="object"&&v!==null&&v.type===Nr&&v.key===null&&(v=v.props.children),typeof v=="object"&&v!==null){switch(v.$$typeof){case Ii:e:{for(var F=v.key,M=d;M!==null;){if(M.key===F){if(F=v.type,F===Nr){if(M.tag===7){n(h,M.sibling),d=o(M,v.props.children),d.return=h,h=d;break e}}else if(M.elementType===F||typeof F=="object"&&F!==null&&F.$$typeof===Nn&&Mf(F)===M.type){n(h,M.sibling),d=o(M,v.props),d.ref=Co(h,M,v),d.return=h,h=d;break e}n(h,M);break}else t(h,M);M=M.sibling}v.type===Nr?(d=vr(v.props.children,h.mode,x,v.key),d.return=h,h=d):(x=hl(v.type,v.key,v.props,null,h.mode,x),x.ref=Co(h,d,v),x.return=h,h=x)}return l(h);case Or:e:{for(M=v.key;d!==null;){if(d.key===M)if(d.tag===4&&d.stateNode.containerInfo===v.containerInfo&&d.stateNode.implementation===v.implementation){n(h,d.sibling),d=o(d,v.children||[]),d.return=h,h=d;break e}else{n(h,d);break}else t(h,d);d=d.sibling}d=eu(v,h.mode,x),d.return=h,h=d}return l(h);case Nn:return M=v._init,E(h,d,M(v._payload),x)}if(To(v))return m(h,d,v,x);if(mo(v))return y(h,d,v,x);Qi(h,v)}return typeof v=="string"&&v!==""||typeof v=="number"?(v=""+v,d!==null&&d.tag===6?(n(h,d.sibling),d=o(d,v),d.return=h,h=d):(n(h,d),d=bs(v,h.mode,x),d.return=h,h=d),l(h)):n(h,d)}return E}var no=hh(!0),gh=hh(!1),Ol=tr(null),Nl=null,Br=null,qa=null;function Xa(){qa=Br=Nl=null}function Ja(e){var t=Ol.current;_e(Ol),e._currentValue=t}function Qu(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Yr(e,t){Nl=e,qa=Br=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(yt=!0),e.firstContext=null)}function Ut(e){var t=e._currentValue;if(qa!==e)if(e={context:e,memoizedValue:t,next:null},Br===null){if(Nl===null)throw Error(O(308));Br=e,Nl.dependencies={lanes:0,firstContext:e}}else Br=Br.next=e;return t}var dr=null;function Ya(e){dr===null?dr=[e]:dr.push(e)}function mh(e,t,n,r){var o=t.interleaved;return o===null?(n.next=n,Ya(t)):(n.next=o.next,o.next=n),t.interleaved=n,Pn(e,r)}function Pn(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var An=!1;function Za(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function vh(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Rn(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Qn(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,fe&2){var o=r.pending;return o===null?t.next=t:(t.next=o.next,o.next=t),r.pending=t,Pn(e,n)}return o=r.interleaved,o===null?(t.next=t,Ya(r)):(t.next=o.next,o.next=t),r.interleaved=t,Pn(e,n)}function ul(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,za(e,n)}}function Of(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var o=null,i=null;if(n=n.firstBaseUpdate,n!==null){do{var l={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};i===null?o=i=l:i=i.next=l,n=n.next}while(n!==null);i===null?o=i=t:i=i.next=t}else o=i=t;n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:i,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Al(e,t,n,r){var o=e.updateQueue;An=!1;var i=o.firstBaseUpdate,l=o.lastBaseUpdate,s=o.shared.pending;if(s!==null){o.shared.pending=null;var u=s,a=u.next;u.next=null,l===null?i=a:l.next=a,l=u;var c=e.alternate;c!==null&&(c=c.updateQueue,s=c.lastBaseUpdate,s!==l&&(s===null?c.firstBaseUpdate=a:s.next=a,c.lastBaseUpdate=u))}if(i!==null){var f=o.baseState;l=0,c=a=u=null,s=i;do{var p=s.lane,g=s.eventTime;if((r&p)===p){c!==null&&(c=c.next={eventTime:g,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var m=e,y=s;switch(p=t,g=n,y.tag){case 1:if(m=y.payload,typeof m=="function"){f=m.call(g,f,p);break e}f=m;break e;case 3:m.flags=m.flags&-65537|128;case 0:if(m=y.payload,p=typeof m=="function"?m.call(g,f,p):m,p==null)break e;f=Me({},f,p);break e;case 2:An=!0}}s.callback!==null&&s.lane!==0&&(e.flags|=64,p=o.effects,p===null?o.effects=[s]:p.push(s))}else g={eventTime:g,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},c===null?(a=c=g,u=f):c=c.next=g,l|=p;if(s=s.next,s===null){if(s=o.shared.pending,s===null)break;p=s,s=p.next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}while(!0);if(c===null&&(u=f),o.baseState=u,o.firstBaseUpdate=a,o.lastBaseUpdate=c,t=o.shared.interleaved,t!==null){o=t;do l|=o.lane,o=o.next;while(o!==t)}else i===null&&(o.shared.lanes=0);Rr|=l,e.lanes=l,e.memoizedState=f}}function Nf(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=qs.transition;qs.transition={};try{e(!1),t()}finally{me=n,qs.transition=r}}function Nh(){return Bt().memoizedState}function xy(e,t,n){var r=Xn(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Ah(e))Ih(t,n);else if(n=mh(e,t,n,r),n!==null){var o=dt();bt(n,e,r,o),zh(n,t,r)}}function _y(e,t,n){var r=Xn(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Ah(e))Ih(t,o);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var l=t.lastRenderedState,s=i(l,n);if(o.hasEagerState=!0,o.eagerState=s,tn(s,l)){var u=t.interleaved;u===null?(o.next=o,Ya(t)):(o.next=u.next,u.next=o),t.interleaved=o;return}}catch{}finally{}n=mh(e,t,o,r),n!==null&&(o=dt(),bt(n,e,r,o),zh(n,t,r))}}function Ah(e){var t=e.alternate;return e===Te||t!==null&&t===Te}function Ih(e,t){jo=zl=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function zh(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,za(e,n)}}var Vl={readContext:Ut,useCallback:rt,useContext:rt,useEffect:rt,useImperativeHandle:rt,useInsertionEffect:rt,useLayoutEffect:rt,useMemo:rt,useReducer:rt,useRef:rt,useState:rt,useDebugValue:rt,useDeferredValue:rt,useTransition:rt,useMutableSource:rt,useSyncExternalStore:rt,useId:rt,unstable_isNewReconciler:!1},Py={readContext:Ut,useCallback:function(e,t){return ln().memoizedState=[e,t===void 0?null:t],e},useContext:Ut,useEffect:If,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,cl(4194308,4,Dh.bind(null,t,e),n)},useLayoutEffect:function(e,t){return cl(4194308,4,e,t)},useInsertionEffect:function(e,t){return cl(4,2,e,t)},useMemo:function(e,t){var n=ln();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=ln();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=xy.bind(null,Te,e),[r.memoizedState,e]},useRef:function(e){var t=ln();return e={current:e},t.memoizedState=e},useState:Af,useDebugValue:lc,useDeferredValue:function(e){return ln().memoizedState=e},useTransition:function(){var e=Af(!1),t=e[0];return e=Ey.bind(null,e[1]),ln().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Te,o=ln();if(ke){if(n===void 0)throw Error(O(407));n=n()}else{if(n=t(),Ye===null)throw Error(O(349));Cr&30||Ch(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,If(Eh.bind(null,r,i,e),[e]),r.flags|=2048,si(9,Rh.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=ln(),t=Ye.identifierPrefix;if(ke){var n=Sn,r=wn;n=(r&~(1<<32-Zt(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=ii++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),n==="select"&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[un]=t,e[ni]=r,Qh(e,t,!1,!1),t.stateNode=e;e:{switch(l=Du(n,r),n){case"dialog":Ee("cancel",e),Ee("close",e),o=r;break;case"iframe":case"object":case"embed":Ee("load",e),o=r;break;case"video":case"audio":for(o=0;oio&&(t.flags|=128,r=!0,Ro(i,!1),t.lanes=4194304)}else{if(!r)if(e=Il(l),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Ro(i,!0),i.tail===null&&i.tailMode==="hidden"&&!l.alternate&&!ke)return ot(t),null}else 2*$e()-i.renderingStartTime>io&&n!==1073741824&&(t.flags|=128,r=!0,Ro(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(n=i.last,n!==null?n.sibling=l:t.child=l,i.last=l)}return i.tail!==null?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=$e(),t.sibling=null,n=Le.current,Ce(Le,r?n&1|2:n&1),t):(ot(t),null);case 22:case 23:return dc(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Pt&1073741824&&(ot(t),t.subtreeFlags&6&&(t.flags|=8192)):ot(t),null;case 24:return null;case 25:return null}throw Error(O(156,t.tag))}function Ny(e,t){switch(Ka(t),t.tag){case 1:return St(t.type)&&Dl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ro(),_e(wt),_e(st),tc(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return ec(t),null;case 13:if(_e(Le),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(O(340));to()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return _e(Le),null;case 4:return ro(),null;case 10:return Ja(t.type._context),null;case 22:case 23:return dc(),null;case 24:return null;default:return null}}var Xi=!1,lt=!1,Ay=typeof WeakSet=="function"?WeakSet:Set,G=null;function Hr(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Ae(e,t,r)}else n.current=null}function na(e,t,n){try{n()}catch(r){Ae(e,t,r)}}var Qf=!1;function Iy(e,t){if($u=_l,e=eh(),Ga(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch{n=null;break e}var l=0,s=-1,u=-1,a=0,c=0,f=e,p=null;t:for(;;){for(var g;f!==n||o!==0&&f.nodeType!==3||(s=l+o),f!==i||r!==0&&f.nodeType!==3||(u=l+r),f.nodeType===3&&(l+=f.nodeValue.length),(g=f.firstChild)!==null;)p=f,f=g;for(;;){if(f===e)break t;if(p===n&&++a===o&&(s=l),p===i&&++c===r&&(u=l),(g=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=g}n=s===-1||u===-1?null:{start:s,end:u}}else n=null}n=n||{start:0,end:0}}else n=null;for(ju={focusedElem:e,selectionRange:n},_l=!1,G=t;G!==null;)if(t=G,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,G=e;else for(;G!==null;){t=G;try{var m=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(m!==null){var y=m.memoizedProps,E=m.memoizedState,h=t.stateNode,d=h.getSnapshotBeforeUpdate(t.elementType===t.type?y:Qt(t.type,y),E);h.__reactInternalSnapshotBeforeUpdate=d}break;case 3:var v=t.stateNode.containerInfo;v.nodeType===1?v.textContent="":v.nodeType===9&&v.documentElement&&v.removeChild(v.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(O(163))}}catch(x){Ae(t,t.return,x)}if(e=t.sibling,e!==null){e.return=t.return,G=e;break}G=t.return}return m=Qf,Qf=!1,m}function Uo(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var o=r=r.next;do{if((o.tag&e)===e){var i=o.destroy;o.destroy=void 0,i!==void 0&&na(t,n,i)}o=o.next}while(o!==r)}}function us(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function ra(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Jh(e){var t=e.alternate;t!==null&&(e.alternate=null,Jh(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[un],delete t[ni],delete t[Hu],delete t[yy],delete t[wy])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Yh(e){return e.tag===5||e.tag===3||e.tag===4}function qf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Yh(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function oa(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Fl));else if(r!==4&&(e=e.child,e!==null))for(oa(e,t,n),e=e.sibling;e!==null;)oa(e,t,n),e=e.sibling}function ia(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(ia(e,t,n),e=e.sibling;e!==null;)ia(e,t,n),e=e.sibling}var be=null,qt=!1;function Tn(e,t,n){for(n=n.child;n!==null;)Zh(e,t,n),n=n.sibling}function Zh(e,t,n){if(cn&&typeof cn.onCommitFiberUnmount=="function")try{cn.onCommitFiberUnmount(es,n)}catch{}switch(n.tag){case 5:lt||Hr(n,t);case 6:var r=be,o=qt;be=null,Tn(e,t,n),be=r,qt=o,be!==null&&(qt?(e=be,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):be.removeChild(n.stateNode));break;case 18:be!==null&&(qt?(e=be,n=n.stateNode,e.nodeType===8?Ws(e.parentNode,n):e.nodeType===1&&Ws(e,n),Yo(e)):Ws(be,n.stateNode));break;case 4:r=be,o=qt,be=n.stateNode.containerInfo,qt=!0,Tn(e,t,n),be=r,qt=o;break;case 0:case 11:case 14:case 15:if(!lt&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){o=r=r.next;do{var i=o,l=i.destroy;i=i.tag,l!==void 0&&(i&2||i&4)&&na(n,t,l),o=o.next}while(o!==r)}Tn(e,t,n);break;case 1:if(!lt&&(Hr(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){Ae(n,t,s)}Tn(e,t,n);break;case 21:Tn(e,t,n);break;case 22:n.mode&1?(lt=(r=lt)||n.memoizedState!==null,Tn(e,t,n),lt=r):Tn(e,t,n);break;default:Tn(e,t,n)}}function Xf(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Ay),t.forEach(function(r){var o=Wy.bind(null,e,r);n.has(r)||(n.add(r),r.then(o,o))})}}function Kt(e,t){var n=t.deletions;if(n!==null)for(var r=0;ro&&(o=l),r&=~i}if(r=o,r=$e()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Vy(r/1960))-r,10e?16:e,jn===null)var r=!1;else{if(e=jn,jn=null,Ul=0,fe&6)throw Error(O(331));var o=fe;for(fe|=4,G=e.current;G!==null;){var i=G,l=i.child;if(G.flags&16){var s=i.deletions;if(s!==null){for(var u=0;u$e()-cc?mr(e,0):ac|=n),Ct(e,t)}function lg(e,t){t===0&&(e.mode&1?(t=ji,ji<<=1,!(ji&130023424)&&(ji=4194304)):t=1);var n=dt();e=Pn(e,t),e!==null&&(pi(e,t,n),Ct(e,n))}function Gy(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),lg(e,n)}function Wy(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;o!==null&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(O(314))}r!==null&&r.delete(t),lg(e,n)}var sg;sg=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||wt.current)yt=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return yt=!1,My(e,t,n);yt=!!(e.flags&131072)}else yt=!1,ke&&t.flags&1048576&&fh(t,Ml,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;fl(e,t),e=t.pendingProps;var o=eo(t,st.current);Yr(t,n),o=rc(null,t,r,e,o,n);var i=oc();return t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,St(r)?(i=!0,Ll(t)):i=!1,t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,Za(t),o.updater=ss,t.stateNode=o,o._reactInternals=t,Xu(t,r,e,n),t=Zu(null,t,r,!0,i,n)):(t.tag=0,ke&&i&&Wa(t),ct(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(fl(e,t),e=t.pendingProps,o=r._init,r=o(r._payload),t.type=r,o=t.tag=Qy(r),e=Qt(r,e),o){case 0:t=Yu(null,t,r,e,n);break e;case 1:t=Gf(null,t,r,e,n);break e;case 11:t=Bf(null,t,r,e,n);break e;case 14:t=Hf(null,t,r,Qt(r.type,e),n);break e}throw Error(O(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Qt(r,o),Yu(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Qt(r,o),Gf(e,t,r,o,n);case 3:e:{if(Gh(t),e===null)throw Error(O(387));r=t.pendingProps,i=t.memoizedState,o=i.element,vh(e,t),Al(t,r,null,n);var l=t.memoizedState;if(r=l.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:l.cache,pendingSuspenseBoundaries:l.pendingSuspenseBoundaries,transitions:l.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){o=oo(Error(O(423)),t),t=Wf(e,t,r,n,o);break e}else if(r!==o){o=oo(Error(O(424)),t),t=Wf(e,t,r,n,o);break e}else for(Ft=Kn(t.stateNode.containerInfo.firstChild),Dt=t,ke=!0,Jt=null,n=gh(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(to(),r===o){t=kn(e,t,n);break e}ct(e,t,r,n)}t=t.child}return t;case 5:return yh(t),e===null&&Ku(t),r=t.type,o=t.pendingProps,i=e!==null?e.memoizedProps:null,l=o.children,Uu(r,o)?l=null:i!==null&&Uu(r,i)&&(t.flags|=32),Hh(e,t),ct(e,t,l,n),t.child;case 6:return e===null&&Ku(t),null;case 13:return Wh(e,t,n);case 4:return ba(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=no(t,null,r,n):ct(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Qt(r,o),Bf(e,t,r,o,n);case 7:return ct(e,t,t.pendingProps,n),t.child;case 8:return ct(e,t,t.pendingProps.children,n),t.child;case 12:return ct(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,l=o.value,Ce(Ol,r._currentValue),r._currentValue=l,i!==null)if(tn(i.value,l)){if(i.children===o.children&&!wt.current){t=kn(e,t,n);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var s=i.dependencies;if(s!==null){l=i.child;for(var u=s.firstContext;u!==null;){if(u.context===r){if(i.tag===1){u=Rn(-1,n&-n),u.tag=2;var a=i.updateQueue;if(a!==null){a=a.shared;var c=a.pending;c===null?u.next=u:(u.next=c.next,c.next=u),a.pending=u}}i.lanes|=n,u=i.alternate,u!==null&&(u.lanes|=n),Qu(i.return,n,t),s.lanes|=n;break}u=u.next}}else if(i.tag===10)l=i.type===t.type?null:i.child;else if(i.tag===18){if(l=i.return,l===null)throw Error(O(341));l.lanes|=n,s=l.alternate,s!==null&&(s.lanes|=n),Qu(l,n,t),l=i.sibling}else l=i.child;if(l!==null)l.return=i;else for(l=i;l!==null;){if(l===t){l=null;break}if(i=l.sibling,i!==null){i.return=l.return,l=i;break}l=l.return}i=l}ct(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,Yr(t,n),o=Ut(o),r=r(o),t.flags|=1,ct(e,t,r,n),t.child;case 14:return r=t.type,o=Qt(r,t.pendingProps),o=Qt(r.type,o),Hf(e,t,r,o,n);case 15:return Uh(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Qt(r,o),fl(e,t),t.tag=1,St(r)?(e=!0,Ll(t)):e=!1,Yr(t,n),Vh(t,r,o),Xu(t,r,o,n),Zu(null,t,r,!0,e,n);case 19:return Kh(e,t,n);case 22:return Bh(e,t,n)}throw Error(O(156,t.tag))};function ug(e,t){return Ap(e,t)}function Ky(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function $t(e,t,n,r){return new Ky(e,t,n,r)}function hc(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Qy(e){if(typeof e=="function")return hc(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Oa)return 11;if(e===Na)return 14}return 2}function Jn(e,t){var n=e.alternate;return n===null?(n=$t(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function hl(e,t,n,r,o,i){var l=2;if(r=e,typeof e=="function")hc(e)&&(l=1);else if(typeof e=="string")l=5;else e:switch(e){case Nr:return vr(n.children,o,i,t);case Ma:l=8,o|=8;break;case wu:return e=$t(12,n,t,o|2),e.elementType=wu,e.lanes=i,e;case Su:return e=$t(13,n,t,o),e.elementType=Su,e.lanes=i,e;case Cu:return e=$t(19,n,t,o),e.elementType=Cu,e.lanes=i,e;case yp:return cs(n,o,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case mp:l=10;break e;case vp:l=9;break e;case Oa:l=11;break e;case Na:l=14;break e;case Nn:l=16,r=null;break e}throw Error(O(130,e==null?e:typeof e,""))}return t=$t(l,n,t,o),t.elementType=e,t.type=r,t.lanes=i,t}function vr(e,t,n,r){return e=$t(7,e,r,t),e.lanes=n,e}function cs(e,t,n,r){return e=$t(22,e,r,t),e.elementType=yp,e.lanes=n,e.stateNode={isHidden:!1},e}function bs(e,t,n){return e=$t(6,e,null,t),e.lanes=n,e}function eu(e,t,n){return t=$t(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function qy(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Ns(0),this.expirationTimes=Ns(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ns(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function gc(e,t,n,r,o,i,l,s,u){return e=new qy(e,t,n,s,u),t===1?(t=1,i===!0&&(t|=8)):t=0,i=$t(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Za(i),e}function Xy(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(dg)}catch(e){console.error(e)}}dg(),dp.exports=Ot;var wc=dp.exports;const e0=ep(wc),t0=bd({__proto__:null,default:e0},[wc]);var pg,rd=wc;pg=rd.createRoot,rd.hydrateRoot;/** - * @remix-run/router v1.19.2 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function De(){return De=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function lo(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function r0(){return Math.random().toString(36).substr(2,8)}function ld(e,t){return{usr:e.state,key:e.key,idx:t}}function ai(e,t,n,r){return n===void 0&&(n=null),De({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?rr(t):t,{state:n,key:t&&t.key||r||r0()})}function xr(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&n!=="?"&&(t+=n.charAt(0)==="?"?n:"?"+n),r&&r!=="#"&&(t+=r.charAt(0)==="#"?r:"#"+r),t}function rr(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function o0(e,t,n,r){r===void 0&&(r={});let{window:o=document.defaultView,v5Compat:i=!1}=r,l=o.history,s=Be.Pop,u=null,a=c();a==null&&(a=0,l.replaceState(De({},l.state,{idx:a}),""));function c(){return(l.state||{idx:null}).idx}function f(){s=Be.Pop;let E=c(),h=E==null?null:E-a;a=E,u&&u({action:s,location:y.location,delta:h})}function p(E,h){s=Be.Push;let d=ai(y.location,E,h);a=c()+1;let v=ld(d,a),x=y.createHref(d);try{l.pushState(v,"",x)}catch(F){if(F instanceof DOMException&&F.name==="DataCloneError")throw F;o.location.assign(x)}i&&u&&u({action:s,location:y.location,delta:1})}function g(E,h){s=Be.Replace;let d=ai(y.location,E,h);a=c();let v=ld(d,a),x=y.createHref(d);l.replaceState(v,"",x),i&&u&&u({action:s,location:y.location,delta:0})}function m(E){let h=o.location.origin!=="null"?o.location.origin:o.location.href,d=typeof E=="string"?E:xr(E);return d=d.replace(/ $/,"%20"),ue(h,"No window.location.(origin|href) available to create URL for href: "+d),new URL(d,h)}let y={get action(){return s},get location(){return e(o,l)},listen(E){if(u)throw new Error("A history only accepts one active listener");return o.addEventListener(od,f),u=E,()=>{o.removeEventListener(od,f),u=null}},createHref(E){return t(o,E)},createURL:m,encodeLocation(E){let h=m(E);return{pathname:h.pathname,search:h.search,hash:h.hash}},push:p,replace:g,go(E){return l.go(E)}};return y}var ye;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(ye||(ye={}));const i0=new Set(["lazy","caseSensitive","path","id","index","children"]);function l0(e){return e.index===!0}function ci(e,t,n,r){return n===void 0&&(n=[]),r===void 0&&(r={}),e.map((o,i)=>{let l=[...n,String(i)],s=typeof o.id=="string"?o.id:l.join("-");if(ue(o.index!==!0||!o.children,"Cannot specify children on an index route"),ue(!r[s],'Found a route id collision on id "'+s+`". Route id's must be globally unique within Data Router usages`),l0(o)){let u=De({},o,t(o),{id:s});return r[s]=u,u}else{let u=De({},o,t(o),{id:s,children:void 0});return r[s]=u,o.children&&(u.children=ci(o.children,t,l,r)),u}})}function cr(e,t,n){return n===void 0&&(n="/"),gl(e,t,n,!1)}function gl(e,t,n,r){let o=typeof t=="string"?rr(t):t,i=Fn(o.pathname||"/",n);if(i==null)return null;let l=hg(e);u0(l);let s=null;for(let u=0;s==null&&u{let u={relativePath:s===void 0?i.path||"":s,caseSensitive:i.caseSensitive===!0,childrenIndex:l,route:i};u.relativePath.startsWith("/")&&(ue(u.relativePath.startsWith(r),'Absolute route path "'+u.relativePath+'" nested under path '+('"'+r+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),u.relativePath=u.relativePath.slice(r.length));let a=En([r,u.relativePath]),c=n.concat(u);i.children&&i.children.length>0&&(ue(i.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+a+'".')),hg(i.children,t,c,a)),!(i.path==null&&!i.index)&&t.push({path:a,score:g0(a,i.index),routesMeta:c})};return e.forEach((i,l)=>{var s;if(i.path===""||!((s=i.path)!=null&&s.includes("?")))o(i,l);else for(let u of gg(i.path))o(i,l,u)}),t}function gg(e){let t=e.split("/");if(t.length===0)return[];let[n,...r]=t,o=n.endsWith("?"),i=n.replace(/\?$/,"");if(r.length===0)return o?[i,""]:[i];let l=gg(r.join("/")),s=[];return s.push(...l.map(u=>u===""?i:[i,u].join("/"))),o&&s.push(...l),s.map(u=>e.startsWith("/")&&u===""?"/":u)}function u0(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:m0(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}const a0=/^:[\w-]+$/,c0=3,f0=2,d0=1,p0=10,h0=-2,sd=e=>e==="*";function g0(e,t){let n=e.split("/"),r=n.length;return n.some(sd)&&(r+=h0),t&&(r+=f0),n.filter(o=>!sd(o)).reduce((o,i)=>o+(a0.test(i)?c0:i===""?d0:p0),r)}function m0(e,t){return e.length===t.length&&e.slice(0,-1).every((r,o)=>r===t[o])?e[e.length-1]-t[t.length-1]:0}function v0(e,t,n){n===void 0&&(n=!1);let{routesMeta:r}=e,o={},i="/",l=[];for(let s=0;s{let{paramName:p,isOptional:g}=c;if(p==="*"){let y=s[f]||"";l=i.slice(0,i.length-y.length).replace(/(.)\/+$/,"$1")}const m=s[f];return g&&!m?a[p]=void 0:a[p]=(m||"").replace(/%2F/g,"/"),a},{}),pathname:i,pathnameBase:l,pattern:e}}function y0(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!0),lo(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let r=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(l,s,u)=>(r.push({paramName:s,isOptional:u!=null}),u?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(r.push({paramName:"*"}),o+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":e!==""&&e!=="/"&&(o+="(?:(?=\\/|$))"),[new RegExp(o,t?void 0:"i"),r]}function w0(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return lo(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function Fn(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&r!=="/"?null:e.slice(n)||"/"}function S0(e,t){t===void 0&&(t="/");let{pathname:n,search:r="",hash:o=""}=typeof e=="string"?rr(e):e;return{pathname:n?n.startsWith("/")?n:C0(n,t):t,search:E0(r),hash:x0(o)}}function C0(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(o=>{o===".."?n.length>1&&n.pop():o!=="."&&n.push(o)}),n.length>1?n.join("/"):"/"}function tu(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the ")+("`to."+n+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function mg(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function Sc(e,t){let n=mg(e);return t?n.map((r,o)=>o===n.length-1?r.pathname:r.pathnameBase):n.map(r=>r.pathnameBase)}function Cc(e,t,n,r){r===void 0&&(r=!1);let o;typeof e=="string"?o=rr(e):(o=De({},e),ue(!o.pathname||!o.pathname.includes("?"),tu("?","pathname","search",o)),ue(!o.pathname||!o.pathname.includes("#"),tu("#","pathname","hash",o)),ue(!o.search||!o.search.includes("#"),tu("#","search","hash",o)));let i=e===""||o.pathname==="",l=i?"/":o.pathname,s;if(l==null)s=n;else{let f=t.length-1;if(!r&&l.startsWith("..")){let p=l.split("/");for(;p[0]==="..";)p.shift(),f-=1;o.pathname=p.join("/")}s=f>=0?t[f]:"/"}let u=S0(o,s),a=l&&l!=="/"&&l.endsWith("/"),c=(i||l===".")&&n.endsWith("/");return!u.pathname.endsWith("/")&&(a||c)&&(u.pathname+="/"),u}const En=e=>e.join("/").replace(/\/\/+/g,"/"),R0=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),E0=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,x0=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;class Wl{constructor(t,n,r,o){o===void 0&&(o=!1),this.status=t,this.statusText=n||"",this.internal=o,r instanceof Error?(this.data=r.toString(),this.error=r):this.data=r}}function gs(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const vg=["post","put","patch","delete"],_0=new Set(vg),P0=["get",...vg],k0=new Set(P0),F0=new Set([301,302,303,307,308]),D0=new Set([307,308]),nu={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},L0={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},xo={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},Rc=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,T0=e=>({hasErrorBoundary:!!e.hasErrorBoundary}),yg="remix-router-transitions";function M0(e){const t=e.window?e.window:typeof window<"u"?window:void 0,n=typeof t<"u"&&typeof t.document<"u"&&typeof t.document.createElement<"u",r=!n;ue(e.routes.length>0,"You must provide a non-empty routes array to createRouter");let o;if(e.mapRouteProperties)o=e.mapRouteProperties;else if(e.detectErrorBoundary){let S=e.detectErrorBoundary;o=R=>({hasErrorBoundary:S(R)})}else o=T0;let i={},l=ci(e.routes,o,void 0,i),s,u=e.basename||"/",a=e.unstable_dataStrategy||V0,c=e.unstable_patchRoutesOnNavigation,f=De({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_partialHydration:!1,v7_prependBasename:!1,v7_relativeSplatPath:!1,v7_skipActionErrorRevalidation:!1},e.future),p=null,g=new Set,m=1e3,y=new Set,E=null,h=null,d=null,v=e.hydrationData!=null,x=cr(l,e.history.location,u),F=null;if(x==null&&!c){let S=at(404,{pathname:e.history.location.pathname}),{matches:R,route:P}=md(l);x=R,F={[P.id]:S}}x&&!e.hydrationData&&Di(x,l,e.history.location.pathname).active&&(x=null);let M;if(x)if(x.some(S=>S.route.lazy))M=!1;else if(!x.some(S=>S.route.loader))M=!0;else if(f.v7_partialHydration){let S=e.hydrationData?e.hydrationData.loaderData:null,R=e.hydrationData?e.hydrationData.errors:null,P=L=>L.route.loader?typeof L.route.loader=="function"&&L.route.loader.hydrate===!0?!1:S&&S[L.route.id]!==void 0||R&&R[L.route.id]!==void 0:!0;if(R){let L=x.findIndex(H=>R[H.route.id]!==void 0);M=x.slice(0,L+1).every(P)}else M=x.every(P)}else M=e.hydrationData!=null;else if(M=!1,x=[],f.v7_partialHydration){let S=Di(null,l,e.history.location.pathname);S.active&&S.matches&&(x=S.matches)}let A,C={historyAction:e.history.action,location:e.history.location,matches:x,initialized:M,navigation:nu,restoreScrollPosition:e.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:e.hydrationData&&e.hydrationData.loaderData||{},actionData:e.hydrationData&&e.hydrationData.actionData||null,errors:e.hydrationData&&e.hydrationData.errors||F,fetchers:new Map,blockers:new Map},U=Be.Pop,I=!1,Y,W=!1,Z=new Map,oe=null,we=!1,Fe=!1,Ie=[],$=new Set,B=new Map,ee=0,he=-1,ve=new Map,nt=new Set,Ze=new Map,Ht=new Map,ze=new Set,ut=new Map,Gt=new Map,Ei=new Map,Fr;function xi(){if(p=e.history.listen(S=>{let{action:R,location:P,delta:L}=S;if(Fr){Fr(),Fr=void 0;return}lo(Gt.size===0||L!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let H=Hc({currentLocation:C.location,nextLocation:P,historyAction:R});if(H&&L!=null){let J=new Promise(re=>{Fr=re});e.history.go(L*-1),ki(H,{state:"blocked",location:P,proceed(){ki(H,{state:"proceeding",proceed:void 0,reset:void 0,location:P}),J.then(()=>e.history.go(L))},reset(){let re=new Map(C.blockers);re.set(H,xo),qe({blockers:re})}});return}return w(R,P)}),n){b0(t,Z);let S=()=>ew(t,Z);t.addEventListener("pagehide",S),oe=()=>t.removeEventListener("pagehide",S)}return C.initialized||w(Be.Pop,C.location,{initialHydration:!0}),A}function xs(){p&&p(),oe&&oe(),g.clear(),Y&&Y.abort(),C.fetchers.forEach((S,R)=>sr(R)),C.blockers.forEach((S,R)=>Bc(R))}function _i(S){return g.add(S),()=>g.delete(S)}function qe(S,R){R===void 0&&(R={}),C=De({},C,S);let P=[],L=[];f.v7_fetcherPersist&&C.fetchers.forEach((H,J)=>{H.state==="idle"&&(ze.has(J)?L.push(J):P.push(J))}),[...g].forEach(H=>H(C,{deletedFetchers:L,unstable_viewTransitionOpts:R.viewTransitionOpts,unstable_flushSync:R.flushSync===!0})),f.v7_fetcherPersist&&(P.forEach(H=>C.fetchers.delete(H)),L.forEach(H=>sr(H)))}function lr(S,R,P){var L,H;let{flushSync:J}=P===void 0?{}:P,re=C.actionData!=null&&C.navigation.formMethod!=null&&Xt(C.navigation.formMethod)&&C.navigation.state==="loading"&&((L=S.state)==null?void 0:L._isRedirect)!==!0,V;R.actionData?Object.keys(R.actionData).length>0?V=R.actionData:V=null:re?V=C.actionData:V=null;let b=R.loaderData?hd(C.loaderData,R.loaderData,R.matches||[],R.errors):C.loaderData,Q=C.blockers;Q.size>0&&(Q=new Map(Q),Q.forEach((ge,Re)=>Q.set(Re,xo)));let q=I===!0||C.navigation.formMethod!=null&&Xt(C.navigation.formMethod)&&((H=S.state)==null?void 0:H._isRedirect)!==!0;s&&(l=s,s=void 0),we||U===Be.Pop||(U===Be.Push?e.history.push(S,S.state):U===Be.Replace&&e.history.replace(S,S.state));let pe;if(U===Be.Pop){let ge=Z.get(C.location.pathname);ge&&ge.has(S.pathname)?pe={currentLocation:C.location,nextLocation:S}:Z.has(S.pathname)&&(pe={currentLocation:S,nextLocation:C.location})}else if(W){let ge=Z.get(C.location.pathname);ge?ge.add(S.pathname):(ge=new Set([S.pathname]),Z.set(C.location.pathname,ge)),pe={currentLocation:C.location,nextLocation:S}}qe(De({},R,{actionData:V,loaderData:b,historyAction:U,location:S,initialized:!0,navigation:nu,revalidation:"idle",restoreScrollPosition:Wc(S,R.matches||C.matches),preventScrollReset:q,blockers:Q}),{viewTransitionOpts:pe,flushSync:J===!0}),U=Be.Pop,I=!1,W=!1,we=!1,Fe=!1,Ie=[]}async function _s(S,R){if(typeof S=="number"){e.history.go(S);return}let P=ca(C.location,C.matches,u,f.v7_prependBasename,S,f.v7_relativeSplatPath,R==null?void 0:R.fromRouteId,R==null?void 0:R.relative),{path:L,submission:H,error:J}=ud(f.v7_normalizeFormMethod,!1,P,R),re=C.location,V=ai(C.location,L,R&&R.state);V=De({},V,e.history.encodeLocation(V));let b=R&&R.replace!=null?R.replace:void 0,Q=Be.Push;b===!0?Q=Be.Replace:b===!1||H!=null&&Xt(H.formMethod)&&H.formAction===C.location.pathname+C.location.search&&(Q=Be.Replace);let q=R&&"preventScrollReset"in R?R.preventScrollReset===!0:void 0,pe=(R&&R.unstable_flushSync)===!0,ge=Hc({currentLocation:re,nextLocation:V,historyAction:Q});if(ge){ki(ge,{state:"blocked",location:V,proceed(){ki(ge,{state:"proceeding",proceed:void 0,reset:void 0,location:V}),_s(S,R)},reset(){let Re=new Map(C.blockers);Re.set(ge,xo),qe({blockers:Re})}});return}return await w(Q,V,{submission:H,pendingError:J,preventScrollReset:q,replace:R&&R.replace,enableViewTransition:R&&R.unstable_viewTransition,flushSync:pe})}function Vc(){if(ho(),qe({revalidation:"loading"}),C.navigation.state!=="submitting"){if(C.navigation.state==="idle"){w(C.historyAction,C.location,{startUninterruptedRevalidation:!0});return}w(U||C.historyAction,C.navigation.location,{overrideNavigation:C.navigation,enableViewTransition:W===!0})}}async function w(S,R,P){Y&&Y.abort(),Y=null,U=S,we=(P&&P.startUninterruptedRevalidation)===!0,xm(C.location,C.matches),I=(P&&P.preventScrollReset)===!0,W=(P&&P.enableViewTransition)===!0;let L=s||l,H=P&&P.overrideNavigation,J=cr(L,R,u),re=(P&&P.flushSync)===!0,V=Di(J,L,R.pathname);if(V.active&&V.matches&&(J=V.matches),!J){let{error:ce,notFoundMatches:Xe,route:Ue}=ks(R.pathname);lr(R,{matches:Xe,loaderData:{},errors:{[Ue.id]:ce}},{flushSync:re});return}if(C.initialized&&!Fe&&G0(C.location,R)&&!(P&&P.submission&&Xt(P.submission.formMethod))){lr(R,{matches:J},{flushSync:re});return}Y=new AbortController;let b=Tr(e.history,R,Y.signal,P&&P.submission),Q;if(P&&P.pendingError)Q=[Wr(J).route.id,{type:ye.error,error:P.pendingError}];else if(P&&P.submission&&Xt(P.submission.formMethod)){let ce=await _(b,R,P.submission,J,V.active,{replace:P.replace,flushSync:re});if(ce.shortCircuited)return;if(ce.pendingActionResult){let[Xe,Ue]=ce.pendingActionResult;if(kt(Ue)&&gs(Ue.error)&&Ue.error.status===404){Y=null,lr(R,{matches:ce.matches,loaderData:{},errors:{[Xe]:Ue.error}});return}}J=ce.matches||J,Q=ce.pendingActionResult,H=ru(R,P.submission),re=!1,V.active=!1,b=Tr(e.history,b.url,b.signal)}let{shortCircuited:q,matches:pe,loaderData:ge,errors:Re}=await D(b,R,J,V.active,H,P&&P.submission,P&&P.fetcherSubmission,P&&P.replace,P&&P.initialHydration===!0,re,Q);q||(Y=null,lr(R,De({matches:pe||J},gd(Q),{loaderData:ge,errors:Re})))}async function _(S,R,P,L,H,J){J===void 0&&(J={}),ho();let re=Y0(R,P);if(qe({navigation:re},{flushSync:J.flushSync===!0}),H){let Q=await Li(L,R.pathname,S.signal);if(Q.type==="aborted")return{shortCircuited:!0};if(Q.type==="error"){let{boundaryId:q,error:pe}=Fi(R.pathname,Q);return{matches:Q.partialMatches,pendingActionResult:[q,{type:ye.error,error:pe}]}}else if(Q.matches)L=Q.matches;else{let{notFoundMatches:q,error:pe,route:ge}=ks(R.pathname);return{matches:q,pendingActionResult:[ge.id,{type:ye.error,error:pe}]}}}let V,b=No(L,R);if(!b.route.action&&!b.route.lazy)V={type:ye.error,error:at(405,{method:S.method,pathname:R.pathname,routeId:b.route.id})};else if(V=(await Pe("action",C,S,[b],L,null))[b.route.id],S.signal.aborted)return{shortCircuited:!0};if(hr(V)){let Q;return J&&J.replace!=null?Q=J.replace:Q=fd(V.response.headers.get("Location"),new URL(S.url),u)===C.location.pathname+C.location.search,await Se(S,V,!0,{submission:P,replace:Q}),{shortCircuited:!0}}if(Un(V))throw at(400,{type:"defer-action"});if(kt(V)){let Q=Wr(L,b.route.id);return(J&&J.replace)!==!0&&(U=Be.Push),{matches:L,pendingActionResult:[Q.route.id,V]}}return{matches:L,pendingActionResult:[b.route.id,V]}}async function D(S,R,P,L,H,J,re,V,b,Q,q){let pe=H||ru(R,J),ge=J||re||yd(pe),Re=!we&&(!f.v7_partialHydration||!b);if(L){if(Re){let Oe=j(q);qe(De({navigation:pe},Oe!==void 0?{actionData:Oe}:{}),{flushSync:Q})}let le=await Li(P,R.pathname,S.signal);if(le.type==="aborted")return{shortCircuited:!0};if(le.type==="error"){let{boundaryId:Oe,error:_t}=Fi(R.pathname,le);return{matches:le.partialMatches,loaderData:{},errors:{[Oe]:_t}}}else if(le.matches)P=le.matches;else{let{error:Oe,notFoundMatches:_t,route:Ne}=ks(R.pathname);return{matches:_t,loaderData:{},errors:{[Ne.id]:Oe}}}}let ce=s||l,[Xe,Ue]=ad(e.history,C,P,ge,R,f.v7_partialHydration&&b===!0,f.v7_skipActionErrorRevalidation,Fe,Ie,$,ze,Ze,nt,ce,u,q);if(Fs(le=>!(P&&P.some(Oe=>Oe.route.id===le))||Xe&&Xe.some(Oe=>Oe.route.id===le)),he=++ee,Xe.length===0&&Ue.length===0){let le=jc();return lr(R,De({matches:P,loaderData:{},errors:q&&kt(q[1])?{[q[0]]:q[1].error}:null},gd(q),le?{fetchers:new Map(C.fetchers)}:{}),{flushSync:Q}),{shortCircuited:!0}}if(Re){let le={};if(!L){le.navigation=pe;let Oe=j(q);Oe!==void 0&&(le.actionData=Oe)}Ue.length>0&&(le.fetchers=z(Ue)),qe(le,{flushSync:Q})}Ue.forEach(le=>{B.has(le.key)&&Wt(le.key),le.controller&&B.set(le.key,le.controller)});let go=()=>Ue.forEach(le=>Wt(le.key));Y&&Y.signal.addEventListener("abort",go);let{loaderResults:dn,fetcherResults:Dr}=await rn(C,P,Xe,Ue,S);if(S.signal.aborted)return{shortCircuited:!0};Y&&Y.signal.removeEventListener("abort",go),Ue.forEach(le=>B.delete(le.key));let Ln=Zi(dn);if(Ln)return await Se(S,Ln.result,!0,{replace:V}),{shortCircuited:!0};if(Ln=Zi(Dr),Ln)return nt.add(Ln.key),await Se(S,Ln.result,!0,{replace:V}),{shortCircuited:!0};let{loaderData:Ti,errors:pn}=pd(C,P,Xe,dn,q,Ue,Dr,ut);ut.forEach((le,Oe)=>{le.subscribe(_t=>{(_t||le.done)&&ut.delete(Oe)})}),f.v7_partialHydration&&b&&C.errors&&Object.entries(C.errors).filter(le=>{let[Oe]=le;return!Xe.some(_t=>_t.route.id===Oe)}).forEach(le=>{let[Oe,_t]=le;pn=Object.assign(pn||{},{[Oe]:_t})});let Mi=jc(),Oi=Uc(he),Ni=Mi||Oi||Ue.length>0;return De({matches:P,loaderData:Ti,errors:pn},Ni?{fetchers:new Map(C.fetchers)}:{})}function j(S){if(S&&!kt(S[1]))return{[S[0]]:S[1].data};if(C.actionData)return Object.keys(C.actionData).length===0?null:C.actionData}function z(S){return S.forEach(R=>{let P=C.fetchers.get(R.key),L=_o(void 0,P?P.data:void 0);C.fetchers.set(R.key,L)}),new Map(C.fetchers)}function N(S,R,P,L){if(r)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");B.has(S)&&Wt(S);let H=(L&&L.unstable_flushSync)===!0,J=s||l,re=ca(C.location,C.matches,u,f.v7_prependBasename,P,f.v7_relativeSplatPath,R,L==null?void 0:L.relative),V=cr(J,re,u),b=Di(V,J,re);if(b.active&&b.matches&&(V=b.matches),!V){xt(S,R,at(404,{pathname:re}),{flushSync:H});return}let{path:Q,submission:q,error:pe}=ud(f.v7_normalizeFormMethod,!0,re,L);if(pe){xt(S,R,pe,{flushSync:H});return}let ge=No(V,Q);if(I=(L&&L.preventScrollReset)===!0,q&&Xt(q.formMethod)){X(S,R,Q,ge,V,b.active,H,q);return}Ze.set(S,{routeId:R,path:Q}),de(S,R,Q,ge,V,b.active,H,q)}async function X(S,R,P,L,H,J,re,V){ho(),Ze.delete(S);function b(Ne){if(!Ne.route.action&&!Ne.route.lazy){let hn=at(405,{method:V.formMethod,pathname:P,routeId:R});return xt(S,R,hn,{flushSync:re}),!0}return!1}if(!J&&b(L))return;let Q=C.fetchers.get(S);At(S,Z0(V,Q),{flushSync:re});let q=new AbortController,pe=Tr(e.history,P,q.signal,V);if(J){let Ne=await Li(H,P,pe.signal);if(Ne.type==="aborted")return;if(Ne.type==="error"){let{error:hn}=Fi(P,Ne);xt(S,R,hn,{flushSync:re});return}else if(Ne.matches){if(H=Ne.matches,L=No(H,P),b(L))return}else{xt(S,R,at(404,{pathname:P}),{flushSync:re});return}}B.set(S,q);let ge=ee,ce=(await Pe("action",C,pe,[L],H,S))[L.route.id];if(pe.signal.aborted){B.get(S)===q&&B.delete(S);return}if(f.v7_fetcherPersist&&ze.has(S)){if(hr(ce)||kt(ce)){At(S,On(void 0));return}}else{if(hr(ce))if(B.delete(S),he>ge){At(S,On(void 0));return}else return nt.add(S),At(S,_o(V)),Se(pe,ce,!1,{fetcherSubmission:V});if(kt(ce)){xt(S,R,ce.error);return}}if(Un(ce))throw at(400,{type:"defer-action"});let Xe=C.navigation.location||C.location,Ue=Tr(e.history,Xe,q.signal),go=s||l,dn=C.navigation.state!=="idle"?cr(go,C.navigation.location,u):C.matches;ue(dn,"Didn't find any matches after fetcher action");let Dr=++ee;ve.set(S,Dr);let Ln=_o(V,ce.data);C.fetchers.set(S,Ln);let[Ti,pn]=ad(e.history,C,dn,V,Xe,!1,f.v7_skipActionErrorRevalidation,Fe,Ie,$,ze,Ze,nt,go,u,[L.route.id,ce]);pn.filter(Ne=>Ne.key!==S).forEach(Ne=>{let hn=Ne.key,Qc=C.fetchers.get(hn),km=_o(void 0,Qc?Qc.data:void 0);C.fetchers.set(hn,km),B.has(hn)&&Wt(hn),Ne.controller&&B.set(hn,Ne.controller)}),qe({fetchers:new Map(C.fetchers)});let Mi=()=>pn.forEach(Ne=>Wt(Ne.key));q.signal.addEventListener("abort",Mi);let{loaderResults:Oi,fetcherResults:Ni}=await rn(C,dn,Ti,pn,Ue);if(q.signal.aborted)return;q.signal.removeEventListener("abort",Mi),ve.delete(S),B.delete(S),pn.forEach(Ne=>B.delete(Ne.key));let le=Zi(Oi);if(le)return Se(Ue,le.result,!1);if(le=Zi(Ni),le)return nt.add(le.key),Se(Ue,le.result,!1);let{loaderData:Oe,errors:_t}=pd(C,dn,Ti,Oi,void 0,pn,Ni,ut);if(C.fetchers.has(S)){let Ne=On(ce.data);C.fetchers.set(S,Ne)}Uc(Dr),C.navigation.state==="loading"&&Dr>he?(ue(U,"Expected pending action"),Y&&Y.abort(),lr(C.navigation.location,{matches:dn,loaderData:Oe,errors:_t,fetchers:new Map(C.fetchers)})):(qe({errors:_t,loaderData:hd(C.loaderData,Oe,dn,_t),fetchers:new Map(C.fetchers)}),Fe=!1)}async function de(S,R,P,L,H,J,re,V){let b=C.fetchers.get(S);At(S,_o(V,b?b.data:void 0),{flushSync:re});let Q=new AbortController,q=Tr(e.history,P,Q.signal);if(J){let ce=await Li(H,P,q.signal);if(ce.type==="aborted")return;if(ce.type==="error"){let{error:Xe}=Fi(P,ce);xt(S,R,Xe,{flushSync:re});return}else if(ce.matches)H=ce.matches,L=No(H,P);else{xt(S,R,at(404,{pathname:P}),{flushSync:re});return}}B.set(S,Q);let pe=ee,Re=(await Pe("loader",C,q,[L],H,S))[L.route.id];if(Un(Re)&&(Re=await Ec(Re,q.signal,!0)||Re),B.get(S)===Q&&B.delete(S),!q.signal.aborted){if(ze.has(S)){At(S,On(void 0));return}if(hr(Re))if(he>pe){At(S,On(void 0));return}else{nt.add(S),await Se(q,Re,!1);return}if(kt(Re)){xt(S,R,Re.error);return}ue(!Un(Re),"Unhandled fetcher deferred data"),At(S,On(Re.data))}}async function Se(S,R,P,L){let{submission:H,fetcherSubmission:J,replace:re}=L===void 0?{}:L;R.response.headers.has("X-Remix-Revalidate")&&(Fe=!0);let V=R.response.headers.get("Location");ue(V,"Expected a Location header on the redirect Response"),V=fd(V,new URL(S.url),u);let b=ai(C.location,V,{_isRedirect:!0});if(n){let ce=!1;if(R.response.headers.has("X-Remix-Reload-Document"))ce=!0;else if(Rc.test(V)){const Xe=e.history.createURL(V);ce=Xe.origin!==t.location.origin||Fn(Xe.pathname,u)==null}if(ce){re?t.location.replace(V):t.location.assign(V);return}}Y=null;let Q=re===!0||R.response.headers.has("X-Remix-Replace")?Be.Replace:Be.Push,{formMethod:q,formAction:pe,formEncType:ge}=C.navigation;!H&&!J&&q&&pe&&ge&&(H=yd(C.navigation));let Re=H||J;if(D0.has(R.response.status)&&Re&&Xt(Re.formMethod))await w(Q,b,{submission:De({},Re,{formAction:V}),preventScrollReset:I,enableViewTransition:P?W:void 0});else{let ce=ru(b,H);await w(Q,b,{overrideNavigation:ce,fetcherSubmission:J,preventScrollReset:I,enableViewTransition:P?W:void 0})}}async function Pe(S,R,P,L,H,J){let re,V={};try{re=await $0(a,S,R,P,L,H,J,i,o)}catch(b){return L.forEach(Q=>{V[Q.route.id]={type:ye.error,error:b}}),V}for(let[b,Q]of Object.entries(re))if(K0(Q)){let q=Q.result;V[b]={type:ye.redirect,response:B0(q,P,b,H,u,f.v7_relativeSplatPath)}}else V[b]=await U0(Q);return V}async function rn(S,R,P,L,H){let J=S.matches,re=Pe("loader",S,H,P,R,null),V=Promise.all(L.map(async q=>{if(q.matches&&q.match&&q.controller){let ge=(await Pe("loader",S,Tr(e.history,q.path,q.controller.signal),[q.match],q.matches,q.key))[q.match.route.id];return{[q.key]:ge}}else return Promise.resolve({[q.key]:{type:ye.error,error:at(404,{pathname:q.path})}})})),b=await re,Q=(await V).reduce((q,pe)=>Object.assign(q,pe),{});return await Promise.all([X0(R,b,H.signal,J,S.loaderData),J0(R,Q,L)]),{loaderResults:b,fetcherResults:Q}}function ho(){Fe=!0,Ie.push(...Fs()),Ze.forEach((S,R)=>{B.has(R)&&($.add(R),Wt(R))})}function At(S,R,P){P===void 0&&(P={}),C.fetchers.set(S,R),qe({fetchers:new Map(C.fetchers)},{flushSync:(P&&P.flushSync)===!0})}function xt(S,R,P,L){L===void 0&&(L={});let H=Wr(C.matches,R);sr(S),qe({errors:{[H.route.id]:P},fetchers:new Map(C.fetchers)},{flushSync:(L&&L.flushSync)===!0})}function Pi(S){return f.v7_fetcherPersist&&(Ht.set(S,(Ht.get(S)||0)+1),ze.has(S)&&ze.delete(S)),C.fetchers.get(S)||L0}function sr(S){let R=C.fetchers.get(S);B.has(S)&&!(R&&R.state==="loading"&&ve.has(S))&&Wt(S),Ze.delete(S),ve.delete(S),nt.delete(S),ze.delete(S),$.delete(S),C.fetchers.delete(S)}function Ps(S){if(f.v7_fetcherPersist){let R=(Ht.get(S)||0)-1;R<=0?(Ht.delete(S),ze.add(S)):Ht.set(S,R)}else sr(S);qe({fetchers:new Map(C.fetchers)})}function Wt(S){let R=B.get(S);ue(R,"Expected fetch controller: "+S),R.abort(),B.delete(S)}function $c(S){for(let R of S){let P=Pi(R),L=On(P.data);C.fetchers.set(R,L)}}function jc(){let S=[],R=!1;for(let P of nt){let L=C.fetchers.get(P);ue(L,"Expected fetcher: "+P),L.state==="loading"&&(nt.delete(P),S.push(P),R=!0)}return $c(S),R}function Uc(S){let R=[];for(let[P,L]of ve)if(L0}function Rm(S,R){let P=C.blockers.get(S)||xo;return Gt.get(S)!==R&&Gt.set(S,R),P}function Bc(S){C.blockers.delete(S),Gt.delete(S)}function ki(S,R){let P=C.blockers.get(S)||xo;ue(P.state==="unblocked"&&R.state==="blocked"||P.state==="blocked"&&R.state==="blocked"||P.state==="blocked"&&R.state==="proceeding"||P.state==="blocked"&&R.state==="unblocked"||P.state==="proceeding"&&R.state==="unblocked","Invalid blocker state transition: "+P.state+" -> "+R.state);let L=new Map(C.blockers);L.set(S,R),qe({blockers:L})}function Hc(S){let{currentLocation:R,nextLocation:P,historyAction:L}=S;if(Gt.size===0)return;Gt.size>1&&lo(!1,"A router only supports one blocker at a time");let H=Array.from(Gt.entries()),[J,re]=H[H.length-1],V=C.blockers.get(J);if(!(V&&V.state==="proceeding")&&re({currentLocation:R,nextLocation:P,historyAction:L}))return J}function ks(S){let R=at(404,{pathname:S}),P=s||l,{matches:L,route:H}=md(P);return Fs(),{notFoundMatches:L,route:H,error:R}}function Fi(S,R){return{boundaryId:Wr(R.partialMatches).route.id,error:at(400,{type:"route-discovery",pathname:S,message:R.error!=null&&"message"in R.error?R.error:String(R.error)})}}function Fs(S){let R=[];return ut.forEach((P,L)=>{(!S||S(L))&&(P.cancel(),R.push(L),ut.delete(L))}),R}function Em(S,R,P){if(E=S,d=R,h=P||null,!v&&C.navigation===nu){v=!0;let L=Wc(C.location,C.matches);L!=null&&qe({restoreScrollPosition:L})}return()=>{E=null,d=null,h=null}}function Gc(S,R){return h&&h(S,R.map(L=>s0(L,C.loaderData)))||S.key}function xm(S,R){if(E&&d){let P=Gc(S,R);E[P]=d()}}function Wc(S,R){if(E){let P=Gc(S,R),L=E[P];if(typeof L=="number")return L}return null}function Di(S,R,P){if(c){if(y.has(P))return{active:!1,matches:S};if(S){if(Object.keys(S[0].params).length>0)return{active:!0,matches:gl(R,P,u,!0)}}else return{active:!0,matches:gl(R,P,u,!0)||[]}}return{active:!1,matches:null}}async function Li(S,R,P){let L=S;for(;;){let H=s==null,J=s||l;try{await I0(c,R,L,J,i,o,Ei,P)}catch(b){return{type:"error",error:b,partialMatches:L}}finally{H&&(l=[...l])}if(P.aborted)return{type:"aborted"};let re=cr(J,R,u);if(re)return Kc(R,y),{type:"success",matches:re};let V=gl(J,R,u,!0);if(!V||L.length===V.length&&L.every((b,Q)=>b.route.id===V[Q].route.id))return Kc(R,y),{type:"success",matches:null};L=V}}function Kc(S,R){if(R.size>=m){let P=R.values().next().value;R.delete(P)}R.add(S)}function _m(S){i={},s=ci(S,o,void 0,i)}function Pm(S,R){let P=s==null;Sg(S,R,s||l,i,o),P&&(l=[...l],qe({}))}return A={get basename(){return u},get future(){return f},get state(){return C},get routes(){return l},get window(){return t},initialize:xi,subscribe:_i,enableScrollRestoration:Em,navigate:_s,fetch:N,revalidate:Vc,createHref:S=>e.history.createHref(S),encodeLocation:S=>e.history.encodeLocation(S),getFetcher:Pi,deleteFetcher:Ps,dispose:xs,getBlocker:Rm,deleteBlocker:Bc,patchRoutes:Pm,_internalFetchControllers:B,_internalActiveDeferreds:ut,_internalSetRoutes:_m},A}function O0(e){return e!=null&&("formData"in e&&e.formData!=null||"body"in e&&e.body!==void 0)}function ca(e,t,n,r,o,i,l,s){let u,a;if(l){u=[];for(let f of t)if(u.push(f),f.route.id===l){a=f;break}}else u=t,a=t[t.length-1];let c=Cc(o||".",Sc(u,i),Fn(e.pathname,n)||e.pathname,s==="path");return o==null&&(c.search=e.search,c.hash=e.hash),(o==null||o===""||o===".")&&a&&a.route.index&&!xc(c.search)&&(c.search=c.search?c.search.replace(/^\?/,"?index&"):"?index"),r&&n!=="/"&&(c.pathname=c.pathname==="/"?n:En([n,c.pathname])),xr(c)}function ud(e,t,n,r){if(!r||!O0(r))return{path:n};if(r.formMethod&&!q0(r.formMethod))return{path:n,error:at(405,{method:r.formMethod})};let o=()=>({path:n,error:at(400,{type:"invalid-body"})}),i=r.formMethod||"get",l=e?i.toUpperCase():i.toLowerCase(),s=Cg(n);if(r.body!==void 0){if(r.formEncType==="text/plain"){if(!Xt(l))return o();let p=typeof r.body=="string"?r.body:r.body instanceof FormData||r.body instanceof URLSearchParams?Array.from(r.body.entries()).reduce((g,m)=>{let[y,E]=m;return""+g+y+"="+E+` -`},""):String(r.body);return{path:n,submission:{formMethod:l,formAction:s,formEncType:r.formEncType,formData:void 0,json:void 0,text:p}}}else if(r.formEncType==="application/json"){if(!Xt(l))return o();try{let p=typeof r.body=="string"?JSON.parse(r.body):r.body;return{path:n,submission:{formMethod:l,formAction:s,formEncType:r.formEncType,formData:void 0,json:p,text:void 0}}}catch{return o()}}}ue(typeof FormData=="function","FormData is not available in this environment");let u,a;if(r.formData)u=fa(r.formData),a=r.formData;else if(r.body instanceof FormData)u=fa(r.body),a=r.body;else if(r.body instanceof URLSearchParams)u=r.body,a=dd(u);else if(r.body==null)u=new URLSearchParams,a=new FormData;else try{u=new URLSearchParams(r.body),a=dd(u)}catch{return o()}let c={formMethod:l,formAction:s,formEncType:r&&r.formEncType||"application/x-www-form-urlencoded",formData:a,json:void 0,text:void 0};if(Xt(c.formMethod))return{path:n,submission:c};let f=rr(n);return t&&f.search&&xc(f.search)&&u.append("index",""),f.search="?"+u,{path:xr(f),submission:c}}function N0(e,t){let n=e;if(t){let r=e.findIndex(o=>o.route.id===t);r>=0&&(n=e.slice(0,r))}return n}function ad(e,t,n,r,o,i,l,s,u,a,c,f,p,g,m,y){let E=y?kt(y[1])?y[1].error:y[1].data:void 0,h=e.createURL(t.location),d=e.createURL(o),v=y&&kt(y[1])?y[0]:void 0,x=v?N0(n,v):n,F=y?y[1].statusCode:void 0,M=l&&F&&F>=400,A=x.filter((U,I)=>{let{route:Y}=U;if(Y.lazy)return!0;if(Y.loader==null)return!1;if(i)return typeof Y.loader!="function"||Y.loader.hydrate?!0:t.loaderData[Y.id]===void 0&&(!t.errors||t.errors[Y.id]===void 0);if(A0(t.loaderData,t.matches[I],U)||u.some(oe=>oe===U.route.id))return!0;let W=t.matches[I],Z=U;return cd(U,De({currentUrl:h,currentParams:W.params,nextUrl:d,nextParams:Z.params},r,{actionResult:E,actionStatus:F,defaultShouldRevalidate:M?!1:s||h.pathname+h.search===d.pathname+d.search||h.search!==d.search||wg(W,Z)}))}),C=[];return f.forEach((U,I)=>{if(i||!n.some(we=>we.route.id===U.routeId)||c.has(I))return;let Y=cr(g,U.path,m);if(!Y){C.push({key:I,routeId:U.routeId,path:U.path,matches:null,match:null,controller:null});return}let W=t.fetchers.get(I),Z=No(Y,U.path),oe=!1;p.has(I)?oe=!1:a.has(I)?(a.delete(I),oe=!0):W&&W.state!=="idle"&&W.data===void 0?oe=s:oe=cd(Z,De({currentUrl:h,currentParams:t.matches[t.matches.length-1].params,nextUrl:d,nextParams:n[n.length-1].params},r,{actionResult:E,actionStatus:F,defaultShouldRevalidate:M?!1:s})),oe&&C.push({key:I,routeId:U.routeId,path:U.path,matches:Y,match:Z,controller:new AbortController})}),[A,C]}function A0(e,t,n){let r=!t||n.route.id!==t.route.id,o=e[n.route.id]===void 0;return r||o}function wg(e,t){let n=e.route.path;return e.pathname!==t.pathname||n!=null&&n.endsWith("*")&&e.params["*"]!==t.params["*"]}function cd(e,t){if(e.route.shouldRevalidate){let n=e.route.shouldRevalidate(t);if(typeof n=="boolean")return n}return t.defaultShouldRevalidate}async function I0(e,t,n,r,o,i,l,s){let u=[t,...n.map(a=>a.route.id)].join("-");try{let a=l.get(u);a||(a=e({path:t,matches:n,patch:(c,f)=>{s.aborted||Sg(c,f,r,o,i)}}),l.set(u,a)),a&&W0(a)&&await a}finally{l.delete(u)}}function Sg(e,t,n,r,o){if(e){var i;let l=r[e];ue(l,"No route found to patch children into: routeId = "+e);let s=ci(t,o,[e,"patch",String(((i=l.children)==null?void 0:i.length)||"0")],r);l.children?l.children.push(...s):l.children=s}else{let l=ci(t,o,["patch",String(n.length||"0")],r);n.push(...l)}}async function z0(e,t,n){if(!e.lazy)return;let r=await e.lazy();if(!e.lazy)return;let o=n[e.id];ue(o,"No route found in manifest");let i={};for(let l in r){let u=o[l]!==void 0&&l!=="hasErrorBoundary";lo(!u,'Route "'+o.id+'" has a static property "'+l+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+l+'" will be ignored.')),!u&&!i0.has(l)&&(i[l]=r[l])}Object.assign(o,i),Object.assign(o,De({},t(o),{lazy:void 0}))}async function V0(e){let{matches:t}=e,n=t.filter(o=>o.shouldLoad);return(await Promise.all(n.map(o=>o.resolve()))).reduce((o,i,l)=>Object.assign(o,{[n[l].route.id]:i}),{})}async function $0(e,t,n,r,o,i,l,s,u,a){let c=i.map(g=>g.route.lazy?z0(g.route,u,s):void 0),f=i.map((g,m)=>{let y=c[m],E=o.some(d=>d.route.id===g.route.id);return De({},g,{shouldLoad:E,resolve:async d=>(d&&r.method==="GET"&&(g.route.lazy||g.route.loader)&&(E=!0),E?j0(t,r,g,y,d,a):Promise.resolve({type:ye.data,result:void 0}))})}),p=await e({matches:f,request:r,params:i[0].params,fetcherKey:l,context:a});try{await Promise.all(c)}catch{}return p}async function j0(e,t,n,r,o,i){let l,s,u=a=>{let c,f=new Promise((m,y)=>c=y);s=()=>c(),t.signal.addEventListener("abort",s);let p=m=>typeof a!="function"?Promise.reject(new Error("You cannot call the handler for a route which defines a boolean "+('"'+e+'" [routeId: '+n.route.id+"]"))):a({request:t,params:n.params,context:i},...m!==void 0?[m]:[]),g=(async()=>{try{return{type:"data",result:await(o?o(y=>p(y)):p())}}catch(m){return{type:"error",result:m}}})();return Promise.race([g,f])};try{let a=n.route[e];if(r)if(a){let c,[f]=await Promise.all([u(a).catch(p=>{c=p}),r]);if(c!==void 0)throw c;l=f}else if(await r,a=n.route[e],a)l=await u(a);else if(e==="action"){let c=new URL(t.url),f=c.pathname+c.search;throw at(405,{method:t.method,pathname:f,routeId:n.route.id})}else return{type:ye.data,result:void 0};else if(a)l=await u(a);else{let c=new URL(t.url),f=c.pathname+c.search;throw at(404,{pathname:f})}ue(l.result!==void 0,"You defined "+(e==="action"?"an action":"a loader")+" for route "+('"'+n.route.id+"\" but didn't return anything from your `"+e+"` ")+"function. Please return a value or `null`.")}catch(a){return{type:ye.error,result:a}}finally{s&&t.signal.removeEventListener("abort",s)}return l}async function U0(e){let{result:t,type:n}=e;if(Rg(t)){let a;try{let c=t.headers.get("Content-Type");c&&/\bapplication\/json\b/.test(c)?t.body==null?a=null:a=await t.json():a=await t.text()}catch(c){return{type:ye.error,error:c}}return n===ye.error?{type:ye.error,error:new Wl(t.status,t.statusText,a),statusCode:t.status,headers:t.headers}:{type:ye.data,data:a,statusCode:t.status,headers:t.headers}}if(n===ye.error){if(vd(t)){var r;if(t.data instanceof Error){var o;return{type:ye.error,error:t.data,statusCode:(o=t.init)==null?void 0:o.status}}t=new Wl(((r=t.init)==null?void 0:r.status)||500,void 0,t.data)}return{type:ye.error,error:t,statusCode:gs(t)?t.status:void 0}}if(Q0(t)){var i,l;return{type:ye.deferred,deferredData:t,statusCode:(i=t.init)==null?void 0:i.status,headers:((l=t.init)==null?void 0:l.headers)&&new Headers(t.init.headers)}}if(vd(t)){var s,u;return{type:ye.data,data:t.data,statusCode:(s=t.init)==null?void 0:s.status,headers:(u=t.init)!=null&&u.headers?new Headers(t.init.headers):void 0}}return{type:ye.data,data:t}}function B0(e,t,n,r,o,i){let l=e.headers.get("Location");if(ue(l,"Redirects returned/thrown from loaders/actions must have a Location header"),!Rc.test(l)){let s=r.slice(0,r.findIndex(u=>u.route.id===n)+1);l=ca(new URL(t.url),s,o,!0,l,i),e.headers.set("Location",l)}return e}function fd(e,t,n){if(Rc.test(e)){let r=e,o=r.startsWith("//")?new URL(t.protocol+r):new URL(r),i=Fn(o.pathname,n)!=null;if(o.origin===t.origin&&i)return o.pathname+o.search+o.hash}return e}function Tr(e,t,n,r){let o=e.createURL(Cg(t)).toString(),i={signal:n};if(r&&Xt(r.formMethod)){let{formMethod:l,formEncType:s}=r;i.method=l.toUpperCase(),s==="application/json"?(i.headers=new Headers({"Content-Type":s}),i.body=JSON.stringify(r.json)):s==="text/plain"?i.body=r.text:s==="application/x-www-form-urlencoded"&&r.formData?i.body=fa(r.formData):i.body=r.formData}return new Request(o,i)}function fa(e){let t=new URLSearchParams;for(let[n,r]of e.entries())t.append(n,typeof r=="string"?r:r.name);return t}function dd(e){let t=new FormData;for(let[n,r]of e.entries())t.append(n,r);return t}function H0(e,t,n,r,o){let i={},l=null,s,u=!1,a={},c=n&&kt(n[1])?n[1].error:void 0;return e.forEach(f=>{if(!(f.route.id in t))return;let p=f.route.id,g=t[p];if(ue(!hr(g),"Cannot handle redirect results in processLoaderData"),kt(g)){let m=g.error;c!==void 0&&(m=c,c=void 0),l=l||{};{let y=Wr(e,p);l[y.route.id]==null&&(l[y.route.id]=m)}i[p]=void 0,u||(u=!0,s=gs(g.error)?g.error.status:500),g.headers&&(a[p]=g.headers)}else Un(g)?(r.set(p,g.deferredData),i[p]=g.deferredData.data,g.statusCode!=null&&g.statusCode!==200&&!u&&(s=g.statusCode),g.headers&&(a[p]=g.headers)):(i[p]=g.data,g.statusCode&&g.statusCode!==200&&!u&&(s=g.statusCode),g.headers&&(a[p]=g.headers))}),c!==void 0&&n&&(l={[n[0]]:c},i[n[0]]=void 0),{loaderData:i,errors:l,statusCode:s||200,loaderHeaders:a}}function pd(e,t,n,r,o,i,l,s){let{loaderData:u,errors:a}=H0(t,r,o,s);return i.forEach(c=>{let{key:f,match:p,controller:g}=c,m=l[f];if(ue(m,"Did not find corresponding fetcher result"),!(g&&g.signal.aborted))if(kt(m)){let y=Wr(e.matches,p==null?void 0:p.route.id);a&&a[y.route.id]||(a=De({},a,{[y.route.id]:m.error})),e.fetchers.delete(f)}else if(hr(m))ue(!1,"Unhandled fetcher revalidation redirect");else if(Un(m))ue(!1,"Unhandled fetcher deferred data");else{let y=On(m.data);e.fetchers.set(f,y)}}),{loaderData:u,errors:a}}function hd(e,t,n,r){let o=De({},t);for(let i of n){let l=i.route.id;if(t.hasOwnProperty(l)?t[l]!==void 0&&(o[l]=t[l]):e[l]!==void 0&&i.route.loader&&(o[l]=e[l]),r&&r.hasOwnProperty(l))break}return o}function gd(e){return e?kt(e[1])?{actionData:{}}:{actionData:{[e[0]]:e[1].data}}:{}}function Wr(e,t){return(t?e.slice(0,e.findIndex(r=>r.route.id===t)+1):[...e]).reverse().find(r=>r.route.hasErrorBoundary===!0)||e[0]}function md(e){let t=e.length===1?e[0]:e.find(n=>n.index||!n.path||n.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:t}],route:t}}function at(e,t){let{pathname:n,routeId:r,method:o,type:i,message:l}=t===void 0?{}:t,s="Unknown Server Error",u="Unknown @remix-run/router error";return e===400?(s="Bad Request",i==="route-discovery"?u='Unable to match URL "'+n+'" - the `unstable_patchRoutesOnNavigation()` '+(`function threw the following error: -`+l):o&&n&&r?u="You made a "+o+' request to "'+n+'" but '+('did not provide a `loader` for route "'+r+'", ')+"so there is no way to handle the request.":i==="defer-action"?u="defer() is not supported in actions":i==="invalid-body"&&(u="Unable to encode submission body")):e===403?(s="Forbidden",u='Route "'+r+'" does not match URL "'+n+'"'):e===404?(s="Not Found",u='No route matches URL "'+n+'"'):e===405&&(s="Method Not Allowed",o&&n&&r?u="You made a "+o.toUpperCase()+' request to "'+n+'" but '+('did not provide an `action` for route "'+r+'", ')+"so there is no way to handle the request.":o&&(u='Invalid request method "'+o.toUpperCase()+'"')),new Wl(e||500,s,new Error(u),!0)}function Zi(e){let t=Object.entries(e);for(let n=t.length-1;n>=0;n--){let[r,o]=t[n];if(hr(o))return{key:r,result:o}}}function Cg(e){let t=typeof e=="string"?rr(e):e;return xr(De({},t,{hash:""}))}function G0(e,t){return e.pathname!==t.pathname||e.search!==t.search?!1:e.hash===""?t.hash!=="":e.hash===t.hash?!0:t.hash!==""}function W0(e){return typeof e=="object"&&e!=null&&"then"in e}function K0(e){return Rg(e.result)&&F0.has(e.result.status)}function Un(e){return e.type===ye.deferred}function kt(e){return e.type===ye.error}function hr(e){return(e&&e.type)===ye.redirect}function vd(e){return typeof e=="object"&&e!=null&&"type"in e&&"data"in e&&"init"in e&&e.type==="DataWithResponseInit"}function Q0(e){let t=e;return t&&typeof t=="object"&&typeof t.data=="object"&&typeof t.subscribe=="function"&&typeof t.cancel=="function"&&typeof t.resolveData=="function"}function Rg(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.headers=="object"&&typeof e.body<"u"}function q0(e){return k0.has(e.toLowerCase())}function Xt(e){return _0.has(e.toLowerCase())}async function X0(e,t,n,r,o){let i=Object.entries(t);for(let l=0;l(p==null?void 0:p.route.id)===s);if(!a)continue;let c=r.find(p=>p.route.id===a.route.id),f=c!=null&&!wg(c,a)&&(o&&o[a.route.id])!==void 0;Un(u)&&f&&await Ec(u,n,!1).then(p=>{p&&(t[s]=p)})}}async function J0(e,t,n){for(let r=0;r(a==null?void 0:a.route.id)===i)&&Un(s)&&(ue(l,"Expected an AbortController for revalidating fetcher deferred result"),await Ec(s,l.signal,!0).then(a=>{a&&(t[o]=a)}))}}async function Ec(e,t,n){if(n===void 0&&(n=!1),!await e.deferredData.resolveData(t)){if(n)try{return{type:ye.data,data:e.deferredData.unwrappedData}}catch(o){return{type:ye.error,error:o}}return{type:ye.data,data:e.deferredData.data}}}function xc(e){return new URLSearchParams(e).getAll("index").some(t=>t==="")}function No(e,t){let n=typeof t=="string"?rr(t).search:t.search;if(e[e.length-1].route.index&&xc(n||""))return e[e.length-1];let r=mg(e);return r[r.length-1]}function yd(e){let{formMethod:t,formAction:n,formEncType:r,text:o,formData:i,json:l}=e;if(!(!t||!n||!r)){if(o!=null)return{formMethod:t,formAction:n,formEncType:r,formData:void 0,json:void 0,text:o};if(i!=null)return{formMethod:t,formAction:n,formEncType:r,formData:i,json:void 0,text:void 0};if(l!==void 0)return{formMethod:t,formAction:n,formEncType:r,formData:void 0,json:l,text:void 0}}}function ru(e,t){return t?{state:"loading",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}:{state:"loading",location:e,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function Y0(e,t){return{state:"submitting",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}}function _o(e,t){return e?{state:"loading",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:t}}function Z0(e,t){return{state:"submitting",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t?t.data:void 0}}function On(e){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:e}}function b0(e,t){try{let n=e.sessionStorage.getItem(yg);if(n){let r=JSON.parse(n);for(let[o,i]of Object.entries(r||{}))i&&Array.isArray(i)&&t.set(o,new Set(i||[]))}}catch{}}function ew(e,t){if(t.size>0){let n={};for(let[r,o]of t)n[r]=[...o];try{e.sessionStorage.setItem(yg,JSON.stringify(n))}catch(r){lo(!1,"Failed to save applied view transitions in sessionStorage ("+r+").")}}}/** - * React Router v6.26.2 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function Kl(){return Kl=Object.assign?Object.assign.bind():function(e){for(var t=1;t{s.current=!0}),T.useCallback(function(a,c){if(c===void 0&&(c={}),!s.current)return;if(typeof a=="number"){r.go(a);return}let f=Cc(a,JSON.parse(l),i,c.relative==="path");e==null&&t!=="/"&&(f.pathname=f.pathname==="/"?t:En([t,f.pathname])),(c.replace?r.replace:r.push)(f,c.state,c)},[t,r,l,i,e])}const ow=T.createContext(null);function iw(e){let t=T.useContext(ir).outlet;return t&&T.createElement(ow.Provider,{value:e},t)}function ms(e,t){let{relative:n}=t===void 0?{}:t,{future:r}=T.useContext(or),{matches:o}=T.useContext(ir),{pathname:i}=wi(),l=JSON.stringify(Sc(o,r.v7_relativeSplatPath));return T.useMemo(()=>Cc(e,JSON.parse(l),i,n==="path"),[e,l,i,n])}function lw(e,t,n,r){yi()||ue(!1);let{navigator:o}=T.useContext(or),{matches:i}=T.useContext(ir),l=i[i.length-1],s=l?l.params:{};l&&l.pathname;let u=l?l.pathnameBase:"/";l&&l.route;let a=wi(),c;c=a;let f=c.pathname||"/",p=f;if(u!=="/"){let y=u.replace(/^\//,"").split("/");p="/"+f.replace(/^\//,"").split("/").slice(y.length).join("/")}let g=cr(e,{pathname:p});return fw(g&&g.map(y=>Object.assign({},y,{params:Object.assign({},s,y.params),pathname:En([u,o.encodeLocation?o.encodeLocation(y.pathname).pathname:y.pathname]),pathnameBase:y.pathnameBase==="/"?u:En([u,o.encodeLocation?o.encodeLocation(y.pathnameBase).pathname:y.pathnameBase])})),i,n,r)}function sw(){let e=gw(),t=gs(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,o={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return T.createElement(T.Fragment,null,T.createElement("h2",null,"Unexpected Application Error!"),T.createElement("h3",{style:{fontStyle:"italic"}},t),n?T.createElement("pre",{style:o},n):null,null)}const uw=T.createElement(sw,null);class aw extends T.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,n){return n.location!==t.location||n.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:n.error,location:n.location,revalidation:t.revalidation||n.revalidation}}componentDidCatch(t,n){console.error("React Router caught the following error during render",t,n)}render(){return this.state.error!==void 0?T.createElement(ir.Provider,{value:this.props.routeContext},T.createElement(Eg.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function cw(e){let{routeContext:t,match:n,children:r}=e,o=T.useContext(vi);return o&&o.static&&o.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=n.route.id),T.createElement(ir.Provider,{value:t},r)}function fw(e,t,n,r){var o;if(t===void 0&&(t=[]),n===void 0&&(n=null),r===void 0&&(r=null),e==null){var i;if(!n)return null;if(n.errors)e=n.matches;else if((i=r)!=null&&i.v7_partialHydration&&t.length===0&&!n.initialized&&n.matches.length>0)e=n.matches;else return null}let l=e,s=(o=n)==null?void 0:o.errors;if(s!=null){let c=l.findIndex(f=>f.route.id&&(s==null?void 0:s[f.route.id])!==void 0);c>=0||ue(!1),l=l.slice(0,Math.min(l.length,c+1))}let u=!1,a=-1;if(n&&r&&r.v7_partialHydration)for(let c=0;c=0?l=l.slice(0,a+1):l=[l[0]];break}}}return l.reduceRight((c,f,p)=>{let g,m=!1,y=null,E=null;n&&(g=s&&f.route.id?s[f.route.id]:void 0,y=f.route.errorElement||uw,u&&(a<0&&p===0?(vw("route-fallback"),m=!0,E=null):a===p&&(m=!0,E=f.route.hydrateFallbackElement||null)));let h=t.concat(l.slice(0,p+1)),d=()=>{let v;return g?v=y:m?v=E:f.route.Component?v=T.createElement(f.route.Component,null):f.route.element?v=f.route.element:v=c,T.createElement(cw,{match:f,routeContext:{outlet:c,matches:h,isDataRoute:n!=null},children:v})};return n&&(f.route.ErrorBoundary||f.route.errorElement||p===0)?T.createElement(aw,{location:n.location,revalidation:n.revalidation,component:y,error:g,children:d(),routeContext:{outlet:null,matches:h,isDataRoute:!0}}):d()},null)}var _g=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(_g||{}),Pg=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Pg||{});function dw(e){let t=T.useContext(vi);return t||ue(!1),t}function pw(e){let t=T.useContext(_c);return t||ue(!1),t}function hw(e){let t=T.useContext(ir);return t||ue(!1),t}function kg(e){let t=hw(),n=t.matches[t.matches.length-1];return n.route.id||ue(!1),n.route.id}function gw(){var e;let t=T.useContext(Eg),n=pw(),r=kg();return t!==void 0?t:(e=n.errors)==null?void 0:e[r]}function mw(){let{router:e}=dw(_g.UseNavigateStable),t=kg(Pg.UseNavigateStable),n=T.useRef(!1);return xg(()=>{n.current=!0}),T.useCallback(function(o,i){i===void 0&&(i={}),n.current&&(typeof o=="number"?e.navigate(o):e.navigate(o,Kl({fromRouteId:t},i)))},[e,t])}const wd={};function vw(e,t,n){wd[e]||(wd[e]=!0)}function yw(e){return iw(e.context)}function ww(e){let{basename:t="/",children:n=null,location:r,navigationType:o=Be.Pop,navigator:i,static:l=!1,future:s}=e;yi()&&ue(!1);let u=t.replace(/^\/*/,"/"),a=T.useMemo(()=>({basename:u,navigator:i,static:l,future:Kl({v7_relativeSplatPath:!1},s)}),[u,s,i,l]);typeof r=="string"&&(r=rr(r));let{pathname:c="/",search:f="",hash:p="",state:g=null,key:m="default"}=r,y=T.useMemo(()=>{let E=Fn(c,u);return E==null?null:{location:{pathname:E,search:f,hash:p,state:g,key:m},navigationType:o}},[u,c,f,p,g,m,o]);return y==null?null:T.createElement(or.Provider,{value:a},T.createElement(Pc.Provider,{children:n,value:y}))}new Promise(()=>{});function Sw(e){let t={hasErrorBoundary:e.ErrorBoundary!=null||e.errorElement!=null};return e.Component&&Object.assign(t,{element:T.createElement(e.Component),Component:void 0}),e.HydrateFallback&&Object.assign(t,{hydrateFallbackElement:T.createElement(e.HydrateFallback),HydrateFallback:void 0}),e.ErrorBoundary&&Object.assign(t,{errorElement:T.createElement(e.ErrorBoundary),ErrorBoundary:void 0}),t}/** - * React Router DOM v6.26.2 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function so(){return so=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(n[o]=e[o]);return n}function Cw(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Rw(e,t){return e.button===0&&(!t||t==="_self")&&!Cw(e)}const Ew=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"],xw=["aria-current","caseSensitive","className","end","style","to","unstable_viewTransition","children"],_w="6";try{window.__reactRouterVersion=_w}catch{}function Pw(e,t){return M0({basename:t==null?void 0:t.basename,future:so({},t==null?void 0:t.future,{v7_prependBasename:!0}),history:n0({window:t==null?void 0:t.window}),hydrationData:(t==null?void 0:t.hydrationData)||kw(),routes:e,mapRouteProperties:Sw,unstable_dataStrategy:t==null?void 0:t.unstable_dataStrategy,unstable_patchRoutesOnNavigation:t==null?void 0:t.unstable_patchRoutesOnNavigation,window:t==null?void 0:t.window}).initialize()}function kw(){var e;let t=(e=window)==null?void 0:e.__staticRouterHydrationData;return t&&t.errors&&(t=so({},t,{errors:Fw(t.errors)})),t}function Fw(e){if(!e)return null;let t=Object.entries(e),n={};for(let[r,o]of t)if(o&&o.__type==="RouteErrorResponse")n[r]=new Wl(o.status,o.statusText,o.data,o.internal===!0);else if(o&&o.__type==="Error"){if(o.__subType){let i=window[o.__subType];if(typeof i=="function")try{let l=new i(o.message);l.stack="",n[r]=l}catch{}}if(n[r]==null){let i=new Error(o.message);i.stack="",n[r]=i}}else n[r]=o;return n}const Dg=T.createContext({isTransitioning:!1}),Dw=T.createContext(new Map),Lw="startTransition",Sd=Hm[Lw],Tw="flushSync",Cd=t0[Tw];function Mw(e){Sd?Sd(e):e()}function Po(e){Cd?Cd(e):e()}class Ow{constructor(){this.status="pending",this.promise=new Promise((t,n)=>{this.resolve=r=>{this.status==="pending"&&(this.status="resolved",t(r))},this.reject=r=>{this.status==="pending"&&(this.status="rejected",n(r))}})}}function Nw(e){let{fallbackElement:t,router:n,future:r}=e,[o,i]=T.useState(n.state),[l,s]=T.useState(),[u,a]=T.useState({isTransitioning:!1}),[c,f]=T.useState(),[p,g]=T.useState(),[m,y]=T.useState(),E=T.useRef(new Map),{v7_startTransition:h}=r||{},d=T.useCallback(C=>{h?Mw(C):C()},[h]),v=T.useCallback((C,U)=>{let{deletedFetchers:I,unstable_flushSync:Y,unstable_viewTransitionOpts:W}=U;I.forEach(oe=>E.current.delete(oe)),C.fetchers.forEach((oe,we)=>{oe.data!==void 0&&E.current.set(we,oe.data)});let Z=n.window==null||n.window.document==null||typeof n.window.document.startViewTransition!="function";if(!W||Z){Y?Po(()=>i(C)):d(()=>i(C));return}if(Y){Po(()=>{p&&(c&&c.resolve(),p.skipTransition()),a({isTransitioning:!0,flushSync:!0,currentLocation:W.currentLocation,nextLocation:W.nextLocation})});let oe=n.window.document.startViewTransition(()=>{Po(()=>i(C))});oe.finished.finally(()=>{Po(()=>{f(void 0),g(void 0),s(void 0),a({isTransitioning:!1})})}),Po(()=>g(oe));return}p?(c&&c.resolve(),p.skipTransition(),y({state:C,currentLocation:W.currentLocation,nextLocation:W.nextLocation})):(s(C),a({isTransitioning:!0,flushSync:!1,currentLocation:W.currentLocation,nextLocation:W.nextLocation}))},[n.window,p,c,E,d]);T.useLayoutEffect(()=>n.subscribe(v),[n,v]),T.useEffect(()=>{u.isTransitioning&&!u.flushSync&&f(new Ow)},[u]),T.useEffect(()=>{if(c&&l&&n.window){let C=l,U=c.promise,I=n.window.document.startViewTransition(async()=>{d(()=>i(C)),await U});I.finished.finally(()=>{f(void 0),g(void 0),s(void 0),a({isTransitioning:!1})}),g(I)}},[d,l,c,n.window]),T.useEffect(()=>{c&&l&&o.location.key===l.location.key&&c.resolve()},[c,p,o.location,l]),T.useEffect(()=>{!u.isTransitioning&&m&&(s(m.state),a({isTransitioning:!0,flushSync:!1,currentLocation:m.currentLocation,nextLocation:m.nextLocation}),y(void 0))},[u.isTransitioning,m]),T.useEffect(()=>{},[]);let x=T.useMemo(()=>({createHref:n.createHref,encodeLocation:n.encodeLocation,go:C=>n.navigate(C),push:(C,U,I)=>n.navigate(C,{state:U,preventScrollReset:I==null?void 0:I.preventScrollReset}),replace:(C,U,I)=>n.navigate(C,{replace:!0,state:U,preventScrollReset:I==null?void 0:I.preventScrollReset})}),[n]),F=n.basename||"/",M=T.useMemo(()=>({router:n,navigator:x,static:!1,basename:F}),[n,x,F]),A=T.useMemo(()=>({v7_relativeSplatPath:n.future.v7_relativeSplatPath}),[n.future.v7_relativeSplatPath]);return T.createElement(T.Fragment,null,T.createElement(vi.Provider,{value:M},T.createElement(_c.Provider,{value:o},T.createElement(Dw.Provider,{value:E.current},T.createElement(Dg.Provider,{value:u},T.createElement(ww,{basename:F,location:o.location,navigationType:o.historyAction,navigator:x,future:A},o.initialized||n.future.v7_partialHydration?T.createElement(Aw,{routes:n.routes,future:n.future,state:o}):t))))),null)}const Aw=T.memo(Iw);function Iw(e){let{routes:t,future:n,state:r}=e;return lw(t,void 0,r,n)}const zw=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",Vw=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Lg=T.forwardRef(function(t,n){let{onClick:r,relative:o,reloadDocument:i,replace:l,state:s,target:u,to:a,preventScrollReset:c,unstable_viewTransition:f}=t,p=Fg(t,Ew),{basename:g}=T.useContext(or),m,y=!1;if(typeof a=="string"&&Vw.test(a)&&(m=a,zw))try{let v=new URL(window.location.href),x=a.startsWith("//")?new URL(v.protocol+a):new URL(a),F=Fn(x.pathname,g);x.origin===v.origin&&F!=null?a=F+x.search+x.hash:y=!0}catch{}let E=tw(a,{relative:o}),h=jw(a,{replace:l,state:s,target:u,preventScrollReset:c,relative:o,unstable_viewTransition:f});function d(v){r&&r(v),v.defaultPrevented||h(v)}return T.createElement("a",so({},p,{href:m||E,onClick:y||i?r:d,ref:n,target:u}))}),Rd=T.forwardRef(function(t,n){let{"aria-current":r="page",caseSensitive:o=!1,className:i="",end:l=!1,style:s,to:u,unstable_viewTransition:a,children:c}=t,f=Fg(t,xw),p=ms(u,{relative:f.relative}),g=wi(),m=T.useContext(_c),{navigator:y,basename:E}=T.useContext(or),h=m!=null&&Uw(p)&&a===!0,d=y.encodeLocation?y.encodeLocation(p).pathname:p.pathname,v=g.pathname,x=m&&m.navigation&&m.navigation.location?m.navigation.location.pathname:null;o||(v=v.toLowerCase(),x=x?x.toLowerCase():null,d=d.toLowerCase()),x&&E&&(x=Fn(x,E)||x);const F=d!=="/"&&d.endsWith("/")?d.length-1:d.length;let M=v===d||!l&&v.startsWith(d)&&v.charAt(F)==="/",A=x!=null&&(x===d||!l&&x.startsWith(d)&&x.charAt(d.length)==="/"),C={isActive:M,isPending:A,isTransitioning:h},U=M?r:void 0,I;typeof i=="function"?I=i(C):I=[i,M?"active":null,A?"pending":null,h?"transitioning":null].filter(Boolean).join(" ");let Y=typeof s=="function"?s(C):s;return T.createElement(Lg,so({},f,{"aria-current":U,className:I,ref:n,style:Y,to:u,unstable_viewTransition:a}),typeof c=="function"?c(C):c)});var da;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(da||(da={}));var Ed;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(Ed||(Ed={}));function $w(e){let t=T.useContext(vi);return t||ue(!1),t}function jw(e,t){let{target:n,replace:r,state:o,preventScrollReset:i,relative:l,unstable_viewTransition:s}=t===void 0?{}:t,u=nw(),a=wi(),c=ms(e,{relative:l});return T.useCallback(f=>{if(Rw(f,n)){f.preventDefault();let p=r!==void 0?r:xr(a)===xr(c);u(e,{replace:p,state:o,preventScrollReset:i,relative:l,unstable_viewTransition:s})}},[a,u,c,r,o,n,e,i,l,s])}function Uw(e,t){t===void 0&&(t={});let n=T.useContext(Dg);n==null&&ue(!1);let{basename:r}=$w(da.useViewTransitionState),o=ms(e,{relative:t.relative});if(!n.isTransitioning)return!1;let i=Fn(n.currentLocation.pathname,r)||n.currentLocation.pathname,l=Fn(n.nextLocation.pathname,r)||n.nextLocation.pathname;return Gl(o.pathname,l)!=null||Gl(o.pathname,i)!=null}function Bw(){return se.jsxs("div",{className:"min-h-screen",children:[se.jsx("header",{className:"border-b",children:se.jsxs("div",{className:"mx-auto max-w-5xl p-4 flex gap-6",children:[se.jsx(Lg,{to:"/",className:"font-semibold",children:"XSD Registry"}),se.jsxs("nav",{className:"flex gap-4",children:[se.jsx(Rd,{to:"/schemas",className:({isActive:e})=>e?"underline":"",children:"Схемы"}),se.jsx(Rd,{to:"/schemas/upload",className:({isActive:e})=>e?"underline":"",children:"Загрузка"})]})]})}),se.jsx("main",{className:"mx-auto max-w-5xl p-4",children:se.jsx(yw,{})})]})}/** - * table-core - * - * Copyright (c) TanStack - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function Bn(e,t){return typeof e=="function"?e(t):e}function Mt(e,t){return n=>{t.setState(r=>({...r,[e]:Bn(n,r[e])}))}}function vs(e){return e instanceof Function}function Hw(e){return Array.isArray(e)&&e.every(t=>typeof t=="number")}function Gw(e,t){const n=[],r=o=>{o.forEach(i=>{n.push(i);const l=t(i);l!=null&&l.length&&r(l)})};return r(e),n}function te(e,t,n){let r=[],o;return i=>{let l;n.key&&n.debug&&(l=Date.now());const s=e(i);if(!(s.length!==r.length||s.some((c,f)=>r[f]!==c)))return o;r=s;let a;if(n.key&&n.debug&&(a=Date.now()),o=t(...s),n==null||n.onChange==null||n.onChange(o),n.key&&n.debug&&n!=null&&n.debug()){const c=Math.round((Date.now()-l)*100)/100,f=Math.round((Date.now()-a)*100)/100,p=f/16,g=(m,y)=>{for(m=String(m);m.length{var o;return(o=e==null?void 0:e.debugAll)!=null?o:e[t]},key:!1,onChange:r}}function Ww(e,t,n,r){const o=()=>{var l;return(l=i.getValue())!=null?l:e.options.renderFallbackValue},i={id:`${t.id}_${n.id}`,row:t,column:n,getValue:()=>t.getValue(r),renderValue:o,getContext:te(()=>[e,n,t,i],(l,s,u,a)=>({table:l,column:s,row:u,cell:a,getValue:a.getValue,renderValue:a.renderValue}),ne(e.options,"debugCells"))};return e._features.forEach(l=>{l.createCell==null||l.createCell(i,n,t,e)},{}),i}function Kw(e,t,n,r){var o,i;const s={...e._getDefaultColumnDef(),...t},u=s.accessorKey;let a=(o=(i=s.id)!=null?i:u?typeof String.prototype.replaceAll=="function"?u.replaceAll(".","_"):u.replace(/\./g,"_"):void 0)!=null?o:typeof s.header=="string"?s.header:void 0,c;if(s.accessorFn?c=s.accessorFn:u&&(u.includes(".")?c=p=>{let g=p;for(const y of u.split(".")){var m;g=(m=g)==null?void 0:m[y]}return g}:c=p=>p[s.accessorKey]),!a)throw new Error;let f={id:`${String(a)}`,accessorFn:c,parent:r,depth:n,columnDef:s,columns:[],getFlatColumns:te(()=>[!0],()=>{var p;return[f,...(p=f.columns)==null?void 0:p.flatMap(g=>g.getFlatColumns())]},ne(e.options,"debugColumns")),getLeafColumns:te(()=>[e._getOrderColumnsFn()],p=>{var g;if((g=f.columns)!=null&&g.length){let m=f.columns.flatMap(y=>y.getLeafColumns());return p(m)}return[f]},ne(e.options,"debugColumns"))};for(const p of e._features)p.createColumn==null||p.createColumn(f,e);return f}const it="debugHeaders";function xd(e,t,n){var r;let i={id:(r=n.id)!=null?r:t.id,column:t,index:n.index,isPlaceholder:!!n.isPlaceholder,placeholderId:n.placeholderId,depth:n.depth,subHeaders:[],colSpan:0,rowSpan:0,headerGroup:null,getLeafHeaders:()=>{const l=[],s=u=>{u.subHeaders&&u.subHeaders.length&&u.subHeaders.map(s),l.push(u)};return s(i),l},getContext:()=>({table:e,header:i,column:t})};return e._features.forEach(l=>{l.createHeader==null||l.createHeader(i,e)}),i}const Qw={createTable:e=>{e.getHeaderGroups=te(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,o)=>{var i,l;const s=(i=r==null?void 0:r.map(f=>n.find(p=>p.id===f)).filter(Boolean))!=null?i:[],u=(l=o==null?void 0:o.map(f=>n.find(p=>p.id===f)).filter(Boolean))!=null?l:[],a=n.filter(f=>!(r!=null&&r.includes(f.id))&&!(o!=null&&o.includes(f.id)));return bi(t,[...s,...a,...u],e)},ne(e.options,it)),e.getCenterHeaderGroups=te(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,o)=>(n=n.filter(i=>!(r!=null&&r.includes(i.id))&&!(o!=null&&o.includes(i.id))),bi(t,n,e,"center")),ne(e.options,it)),e.getLeftHeaderGroups=te(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left],(t,n,r)=>{var o;const i=(o=r==null?void 0:r.map(l=>n.find(s=>s.id===l)).filter(Boolean))!=null?o:[];return bi(t,i,e,"left")},ne(e.options,it)),e.getRightHeaderGroups=te(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.right],(t,n,r)=>{var o;const i=(o=r==null?void 0:r.map(l=>n.find(s=>s.id===l)).filter(Boolean))!=null?o:[];return bi(t,i,e,"right")},ne(e.options,it)),e.getFooterGroups=te(()=>[e.getHeaderGroups()],t=>[...t].reverse(),ne(e.options,it)),e.getLeftFooterGroups=te(()=>[e.getLeftHeaderGroups()],t=>[...t].reverse(),ne(e.options,it)),e.getCenterFooterGroups=te(()=>[e.getCenterHeaderGroups()],t=>[...t].reverse(),ne(e.options,it)),e.getRightFooterGroups=te(()=>[e.getRightHeaderGroups()],t=>[...t].reverse(),ne(e.options,it)),e.getFlatHeaders=te(()=>[e.getHeaderGroups()],t=>t.map(n=>n.headers).flat(),ne(e.options,it)),e.getLeftFlatHeaders=te(()=>[e.getLeftHeaderGroups()],t=>t.map(n=>n.headers).flat(),ne(e.options,it)),e.getCenterFlatHeaders=te(()=>[e.getCenterHeaderGroups()],t=>t.map(n=>n.headers).flat(),ne(e.options,it)),e.getRightFlatHeaders=te(()=>[e.getRightHeaderGroups()],t=>t.map(n=>n.headers).flat(),ne(e.options,it)),e.getCenterLeafHeaders=te(()=>[e.getCenterFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),ne(e.options,it)),e.getLeftLeafHeaders=te(()=>[e.getLeftFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),ne(e.options,it)),e.getRightLeafHeaders=te(()=>[e.getRightFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),ne(e.options,it)),e.getLeafHeaders=te(()=>[e.getLeftHeaderGroups(),e.getCenterHeaderGroups(),e.getRightHeaderGroups()],(t,n,r)=>{var o,i,l,s,u,a;return[...(o=(i=t[0])==null?void 0:i.headers)!=null?o:[],...(l=(s=n[0])==null?void 0:s.headers)!=null?l:[],...(u=(a=r[0])==null?void 0:a.headers)!=null?u:[]].map(c=>c.getLeafHeaders()).flat()},ne(e.options,it))}};function bi(e,t,n,r){var o,i;let l=0;const s=function(p,g){g===void 0&&(g=1),l=Math.max(l,g),p.filter(m=>m.getIsVisible()).forEach(m=>{var y;(y=m.columns)!=null&&y.length&&s(m.columns,g+1)},0)};s(e);let u=[];const a=(p,g)=>{const m={depth:g,id:[r,`${g}`].filter(Boolean).join("_"),headers:[]},y=[];p.forEach(E=>{const h=[...y].reverse()[0],d=E.column.depth===m.depth;let v,x=!1;if(d&&E.column.parent?v=E.column.parent:(v=E.column,x=!0),h&&(h==null?void 0:h.column)===v)h.subHeaders.push(E);else{const F=xd(n,v,{id:[r,g,v.id,E==null?void 0:E.id].filter(Boolean).join("_"),isPlaceholder:x,placeholderId:x?`${y.filter(M=>M.column===v).length}`:void 0,depth:g,index:y.length});F.subHeaders.push(E),y.push(F)}m.headers.push(E),E.headerGroup=m}),u.push(m),g>0&&a(y,g-1)},c=t.map((p,g)=>xd(n,p,{depth:l,index:g}));a(c,l-1),u.reverse();const f=p=>p.filter(m=>m.column.getIsVisible()).map(m=>{let y=0,E=0,h=[0];m.subHeaders&&m.subHeaders.length?(h=[],f(m.subHeaders).forEach(v=>{let{colSpan:x,rowSpan:F}=v;y+=x,h.push(F)})):y=1;const d=Math.min(...h);return E=E+d,m.colSpan=y,m.rowSpan=E,{colSpan:y,rowSpan:E}});return f((o=(i=u[0])==null?void 0:i.headers)!=null?o:[]),u}const qw=(e,t,n,r,o,i,l)=>{let s={id:t,index:r,original:n,depth:o,parentId:l,_valuesCache:{},_uniqueValuesCache:{},getValue:u=>{if(s._valuesCache.hasOwnProperty(u))return s._valuesCache[u];const a=e.getColumn(u);if(a!=null&&a.accessorFn)return s._valuesCache[u]=a.accessorFn(s.original,r),s._valuesCache[u]},getUniqueValues:u=>{if(s._uniqueValuesCache.hasOwnProperty(u))return s._uniqueValuesCache[u];const a=e.getColumn(u);if(a!=null&&a.accessorFn)return a.columnDef.getUniqueValues?(s._uniqueValuesCache[u]=a.columnDef.getUniqueValues(s.original,r),s._uniqueValuesCache[u]):(s._uniqueValuesCache[u]=[s.getValue(u)],s._uniqueValuesCache[u])},renderValue:u=>{var a;return(a=s.getValue(u))!=null?a:e.options.renderFallbackValue},subRows:[],getLeafRows:()=>Gw(s.subRows,u=>u.subRows),getParentRow:()=>s.parentId?e.getRow(s.parentId,!0):void 0,getParentRows:()=>{let u=[],a=s;for(;;){const c=a.getParentRow();if(!c)break;u.push(c),a=c}return u.reverse()},getAllCells:te(()=>[e.getAllLeafColumns()],u=>u.map(a=>Ww(e,s,a,a.id)),ne(e.options,"debugRows")),_getAllCellsByColumnId:te(()=>[s.getAllCells()],u=>u.reduce((a,c)=>(a[c.column.id]=c,a),{}),ne(e.options,"debugRows"))};for(let u=0;u{e._getFacetedRowModel=t.options.getFacetedRowModel&&t.options.getFacetedRowModel(t,e.id),e.getFacetedRowModel=()=>e._getFacetedRowModel?e._getFacetedRowModel():t.getPreFilteredRowModel(),e._getFacetedUniqueValues=t.options.getFacetedUniqueValues&&t.options.getFacetedUniqueValues(t,e.id),e.getFacetedUniqueValues=()=>e._getFacetedUniqueValues?e._getFacetedUniqueValues():new Map,e._getFacetedMinMaxValues=t.options.getFacetedMinMaxValues&&t.options.getFacetedMinMaxValues(t,e.id),e.getFacetedMinMaxValues=()=>{if(e._getFacetedMinMaxValues)return e._getFacetedMinMaxValues()}}},Tg=(e,t,n)=>{var r,o;const i=n==null||(r=n.toString())==null?void 0:r.toLowerCase();return!!(!((o=e.getValue(t))==null||(o=o.toString())==null||(o=o.toLowerCase())==null)&&o.includes(i))};Tg.autoRemove=e=>en(e);const Mg=(e,t,n)=>{var r;return!!(!((r=e.getValue(t))==null||(r=r.toString())==null)&&r.includes(n))};Mg.autoRemove=e=>en(e);const Og=(e,t,n)=>{var r;return((r=e.getValue(t))==null||(r=r.toString())==null?void 0:r.toLowerCase())===(n==null?void 0:n.toLowerCase())};Og.autoRemove=e=>en(e);const Ng=(e,t,n)=>{var r;return(r=e.getValue(t))==null?void 0:r.includes(n)};Ng.autoRemove=e=>en(e)||!(e!=null&&e.length);const Ag=(e,t,n)=>!n.some(r=>{var o;return!((o=e.getValue(t))!=null&&o.includes(r))});Ag.autoRemove=e=>en(e)||!(e!=null&&e.length);const Ig=(e,t,n)=>n.some(r=>{var o;return(o=e.getValue(t))==null?void 0:o.includes(r)});Ig.autoRemove=e=>en(e)||!(e!=null&&e.length);const zg=(e,t,n)=>e.getValue(t)===n;zg.autoRemove=e=>en(e);const Vg=(e,t,n)=>e.getValue(t)==n;Vg.autoRemove=e=>en(e);const kc=(e,t,n)=>{let[r,o]=n;const i=e.getValue(t);return i>=r&&i<=o};kc.resolveFilterValue=e=>{let[t,n]=e,r=typeof t!="number"?parseFloat(t):t,o=typeof n!="number"?parseFloat(n):n,i=t===null||Number.isNaN(r)?-1/0:r,l=n===null||Number.isNaN(o)?1/0:o;if(i>l){const s=i;i=l,l=s}return[i,l]};kc.autoRemove=e=>en(e)||en(e[0])&&en(e[1]);const vn={includesString:Tg,includesStringSensitive:Mg,equalsString:Og,arrIncludes:Ng,arrIncludesAll:Ag,arrIncludesSome:Ig,equals:zg,weakEquals:Vg,inNumberRange:kc};function en(e){return e==null||e===""}const Jw={getDefaultColumnDef:()=>({filterFn:"auto"}),getInitialState:e=>({columnFilters:[],...e}),getDefaultOptions:e=>({onColumnFiltersChange:Mt("columnFilters",e),filterFromLeafRows:!1,maxLeafRowFilterDepth:100}),createColumn:(e,t)=>{e.getAutoFilterFn=()=>{const n=t.getCoreRowModel().flatRows[0],r=n==null?void 0:n.getValue(e.id);return typeof r=="string"?vn.includesString:typeof r=="number"?vn.inNumberRange:typeof r=="boolean"||r!==null&&typeof r=="object"?vn.equals:Array.isArray(r)?vn.arrIncludes:vn.weakEquals},e.getFilterFn=()=>{var n,r;return vs(e.columnDef.filterFn)?e.columnDef.filterFn:e.columnDef.filterFn==="auto"?e.getAutoFilterFn():(n=(r=t.options.filterFns)==null?void 0:r[e.columnDef.filterFn])!=null?n:vn[e.columnDef.filterFn]},e.getCanFilter=()=>{var n,r,o;return((n=e.columnDef.enableColumnFilter)!=null?n:!0)&&((r=t.options.enableColumnFilters)!=null?r:!0)&&((o=t.options.enableFilters)!=null?o:!0)&&!!e.accessorFn},e.getIsFiltered=()=>e.getFilterIndex()>-1,e.getFilterValue=()=>{var n;return(n=t.getState().columnFilters)==null||(n=n.find(r=>r.id===e.id))==null?void 0:n.value},e.getFilterIndex=()=>{var n,r;return(n=(r=t.getState().columnFilters)==null?void 0:r.findIndex(o=>o.id===e.id))!=null?n:-1},e.setFilterValue=n=>{t.setColumnFilters(r=>{const o=e.getFilterFn(),i=r==null?void 0:r.find(c=>c.id===e.id),l=Bn(n,i?i.value:void 0);if(_d(o,l,e)){var s;return(s=r==null?void 0:r.filter(c=>c.id!==e.id))!=null?s:[]}const u={id:e.id,value:l};if(i){var a;return(a=r==null?void 0:r.map(c=>c.id===e.id?u:c))!=null?a:[]}return r!=null&&r.length?[...r,u]:[u]})}},createRow:(e,t)=>{e.columnFilters={},e.columnFiltersMeta={}},createTable:e=>{e.setColumnFilters=t=>{const n=e.getAllLeafColumns(),r=o=>{var i;return(i=Bn(t,o))==null?void 0:i.filter(l=>{const s=n.find(u=>u.id===l.id);if(s){const u=s.getFilterFn();if(_d(u,l.value,s))return!1}return!0})};e.options.onColumnFiltersChange==null||e.options.onColumnFiltersChange(r)},e.resetColumnFilters=t=>{var n,r;e.setColumnFilters(t?[]:(n=(r=e.initialState)==null?void 0:r.columnFilters)!=null?n:[])},e.getPreFilteredRowModel=()=>e.getCoreRowModel(),e.getFilteredRowModel=()=>(!e._getFilteredRowModel&&e.options.getFilteredRowModel&&(e._getFilteredRowModel=e.options.getFilteredRowModel(e)),e.options.manualFiltering||!e._getFilteredRowModel?e.getPreFilteredRowModel():e._getFilteredRowModel())}};function _d(e,t,n){return(e&&e.autoRemove?e.autoRemove(t,n):!1)||typeof t>"u"||typeof t=="string"&&!t}const Yw=(e,t,n)=>n.reduce((r,o)=>{const i=o.getValue(e);return r+(typeof i=="number"?i:0)},0),Zw=(e,t,n)=>{let r;return n.forEach(o=>{const i=o.getValue(e);i!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}),r},bw=(e,t,n)=>{let r;return n.forEach(o=>{const i=o.getValue(e);i!=null&&(r=i)&&(r=i)}),r},eS=(e,t,n)=>{let r,o;return n.forEach(i=>{const l=i.getValue(e);l!=null&&(r===void 0?l>=l&&(r=o=l):(r>l&&(r=l),o{let n=0,r=0;if(t.forEach(o=>{let i=o.getValue(e);i!=null&&(i=+i)>=i&&(++n,r+=i)}),n)return r/n},nS=(e,t)=>{if(!t.length)return;const n=t.map(i=>i.getValue(e));if(!Hw(n))return;if(n.length===1)return n[0];const r=Math.floor(n.length/2),o=n.sort((i,l)=>i-l);return n.length%2!==0?o[r]:(o[r-1]+o[r])/2},rS=(e,t)=>Array.from(new Set(t.map(n=>n.getValue(e))).values()),oS=(e,t)=>new Set(t.map(n=>n.getValue(e))).size,iS=(e,t)=>t.length,ou={sum:Yw,min:Zw,max:bw,extent:eS,mean:tS,median:nS,unique:rS,uniqueCount:oS,count:iS},lS={getDefaultColumnDef:()=>({aggregatedCell:e=>{var t,n;return(t=(n=e.getValue())==null||n.toString==null?void 0:n.toString())!=null?t:null},aggregationFn:"auto"}),getInitialState:e=>({grouping:[],...e}),getDefaultOptions:e=>({onGroupingChange:Mt("grouping",e),groupedColumnMode:"reorder"}),createColumn:(e,t)=>{e.toggleGrouping=()=>{t.setGrouping(n=>n!=null&&n.includes(e.id)?n.filter(r=>r!==e.id):[...n??[],e.id])},e.getCanGroup=()=>{var n,r;return((n=e.columnDef.enableGrouping)!=null?n:!0)&&((r=t.options.enableGrouping)!=null?r:!0)&&(!!e.accessorFn||!!e.columnDef.getGroupingValue)},e.getIsGrouped=()=>{var n;return(n=t.getState().grouping)==null?void 0:n.includes(e.id)},e.getGroupedIndex=()=>{var n;return(n=t.getState().grouping)==null?void 0:n.indexOf(e.id)},e.getToggleGroupingHandler=()=>{const n=e.getCanGroup();return()=>{n&&e.toggleGrouping()}},e.getAutoAggregationFn=()=>{const n=t.getCoreRowModel().flatRows[0],r=n==null?void 0:n.getValue(e.id);if(typeof r=="number")return ou.sum;if(Object.prototype.toString.call(r)==="[object Date]")return ou.extent},e.getAggregationFn=()=>{var n,r;if(!e)throw new Error;return vs(e.columnDef.aggregationFn)?e.columnDef.aggregationFn:e.columnDef.aggregationFn==="auto"?e.getAutoAggregationFn():(n=(r=t.options.aggregationFns)==null?void 0:r[e.columnDef.aggregationFn])!=null?n:ou[e.columnDef.aggregationFn]}},createTable:e=>{e.setGrouping=t=>e.options.onGroupingChange==null?void 0:e.options.onGroupingChange(t),e.resetGrouping=t=>{var n,r;e.setGrouping(t?[]:(n=(r=e.initialState)==null?void 0:r.grouping)!=null?n:[])},e.getPreGroupedRowModel=()=>e.getFilteredRowModel(),e.getGroupedRowModel=()=>(!e._getGroupedRowModel&&e.options.getGroupedRowModel&&(e._getGroupedRowModel=e.options.getGroupedRowModel(e)),e.options.manualGrouping||!e._getGroupedRowModel?e.getPreGroupedRowModel():e._getGroupedRowModel())},createRow:(e,t)=>{e.getIsGrouped=()=>!!e.groupingColumnId,e.getGroupingValue=n=>{if(e._groupingValuesCache.hasOwnProperty(n))return e._groupingValuesCache[n];const r=t.getColumn(n);return r!=null&&r.columnDef.getGroupingValue?(e._groupingValuesCache[n]=r.columnDef.getGroupingValue(e.original),e._groupingValuesCache[n]):e.getValue(n)},e._groupingValuesCache={}},createCell:(e,t,n,r)=>{e.getIsGrouped=()=>t.getIsGrouped()&&t.id===n.groupingColumnId,e.getIsPlaceholder=()=>!e.getIsGrouped()&&t.getIsGrouped(),e.getIsAggregated=()=>{var o;return!e.getIsGrouped()&&!e.getIsPlaceholder()&&!!((o=n.subRows)!=null&&o.length)}}};function sS(e,t,n){if(!(t!=null&&t.length)||!n)return e;const r=e.filter(i=>!t.includes(i.id));return n==="remove"?r:[...t.map(i=>e.find(l=>l.id===i)).filter(Boolean),...r]}const uS={getInitialState:e=>({columnOrder:[],...e}),getDefaultOptions:e=>({onColumnOrderChange:Mt("columnOrder",e)}),createColumn:(e,t)=>{e.getIndex=te(n=>[Go(t,n)],n=>n.findIndex(r=>r.id===e.id),ne(t.options,"debugColumns")),e.getIsFirstColumn=n=>{var r;return((r=Go(t,n)[0])==null?void 0:r.id)===e.id},e.getIsLastColumn=n=>{var r;const o=Go(t,n);return((r=o[o.length-1])==null?void 0:r.id)===e.id}},createTable:e=>{e.setColumnOrder=t=>e.options.onColumnOrderChange==null?void 0:e.options.onColumnOrderChange(t),e.resetColumnOrder=t=>{var n;e.setColumnOrder(t?[]:(n=e.initialState.columnOrder)!=null?n:[])},e._getOrderColumnsFn=te(()=>[e.getState().columnOrder,e.getState().grouping,e.options.groupedColumnMode],(t,n,r)=>o=>{let i=[];if(!(t!=null&&t.length))i=o;else{const l=[...t],s=[...o];for(;s.length&&l.length;){const u=l.shift(),a=s.findIndex(c=>c.id===u);a>-1&&i.push(s.splice(a,1)[0])}i=[...i,...s]}return sS(i,n,r)},ne(e.options,"debugTable"))}},iu=()=>({left:[],right:[]}),aS={getInitialState:e=>({columnPinning:iu(),...e}),getDefaultOptions:e=>({onColumnPinningChange:Mt("columnPinning",e)}),createColumn:(e,t)=>{e.pin=n=>{const r=e.getLeafColumns().map(o=>o.id).filter(Boolean);t.setColumnPinning(o=>{var i,l;if(n==="right"){var s,u;return{left:((s=o==null?void 0:o.left)!=null?s:[]).filter(f=>!(r!=null&&r.includes(f))),right:[...((u=o==null?void 0:o.right)!=null?u:[]).filter(f=>!(r!=null&&r.includes(f))),...r]}}if(n==="left"){var a,c;return{left:[...((a=o==null?void 0:o.left)!=null?a:[]).filter(f=>!(r!=null&&r.includes(f))),...r],right:((c=o==null?void 0:o.right)!=null?c:[]).filter(f=>!(r!=null&&r.includes(f)))}}return{left:((i=o==null?void 0:o.left)!=null?i:[]).filter(f=>!(r!=null&&r.includes(f))),right:((l=o==null?void 0:o.right)!=null?l:[]).filter(f=>!(r!=null&&r.includes(f)))}})},e.getCanPin=()=>e.getLeafColumns().some(r=>{var o,i,l;return((o=r.columnDef.enablePinning)!=null?o:!0)&&((i=(l=t.options.enableColumnPinning)!=null?l:t.options.enablePinning)!=null?i:!0)}),e.getIsPinned=()=>{const n=e.getLeafColumns().map(s=>s.id),{left:r,right:o}=t.getState().columnPinning,i=n.some(s=>r==null?void 0:r.includes(s)),l=n.some(s=>o==null?void 0:o.includes(s));return i?"left":l?"right":!1},e.getPinnedIndex=()=>{var n,r;const o=e.getIsPinned();return o?(n=(r=t.getState().columnPinning)==null||(r=r[o])==null?void 0:r.indexOf(e.id))!=null?n:-1:0}},createRow:(e,t)=>{e.getCenterVisibleCells=te(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left,t.getState().columnPinning.right],(n,r,o)=>{const i=[...r??[],...o??[]];return n.filter(l=>!i.includes(l.column.id))},ne(t.options,"debugRows")),e.getLeftVisibleCells=te(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left],(n,r)=>(r??[]).map(i=>n.find(l=>l.column.id===i)).filter(Boolean).map(i=>({...i,position:"left"})),ne(t.options,"debugRows")),e.getRightVisibleCells=te(()=>[e._getAllVisibleCells(),t.getState().columnPinning.right],(n,r)=>(r??[]).map(i=>n.find(l=>l.column.id===i)).filter(Boolean).map(i=>({...i,position:"right"})),ne(t.options,"debugRows"))},createTable:e=>{e.setColumnPinning=t=>e.options.onColumnPinningChange==null?void 0:e.options.onColumnPinningChange(t),e.resetColumnPinning=t=>{var n,r;return e.setColumnPinning(t?iu():(n=(r=e.initialState)==null?void 0:r.columnPinning)!=null?n:iu())},e.getIsSomeColumnsPinned=t=>{var n;const r=e.getState().columnPinning;if(!t){var o,i;return!!((o=r.left)!=null&&o.length||(i=r.right)!=null&&i.length)}return!!((n=r[t])!=null&&n.length)},e.getLeftLeafColumns=te(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left],(t,n)=>(n??[]).map(r=>t.find(o=>o.id===r)).filter(Boolean),ne(e.options,"debugColumns")),e.getRightLeafColumns=te(()=>[e.getAllLeafColumns(),e.getState().columnPinning.right],(t,n)=>(n??[]).map(r=>t.find(o=>o.id===r)).filter(Boolean),ne(e.options,"debugColumns")),e.getCenterLeafColumns=te(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r)=>{const o=[...n??[],...r??[]];return t.filter(i=>!o.includes(i.id))},ne(e.options,"debugColumns"))}},el={size:150,minSize:20,maxSize:Number.MAX_SAFE_INTEGER},lu=()=>({startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}),cS={getDefaultColumnDef:()=>el,getInitialState:e=>({columnSizing:{},columnSizingInfo:lu(),...e}),getDefaultOptions:e=>({columnResizeMode:"onEnd",columnResizeDirection:"ltr",onColumnSizingChange:Mt("columnSizing",e),onColumnSizingInfoChange:Mt("columnSizingInfo",e)}),createColumn:(e,t)=>{e.getSize=()=>{var n,r,o;const i=t.getState().columnSizing[e.id];return Math.min(Math.max((n=e.columnDef.minSize)!=null?n:el.minSize,(r=i??e.columnDef.size)!=null?r:el.size),(o=e.columnDef.maxSize)!=null?o:el.maxSize)},e.getStart=te(n=>[n,Go(t,n),t.getState().columnSizing],(n,r)=>r.slice(0,e.getIndex(n)).reduce((o,i)=>o+i.getSize(),0),ne(t.options,"debugColumns")),e.getAfter=te(n=>[n,Go(t,n),t.getState().columnSizing],(n,r)=>r.slice(e.getIndex(n)+1).reduce((o,i)=>o+i.getSize(),0),ne(t.options,"debugColumns")),e.resetSize=()=>{t.setColumnSizing(n=>{let{[e.id]:r,...o}=n;return o})},e.getCanResize=()=>{var n,r;return((n=e.columnDef.enableResizing)!=null?n:!0)&&((r=t.options.enableColumnResizing)!=null?r:!0)},e.getIsResizing=()=>t.getState().columnSizingInfo.isResizingColumn===e.id},createHeader:(e,t)=>{e.getSize=()=>{let n=0;const r=o=>{if(o.subHeaders.length)o.subHeaders.forEach(r);else{var i;n+=(i=o.column.getSize())!=null?i:0}};return r(e),n},e.getStart=()=>{if(e.index>0){const n=e.headerGroup.headers[e.index-1];return n.getStart()+n.getSize()}return 0},e.getResizeHandler=n=>{const r=t.getColumn(e.column.id),o=r==null?void 0:r.getCanResize();return i=>{if(!r||!o||(i.persist==null||i.persist(),su(i)&&i.touches&&i.touches.length>1))return;const l=e.getSize(),s=e?e.getLeafHeaders().map(h=>[h.column.id,h.column.getSize()]):[[r.id,r.getSize()]],u=su(i)?Math.round(i.touches[0].clientX):i.clientX,a={},c=(h,d)=>{typeof d=="number"&&(t.setColumnSizingInfo(v=>{var x,F;const M=t.options.columnResizeDirection==="rtl"?-1:1,A=(d-((x=v==null?void 0:v.startOffset)!=null?x:0))*M,C=Math.max(A/((F=v==null?void 0:v.startSize)!=null?F:0),-.999999);return v.columnSizingStart.forEach(U=>{let[I,Y]=U;a[I]=Math.round(Math.max(Y+Y*C,0)*100)/100}),{...v,deltaOffset:A,deltaPercentage:C}}),(t.options.columnResizeMode==="onChange"||h==="end")&&t.setColumnSizing(v=>({...v,...a})))},f=h=>c("move",h),p=h=>{c("end",h),t.setColumnSizingInfo(d=>({...d,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]}))},g=n||typeof document<"u"?document:null,m={moveHandler:h=>f(h.clientX),upHandler:h=>{g==null||g.removeEventListener("mousemove",m.moveHandler),g==null||g.removeEventListener("mouseup",m.upHandler),p(h.clientX)}},y={moveHandler:h=>(h.cancelable&&(h.preventDefault(),h.stopPropagation()),f(h.touches[0].clientX),!1),upHandler:h=>{var d;g==null||g.removeEventListener("touchmove",y.moveHandler),g==null||g.removeEventListener("touchend",y.upHandler),h.cancelable&&(h.preventDefault(),h.stopPropagation()),p((d=h.touches[0])==null?void 0:d.clientX)}},E=fS()?{passive:!1}:!1;su(i)?(g==null||g.addEventListener("touchmove",y.moveHandler,E),g==null||g.addEventListener("touchend",y.upHandler,E)):(g==null||g.addEventListener("mousemove",m.moveHandler,E),g==null||g.addEventListener("mouseup",m.upHandler,E)),t.setColumnSizingInfo(h=>({...h,startOffset:u,startSize:l,deltaOffset:0,deltaPercentage:0,columnSizingStart:s,isResizingColumn:r.id}))}}},createTable:e=>{e.setColumnSizing=t=>e.options.onColumnSizingChange==null?void 0:e.options.onColumnSizingChange(t),e.setColumnSizingInfo=t=>e.options.onColumnSizingInfoChange==null?void 0:e.options.onColumnSizingInfoChange(t),e.resetColumnSizing=t=>{var n;e.setColumnSizing(t?{}:(n=e.initialState.columnSizing)!=null?n:{})},e.resetHeaderSizeInfo=t=>{var n;e.setColumnSizingInfo(t?lu():(n=e.initialState.columnSizingInfo)!=null?n:lu())},e.getTotalSize=()=>{var t,n;return(t=(n=e.getHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0},e.getLeftTotalSize=()=>{var t,n;return(t=(n=e.getLeftHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0},e.getCenterTotalSize=()=>{var t,n;return(t=(n=e.getCenterHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0},e.getRightTotalSize=()=>{var t,n;return(t=(n=e.getRightHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0}}};let tl=null;function fS(){if(typeof tl=="boolean")return tl;let e=!1;try{const t={get passive(){return e=!0,!1}},n=()=>{};window.addEventListener("test",n,t),window.removeEventListener("test",n)}catch{e=!1}return tl=e,tl}function su(e){return e.type==="touchstart"}const dS={getInitialState:e=>({columnVisibility:{},...e}),getDefaultOptions:e=>({onColumnVisibilityChange:Mt("columnVisibility",e)}),createColumn:(e,t)=>{e.toggleVisibility=n=>{e.getCanHide()&&t.setColumnVisibility(r=>({...r,[e.id]:n??!e.getIsVisible()}))},e.getIsVisible=()=>{var n,r;const o=e.columns;return(n=o.length?o.some(i=>i.getIsVisible()):(r=t.getState().columnVisibility)==null?void 0:r[e.id])!=null?n:!0},e.getCanHide=()=>{var n,r;return((n=e.columnDef.enableHiding)!=null?n:!0)&&((r=t.options.enableHiding)!=null?r:!0)},e.getToggleVisibilityHandler=()=>n=>{e.toggleVisibility==null||e.toggleVisibility(n.target.checked)}},createRow:(e,t)=>{e._getAllVisibleCells=te(()=>[e.getAllCells(),t.getState().columnVisibility],n=>n.filter(r=>r.column.getIsVisible()),ne(t.options,"debugRows")),e.getVisibleCells=te(()=>[e.getLeftVisibleCells(),e.getCenterVisibleCells(),e.getRightVisibleCells()],(n,r,o)=>[...n,...r,...o],ne(t.options,"debugRows"))},createTable:e=>{const t=(n,r)=>te(()=>[r(),r().filter(o=>o.getIsVisible()).map(o=>o.id).join("_")],o=>o.filter(i=>i.getIsVisible==null?void 0:i.getIsVisible()),ne(e.options,"debugColumns"));e.getVisibleFlatColumns=t("getVisibleFlatColumns",()=>e.getAllFlatColumns()),e.getVisibleLeafColumns=t("getVisibleLeafColumns",()=>e.getAllLeafColumns()),e.getLeftVisibleLeafColumns=t("getLeftVisibleLeafColumns",()=>e.getLeftLeafColumns()),e.getRightVisibleLeafColumns=t("getRightVisibleLeafColumns",()=>e.getRightLeafColumns()),e.getCenterVisibleLeafColumns=t("getCenterVisibleLeafColumns",()=>e.getCenterLeafColumns()),e.setColumnVisibility=n=>e.options.onColumnVisibilityChange==null?void 0:e.options.onColumnVisibilityChange(n),e.resetColumnVisibility=n=>{var r;e.setColumnVisibility(n?{}:(r=e.initialState.columnVisibility)!=null?r:{})},e.toggleAllColumnsVisible=n=>{var r;n=(r=n)!=null?r:!e.getIsAllColumnsVisible(),e.setColumnVisibility(e.getAllLeafColumns().reduce((o,i)=>({...o,[i.id]:n||!(i.getCanHide!=null&&i.getCanHide())}),{}))},e.getIsAllColumnsVisible=()=>!e.getAllLeafColumns().some(n=>!(n.getIsVisible!=null&&n.getIsVisible())),e.getIsSomeColumnsVisible=()=>e.getAllLeafColumns().some(n=>n.getIsVisible==null?void 0:n.getIsVisible()),e.getToggleAllColumnsVisibilityHandler=()=>n=>{var r;e.toggleAllColumnsVisible((r=n.target)==null?void 0:r.checked)}}};function Go(e,t){return t?t==="center"?e.getCenterVisibleLeafColumns():t==="left"?e.getLeftVisibleLeafColumns():e.getRightVisibleLeafColumns():e.getVisibleLeafColumns()}const pS={createTable:e=>{e._getGlobalFacetedRowModel=e.options.getFacetedRowModel&&e.options.getFacetedRowModel(e,"__global__"),e.getGlobalFacetedRowModel=()=>e.options.manualFiltering||!e._getGlobalFacetedRowModel?e.getPreFilteredRowModel():e._getGlobalFacetedRowModel(),e._getGlobalFacetedUniqueValues=e.options.getFacetedUniqueValues&&e.options.getFacetedUniqueValues(e,"__global__"),e.getGlobalFacetedUniqueValues=()=>e._getGlobalFacetedUniqueValues?e._getGlobalFacetedUniqueValues():new Map,e._getGlobalFacetedMinMaxValues=e.options.getFacetedMinMaxValues&&e.options.getFacetedMinMaxValues(e,"__global__"),e.getGlobalFacetedMinMaxValues=()=>{if(e._getGlobalFacetedMinMaxValues)return e._getGlobalFacetedMinMaxValues()}}},hS={getInitialState:e=>({globalFilter:void 0,...e}),getDefaultOptions:e=>({onGlobalFilterChange:Mt("globalFilter",e),globalFilterFn:"auto",getColumnCanGlobalFilter:t=>{var n;const r=(n=e.getCoreRowModel().flatRows[0])==null||(n=n._getAllCellsByColumnId()[t.id])==null?void 0:n.getValue();return typeof r=="string"||typeof r=="number"}}),createColumn:(e,t)=>{e.getCanGlobalFilter=()=>{var n,r,o,i;return((n=e.columnDef.enableGlobalFilter)!=null?n:!0)&&((r=t.options.enableGlobalFilter)!=null?r:!0)&&((o=t.options.enableFilters)!=null?o:!0)&&((i=t.options.getColumnCanGlobalFilter==null?void 0:t.options.getColumnCanGlobalFilter(e))!=null?i:!0)&&!!e.accessorFn}},createTable:e=>{e.getGlobalAutoFilterFn=()=>vn.includesString,e.getGlobalFilterFn=()=>{var t,n;const{globalFilterFn:r}=e.options;return vs(r)?r:r==="auto"?e.getGlobalAutoFilterFn():(t=(n=e.options.filterFns)==null?void 0:n[r])!=null?t:vn[r]},e.setGlobalFilter=t=>{e.options.onGlobalFilterChange==null||e.options.onGlobalFilterChange(t)},e.resetGlobalFilter=t=>{e.setGlobalFilter(t?void 0:e.initialState.globalFilter)}}},gS={getInitialState:e=>({expanded:{},...e}),getDefaultOptions:e=>({onExpandedChange:Mt("expanded",e),paginateExpandedRows:!0}),createTable:e=>{let t=!1,n=!1;e._autoResetExpanded=()=>{var r,o;if(!t){e._queue(()=>{t=!0});return}if((r=(o=e.options.autoResetAll)!=null?o:e.options.autoResetExpanded)!=null?r:!e.options.manualExpanding){if(n)return;n=!0,e._queue(()=>{e.resetExpanded(),n=!1})}},e.setExpanded=r=>e.options.onExpandedChange==null?void 0:e.options.onExpandedChange(r),e.toggleAllRowsExpanded=r=>{r??!e.getIsAllRowsExpanded()?e.setExpanded(!0):e.setExpanded({})},e.resetExpanded=r=>{var o,i;e.setExpanded(r?{}:(o=(i=e.initialState)==null?void 0:i.expanded)!=null?o:{})},e.getCanSomeRowsExpand=()=>e.getPrePaginationRowModel().flatRows.some(r=>r.getCanExpand()),e.getToggleAllRowsExpandedHandler=()=>r=>{r.persist==null||r.persist(),e.toggleAllRowsExpanded()},e.getIsSomeRowsExpanded=()=>{const r=e.getState().expanded;return r===!0||Object.values(r).some(Boolean)},e.getIsAllRowsExpanded=()=>{const r=e.getState().expanded;return typeof r=="boolean"?r===!0:!(!Object.keys(r).length||e.getRowModel().flatRows.some(o=>!o.getIsExpanded()))},e.getExpandedDepth=()=>{let r=0;return(e.getState().expanded===!0?Object.keys(e.getRowModel().rowsById):Object.keys(e.getState().expanded)).forEach(i=>{const l=i.split(".");r=Math.max(r,l.length)}),r},e.getPreExpandedRowModel=()=>e.getSortedRowModel(),e.getExpandedRowModel=()=>(!e._getExpandedRowModel&&e.options.getExpandedRowModel&&(e._getExpandedRowModel=e.options.getExpandedRowModel(e)),e.options.manualExpanding||!e._getExpandedRowModel?e.getPreExpandedRowModel():e._getExpandedRowModel())},createRow:(e,t)=>{e.toggleExpanded=n=>{t.setExpanded(r=>{var o;const i=r===!0?!0:!!(r!=null&&r[e.id]);let l={};if(r===!0?Object.keys(t.getRowModel().rowsById).forEach(s=>{l[s]=!0}):l=r,n=(o=n)!=null?o:!i,!i&&n)return{...l,[e.id]:!0};if(i&&!n){const{[e.id]:s,...u}=l;return u}return r})},e.getIsExpanded=()=>{var n;const r=t.getState().expanded;return!!((n=t.options.getIsRowExpanded==null?void 0:t.options.getIsRowExpanded(e))!=null?n:r===!0||r!=null&&r[e.id])},e.getCanExpand=()=>{var n,r,o;return(n=t.options.getRowCanExpand==null?void 0:t.options.getRowCanExpand(e))!=null?n:((r=t.options.enableExpanding)!=null?r:!0)&&!!((o=e.subRows)!=null&&o.length)},e.getIsAllParentsExpanded=()=>{let n=!0,r=e;for(;n&&r.parentId;)r=t.getRow(r.parentId,!0),n=r.getIsExpanded();return n},e.getToggleExpandedHandler=()=>{const n=e.getCanExpand();return()=>{n&&e.toggleExpanded()}}}},pa=0,ha=10,uu=()=>({pageIndex:pa,pageSize:ha}),mS={getInitialState:e=>({...e,pagination:{...uu(),...e==null?void 0:e.pagination}}),getDefaultOptions:e=>({onPaginationChange:Mt("pagination",e)}),createTable:e=>{let t=!1,n=!1;e._autoResetPageIndex=()=>{var r,o;if(!t){e._queue(()=>{t=!0});return}if((r=(o=e.options.autoResetAll)!=null?o:e.options.autoResetPageIndex)!=null?r:!e.options.manualPagination){if(n)return;n=!0,e._queue(()=>{e.resetPageIndex(),n=!1})}},e.setPagination=r=>{const o=i=>Bn(r,i);return e.options.onPaginationChange==null?void 0:e.options.onPaginationChange(o)},e.resetPagination=r=>{var o;e.setPagination(r?uu():(o=e.initialState.pagination)!=null?o:uu())},e.setPageIndex=r=>{e.setPagination(o=>{let i=Bn(r,o.pageIndex);const l=typeof e.options.pageCount>"u"||e.options.pageCount===-1?Number.MAX_SAFE_INTEGER:e.options.pageCount-1;return i=Math.max(0,Math.min(i,l)),{...o,pageIndex:i}})},e.resetPageIndex=r=>{var o,i;e.setPageIndex(r?pa:(o=(i=e.initialState)==null||(i=i.pagination)==null?void 0:i.pageIndex)!=null?o:pa)},e.resetPageSize=r=>{var o,i;e.setPageSize(r?ha:(o=(i=e.initialState)==null||(i=i.pagination)==null?void 0:i.pageSize)!=null?o:ha)},e.setPageSize=r=>{e.setPagination(o=>{const i=Math.max(1,Bn(r,o.pageSize)),l=o.pageSize*o.pageIndex,s=Math.floor(l/i);return{...o,pageIndex:s,pageSize:i}})},e.setPageCount=r=>e.setPagination(o=>{var i;let l=Bn(r,(i=e.options.pageCount)!=null?i:-1);return typeof l=="number"&&(l=Math.max(-1,l)),{...o,pageCount:l}}),e.getPageOptions=te(()=>[e.getPageCount()],r=>{let o=[];return r&&r>0&&(o=[...new Array(r)].fill(null).map((i,l)=>l)),o},ne(e.options,"debugTable")),e.getCanPreviousPage=()=>e.getState().pagination.pageIndex>0,e.getCanNextPage=()=>{const{pageIndex:r}=e.getState().pagination,o=e.getPageCount();return o===-1?!0:o===0?!1:re.setPageIndex(r=>r-1),e.nextPage=()=>e.setPageIndex(r=>r+1),e.firstPage=()=>e.setPageIndex(0),e.lastPage=()=>e.setPageIndex(e.getPageCount()-1),e.getPrePaginationRowModel=()=>e.getExpandedRowModel(),e.getPaginationRowModel=()=>(!e._getPaginationRowModel&&e.options.getPaginationRowModel&&(e._getPaginationRowModel=e.options.getPaginationRowModel(e)),e.options.manualPagination||!e._getPaginationRowModel?e.getPrePaginationRowModel():e._getPaginationRowModel()),e.getPageCount=()=>{var r;return(r=e.options.pageCount)!=null?r:Math.ceil(e.getRowCount()/e.getState().pagination.pageSize)},e.getRowCount=()=>{var r;return(r=e.options.rowCount)!=null?r:e.getPrePaginationRowModel().rows.length}}},au=()=>({top:[],bottom:[]}),vS={getInitialState:e=>({rowPinning:au(),...e}),getDefaultOptions:e=>({onRowPinningChange:Mt("rowPinning",e)}),createRow:(e,t)=>{e.pin=(n,r,o)=>{const i=r?e.getLeafRows().map(u=>{let{id:a}=u;return a}):[],l=o?e.getParentRows().map(u=>{let{id:a}=u;return a}):[],s=new Set([...l,e.id,...i]);t.setRowPinning(u=>{var a,c;if(n==="bottom"){var f,p;return{top:((f=u==null?void 0:u.top)!=null?f:[]).filter(y=>!(s!=null&&s.has(y))),bottom:[...((p=u==null?void 0:u.bottom)!=null?p:[]).filter(y=>!(s!=null&&s.has(y))),...Array.from(s)]}}if(n==="top"){var g,m;return{top:[...((g=u==null?void 0:u.top)!=null?g:[]).filter(y=>!(s!=null&&s.has(y))),...Array.from(s)],bottom:((m=u==null?void 0:u.bottom)!=null?m:[]).filter(y=>!(s!=null&&s.has(y)))}}return{top:((a=u==null?void 0:u.top)!=null?a:[]).filter(y=>!(s!=null&&s.has(y))),bottom:((c=u==null?void 0:u.bottom)!=null?c:[]).filter(y=>!(s!=null&&s.has(y)))}})},e.getCanPin=()=>{var n;const{enableRowPinning:r,enablePinning:o}=t.options;return typeof r=="function"?r(e):(n=r??o)!=null?n:!0},e.getIsPinned=()=>{const n=[e.id],{top:r,bottom:o}=t.getState().rowPinning,i=n.some(s=>r==null?void 0:r.includes(s)),l=n.some(s=>o==null?void 0:o.includes(s));return i?"top":l?"bottom":!1},e.getPinnedIndex=()=>{var n,r;const o=e.getIsPinned();if(!o)return-1;const i=(n=o==="top"?t.getTopRows():t.getBottomRows())==null?void 0:n.map(l=>{let{id:s}=l;return s});return(r=i==null?void 0:i.indexOf(e.id))!=null?r:-1}},createTable:e=>{e.setRowPinning=t=>e.options.onRowPinningChange==null?void 0:e.options.onRowPinningChange(t),e.resetRowPinning=t=>{var n,r;return e.setRowPinning(t?au():(n=(r=e.initialState)==null?void 0:r.rowPinning)!=null?n:au())},e.getIsSomeRowsPinned=t=>{var n;const r=e.getState().rowPinning;if(!t){var o,i;return!!((o=r.top)!=null&&o.length||(i=r.bottom)!=null&&i.length)}return!!((n=r[t])!=null&&n.length)},e._getPinnedRows=(t,n,r)=>{var o;return((o=e.options.keepPinnedRows)==null||o?(n??[]).map(l=>{const s=e.getRow(l,!0);return s.getIsAllParentsExpanded()?s:null}):(n??[]).map(l=>t.find(s=>s.id===l))).filter(Boolean).map(l=>({...l,position:r}))},e.getTopRows=te(()=>[e.getRowModel().rows,e.getState().rowPinning.top],(t,n)=>e._getPinnedRows(t,n,"top"),ne(e.options,"debugRows")),e.getBottomRows=te(()=>[e.getRowModel().rows,e.getState().rowPinning.bottom],(t,n)=>e._getPinnedRows(t,n,"bottom"),ne(e.options,"debugRows")),e.getCenterRows=te(()=>[e.getRowModel().rows,e.getState().rowPinning.top,e.getState().rowPinning.bottom],(t,n,r)=>{const o=new Set([...n??[],...r??[]]);return t.filter(i=>!o.has(i.id))},ne(e.options,"debugRows"))}},yS={getInitialState:e=>({rowSelection:{},...e}),getDefaultOptions:e=>({onRowSelectionChange:Mt("rowSelection",e),enableRowSelection:!0,enableMultiRowSelection:!0,enableSubRowSelection:!0}),createTable:e=>{e.setRowSelection=t=>e.options.onRowSelectionChange==null?void 0:e.options.onRowSelectionChange(t),e.resetRowSelection=t=>{var n;return e.setRowSelection(t?{}:(n=e.initialState.rowSelection)!=null?n:{})},e.toggleAllRowsSelected=t=>{e.setRowSelection(n=>{t=typeof t<"u"?t:!e.getIsAllRowsSelected();const r={...n},o=e.getPreGroupedRowModel().flatRows;return t?o.forEach(i=>{i.getCanSelect()&&(r[i.id]=!0)}):o.forEach(i=>{delete r[i.id]}),r})},e.toggleAllPageRowsSelected=t=>e.setRowSelection(n=>{const r=typeof t<"u"?t:!e.getIsAllPageRowsSelected(),o={...n};return e.getRowModel().rows.forEach(i=>{ga(o,i.id,r,!0,e)}),o}),e.getPreSelectedRowModel=()=>e.getCoreRowModel(),e.getSelectedRowModel=te(()=>[e.getState().rowSelection,e.getCoreRowModel()],(t,n)=>Object.keys(t).length?cu(e,n):{rows:[],flatRows:[],rowsById:{}},ne(e.options,"debugTable")),e.getFilteredSelectedRowModel=te(()=>[e.getState().rowSelection,e.getFilteredRowModel()],(t,n)=>Object.keys(t).length?cu(e,n):{rows:[],flatRows:[],rowsById:{}},ne(e.options,"debugTable")),e.getGroupedSelectedRowModel=te(()=>[e.getState().rowSelection,e.getSortedRowModel()],(t,n)=>Object.keys(t).length?cu(e,n):{rows:[],flatRows:[],rowsById:{}},ne(e.options,"debugTable")),e.getIsAllRowsSelected=()=>{const t=e.getFilteredRowModel().flatRows,{rowSelection:n}=e.getState();let r=!!(t.length&&Object.keys(n).length);return r&&t.some(o=>o.getCanSelect()&&!n[o.id])&&(r=!1),r},e.getIsAllPageRowsSelected=()=>{const t=e.getPaginationRowModel().flatRows.filter(o=>o.getCanSelect()),{rowSelection:n}=e.getState();let r=!!t.length;return r&&t.some(o=>!n[o.id])&&(r=!1),r},e.getIsSomeRowsSelected=()=>{var t;const n=Object.keys((t=e.getState().rowSelection)!=null?t:{}).length;return n>0&&n{const t=e.getPaginationRowModel().flatRows;return e.getIsAllPageRowsSelected()?!1:t.filter(n=>n.getCanSelect()).some(n=>n.getIsSelected()||n.getIsSomeSelected())},e.getToggleAllRowsSelectedHandler=()=>t=>{e.toggleAllRowsSelected(t.target.checked)},e.getToggleAllPageRowsSelectedHandler=()=>t=>{e.toggleAllPageRowsSelected(t.target.checked)}},createRow:(e,t)=>{e.toggleSelected=(n,r)=>{const o=e.getIsSelected();t.setRowSelection(i=>{var l;if(n=typeof n<"u"?n:!o,e.getCanSelect()&&o===n)return i;const s={...i};return ga(s,e.id,n,(l=r==null?void 0:r.selectChildren)!=null?l:!0,t),s})},e.getIsSelected=()=>{const{rowSelection:n}=t.getState();return Fc(e,n)},e.getIsSomeSelected=()=>{const{rowSelection:n}=t.getState();return ma(e,n)==="some"},e.getIsAllSubRowsSelected=()=>{const{rowSelection:n}=t.getState();return ma(e,n)==="all"},e.getCanSelect=()=>{var n;return typeof t.options.enableRowSelection=="function"?t.options.enableRowSelection(e):(n=t.options.enableRowSelection)!=null?n:!0},e.getCanSelectSubRows=()=>{var n;return typeof t.options.enableSubRowSelection=="function"?t.options.enableSubRowSelection(e):(n=t.options.enableSubRowSelection)!=null?n:!0},e.getCanMultiSelect=()=>{var n;return typeof t.options.enableMultiRowSelection=="function"?t.options.enableMultiRowSelection(e):(n=t.options.enableMultiRowSelection)!=null?n:!0},e.getToggleSelectedHandler=()=>{const n=e.getCanSelect();return r=>{var o;n&&e.toggleSelected((o=r.target)==null?void 0:o.checked)}}}},ga=(e,t,n,r,o)=>{var i;const l=o.getRow(t,!0);n?(l.getCanMultiSelect()||Object.keys(e).forEach(s=>delete e[s]),l.getCanSelect()&&(e[t]=!0)):delete e[t],r&&(i=l.subRows)!=null&&i.length&&l.getCanSelectSubRows()&&l.subRows.forEach(s=>ga(e,s.id,n,r,o))};function cu(e,t){const n=e.getState().rowSelection,r=[],o={},i=function(l,s){return l.map(u=>{var a;const c=Fc(u,n);if(c&&(r.push(u),o[u.id]=u),(a=u.subRows)!=null&&a.length&&(u={...u,subRows:i(u.subRows)}),c)return u}).filter(Boolean)};return{rows:i(t.rows),flatRows:r,rowsById:o}}function Fc(e,t){var n;return(n=t[e.id])!=null?n:!1}function ma(e,t,n){var r;if(!((r=e.subRows)!=null&&r.length))return!1;let o=!0,i=!1;return e.subRows.forEach(l=>{if(!(i&&!o)&&(l.getCanSelect()&&(Fc(l,t)?i=!0:o=!1),l.subRows&&l.subRows.length)){const s=ma(l,t);s==="all"?i=!0:(s==="some"&&(i=!0),o=!1)}}),o?"all":i?"some":!1}const va=/([0-9]+)/gm,wS=(e,t,n)=>$g(bn(e.getValue(n)).toLowerCase(),bn(t.getValue(n)).toLowerCase()),SS=(e,t,n)=>$g(bn(e.getValue(n)),bn(t.getValue(n))),CS=(e,t,n)=>Dc(bn(e.getValue(n)).toLowerCase(),bn(t.getValue(n)).toLowerCase()),RS=(e,t,n)=>Dc(bn(e.getValue(n)),bn(t.getValue(n))),ES=(e,t,n)=>{const r=e.getValue(n),o=t.getValue(n);return r>o?1:rDc(e.getValue(n),t.getValue(n));function Dc(e,t){return e===t?0:e>t?1:-1}function bn(e){return typeof e=="number"?isNaN(e)||e===1/0||e===-1/0?"":String(e):typeof e=="string"?e:""}function $g(e,t){const n=e.split(va).filter(Boolean),r=t.split(va).filter(Boolean);for(;n.length&&r.length;){const o=n.shift(),i=r.shift(),l=parseInt(o,10),s=parseInt(i,10),u=[l,s].sort();if(isNaN(u[0])){if(o>i)return 1;if(i>o)return-1;continue}if(isNaN(u[1]))return isNaN(l)?-1:1;if(l>s)return 1;if(s>l)return-1}return n.length-r.length}const ko={alphanumeric:wS,alphanumericCaseSensitive:SS,text:CS,textCaseSensitive:RS,datetime:ES,basic:xS},_S={getInitialState:e=>({sorting:[],...e}),getDefaultColumnDef:()=>({sortingFn:"auto",sortUndefined:1}),getDefaultOptions:e=>({onSortingChange:Mt("sorting",e),isMultiSortEvent:t=>t.shiftKey}),createColumn:(e,t)=>{e.getAutoSortingFn=()=>{const n=t.getFilteredRowModel().flatRows.slice(10);let r=!1;for(const o of n){const i=o==null?void 0:o.getValue(e.id);if(Object.prototype.toString.call(i)==="[object Date]")return ko.datetime;if(typeof i=="string"&&(r=!0,i.split(va).length>1))return ko.alphanumeric}return r?ko.text:ko.basic},e.getAutoSortDir=()=>{const n=t.getFilteredRowModel().flatRows[0];return typeof(n==null?void 0:n.getValue(e.id))=="string"?"asc":"desc"},e.getSortingFn=()=>{var n,r;if(!e)throw new Error;return vs(e.columnDef.sortingFn)?e.columnDef.sortingFn:e.columnDef.sortingFn==="auto"?e.getAutoSortingFn():(n=(r=t.options.sortingFns)==null?void 0:r[e.columnDef.sortingFn])!=null?n:ko[e.columnDef.sortingFn]},e.toggleSorting=(n,r)=>{const o=e.getNextSortingOrder(),i=typeof n<"u"&&n!==null;t.setSorting(l=>{const s=l==null?void 0:l.find(g=>g.id===e.id),u=l==null?void 0:l.findIndex(g=>g.id===e.id);let a=[],c,f=i?n:o==="desc";if(l!=null&&l.length&&e.getCanMultiSort()&&r?s?c="toggle":c="add":l!=null&&l.length&&u!==l.length-1?c="replace":s?c="toggle":c="replace",c==="toggle"&&(i||o||(c="remove")),c==="add"){var p;a=[...l,{id:e.id,desc:f}],a.splice(0,a.length-((p=t.options.maxMultiSortColCount)!=null?p:Number.MAX_SAFE_INTEGER))}else c==="toggle"?a=l.map(g=>g.id===e.id?{...g,desc:f}:g):c==="remove"?a=l.filter(g=>g.id!==e.id):a=[{id:e.id,desc:f}];return a})},e.getFirstSortDir=()=>{var n,r;return((n=(r=e.columnDef.sortDescFirst)!=null?r:t.options.sortDescFirst)!=null?n:e.getAutoSortDir()==="desc")?"desc":"asc"},e.getNextSortingOrder=n=>{var r,o;const i=e.getFirstSortDir(),l=e.getIsSorted();return l?l!==i&&((r=t.options.enableSortingRemoval)==null||r)&&(!(n&&(o=t.options.enableMultiRemove)!=null)||o)?!1:l==="desc"?"asc":"desc":i},e.getCanSort=()=>{var n,r;return((n=e.columnDef.enableSorting)!=null?n:!0)&&((r=t.options.enableSorting)!=null?r:!0)&&!!e.accessorFn},e.getCanMultiSort=()=>{var n,r;return(n=(r=e.columnDef.enableMultiSort)!=null?r:t.options.enableMultiSort)!=null?n:!!e.accessorFn},e.getIsSorted=()=>{var n;const r=(n=t.getState().sorting)==null?void 0:n.find(o=>o.id===e.id);return r?r.desc?"desc":"asc":!1},e.getSortIndex=()=>{var n,r;return(n=(r=t.getState().sorting)==null?void 0:r.findIndex(o=>o.id===e.id))!=null?n:-1},e.clearSorting=()=>{t.setSorting(n=>n!=null&&n.length?n.filter(r=>r.id!==e.id):[])},e.getToggleSortingHandler=()=>{const n=e.getCanSort();return r=>{n&&(r.persist==null||r.persist(),e.toggleSorting==null||e.toggleSorting(void 0,e.getCanMultiSort()?t.options.isMultiSortEvent==null?void 0:t.options.isMultiSortEvent(r):!1))}}},createTable:e=>{e.setSorting=t=>e.options.onSortingChange==null?void 0:e.options.onSortingChange(t),e.resetSorting=t=>{var n,r;e.setSorting(t?[]:(n=(r=e.initialState)==null?void 0:r.sorting)!=null?n:[])},e.getPreSortedRowModel=()=>e.getGroupedRowModel(),e.getSortedRowModel=()=>(!e._getSortedRowModel&&e.options.getSortedRowModel&&(e._getSortedRowModel=e.options.getSortedRowModel(e)),e.options.manualSorting||!e._getSortedRowModel?e.getPreSortedRowModel():e._getSortedRowModel())}},PS=[Qw,dS,uS,aS,Xw,Jw,pS,hS,_S,lS,gS,mS,vS,yS,cS];function kS(e){var t,n;const r=[...PS,...(t=e._features)!=null?t:[]];let o={_features:r};const i=o._features.reduce((p,g)=>Object.assign(p,g.getDefaultOptions==null?void 0:g.getDefaultOptions(o)),{}),l=p=>o.options.mergeOptions?o.options.mergeOptions(i,p):{...i,...p};let u={...{},...(n=e.initialState)!=null?n:{}};o._features.forEach(p=>{var g;u=(g=p.getInitialState==null?void 0:p.getInitialState(u))!=null?g:u});const a=[];let c=!1;const f={_features:r,options:{...i,...e},initialState:u,_queue:p=>{a.push(p),c||(c=!0,Promise.resolve().then(()=>{for(;a.length;)a.shift()();c=!1}).catch(g=>setTimeout(()=>{throw g})))},reset:()=>{o.setState(o.initialState)},setOptions:p=>{const g=Bn(p,o.options);o.options=l(g)},getState:()=>o.options.state,setState:p=>{o.options.onStateChange==null||o.options.onStateChange(p)},_getRowId:(p,g,m)=>{var y;return(y=o.options.getRowId==null?void 0:o.options.getRowId(p,g,m))!=null?y:`${m?[m.id,g].join("."):g}`},getCoreRowModel:()=>(o._getCoreRowModel||(o._getCoreRowModel=o.options.getCoreRowModel(o)),o._getCoreRowModel()),getRowModel:()=>o.getPaginationRowModel(),getRow:(p,g)=>{let m=(g?o.getPrePaginationRowModel():o.getRowModel()).rowsById[p];if(!m&&(m=o.getCoreRowModel().rowsById[p],!m))throw new Error;return m},_getDefaultColumnDef:te(()=>[o.options.defaultColumn],p=>{var g;return p=(g=p)!=null?g:{},{header:m=>{const y=m.header.column.columnDef;return y.accessorKey?y.accessorKey:y.accessorFn?y.id:null},cell:m=>{var y,E;return(y=(E=m.renderValue())==null||E.toString==null?void 0:E.toString())!=null?y:null},...o._features.reduce((m,y)=>Object.assign(m,y.getDefaultColumnDef==null?void 0:y.getDefaultColumnDef()),{}),...p}},ne(e,"debugColumns")),_getColumnDefs:()=>o.options.columns,getAllColumns:te(()=>[o._getColumnDefs()],p=>{const g=function(m,y,E){return E===void 0&&(E=0),m.map(h=>{const d=Kw(o,h,E,y),v=h;return d.columns=v.columns?g(v.columns,d,E+1):[],d})};return g(p)},ne(e,"debugColumns")),getAllFlatColumns:te(()=>[o.getAllColumns()],p=>p.flatMap(g=>g.getFlatColumns()),ne(e,"debugColumns")),_getAllFlatColumnsById:te(()=>[o.getAllFlatColumns()],p=>p.reduce((g,m)=>(g[m.id]=m,g),{}),ne(e,"debugColumns")),getAllLeafColumns:te(()=>[o.getAllColumns(),o._getOrderColumnsFn()],(p,g)=>{let m=p.flatMap(y=>y.getLeafColumns());return g(m)},ne(e,"debugColumns")),getColumn:p=>o._getAllFlatColumnsById()[p]};Object.assign(o,f);for(let p=0;pte(()=>[e.options.data],t=>{const n={rows:[],flatRows:[],rowsById:{}},r=function(o,i,l){i===void 0&&(i=0);const s=[];for(let a=0;ae._autoResetPageIndex()))}/** - * react-table - * - * Copyright (c) TanStack - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function Pd(e,t){return e?DS(e)?T.createElement(e,t):e:null}function DS(e){return LS(e)||typeof e=="function"||TS(e)}function LS(e){return typeof e=="function"&&(()=>{const t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function TS(e){return typeof e=="object"&&typeof e.$$typeof=="symbol"&&["react.memo","react.forward_ref"].includes(e.$$typeof.description)}function MS(e){const t={state:{},onStateChange:()=>{},renderFallbackValue:null,...e},[n]=T.useState(()=>({current:kS(t)})),[r,o]=T.useState(()=>n.current.initialState);return n.current.setOptions(i=>({...i,...e,state:{...r,...e.state},onStateChange:l=>{o(l),e.onStateChange==null||e.onStateChange(l)}})),n.current}function jg(e,t){return function(){return e.apply(t,arguments)}}const{toString:OS}=Object.prototype,{getPrototypeOf:Lc}=Object,ys=(e=>t=>{const n=OS.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),nn=e=>(e=e.toLowerCase(),t=>ys(t)===e),ws=e=>t=>typeof t===e,{isArray:fo}=Array,fi=ws("undefined");function NS(e){return e!==null&&!fi(e)&&e.constructor!==null&&!fi(e.constructor)&&Lt(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Ug=nn("ArrayBuffer");function AS(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Ug(e.buffer),t}const IS=ws("string"),Lt=ws("function"),Bg=ws("number"),Ss=e=>e!==null&&typeof e=="object",zS=e=>e===!0||e===!1,ml=e=>{if(ys(e)!=="object")return!1;const t=Lc(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},VS=nn("Date"),$S=nn("File"),jS=nn("Blob"),US=nn("FileList"),BS=e=>Ss(e)&&Lt(e.pipe),HS=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||Lt(e.append)&&((t=ys(e))==="formdata"||t==="object"&&Lt(e.toString)&&e.toString()==="[object FormData]"))},GS=nn("URLSearchParams"),[WS,KS,QS,qS]=["ReadableStream","Request","Response","Headers"].map(nn),XS=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Si(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,o;if(typeof e!="object"&&(e=[e]),fo(e))for(r=0,o=e.length;r0;)if(o=n[r],t===o.toLowerCase())return o;return null}const gr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Gg=e=>!fi(e)&&e!==gr;function ya(){const{caseless:e}=Gg(this)&&this||{},t={},n=(r,o)=>{const i=e&&Hg(t,o)||o;ml(t[i])&&ml(r)?t[i]=ya(t[i],r):ml(r)?t[i]=ya({},r):fo(r)?t[i]=r.slice():t[i]=r};for(let r=0,o=arguments.length;r(Si(t,(o,i)=>{n&&Lt(o)?e[i]=jg(o,n):e[i]=o},{allOwnKeys:r}),e),YS=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),ZS=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},bS=(e,t,n,r)=>{let o,i,l;const s={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)l=o[i],(!r||r(l,e,t))&&!s[l]&&(t[l]=e[l],s[l]=!0);e=n!==!1&&Lc(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},eC=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},tC=e=>{if(!e)return null;if(fo(e))return e;let t=e.length;if(!Bg(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},nC=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Lc(Uint8Array)),rC=(e,t)=>{const r=(e&&e[Symbol.iterator]).call(e);let o;for(;(o=r.next())&&!o.done;){const i=o.value;t.call(e,i[0],i[1])}},oC=(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},iC=nn("HTMLFormElement"),lC=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,o){return r.toUpperCase()+o}),kd=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),sC=nn("RegExp"),Wg=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};Si(n,(o,i)=>{let l;(l=t(o,i,e))!==!1&&(r[i]=l||o)}),Object.defineProperties(e,r)},uC=e=>{Wg(e,(t,n)=>{if(Lt(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const r=e[n];if(Lt(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},aC=(e,t)=>{const n={},r=o=>{o.forEach(i=>{n[i]=!0})};return fo(e)?r(e):r(String(e).split(t)),n},cC=()=>{},fC=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,fu="abcdefghijklmnopqrstuvwxyz",Fd="0123456789",Kg={DIGIT:Fd,ALPHA:fu,ALPHA_DIGIT:fu+fu.toUpperCase()+Fd},dC=(e=16,t=Kg.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n};function pC(e){return!!(e&&Lt(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const hC=e=>{const t=new Array(10),n=(r,o)=>{if(Ss(r)){if(t.indexOf(r)>=0)return;if(!("toJSON"in r)){t[o]=r;const i=fo(r)?[]:{};return Si(r,(l,s)=>{const u=n(l,o+1);!fi(u)&&(i[s]=u)}),t[o]=void 0,i}}return r};return n(e,0)},gC=nn("AsyncFunction"),mC=e=>e&&(Ss(e)||Lt(e))&&Lt(e.then)&&Lt(e.catch),Qg=((e,t)=>e?setImmediate:t?((n,r)=>(gr.addEventListener("message",({source:o,data:i})=>{o===gr&&i===n&&r.length&&r.shift()()},!1),o=>{r.push(o),gr.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",Lt(gr.postMessage)),vC=typeof queueMicrotask<"u"?queueMicrotask.bind(gr):typeof process<"u"&&process.nextTick||Qg,k={isArray:fo,isArrayBuffer:Ug,isBuffer:NS,isFormData:HS,isArrayBufferView:AS,isString:IS,isNumber:Bg,isBoolean:zS,isObject:Ss,isPlainObject:ml,isReadableStream:WS,isRequest:KS,isResponse:QS,isHeaders:qS,isUndefined:fi,isDate:VS,isFile:$S,isBlob:jS,isRegExp:sC,isFunction:Lt,isStream:BS,isURLSearchParams:GS,isTypedArray:nC,isFileList:US,forEach:Si,merge:ya,extend:JS,trim:XS,stripBOM:YS,inherits:ZS,toFlatObject:bS,kindOf:ys,kindOfTest:nn,endsWith:eC,toArray:tC,forEachEntry:rC,matchAll:oC,isHTMLForm:iC,hasOwnProperty:kd,hasOwnProp:kd,reduceDescriptors:Wg,freezeMethods:uC,toObjectSet:aC,toCamelCase:lC,noop:cC,toFiniteNumber:fC,findKey:Hg,global:gr,isContextDefined:Gg,ALPHABET:Kg,generateString:dC,isSpecCompliantForm:pC,toJSONObject:hC,isAsyncFn:gC,isThenable:mC,setImmediate:Qg,asap:vC};function ie(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status?o.status:null)}k.inherits(ie,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:k.toJSONObject(this.config),code:this.code,status:this.status}}});const qg=ie.prototype,Xg={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{Xg[e]={value:e}});Object.defineProperties(ie,Xg);Object.defineProperty(qg,"isAxiosError",{value:!0});ie.from=(e,t,n,r,o,i)=>{const l=Object.create(qg);return k.toFlatObject(e,l,function(u){return u!==Error.prototype},s=>s!=="isAxiosError"),ie.call(l,e.message,t,n,r,o),l.cause=e,l.name=e.name,i&&Object.assign(l,i),l};const yC=null;function wa(e){return k.isPlainObject(e)||k.isArray(e)}function Jg(e){return k.endsWith(e,"[]")?e.slice(0,-2):e}function Dd(e,t,n){return e?e.concat(t).map(function(o,i){return o=Jg(o),!n&&i?"["+o+"]":o}).join(n?".":""):t}function wC(e){return k.isArray(e)&&!e.some(wa)}const SC=k.toFlatObject(k,{},null,function(t){return/^is[A-Z]/.test(t)});function Cs(e,t,n){if(!k.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=k.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(y,E){return!k.isUndefined(E[y])});const r=n.metaTokens,o=n.visitor||c,i=n.dots,l=n.indexes,u=(n.Blob||typeof Blob<"u"&&Blob)&&k.isSpecCompliantForm(t);if(!k.isFunction(o))throw new TypeError("visitor must be a function");function a(m){if(m===null)return"";if(k.isDate(m))return m.toISOString();if(!u&&k.isBlob(m))throw new ie("Blob is not supported. Use a Buffer instead.");return k.isArrayBuffer(m)||k.isTypedArray(m)?u&&typeof Blob=="function"?new Blob([m]):Buffer.from(m):m}function c(m,y,E){let h=m;if(m&&!E&&typeof m=="object"){if(k.endsWith(y,"{}"))y=r?y:y.slice(0,-2),m=JSON.stringify(m);else if(k.isArray(m)&&wC(m)||(k.isFileList(m)||k.endsWith(y,"[]"))&&(h=k.toArray(m)))return y=Jg(y),h.forEach(function(v,x){!(k.isUndefined(v)||v===null)&&t.append(l===!0?Dd([y],x,i):l===null?y:y+"[]",a(v))}),!1}return wa(m)?!0:(t.append(Dd(E,y,i),a(m)),!1)}const f=[],p=Object.assign(SC,{defaultVisitor:c,convertValue:a,isVisitable:wa});function g(m,y){if(!k.isUndefined(m)){if(f.indexOf(m)!==-1)throw Error("Circular reference detected in "+y.join("."));f.push(m),k.forEach(m,function(h,d){(!(k.isUndefined(h)||h===null)&&o.call(t,h,k.isString(d)?d.trim():d,y,p))===!0&&g(h,y?y.concat(d):[d])}),f.pop()}}if(!k.isObject(e))throw new TypeError("data must be an object");return g(e),t}function Ld(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function Tc(e,t){this._pairs=[],e&&Cs(e,this,t)}const Yg=Tc.prototype;Yg.append=function(t,n){this._pairs.push([t,n])};Yg.toString=function(t){const n=t?function(r){return t.call(this,r,Ld)}:Ld;return this._pairs.map(function(o){return n(o[0])+"="+n(o[1])},"").join("&")};function CC(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Zg(e,t,n){if(!t)return e;const r=n&&n.encode||CC,o=n&&n.serialize;let i;if(o?i=o(t,n):i=k.isURLSearchParams(t)?t.toString():new Tc(t,n).toString(r),i){const l=e.indexOf("#");l!==-1&&(e=e.slice(0,l)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}class Td{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){k.forEach(this.handlers,function(r){r!==null&&t(r)})}}const bg={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},RC=typeof URLSearchParams<"u"?URLSearchParams:Tc,EC=typeof FormData<"u"?FormData:null,xC=typeof Blob<"u"?Blob:null,_C={isBrowser:!0,classes:{URLSearchParams:RC,FormData:EC,Blob:xC},protocols:["http","https","file","blob","url","data"]},Mc=typeof window<"u"&&typeof document<"u",Sa=typeof navigator=="object"&&navigator||void 0,PC=Mc&&(!Sa||["ReactNative","NativeScript","NS"].indexOf(Sa.product)<0),kC=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",FC=Mc&&window.location.href||"http://localhost",DC=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Mc,hasStandardBrowserEnv:PC,hasStandardBrowserWebWorkerEnv:kC,navigator:Sa,origin:FC},Symbol.toStringTag,{value:"Module"})),Rt={...DC,..._C};function LC(e,t){return Cs(e,new Rt.classes.URLSearchParams,Object.assign({visitor:function(n,r,o,i){return Rt.isNode&&k.isBuffer(n)?(this.append(r,n.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},t))}function TC(e){return k.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function MC(e){const t={},n=Object.keys(e);let r;const o=n.length;let i;for(r=0;r=n.length;return l=!l&&k.isArray(o)?o.length:l,u?(k.hasOwnProp(o,l)?o[l]=[o[l],r]:o[l]=r,!s):((!o[l]||!k.isObject(o[l]))&&(o[l]=[]),t(n,r,o[l],i)&&k.isArray(o[l])&&(o[l]=MC(o[l])),!s)}if(k.isFormData(e)&&k.isFunction(e.entries)){const n={};return k.forEachEntry(e,(r,o)=>{t(TC(r),o,n,0)}),n}return null}function OC(e,t,n){if(k.isString(e))try{return(t||JSON.parse)(e),k.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}const Ci={transitional:bg,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const r=n.getContentType()||"",o=r.indexOf("application/json")>-1,i=k.isObject(t);if(i&&k.isHTMLForm(t)&&(t=new FormData(t)),k.isFormData(t))return o?JSON.stringify(em(t)):t;if(k.isArrayBuffer(t)||k.isBuffer(t)||k.isStream(t)||k.isFile(t)||k.isBlob(t)||k.isReadableStream(t))return t;if(k.isArrayBufferView(t))return t.buffer;if(k.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let s;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return LC(t,this.formSerializer).toString();if((s=k.isFileList(t))||r.indexOf("multipart/form-data")>-1){const u=this.env&&this.env.FormData;return Cs(s?{"files[]":t}:t,u&&new u,this.formSerializer)}}return i||o?(n.setContentType("application/json",!1),OC(t)):t}],transformResponse:[function(t){const n=this.transitional||Ci.transitional,r=n&&n.forcedJSONParsing,o=this.responseType==="json";if(k.isResponse(t)||k.isReadableStream(t))return t;if(t&&k.isString(t)&&(r&&!this.responseType||o)){const l=!(n&&n.silentJSONParsing)&&o;try{return JSON.parse(t)}catch(s){if(l)throw s.name==="SyntaxError"?ie.from(s,ie.ERR_BAD_RESPONSE,this,null,this.response):s}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Rt.classes.FormData,Blob:Rt.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};k.forEach(["delete","get","head","post","put","patch"],e=>{Ci.headers[e]={}});const NC=k.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),AC=e=>{const t={};let n,r,o;return e&&e.split(` -`).forEach(function(l){o=l.indexOf(":"),n=l.substring(0,o).trim().toLowerCase(),r=l.substring(o+1).trim(),!(!n||t[n]&&NC[n])&&(n==="set-cookie"?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t},Md=Symbol("internals");function Fo(e){return e&&String(e).trim().toLowerCase()}function vl(e){return e===!1||e==null?e:k.isArray(e)?e.map(vl):String(e)}function IC(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}const zC=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function du(e,t,n,r,o){if(k.isFunction(r))return r.call(this,t,n);if(o&&(t=n),!!k.isString(t)){if(k.isString(r))return t.indexOf(r)!==-1;if(k.isRegExp(r))return r.test(t)}}function VC(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function $C(e,t){const n=k.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(o,i,l){return this[r].call(this,t,o,i,l)},configurable:!0})})}let Et=class{constructor(t){t&&this.set(t)}set(t,n,r){const o=this;function i(s,u,a){const c=Fo(u);if(!c)throw new Error("header name must be a non-empty string");const f=k.findKey(o,c);(!f||o[f]===void 0||a===!0||a===void 0&&o[f]!==!1)&&(o[f||u]=vl(s))}const l=(s,u)=>k.forEach(s,(a,c)=>i(a,c,u));if(k.isPlainObject(t)||t instanceof this.constructor)l(t,n);else if(k.isString(t)&&(t=t.trim())&&!zC(t))l(AC(t),n);else if(k.isHeaders(t))for(const[s,u]of t.entries())i(u,s,r);else t!=null&&i(n,t,r);return this}get(t,n){if(t=Fo(t),t){const r=k.findKey(this,t);if(r){const o=this[r];if(!n)return o;if(n===!0)return IC(o);if(k.isFunction(n))return n.call(this,o,r);if(k.isRegExp(n))return n.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=Fo(t),t){const r=k.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||du(this,this[r],r,n)))}return!1}delete(t,n){const r=this;let o=!1;function i(l){if(l=Fo(l),l){const s=k.findKey(r,l);s&&(!n||du(r,r[s],s,n))&&(delete r[s],o=!0)}}return k.isArray(t)?t.forEach(i):i(t),o}clear(t){const n=Object.keys(this);let r=n.length,o=!1;for(;r--;){const i=n[r];(!t||du(this,this[i],i,t,!0))&&(delete this[i],o=!0)}return o}normalize(t){const n=this,r={};return k.forEach(this,(o,i)=>{const l=k.findKey(r,i);if(l){n[l]=vl(o),delete n[i];return}const s=t?VC(i):String(i).trim();s!==i&&delete n[i],n[s]=vl(o),r[s]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return k.forEach(this,(r,o)=>{r!=null&&r!==!1&&(n[o]=t&&k.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` -`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const r=new this(t);return n.forEach(o=>r.set(o)),r}static accessor(t){const r=(this[Md]=this[Md]={accessors:{}}).accessors,o=this.prototype;function i(l){const s=Fo(l);r[s]||($C(o,l),r[s]=!0)}return k.isArray(t)?t.forEach(i):i(t),this}};Et.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);k.reduceDescriptors(Et.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});k.freezeMethods(Et);function pu(e,t){const n=this||Ci,r=t||n,o=Et.from(r.headers);let i=r.data;return k.forEach(e,function(s){i=s.call(n,i,o.normalize(),t?t.status:void 0)}),o.normalize(),i}function tm(e){return!!(e&&e.__CANCEL__)}function po(e,t,n){ie.call(this,e??"canceled",ie.ERR_CANCELED,t,n),this.name="CanceledError"}k.inherits(po,ie,{__CANCEL__:!0});function nm(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new ie("Request failed with status code "+n.status,[ie.ERR_BAD_REQUEST,ie.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function jC(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function UC(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o=0,i=0,l;return t=t!==void 0?t:1e3,function(u){const a=Date.now(),c=r[i];l||(l=a),n[o]=u,r[o]=a;let f=i,p=0;for(;f!==o;)p+=n[f++],f=f%e;if(o=(o+1)%e,o===i&&(i=(i+1)%e),a-l{n=c,o=null,i&&(clearTimeout(i),i=null),e.apply(null,a)};return[(...a)=>{const c=Date.now(),f=c-n;f>=r?l(a,c):(o=a,i||(i=setTimeout(()=>{i=null,l(o)},r-f)))},()=>o&&l(o)]}const Ql=(e,t,n=3)=>{let r=0;const o=UC(50,250);return BC(i=>{const l=i.loaded,s=i.lengthComputable?i.total:void 0,u=l-r,a=o(u),c=l<=s;r=l;const f={loaded:l,total:s,progress:s?l/s:void 0,bytes:u,rate:a||void 0,estimated:a&&s&&c?(s-l)/a:void 0,event:i,lengthComputable:s!=null,[t?"download":"upload"]:!0};e(f)},n)},Od=(e,t)=>{const n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Nd=e=>(...t)=>k.asap(()=>e(...t)),HC=Rt.hasStandardBrowserEnv?function(){const t=Rt.navigator&&/(msie|trident)/i.test(Rt.navigator.userAgent),n=document.createElement("a");let r;function o(i){let l=i;return t&&(n.setAttribute("href",l),l=n.href),n.setAttribute("href",l),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return r=o(window.location.href),function(l){const s=k.isString(l)?o(l):l;return s.protocol===r.protocol&&s.host===r.host}}():function(){return function(){return!0}}(),GC=Rt.hasStandardBrowserEnv?{write(e,t,n,r,o,i){const l=[e+"="+encodeURIComponent(t)];k.isNumber(n)&&l.push("expires="+new Date(n).toGMTString()),k.isString(r)&&l.push("path="+r),k.isString(o)&&l.push("domain="+o),i===!0&&l.push("secure"),document.cookie=l.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function WC(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function KC(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function rm(e,t){return e&&!WC(t)?KC(e,t):t}const Ad=e=>e instanceof Et?{...e}:e;function _r(e,t){t=t||{};const n={};function r(a,c,f){return k.isPlainObject(a)&&k.isPlainObject(c)?k.merge.call({caseless:f},a,c):k.isPlainObject(c)?k.merge({},c):k.isArray(c)?c.slice():c}function o(a,c,f){if(k.isUndefined(c)){if(!k.isUndefined(a))return r(void 0,a,f)}else return r(a,c,f)}function i(a,c){if(!k.isUndefined(c))return r(void 0,c)}function l(a,c){if(k.isUndefined(c)){if(!k.isUndefined(a))return r(void 0,a)}else return r(void 0,c)}function s(a,c,f){if(f in t)return r(a,c);if(f in e)return r(void 0,a)}const u={url:i,method:i,data:i,baseURL:l,transformRequest:l,transformResponse:l,paramsSerializer:l,timeout:l,timeoutMessage:l,withCredentials:l,withXSRFToken:l,adapter:l,responseType:l,xsrfCookieName:l,xsrfHeaderName:l,onUploadProgress:l,onDownloadProgress:l,decompress:l,maxContentLength:l,maxBodyLength:l,beforeRedirect:l,transport:l,httpAgent:l,httpsAgent:l,cancelToken:l,socketPath:l,responseEncoding:l,validateStatus:s,headers:(a,c)=>o(Ad(a),Ad(c),!0)};return k.forEach(Object.keys(Object.assign({},e,t)),function(c){const f=u[c]||o,p=f(e[c],t[c],c);k.isUndefined(p)&&f!==s||(n[c]=p)}),n}const om=e=>{const t=_r({},e);let{data:n,withXSRFToken:r,xsrfHeaderName:o,xsrfCookieName:i,headers:l,auth:s}=t;t.headers=l=Et.from(l),t.url=Zg(rm(t.baseURL,t.url),e.params,e.paramsSerializer),s&&l.set("Authorization","Basic "+btoa((s.username||"")+":"+(s.password?unescape(encodeURIComponent(s.password)):"")));let u;if(k.isFormData(n)){if(Rt.hasStandardBrowserEnv||Rt.hasStandardBrowserWebWorkerEnv)l.setContentType(void 0);else if((u=l.getContentType())!==!1){const[a,...c]=u?u.split(";").map(f=>f.trim()).filter(Boolean):[];l.setContentType([a||"multipart/form-data",...c].join("; "))}}if(Rt.hasStandardBrowserEnv&&(r&&k.isFunction(r)&&(r=r(t)),r||r!==!1&&HC(t.url))){const a=o&&i&&GC.read(i);a&&l.set(o,a)}return t},QC=typeof XMLHttpRequest<"u",qC=QC&&function(e){return new Promise(function(n,r){const o=om(e);let i=o.data;const l=Et.from(o.headers).normalize();let{responseType:s,onUploadProgress:u,onDownloadProgress:a}=o,c,f,p,g,m;function y(){g&&g(),m&&m(),o.cancelToken&&o.cancelToken.unsubscribe(c),o.signal&&o.signal.removeEventListener("abort",c)}let E=new XMLHttpRequest;E.open(o.method.toUpperCase(),o.url,!0),E.timeout=o.timeout;function h(){if(!E)return;const v=Et.from("getAllResponseHeaders"in E&&E.getAllResponseHeaders()),F={data:!s||s==="text"||s==="json"?E.responseText:E.response,status:E.status,statusText:E.statusText,headers:v,config:e,request:E};nm(function(A){n(A),y()},function(A){r(A),y()},F),E=null}"onloadend"in E?E.onloadend=h:E.onreadystatechange=function(){!E||E.readyState!==4||E.status===0&&!(E.responseURL&&E.responseURL.indexOf("file:")===0)||setTimeout(h)},E.onabort=function(){E&&(r(new ie("Request aborted",ie.ECONNABORTED,e,E)),E=null)},E.onerror=function(){r(new ie("Network Error",ie.ERR_NETWORK,e,E)),E=null},E.ontimeout=function(){let x=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded";const F=o.transitional||bg;o.timeoutErrorMessage&&(x=o.timeoutErrorMessage),r(new ie(x,F.clarifyTimeoutError?ie.ETIMEDOUT:ie.ECONNABORTED,e,E)),E=null},i===void 0&&l.setContentType(null),"setRequestHeader"in E&&k.forEach(l.toJSON(),function(x,F){E.setRequestHeader(F,x)}),k.isUndefined(o.withCredentials)||(E.withCredentials=!!o.withCredentials),s&&s!=="json"&&(E.responseType=o.responseType),a&&([p,m]=Ql(a,!0),E.addEventListener("progress",p)),u&&E.upload&&([f,g]=Ql(u),E.upload.addEventListener("progress",f),E.upload.addEventListener("loadend",g)),(o.cancelToken||o.signal)&&(c=v=>{E&&(r(!v||v.type?new po(null,e,E):v),E.abort(),E=null)},o.cancelToken&&o.cancelToken.subscribe(c),o.signal&&(o.signal.aborted?c():o.signal.addEventListener("abort",c)));const d=jC(o.url);if(d&&Rt.protocols.indexOf(d)===-1){r(new ie("Unsupported protocol "+d+":",ie.ERR_BAD_REQUEST,e));return}E.send(i||null)})},XC=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let r=new AbortController,o;const i=function(a){if(!o){o=!0,s();const c=a instanceof Error?a:this.reason;r.abort(c instanceof ie?c:new po(c instanceof Error?c.message:c))}};let l=t&&setTimeout(()=>{l=null,i(new ie(`timeout ${t} of ms exceeded`,ie.ETIMEDOUT))},t);const s=()=>{e&&(l&&clearTimeout(l),l=null,e.forEach(a=>{a.unsubscribe?a.unsubscribe(i):a.removeEventListener("abort",i)}),e=null)};e.forEach(a=>a.addEventListener("abort",i));const{signal:u}=r;return u.unsubscribe=()=>k.asap(s),u}},JC=function*(e,t){let n=e.byteLength;if(n{const o=YC(e,t);let i=0,l,s=u=>{l||(l=!0,r&&r(u))};return new ReadableStream({async pull(u){try{const{done:a,value:c}=await o.next();if(a){s(),u.close();return}let f=c.byteLength;if(n){let p=i+=f;n(p)}u.enqueue(new Uint8Array(c))}catch(a){throw s(a),a}},cancel(u){return s(u),o.return()}},{highWaterMark:2})},Rs=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",im=Rs&&typeof ReadableStream=="function",bC=Rs&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),lm=(e,...t)=>{try{return!!e(...t)}catch{return!1}},e1=im&&lm(()=>{let e=!1;const t=new Request(Rt.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),zd=64*1024,Ca=im&&lm(()=>k.isReadableStream(new Response("").body)),ql={stream:Ca&&(e=>e.body)};Rs&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!ql[t]&&(ql[t]=k.isFunction(e[t])?n=>n[t]():(n,r)=>{throw new ie(`Response type '${t}' is not supported`,ie.ERR_NOT_SUPPORT,r)})})})(new Response);const t1=async e=>{if(e==null)return 0;if(k.isBlob(e))return e.size;if(k.isSpecCompliantForm(e))return(await new Request(Rt.origin,{method:"POST",body:e}).arrayBuffer()).byteLength;if(k.isArrayBufferView(e)||k.isArrayBuffer(e))return e.byteLength;if(k.isURLSearchParams(e)&&(e=e+""),k.isString(e))return(await bC(e)).byteLength},n1=async(e,t)=>{const n=k.toFiniteNumber(e.getContentLength());return n??t1(t)},r1=Rs&&(async e=>{let{url:t,method:n,data:r,signal:o,cancelToken:i,timeout:l,onDownloadProgress:s,onUploadProgress:u,responseType:a,headers:c,withCredentials:f="same-origin",fetchOptions:p}=om(e);a=a?(a+"").toLowerCase():"text";let g=XC([o,i&&i.toAbortSignal()],l),m;const y=g&&g.unsubscribe&&(()=>{g.unsubscribe()});let E;try{if(u&&e1&&n!=="get"&&n!=="head"&&(E=await n1(c,r))!==0){let F=new Request(t,{method:"POST",body:r,duplex:"half"}),M;if(k.isFormData(r)&&(M=F.headers.get("content-type"))&&c.setContentType(M),F.body){const[A,C]=Od(E,Ql(Nd(u)));r=Id(F.body,zd,A,C)}}k.isString(f)||(f=f?"include":"omit");const h="credentials"in Request.prototype;m=new Request(t,{...p,signal:g,method:n.toUpperCase(),headers:c.normalize().toJSON(),body:r,duplex:"half",credentials:h?f:void 0});let d=await fetch(m);const v=Ca&&(a==="stream"||a==="response");if(Ca&&(s||v&&y)){const F={};["status","statusText","headers"].forEach(U=>{F[U]=d[U]});const M=k.toFiniteNumber(d.headers.get("content-length")),[A,C]=s&&Od(M,Ql(Nd(s),!0))||[];d=new Response(Id(d.body,zd,A,()=>{C&&C(),y&&y()}),F)}a=a||"text";let x=await ql[k.findKey(ql,a)||"text"](d,e);return!v&&y&&y(),await new Promise((F,M)=>{nm(F,M,{data:x,headers:Et.from(d.headers),status:d.status,statusText:d.statusText,config:e,request:m})})}catch(h){throw y&&y(),h&&h.name==="TypeError"&&/fetch/i.test(h.message)?Object.assign(new ie("Network Error",ie.ERR_NETWORK,e,m),{cause:h.cause||h}):ie.from(h,h&&h.code,e,m)}}),Ra={http:yC,xhr:qC,fetch:r1};k.forEach(Ra,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const Vd=e=>`- ${e}`,o1=e=>k.isFunction(e)||e===null||e===!1,sm={getAdapter:e=>{e=k.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let i=0;i`adapter ${s} `+(u===!1?"is not supported by the environment":"is not available in the build"));let l=t?i.length>1?`since : -`+i.map(Vd).join(` -`):" "+Vd(i[0]):"as no adapter specified";throw new ie("There is no suitable adapter to dispatch the request "+l,"ERR_NOT_SUPPORT")}return r},adapters:Ra};function hu(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new po(null,e)}function $d(e){return hu(e),e.headers=Et.from(e.headers),e.data=pu.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),sm.getAdapter(e.adapter||Ci.adapter)(e).then(function(r){return hu(e),r.data=pu.call(e,e.transformResponse,r),r.headers=Et.from(r.headers),r},function(r){return tm(r)||(hu(e),r&&r.response&&(r.response.data=pu.call(e,e.transformResponse,r.response),r.response.headers=Et.from(r.response.headers))),Promise.reject(r)})}const um="1.7.7",Oc={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Oc[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const jd={};Oc.transitional=function(t,n,r){function o(i,l){return"[Axios v"+um+"] Transitional option '"+i+"'"+l+(r?". "+r:"")}return(i,l,s)=>{if(t===!1)throw new ie(o(l," has been removed"+(n?" in "+n:"")),ie.ERR_DEPRECATED);return n&&!jd[l]&&(jd[l]=!0,console.warn(o(l," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(i,l,s):!0}};function i1(e,t,n){if(typeof e!="object")throw new ie("options must be an object",ie.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const i=r[o],l=t[i];if(l){const s=e[i],u=s===void 0||l(s,i,e);if(u!==!0)throw new ie("option "+i+" must be "+u,ie.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new ie("Unknown option "+i,ie.ERR_BAD_OPTION)}}const Ea={assertOptions:i1,validators:Oc},Mn=Ea.validators;let yr=class{constructor(t){this.defaults=t,this.interceptors={request:new Td,response:new Td}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error){let o;Error.captureStackTrace?Error.captureStackTrace(o={}):o=new Error;const i=o.stack?o.stack.replace(/^.+\n/,""):"";try{r.stack?i&&!String(r.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(r.stack+=` -`+i):r.stack=i}catch{}}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=_r(this.defaults,n);const{transitional:r,paramsSerializer:o,headers:i}=n;r!==void 0&&Ea.assertOptions(r,{silentJSONParsing:Mn.transitional(Mn.boolean),forcedJSONParsing:Mn.transitional(Mn.boolean),clarifyTimeoutError:Mn.transitional(Mn.boolean)},!1),o!=null&&(k.isFunction(o)?n.paramsSerializer={serialize:o}:Ea.assertOptions(o,{encode:Mn.function,serialize:Mn.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let l=i&&k.merge(i.common,i[n.method]);i&&k.forEach(["delete","get","head","post","put","patch","common"],m=>{delete i[m]}),n.headers=Et.concat(l,i);const s=[];let u=!0;this.interceptors.request.forEach(function(y){typeof y.runWhen=="function"&&y.runWhen(n)===!1||(u=u&&y.synchronous,s.unshift(y.fulfilled,y.rejected))});const a=[];this.interceptors.response.forEach(function(y){a.push(y.fulfilled,y.rejected)});let c,f=0,p;if(!u){const m=[$d.bind(this),void 0];for(m.unshift.apply(m,s),m.push.apply(m,a),p=m.length,c=Promise.resolve(n);f{if(!r._listeners)return;let i=r._listeners.length;for(;i-- >0;)r._listeners[i](o);r._listeners=null}),this.promise.then=o=>{let i;const l=new Promise(s=>{r.subscribe(s),i=s}).then(o);return l.cancel=function(){r.unsubscribe(i)},l},t(function(i,l,s){r.reason||(r.reason=new po(i,l,s),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=r=>{t.abort(r)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new am(function(o){t=o}),cancel:t}}};function s1(e){return function(n){return e.apply(null,n)}}function u1(e){return k.isObject(e)&&e.isAxiosError===!0}const xa={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(xa).forEach(([e,t])=>{xa[t]=e});function cm(e){const t=new yr(e),n=jg(yr.prototype.request,t);return k.extend(n,yr.prototype,t,{allOwnKeys:!0}),k.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return cm(_r(e,o))},n}const je=cm(Ci);je.Axios=yr;je.CanceledError=po;je.CancelToken=l1;je.isCancel=tm;je.VERSION=um;je.toFormData=Cs;je.AxiosError=ie;je.Cancel=je.CanceledError;je.all=function(t){return Promise.all(t)};je.spread=s1;je.isAxiosError=u1;je.mergeConfig=_r;je.AxiosHeaders=Et;je.formToJSON=e=>em(k.isHTMLForm(e)?new FormData(e):e);je.getAdapter=sm.getAdapter;je.HttpStatusCode=xa;je.default=je;const{Axios:B1,AxiosError:H1,CanceledError:G1,isCancel:W1,CancelToken:K1,VERSION:Q1,all:q1,Cancel:X1,isAxiosError:J1,spread:Y1,toFormData:Z1,AxiosHeaders:b1,HttpStatusCode:eR,formToJSON:tR,getAdapter:nR,mergeConfig:rR}=je,fm=je.create({baseURL:"/api"}),a1=e=>se.jsx("table",{className:"w-full border",...e}),c1=e=>se.jsx("thead",{className:"bg-gray-50",...e}),f1=e=>se.jsx("tbody",{...e}),Ud=e=>se.jsx("tr",{className:"[&>*]:p-2 border-b",...e}),d1=e=>se.jsx("th",{className:"text-left font-medium",...e}),p1=e=>se.jsx("td",{...e});function Bd(){const[e,t]=T.useState([]);T.useEffect(()=>{fm.get("/schemas").then(o=>t(o.data))},[]);const n=T.useMemo(()=>[{header:"Name",accessorKey:"name"},{header:"Path",accessorKey:"path"}],[]),r=MS({data:e,columns:n,getCoreRowModel:FS()});return se.jsxs("div",{className:"space-y-4",children:[se.jsx("h1",{className:"text-xl font-semibold",children:"Схемы"}),se.jsxs(a1,{children:[se.jsx(c1,{children:r.getHeaderGroups().map(o=>se.jsx(Ud,{children:o.headers.map(i=>se.jsx(d1,{children:Pd(i.column.columnDef.header,i.getContext())},i.id))},o.id))}),se.jsx(f1,{children:r.getRowModel().rows.map(o=>se.jsx(Ud,{children:o.getVisibleCells().map(i=>se.jsx(p1,{children:Pd(i.column.columnDef.cell??i.column.columnDef.header,i.getContext())},i.id))},o.id))})]})]})}var Ri=e=>e.type==="checkbox",Kr=e=>e instanceof Date,ft=e=>e==null;const dm=e=>typeof e=="object";var Ge=e=>!ft(e)&&!Array.isArray(e)&&dm(e)&&!Kr(e),h1=e=>Ge(e)&&e.target?Ri(e.target)?e.target.checked:e.target.value:e,g1=e=>e.substring(0,e.search(/\.\d+(\.|$)/))||e,m1=(e,t)=>e.has(g1(t)),v1=e=>{const t=e.constructor&&e.constructor.prototype;return Ge(t)&&t.hasOwnProperty("isPrototypeOf")},Nc=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function It(e){let t;const n=Array.isArray(e);if(e instanceof Date)t=new Date(e);else if(e instanceof Set)t=new Set(e);else if(!(Nc&&(e instanceof Blob||e instanceof FileList))&&(n||Ge(e)))if(t=n?[]:{},!n&&!v1(e))t=e;else for(const r in e)e.hasOwnProperty(r)&&(t[r]=It(e[r]));else return e;return t}var Es=e=>Array.isArray(e)?e.filter(Boolean):[],Ve=e=>e===void 0,K=(e,t,n)=>{if(!t||!Ge(e))return n;const r=Es(t.split(/[,[\].]+?/)).reduce((o,i)=>ft(o)?o:o[i],e);return Ve(r)||r===e?Ve(e[t])?n:e[t]:r},sn=e=>typeof e=="boolean",Ac=e=>/^\w*$/.test(e),pm=e=>Es(e.replace(/["|']|\]/g,"").split(/\.|\[/)),xe=(e,t,n)=>{let r=-1;const o=Ac(t)?[t]:pm(t),i=o.length,l=i-1;for(;++r{const o={defaultValues:t._defaultValues};for(const i in e)Object.defineProperty(o,i,{get:()=>{const l=i;return t._proxyFormState[l]!==Yt.all&&(t._proxyFormState[l]=!r||Yt.all),e[l]}});return o},gt=e=>Ge(e)&&!Object.keys(e).length,w1=(e,t,n,r)=>{n(e);const{name:o,...i}=e;return gt(i)||Object.keys(i).length>=Object.keys(t).length||Object.keys(i).find(l=>t[l]===Yt.all)},yl=e=>Array.isArray(e)?e:[e];function S1(e){const t=mt.useRef(e);t.current=e,mt.useEffect(()=>{const n=!e.disabled&&t.current.subject&&t.current.subject.subscribe({next:t.current.next});return()=>{n&&n.unsubscribe()}},[e.disabled])}var an=e=>typeof e=="string",C1=(e,t,n,r,o)=>an(e)?(r&&t.watch.add(e),K(n,e,o)):Array.isArray(e)?e.map(i=>(r&&t.watch.add(i),K(n,i))):(r&&(t.watchAll=!0),n),R1=(e,t,n,r,o)=>t?{...n[e],types:{...n[e]&&n[e].types?n[e].types:{},[r]:o||!0}}:{},Gd=e=>({isOnSubmit:!e||e===Yt.onSubmit,isOnBlur:e===Yt.onBlur,isOnChange:e===Yt.onChange,isOnAll:e===Yt.all,isOnTouch:e===Yt.onTouched}),Wd=(e,t,n)=>!n&&(t.watchAll||t.watch.has(e)||[...t.watch].some(r=>e.startsWith(r)&&/^\.\w+/.test(e.slice(r.length))));const Wo=(e,t,n,r)=>{for(const o of n||Object.keys(e)){const i=K(e,o);if(i){const{_f:l,...s}=i;if(l){if(l.refs&&l.refs[0]&&t(l.refs[0],o)&&!r)return!0;if(l.ref&&t(l.ref,l.name)&&!r)return!0;if(Wo(s,t))break}else if(Ge(s)&&Wo(s,t))break}}};var E1=(e,t,n)=>{const r=yl(K(e,n));return xe(r,"root",t[n]),xe(e,n,r),e},Ic=e=>e.type==="file",Cn=e=>typeof e=="function",Xl=e=>{if(!Nc)return!1;const t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},wl=e=>an(e),zc=e=>e.type==="radio",Jl=e=>e instanceof RegExp;const Kd={value:!1,isValid:!1},Qd={value:!0,isValid:!0};var hm=e=>{if(Array.isArray(e)){if(e.length>1){const t=e.filter(n=>n&&n.checked&&!n.disabled).map(n=>n.value);return{value:t,isValid:!!t.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!Ve(e[0].attributes.value)?Ve(e[0].value)||e[0].value===""?Qd:{value:e[0].value,isValid:!0}:Qd:Kd}return Kd};const qd={isValid:!1,value:null};var gm=e=>Array.isArray(e)?e.reduce((t,n)=>n&&n.checked&&!n.disabled?{isValid:!0,value:n.value}:t,qd):qd;function Xd(e,t,n="validate"){if(wl(e)||Array.isArray(e)&&e.every(wl)||sn(e)&&!e)return{type:n,message:wl(e)?e:"",ref:t}}var Mr=e=>Ge(e)&&!Jl(e)?e:{value:e,message:""},Jd=async(e,t,n,r,o)=>{const{ref:i,refs:l,required:s,maxLength:u,minLength:a,min:c,max:f,pattern:p,validate:g,name:m,valueAsNumber:y,mount:E,disabled:h}=e._f,d=K(t,m);if(!E||h)return{};const v=l?l[0]:i,x=W=>{r&&v.reportValidity&&(v.setCustomValidity(sn(W)?"":W||""),v.reportValidity())},F={},M=zc(i),A=Ri(i),C=M||A,U=(y||Ic(i))&&Ve(i.value)&&Ve(d)||Xl(i)&&i.value===""||d===""||Array.isArray(d)&&!d.length,I=R1.bind(null,m,n,F),Y=(W,Z,oe,we=gn.maxLength,Fe=gn.minLength)=>{const Ie=W?Z:oe;F[m]={type:W?we:Fe,message:Ie,ref:i,...I(W?we:Fe,Ie)}};if(o?!Array.isArray(d)||!d.length:s&&(!C&&(U||ft(d))||sn(d)&&!d||A&&!hm(l).isValid||M&&!gm(l).isValid)){const{value:W,message:Z}=wl(s)?{value:!!s,message:s}:Mr(s);if(W&&(F[m]={type:gn.required,message:Z,ref:v,...I(gn.required,Z)},!n))return x(Z),F}if(!U&&(!ft(c)||!ft(f))){let W,Z;const oe=Mr(f),we=Mr(c);if(!ft(d)&&!isNaN(d)){const Fe=i.valueAsNumber||d&&+d;ft(oe.value)||(W=Fe>oe.value),ft(we.value)||(Z=Fenew Date(new Date().toDateString()+" "+ee),$=i.type=="time",B=i.type=="week";an(oe.value)&&d&&(W=$?Ie(d)>Ie(oe.value):B?d>oe.value:Fe>new Date(oe.value)),an(we.value)&&d&&(Z=$?Ie(d)+W.value,we=!ft(Z.value)&&d.length<+Z.value;if((oe||we)&&(Y(oe,W.message,Z.message),!n))return x(F[m].message),F}if(p&&!U&&an(d)){const{value:W,message:Z}=Mr(p);if(Jl(W)&&!d.match(W)&&(F[m]={type:gn.pattern,message:Z,ref:i,...I(gn.pattern,Z)},!n))return x(Z),F}if(g){if(Cn(g)){const W=await g(d,t),Z=Xd(W,v);if(Z&&(F[m]={...Z,...I(gn.validate,Z.message)},!n))return x(Z.message),F}else if(Ge(g)){let W={};for(const Z in g){if(!gt(W)&&!n)break;const oe=Xd(await g[Z](d,t),v,Z);oe&&(W={...oe,...I(Z,oe.message)},x(oe.message),n&&(F[m]=W))}if(!gt(W)&&(F[m]={ref:v,...W},!n))return F}}return x(!0),F};function x1(e,t){const n=t.slice(0,-1).length;let r=0;for(;r{let e=[];return{get observers(){return e},next:o=>{for(const i of e)i.next&&i.next(o)},subscribe:o=>(e.push(o),{unsubscribe:()=>{e=e.filter(i=>i!==o)}}),unsubscribe:()=>{e=[]}}},Yl=e=>ft(e)||!dm(e);function Vn(e,t){if(Yl(e)||Yl(t))return e===t;if(Kr(e)&&Kr(t))return e.getTime()===t.getTime();const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(const o of n){const i=e[o];if(!r.includes(o))return!1;if(o!=="ref"){const l=t[o];if(Kr(i)&&Kr(l)||Ge(i)&&Ge(l)||Array.isArray(i)&&Array.isArray(l)?!Vn(i,l):i!==l)return!1}}return!0}var mm=e=>e.type==="select-multiple",P1=e=>zc(e)||Ri(e),mu=e=>Xl(e)&&e.isConnected,vm=e=>{for(const t in e)if(Cn(e[t]))return!0;return!1};function Zl(e,t={}){const n=Array.isArray(e);if(Ge(e)||n)for(const r in e)Array.isArray(e[r])||Ge(e[r])&&!vm(e[r])?(t[r]=Array.isArray(e[r])?[]:{},Zl(e[r],t[r])):ft(e[r])||(t[r]=!0);return t}function ym(e,t,n){const r=Array.isArray(e);if(Ge(e)||r)for(const o in e)Array.isArray(e[o])||Ge(e[o])&&!vm(e[o])?Ve(t)||Yl(n[o])?n[o]=Array.isArray(e[o])?Zl(e[o],[]):{...Zl(e[o])}:ym(e[o],ft(t)?{}:t[o],n[o]):n[o]=!Vn(e[o],t[o]);return n}var nl=(e,t)=>ym(e,t,Zl(t)),wm=(e,{valueAsNumber:t,valueAsDate:n,setValueAs:r})=>Ve(e)?e:t?e===""?NaN:e&&+e:n&&an(e)?new Date(e):r?r(e):e;function vu(e){const t=e.ref;if(!(e.refs?e.refs.every(n=>n.disabled):t.disabled))return Ic(t)?t.files:zc(t)?gm(e.refs).value:mm(t)?[...t.selectedOptions].map(({value:n})=>n):Ri(t)?hm(e.refs).value:wm(Ve(t.value)?e.ref.value:t.value,e)}var k1=(e,t,n,r)=>{const o={};for(const i of e){const l=K(t,i);l&&xe(o,i,l._f)}return{criteriaMode:n,names:[...e],fields:o,shouldUseNativeValidation:r}},Do=e=>Ve(e)?e:Jl(e)?e.source:Ge(e)?Jl(e.value)?e.value.source:e.value:e;const Yd="AsyncFunction";var F1=e=>(!e||!e.validate)&&!!(Cn(e.validate)&&e.validate.constructor.name===Yd||Ge(e.validate)&&Object.values(e.validate).find(t=>t.constructor.name===Yd)),D1=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate);function Zd(e,t,n){const r=K(e,n);if(r||Ac(n))return{error:r,name:n};const o=n.split(".");for(;o.length;){const i=o.join("."),l=K(t,i),s=K(e,i);if(l&&!Array.isArray(l)&&n!==i)return{name:n};if(s&&s.type)return{name:i,error:s};o.pop()}return{name:n}}var L1=(e,t,n,r,o)=>o.isOnAll?!1:!n&&o.isOnTouch?!(t||e):(n?r.isOnBlur:o.isOnBlur)?!e:(n?r.isOnChange:o.isOnChange)?e:!0,T1=(e,t)=>!Es(K(e,t)).length&&We(e,t);const M1={mode:Yt.onSubmit,reValidateMode:Yt.onChange,shouldFocusError:!0};function O1(e={}){let t={...M1,...e},n={submitCount:0,isDirty:!1,isLoading:Cn(t.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:t.errors||{},disabled:t.disabled||!1},r={},o=Ge(t.defaultValues)||Ge(t.values)?It(t.defaultValues||t.values)||{}:{},i=t.shouldUnregister?{}:It(o),l={action:!1,mount:!1,watch:!1},s={mount:new Set,unMount:new Set,array:new Set,watch:new Set},u,a=0;const c={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},f={values:gu(),array:gu(),state:gu()},p=Gd(t.mode),g=Gd(t.reValidateMode),m=t.criteriaMode===Yt.all,y=w=>_=>{clearTimeout(a),a=setTimeout(w,_)},E=async w=>{if(c.isValid||w){const _=t.resolver?gt((await C()).errors):await I(r,!0);_!==n.isValid&&f.state.next({isValid:_})}},h=(w,_)=>{(c.isValidating||c.validatingFields)&&((w||Array.from(s.mount)).forEach(D=>{D&&(_?xe(n.validatingFields,D,_):We(n.validatingFields,D))}),f.state.next({validatingFields:n.validatingFields,isValidating:!gt(n.validatingFields)}))},d=(w,_=[],D,j,z=!0,N=!0)=>{if(j&&D){if(l.action=!0,N&&Array.isArray(K(r,w))){const X=D(K(r,w),j.argA,j.argB);z&&xe(r,w,X)}if(N&&Array.isArray(K(n.errors,w))){const X=D(K(n.errors,w),j.argA,j.argB);z&&xe(n.errors,w,X),T1(n.errors,w)}if(c.touchedFields&&N&&Array.isArray(K(n.touchedFields,w))){const X=D(K(n.touchedFields,w),j.argA,j.argB);z&&xe(n.touchedFields,w,X)}c.dirtyFields&&(n.dirtyFields=nl(o,i)),f.state.next({name:w,isDirty:W(w,_),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else xe(i,w,_)},v=(w,_)=>{xe(n.errors,w,_),f.state.next({errors:n.errors})},x=w=>{n.errors=w,f.state.next({errors:n.errors,isValid:!1})},F=(w,_,D,j)=>{const z=K(r,w);if(z){const N=K(i,w,Ve(D)?K(o,w):D);Ve(N)||j&&j.defaultChecked||_?xe(i,w,_?N:vu(z._f)):we(w,N),l.mount&&E()}},M=(w,_,D,j,z)=>{let N=!1,X=!1;const de={name:w},Se=!!(K(r,w)&&K(r,w)._f&&K(r,w)._f.disabled);if(!D||j){c.isDirty&&(X=n.isDirty,n.isDirty=de.isDirty=W(),N=X!==de.isDirty);const Pe=Se||Vn(K(o,w),_);X=!!(!Se&&K(n.dirtyFields,w)),Pe||Se?We(n.dirtyFields,w):xe(n.dirtyFields,w,!0),de.dirtyFields=n.dirtyFields,N=N||c.dirtyFields&&X!==!Pe}if(D){const Pe=K(n.touchedFields,w);Pe||(xe(n.touchedFields,w,D),de.touchedFields=n.touchedFields,N=N||c.touchedFields&&Pe!==D)}return N&&z&&f.state.next(de),N?de:{}},A=(w,_,D,j)=>{const z=K(n.errors,w),N=c.isValid&&sn(_)&&n.isValid!==_;if(e.delayError&&D?(u=y(()=>v(w,D)),u(e.delayError)):(clearTimeout(a),u=null,D?xe(n.errors,w,D):We(n.errors,w)),(D?!Vn(z,D):z)||!gt(j)||N){const X={...j,...N&&sn(_)?{isValid:_}:{},errors:n.errors,name:w};n={...n,...X},f.state.next(X)}},C=async w=>{h(w,!0);const _=await t.resolver(i,t.context,k1(w||s.mount,r,t.criteriaMode,t.shouldUseNativeValidation));return h(w),_},U=async w=>{const{errors:_}=await C(w);if(w)for(const D of w){const j=K(_,D);j?xe(n.errors,D,j):We(n.errors,D)}else n.errors=_;return _},I=async(w,_,D={valid:!0})=>{for(const j in w){const z=w[j];if(z){const{_f:N,...X}=z;if(N){const de=s.array.has(N.name),Se=z._f&&F1(z._f);Se&&c.validatingFields&&h([j],!0);const Pe=await Jd(z,i,m,t.shouldUseNativeValidation&&!_,de);if(Se&&c.validatingFields&&h([j]),Pe[N.name]&&(D.valid=!1,_))break;!_&&(K(Pe,N.name)?de?E1(n.errors,Pe,N.name):xe(n.errors,N.name,Pe[N.name]):We(n.errors,N.name))}!gt(X)&&await I(X,_,D)}}return D.valid},Y=()=>{for(const w of s.unMount){const _=K(r,w);_&&(_._f.refs?_._f.refs.every(D=>!mu(D)):!mu(_._f.ref))&&ze(w)}s.unMount=new Set},W=(w,_)=>(w&&_&&xe(i,w,_),!Vn(he(),o)),Z=(w,_,D)=>C1(w,s,{...l.mount?i:Ve(_)?o:an(w)?{[w]:_}:_},D,_),oe=w=>Es(K(l.mount?i:o,w,e.shouldUnregister?K(o,w,[]):[])),we=(w,_,D={})=>{const j=K(r,w);let z=_;if(j){const N=j._f;N&&(!N.disabled&&xe(i,w,wm(_,N)),z=Xl(N.ref)&&ft(_)?"":_,mm(N.ref)?[...N.ref.options].forEach(X=>X.selected=z.includes(X.value)):N.refs?Ri(N.ref)?N.refs.length>1?N.refs.forEach(X=>(!X.defaultChecked||!X.disabled)&&(X.checked=Array.isArray(z)?!!z.find(de=>de===X.value):z===X.value)):N.refs[0]&&(N.refs[0].checked=!!z):N.refs.forEach(X=>X.checked=X.value===z):Ic(N.ref)?N.ref.value="":(N.ref.value=z,N.ref.type||f.values.next({name:w,values:{...i}})))}(D.shouldDirty||D.shouldTouch)&&M(w,z,D.shouldTouch,D.shouldDirty,!0),D.shouldValidate&&ee(w)},Fe=(w,_,D)=>{for(const j in _){const z=_[j],N=`${w}.${j}`,X=K(r,N);(s.array.has(w)||!Yl(z)||X&&!X._f)&&!Kr(z)?Fe(N,z,D):we(N,z,D)}},Ie=(w,_,D={})=>{const j=K(r,w),z=s.array.has(w),N=It(_);xe(i,w,N),z?(f.array.next({name:w,values:{...i}}),(c.isDirty||c.dirtyFields)&&D.shouldDirty&&f.state.next({name:w,dirtyFields:nl(o,i),isDirty:W(w,N)})):j&&!j._f&&!ft(N)?Fe(w,N,D):we(w,N,D),Wd(w,s)&&f.state.next({...n}),f.values.next({name:l.mount?w:void 0,values:{...i}})},$=async w=>{l.mount=!0;const _=w.target;let D=_.name,j=!0;const z=K(r,D),N=()=>_.type?vu(z._f):h1(w),X=de=>{j=Number.isNaN(de)||Vn(de,K(i,D,de))};if(z){let de,Se;const Pe=N(),rn=w.type===Hd.BLUR||w.type===Hd.FOCUS_OUT,ho=!D1(z._f)&&!t.resolver&&!K(n.errors,D)&&!z._f.deps||L1(rn,K(n.touchedFields,D),n.isSubmitted,g,p),At=Wd(D,s,rn);xe(i,D,Pe),rn?(z._f.onBlur&&z._f.onBlur(w),u&&u(0)):z._f.onChange&&z._f.onChange(w);const xt=M(D,Pe,rn,!1),Pi=!gt(xt)||At;if(!rn&&f.values.next({name:D,type:w.type,values:{...i}}),ho)return c.isValid&&(e.mode==="onBlur"?rn&&E():E()),Pi&&f.state.next({name:D,...At?{}:xt});if(!rn&&At&&f.state.next({...n}),t.resolver){const{errors:sr}=await C([D]);if(X(Pe),j){const Ps=Zd(n.errors,r,D),Wt=Zd(sr,r,Ps.name||D);de=Wt.error,D=Wt.name,Se=gt(sr)}}else h([D],!0),de=(await Jd(z,i,m,t.shouldUseNativeValidation))[D],h([D]),X(Pe),j&&(de?Se=!1:c.isValid&&(Se=await I(r,!0)));j&&(z._f.deps&&ee(z._f.deps),A(D,Se,de,xt))}},B=(w,_)=>{if(K(n.errors,_)&&w.focus)return w.focus(),1},ee=async(w,_={})=>{let D,j;const z=yl(w);if(t.resolver){const N=await U(Ve(w)?w:z);D=gt(N),j=w?!z.some(X=>K(N,X)):D}else w?(j=(await Promise.all(z.map(async N=>{const X=K(r,N);return await I(X&&X._f?{[N]:X}:X)}))).every(Boolean),!(!j&&!n.isValid)&&E()):j=D=await I(r);return f.state.next({...!an(w)||c.isValid&&D!==n.isValid?{}:{name:w},...t.resolver||!w?{isValid:D}:{},errors:n.errors}),_.shouldFocus&&!j&&Wo(r,B,w?z:s.mount),j},he=w=>{const _={...l.mount?i:o};return Ve(w)?_:an(w)?K(_,w):w.map(D=>K(_,D))},ve=(w,_)=>({invalid:!!K((_||n).errors,w),isDirty:!!K((_||n).dirtyFields,w),error:K((_||n).errors,w),isValidating:!!K(n.validatingFields,w),isTouched:!!K((_||n).touchedFields,w)}),nt=w=>{w&&yl(w).forEach(_=>We(n.errors,_)),f.state.next({errors:w?n.errors:{}})},Ze=(w,_,D)=>{const j=(K(r,w,{_f:{}})._f||{}).ref,z=K(n.errors,w)||{},{ref:N,message:X,type:de,...Se}=z;xe(n.errors,w,{...Se,..._,ref:j}),f.state.next({name:w,errors:n.errors,isValid:!1}),D&&D.shouldFocus&&j&&j.focus&&j.focus()},Ht=(w,_)=>Cn(w)?f.values.subscribe({next:D=>w(Z(void 0,_),D)}):Z(w,_,!0),ze=(w,_={})=>{for(const D of w?yl(w):s.mount)s.mount.delete(D),s.array.delete(D),_.keepValue||(We(r,D),We(i,D)),!_.keepError&&We(n.errors,D),!_.keepDirty&&We(n.dirtyFields,D),!_.keepTouched&&We(n.touchedFields,D),!_.keepIsValidating&&We(n.validatingFields,D),!t.shouldUnregister&&!_.keepDefaultValue&&We(o,D);f.values.next({values:{...i}}),f.state.next({...n,..._.keepDirty?{isDirty:W()}:{}}),!_.keepIsValid&&E()},ut=({disabled:w,name:_,field:D,fields:j,value:z})=>{if(sn(w)&&l.mount||w){const N=w?void 0:Ve(z)?vu(D?D._f:K(j,_)._f):z;xe(i,_,N),M(_,N,!1,!1,!0)}},Gt=(w,_={})=>{let D=K(r,w);const j=sn(_.disabled)||sn(e.disabled);return xe(r,w,{...D||{},_f:{...D&&D._f?D._f:{ref:{name:w}},name:w,mount:!0,..._}}),s.mount.add(w),D?ut({field:D,disabled:sn(_.disabled)?_.disabled:e.disabled,name:w,value:_.value}):F(w,!0,_.value),{...j?{disabled:_.disabled||e.disabled}:{},...t.progressive?{required:!!_.required,min:Do(_.min),max:Do(_.max),minLength:Do(_.minLength),maxLength:Do(_.maxLength),pattern:Do(_.pattern)}:{},name:w,onChange:$,onBlur:$,ref:z=>{if(z){Gt(w,_),D=K(r,w);const N=Ve(z.value)&&z.querySelectorAll&&z.querySelectorAll("input,select,textarea")[0]||z,X=P1(N),de=D._f.refs||[];if(X?de.find(Se=>Se===N):N===D._f.ref)return;xe(r,w,{_f:{...D._f,...X?{refs:[...de.filter(mu),N,...Array.isArray(K(o,w))?[{}]:[]],ref:{type:N.type,name:w}}:{ref:N}}}),F(w,!1,void 0,N)}else D=K(r,w,{}),D._f&&(D._f.mount=!1),(t.shouldUnregister||_.shouldUnregister)&&!(m1(s.array,w)&&l.action)&&s.unMount.add(w)}}},Ei=()=>t.shouldFocusError&&Wo(r,B,s.mount),Fr=w=>{sn(w)&&(f.state.next({disabled:w}),Wo(r,(_,D)=>{const j=K(r,D);j&&(_.disabled=j._f.disabled||w,Array.isArray(j._f.refs)&&j._f.refs.forEach(z=>{z.disabled=j._f.disabled||w}))},0,!1))},xi=(w,_)=>async D=>{let j;D&&(D.preventDefault&&D.preventDefault(),D.persist&&D.persist());let z=It(i);if(f.state.next({isSubmitting:!0}),t.resolver){const{errors:N,values:X}=await C();n.errors=N,z=X}else await I(r);if(We(n.errors,"root"),gt(n.errors)){f.state.next({errors:{}});try{await w(z,D)}catch(N){j=N}}else _&&await _({...n.errors},D),Ei(),setTimeout(Ei);if(f.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:gt(n.errors)&&!j,submitCount:n.submitCount+1,errors:n.errors}),j)throw j},xs=(w,_={})=>{K(r,w)&&(Ve(_.defaultValue)?Ie(w,It(K(o,w))):(Ie(w,_.defaultValue),xe(o,w,It(_.defaultValue))),_.keepTouched||We(n.touchedFields,w),_.keepDirty||(We(n.dirtyFields,w),n.isDirty=_.defaultValue?W(w,It(K(o,w))):W()),_.keepError||(We(n.errors,w),c.isValid&&E()),f.state.next({...n}))},_i=(w,_={})=>{const D=w?It(w):o,j=It(D),z=gt(w),N=z?o:j;if(_.keepDefaultValues||(o=D),!_.keepValues){if(_.keepDirtyValues)for(const X of s.mount)K(n.dirtyFields,X)?xe(N,X,K(i,X)):Ie(X,K(N,X));else{if(Nc&&Ve(w))for(const X of s.mount){const de=K(r,X);if(de&&de._f){const Se=Array.isArray(de._f.refs)?de._f.refs[0]:de._f.ref;if(Xl(Se)){const Pe=Se.closest("form");if(Pe){Pe.reset();break}}}}r={}}i=e.shouldUnregister?_.keepDefaultValues?It(o):{}:It(N),f.array.next({values:{...N}}),f.values.next({values:{...N}})}s={mount:_.keepDirtyValues?s.mount:new Set,unMount:new Set,array:new Set,watch:new Set,watchAll:!1,focus:""},l.mount=!c.isValid||!!_.keepIsValid||!!_.keepDirtyValues,l.watch=!!e.shouldUnregister,f.state.next({submitCount:_.keepSubmitCount?n.submitCount:0,isDirty:z?!1:_.keepDirty?n.isDirty:!!(_.keepDefaultValues&&!Vn(w,o)),isSubmitted:_.keepIsSubmitted?n.isSubmitted:!1,dirtyFields:z?{}:_.keepDirtyValues?_.keepDefaultValues&&i?nl(o,i):n.dirtyFields:_.keepDefaultValues&&w?nl(o,w):_.keepDirty?n.dirtyFields:{},touchedFields:_.keepTouched?n.touchedFields:{},errors:_.keepErrors?n.errors:{},isSubmitSuccessful:_.keepIsSubmitSuccessful?n.isSubmitSuccessful:!1,isSubmitting:!1})},qe=(w,_)=>_i(Cn(w)?w(i):w,_);return{control:{register:Gt,unregister:ze,getFieldState:ve,handleSubmit:xi,setError:Ze,_executeSchema:C,_getWatch:Z,_getDirty:W,_updateValid:E,_removeUnmounted:Y,_updateFieldArray:d,_updateDisabledField:ut,_getFieldArray:oe,_reset:_i,_resetDefaultValues:()=>Cn(t.defaultValues)&&t.defaultValues().then(w=>{qe(w,t.resetOptions),f.state.next({isLoading:!1})}),_updateFormState:w=>{n={...n,...w}},_disableForm:Fr,_subjects:f,_proxyFormState:c,_setErrors:x,get _fields(){return r},get _formValues(){return i},get _state(){return l},set _state(w){l=w},get _defaultValues(){return o},get _names(){return s},set _names(w){s=w},get _formState(){return n},set _formState(w){n=w},get _options(){return t},set _options(w){t={...t,...w}}},trigger:ee,register:Gt,handleSubmit:xi,watch:Ht,setValue:Ie,getValues:he,reset:qe,resetField:xs,clearErrors:nt,unregister:ze,setError:Ze,setFocus:(w,_={})=>{const D=K(r,w),j=D&&D._f;if(j){const z=j.refs?j.refs[0]:j.ref;z.focus&&(z.focus(),_.shouldSelect&&z.select())}},getFieldState:ve}}function N1(e={}){const t=mt.useRef(),n=mt.useRef(),[r,o]=mt.useState({isDirty:!1,isValidating:!1,isLoading:Cn(e.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:e.errors||{},disabled:e.disabled||!1,defaultValues:Cn(e.defaultValues)?void 0:e.defaultValues});t.current||(t.current={...O1(e),formState:r});const i=t.current.control;return i._options=e,S1({subject:i._subjects.state,next:l=>{w1(l,i._proxyFormState,i._updateFormState)&&o({...i._formState})}}),mt.useEffect(()=>i._disableForm(e.disabled),[i,e.disabled]),mt.useEffect(()=>{if(i._proxyFormState.isDirty){const l=i._getDirty();l!==r.isDirty&&i._subjects.state.next({isDirty:l})}},[i,r.isDirty]),mt.useEffect(()=>{e.values&&!Vn(e.values,n.current)?(i._reset(e.values,i._options.resetOptions),n.current=e.values,o(l=>({...l}))):i._resetDefaultValues()},[e.values,i]),mt.useEffect(()=>{e.errors&&i._setErrors(e.errors)},[e.errors,i]),mt.useEffect(()=>{i._state.mount||(i._updateValid(),i._state.mount=!0),i._state.watch&&(i._state.watch=!1,i._subjects.state.next({...i._formState})),i._removeUnmounted()}),mt.useEffect(()=>{e.shouldUnregister&&i._subjects.values.next({values:i._getWatch()})},[e.shouldUnregister,i]),t.current.formState=y1(r,i),t.current}function Sm(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t{const s=l.file;if(!s||s.length===0)return;const u=s[0],a=new FormData;a.append("file",u);const c=await fm.post("/schemas/upload",a,{headers:{"Content-Type":"multipart/form-data"}});o(`Uploaded: ${c.data.path}`),n()};return se.jsxs("div",{className:"space-y-4",children:[se.jsx("h1",{className:"text-xl font-semibold",children:"Загрузка XSD/XSL"}),se.jsxs("form",{onSubmit:t(i),className:"flex items-center gap-3",children:[se.jsx(I1,{type:"file",accept:".xsd,.xsl",...e("file")}),se.jsx(A1,{type:"submit",children:"Загрузить"})]}),r&&se.jsx("div",{className:"text-sm text-green-600",children:r})]})}function V1(){return se.jsxs("div",{className:"text-sm text-neutral-500",children:["Детальный просмотр будет добавлен, когда появится эндпоинт /schemas/",id,"."]})}const $1=Pw([{path:"/",element:se.jsx(Bw,{}),children:[{index:!0,element:se.jsx(Bd,{})},{path:"schemas",element:se.jsx(Bd,{})},{path:"schemas/upload",element:se.jsx(z1,{})},{path:"schemas/:id",element:se.jsx(V1,{})}]}],{basename:"/ui"});pg(document.getElementById("root")).render(se.jsx(mt.StrictMode,{children:se.jsx(Nw,{router:$1})})); diff --git a/app/static/assets/index-C6IcpXes.js b/app/static/assets/index-C6IcpXes.js new file mode 100644 index 0000000..600a564 --- /dev/null +++ b/app/static/assets/index-C6IcpXes.js @@ -0,0 +1,134 @@ +function qp(e,t){for(var n=0;nr[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const l of i.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&r(l)}).observe(document,{childList:!0,subtree:!0});function n(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(o){if(o.ep)return;o.ep=!0;const i=n(o);fetch(o.href,i)}})();function eg(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var tg={exports:{}},Sa={},ng={exports:{}},re={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var _i=Symbol.for("react.element"),Zy=Symbol.for("react.portal"),Jy=Symbol.for("react.fragment"),qy=Symbol.for("react.strict_mode"),ew=Symbol.for("react.profiler"),tw=Symbol.for("react.provider"),nw=Symbol.for("react.context"),rw=Symbol.for("react.forward_ref"),ow=Symbol.for("react.suspense"),iw=Symbol.for("react.memo"),lw=Symbol.for("react.lazy"),Hd=Symbol.iterator;function aw(e){return e===null||typeof e!="object"?null:(e=Hd&&e[Hd]||e["@@iterator"],typeof e=="function"?e:null)}var rg={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},og=Object.assign,ig={};function mo(e,t,n){this.props=e,this.context=t,this.refs=ig,this.updater=n||rg}mo.prototype.isReactComponent={};mo.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};mo.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function lg(){}lg.prototype=mo.prototype;function tc(e,t,n){this.props=e,this.context=t,this.refs=ig,this.updater=n||rg}var nc=tc.prototype=new lg;nc.constructor=tc;og(nc,mo.prototype);nc.isPureReactComponent=!0;var Gd=Array.isArray,ag=Object.prototype.hasOwnProperty,rc={current:null},sg={key:!0,ref:!0,__self:!0,__source:!0};function ug(e,t,n){var r,o={},i=null,l=null;if(t!=null)for(r in t.ref!==void 0&&(l=t.ref),t.key!==void 0&&(i=""+t.key),t)ag.call(t,r)&&!sg.hasOwnProperty(r)&&(o[r]=t[r]);var a=arguments.length-2;if(a===1)o.children=n;else if(1>>1,oe=I[W];if(0>>1;Wo(rt,z))geo(Ee,rt)?(I[W]=Ee,I[ge]=z,W=ge):(I[W]=rt,I[Ne]=z,W=Ne);else if(geo(Ee,z))I[W]=Ee,I[ge]=z,W=ge;else break e}}return N}function o(I,N){var z=I.sortIndex-N.sortIndex;return z!==0?z:I.id-N.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var l=Date,a=l.now();e.unstable_now=function(){return l.now()-a}}var s=[],u=[],c=1,d=null,f=3,p=!1,y=!1,m=!1,S=typeof setTimeout=="function"?setTimeout:null,g=typeof clearTimeout=="function"?clearTimeout:null,h=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function w(I){for(var N=n(u);N!==null;){if(N.callback===null)r(u);else if(N.startTime<=I)r(u),N.sortIndex=N.expirationTime,t(s,N);else break;N=n(u)}}function x(I){if(m=!1,w(I),!y)if(n(s)!==null)y=!0,Z(P);else{var N=n(u);N!==null&&ie(x,N.startTime-I)}}function P(I,N){y=!1,m&&(m=!1,g(C),C=-1),p=!0;var z=f;try{for(w(N),d=n(s);d!==null&&(!(d.expirationTime>N)||I&&!b());){var W=d.callback;if(typeof W=="function"){d.callback=null,f=d.priorityLevel;var oe=W(d.expirationTime<=N);N=e.unstable_now(),typeof oe=="function"?d.callback=oe:d===n(s)&&r(s),w(N)}else r(s);d=n(s)}if(d!==null)var De=!0;else{var Ne=n(u);Ne!==null&&ie(x,Ne.startTime-N),De=!1}return De}finally{d=null,f=z,p=!1}}var D=!1,k=null,C=-1,F=5,T=-1;function b(){return!(e.unstable_now()-TI||125W?(I.sortIndex=z,t(u,I),n(s)===null&&I===n(u)&&(m?(g(C),C=-1):m=!0,ie(x,z-W))):(I.sortIndex=oe,t(s,I),y||p||(y=!0,Z(P))),I},e.unstable_shouldYield=b,e.unstable_wrapCallback=function(I){var N=f;return function(){var z=f;f=N;try{return I.apply(this,arguments)}finally{f=z}}}})(gg);pg.exports=gg;var yw=pg.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var ww=v,yt=yw;function O(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ks=Object.prototype.hasOwnProperty,Sw=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Kd={},Qd={};function xw(e){return Ks.call(Qd,e)?!0:Ks.call(Kd,e)?!1:Sw.test(e)?Qd[e]=!0:(Kd[e]=!0,!1)}function Cw(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Rw(e,t,n,r){if(t===null||typeof t>"u"||Cw(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function tt(e,t,n,r,o,i,l){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=l}var He={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){He[e]=new tt(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];He[t]=new tt(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){He[e]=new tt(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){He[e]=new tt(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){He[e]=new tt(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){He[e]=new tt(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){He[e]=new tt(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){He[e]=new tt(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){He[e]=new tt(e,5,!1,e.toLowerCase(),null,!1,!1)});var lc=/[\-:]([a-z])/g;function ac(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(lc,ac);He[t]=new tt(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(lc,ac);He[t]=new tt(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(lc,ac);He[t]=new tt(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){He[e]=new tt(e,1,!1,e.toLowerCase(),null,!1,!1)});He.xlinkHref=new tt("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){He[e]=new tt(e,1,!1,e.toLowerCase(),null,!0,!0)});function sc(e,t,n,r){var o=He.hasOwnProperty(t)?He[t]:null;(o!==null?o.type!==0:r||!(2a||o[l]!==i[a]){var s=` +`+o[l].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=l&&0<=a);break}}}finally{ts=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?zo(e):""}function Ew(e){switch(e.tag){case 5:return zo(e.type);case 16:return zo("Lazy");case 13:return zo("Suspense");case 19:return zo("SuspenseList");case 0:case 2:case 15:return e=ns(e.type,!1),e;case 11:return e=ns(e.type.render,!1),e;case 1:return e=ns(e.type,!0),e;default:return""}}function Zs(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case jr:return"Fragment";case Ar:return"Portal";case Qs:return"Profiler";case uc:return"StrictMode";case Xs:return"Suspense";case Ys:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case vg:return(e.displayName||"Context")+".Consumer";case mg:return(e._context.displayName||"Context")+".Provider";case cc:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case dc:return t=e.displayName||null,t!==null?t:Zs(e.type)||"Memo";case In:t=e._payload,e=e._init;try{return Zs(e(t))}catch{}}return null}function _w(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Zs(t);case 8:return t===uc?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Kn(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function wg(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Pw(e){var t=wg(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(l){r=""+l,i.call(this,l)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(l){r=""+l},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Ji(e){e._valueTracker||(e._valueTracker=Pw(e))}function Sg(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=wg(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function zl(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Js(e,t){var n=t.checked;return Re({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Yd(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Kn(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function xg(e,t){t=t.checked,t!=null&&sc(e,"checked",t,!1)}function qs(e,t){xg(e,t);var n=Kn(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?eu(e,t.type,n):t.hasOwnProperty("defaultValue")&&eu(e,t.type,Kn(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Zd(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function eu(e,t,n){(t!=="number"||zl(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var $o=Array.isArray;function Xr(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o"+t.valueOf().toString()+"",t=qi.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function ni(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Go={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Mw=["Webkit","ms","Moz","O"];Object.keys(Go).forEach(function(e){Mw.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Go[t]=Go[e]})});function _g(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Go.hasOwnProperty(e)&&Go[e]?(""+t).trim():t+"px"}function Pg(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,o=_g(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}var kw=Re({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ru(e,t){if(t){if(kw[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(O(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(O(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(O(61))}if(t.style!=null&&typeof t.style!="object")throw Error(O(62))}}function ou(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var iu=null;function fc(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var lu=null,Yr=null,Zr=null;function ef(e){if(e=ki(e)){if(typeof lu!="function")throw Error(O(280));var t=e.stateNode;t&&(t=_a(t),lu(e.stateNode,e.type,t))}}function Mg(e){Yr?Zr?Zr.push(e):Zr=[e]:Yr=e}function kg(){if(Yr){var e=Yr,t=Zr;if(Zr=Yr=null,ef(e),t)for(e=0;e>>=0,e===0?32:31-(zw(e)/$w|0)|0}var el=64,tl=4194304;function Vo(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Bl(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,o=e.suspendedLanes,i=e.pingedLanes,l=n&268435455;if(l!==0){var a=l&~o;a!==0?r=Vo(a):(i&=l,i!==0&&(r=Vo(i)))}else l=n&~o,l!==0?r=Vo(l):i!==0&&(r=Vo(i));if(r===0)return 0;if(t!==0&&t!==r&&!(t&o)&&(o=r&-r,i=t&-t,o>=i||o===16&&(i&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function Pi(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Ot(t),e[t]=n}function Hw(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Ko),cf=" ",df=!1;function Qg(e,t){switch(e){case"keyup":return y0.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Xg(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var br=!1;function S0(e,t){switch(e){case"compositionend":return Xg(t);case"keypress":return t.which!==32?null:(df=!0,cf);case"textInput":return e=t.data,e===cf&&df?null:e;default:return null}}function x0(e,t){if(br)return e==="compositionend"||!Sc&&Qg(e,t)?(e=Wg(),Pl=vc=Fn=null,br=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=hf(n)}}function qg(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?qg(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function eh(){for(var e=window,t=zl();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=zl(e.document)}return t}function xc(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function N0(e){var t=eh(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&qg(n.ownerDocument.documentElement,n)){if(r!==null&&xc(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var o=n.textContent.length,i=Math.min(r.start,o);r=r.end===void 0?i:Math.min(r.end,o),!e.extend&&i>r&&(o=r,r=i,i=o),o=mf(n,i);var l=mf(n,r);o&&l&&(e.rangeCount!==1||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==l.node||e.focusOffset!==l.offset)&&(t=t.createRange(),t.setStart(o.node,o.offset),e.removeAllRanges(),i>r?(e.addRange(t),e.extend(l.node,l.offset)):(t.setEnd(l.node,l.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,zr=null,fu=null,Xo=null,pu=!1;function vf(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;pu||zr==null||zr!==zl(r)||(r=zr,"selectionStart"in r&&xc(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Xo&&si(Xo,r)||(Xo=r,r=Wl(fu,"onSelect"),0Ur||(e.current=wu[Ur],wu[Ur]=null,Ur--)}function pe(e,t){Ur++,wu[Ur]=e.current,e.current=t}var Qn={},Ye=er(Qn),at=er(!1),vr=Qn;function lo(e,t){var n=e.type.contextTypes;if(!n)return Qn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in n)o[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function st(e){return e=e.childContextTypes,e!=null}function Ql(){ye(at),ye(Ye)}function Ef(e,t,n){if(Ye.current!==Qn)throw Error(O(168));pe(Ye,t),pe(at,n)}function uh(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var o in r)if(!(o in t))throw Error(O(108,_w(e)||"Unknown",o));return Re({},n,r)}function Xl(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Qn,vr=Ye.current,pe(Ye,e),pe(at,at.current),!0}function _f(e,t,n){var r=e.stateNode;if(!r)throw Error(O(169));n?(e=uh(e,t,vr),r.__reactInternalMemoizedMergedChildContext=e,ye(at),ye(Ye),pe(Ye,e)):ye(at),pe(at,n)}var sn=null,Pa=!1,ms=!1;function ch(e){sn===null?sn=[e]:sn.push(e)}function U0(e){Pa=!0,ch(e)}function tr(){if(!ms&&sn!==null){ms=!0;var e=0,t=de;try{var n=sn;for(de=1;e>=l,o-=l,un=1<<32-Ot(t)+o|n<C?(F=k,k=null):F=k.sibling;var T=f(g,k,w[C],x);if(T===null){k===null&&(k=F);break}e&&k&&T.alternate===null&&t(g,k),h=i(T,h,C),D===null?P=T:D.sibling=T,D=T,k=F}if(C===w.length)return n(g,k),we&&sr(g,C),P;if(k===null){for(;CC?(F=k,k=null):F=k.sibling;var b=f(g,k,T.value,x);if(b===null){k===null&&(k=F);break}e&&k&&b.alternate===null&&t(g,k),h=i(b,h,C),D===null?P=b:D.sibling=b,D=b,k=F}if(T.done)return n(g,k),we&&sr(g,C),P;if(k===null){for(;!T.done;C++,T=w.next())T=d(g,T.value,x),T!==null&&(h=i(T,h,C),D===null?P=T:D.sibling=T,D=T);return we&&sr(g,C),P}for(k=r(g,k);!T.done;C++,T=w.next())T=p(k,g,C,T.value,x),T!==null&&(e&&T.alternate!==null&&k.delete(T.key===null?C:T.key),h=i(T,h,C),D===null?P=T:D.sibling=T,D=T);return e&&k.forEach(function(j){return t(g,j)}),we&&sr(g,C),P}function S(g,h,w,x){if(typeof w=="object"&&w!==null&&w.type===jr&&w.key===null&&(w=w.props.children),typeof w=="object"&&w!==null){switch(w.$$typeof){case Zi:e:{for(var P=w.key,D=h;D!==null;){if(D.key===P){if(P=w.type,P===jr){if(D.tag===7){n(g,D.sibling),h=o(D,w.props.children),h.return=g,g=h;break e}}else if(D.elementType===P||typeof P=="object"&&P!==null&&P.$$typeof===In&&kf(P)===D.type){n(g,D.sibling),h=o(D,w.props),h.ref=No(g,D,w),h.return=g,g=h;break e}n(g,D);break}else t(g,D);D=D.sibling}w.type===jr?(h=mr(w.props.children,g.mode,x,w.key),h.return=g,g=h):(x=Ol(w.type,w.key,w.props,null,g.mode,x),x.ref=No(g,h,w),x.return=g,g=x)}return l(g);case Ar:e:{for(D=w.key;h!==null;){if(h.key===D)if(h.tag===4&&h.stateNode.containerInfo===w.containerInfo&&h.stateNode.implementation===w.implementation){n(g,h.sibling),h=o(h,w.children||[]),h.return=g,g=h;break e}else{n(g,h);break}else t(g,h);h=h.sibling}h=Es(w,g.mode,x),h.return=g,g=h}return l(g);case In:return D=w._init,S(g,h,D(w._payload),x)}if($o(w))return y(g,h,w,x);if(_o(w))return m(g,h,w,x);sl(g,w)}return typeof w=="string"&&w!==""||typeof w=="number"?(w=""+w,h!==null&&h.tag===6?(n(g,h.sibling),h=o(h,w),h.return=g,g=h):(n(g,h),h=Rs(w,g.mode,x),h.return=g,g=h),l(g)):n(g,h)}return S}var so=gh(!0),hh=gh(!1),Jl=er(null),ql=null,Gr=null,_c=null;function Pc(){_c=Gr=ql=null}function Mc(e){var t=Jl.current;ye(Jl),e._currentValue=t}function Cu(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function qr(e,t){ql=e,_c=Gr=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(lt=!0),e.firstContext=null)}function Mt(e){var t=e._currentValue;if(_c!==e)if(e={context:e,memoizedValue:t,next:null},Gr===null){if(ql===null)throw Error(O(308));Gr=e,ql.dependencies={lanes:0,firstContext:e}}else Gr=Gr.next=e;return t}var fr=null;function kc(e){fr===null?fr=[e]:fr.push(e)}function mh(e,t,n,r){var o=t.interleaved;return o===null?(n.next=n,kc(t)):(n.next=o.next,o.next=n),t.interleaved=n,hn(e,r)}function hn(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Tn=!1;function Dc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function vh(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function dn(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Bn(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,ae&2){var o=r.pending;return o===null?t.next=t:(t.next=o.next,o.next=t),r.pending=t,hn(e,n)}return o=r.interleaved,o===null?(t.next=t,kc(r)):(t.next=o.next,o.next=t),r.interleaved=t,hn(e,n)}function kl(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,gc(e,n)}}function Df(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var o=null,i=null;if(n=n.firstBaseUpdate,n!==null){do{var l={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};i===null?o=i=l:i=i.next=l,n=n.next}while(n!==null);i===null?o=i=t:i=i.next=t}else o=i=t;n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:i,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function ea(e,t,n,r){var o=e.updateQueue;Tn=!1;var i=o.firstBaseUpdate,l=o.lastBaseUpdate,a=o.shared.pending;if(a!==null){o.shared.pending=null;var s=a,u=s.next;s.next=null,l===null?i=u:l.next=u,l=s;var c=e.alternate;c!==null&&(c=c.updateQueue,a=c.lastBaseUpdate,a!==l&&(a===null?c.firstBaseUpdate=u:a.next=u,c.lastBaseUpdate=s))}if(i!==null){var d=o.baseState;l=0,c=u=s=null,a=i;do{var f=a.lane,p=a.eventTime;if((r&f)===f){c!==null&&(c=c.next={eventTime:p,lane:0,tag:a.tag,payload:a.payload,callback:a.callback,next:null});e:{var y=e,m=a;switch(f=t,p=n,m.tag){case 1:if(y=m.payload,typeof y=="function"){d=y.call(p,d,f);break e}d=y;break e;case 3:y.flags=y.flags&-65537|128;case 0:if(y=m.payload,f=typeof y=="function"?y.call(p,d,f):y,f==null)break e;d=Re({},d,f);break e;case 2:Tn=!0}}a.callback!==null&&a.lane!==0&&(e.flags|=64,f=o.effects,f===null?o.effects=[a]:f.push(a))}else p={eventTime:p,lane:f,tag:a.tag,payload:a.payload,callback:a.callback,next:null},c===null?(u=c=p,s=d):c=c.next=p,l|=f;if(a=a.next,a===null){if(a=o.shared.pending,a===null)break;f=a,a=f.next,f.next=null,o.lastBaseUpdate=f,o.shared.pending=null}}while(!0);if(c===null&&(s=d),o.baseState=s,o.firstBaseUpdate=u,o.lastBaseUpdate=c,t=o.shared.interleaved,t!==null){o=t;do l|=o.lane,o=o.next;while(o!==t)}else i===null&&(o.shared.lanes=0);Sr|=l,e.lanes=l,e.memoizedState=d}}function Nf(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=ys.transition;ys.transition={};try{e(!1),t()}finally{de=n,ys.transition=r}}function Oh(){return kt().memoizedState}function W0(e,t,n){var r=Gn(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Fh(e))Ah(t,n);else if(n=mh(e,t,n,r),n!==null){var o=qe();Ft(n,e,r,o),jh(n,t,r)}}function K0(e,t,n){var r=Gn(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Fh(e))Ah(t,o);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var l=t.lastRenderedState,a=i(l,n);if(o.hasEagerState=!0,o.eagerState=a,jt(a,l)){var s=t.interleaved;s===null?(o.next=o,kc(t)):(o.next=s.next,s.next=o),t.interleaved=o;return}}catch{}finally{}n=mh(e,t,o,r),n!==null&&(o=qe(),Ft(n,e,r,o),jh(n,t,r))}}function Fh(e){var t=e.alternate;return e===Ce||t!==null&&t===Ce}function Ah(e,t){Yo=na=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function jh(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,gc(e,n)}}var ra={readContext:Mt,useCallback:We,useContext:We,useEffect:We,useImperativeHandle:We,useInsertionEffect:We,useLayoutEffect:We,useMemo:We,useReducer:We,useRef:We,useState:We,useDebugValue:We,useDeferredValue:We,useTransition:We,useMutableSource:We,useSyncExternalStore:We,useId:We,unstable_isNewReconciler:!1},Q0={readContext:Mt,useCallback:function(e,t){return Bt().memoizedState=[e,t===void 0?null:t],e},useContext:Mt,useEffect:Tf,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Nl(4194308,4,Dh.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Nl(4194308,4,e,t)},useInsertionEffect:function(e,t){return Nl(4,2,e,t)},useMemo:function(e,t){var n=Bt();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Bt();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=W0.bind(null,Ce,e),[r.memoizedState,e]},useRef:function(e){var t=Bt();return e={current:e},t.memoizedState=e},useState:If,useDebugValue:jc,useDeferredValue:function(e){return Bt().memoizedState=e},useTransition:function(){var e=If(!1),t=e[0];return e=G0.bind(null,e[1]),Bt().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Ce,o=Bt();if(we){if(n===void 0)throw Error(O(407));n=n()}else{if(n=t(),$e===null)throw Error(O(349));wr&30||xh(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,Tf(Rh.bind(null,r,i,e),[e]),r.flags|=2048,mi(9,Ch.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=Bt(),t=$e.identifierPrefix;if(we){var n=cn,r=un;n=(r&~(1<<32-Ot(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=gi++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),n==="select"&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[Ht]=t,e[di]=r,Kh(e,t,!1,!1),t.stateNode=e;e:{switch(l=ou(n,r),n){case"dialog":ve("cancel",e),ve("close",e),o=r;break;case"iframe":case"object":case"embed":ve("load",e),o=r;break;case"video":case"audio":for(o=0;ofo&&(t.flags|=128,r=!0,Io(i,!1),t.lanes=4194304)}else{if(!r)if(e=ta(l),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Io(i,!0),i.tail===null&&i.tailMode==="hidden"&&!l.alternate&&!we)return Ke(t),null}else 2*ke()-i.renderingStartTime>fo&&n!==1073741824&&(t.flags|=128,r=!0,Io(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(n=i.last,n!==null?n.sibling=l:t.child=l,i.last=l)}return i.tail!==null?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=ke(),t.sibling=null,n=xe.current,pe(xe,r?n&1|2:n&1),t):(Ke(t),null);case 22:case 23:return Bc(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?ft&1073741824&&(Ke(t),t.subtreeFlags&6&&(t.flags|=8192)):Ke(t),null;case 24:return null;case 25:return null}throw Error(O(156,t.tag))}function nS(e,t){switch(Rc(t),t.tag){case 1:return st(t.type)&&Ql(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return uo(),ye(at),ye(Ye),Tc(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Ic(t),null;case 13:if(ye(xe),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(O(340));ao()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return ye(xe),null;case 4:return uo(),null;case 10:return Mc(t.type._context),null;case 22:case 23:return Bc(),null;case 24:return null;default:return null}}var cl=!1,Xe=!1,rS=typeof WeakSet=="function"?WeakSet:Set,V=null;function Wr(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Me(e,t,r)}else n.current=null}function Iu(e,t,n){try{n()}catch(r){Me(e,t,r)}}var Bf=!1;function oS(e,t){if(gu=Hl,e=eh(),xc(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch{n=null;break e}var l=0,a=-1,s=-1,u=0,c=0,d=e,f=null;t:for(;;){for(var p;d!==n||o!==0&&d.nodeType!==3||(a=l+o),d!==i||r!==0&&d.nodeType!==3||(s=l+r),d.nodeType===3&&(l+=d.nodeValue.length),(p=d.firstChild)!==null;)f=d,d=p;for(;;){if(d===e)break t;if(f===n&&++u===o&&(a=l),f===i&&++c===r&&(s=l),(p=d.nextSibling)!==null)break;d=f,f=d.parentNode}d=p}n=a===-1||s===-1?null:{start:a,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(hu={focusedElem:e,selectionRange:n},Hl=!1,V=t;V!==null;)if(t=V,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,V=e;else for(;V!==null;){t=V;try{var y=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(y!==null){var m=y.memoizedProps,S=y.memoizedState,g=t.stateNode,h=g.getSnapshotBeforeUpdate(t.elementType===t.type?m:Nt(t.type,m),S);g.__reactInternalSnapshotBeforeUpdate=h}break;case 3:var w=t.stateNode.containerInfo;w.nodeType===1?w.textContent="":w.nodeType===9&&w.documentElement&&w.removeChild(w.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(O(163))}}catch(x){Me(t,t.return,x)}if(e=t.sibling,e!==null){e.return=t.return,V=e;break}V=t.return}return y=Bf,Bf=!1,y}function Zo(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var o=r=r.next;do{if((o.tag&e)===e){var i=o.destroy;o.destroy=void 0,i!==void 0&&Iu(t,n,i)}o=o.next}while(o!==r)}}function Da(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Tu(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Yh(e){var t=e.alternate;t!==null&&(e.alternate=null,Yh(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ht],delete t[di],delete t[yu],delete t[$0],delete t[V0])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Zh(e){return e.tag===5||e.tag===3||e.tag===4}function Hf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Zh(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Lu(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Kl));else if(r!==4&&(e=e.child,e!==null))for(Lu(e,t,n),e=e.sibling;e!==null;)Lu(e,t,n),e=e.sibling}function Ou(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Ou(e,t,n),e=e.sibling;e!==null;)Ou(e,t,n),e=e.sibling}var Ue=null,It=!1;function Pn(e,t,n){for(n=n.child;n!==null;)Jh(e,t,n),n=n.sibling}function Jh(e,t,n){if(Kt&&typeof Kt.onCommitFiberUnmount=="function")try{Kt.onCommitFiberUnmount(xa,n)}catch{}switch(n.tag){case 5:Xe||Wr(n,t);case 6:var r=Ue,o=It;Ue=null,Pn(e,t,n),Ue=r,It=o,Ue!==null&&(It?(e=Ue,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Ue.removeChild(n.stateNode));break;case 18:Ue!==null&&(It?(e=Ue,n=n.stateNode,e.nodeType===8?hs(e.parentNode,n):e.nodeType===1&&hs(e,n),li(e)):hs(Ue,n.stateNode));break;case 4:r=Ue,o=It,Ue=n.stateNode.containerInfo,It=!0,Pn(e,t,n),Ue=r,It=o;break;case 0:case 11:case 14:case 15:if(!Xe&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){o=r=r.next;do{var i=o,l=i.destroy;i=i.tag,l!==void 0&&(i&2||i&4)&&Iu(n,t,l),o=o.next}while(o!==r)}Pn(e,t,n);break;case 1:if(!Xe&&(Wr(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){Me(n,t,a)}Pn(e,t,n);break;case 21:Pn(e,t,n);break;case 22:n.mode&1?(Xe=(r=Xe)||n.memoizedState!==null,Pn(e,t,n),Xe=r):Pn(e,t,n);break;default:Pn(e,t,n)}}function Gf(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new rS),t.forEach(function(r){var o=pS.bind(null,e,r);n.has(r)||(n.add(r),r.then(o,o))})}}function Dt(e,t){var n=t.deletions;if(n!==null)for(var r=0;ro&&(o=l),r&=~i}if(r=o,r=ke()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*lS(r/1960))-r,10e?16:e,An===null)var r=!1;else{if(e=An,An=null,la=0,ae&6)throw Error(O(331));var o=ae;for(ae|=4,V=e.current;V!==null;){var i=V,l=i.child;if(V.flags&16){var a=i.deletions;if(a!==null){for(var s=0;ske()-Vc?hr(e,0):$c|=n),ut(e,t)}function lm(e,t){t===0&&(e.mode&1?(t=tl,tl<<=1,!(tl&130023424)&&(tl=4194304)):t=1);var n=qe();e=hn(e,t),e!==null&&(Pi(e,t,n),ut(e,n))}function fS(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),lm(e,n)}function pS(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;o!==null&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(O(314))}r!==null&&r.delete(t),lm(e,n)}var am;am=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||at.current)lt=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return lt=!1,eS(e,t,n);lt=!!(e.flags&131072)}else lt=!1,we&&t.flags&1048576&&dh(t,Zl,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Il(e,t),e=t.pendingProps;var o=lo(t,Ye.current);qr(t,n),o=Oc(null,t,r,e,o,n);var i=Fc();return t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,st(r)?(i=!0,Xl(t)):i=!1,t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,Dc(t),o.updater=ka,t.stateNode=o,o._reactInternals=t,Eu(t,r,e,n),t=Mu(null,t,r,!0,i,n)):(t.tag=0,we&&i&&Cc(t),Je(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Il(e,t),e=t.pendingProps,o=r._init,r=o(r._payload),t.type=r,o=t.tag=hS(r),e=Nt(r,e),o){case 0:t=Pu(null,t,r,e,n);break e;case 1:t=$f(null,t,r,e,n);break e;case 11:t=bf(null,t,r,e,n);break e;case 14:t=zf(null,t,r,Nt(r.type,e),n);break e}throw Error(O(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Nt(r,o),Pu(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Nt(r,o),$f(e,t,r,o,n);case 3:e:{if(Hh(t),e===null)throw Error(O(387));r=t.pendingProps,i=t.memoizedState,o=i.element,vh(e,t),ea(t,r,null,n);var l=t.memoizedState;if(r=l.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:l.cache,pendingSuspenseBoundaries:l.pendingSuspenseBoundaries,transitions:l.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){o=co(Error(O(423)),t),t=Vf(e,t,r,n,o);break e}else if(r!==o){o=co(Error(O(424)),t),t=Vf(e,t,r,n,o);break e}else for(ht=Un(t.stateNode.containerInfo.firstChild),mt=t,we=!0,Lt=null,n=hh(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(ao(),r===o){t=mn(e,t,n);break e}Je(e,t,r,n)}t=t.child}return t;case 5:return yh(t),e===null&&xu(t),r=t.type,o=t.pendingProps,i=e!==null?e.memoizedProps:null,l=o.children,mu(r,o)?l=null:i!==null&&mu(r,i)&&(t.flags|=32),Bh(e,t),Je(e,t,l,n),t.child;case 6:return e===null&&xu(t),null;case 13:return Gh(e,t,n);case 4:return Nc(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=so(t,null,r,n):Je(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Nt(r,o),bf(e,t,r,o,n);case 7:return Je(e,t,t.pendingProps,n),t.child;case 8:return Je(e,t,t.pendingProps.children,n),t.child;case 12:return Je(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,l=o.value,pe(Jl,r._currentValue),r._currentValue=l,i!==null)if(jt(i.value,l)){if(i.children===o.children&&!at.current){t=mn(e,t,n);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var a=i.dependencies;if(a!==null){l=i.child;for(var s=a.firstContext;s!==null;){if(s.context===r){if(i.tag===1){s=dn(-1,n&-n),s.tag=2;var u=i.updateQueue;if(u!==null){u=u.shared;var c=u.pending;c===null?s.next=s:(s.next=c.next,c.next=s),u.pending=s}}i.lanes|=n,s=i.alternate,s!==null&&(s.lanes|=n),Cu(i.return,n,t),a.lanes|=n;break}s=s.next}}else if(i.tag===10)l=i.type===t.type?null:i.child;else if(i.tag===18){if(l=i.return,l===null)throw Error(O(341));l.lanes|=n,a=l.alternate,a!==null&&(a.lanes|=n),Cu(l,n,t),l=i.sibling}else l=i.child;if(l!==null)l.return=i;else for(l=i;l!==null;){if(l===t){l=null;break}if(i=l.sibling,i!==null){i.return=l.return,l=i;break}l=l.return}i=l}Je(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,qr(t,n),o=Mt(o),r=r(o),t.flags|=1,Je(e,t,r,n),t.child;case 14:return r=t.type,o=Nt(r,t.pendingProps),o=Nt(r.type,o),zf(e,t,r,o,n);case 15:return Vh(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Nt(r,o),Il(e,t),t.tag=1,st(r)?(e=!0,Xl(t)):e=!1,qr(t,n),bh(t,r,o),Eu(t,r,o,n),Mu(null,t,r,!0,e,n);case 19:return Wh(e,t,n);case 22:return Uh(e,t,n)}throw Error(O(156,t.tag))};function sm(e,t){return Fg(e,t)}function gS(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Et(e,t,n,r){return new gS(e,t,n,r)}function Gc(e){return e=e.prototype,!(!e||!e.isReactComponent)}function hS(e){if(typeof e=="function")return Gc(e)?1:0;if(e!=null){if(e=e.$$typeof,e===cc)return 11;if(e===dc)return 14}return 2}function Wn(e,t){var n=e.alternate;return n===null?(n=Et(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ol(e,t,n,r,o,i){var l=2;if(r=e,typeof e=="function")Gc(e)&&(l=1);else if(typeof e=="string")l=5;else e:switch(e){case jr:return mr(n.children,o,i,t);case uc:l=8,o|=8;break;case Qs:return e=Et(12,n,t,o|2),e.elementType=Qs,e.lanes=i,e;case Xs:return e=Et(13,n,t,o),e.elementType=Xs,e.lanes=i,e;case Ys:return e=Et(19,n,t,o),e.elementType=Ys,e.lanes=i,e;case yg:return Ia(n,o,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case mg:l=10;break e;case vg:l=9;break e;case cc:l=11;break e;case dc:l=14;break e;case In:l=16,r=null;break e}throw Error(O(130,e==null?e:typeof e,""))}return t=Et(l,n,t,o),t.elementType=e,t.type=r,t.lanes=i,t}function mr(e,t,n,r){return e=Et(7,e,r,t),e.lanes=n,e}function Ia(e,t,n,r){return e=Et(22,e,r,t),e.elementType=yg,e.lanes=n,e.stateNode={isHidden:!1},e}function Rs(e,t,n){return e=Et(6,e,null,t),e.lanes=n,e}function Es(e,t,n){return t=Et(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function mS(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=os(0),this.expirationTimes=os(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=os(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Wc(e,t,n,r,o,i,l,a,s){return e=new mS(e,t,n,a,s),t===1?(t=1,i===!0&&(t|=8)):t=0,i=Et(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Dc(i),e}function vS(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(fm)}catch(e){console.error(e)}}fm(),fg.exports=St;var Ni=fg.exports;const pm=eg(Ni),CS=qp({__proto__:null,default:pm},[Ni]);var gm,qf=Ni;gm=qf.createRoot,qf.hydrateRoot;/** + * @remix-run/router v1.19.2 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function Se(){return Se=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function po(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function ES(){return Math.random().toString(36).substr(2,8)}function tp(e,t){return{usr:e.state,key:e.key,idx:t}}function yi(e,t,n,r){return n===void 0&&(n=null),Se({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?nr(t):t,{state:n,key:t&&t.key||r||ES()})}function Cr(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&n!=="?"&&(t+=n.charAt(0)==="?"?n:"?"+n),r&&r!=="#"&&(t+=r.charAt(0)==="#"?r:"#"+r),t}function nr(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function _S(e,t,n,r){r===void 0&&(r={});let{window:o=document.defaultView,v5Compat:i=!1}=r,l=o.history,a=Te.Pop,s=null,u=c();u==null&&(u=0,l.replaceState(Se({},l.state,{idx:u}),""));function c(){return(l.state||{idx:null}).idx}function d(){a=Te.Pop;let S=c(),g=S==null?null:S-u;u=S,s&&s({action:a,location:m.location,delta:g})}function f(S,g){a=Te.Push;let h=yi(m.location,S,g);u=c()+1;let w=tp(h,u),x=m.createHref(h);try{l.pushState(w,"",x)}catch(P){if(P instanceof DOMException&&P.name==="DataCloneError")throw P;o.location.assign(x)}i&&s&&s({action:a,location:m.location,delta:1})}function p(S,g){a=Te.Replace;let h=yi(m.location,S,g);u=c();let w=tp(h,u),x=m.createHref(h);l.replaceState(w,"",x),i&&s&&s({action:a,location:m.location,delta:0})}function y(S){let g=o.location.origin!=="null"?o.location.origin:o.location.href,h=typeof S=="string"?S:Cr(S);return h=h.replace(/ $/,"%20"),te(g,"No window.location.(origin|href) available to create URL for href: "+h),new URL(h,g)}let m={get action(){return a},get location(){return e(o,l)},listen(S){if(s)throw new Error("A history only accepts one active listener");return o.addEventListener(ep,d),s=S,()=>{o.removeEventListener(ep,d),s=null}},createHref(S){return t(o,S)},createURL:y,encodeLocation(S){let g=y(S);return{pathname:g.pathname,search:g.search,hash:g.hash}},push:f,replace:p,go(S){return l.go(S)}};return m}var fe;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(fe||(fe={}));const PS=new Set(["lazy","caseSensitive","path","id","index","children"]);function MS(e){return e.index===!0}function wi(e,t,n,r){return n===void 0&&(n=[]),r===void 0&&(r={}),e.map((o,i)=>{let l=[...n,String(i)],a=typeof o.id=="string"?o.id:l.join("-");if(te(o.index!==!0||!o.children,"Cannot specify children on an index route"),te(!r[a],'Found a route id collision on id "'+a+`". Route id's must be globally unique within Data Router usages`),MS(o)){let s=Se({},o,t(o),{id:a});return r[a]=s,s}else{let s=Se({},o,t(o),{id:a,children:void 0});return r[a]=s,o.children&&(s.children=wi(o.children,t,l,r)),s}})}function cr(e,t,n){return n===void 0&&(n="/"),Fl(e,t,n,!1)}function Fl(e,t,n,r){let o=typeof t=="string"?nr(t):t,i=vn(o.pathname||"/",n);if(i==null)return null;let l=hm(e);DS(l);let a=null;for(let s=0;a==null&&s{let s={relativePath:a===void 0?i.path||"":a,caseSensitive:i.caseSensitive===!0,childrenIndex:l,route:i};s.relativePath.startsWith("/")&&(te(s.relativePath.startsWith(r),'Absolute route path "'+s.relativePath+'" nested under path '+('"'+r+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),s.relativePath=s.relativePath.slice(r.length));let u=fn([r,s.relativePath]),c=n.concat(s);i.children&&i.children.length>0&&(te(i.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+u+'".')),hm(i.children,t,c,u)),!(i.path==null&&!i.index)&&t.push({path:u,score:AS(u,i.index),routesMeta:c})};return e.forEach((i,l)=>{var a;if(i.path===""||!((a=i.path)!=null&&a.includes("?")))o(i,l);else for(let s of mm(i.path))o(i,l,s)}),t}function mm(e){let t=e.split("/");if(t.length===0)return[];let[n,...r]=t,o=n.endsWith("?"),i=n.replace(/\?$/,"");if(r.length===0)return o?[i,""]:[i];let l=mm(r.join("/")),a=[];return a.push(...l.map(s=>s===""?i:[i,s].join("/"))),o&&a.push(...l),a.map(s=>e.startsWith("/")&&s===""?"/":s)}function DS(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:jS(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}const NS=/^:[\w-]+$/,IS=3,TS=2,LS=1,OS=10,FS=-2,np=e=>e==="*";function AS(e,t){let n=e.split("/"),r=n.length;return n.some(np)&&(r+=FS),t&&(r+=TS),n.filter(o=>!np(o)).reduce((o,i)=>o+(NS.test(i)?IS:i===""?LS:OS),r)}function jS(e,t){return e.length===t.length&&e.slice(0,-1).every((r,o)=>r===t[o])?e[e.length-1]-t[t.length-1]:0}function bS(e,t,n){n===void 0&&(n=!1);let{routesMeta:r}=e,o={},i="/",l=[];for(let a=0;a{let{paramName:f,isOptional:p}=c;if(f==="*"){let m=a[d]||"";l=i.slice(0,i.length-m.length).replace(/(.)\/+$/,"$1")}const y=a[d];return p&&!y?u[f]=void 0:u[f]=(y||"").replace(/%2F/g,"/"),u},{}),pathname:i,pathnameBase:l,pattern:e}}function zS(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!0),po(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let r=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(l,a,s)=>(r.push({paramName:a,isOptional:s!=null}),s?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(r.push({paramName:"*"}),o+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":e!==""&&e!=="/"&&(o+="(?:(?=\\/|$))"),[new RegExp(o,t?void 0:"i"),r]}function $S(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return po(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function vn(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&r!=="/"?null:e.slice(n)||"/"}function VS(e,t){t===void 0&&(t="/");let{pathname:n,search:r="",hash:o=""}=typeof e=="string"?nr(e):e;return{pathname:n?n.startsWith("/")?n:US(n,t):t,search:HS(r),hash:GS(o)}}function US(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(o=>{o===".."?n.length>1&&n.pop():o!=="."&&n.push(o)}),n.length>1?n.join("/"):"/"}function _s(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the ")+("`to."+n+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function vm(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function Yc(e,t){let n=vm(e);return t?n.map((r,o)=>o===n.length-1?r.pathname:r.pathnameBase):n.map(r=>r.pathnameBase)}function Zc(e,t,n,r){r===void 0&&(r=!1);let o;typeof e=="string"?o=nr(e):(o=Se({},e),te(!o.pathname||!o.pathname.includes("?"),_s("?","pathname","search",o)),te(!o.pathname||!o.pathname.includes("#"),_s("#","pathname","hash",o)),te(!o.search||!o.search.includes("#"),_s("#","search","hash",o)));let i=e===""||o.pathname==="",l=i?"/":o.pathname,a;if(l==null)a=n;else{let d=t.length-1;if(!r&&l.startsWith("..")){let f=l.split("/");for(;f[0]==="..";)f.shift(),d-=1;o.pathname=f.join("/")}a=d>=0?t[d]:"/"}let s=VS(o,a),u=l&&l!=="/"&&l.endsWith("/"),c=(i||l===".")&&n.endsWith("/");return!s.pathname.endsWith("/")&&(u||c)&&(s.pathname+="/"),s}const fn=e=>e.join("/").replace(/\/\/+/g,"/"),BS=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),HS=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,GS=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;class ca{constructor(t,n,r,o){o===void 0&&(o=!1),this.status=t,this.statusText=n||"",this.internal=o,r instanceof Error?(this.data=r.toString(),this.error=r):this.data=r}}function Aa(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const ym=["post","put","patch","delete"],WS=new Set(ym),KS=["get",...ym],QS=new Set(KS),XS=new Set([301,302,303,307,308]),YS=new Set([307,308]),Ps={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},ZS={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},Lo={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},Jc=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,JS=e=>({hasErrorBoundary:!!e.hasErrorBoundary}),wm="remix-router-transitions";function qS(e){const t=e.window?e.window:typeof window<"u"?window:void 0,n=typeof t<"u"&&typeof t.document<"u"&&typeof t.document.createElement<"u",r=!n;te(e.routes.length>0,"You must provide a non-empty routes array to createRouter");let o;if(e.mapRouteProperties)o=e.mapRouteProperties;else if(e.detectErrorBoundary){let E=e.detectErrorBoundary;o=_=>({hasErrorBoundary:E(_)})}else o=JS;let i={},l=wi(e.routes,o,void 0,i),a,s=e.basename||"/",u=e.unstable_dataStrategy||ix,c=e.unstable_patchRoutesOnNavigation,d=Se({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_partialHydration:!1,v7_prependBasename:!1,v7_relativeSplatPath:!1,v7_skipActionErrorRevalidation:!1},e.future),f=null,p=new Set,y=1e3,m=new Set,S=null,g=null,h=null,w=e.hydrationData!=null,x=cr(l,e.history.location,s),P=null;if(x==null&&!c){let E=Ze(404,{pathname:e.history.location.pathname}),{matches:_,route:M}=dp(l);x=_,P={[M.id]:E}}x&&!e.hydrationData&&Hi(x,l,e.history.location.pathname).active&&(x=null);let D;if(x)if(x.some(E=>E.route.lazy))D=!1;else if(!x.some(E=>E.route.loader))D=!0;else if(d.v7_partialHydration){let E=e.hydrationData?e.hydrationData.loaderData:null,_=e.hydrationData?e.hydrationData.errors:null,M=L=>L.route.loader?typeof L.route.loader=="function"&&L.route.loader.hydrate===!0?!1:E&&E[L.route.id]!==void 0||_&&_[L.route.id]!==void 0:!0;if(_){let L=x.findIndex($=>_[$.route.id]!==void 0);D=x.slice(0,L+1).every(M)}else D=x.every(M)}else D=e.hydrationData!=null;else if(D=!1,x=[],d.v7_partialHydration){let E=Hi(null,l,e.history.location.pathname);E.active&&E.matches&&(x=E.matches)}let k,C={historyAction:e.history.action,location:e.history.location,matches:x,initialized:D,navigation:Ps,restoreScrollPosition:e.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:e.hydrationData&&e.hydrationData.loaderData||{},actionData:e.hydrationData&&e.hydrationData.actionData||null,errors:e.hydrationData&&e.hydrationData.errors||P,fetchers:new Map,blockers:new Map},F=Te.Pop,T=!1,b,j=!1,Q=new Map,G=null,se=!1,Z=!1,ie=[],I=new Set,N=new Map,z=0,W=-1,oe=new Map,De=new Set,Ne=new Map,rt=new Map,ge=new Set,Ee=new Map,ct=new Map,ot=new Map,Vt;function bi(){if(f=e.history.listen(E=>{let{action:_,location:M,delta:L}=E;if(Vt){Vt(),Vt=void 0;return}po(ct.size===0||L!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let $=zd({currentLocation:C.location,nextLocation:M,historyAction:_});if($&&L!=null){let H=new Promise(J=>{Vt=J});e.history.go(L*-1),Ui($,{state:"blocked",location:M,proceed(){Ui($,{state:"proceeding",proceed:void 0,reset:void 0,location:M}),H.then(()=>e.history.go(L))},reset(){let J=new Map(C.blockers);J.set($,Lo),je({blockers:J})}});return}return Jt(_,M)}),n){Sx(t,Q);let E=()=>xx(t,Q);t.addEventListener("pagehide",E),G=()=>t.removeEventListener("pagehide",E)}return C.initialized||Jt(Te.Pop,C.location,{initialHydration:!0}),k}function zi(){f&&f(),G&&G(),p.clear(),b&&b.abort(),C.fetchers.forEach((E,_)=>Vi(_)),C.blockers.forEach((E,_)=>bd(_))}function lr(E){return p.add(E),()=>p.delete(E)}function je(E,_){_===void 0&&(_={}),C=Se({},C,E);let M=[],L=[];d.v7_fetcherPersist&&C.fetchers.forEach(($,H)=>{$.state==="idle"&&(ge.has(H)?L.push(H):M.push(H))}),[...p].forEach($=>$(C,{deletedFetchers:L,unstable_viewTransitionOpts:_.viewTransitionOpts,unstable_flushSync:_.flushSync===!0})),d.v7_fetcherPersist&&(M.forEach($=>C.fetchers.delete($)),L.forEach($=>Vi($)))}function Cn(E,_,M){var L,$;let{flushSync:H}=M===void 0?{}:M,J=C.actionData!=null&&C.navigation.formMethod!=null&&Tt(C.navigation.formMethod)&&C.navigation.state==="loading"&&((L=E.state)==null?void 0:L._isRedirect)!==!0,A;_.actionData?Object.keys(_.actionData).length>0?A=_.actionData:A=null:J?A=C.actionData:A=null;let K=_.loaderData?up(C.loaderData,_.loaderData,_.matches||[],_.errors):C.loaderData,U=C.blockers;U.size>0&&(U=new Map(U),U.forEach((ce,he)=>U.set(he,Lo)));let B=T===!0||C.navigation.formMethod!=null&&Tt(C.navigation.formMethod)&&(($=E.state)==null?void 0:$._isRedirect)!==!0;a&&(l=a,a=void 0),se||F===Te.Pop||(F===Te.Push?e.history.push(E,E.state):F===Te.Replace&&e.history.replace(E,E.state));let ue;if(F===Te.Pop){let ce=Q.get(C.location.pathname);ce&&ce.has(E.pathname)?ue={currentLocation:C.location,nextLocation:E}:Q.has(E.pathname)&&(ue={currentLocation:E,nextLocation:C.location})}else if(j){let ce=Q.get(C.location.pathname);ce?ce.add(E.pathname):(ce=new Set([E.pathname]),Q.set(C.location.pathname,ce)),ue={currentLocation:C.location,nextLocation:E}}je(Se({},_,{actionData:A,loaderData:K,historyAction:F,location:E,initialized:!0,navigation:Ps,revalidation:"idle",restoreScrollPosition:Vd(E,_.matches||C.matches),preventScrollReset:B,blockers:U}),{viewTransitionOpts:ue,flushSync:H===!0}),F=Te.Pop,T=!1,j=!1,se=!1,Z=!1,ie=[]}async function $i(E,_){if(typeof E=="number"){e.history.go(E);return}let M=zu(C.location,C.matches,s,d.v7_prependBasename,E,d.v7_relativeSplatPath,_==null?void 0:_.fromRouteId,_==null?void 0:_.relative),{path:L,submission:$,error:H}=rp(d.v7_normalizeFormMethod,!1,M,_),J=C.location,A=yi(C.location,L,_&&_.state);A=Se({},A,e.history.encodeLocation(A));let K=_&&_.replace!=null?_.replace:void 0,U=Te.Push;K===!0?U=Te.Replace:K===!1||$!=null&&Tt($.formMethod)&&$.formAction===C.location.pathname+C.location.search&&(U=Te.Replace);let B=_&&"preventScrollReset"in _?_.preventScrollReset===!0:void 0,ue=(_&&_.unstable_flushSync)===!0,ce=zd({currentLocation:J,nextLocation:A,historyAction:U});if(ce){Ui(ce,{state:"blocked",location:A,proceed(){Ui(ce,{state:"proceeding",proceed:void 0,reset:void 0,location:A}),$i(E,_)},reset(){let he=new Map(C.blockers);he.set(ce,Lo),je({blockers:he})}});return}return await Jt(U,A,{submission:$,pendingError:H,preventScrollReset:B,replace:_&&_.replace,enableViewTransition:_&&_.unstable_viewTransition,flushSync:ue})}function Xa(){if(Ya(),je({revalidation:"loading"}),C.navigation.state!=="submitting"){if(C.navigation.state==="idle"){Jt(C.historyAction,C.location,{startUninterruptedRevalidation:!0});return}Jt(F||C.historyAction,C.navigation.location,{overrideNavigation:C.navigation,enableViewTransition:j===!0})}}async function Jt(E,_,M){b&&b.abort(),b=null,F=E,se=(M&&M.startUninterruptedRevalidation)===!0,Ky(C.location,C.matches),T=(M&&M.preventScrollReset)===!0,j=(M&&M.enableViewTransition)===!0;let L=a||l,$=M&&M.overrideNavigation,H=cr(L,_,s),J=(M&&M.flushSync)===!0,A=Hi(H,L,_.pathname);if(A.active&&A.matches&&(H=A.matches),!H){let{error:le,notFoundMatches:be,route:Ie}=Za(_.pathname);Cn(_,{matches:be,loaderData:{},errors:{[Ie.id]:le}},{flushSync:J});return}if(C.initialized&&!Z&&dx(C.location,_)&&!(M&&M.submission&&Tt(M.submission.formMethod))){Cn(_,{matches:H},{flushSync:J});return}b=new AbortController;let K=Tr(e.history,_,b.signal,M&&M.submission),U;if(M&&M.pendingError)U=[Qr(H).route.id,{type:fe.error,error:M.pendingError}];else if(M&&M.submission&&Tt(M.submission.formMethod)){let le=await Dr(K,_,M.submission,H,A.active,{replace:M.replace,flushSync:J});if(le.shortCircuited)return;if(le.pendingActionResult){let[be,Ie]=le.pendingActionResult;if(pt(Ie)&&Aa(Ie.error)&&Ie.error.status===404){b=null,Cn(_,{matches:le.matches,loaderData:{},errors:{[be]:Ie.error}});return}}H=le.matches||H,U=le.pendingActionResult,$=Ms(_,M.submission),J=!1,A.active=!1,K=Tr(e.history,K.url,K.signal)}let{shortCircuited:B,matches:ue,loaderData:ce,errors:he}=await zy(K,_,H,A.active,$,M&&M.submission,M&&M.fetcherSubmission,M&&M.replace,M&&M.initialHydration===!0,J,U);B||(b=null,Cn(_,Se({matches:ue||H},cp(U),{loaderData:ce,errors:he})))}async function Dr(E,_,M,L,$,H){H===void 0&&(H={}),Ya();let J=yx(_,M);if(je({navigation:J},{flushSync:H.flushSync===!0}),$){let U=await Gi(L,_.pathname,E.signal);if(U.type==="aborted")return{shortCircuited:!0};if(U.type==="error"){let{boundaryId:B,error:ue}=Bi(_.pathname,U);return{matches:U.partialMatches,pendingActionResult:[B,{type:fe.error,error:ue}]}}else if(U.matches)L=U.matches;else{let{notFoundMatches:B,error:ue,route:ce}=Za(_.pathname);return{matches:B,pendingActionResult:[ce.id,{type:fe.error,error:ue}]}}}let A,K=Bo(L,_);if(!K.route.action&&!K.route.lazy)A={type:fe.error,error:Ze(405,{method:E.method,pathname:_.pathname,routeId:K.route.id})};else if(A=(await Ro("action",C,E,[K],L,null))[K.route.id],E.signal.aborted)return{shortCircuited:!0};if(gr(A)){let U;return H&&H.replace!=null?U=H.replace:U=lp(A.response.headers.get("Location"),new URL(E.url),s)===C.location.pathname+C.location.search,await ar(E,A,!0,{submission:M,replace:U}),{shortCircuited:!0}}if(jn(A))throw Ze(400,{type:"defer-action"});if(pt(A)){let U=Qr(L,K.route.id);return(H&&H.replace)!==!0&&(F=Te.Push),{matches:L,pendingActionResult:[U.route.id,A]}}return{matches:L,pendingActionResult:[K.route.id,A]}}async function zy(E,_,M,L,$,H,J,A,K,U,B){let ue=$||Ms(_,H),ce=H||J||pp(ue),he=!se&&(!d.v7_partialHydration||!K);if(L){if(he){let _e=Td(B);je(Se({navigation:ue},_e!==void 0?{actionData:_e}:{}),{flushSync:U})}let ee=await Gi(M,_.pathname,E.signal);if(ee.type==="aborted")return{shortCircuited:!0};if(ee.type==="error"){let{boundaryId:_e,error:dt}=Bi(_.pathname,ee);return{matches:ee.partialMatches,loaderData:{},errors:{[_e]:dt}}}else if(ee.matches)M=ee.matches;else{let{error:_e,notFoundMatches:dt,route:Pe}=Za(_.pathname);return{matches:dt,loaderData:{},errors:{[Pe.id]:_e}}}}let le=a||l,[be,Ie]=op(e.history,C,M,ce,_,d.v7_partialHydration&&K===!0,d.v7_skipActionErrorRevalidation,Z,ie,I,ge,Ne,De,le,s,B);if(Ja(ee=>!(M&&M.some(_e=>_e.route.id===ee))||be&&be.some(_e=>_e.route.id===ee)),W=++z,be.length===0&&Ie.length===0){let ee=Ad();return Cn(_,Se({matches:M,loaderData:{},errors:B&&pt(B[1])?{[B[0]]:B[1].error}:null},cp(B),ee?{fetchers:new Map(C.fetchers)}:{}),{flushSync:U}),{shortCircuited:!0}}if(he){let ee={};if(!L){ee.navigation=ue;let _e=Td(B);_e!==void 0&&(ee.actionData=_e)}Ie.length>0&&(ee.fetchers=$y(Ie)),je(ee,{flushSync:U})}Ie.forEach(ee=>{N.has(ee.key)&&En(ee.key),ee.controller&&N.set(ee.key,ee.controller)});let Eo=()=>Ie.forEach(ee=>En(ee.key));b&&b.signal.addEventListener("abort",Eo);let{loaderResults:en,fetcherResults:Nr}=await Ld(C,M,be,Ie,E);if(E.signal.aborted)return{shortCircuited:!0};b&&b.signal.removeEventListener("abort",Eo),Ie.forEach(ee=>N.delete(ee.key));let _n=pl(en);if(_n)return await ar(E,_n.result,!0,{replace:A}),{shortCircuited:!0};if(_n=pl(Nr),_n)return De.add(_n.key),await ar(E,_n.result,!0,{replace:A}),{shortCircuited:!0};let{loaderData:Wi,errors:tn}=sp(C,M,be,en,B,Ie,Nr,Ee);Ee.forEach((ee,_e)=>{ee.subscribe(dt=>{(dt||ee.done)&&Ee.delete(_e)})}),d.v7_partialHydration&&K&&C.errors&&Object.entries(C.errors).filter(ee=>{let[_e]=ee;return!be.some(dt=>dt.route.id===_e)}).forEach(ee=>{let[_e,dt]=ee;tn=Object.assign(tn||{},{[_e]:dt})});let Ki=Ad(),Qi=jd(W),Xi=Ki||Qi||Ie.length>0;return Se({matches:M,loaderData:Wi,errors:tn},Xi?{fetchers:new Map(C.fetchers)}:{})}function Td(E){if(E&&!pt(E[1]))return{[E[0]]:E[1].data};if(C.actionData)return Object.keys(C.actionData).length===0?null:C.actionData}function $y(E){return E.forEach(_=>{let M=C.fetchers.get(_.key),L=Oo(void 0,M?M.data:void 0);C.fetchers.set(_.key,L)}),new Map(C.fetchers)}function Vy(E,_,M,L){if(r)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");N.has(E)&&En(E);let $=(L&&L.unstable_flushSync)===!0,H=a||l,J=zu(C.location,C.matches,s,d.v7_prependBasename,M,d.v7_relativeSplatPath,_,L==null?void 0:L.relative),A=cr(H,J,s),K=Hi(A,H,J);if(K.active&&K.matches&&(A=K.matches),!A){qt(E,_,Ze(404,{pathname:J}),{flushSync:$});return}let{path:U,submission:B,error:ue}=rp(d.v7_normalizeFormMethod,!0,J,L);if(ue){qt(E,_,ue,{flushSync:$});return}let ce=Bo(A,U);if(T=(L&&L.preventScrollReset)===!0,B&&Tt(B.formMethod)){Uy(E,_,U,ce,A,K.active,$,B);return}Ne.set(E,{routeId:_,path:U}),By(E,_,U,ce,A,K.active,$,B)}async function Uy(E,_,M,L,$,H,J,A){Ya(),Ne.delete(E);function K(Pe){if(!Pe.route.action&&!Pe.route.lazy){let nn=Ze(405,{method:A.formMethod,pathname:M,routeId:_});return qt(E,_,nn,{flushSync:J}),!0}return!1}if(!H&&K(L))return;let U=C.fetchers.get(E);Rn(E,wx(A,U),{flushSync:J});let B=new AbortController,ue=Tr(e.history,M,B.signal,A);if(H){let Pe=await Gi($,M,ue.signal);if(Pe.type==="aborted")return;if(Pe.type==="error"){let{error:nn}=Bi(M,Pe);qt(E,_,nn,{flushSync:J});return}else if(Pe.matches){if($=Pe.matches,L=Bo($,M),K(L))return}else{qt(E,_,Ze(404,{pathname:M}),{flushSync:J});return}}N.set(E,B);let ce=z,le=(await Ro("action",C,ue,[L],$,E))[L.route.id];if(ue.signal.aborted){N.get(E)===B&&N.delete(E);return}if(d.v7_fetcherPersist&&ge.has(E)){if(gr(le)||pt(le)){Rn(E,Dn(void 0));return}}else{if(gr(le))if(N.delete(E),W>ce){Rn(E,Dn(void 0));return}else return De.add(E),Rn(E,Oo(A)),ar(ue,le,!1,{fetcherSubmission:A});if(pt(le)){qt(E,_,le.error);return}}if(jn(le))throw Ze(400,{type:"defer-action"});let be=C.navigation.location||C.location,Ie=Tr(e.history,be,B.signal),Eo=a||l,en=C.navigation.state!=="idle"?cr(Eo,C.navigation.location,s):C.matches;te(en,"Didn't find any matches after fetcher action");let Nr=++z;oe.set(E,Nr);let _n=Oo(A,le.data);C.fetchers.set(E,_n);let[Wi,tn]=op(e.history,C,en,A,be,!1,d.v7_skipActionErrorRevalidation,Z,ie,I,ge,Ne,De,Eo,s,[L.route.id,le]);tn.filter(Pe=>Pe.key!==E).forEach(Pe=>{let nn=Pe.key,Bd=C.fetchers.get(nn),Yy=Oo(void 0,Bd?Bd.data:void 0);C.fetchers.set(nn,Yy),N.has(nn)&&En(nn),Pe.controller&&N.set(nn,Pe.controller)}),je({fetchers:new Map(C.fetchers)});let Ki=()=>tn.forEach(Pe=>En(Pe.key));B.signal.addEventListener("abort",Ki);let{loaderResults:Qi,fetcherResults:Xi}=await Ld(C,en,Wi,tn,Ie);if(B.signal.aborted)return;B.signal.removeEventListener("abort",Ki),oe.delete(E),N.delete(E),tn.forEach(Pe=>N.delete(Pe.key));let ee=pl(Qi);if(ee)return ar(Ie,ee.result,!1);if(ee=pl(Xi),ee)return De.add(ee.key),ar(Ie,ee.result,!1);let{loaderData:_e,errors:dt}=sp(C,en,Wi,Qi,void 0,tn,Xi,Ee);if(C.fetchers.has(E)){let Pe=Dn(le.data);C.fetchers.set(E,Pe)}jd(Nr),C.navigation.state==="loading"&&Nr>W?(te(F,"Expected pending action"),b&&b.abort(),Cn(C.navigation.location,{matches:en,loaderData:_e,errors:dt,fetchers:new Map(C.fetchers)})):(je({errors:dt,loaderData:up(C.loaderData,_e,en,dt),fetchers:new Map(C.fetchers)}),Z=!1)}async function By(E,_,M,L,$,H,J,A){let K=C.fetchers.get(E);Rn(E,Oo(A,K?K.data:void 0),{flushSync:J});let U=new AbortController,B=Tr(e.history,M,U.signal);if(H){let le=await Gi($,M,B.signal);if(le.type==="aborted")return;if(le.type==="error"){let{error:be}=Bi(M,le);qt(E,_,be,{flushSync:J});return}else if(le.matches)$=le.matches,L=Bo($,M);else{qt(E,_,Ze(404,{pathname:M}),{flushSync:J});return}}N.set(E,U);let ue=z,he=(await Ro("loader",C,B,[L],$,E))[L.route.id];if(jn(he)&&(he=await qc(he,B.signal,!0)||he),N.get(E)===U&&N.delete(E),!B.signal.aborted){if(ge.has(E)){Rn(E,Dn(void 0));return}if(gr(he))if(W>ue){Rn(E,Dn(void 0));return}else{De.add(E),await ar(B,he,!1);return}if(pt(he)){qt(E,_,he.error);return}te(!jn(he),"Unhandled fetcher deferred data"),Rn(E,Dn(he.data))}}async function ar(E,_,M,L){let{submission:$,fetcherSubmission:H,replace:J}=L===void 0?{}:L;_.response.headers.has("X-Remix-Revalidate")&&(Z=!0);let A=_.response.headers.get("Location");te(A,"Expected a Location header on the redirect Response"),A=lp(A,new URL(E.url),s);let K=yi(C.location,A,{_isRedirect:!0});if(n){let le=!1;if(_.response.headers.has("X-Remix-Reload-Document"))le=!0;else if(Jc.test(A)){const be=e.history.createURL(A);le=be.origin!==t.location.origin||vn(be.pathname,s)==null}if(le){J?t.location.replace(A):t.location.assign(A);return}}b=null;let U=J===!0||_.response.headers.has("X-Remix-Replace")?Te.Replace:Te.Push,{formMethod:B,formAction:ue,formEncType:ce}=C.navigation;!$&&!H&&B&&ue&&ce&&($=pp(C.navigation));let he=$||H;if(YS.has(_.response.status)&&he&&Tt(he.formMethod))await Jt(U,K,{submission:Se({},he,{formAction:A}),preventScrollReset:T,enableViewTransition:M?j:void 0});else{let le=Ms(K,$);await Jt(U,K,{overrideNavigation:le,fetcherSubmission:H,preventScrollReset:T,enableViewTransition:M?j:void 0})}}async function Ro(E,_,M,L,$,H){let J,A={};try{J=await lx(u,E,_,M,L,$,H,i,o)}catch(K){return L.forEach(U=>{A[U.route.id]={type:fe.error,error:K}}),A}for(let[K,U]of Object.entries(J))if(px(U)){let B=U.result;A[K]={type:fe.redirect,response:ux(B,M,K,$,s,d.v7_relativeSplatPath)}}else A[K]=await sx(U);return A}async function Ld(E,_,M,L,$){let H=E.matches,J=Ro("loader",E,$,M,_,null),A=Promise.all(L.map(async B=>{if(B.matches&&B.match&&B.controller){let ce=(await Ro("loader",E,Tr(e.history,B.path,B.controller.signal),[B.match],B.matches,B.key))[B.match.route.id];return{[B.key]:ce}}else return Promise.resolve({[B.key]:{type:fe.error,error:Ze(404,{pathname:B.path})}})})),K=await J,U=(await A).reduce((B,ue)=>Object.assign(B,ue),{});return await Promise.all([mx(_,K,$.signal,H,E.loaderData),vx(_,U,L)]),{loaderResults:K,fetcherResults:U}}function Ya(){Z=!0,ie.push(...Ja()),Ne.forEach((E,_)=>{N.has(_)&&(I.add(_),En(_))})}function Rn(E,_,M){M===void 0&&(M={}),C.fetchers.set(E,_),je({fetchers:new Map(C.fetchers)},{flushSync:(M&&M.flushSync)===!0})}function qt(E,_,M,L){L===void 0&&(L={});let $=Qr(C.matches,_);Vi(E),je({errors:{[$.route.id]:M},fetchers:new Map(C.fetchers)},{flushSync:(L&&L.flushSync)===!0})}function Od(E){return d.v7_fetcherPersist&&(rt.set(E,(rt.get(E)||0)+1),ge.has(E)&&ge.delete(E)),C.fetchers.get(E)||ZS}function Vi(E){let _=C.fetchers.get(E);N.has(E)&&!(_&&_.state==="loading"&&oe.has(E))&&En(E),Ne.delete(E),oe.delete(E),De.delete(E),ge.delete(E),I.delete(E),C.fetchers.delete(E)}function Hy(E){if(d.v7_fetcherPersist){let _=(rt.get(E)||0)-1;_<=0?(rt.delete(E),ge.add(E)):rt.set(E,_)}else Vi(E);je({fetchers:new Map(C.fetchers)})}function En(E){let _=N.get(E);te(_,"Expected fetch controller: "+E),_.abort(),N.delete(E)}function Fd(E){for(let _ of E){let M=Od(_),L=Dn(M.data);C.fetchers.set(_,L)}}function Ad(){let E=[],_=!1;for(let M of De){let L=C.fetchers.get(M);te(L,"Expected fetcher: "+M),L.state==="loading"&&(De.delete(M),E.push(M),_=!0)}return Fd(E),_}function jd(E){let _=[];for(let[M,L]of oe)if(L0}function Gy(E,_){let M=C.blockers.get(E)||Lo;return ct.get(E)!==_&&ct.set(E,_),M}function bd(E){C.blockers.delete(E),ct.delete(E)}function Ui(E,_){let M=C.blockers.get(E)||Lo;te(M.state==="unblocked"&&_.state==="blocked"||M.state==="blocked"&&_.state==="blocked"||M.state==="blocked"&&_.state==="proceeding"||M.state==="blocked"&&_.state==="unblocked"||M.state==="proceeding"&&_.state==="unblocked","Invalid blocker state transition: "+M.state+" -> "+_.state);let L=new Map(C.blockers);L.set(E,_),je({blockers:L})}function zd(E){let{currentLocation:_,nextLocation:M,historyAction:L}=E;if(ct.size===0)return;ct.size>1&&po(!1,"A router only supports one blocker at a time");let $=Array.from(ct.entries()),[H,J]=$[$.length-1],A=C.blockers.get(H);if(!(A&&A.state==="proceeding")&&J({currentLocation:_,nextLocation:M,historyAction:L}))return H}function Za(E){let _=Ze(404,{pathname:E}),M=a||l,{matches:L,route:$}=dp(M);return Ja(),{notFoundMatches:L,route:$,error:_}}function Bi(E,_){return{boundaryId:Qr(_.partialMatches).route.id,error:Ze(400,{type:"route-discovery",pathname:E,message:_.error!=null&&"message"in _.error?_.error:String(_.error)})}}function Ja(E){let _=[];return Ee.forEach((M,L)=>{(!E||E(L))&&(M.cancel(),_.push(L),Ee.delete(L))}),_}function Wy(E,_,M){if(S=E,h=_,g=M||null,!w&&C.navigation===Ps){w=!0;let L=Vd(C.location,C.matches);L!=null&&je({restoreScrollPosition:L})}return()=>{S=null,h=null,g=null}}function $d(E,_){return g&&g(E,_.map(L=>kS(L,C.loaderData)))||E.key}function Ky(E,_){if(S&&h){let M=$d(E,_);S[M]=h()}}function Vd(E,_){if(S){let M=$d(E,_),L=S[M];if(typeof L=="number")return L}return null}function Hi(E,_,M){if(c){if(m.has(M))return{active:!1,matches:E};if(E){if(Object.keys(E[0].params).length>0)return{active:!0,matches:Fl(_,M,s,!0)}}else return{active:!0,matches:Fl(_,M,s,!0)||[]}}return{active:!1,matches:null}}async function Gi(E,_,M){let L=E;for(;;){let $=a==null,H=a||l;try{await rx(c,_,L,H,i,o,ot,M)}catch(K){return{type:"error",error:K,partialMatches:L}}finally{$&&(l=[...l])}if(M.aborted)return{type:"aborted"};let J=cr(H,_,s);if(J)return Ud(_,m),{type:"success",matches:J};let A=Fl(H,_,s,!0);if(!A||L.length===A.length&&L.every((K,U)=>K.route.id===A[U].route.id))return Ud(_,m),{type:"success",matches:null};L=A}}function Ud(E,_){if(_.size>=y){let M=_.values().next().value;_.delete(M)}_.add(E)}function Qy(E){i={},a=wi(E,o,void 0,i)}function Xy(E,_){let M=a==null;xm(E,_,a||l,i,o),M&&(l=[...l],je({}))}return k={get basename(){return s},get future(){return d},get state(){return C},get routes(){return l},get window(){return t},initialize:bi,subscribe:lr,enableScrollRestoration:Wy,navigate:$i,fetch:Vy,revalidate:Xa,createHref:E=>e.history.createHref(E),encodeLocation:E=>e.history.encodeLocation(E),getFetcher:Od,deleteFetcher:Hy,dispose:zi,getBlocker:Gy,deleteBlocker:bd,patchRoutes:Xy,_internalFetchControllers:N,_internalActiveDeferreds:Ee,_internalSetRoutes:Qy},k}function ex(e){return e!=null&&("formData"in e&&e.formData!=null||"body"in e&&e.body!==void 0)}function zu(e,t,n,r,o,i,l,a){let s,u;if(l){s=[];for(let d of t)if(s.push(d),d.route.id===l){u=d;break}}else s=t,u=t[t.length-1];let c=Zc(o||".",Yc(s,i),vn(e.pathname,n)||e.pathname,a==="path");return o==null&&(c.search=e.search,c.hash=e.hash),(o==null||o===""||o===".")&&u&&u.route.index&&!ed(c.search)&&(c.search=c.search?c.search.replace(/^\?/,"?index&"):"?index"),r&&n!=="/"&&(c.pathname=c.pathname==="/"?n:fn([n,c.pathname])),Cr(c)}function rp(e,t,n,r){if(!r||!ex(r))return{path:n};if(r.formMethod&&!hx(r.formMethod))return{path:n,error:Ze(405,{method:r.formMethod})};let o=()=>({path:n,error:Ze(400,{type:"invalid-body"})}),i=r.formMethod||"get",l=e?i.toUpperCase():i.toLowerCase(),a=Cm(n);if(r.body!==void 0){if(r.formEncType==="text/plain"){if(!Tt(l))return o();let f=typeof r.body=="string"?r.body:r.body instanceof FormData||r.body instanceof URLSearchParams?Array.from(r.body.entries()).reduce((p,y)=>{let[m,S]=y;return""+p+m+"="+S+` +`},""):String(r.body);return{path:n,submission:{formMethod:l,formAction:a,formEncType:r.formEncType,formData:void 0,json:void 0,text:f}}}else if(r.formEncType==="application/json"){if(!Tt(l))return o();try{let f=typeof r.body=="string"?JSON.parse(r.body):r.body;return{path:n,submission:{formMethod:l,formAction:a,formEncType:r.formEncType,formData:void 0,json:f,text:void 0}}}catch{return o()}}}te(typeof FormData=="function","FormData is not available in this environment");let s,u;if(r.formData)s=$u(r.formData),u=r.formData;else if(r.body instanceof FormData)s=$u(r.body),u=r.body;else if(r.body instanceof URLSearchParams)s=r.body,u=ap(s);else if(r.body==null)s=new URLSearchParams,u=new FormData;else try{s=new URLSearchParams(r.body),u=ap(s)}catch{return o()}let c={formMethod:l,formAction:a,formEncType:r&&r.formEncType||"application/x-www-form-urlencoded",formData:u,json:void 0,text:void 0};if(Tt(c.formMethod))return{path:n,submission:c};let d=nr(n);return t&&d.search&&ed(d.search)&&s.append("index",""),d.search="?"+s,{path:Cr(d),submission:c}}function tx(e,t){let n=e;if(t){let r=e.findIndex(o=>o.route.id===t);r>=0&&(n=e.slice(0,r))}return n}function op(e,t,n,r,o,i,l,a,s,u,c,d,f,p,y,m){let S=m?pt(m[1])?m[1].error:m[1].data:void 0,g=e.createURL(t.location),h=e.createURL(o),w=m&&pt(m[1])?m[0]:void 0,x=w?tx(n,w):n,P=m?m[1].statusCode:void 0,D=l&&P&&P>=400,k=x.filter((F,T)=>{let{route:b}=F;if(b.lazy)return!0;if(b.loader==null)return!1;if(i)return typeof b.loader!="function"||b.loader.hydrate?!0:t.loaderData[b.id]===void 0&&(!t.errors||t.errors[b.id]===void 0);if(nx(t.loaderData,t.matches[T],F)||s.some(G=>G===F.route.id))return!0;let j=t.matches[T],Q=F;return ip(F,Se({currentUrl:g,currentParams:j.params,nextUrl:h,nextParams:Q.params},r,{actionResult:S,actionStatus:P,defaultShouldRevalidate:D?!1:a||g.pathname+g.search===h.pathname+h.search||g.search!==h.search||Sm(j,Q)}))}),C=[];return d.forEach((F,T)=>{if(i||!n.some(se=>se.route.id===F.routeId)||c.has(T))return;let b=cr(p,F.path,y);if(!b){C.push({key:T,routeId:F.routeId,path:F.path,matches:null,match:null,controller:null});return}let j=t.fetchers.get(T),Q=Bo(b,F.path),G=!1;f.has(T)?G=!1:u.has(T)?(u.delete(T),G=!0):j&&j.state!=="idle"&&j.data===void 0?G=a:G=ip(Q,Se({currentUrl:g,currentParams:t.matches[t.matches.length-1].params,nextUrl:h,nextParams:n[n.length-1].params},r,{actionResult:S,actionStatus:P,defaultShouldRevalidate:D?!1:a})),G&&C.push({key:T,routeId:F.routeId,path:F.path,matches:b,match:Q,controller:new AbortController})}),[k,C]}function nx(e,t,n){let r=!t||n.route.id!==t.route.id,o=e[n.route.id]===void 0;return r||o}function Sm(e,t){let n=e.route.path;return e.pathname!==t.pathname||n!=null&&n.endsWith("*")&&e.params["*"]!==t.params["*"]}function ip(e,t){if(e.route.shouldRevalidate){let n=e.route.shouldRevalidate(t);if(typeof n=="boolean")return n}return t.defaultShouldRevalidate}async function rx(e,t,n,r,o,i,l,a){let s=[t,...n.map(u=>u.route.id)].join("-");try{let u=l.get(s);u||(u=e({path:t,matches:n,patch:(c,d)=>{a.aborted||xm(c,d,r,o,i)}}),l.set(s,u)),u&&fx(u)&&await u}finally{l.delete(s)}}function xm(e,t,n,r,o){if(e){var i;let l=r[e];te(l,"No route found to patch children into: routeId = "+e);let a=wi(t,o,[e,"patch",String(((i=l.children)==null?void 0:i.length)||"0")],r);l.children?l.children.push(...a):l.children=a}else{let l=wi(t,o,["patch",String(n.length||"0")],r);n.push(...l)}}async function ox(e,t,n){if(!e.lazy)return;let r=await e.lazy();if(!e.lazy)return;let o=n[e.id];te(o,"No route found in manifest");let i={};for(let l in r){let s=o[l]!==void 0&&l!=="hasErrorBoundary";po(!s,'Route "'+o.id+'" has a static property "'+l+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+l+'" will be ignored.')),!s&&!PS.has(l)&&(i[l]=r[l])}Object.assign(o,i),Object.assign(o,Se({},t(o),{lazy:void 0}))}async function ix(e){let{matches:t}=e,n=t.filter(o=>o.shouldLoad);return(await Promise.all(n.map(o=>o.resolve()))).reduce((o,i,l)=>Object.assign(o,{[n[l].route.id]:i}),{})}async function lx(e,t,n,r,o,i,l,a,s,u){let c=i.map(p=>p.route.lazy?ox(p.route,s,a):void 0),d=i.map((p,y)=>{let m=c[y],S=o.some(h=>h.route.id===p.route.id);return Se({},p,{shouldLoad:S,resolve:async h=>(h&&r.method==="GET"&&(p.route.lazy||p.route.loader)&&(S=!0),S?ax(t,r,p,m,h,u):Promise.resolve({type:fe.data,result:void 0}))})}),f=await e({matches:d,request:r,params:i[0].params,fetcherKey:l,context:u});try{await Promise.all(c)}catch{}return f}async function ax(e,t,n,r,o,i){let l,a,s=u=>{let c,d=new Promise((y,m)=>c=m);a=()=>c(),t.signal.addEventListener("abort",a);let f=y=>typeof u!="function"?Promise.reject(new Error("You cannot call the handler for a route which defines a boolean "+('"'+e+'" [routeId: '+n.route.id+"]"))):u({request:t,params:n.params,context:i},...y!==void 0?[y]:[]),p=(async()=>{try{return{type:"data",result:await(o?o(m=>f(m)):f())}}catch(y){return{type:"error",result:y}}})();return Promise.race([p,d])};try{let u=n.route[e];if(r)if(u){let c,[d]=await Promise.all([s(u).catch(f=>{c=f}),r]);if(c!==void 0)throw c;l=d}else if(await r,u=n.route[e],u)l=await s(u);else if(e==="action"){let c=new URL(t.url),d=c.pathname+c.search;throw Ze(405,{method:t.method,pathname:d,routeId:n.route.id})}else return{type:fe.data,result:void 0};else if(u)l=await s(u);else{let c=new URL(t.url),d=c.pathname+c.search;throw Ze(404,{pathname:d})}te(l.result!==void 0,"You defined "+(e==="action"?"an action":"a loader")+" for route "+('"'+n.route.id+"\" but didn't return anything from your `"+e+"` ")+"function. Please return a value or `null`.")}catch(u){return{type:fe.error,result:u}}finally{a&&t.signal.removeEventListener("abort",a)}return l}async function sx(e){let{result:t,type:n}=e;if(Rm(t)){let u;try{let c=t.headers.get("Content-Type");c&&/\bapplication\/json\b/.test(c)?t.body==null?u=null:u=await t.json():u=await t.text()}catch(c){return{type:fe.error,error:c}}return n===fe.error?{type:fe.error,error:new ca(t.status,t.statusText,u),statusCode:t.status,headers:t.headers}:{type:fe.data,data:u,statusCode:t.status,headers:t.headers}}if(n===fe.error){if(fp(t)){var r;if(t.data instanceof Error){var o;return{type:fe.error,error:t.data,statusCode:(o=t.init)==null?void 0:o.status}}t=new ca(((r=t.init)==null?void 0:r.status)||500,void 0,t.data)}return{type:fe.error,error:t,statusCode:Aa(t)?t.status:void 0}}if(gx(t)){var i,l;return{type:fe.deferred,deferredData:t,statusCode:(i=t.init)==null?void 0:i.status,headers:((l=t.init)==null?void 0:l.headers)&&new Headers(t.init.headers)}}if(fp(t)){var a,s;return{type:fe.data,data:t.data,statusCode:(a=t.init)==null?void 0:a.status,headers:(s=t.init)!=null&&s.headers?new Headers(t.init.headers):void 0}}return{type:fe.data,data:t}}function ux(e,t,n,r,o,i){let l=e.headers.get("Location");if(te(l,"Redirects returned/thrown from loaders/actions must have a Location header"),!Jc.test(l)){let a=r.slice(0,r.findIndex(s=>s.route.id===n)+1);l=zu(new URL(t.url),a,o,!0,l,i),e.headers.set("Location",l)}return e}function lp(e,t,n){if(Jc.test(e)){let r=e,o=r.startsWith("//")?new URL(t.protocol+r):new URL(r),i=vn(o.pathname,n)!=null;if(o.origin===t.origin&&i)return o.pathname+o.search+o.hash}return e}function Tr(e,t,n,r){let o=e.createURL(Cm(t)).toString(),i={signal:n};if(r&&Tt(r.formMethod)){let{formMethod:l,formEncType:a}=r;i.method=l.toUpperCase(),a==="application/json"?(i.headers=new Headers({"Content-Type":a}),i.body=JSON.stringify(r.json)):a==="text/plain"?i.body=r.text:a==="application/x-www-form-urlencoded"&&r.formData?i.body=$u(r.formData):i.body=r.formData}return new Request(o,i)}function $u(e){let t=new URLSearchParams;for(let[n,r]of e.entries())t.append(n,typeof r=="string"?r:r.name);return t}function ap(e){let t=new FormData;for(let[n,r]of e.entries())t.append(n,r);return t}function cx(e,t,n,r,o){let i={},l=null,a,s=!1,u={},c=n&&pt(n[1])?n[1].error:void 0;return e.forEach(d=>{if(!(d.route.id in t))return;let f=d.route.id,p=t[f];if(te(!gr(p),"Cannot handle redirect results in processLoaderData"),pt(p)){let y=p.error;c!==void 0&&(y=c,c=void 0),l=l||{};{let m=Qr(e,f);l[m.route.id]==null&&(l[m.route.id]=y)}i[f]=void 0,s||(s=!0,a=Aa(p.error)?p.error.status:500),p.headers&&(u[f]=p.headers)}else jn(p)?(r.set(f,p.deferredData),i[f]=p.deferredData.data,p.statusCode!=null&&p.statusCode!==200&&!s&&(a=p.statusCode),p.headers&&(u[f]=p.headers)):(i[f]=p.data,p.statusCode&&p.statusCode!==200&&!s&&(a=p.statusCode),p.headers&&(u[f]=p.headers))}),c!==void 0&&n&&(l={[n[0]]:c},i[n[0]]=void 0),{loaderData:i,errors:l,statusCode:a||200,loaderHeaders:u}}function sp(e,t,n,r,o,i,l,a){let{loaderData:s,errors:u}=cx(t,r,o,a);return i.forEach(c=>{let{key:d,match:f,controller:p}=c,y=l[d];if(te(y,"Did not find corresponding fetcher result"),!(p&&p.signal.aborted))if(pt(y)){let m=Qr(e.matches,f==null?void 0:f.route.id);u&&u[m.route.id]||(u=Se({},u,{[m.route.id]:y.error})),e.fetchers.delete(d)}else if(gr(y))te(!1,"Unhandled fetcher revalidation redirect");else if(jn(y))te(!1,"Unhandled fetcher deferred data");else{let m=Dn(y.data);e.fetchers.set(d,m)}}),{loaderData:s,errors:u}}function up(e,t,n,r){let o=Se({},t);for(let i of n){let l=i.route.id;if(t.hasOwnProperty(l)?t[l]!==void 0&&(o[l]=t[l]):e[l]!==void 0&&i.route.loader&&(o[l]=e[l]),r&&r.hasOwnProperty(l))break}return o}function cp(e){return e?pt(e[1])?{actionData:{}}:{actionData:{[e[0]]:e[1].data}}:{}}function Qr(e,t){return(t?e.slice(0,e.findIndex(r=>r.route.id===t)+1):[...e]).reverse().find(r=>r.route.hasErrorBoundary===!0)||e[0]}function dp(e){let t=e.length===1?e[0]:e.find(n=>n.index||!n.path||n.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:t}],route:t}}function Ze(e,t){let{pathname:n,routeId:r,method:o,type:i,message:l}=t===void 0?{}:t,a="Unknown Server Error",s="Unknown @remix-run/router error";return e===400?(a="Bad Request",i==="route-discovery"?s='Unable to match URL "'+n+'" - the `unstable_patchRoutesOnNavigation()` '+(`function threw the following error: +`+l):o&&n&&r?s="You made a "+o+' request to "'+n+'" but '+('did not provide a `loader` for route "'+r+'", ')+"so there is no way to handle the request.":i==="defer-action"?s="defer() is not supported in actions":i==="invalid-body"&&(s="Unable to encode submission body")):e===403?(a="Forbidden",s='Route "'+r+'" does not match URL "'+n+'"'):e===404?(a="Not Found",s='No route matches URL "'+n+'"'):e===405&&(a="Method Not Allowed",o&&n&&r?s="You made a "+o.toUpperCase()+' request to "'+n+'" but '+('did not provide an `action` for route "'+r+'", ')+"so there is no way to handle the request.":o&&(s='Invalid request method "'+o.toUpperCase()+'"')),new ca(e||500,a,new Error(s),!0)}function pl(e){let t=Object.entries(e);for(let n=t.length-1;n>=0;n--){let[r,o]=t[n];if(gr(o))return{key:r,result:o}}}function Cm(e){let t=typeof e=="string"?nr(e):e;return Cr(Se({},t,{hash:""}))}function dx(e,t){return e.pathname!==t.pathname||e.search!==t.search?!1:e.hash===""?t.hash!=="":e.hash===t.hash?!0:t.hash!==""}function fx(e){return typeof e=="object"&&e!=null&&"then"in e}function px(e){return Rm(e.result)&&XS.has(e.result.status)}function jn(e){return e.type===fe.deferred}function pt(e){return e.type===fe.error}function gr(e){return(e&&e.type)===fe.redirect}function fp(e){return typeof e=="object"&&e!=null&&"type"in e&&"data"in e&&"init"in e&&e.type==="DataWithResponseInit"}function gx(e){let t=e;return t&&typeof t=="object"&&typeof t.data=="object"&&typeof t.subscribe=="function"&&typeof t.cancel=="function"&&typeof t.resolveData=="function"}function Rm(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.headers=="object"&&typeof e.body<"u"}function hx(e){return QS.has(e.toLowerCase())}function Tt(e){return WS.has(e.toLowerCase())}async function mx(e,t,n,r,o){let i=Object.entries(t);for(let l=0;l(f==null?void 0:f.route.id)===a);if(!u)continue;let c=r.find(f=>f.route.id===u.route.id),d=c!=null&&!Sm(c,u)&&(o&&o[u.route.id])!==void 0;jn(s)&&d&&await qc(s,n,!1).then(f=>{f&&(t[a]=f)})}}async function vx(e,t,n){for(let r=0;r(u==null?void 0:u.route.id)===i)&&jn(a)&&(te(l,"Expected an AbortController for revalidating fetcher deferred result"),await qc(a,l.signal,!0).then(u=>{u&&(t[o]=u)}))}}async function qc(e,t,n){if(n===void 0&&(n=!1),!await e.deferredData.resolveData(t)){if(n)try{return{type:fe.data,data:e.deferredData.unwrappedData}}catch(o){return{type:fe.error,error:o}}return{type:fe.data,data:e.deferredData.data}}}function ed(e){return new URLSearchParams(e).getAll("index").some(t=>t==="")}function Bo(e,t){let n=typeof t=="string"?nr(t).search:t.search;if(e[e.length-1].route.index&&ed(n||""))return e[e.length-1];let r=vm(e);return r[r.length-1]}function pp(e){let{formMethod:t,formAction:n,formEncType:r,text:o,formData:i,json:l}=e;if(!(!t||!n||!r)){if(o!=null)return{formMethod:t,formAction:n,formEncType:r,formData:void 0,json:void 0,text:o};if(i!=null)return{formMethod:t,formAction:n,formEncType:r,formData:i,json:void 0,text:void 0};if(l!==void 0)return{formMethod:t,formAction:n,formEncType:r,formData:void 0,json:l,text:void 0}}}function Ms(e,t){return t?{state:"loading",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}:{state:"loading",location:e,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function yx(e,t){return{state:"submitting",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}}function Oo(e,t){return e?{state:"loading",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:t}}function wx(e,t){return{state:"submitting",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t?t.data:void 0}}function Dn(e){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:e}}function Sx(e,t){try{let n=e.sessionStorage.getItem(wm);if(n){let r=JSON.parse(n);for(let[o,i]of Object.entries(r||{}))i&&Array.isArray(i)&&t.set(o,new Set(i||[]))}}catch{}}function xx(e,t){if(t.size>0){let n={};for(let[r,o]of t)n[r]=[...o];try{e.sessionStorage.setItem(wm,JSON.stringify(n))}catch(r){po(!1,"Failed to save applied view transitions in sessionStorage ("+r+").")}}}/** + * React Router v6.26.2 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function da(){return da=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.current=!0}),v.useCallback(function(u,c){if(c===void 0&&(c={}),!a.current)return;if(typeof u=="number"){r.go(u);return}let d=Zc(u,JSON.parse(l),i,c.relative==="path");e==null&&t!=="/"&&(d.pathname=d.pathname==="/"?t:fn([t,d.pathname])),(c.replace?r.replace:r.push)(d,c.state,c)},[t,r,l,i,e])}const _x=v.createContext(null);function Px(e){let t=v.useContext(or).outlet;return t&&v.createElement(_x.Provider,{value:e},t)}function ja(e,t){let{relative:n}=t===void 0?{}:t,{future:r}=v.useContext(rr),{matches:o}=v.useContext(or),{pathname:i}=Li(),l=JSON.stringify(Yc(o,r.v7_relativeSplatPath));return v.useMemo(()=>Zc(e,JSON.parse(l),i,n==="path"),[e,l,i,n])}function Mx(e,t,n,r){Ti()||te(!1);let{navigator:o}=v.useContext(rr),{matches:i}=v.useContext(or),l=i[i.length-1],a=l?l.params:{};l&&l.pathname;let s=l?l.pathnameBase:"/";l&&l.route;let u=Li(),c;c=u;let d=c.pathname||"/",f=d;if(s!=="/"){let m=s.replace(/^\//,"").split("/");f="/"+d.replace(/^\//,"").split("/").slice(m.length).join("/")}let p=cr(e,{pathname:f});return Tx(p&&p.map(m=>Object.assign({},m,{params:Object.assign({},a,m.params),pathname:fn([s,o.encodeLocation?o.encodeLocation(m.pathname).pathname:m.pathname]),pathnameBase:m.pathnameBase==="/"?s:fn([s,o.encodeLocation?o.encodeLocation(m.pathnameBase).pathname:m.pathnameBase])})),i,n,r)}function kx(){let e=Ax(),t=Aa(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,o={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return v.createElement(v.Fragment,null,v.createElement("h2",null,"Unexpected Application Error!"),v.createElement("h3",{style:{fontStyle:"italic"}},t),n?v.createElement("pre",{style:o},n):null,null)}const Dx=v.createElement(kx,null);class Nx extends v.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,n){return n.location!==t.location||n.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:n.error,location:n.location,revalidation:t.revalidation||n.revalidation}}componentDidCatch(t,n){console.error("React Router caught the following error during render",t,n)}render(){return this.state.error!==void 0?v.createElement(or.Provider,{value:this.props.routeContext},v.createElement(Em.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function Ix(e){let{routeContext:t,match:n,children:r}=e,o=v.useContext(Ii);return o&&o.static&&o.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=n.route.id),v.createElement(or.Provider,{value:t},r)}function Tx(e,t,n,r){var o;if(t===void 0&&(t=[]),n===void 0&&(n=null),r===void 0&&(r=null),e==null){var i;if(!n)return null;if(n.errors)e=n.matches;else if((i=r)!=null&&i.v7_partialHydration&&t.length===0&&!n.initialized&&n.matches.length>0)e=n.matches;else return null}let l=e,a=(o=n)==null?void 0:o.errors;if(a!=null){let c=l.findIndex(d=>d.route.id&&(a==null?void 0:a[d.route.id])!==void 0);c>=0||te(!1),l=l.slice(0,Math.min(l.length,c+1))}let s=!1,u=-1;if(n&&r&&r.v7_partialHydration)for(let c=0;c=0?l=l.slice(0,u+1):l=[l[0]];break}}}return l.reduceRight((c,d,f)=>{let p,y=!1,m=null,S=null;n&&(p=a&&d.route.id?a[d.route.id]:void 0,m=d.route.errorElement||Dx,s&&(u<0&&f===0?(bx("route-fallback"),y=!0,S=null):u===f&&(y=!0,S=d.route.hydrateFallbackElement||null)));let g=t.concat(l.slice(0,f+1)),h=()=>{let w;return p?w=m:y?w=S:d.route.Component?w=v.createElement(d.route.Component,null):d.route.element?w=d.route.element:w=c,v.createElement(Ix,{match:d,routeContext:{outlet:c,matches:g,isDataRoute:n!=null},children:w})};return n&&(d.route.ErrorBoundary||d.route.errorElement||f===0)?v.createElement(Nx,{location:n.location,revalidation:n.revalidation,component:m,error:p,children:h(),routeContext:{outlet:null,matches:g,isDataRoute:!0}}):h()},null)}var Pm=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(Pm||{}),Mm=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Mm||{});function Lx(e){let t=v.useContext(Ii);return t||te(!1),t}function Ox(e){let t=v.useContext(td);return t||te(!1),t}function Fx(e){let t=v.useContext(or);return t||te(!1),t}function km(e){let t=Fx(),n=t.matches[t.matches.length-1];return n.route.id||te(!1),n.route.id}function Ax(){var e;let t=v.useContext(Em),n=Ox(),r=km();return t!==void 0?t:(e=n.errors)==null?void 0:e[r]}function jx(){let{router:e}=Lx(Pm.UseNavigateStable),t=km(Mm.UseNavigateStable),n=v.useRef(!1);return _m(()=>{n.current=!0}),v.useCallback(function(o,i){i===void 0&&(i={}),n.current&&(typeof o=="number"?e.navigate(o):e.navigate(o,da({fromRouteId:t},i)))},[e,t])}const gp={};function bx(e,t,n){gp[e]||(gp[e]=!0)}function zx(e){return Px(e.context)}function $x(e){let{basename:t="/",children:n=null,location:r,navigationType:o=Te.Pop,navigator:i,static:l=!1,future:a}=e;Ti()&&te(!1);let s=t.replace(/^\/*/,"/"),u=v.useMemo(()=>({basename:s,navigator:i,static:l,future:da({v7_relativeSplatPath:!1},a)}),[s,a,i,l]);typeof r=="string"&&(r=nr(r));let{pathname:c="/",search:d="",hash:f="",state:p=null,key:y="default"}=r,m=v.useMemo(()=>{let S=vn(c,s);return S==null?null:{location:{pathname:S,search:d,hash:f,state:p,key:y},navigationType:o}},[s,c,d,f,p,y,o]);return m==null?null:v.createElement(rr.Provider,{value:u},v.createElement(nd.Provider,{children:n,value:m}))}new Promise(()=>{});function Vx(e){let t={hasErrorBoundary:e.ErrorBoundary!=null||e.errorElement!=null};return e.Component&&Object.assign(t,{element:v.createElement(e.Component),Component:void 0}),e.HydrateFallback&&Object.assign(t,{hydrateFallbackElement:v.createElement(e.HydrateFallback),HydrateFallback:void 0}),e.ErrorBoundary&&Object.assign(t,{errorElement:v.createElement(e.ErrorBoundary),ErrorBoundary:void 0}),t}/** + * React Router DOM v6.26.2 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function go(){return go=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(n[o]=e[o]);return n}function Ux(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Bx(e,t){return e.button===0&&(!t||t==="_self")&&!Ux(e)}const Hx=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"],Gx=["aria-current","caseSensitive","className","end","style","to","unstable_viewTransition","children"],Wx="6";try{window.__reactRouterVersion=Wx}catch{}function Kx(e,t){return qS({basename:t==null?void 0:t.basename,future:go({},t==null?void 0:t.future,{v7_prependBasename:!0}),history:RS({window:t==null?void 0:t.window}),hydrationData:(t==null?void 0:t.hydrationData)||Qx(),routes:e,mapRouteProperties:Vx,unstable_dataStrategy:t==null?void 0:t.unstable_dataStrategy,unstable_patchRoutesOnNavigation:t==null?void 0:t.unstable_patchRoutesOnNavigation,window:t==null?void 0:t.window}).initialize()}function Qx(){var e;let t=(e=window)==null?void 0:e.__staticRouterHydrationData;return t&&t.errors&&(t=go({},t,{errors:Xx(t.errors)})),t}function Xx(e){if(!e)return null;let t=Object.entries(e),n={};for(let[r,o]of t)if(o&&o.__type==="RouteErrorResponse")n[r]=new ca(o.status,o.statusText,o.data,o.internal===!0);else if(o&&o.__type==="Error"){if(o.__subType){let i=window[o.__subType];if(typeof i=="function")try{let l=new i(o.message);l.stack="",n[r]=l}catch{}}if(n[r]==null){let i=new Error(o.message);i.stack="",n[r]=i}}else n[r]=o;return n}const Nm=v.createContext({isTransitioning:!1}),Yx=v.createContext(new Map),Zx="startTransition",hp=ic[Zx],Jx="flushSync",mp=CS[Jx];function qx(e){hp?hp(e):e()}function Fo(e){mp?mp(e):e()}class eC{constructor(){this.status="pending",this.promise=new Promise((t,n)=>{this.resolve=r=>{this.status==="pending"&&(this.status="resolved",t(r))},this.reject=r=>{this.status==="pending"&&(this.status="rejected",n(r))}})}}function tC(e){let{fallbackElement:t,router:n,future:r}=e,[o,i]=v.useState(n.state),[l,a]=v.useState(),[s,u]=v.useState({isTransitioning:!1}),[c,d]=v.useState(),[f,p]=v.useState(),[y,m]=v.useState(),S=v.useRef(new Map),{v7_startTransition:g}=r||{},h=v.useCallback(C=>{g?qx(C):C()},[g]),w=v.useCallback((C,F)=>{let{deletedFetchers:T,unstable_flushSync:b,unstable_viewTransitionOpts:j}=F;T.forEach(G=>S.current.delete(G)),C.fetchers.forEach((G,se)=>{G.data!==void 0&&S.current.set(se,G.data)});let Q=n.window==null||n.window.document==null||typeof n.window.document.startViewTransition!="function";if(!j||Q){b?Fo(()=>i(C)):h(()=>i(C));return}if(b){Fo(()=>{f&&(c&&c.resolve(),f.skipTransition()),u({isTransitioning:!0,flushSync:!0,currentLocation:j.currentLocation,nextLocation:j.nextLocation})});let G=n.window.document.startViewTransition(()=>{Fo(()=>i(C))});G.finished.finally(()=>{Fo(()=>{d(void 0),p(void 0),a(void 0),u({isTransitioning:!1})})}),Fo(()=>p(G));return}f?(c&&c.resolve(),f.skipTransition(),m({state:C,currentLocation:j.currentLocation,nextLocation:j.nextLocation})):(a(C),u({isTransitioning:!0,flushSync:!1,currentLocation:j.currentLocation,nextLocation:j.nextLocation}))},[n.window,f,c,S,h]);v.useLayoutEffect(()=>n.subscribe(w),[n,w]),v.useEffect(()=>{s.isTransitioning&&!s.flushSync&&d(new eC)},[s]),v.useEffect(()=>{if(c&&l&&n.window){let C=l,F=c.promise,T=n.window.document.startViewTransition(async()=>{h(()=>i(C)),await F});T.finished.finally(()=>{d(void 0),p(void 0),a(void 0),u({isTransitioning:!1})}),p(T)}},[h,l,c,n.window]),v.useEffect(()=>{c&&l&&o.location.key===l.location.key&&c.resolve()},[c,f,o.location,l]),v.useEffect(()=>{!s.isTransitioning&&y&&(a(y.state),u({isTransitioning:!0,flushSync:!1,currentLocation:y.currentLocation,nextLocation:y.nextLocation}),m(void 0))},[s.isTransitioning,y]),v.useEffect(()=>{},[]);let x=v.useMemo(()=>({createHref:n.createHref,encodeLocation:n.encodeLocation,go:C=>n.navigate(C),push:(C,F,T)=>n.navigate(C,{state:F,preventScrollReset:T==null?void 0:T.preventScrollReset}),replace:(C,F,T)=>n.navigate(C,{replace:!0,state:F,preventScrollReset:T==null?void 0:T.preventScrollReset})}),[n]),P=n.basename||"/",D=v.useMemo(()=>({router:n,navigator:x,static:!1,basename:P}),[n,x,P]),k=v.useMemo(()=>({v7_relativeSplatPath:n.future.v7_relativeSplatPath}),[n.future.v7_relativeSplatPath]);return v.createElement(v.Fragment,null,v.createElement(Ii.Provider,{value:D},v.createElement(td.Provider,{value:o},v.createElement(Yx.Provider,{value:S.current},v.createElement(Nm.Provider,{value:s},v.createElement($x,{basename:P,location:o.location,navigationType:o.historyAction,navigator:x,future:k},o.initialized||n.future.v7_partialHydration?v.createElement(nC,{routes:n.routes,future:n.future,state:o}):t))))),null)}const nC=v.memo(rC);function rC(e){let{routes:t,future:n,state:r}=e;return Mx(t,void 0,r,n)}const oC=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",iC=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Im=v.forwardRef(function(t,n){let{onClick:r,relative:o,reloadDocument:i,replace:l,state:a,target:s,to:u,preventScrollReset:c,unstable_viewTransition:d}=t,f=Dm(t,Hx),{basename:p}=v.useContext(rr),y,m=!1;if(typeof u=="string"&&iC.test(u)&&(y=u,oC))try{let w=new URL(window.location.href),x=u.startsWith("//")?new URL(w.protocol+u):new URL(u),P=vn(x.pathname,p);x.origin===w.origin&&P!=null?u=P+x.search+x.hash:m=!0}catch{}let S=Cx(u,{relative:o}),g=aC(u,{replace:l,state:a,target:s,preventScrollReset:c,relative:o,unstable_viewTransition:d});function h(w){r&&r(w),w.defaultPrevented||g(w)}return v.createElement("a",go({},f,{href:y||S,onClick:m||i?r:h,ref:n,target:s}))}),vp=v.forwardRef(function(t,n){let{"aria-current":r="page",caseSensitive:o=!1,className:i="",end:l=!1,style:a,to:s,unstable_viewTransition:u,children:c}=t,d=Dm(t,Gx),f=ja(s,{relative:d.relative}),p=Li(),y=v.useContext(td),{navigator:m,basename:S}=v.useContext(rr),g=y!=null&&sC(f)&&u===!0,h=m.encodeLocation?m.encodeLocation(f).pathname:f.pathname,w=p.pathname,x=y&&y.navigation&&y.navigation.location?y.navigation.location.pathname:null;o||(w=w.toLowerCase(),x=x?x.toLowerCase():null,h=h.toLowerCase()),x&&S&&(x=vn(x,S)||x);const P=h!=="/"&&h.endsWith("/")?h.length-1:h.length;let D=w===h||!l&&w.startsWith(h)&&w.charAt(P)==="/",k=x!=null&&(x===h||!l&&x.startsWith(h)&&x.charAt(h.length)==="/"),C={isActive:D,isPending:k,isTransitioning:g},F=D?r:void 0,T;typeof i=="function"?T=i(C):T=[i,D?"active":null,k?"pending":null,g?"transitioning":null].filter(Boolean).join(" ");let b=typeof a=="function"?a(C):a;return v.createElement(Im,go({},d,{"aria-current":F,className:T,ref:n,style:b,to:s,unstable_viewTransition:u}),typeof c=="function"?c(C):c)});var Vu;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Vu||(Vu={}));var yp;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(yp||(yp={}));function lC(e){let t=v.useContext(Ii);return t||te(!1),t}function aC(e,t){let{target:n,replace:r,state:o,preventScrollReset:i,relative:l,unstable_viewTransition:a}=t===void 0?{}:t,s=Rx(),u=Li(),c=ja(e,{relative:l});return v.useCallback(d=>{if(Bx(d,n)){d.preventDefault();let f=r!==void 0?r:Cr(u)===Cr(c);s(e,{replace:f,state:o,preventScrollReset:i,relative:l,unstable_viewTransition:a})}},[u,s,c,r,o,n,e,i,l,a])}function sC(e,t){t===void 0&&(t={});let n=v.useContext(Nm);n==null&&te(!1);let{basename:r}=lC(Vu.useViewTransitionState),o=ja(e,{relative:t.relative});if(!n.isTransitioning)return!1;let i=vn(n.currentLocation.pathname,r)||n.currentLocation.pathname,l=vn(n.nextLocation.pathname,r)||n.nextLocation.pathname;return ua(o.pathname,l)!=null||ua(o.pathname,i)!=null}function uC(){return R.jsxs("div",{className:"min-h-screen",children:[R.jsx("header",{className:"border-b",children:R.jsxs("div",{className:"mx-auto max-w-5xl p-4 flex gap-6",children:[R.jsx(Im,{to:"/",className:"font-semibold",children:"XSD Registry"}),R.jsxs("nav",{className:"flex gap-4",children:[R.jsx(vp,{to:"/schemas",className:({isActive:e})=>e?"underline":"",children:"Схемы"}),R.jsx(vp,{to:"/schemas/upload",className:({isActive:e})=>e?"underline":"",children:"Загрузка"})]})]})}),R.jsx("main",{className:"mx-auto max-w-5xl p-4",children:R.jsx(zx,{})})]})}/** + * table-core + * + * Copyright (c) TanStack + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function bn(e,t){return typeof e=="function"?e(t):e}function wt(e,t){return n=>{t.setState(r=>({...r,[e]:bn(n,r[e])}))}}function ba(e){return e instanceof Function}function cC(e){return Array.isArray(e)&&e.every(t=>typeof t=="number")}function dC(e,t){const n=[],r=o=>{o.forEach(i=>{n.push(i);const l=t(i);l!=null&&l.length&&r(l)})};return r(e),n}function X(e,t,n){let r=[],o;return i=>{let l;n.key&&n.debug&&(l=Date.now());const a=e(i);if(!(a.length!==r.length||a.some((c,d)=>r[d]!==c)))return o;r=a;let u;if(n.key&&n.debug&&(u=Date.now()),o=t(...a),n==null||n.onChange==null||n.onChange(o),n.key&&n.debug&&n!=null&&n.debug()){const c=Math.round((Date.now()-l)*100)/100,d=Math.round((Date.now()-u)*100)/100,f=d/16,p=(y,m)=>{for(y=String(y);y.length{var o;return(o=e==null?void 0:e.debugAll)!=null?o:e[t]},key:!1,onChange:r}}function fC(e,t,n,r){const o=()=>{var l;return(l=i.getValue())!=null?l:e.options.renderFallbackValue},i={id:`${t.id}_${n.id}`,row:t,column:n,getValue:()=>t.getValue(r),renderValue:o,getContext:X(()=>[e,n,t,i],(l,a,s,u)=>({table:l,column:a,row:s,cell:u,getValue:u.getValue,renderValue:u.renderValue}),Y(e.options,"debugCells"))};return e._features.forEach(l=>{l.createCell==null||l.createCell(i,n,t,e)},{}),i}function pC(e,t,n,r){var o,i;const a={...e._getDefaultColumnDef(),...t},s=a.accessorKey;let u=(o=(i=a.id)!=null?i:s?typeof String.prototype.replaceAll=="function"?s.replaceAll(".","_"):s.replace(/\./g,"_"):void 0)!=null?o:typeof a.header=="string"?a.header:void 0,c;if(a.accessorFn?c=a.accessorFn:s&&(s.includes(".")?c=f=>{let p=f;for(const m of s.split(".")){var y;p=(y=p)==null?void 0:y[m]}return p}:c=f=>f[a.accessorKey]),!u)throw new Error;let d={id:`${String(u)}`,accessorFn:c,parent:r,depth:n,columnDef:a,columns:[],getFlatColumns:X(()=>[!0],()=>{var f;return[d,...(f=d.columns)==null?void 0:f.flatMap(p=>p.getFlatColumns())]},Y(e.options,"debugColumns")),getLeafColumns:X(()=>[e._getOrderColumnsFn()],f=>{var p;if((p=d.columns)!=null&&p.length){let y=d.columns.flatMap(m=>m.getLeafColumns());return f(y)}return[d]},Y(e.options,"debugColumns"))};for(const f of e._features)f.createColumn==null||f.createColumn(d,e);return d}const Qe="debugHeaders";function wp(e,t,n){var r;let i={id:(r=n.id)!=null?r:t.id,column:t,index:n.index,isPlaceholder:!!n.isPlaceholder,placeholderId:n.placeholderId,depth:n.depth,subHeaders:[],colSpan:0,rowSpan:0,headerGroup:null,getLeafHeaders:()=>{const l=[],a=s=>{s.subHeaders&&s.subHeaders.length&&s.subHeaders.map(a),l.push(s)};return a(i),l},getContext:()=>({table:e,header:i,column:t})};return e._features.forEach(l=>{l.createHeader==null||l.createHeader(i,e)}),i}const gC={createTable:e=>{e.getHeaderGroups=X(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,o)=>{var i,l;const a=(i=r==null?void 0:r.map(d=>n.find(f=>f.id===d)).filter(Boolean))!=null?i:[],s=(l=o==null?void 0:o.map(d=>n.find(f=>f.id===d)).filter(Boolean))!=null?l:[],u=n.filter(d=>!(r!=null&&r.includes(d.id))&&!(o!=null&&o.includes(d.id)));return gl(t,[...a,...u,...s],e)},Y(e.options,Qe)),e.getCenterHeaderGroups=X(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,o)=>(n=n.filter(i=>!(r!=null&&r.includes(i.id))&&!(o!=null&&o.includes(i.id))),gl(t,n,e,"center")),Y(e.options,Qe)),e.getLeftHeaderGroups=X(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left],(t,n,r)=>{var o;const i=(o=r==null?void 0:r.map(l=>n.find(a=>a.id===l)).filter(Boolean))!=null?o:[];return gl(t,i,e,"left")},Y(e.options,Qe)),e.getRightHeaderGroups=X(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.right],(t,n,r)=>{var o;const i=(o=r==null?void 0:r.map(l=>n.find(a=>a.id===l)).filter(Boolean))!=null?o:[];return gl(t,i,e,"right")},Y(e.options,Qe)),e.getFooterGroups=X(()=>[e.getHeaderGroups()],t=>[...t].reverse(),Y(e.options,Qe)),e.getLeftFooterGroups=X(()=>[e.getLeftHeaderGroups()],t=>[...t].reverse(),Y(e.options,Qe)),e.getCenterFooterGroups=X(()=>[e.getCenterHeaderGroups()],t=>[...t].reverse(),Y(e.options,Qe)),e.getRightFooterGroups=X(()=>[e.getRightHeaderGroups()],t=>[...t].reverse(),Y(e.options,Qe)),e.getFlatHeaders=X(()=>[e.getHeaderGroups()],t=>t.map(n=>n.headers).flat(),Y(e.options,Qe)),e.getLeftFlatHeaders=X(()=>[e.getLeftHeaderGroups()],t=>t.map(n=>n.headers).flat(),Y(e.options,Qe)),e.getCenterFlatHeaders=X(()=>[e.getCenterHeaderGroups()],t=>t.map(n=>n.headers).flat(),Y(e.options,Qe)),e.getRightFlatHeaders=X(()=>[e.getRightHeaderGroups()],t=>t.map(n=>n.headers).flat(),Y(e.options,Qe)),e.getCenterLeafHeaders=X(()=>[e.getCenterFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),Y(e.options,Qe)),e.getLeftLeafHeaders=X(()=>[e.getLeftFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),Y(e.options,Qe)),e.getRightLeafHeaders=X(()=>[e.getRightFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),Y(e.options,Qe)),e.getLeafHeaders=X(()=>[e.getLeftHeaderGroups(),e.getCenterHeaderGroups(),e.getRightHeaderGroups()],(t,n,r)=>{var o,i,l,a,s,u;return[...(o=(i=t[0])==null?void 0:i.headers)!=null?o:[],...(l=(a=n[0])==null?void 0:a.headers)!=null?l:[],...(s=(u=r[0])==null?void 0:u.headers)!=null?s:[]].map(c=>c.getLeafHeaders()).flat()},Y(e.options,Qe))}};function gl(e,t,n,r){var o,i;let l=0;const a=function(f,p){p===void 0&&(p=1),l=Math.max(l,p),f.filter(y=>y.getIsVisible()).forEach(y=>{var m;(m=y.columns)!=null&&m.length&&a(y.columns,p+1)},0)};a(e);let s=[];const u=(f,p)=>{const y={depth:p,id:[r,`${p}`].filter(Boolean).join("_"),headers:[]},m=[];f.forEach(S=>{const g=[...m].reverse()[0],h=S.column.depth===y.depth;let w,x=!1;if(h&&S.column.parent?w=S.column.parent:(w=S.column,x=!0),g&&(g==null?void 0:g.column)===w)g.subHeaders.push(S);else{const P=wp(n,w,{id:[r,p,w.id,S==null?void 0:S.id].filter(Boolean).join("_"),isPlaceholder:x,placeholderId:x?`${m.filter(D=>D.column===w).length}`:void 0,depth:p,index:m.length});P.subHeaders.push(S),m.push(P)}y.headers.push(S),S.headerGroup=y}),s.push(y),p>0&&u(m,p-1)},c=t.map((f,p)=>wp(n,f,{depth:l,index:p}));u(c,l-1),s.reverse();const d=f=>f.filter(y=>y.column.getIsVisible()).map(y=>{let m=0,S=0,g=[0];y.subHeaders&&y.subHeaders.length?(g=[],d(y.subHeaders).forEach(w=>{let{colSpan:x,rowSpan:P}=w;m+=x,g.push(P)})):m=1;const h=Math.min(...g);return S=S+h,y.colSpan=m,y.rowSpan=S,{colSpan:m,rowSpan:S}});return d((o=(i=s[0])==null?void 0:i.headers)!=null?o:[]),s}const hC=(e,t,n,r,o,i,l)=>{let a={id:t,index:r,original:n,depth:o,parentId:l,_valuesCache:{},_uniqueValuesCache:{},getValue:s=>{if(a._valuesCache.hasOwnProperty(s))return a._valuesCache[s];const u=e.getColumn(s);if(u!=null&&u.accessorFn)return a._valuesCache[s]=u.accessorFn(a.original,r),a._valuesCache[s]},getUniqueValues:s=>{if(a._uniqueValuesCache.hasOwnProperty(s))return a._uniqueValuesCache[s];const u=e.getColumn(s);if(u!=null&&u.accessorFn)return u.columnDef.getUniqueValues?(a._uniqueValuesCache[s]=u.columnDef.getUniqueValues(a.original,r),a._uniqueValuesCache[s]):(a._uniqueValuesCache[s]=[a.getValue(s)],a._uniqueValuesCache[s])},renderValue:s=>{var u;return(u=a.getValue(s))!=null?u:e.options.renderFallbackValue},subRows:[],getLeafRows:()=>dC(a.subRows,s=>s.subRows),getParentRow:()=>a.parentId?e.getRow(a.parentId,!0):void 0,getParentRows:()=>{let s=[],u=a;for(;;){const c=u.getParentRow();if(!c)break;s.push(c),u=c}return s.reverse()},getAllCells:X(()=>[e.getAllLeafColumns()],s=>s.map(u=>fC(e,a,u,u.id)),Y(e.options,"debugRows")),_getAllCellsByColumnId:X(()=>[a.getAllCells()],s=>s.reduce((u,c)=>(u[c.column.id]=c,u),{}),Y(e.options,"debugRows"))};for(let s=0;s{e._getFacetedRowModel=t.options.getFacetedRowModel&&t.options.getFacetedRowModel(t,e.id),e.getFacetedRowModel=()=>e._getFacetedRowModel?e._getFacetedRowModel():t.getPreFilteredRowModel(),e._getFacetedUniqueValues=t.options.getFacetedUniqueValues&&t.options.getFacetedUniqueValues(t,e.id),e.getFacetedUniqueValues=()=>e._getFacetedUniqueValues?e._getFacetedUniqueValues():new Map,e._getFacetedMinMaxValues=t.options.getFacetedMinMaxValues&&t.options.getFacetedMinMaxValues(t,e.id),e.getFacetedMinMaxValues=()=>{if(e._getFacetedMinMaxValues)return e._getFacetedMinMaxValues()}}},Tm=(e,t,n)=>{var r,o;const i=n==null||(r=n.toString())==null?void 0:r.toLowerCase();return!!(!((o=e.getValue(t))==null||(o=o.toString())==null||(o=o.toLowerCase())==null)&&o.includes(i))};Tm.autoRemove=e=>At(e);const Lm=(e,t,n)=>{var r;return!!(!((r=e.getValue(t))==null||(r=r.toString())==null)&&r.includes(n))};Lm.autoRemove=e=>At(e);const Om=(e,t,n)=>{var r;return((r=e.getValue(t))==null||(r=r.toString())==null?void 0:r.toLowerCase())===(n==null?void 0:n.toLowerCase())};Om.autoRemove=e=>At(e);const Fm=(e,t,n)=>{var r;return(r=e.getValue(t))==null?void 0:r.includes(n)};Fm.autoRemove=e=>At(e);const Am=(e,t,n)=>!n.some(r=>{var o;return!((o=e.getValue(t))!=null&&o.includes(r))});Am.autoRemove=e=>At(e)||!(e!=null&&e.length);const jm=(e,t,n)=>n.some(r=>{var o;return(o=e.getValue(t))==null?void 0:o.includes(r)});jm.autoRemove=e=>At(e)||!(e!=null&&e.length);const bm=(e,t,n)=>e.getValue(t)===n;bm.autoRemove=e=>At(e);const zm=(e,t,n)=>e.getValue(t)==n;zm.autoRemove=e=>At(e);const rd=(e,t,n)=>{let[r,o]=n;const i=e.getValue(t);return i>=r&&i<=o};rd.resolveFilterValue=e=>{let[t,n]=e,r=typeof t!="number"?parseFloat(t):t,o=typeof n!="number"?parseFloat(n):n,i=t===null||Number.isNaN(r)?-1/0:r,l=n===null||Number.isNaN(o)?1/0:o;if(i>l){const a=i;i=l,l=a}return[i,l]};rd.autoRemove=e=>At(e)||At(e[0])&&At(e[1]);const an={includesString:Tm,includesStringSensitive:Lm,equalsString:Om,arrIncludes:Fm,arrIncludesAll:Am,arrIncludesSome:jm,equals:bm,weakEquals:zm,inNumberRange:rd};function At(e){return e==null||e===""}const vC={getDefaultColumnDef:()=>({filterFn:"auto"}),getInitialState:e=>({columnFilters:[],...e}),getDefaultOptions:e=>({onColumnFiltersChange:wt("columnFilters",e),filterFromLeafRows:!1,maxLeafRowFilterDepth:100}),createColumn:(e,t)=>{e.getAutoFilterFn=()=>{const n=t.getCoreRowModel().flatRows[0],r=n==null?void 0:n.getValue(e.id);return typeof r=="string"?an.includesString:typeof r=="number"?an.inNumberRange:typeof r=="boolean"||r!==null&&typeof r=="object"?an.equals:Array.isArray(r)?an.arrIncludes:an.weakEquals},e.getFilterFn=()=>{var n,r;return ba(e.columnDef.filterFn)?e.columnDef.filterFn:e.columnDef.filterFn==="auto"?e.getAutoFilterFn():(n=(r=t.options.filterFns)==null?void 0:r[e.columnDef.filterFn])!=null?n:an[e.columnDef.filterFn]},e.getCanFilter=()=>{var n,r,o;return((n=e.columnDef.enableColumnFilter)!=null?n:!0)&&((r=t.options.enableColumnFilters)!=null?r:!0)&&((o=t.options.enableFilters)!=null?o:!0)&&!!e.accessorFn},e.getIsFiltered=()=>e.getFilterIndex()>-1,e.getFilterValue=()=>{var n;return(n=t.getState().columnFilters)==null||(n=n.find(r=>r.id===e.id))==null?void 0:n.value},e.getFilterIndex=()=>{var n,r;return(n=(r=t.getState().columnFilters)==null?void 0:r.findIndex(o=>o.id===e.id))!=null?n:-1},e.setFilterValue=n=>{t.setColumnFilters(r=>{const o=e.getFilterFn(),i=r==null?void 0:r.find(c=>c.id===e.id),l=bn(n,i?i.value:void 0);if(Sp(o,l,e)){var a;return(a=r==null?void 0:r.filter(c=>c.id!==e.id))!=null?a:[]}const s={id:e.id,value:l};if(i){var u;return(u=r==null?void 0:r.map(c=>c.id===e.id?s:c))!=null?u:[]}return r!=null&&r.length?[...r,s]:[s]})}},createRow:(e,t)=>{e.columnFilters={},e.columnFiltersMeta={}},createTable:e=>{e.setColumnFilters=t=>{const n=e.getAllLeafColumns(),r=o=>{var i;return(i=bn(t,o))==null?void 0:i.filter(l=>{const a=n.find(s=>s.id===l.id);if(a){const s=a.getFilterFn();if(Sp(s,l.value,a))return!1}return!0})};e.options.onColumnFiltersChange==null||e.options.onColumnFiltersChange(r)},e.resetColumnFilters=t=>{var n,r;e.setColumnFilters(t?[]:(n=(r=e.initialState)==null?void 0:r.columnFilters)!=null?n:[])},e.getPreFilteredRowModel=()=>e.getCoreRowModel(),e.getFilteredRowModel=()=>(!e._getFilteredRowModel&&e.options.getFilteredRowModel&&(e._getFilteredRowModel=e.options.getFilteredRowModel(e)),e.options.manualFiltering||!e._getFilteredRowModel?e.getPreFilteredRowModel():e._getFilteredRowModel())}};function Sp(e,t,n){return(e&&e.autoRemove?e.autoRemove(t,n):!1)||typeof t>"u"||typeof t=="string"&&!t}const yC=(e,t,n)=>n.reduce((r,o)=>{const i=o.getValue(e);return r+(typeof i=="number"?i:0)},0),wC=(e,t,n)=>{let r;return n.forEach(o=>{const i=o.getValue(e);i!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}),r},SC=(e,t,n)=>{let r;return n.forEach(o=>{const i=o.getValue(e);i!=null&&(r=i)&&(r=i)}),r},xC=(e,t,n)=>{let r,o;return n.forEach(i=>{const l=i.getValue(e);l!=null&&(r===void 0?l>=l&&(r=o=l):(r>l&&(r=l),o{let n=0,r=0;if(t.forEach(o=>{let i=o.getValue(e);i!=null&&(i=+i)>=i&&(++n,r+=i)}),n)return r/n},RC=(e,t)=>{if(!t.length)return;const n=t.map(i=>i.getValue(e));if(!cC(n))return;if(n.length===1)return n[0];const r=Math.floor(n.length/2),o=n.sort((i,l)=>i-l);return n.length%2!==0?o[r]:(o[r-1]+o[r])/2},EC=(e,t)=>Array.from(new Set(t.map(n=>n.getValue(e))).values()),_C=(e,t)=>new Set(t.map(n=>n.getValue(e))).size,PC=(e,t)=>t.length,ks={sum:yC,min:wC,max:SC,extent:xC,mean:CC,median:RC,unique:EC,uniqueCount:_C,count:PC},MC={getDefaultColumnDef:()=>({aggregatedCell:e=>{var t,n;return(t=(n=e.getValue())==null||n.toString==null?void 0:n.toString())!=null?t:null},aggregationFn:"auto"}),getInitialState:e=>({grouping:[],...e}),getDefaultOptions:e=>({onGroupingChange:wt("grouping",e),groupedColumnMode:"reorder"}),createColumn:(e,t)=>{e.toggleGrouping=()=>{t.setGrouping(n=>n!=null&&n.includes(e.id)?n.filter(r=>r!==e.id):[...n??[],e.id])},e.getCanGroup=()=>{var n,r;return((n=e.columnDef.enableGrouping)!=null?n:!0)&&((r=t.options.enableGrouping)!=null?r:!0)&&(!!e.accessorFn||!!e.columnDef.getGroupingValue)},e.getIsGrouped=()=>{var n;return(n=t.getState().grouping)==null?void 0:n.includes(e.id)},e.getGroupedIndex=()=>{var n;return(n=t.getState().grouping)==null?void 0:n.indexOf(e.id)},e.getToggleGroupingHandler=()=>{const n=e.getCanGroup();return()=>{n&&e.toggleGrouping()}},e.getAutoAggregationFn=()=>{const n=t.getCoreRowModel().flatRows[0],r=n==null?void 0:n.getValue(e.id);if(typeof r=="number")return ks.sum;if(Object.prototype.toString.call(r)==="[object Date]")return ks.extent},e.getAggregationFn=()=>{var n,r;if(!e)throw new Error;return ba(e.columnDef.aggregationFn)?e.columnDef.aggregationFn:e.columnDef.aggregationFn==="auto"?e.getAutoAggregationFn():(n=(r=t.options.aggregationFns)==null?void 0:r[e.columnDef.aggregationFn])!=null?n:ks[e.columnDef.aggregationFn]}},createTable:e=>{e.setGrouping=t=>e.options.onGroupingChange==null?void 0:e.options.onGroupingChange(t),e.resetGrouping=t=>{var n,r;e.setGrouping(t?[]:(n=(r=e.initialState)==null?void 0:r.grouping)!=null?n:[])},e.getPreGroupedRowModel=()=>e.getFilteredRowModel(),e.getGroupedRowModel=()=>(!e._getGroupedRowModel&&e.options.getGroupedRowModel&&(e._getGroupedRowModel=e.options.getGroupedRowModel(e)),e.options.manualGrouping||!e._getGroupedRowModel?e.getPreGroupedRowModel():e._getGroupedRowModel())},createRow:(e,t)=>{e.getIsGrouped=()=>!!e.groupingColumnId,e.getGroupingValue=n=>{if(e._groupingValuesCache.hasOwnProperty(n))return e._groupingValuesCache[n];const r=t.getColumn(n);return r!=null&&r.columnDef.getGroupingValue?(e._groupingValuesCache[n]=r.columnDef.getGroupingValue(e.original),e._groupingValuesCache[n]):e.getValue(n)},e._groupingValuesCache={}},createCell:(e,t,n,r)=>{e.getIsGrouped=()=>t.getIsGrouped()&&t.id===n.groupingColumnId,e.getIsPlaceholder=()=>!e.getIsGrouped()&&t.getIsGrouped(),e.getIsAggregated=()=>{var o;return!e.getIsGrouped()&&!e.getIsPlaceholder()&&!!((o=n.subRows)!=null&&o.length)}}};function kC(e,t,n){if(!(t!=null&&t.length)||!n)return e;const r=e.filter(i=>!t.includes(i.id));return n==="remove"?r:[...t.map(i=>e.find(l=>l.id===i)).filter(Boolean),...r]}const DC={getInitialState:e=>({columnOrder:[],...e}),getDefaultOptions:e=>({onColumnOrderChange:wt("columnOrder",e)}),createColumn:(e,t)=>{e.getIndex=X(n=>[ei(t,n)],n=>n.findIndex(r=>r.id===e.id),Y(t.options,"debugColumns")),e.getIsFirstColumn=n=>{var r;return((r=ei(t,n)[0])==null?void 0:r.id)===e.id},e.getIsLastColumn=n=>{var r;const o=ei(t,n);return((r=o[o.length-1])==null?void 0:r.id)===e.id}},createTable:e=>{e.setColumnOrder=t=>e.options.onColumnOrderChange==null?void 0:e.options.onColumnOrderChange(t),e.resetColumnOrder=t=>{var n;e.setColumnOrder(t?[]:(n=e.initialState.columnOrder)!=null?n:[])},e._getOrderColumnsFn=X(()=>[e.getState().columnOrder,e.getState().grouping,e.options.groupedColumnMode],(t,n,r)=>o=>{let i=[];if(!(t!=null&&t.length))i=o;else{const l=[...t],a=[...o];for(;a.length&&l.length;){const s=l.shift(),u=a.findIndex(c=>c.id===s);u>-1&&i.push(a.splice(u,1)[0])}i=[...i,...a]}return kC(i,n,r)},Y(e.options,"debugTable"))}},Ds=()=>({left:[],right:[]}),NC={getInitialState:e=>({columnPinning:Ds(),...e}),getDefaultOptions:e=>({onColumnPinningChange:wt("columnPinning",e)}),createColumn:(e,t)=>{e.pin=n=>{const r=e.getLeafColumns().map(o=>o.id).filter(Boolean);t.setColumnPinning(o=>{var i,l;if(n==="right"){var a,s;return{left:((a=o==null?void 0:o.left)!=null?a:[]).filter(d=>!(r!=null&&r.includes(d))),right:[...((s=o==null?void 0:o.right)!=null?s:[]).filter(d=>!(r!=null&&r.includes(d))),...r]}}if(n==="left"){var u,c;return{left:[...((u=o==null?void 0:o.left)!=null?u:[]).filter(d=>!(r!=null&&r.includes(d))),...r],right:((c=o==null?void 0:o.right)!=null?c:[]).filter(d=>!(r!=null&&r.includes(d)))}}return{left:((i=o==null?void 0:o.left)!=null?i:[]).filter(d=>!(r!=null&&r.includes(d))),right:((l=o==null?void 0:o.right)!=null?l:[]).filter(d=>!(r!=null&&r.includes(d)))}})},e.getCanPin=()=>e.getLeafColumns().some(r=>{var o,i,l;return((o=r.columnDef.enablePinning)!=null?o:!0)&&((i=(l=t.options.enableColumnPinning)!=null?l:t.options.enablePinning)!=null?i:!0)}),e.getIsPinned=()=>{const n=e.getLeafColumns().map(a=>a.id),{left:r,right:o}=t.getState().columnPinning,i=n.some(a=>r==null?void 0:r.includes(a)),l=n.some(a=>o==null?void 0:o.includes(a));return i?"left":l?"right":!1},e.getPinnedIndex=()=>{var n,r;const o=e.getIsPinned();return o?(n=(r=t.getState().columnPinning)==null||(r=r[o])==null?void 0:r.indexOf(e.id))!=null?n:-1:0}},createRow:(e,t)=>{e.getCenterVisibleCells=X(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left,t.getState().columnPinning.right],(n,r,o)=>{const i=[...r??[],...o??[]];return n.filter(l=>!i.includes(l.column.id))},Y(t.options,"debugRows")),e.getLeftVisibleCells=X(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left],(n,r)=>(r??[]).map(i=>n.find(l=>l.column.id===i)).filter(Boolean).map(i=>({...i,position:"left"})),Y(t.options,"debugRows")),e.getRightVisibleCells=X(()=>[e._getAllVisibleCells(),t.getState().columnPinning.right],(n,r)=>(r??[]).map(i=>n.find(l=>l.column.id===i)).filter(Boolean).map(i=>({...i,position:"right"})),Y(t.options,"debugRows"))},createTable:e=>{e.setColumnPinning=t=>e.options.onColumnPinningChange==null?void 0:e.options.onColumnPinningChange(t),e.resetColumnPinning=t=>{var n,r;return e.setColumnPinning(t?Ds():(n=(r=e.initialState)==null?void 0:r.columnPinning)!=null?n:Ds())},e.getIsSomeColumnsPinned=t=>{var n;const r=e.getState().columnPinning;if(!t){var o,i;return!!((o=r.left)!=null&&o.length||(i=r.right)!=null&&i.length)}return!!((n=r[t])!=null&&n.length)},e.getLeftLeafColumns=X(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left],(t,n)=>(n??[]).map(r=>t.find(o=>o.id===r)).filter(Boolean),Y(e.options,"debugColumns")),e.getRightLeafColumns=X(()=>[e.getAllLeafColumns(),e.getState().columnPinning.right],(t,n)=>(n??[]).map(r=>t.find(o=>o.id===r)).filter(Boolean),Y(e.options,"debugColumns")),e.getCenterLeafColumns=X(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r)=>{const o=[...n??[],...r??[]];return t.filter(i=>!o.includes(i.id))},Y(e.options,"debugColumns"))}};function IC(e){return e||(typeof document<"u"?document:null)}const hl={size:150,minSize:20,maxSize:Number.MAX_SAFE_INTEGER},Ns=()=>({startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}),TC={getDefaultColumnDef:()=>hl,getInitialState:e=>({columnSizing:{},columnSizingInfo:Ns(),...e}),getDefaultOptions:e=>({columnResizeMode:"onEnd",columnResizeDirection:"ltr",onColumnSizingChange:wt("columnSizing",e),onColumnSizingInfoChange:wt("columnSizingInfo",e)}),createColumn:(e,t)=>{e.getSize=()=>{var n,r,o;const i=t.getState().columnSizing[e.id];return Math.min(Math.max((n=e.columnDef.minSize)!=null?n:hl.minSize,(r=i??e.columnDef.size)!=null?r:hl.size),(o=e.columnDef.maxSize)!=null?o:hl.maxSize)},e.getStart=X(n=>[n,ei(t,n),t.getState().columnSizing],(n,r)=>r.slice(0,e.getIndex(n)).reduce((o,i)=>o+i.getSize(),0),Y(t.options,"debugColumns")),e.getAfter=X(n=>[n,ei(t,n),t.getState().columnSizing],(n,r)=>r.slice(e.getIndex(n)+1).reduce((o,i)=>o+i.getSize(),0),Y(t.options,"debugColumns")),e.resetSize=()=>{t.setColumnSizing(n=>{let{[e.id]:r,...o}=n;return o})},e.getCanResize=()=>{var n,r;return((n=e.columnDef.enableResizing)!=null?n:!0)&&((r=t.options.enableColumnResizing)!=null?r:!0)},e.getIsResizing=()=>t.getState().columnSizingInfo.isResizingColumn===e.id},createHeader:(e,t)=>{e.getSize=()=>{let n=0;const r=o=>{if(o.subHeaders.length)o.subHeaders.forEach(r);else{var i;n+=(i=o.column.getSize())!=null?i:0}};return r(e),n},e.getStart=()=>{if(e.index>0){const n=e.headerGroup.headers[e.index-1];return n.getStart()+n.getSize()}return 0},e.getResizeHandler=n=>{const r=t.getColumn(e.column.id),o=r==null?void 0:r.getCanResize();return i=>{if(!r||!o||(i.persist==null||i.persist(),Is(i)&&i.touches&&i.touches.length>1))return;const l=e.getSize(),a=e?e.getLeafHeaders().map(g=>[g.column.id,g.column.getSize()]):[[r.id,r.getSize()]],s=Is(i)?Math.round(i.touches[0].clientX):i.clientX,u={},c=(g,h)=>{typeof h=="number"&&(t.setColumnSizingInfo(w=>{var x,P;const D=t.options.columnResizeDirection==="rtl"?-1:1,k=(h-((x=w==null?void 0:w.startOffset)!=null?x:0))*D,C=Math.max(k/((P=w==null?void 0:w.startSize)!=null?P:0),-.999999);return w.columnSizingStart.forEach(F=>{let[T,b]=F;u[T]=Math.round(Math.max(b+b*C,0)*100)/100}),{...w,deltaOffset:k,deltaPercentage:C}}),(t.options.columnResizeMode==="onChange"||g==="end")&&t.setColumnSizing(w=>({...w,...u})))},d=g=>c("move",g),f=g=>{c("end",g),t.setColumnSizingInfo(h=>({...h,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]}))},p=IC(n),y={moveHandler:g=>d(g.clientX),upHandler:g=>{p==null||p.removeEventListener("mousemove",y.moveHandler),p==null||p.removeEventListener("mouseup",y.upHandler),f(g.clientX)}},m={moveHandler:g=>(g.cancelable&&(g.preventDefault(),g.stopPropagation()),d(g.touches[0].clientX),!1),upHandler:g=>{var h;p==null||p.removeEventListener("touchmove",m.moveHandler),p==null||p.removeEventListener("touchend",m.upHandler),g.cancelable&&(g.preventDefault(),g.stopPropagation()),f((h=g.touches[0])==null?void 0:h.clientX)}},S=LC()?{passive:!1}:!1;Is(i)?(p==null||p.addEventListener("touchmove",m.moveHandler,S),p==null||p.addEventListener("touchend",m.upHandler,S)):(p==null||p.addEventListener("mousemove",y.moveHandler,S),p==null||p.addEventListener("mouseup",y.upHandler,S)),t.setColumnSizingInfo(g=>({...g,startOffset:s,startSize:l,deltaOffset:0,deltaPercentage:0,columnSizingStart:a,isResizingColumn:r.id}))}}},createTable:e=>{e.setColumnSizing=t=>e.options.onColumnSizingChange==null?void 0:e.options.onColumnSizingChange(t),e.setColumnSizingInfo=t=>e.options.onColumnSizingInfoChange==null?void 0:e.options.onColumnSizingInfoChange(t),e.resetColumnSizing=t=>{var n;e.setColumnSizing(t?{}:(n=e.initialState.columnSizing)!=null?n:{})},e.resetHeaderSizeInfo=t=>{var n;e.setColumnSizingInfo(t?Ns():(n=e.initialState.columnSizingInfo)!=null?n:Ns())},e.getTotalSize=()=>{var t,n;return(t=(n=e.getHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0},e.getLeftTotalSize=()=>{var t,n;return(t=(n=e.getLeftHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0},e.getCenterTotalSize=()=>{var t,n;return(t=(n=e.getCenterHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0},e.getRightTotalSize=()=>{var t,n;return(t=(n=e.getRightHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0}}};let ml=null;function LC(){if(typeof ml=="boolean")return ml;let e=!1;try{const t={get passive(){return e=!0,!1}},n=()=>{};window.addEventListener("test",n,t),window.removeEventListener("test",n)}catch{e=!1}return ml=e,ml}function Is(e){return e.type==="touchstart"}const OC={getInitialState:e=>({columnVisibility:{},...e}),getDefaultOptions:e=>({onColumnVisibilityChange:wt("columnVisibility",e)}),createColumn:(e,t)=>{e.toggleVisibility=n=>{e.getCanHide()&&t.setColumnVisibility(r=>({...r,[e.id]:n??!e.getIsVisible()}))},e.getIsVisible=()=>{var n,r;const o=e.columns;return(n=o.length?o.some(i=>i.getIsVisible()):(r=t.getState().columnVisibility)==null?void 0:r[e.id])!=null?n:!0},e.getCanHide=()=>{var n,r;return((n=e.columnDef.enableHiding)!=null?n:!0)&&((r=t.options.enableHiding)!=null?r:!0)},e.getToggleVisibilityHandler=()=>n=>{e.toggleVisibility==null||e.toggleVisibility(n.target.checked)}},createRow:(e,t)=>{e._getAllVisibleCells=X(()=>[e.getAllCells(),t.getState().columnVisibility],n=>n.filter(r=>r.column.getIsVisible()),Y(t.options,"debugRows")),e.getVisibleCells=X(()=>[e.getLeftVisibleCells(),e.getCenterVisibleCells(),e.getRightVisibleCells()],(n,r,o)=>[...n,...r,...o],Y(t.options,"debugRows"))},createTable:e=>{const t=(n,r)=>X(()=>[r(),r().filter(o=>o.getIsVisible()).map(o=>o.id).join("_")],o=>o.filter(i=>i.getIsVisible==null?void 0:i.getIsVisible()),Y(e.options,"debugColumns"));e.getVisibleFlatColumns=t("getVisibleFlatColumns",()=>e.getAllFlatColumns()),e.getVisibleLeafColumns=t("getVisibleLeafColumns",()=>e.getAllLeafColumns()),e.getLeftVisibleLeafColumns=t("getLeftVisibleLeafColumns",()=>e.getLeftLeafColumns()),e.getRightVisibleLeafColumns=t("getRightVisibleLeafColumns",()=>e.getRightLeafColumns()),e.getCenterVisibleLeafColumns=t("getCenterVisibleLeafColumns",()=>e.getCenterLeafColumns()),e.setColumnVisibility=n=>e.options.onColumnVisibilityChange==null?void 0:e.options.onColumnVisibilityChange(n),e.resetColumnVisibility=n=>{var r;e.setColumnVisibility(n?{}:(r=e.initialState.columnVisibility)!=null?r:{})},e.toggleAllColumnsVisible=n=>{var r;n=(r=n)!=null?r:!e.getIsAllColumnsVisible(),e.setColumnVisibility(e.getAllLeafColumns().reduce((o,i)=>({...o,[i.id]:n||!(i.getCanHide!=null&&i.getCanHide())}),{}))},e.getIsAllColumnsVisible=()=>!e.getAllLeafColumns().some(n=>!(n.getIsVisible!=null&&n.getIsVisible())),e.getIsSomeColumnsVisible=()=>e.getAllLeafColumns().some(n=>n.getIsVisible==null?void 0:n.getIsVisible()),e.getToggleAllColumnsVisibilityHandler=()=>n=>{var r;e.toggleAllColumnsVisible((r=n.target)==null?void 0:r.checked)}}};function ei(e,t){return t?t==="center"?e.getCenterVisibleLeafColumns():t==="left"?e.getLeftVisibleLeafColumns():e.getRightVisibleLeafColumns():e.getVisibleLeafColumns()}const FC={createTable:e=>{e._getGlobalFacetedRowModel=e.options.getFacetedRowModel&&e.options.getFacetedRowModel(e,"__global__"),e.getGlobalFacetedRowModel=()=>e.options.manualFiltering||!e._getGlobalFacetedRowModel?e.getPreFilteredRowModel():e._getGlobalFacetedRowModel(),e._getGlobalFacetedUniqueValues=e.options.getFacetedUniqueValues&&e.options.getFacetedUniqueValues(e,"__global__"),e.getGlobalFacetedUniqueValues=()=>e._getGlobalFacetedUniqueValues?e._getGlobalFacetedUniqueValues():new Map,e._getGlobalFacetedMinMaxValues=e.options.getFacetedMinMaxValues&&e.options.getFacetedMinMaxValues(e,"__global__"),e.getGlobalFacetedMinMaxValues=()=>{if(e._getGlobalFacetedMinMaxValues)return e._getGlobalFacetedMinMaxValues()}}},AC={getInitialState:e=>({globalFilter:void 0,...e}),getDefaultOptions:e=>({onGlobalFilterChange:wt("globalFilter",e),globalFilterFn:"auto",getColumnCanGlobalFilter:t=>{var n;const r=(n=e.getCoreRowModel().flatRows[0])==null||(n=n._getAllCellsByColumnId()[t.id])==null?void 0:n.getValue();return typeof r=="string"||typeof r=="number"}}),createColumn:(e,t)=>{e.getCanGlobalFilter=()=>{var n,r,o,i;return((n=e.columnDef.enableGlobalFilter)!=null?n:!0)&&((r=t.options.enableGlobalFilter)!=null?r:!0)&&((o=t.options.enableFilters)!=null?o:!0)&&((i=t.options.getColumnCanGlobalFilter==null?void 0:t.options.getColumnCanGlobalFilter(e))!=null?i:!0)&&!!e.accessorFn}},createTable:e=>{e.getGlobalAutoFilterFn=()=>an.includesString,e.getGlobalFilterFn=()=>{var t,n;const{globalFilterFn:r}=e.options;return ba(r)?r:r==="auto"?e.getGlobalAutoFilterFn():(t=(n=e.options.filterFns)==null?void 0:n[r])!=null?t:an[r]},e.setGlobalFilter=t=>{e.options.onGlobalFilterChange==null||e.options.onGlobalFilterChange(t)},e.resetGlobalFilter=t=>{e.setGlobalFilter(t?void 0:e.initialState.globalFilter)}}},jC={getInitialState:e=>({expanded:{},...e}),getDefaultOptions:e=>({onExpandedChange:wt("expanded",e),paginateExpandedRows:!0}),createTable:e=>{let t=!1,n=!1;e._autoResetExpanded=()=>{var r,o;if(!t){e._queue(()=>{t=!0});return}if((r=(o=e.options.autoResetAll)!=null?o:e.options.autoResetExpanded)!=null?r:!e.options.manualExpanding){if(n)return;n=!0,e._queue(()=>{e.resetExpanded(),n=!1})}},e.setExpanded=r=>e.options.onExpandedChange==null?void 0:e.options.onExpandedChange(r),e.toggleAllRowsExpanded=r=>{r??!e.getIsAllRowsExpanded()?e.setExpanded(!0):e.setExpanded({})},e.resetExpanded=r=>{var o,i;e.setExpanded(r?{}:(o=(i=e.initialState)==null?void 0:i.expanded)!=null?o:{})},e.getCanSomeRowsExpand=()=>e.getPrePaginationRowModel().flatRows.some(r=>r.getCanExpand()),e.getToggleAllRowsExpandedHandler=()=>r=>{r.persist==null||r.persist(),e.toggleAllRowsExpanded()},e.getIsSomeRowsExpanded=()=>{const r=e.getState().expanded;return r===!0||Object.values(r).some(Boolean)},e.getIsAllRowsExpanded=()=>{const r=e.getState().expanded;return typeof r=="boolean"?r===!0:!(!Object.keys(r).length||e.getRowModel().flatRows.some(o=>!o.getIsExpanded()))},e.getExpandedDepth=()=>{let r=0;return(e.getState().expanded===!0?Object.keys(e.getRowModel().rowsById):Object.keys(e.getState().expanded)).forEach(i=>{const l=i.split(".");r=Math.max(r,l.length)}),r},e.getPreExpandedRowModel=()=>e.getSortedRowModel(),e.getExpandedRowModel=()=>(!e._getExpandedRowModel&&e.options.getExpandedRowModel&&(e._getExpandedRowModel=e.options.getExpandedRowModel(e)),e.options.manualExpanding||!e._getExpandedRowModel?e.getPreExpandedRowModel():e._getExpandedRowModel())},createRow:(e,t)=>{e.toggleExpanded=n=>{t.setExpanded(r=>{var o;const i=r===!0?!0:!!(r!=null&&r[e.id]);let l={};if(r===!0?Object.keys(t.getRowModel().rowsById).forEach(a=>{l[a]=!0}):l=r,n=(o=n)!=null?o:!i,!i&&n)return{...l,[e.id]:!0};if(i&&!n){const{[e.id]:a,...s}=l;return s}return r})},e.getIsExpanded=()=>{var n;const r=t.getState().expanded;return!!((n=t.options.getIsRowExpanded==null?void 0:t.options.getIsRowExpanded(e))!=null?n:r===!0||r!=null&&r[e.id])},e.getCanExpand=()=>{var n,r,o;return(n=t.options.getRowCanExpand==null?void 0:t.options.getRowCanExpand(e))!=null?n:((r=t.options.enableExpanding)!=null?r:!0)&&!!((o=e.subRows)!=null&&o.length)},e.getIsAllParentsExpanded=()=>{let n=!0,r=e;for(;n&&r.parentId;)r=t.getRow(r.parentId,!0),n=r.getIsExpanded();return n},e.getToggleExpandedHandler=()=>{const n=e.getCanExpand();return()=>{n&&e.toggleExpanded()}}}},Uu=0,Bu=10,Ts=()=>({pageIndex:Uu,pageSize:Bu}),bC={getInitialState:e=>({...e,pagination:{...Ts(),...e==null?void 0:e.pagination}}),getDefaultOptions:e=>({onPaginationChange:wt("pagination",e)}),createTable:e=>{let t=!1,n=!1;e._autoResetPageIndex=()=>{var r,o;if(!t){e._queue(()=>{t=!0});return}if((r=(o=e.options.autoResetAll)!=null?o:e.options.autoResetPageIndex)!=null?r:!e.options.manualPagination){if(n)return;n=!0,e._queue(()=>{e.resetPageIndex(),n=!1})}},e.setPagination=r=>{const o=i=>bn(r,i);return e.options.onPaginationChange==null?void 0:e.options.onPaginationChange(o)},e.resetPagination=r=>{var o;e.setPagination(r?Ts():(o=e.initialState.pagination)!=null?o:Ts())},e.setPageIndex=r=>{e.setPagination(o=>{let i=bn(r,o.pageIndex);const l=typeof e.options.pageCount>"u"||e.options.pageCount===-1?Number.MAX_SAFE_INTEGER:e.options.pageCount-1;return i=Math.max(0,Math.min(i,l)),{...o,pageIndex:i}})},e.resetPageIndex=r=>{var o,i;e.setPageIndex(r?Uu:(o=(i=e.initialState)==null||(i=i.pagination)==null?void 0:i.pageIndex)!=null?o:Uu)},e.resetPageSize=r=>{var o,i;e.setPageSize(r?Bu:(o=(i=e.initialState)==null||(i=i.pagination)==null?void 0:i.pageSize)!=null?o:Bu)},e.setPageSize=r=>{e.setPagination(o=>{const i=Math.max(1,bn(r,o.pageSize)),l=o.pageSize*o.pageIndex,a=Math.floor(l/i);return{...o,pageIndex:a,pageSize:i}})},e.setPageCount=r=>e.setPagination(o=>{var i;let l=bn(r,(i=e.options.pageCount)!=null?i:-1);return typeof l=="number"&&(l=Math.max(-1,l)),{...o,pageCount:l}}),e.getPageOptions=X(()=>[e.getPageCount()],r=>{let o=[];return r&&r>0&&(o=[...new Array(r)].fill(null).map((i,l)=>l)),o},Y(e.options,"debugTable")),e.getCanPreviousPage=()=>e.getState().pagination.pageIndex>0,e.getCanNextPage=()=>{const{pageIndex:r}=e.getState().pagination,o=e.getPageCount();return o===-1?!0:o===0?!1:re.setPageIndex(r=>r-1),e.nextPage=()=>e.setPageIndex(r=>r+1),e.firstPage=()=>e.setPageIndex(0),e.lastPage=()=>e.setPageIndex(e.getPageCount()-1),e.getPrePaginationRowModel=()=>e.getExpandedRowModel(),e.getPaginationRowModel=()=>(!e._getPaginationRowModel&&e.options.getPaginationRowModel&&(e._getPaginationRowModel=e.options.getPaginationRowModel(e)),e.options.manualPagination||!e._getPaginationRowModel?e.getPrePaginationRowModel():e._getPaginationRowModel()),e.getPageCount=()=>{var r;return(r=e.options.pageCount)!=null?r:Math.ceil(e.getRowCount()/e.getState().pagination.pageSize)},e.getRowCount=()=>{var r;return(r=e.options.rowCount)!=null?r:e.getPrePaginationRowModel().rows.length}}},Ls=()=>({top:[],bottom:[]}),zC={getInitialState:e=>({rowPinning:Ls(),...e}),getDefaultOptions:e=>({onRowPinningChange:wt("rowPinning",e)}),createRow:(e,t)=>{e.pin=(n,r,o)=>{const i=r?e.getLeafRows().map(s=>{let{id:u}=s;return u}):[],l=o?e.getParentRows().map(s=>{let{id:u}=s;return u}):[],a=new Set([...l,e.id,...i]);t.setRowPinning(s=>{var u,c;if(n==="bottom"){var d,f;return{top:((d=s==null?void 0:s.top)!=null?d:[]).filter(m=>!(a!=null&&a.has(m))),bottom:[...((f=s==null?void 0:s.bottom)!=null?f:[]).filter(m=>!(a!=null&&a.has(m))),...Array.from(a)]}}if(n==="top"){var p,y;return{top:[...((p=s==null?void 0:s.top)!=null?p:[]).filter(m=>!(a!=null&&a.has(m))),...Array.from(a)],bottom:((y=s==null?void 0:s.bottom)!=null?y:[]).filter(m=>!(a!=null&&a.has(m)))}}return{top:((u=s==null?void 0:s.top)!=null?u:[]).filter(m=>!(a!=null&&a.has(m))),bottom:((c=s==null?void 0:s.bottom)!=null?c:[]).filter(m=>!(a!=null&&a.has(m)))}})},e.getCanPin=()=>{var n;const{enableRowPinning:r,enablePinning:o}=t.options;return typeof r=="function"?r(e):(n=r??o)!=null?n:!0},e.getIsPinned=()=>{const n=[e.id],{top:r,bottom:o}=t.getState().rowPinning,i=n.some(a=>r==null?void 0:r.includes(a)),l=n.some(a=>o==null?void 0:o.includes(a));return i?"top":l?"bottom":!1},e.getPinnedIndex=()=>{var n,r;const o=e.getIsPinned();if(!o)return-1;const i=(n=o==="top"?t.getTopRows():t.getBottomRows())==null?void 0:n.map(l=>{let{id:a}=l;return a});return(r=i==null?void 0:i.indexOf(e.id))!=null?r:-1}},createTable:e=>{e.setRowPinning=t=>e.options.onRowPinningChange==null?void 0:e.options.onRowPinningChange(t),e.resetRowPinning=t=>{var n,r;return e.setRowPinning(t?Ls():(n=(r=e.initialState)==null?void 0:r.rowPinning)!=null?n:Ls())},e.getIsSomeRowsPinned=t=>{var n;const r=e.getState().rowPinning;if(!t){var o,i;return!!((o=r.top)!=null&&o.length||(i=r.bottom)!=null&&i.length)}return!!((n=r[t])!=null&&n.length)},e._getPinnedRows=(t,n,r)=>{var o;return((o=e.options.keepPinnedRows)==null||o?(n??[]).map(l=>{const a=e.getRow(l,!0);return a.getIsAllParentsExpanded()?a:null}):(n??[]).map(l=>t.find(a=>a.id===l))).filter(Boolean).map(l=>({...l,position:r}))},e.getTopRows=X(()=>[e.getRowModel().rows,e.getState().rowPinning.top],(t,n)=>e._getPinnedRows(t,n,"top"),Y(e.options,"debugRows")),e.getBottomRows=X(()=>[e.getRowModel().rows,e.getState().rowPinning.bottom],(t,n)=>e._getPinnedRows(t,n,"bottom"),Y(e.options,"debugRows")),e.getCenterRows=X(()=>[e.getRowModel().rows,e.getState().rowPinning.top,e.getState().rowPinning.bottom],(t,n,r)=>{const o=new Set([...n??[],...r??[]]);return t.filter(i=>!o.has(i.id))},Y(e.options,"debugRows"))}},$C={getInitialState:e=>({rowSelection:{},...e}),getDefaultOptions:e=>({onRowSelectionChange:wt("rowSelection",e),enableRowSelection:!0,enableMultiRowSelection:!0,enableSubRowSelection:!0}),createTable:e=>{e.setRowSelection=t=>e.options.onRowSelectionChange==null?void 0:e.options.onRowSelectionChange(t),e.resetRowSelection=t=>{var n;return e.setRowSelection(t?{}:(n=e.initialState.rowSelection)!=null?n:{})},e.toggleAllRowsSelected=t=>{e.setRowSelection(n=>{t=typeof t<"u"?t:!e.getIsAllRowsSelected();const r={...n},o=e.getPreGroupedRowModel().flatRows;return t?o.forEach(i=>{i.getCanSelect()&&(r[i.id]=!0)}):o.forEach(i=>{delete r[i.id]}),r})},e.toggleAllPageRowsSelected=t=>e.setRowSelection(n=>{const r=typeof t<"u"?t:!e.getIsAllPageRowsSelected(),o={...n};return e.getRowModel().rows.forEach(i=>{Hu(o,i.id,r,!0,e)}),o}),e.getPreSelectedRowModel=()=>e.getCoreRowModel(),e.getSelectedRowModel=X(()=>[e.getState().rowSelection,e.getCoreRowModel()],(t,n)=>Object.keys(t).length?Os(e,n):{rows:[],flatRows:[],rowsById:{}},Y(e.options,"debugTable")),e.getFilteredSelectedRowModel=X(()=>[e.getState().rowSelection,e.getFilteredRowModel()],(t,n)=>Object.keys(t).length?Os(e,n):{rows:[],flatRows:[],rowsById:{}},Y(e.options,"debugTable")),e.getGroupedSelectedRowModel=X(()=>[e.getState().rowSelection,e.getSortedRowModel()],(t,n)=>Object.keys(t).length?Os(e,n):{rows:[],flatRows:[],rowsById:{}},Y(e.options,"debugTable")),e.getIsAllRowsSelected=()=>{const t=e.getFilteredRowModel().flatRows,{rowSelection:n}=e.getState();let r=!!(t.length&&Object.keys(n).length);return r&&t.some(o=>o.getCanSelect()&&!n[o.id])&&(r=!1),r},e.getIsAllPageRowsSelected=()=>{const t=e.getPaginationRowModel().flatRows.filter(o=>o.getCanSelect()),{rowSelection:n}=e.getState();let r=!!t.length;return r&&t.some(o=>!n[o.id])&&(r=!1),r},e.getIsSomeRowsSelected=()=>{var t;const n=Object.keys((t=e.getState().rowSelection)!=null?t:{}).length;return n>0&&n{const t=e.getPaginationRowModel().flatRows;return e.getIsAllPageRowsSelected()?!1:t.filter(n=>n.getCanSelect()).some(n=>n.getIsSelected()||n.getIsSomeSelected())},e.getToggleAllRowsSelectedHandler=()=>t=>{e.toggleAllRowsSelected(t.target.checked)},e.getToggleAllPageRowsSelectedHandler=()=>t=>{e.toggleAllPageRowsSelected(t.target.checked)}},createRow:(e,t)=>{e.toggleSelected=(n,r)=>{const o=e.getIsSelected();t.setRowSelection(i=>{var l;if(n=typeof n<"u"?n:!o,e.getCanSelect()&&o===n)return i;const a={...i};return Hu(a,e.id,n,(l=r==null?void 0:r.selectChildren)!=null?l:!0,t),a})},e.getIsSelected=()=>{const{rowSelection:n}=t.getState();return od(e,n)},e.getIsSomeSelected=()=>{const{rowSelection:n}=t.getState();return Gu(e,n)==="some"},e.getIsAllSubRowsSelected=()=>{const{rowSelection:n}=t.getState();return Gu(e,n)==="all"},e.getCanSelect=()=>{var n;return typeof t.options.enableRowSelection=="function"?t.options.enableRowSelection(e):(n=t.options.enableRowSelection)!=null?n:!0},e.getCanSelectSubRows=()=>{var n;return typeof t.options.enableSubRowSelection=="function"?t.options.enableSubRowSelection(e):(n=t.options.enableSubRowSelection)!=null?n:!0},e.getCanMultiSelect=()=>{var n;return typeof t.options.enableMultiRowSelection=="function"?t.options.enableMultiRowSelection(e):(n=t.options.enableMultiRowSelection)!=null?n:!0},e.getToggleSelectedHandler=()=>{const n=e.getCanSelect();return r=>{var o;n&&e.toggleSelected((o=r.target)==null?void 0:o.checked)}}}},Hu=(e,t,n,r,o)=>{var i;const l=o.getRow(t,!0);n?(l.getCanMultiSelect()||Object.keys(e).forEach(a=>delete e[a]),l.getCanSelect()&&(e[t]=!0)):delete e[t],r&&(i=l.subRows)!=null&&i.length&&l.getCanSelectSubRows()&&l.subRows.forEach(a=>Hu(e,a.id,n,r,o))};function Os(e,t){const n=e.getState().rowSelection,r=[],o={},i=function(l,a){return l.map(s=>{var u;const c=od(s,n);if(c&&(r.push(s),o[s.id]=s),(u=s.subRows)!=null&&u.length&&(s={...s,subRows:i(s.subRows)}),c)return s}).filter(Boolean)};return{rows:i(t.rows),flatRows:r,rowsById:o}}function od(e,t){var n;return(n=t[e.id])!=null?n:!1}function Gu(e,t,n){var r;if(!((r=e.subRows)!=null&&r.length))return!1;let o=!0,i=!1;return e.subRows.forEach(l=>{if(!(i&&!o)&&(l.getCanSelect()&&(od(l,t)?i=!0:o=!1),l.subRows&&l.subRows.length)){const a=Gu(l,t);a==="all"?i=!0:(a==="some"&&(i=!0),o=!1)}}),o?"all":i?"some":!1}const Wu=/([0-9]+)/gm,VC=(e,t,n)=>$m(Xn(e.getValue(n)).toLowerCase(),Xn(t.getValue(n)).toLowerCase()),UC=(e,t,n)=>$m(Xn(e.getValue(n)),Xn(t.getValue(n))),BC=(e,t,n)=>ld(Xn(e.getValue(n)).toLowerCase(),Xn(t.getValue(n)).toLowerCase()),HC=(e,t,n)=>ld(Xn(e.getValue(n)),Xn(t.getValue(n))),GC=(e,t,n)=>{const r=e.getValue(n),o=t.getValue(n);return r>o?1:rld(e.getValue(n),t.getValue(n));function ld(e,t){return e===t?0:e>t?1:-1}function Xn(e){return typeof e=="number"?isNaN(e)||e===1/0||e===-1/0?"":String(e):typeof e=="string"?e:""}function $m(e,t){const n=e.split(Wu).filter(Boolean),r=t.split(Wu).filter(Boolean);for(;n.length&&r.length;){const o=n.shift(),i=r.shift(),l=parseInt(o,10),a=parseInt(i,10),s=[l,a].sort();if(isNaN(s[0])){if(o>i)return 1;if(i>o)return-1;continue}if(isNaN(s[1]))return isNaN(l)?-1:1;if(l>a)return 1;if(a>l)return-1}return n.length-r.length}const Ao={alphanumeric:VC,alphanumericCaseSensitive:UC,text:BC,textCaseSensitive:HC,datetime:GC,basic:WC},KC={getInitialState:e=>({sorting:[],...e}),getDefaultColumnDef:()=>({sortingFn:"auto",sortUndefined:1}),getDefaultOptions:e=>({onSortingChange:wt("sorting",e),isMultiSortEvent:t=>t.shiftKey}),createColumn:(e,t)=>{e.getAutoSortingFn=()=>{const n=t.getFilteredRowModel().flatRows.slice(10);let r=!1;for(const o of n){const i=o==null?void 0:o.getValue(e.id);if(Object.prototype.toString.call(i)==="[object Date]")return Ao.datetime;if(typeof i=="string"&&(r=!0,i.split(Wu).length>1))return Ao.alphanumeric}return r?Ao.text:Ao.basic},e.getAutoSortDir=()=>{const n=t.getFilteredRowModel().flatRows[0];return typeof(n==null?void 0:n.getValue(e.id))=="string"?"asc":"desc"},e.getSortingFn=()=>{var n,r;if(!e)throw new Error;return ba(e.columnDef.sortingFn)?e.columnDef.sortingFn:e.columnDef.sortingFn==="auto"?e.getAutoSortingFn():(n=(r=t.options.sortingFns)==null?void 0:r[e.columnDef.sortingFn])!=null?n:Ao[e.columnDef.sortingFn]},e.toggleSorting=(n,r)=>{const o=e.getNextSortingOrder(),i=typeof n<"u"&&n!==null;t.setSorting(l=>{const a=l==null?void 0:l.find(p=>p.id===e.id),s=l==null?void 0:l.findIndex(p=>p.id===e.id);let u=[],c,d=i?n:o==="desc";if(l!=null&&l.length&&e.getCanMultiSort()&&r?a?c="toggle":c="add":l!=null&&l.length&&s!==l.length-1?c="replace":a?c="toggle":c="replace",c==="toggle"&&(i||o||(c="remove")),c==="add"){var f;u=[...l,{id:e.id,desc:d}],u.splice(0,u.length-((f=t.options.maxMultiSortColCount)!=null?f:Number.MAX_SAFE_INTEGER))}else c==="toggle"?u=l.map(p=>p.id===e.id?{...p,desc:d}:p):c==="remove"?u=l.filter(p=>p.id!==e.id):u=[{id:e.id,desc:d}];return u})},e.getFirstSortDir=()=>{var n,r;return((n=(r=e.columnDef.sortDescFirst)!=null?r:t.options.sortDescFirst)!=null?n:e.getAutoSortDir()==="desc")?"desc":"asc"},e.getNextSortingOrder=n=>{var r,o;const i=e.getFirstSortDir(),l=e.getIsSorted();return l?l!==i&&((r=t.options.enableSortingRemoval)==null||r)&&(!(n&&(o=t.options.enableMultiRemove)!=null)||o)?!1:l==="desc"?"asc":"desc":i},e.getCanSort=()=>{var n,r;return((n=e.columnDef.enableSorting)!=null?n:!0)&&((r=t.options.enableSorting)!=null?r:!0)&&!!e.accessorFn},e.getCanMultiSort=()=>{var n,r;return(n=(r=e.columnDef.enableMultiSort)!=null?r:t.options.enableMultiSort)!=null?n:!!e.accessorFn},e.getIsSorted=()=>{var n;const r=(n=t.getState().sorting)==null?void 0:n.find(o=>o.id===e.id);return r?r.desc?"desc":"asc":!1},e.getSortIndex=()=>{var n,r;return(n=(r=t.getState().sorting)==null?void 0:r.findIndex(o=>o.id===e.id))!=null?n:-1},e.clearSorting=()=>{t.setSorting(n=>n!=null&&n.length?n.filter(r=>r.id!==e.id):[])},e.getToggleSortingHandler=()=>{const n=e.getCanSort();return r=>{n&&(r.persist==null||r.persist(),e.toggleSorting==null||e.toggleSorting(void 0,e.getCanMultiSort()?t.options.isMultiSortEvent==null?void 0:t.options.isMultiSortEvent(r):!1))}}},createTable:e=>{e.setSorting=t=>e.options.onSortingChange==null?void 0:e.options.onSortingChange(t),e.resetSorting=t=>{var n,r;e.setSorting(t?[]:(n=(r=e.initialState)==null?void 0:r.sorting)!=null?n:[])},e.getPreSortedRowModel=()=>e.getGroupedRowModel(),e.getSortedRowModel=()=>(!e._getSortedRowModel&&e.options.getSortedRowModel&&(e._getSortedRowModel=e.options.getSortedRowModel(e)),e.options.manualSorting||!e._getSortedRowModel?e.getPreSortedRowModel():e._getSortedRowModel())}},QC=[gC,OC,DC,NC,mC,vC,FC,AC,KC,MC,jC,bC,zC,$C,TC];function XC(e){var t,n;const r=[...QC,...(t=e._features)!=null?t:[]];let o={_features:r};const i=o._features.reduce((f,p)=>Object.assign(f,p.getDefaultOptions==null?void 0:p.getDefaultOptions(o)),{}),l=f=>o.options.mergeOptions?o.options.mergeOptions(i,f):{...i,...f};let s={...{},...(n=e.initialState)!=null?n:{}};o._features.forEach(f=>{var p;s=(p=f.getInitialState==null?void 0:f.getInitialState(s))!=null?p:s});const u=[];let c=!1;const d={_features:r,options:{...i,...e},initialState:s,_queue:f=>{u.push(f),c||(c=!0,Promise.resolve().then(()=>{for(;u.length;)u.shift()();c=!1}).catch(p=>setTimeout(()=>{throw p})))},reset:()=>{o.setState(o.initialState)},setOptions:f=>{const p=bn(f,o.options);o.options=l(p)},getState:()=>o.options.state,setState:f=>{o.options.onStateChange==null||o.options.onStateChange(f)},_getRowId:(f,p,y)=>{var m;return(m=o.options.getRowId==null?void 0:o.options.getRowId(f,p,y))!=null?m:`${y?[y.id,p].join("."):p}`},getCoreRowModel:()=>(o._getCoreRowModel||(o._getCoreRowModel=o.options.getCoreRowModel(o)),o._getCoreRowModel()),getRowModel:()=>o.getPaginationRowModel(),getRow:(f,p)=>{let y=(p?o.getPrePaginationRowModel():o.getRowModel()).rowsById[f];if(!y&&(y=o.getCoreRowModel().rowsById[f],!y))throw new Error;return y},_getDefaultColumnDef:X(()=>[o.options.defaultColumn],f=>{var p;return f=(p=f)!=null?p:{},{header:y=>{const m=y.header.column.columnDef;return m.accessorKey?m.accessorKey:m.accessorFn?m.id:null},cell:y=>{var m,S;return(m=(S=y.renderValue())==null||S.toString==null?void 0:S.toString())!=null?m:null},...o._features.reduce((y,m)=>Object.assign(y,m.getDefaultColumnDef==null?void 0:m.getDefaultColumnDef()),{}),...f}},Y(e,"debugColumns")),_getColumnDefs:()=>o.options.columns,getAllColumns:X(()=>[o._getColumnDefs()],f=>{const p=function(y,m,S){return S===void 0&&(S=0),y.map(g=>{const h=pC(o,g,S,m),w=g;return h.columns=w.columns?p(w.columns,h,S+1):[],h})};return p(f)},Y(e,"debugColumns")),getAllFlatColumns:X(()=>[o.getAllColumns()],f=>f.flatMap(p=>p.getFlatColumns()),Y(e,"debugColumns")),_getAllFlatColumnsById:X(()=>[o.getAllFlatColumns()],f=>f.reduce((p,y)=>(p[y.id]=y,p),{}),Y(e,"debugColumns")),getAllLeafColumns:X(()=>[o.getAllColumns(),o._getOrderColumnsFn()],(f,p)=>{let y=f.flatMap(m=>m.getLeafColumns());return p(y)},Y(e,"debugColumns")),getColumn:f=>o._getAllFlatColumnsById()[f]};Object.assign(o,d);for(let f=0;fX(()=>[e.options.data],t=>{const n={rows:[],flatRows:[],rowsById:{}},r=function(o,i,l){i===void 0&&(i=0);const a=[];for(let u=0;ue._autoResetPageIndex()))}function ZC(e){const t=[],n=r=>{var o;t.push(r),(o=r.subRows)!=null&&o.length&&r.getIsExpanded()&&r.subRows.forEach(n)};return e.rows.forEach(n),{rows:t,flatRows:e.flatRows,rowsById:e.rowsById}}function JC(e){return t=>X(()=>[t.getState().pagination,t.getPrePaginationRowModel(),t.options.paginateExpandedRows?void 0:t.getState().expanded],(n,r)=>{if(!r.rows.length)return r;const{pageSize:o,pageIndex:i}=n;let{rows:l,flatRows:a,rowsById:s}=r;const u=o*i,c=u+o;l=l.slice(u,c);let d;t.options.paginateExpandedRows?d={rows:l,flatRows:a,rowsById:s}:d=ZC({rows:l,flatRows:a,rowsById:s}),d.flatRows=[];const f=p=>{d.flatRows.push(p),p.subRows.length&&p.subRows.forEach(f)};return d.rows.forEach(f),d},Y(t.options,"debugTable"))}/** + * react-table + * + * Copyright (c) TanStack + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function xp(e,t){return e?qC(e)?v.createElement(e,t):e:null}function qC(e){return eR(e)||typeof e=="function"||tR(e)}function eR(e){return typeof e=="function"&&(()=>{const t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function tR(e){return typeof e=="object"&&typeof e.$$typeof=="symbol"&&["react.memo","react.forward_ref"].includes(e.$$typeof.description)}function nR(e){const t={state:{},onStateChange:()=>{},renderFallbackValue:null,...e},[n]=v.useState(()=>({current:XC(t)})),[r,o]=v.useState(()=>n.current.initialState);return n.current.setOptions(i=>({...i,...e,state:{...r,...e.state},onStateChange:l=>{o(l),e.onStateChange==null||e.onStateChange(l)}})),n.current}function Vm(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t{const t=lR(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:l=>{const a=l.split(ad);return a[0]===""&&a.length!==1&&a.shift(),Um(a,t)||iR(l)},getConflictingClassGroupIds:(l,a)=>{const s=n[l]||[];return a&&r[l]?[...s,...r[l]]:s}}},Um=(e,t)=>{var l;if(e.length===0)return t.classGroupId;const n=e[0],r=t.nextPart.get(n),o=r?Um(e.slice(1),r):void 0;if(o)return o;if(t.validators.length===0)return;const i=e.join(ad);return(l=t.validators.find(({validator:a})=>a(i)))==null?void 0:l.classGroupId},Cp=/^\[(.+)\]$/,iR=e=>{if(Cp.test(e)){const t=Cp.exec(e)[1],n=t==null?void 0:t.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}},lR=e=>{const{theme:t,prefix:n}=e,r={nextPart:new Map,validators:[]};return sR(Object.entries(e.classGroups),n).forEach(([i,l])=>{Ku(l,r,i,t)}),r},Ku=(e,t,n,r)=>{e.forEach(o=>{if(typeof o=="string"){const i=o===""?t:Rp(t,o);i.classGroupId=n;return}if(typeof o=="function"){if(aR(o)){Ku(o(r),t,n,r);return}t.validators.push({validator:o,classGroupId:n});return}Object.entries(o).forEach(([i,l])=>{Ku(l,Rp(t,i),n,r)})})},Rp=(e,t)=>{let n=e;return t.split(ad).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},aR=e=>e.isThemeGetter,sR=(e,t)=>t?e.map(([n,r])=>{const o=r.map(i=>typeof i=="string"?t+i:typeof i=="object"?Object.fromEntries(Object.entries(i).map(([l,a])=>[t+l,a])):i);return[n,o]}):e,uR=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=new Map,r=new Map;const o=(i,l)=>{n.set(i,l),t++,t>e&&(t=0,r=n,n=new Map)};return{get(i){let l=n.get(i);if(l!==void 0)return l;if((l=r.get(i))!==void 0)return o(i,l),l},set(i,l){n.has(i)?n.set(i,l):o(i,l)}}},Bm="!",cR=e=>{const{separator:t,experimentalParseClassName:n}=e,r=t.length===1,o=t[0],i=t.length,l=a=>{const s=[];let u=0,c=0,d;for(let S=0;Sc?d-c:void 0;return{modifiers:s,hasImportantModifier:p,baseClassName:y,maybePostfixModifierPosition:m}};return n?a=>n({className:a,parseClassName:l}):l},dR=e=>{if(e.length<=1)return e;const t=[];let n=[];return e.forEach(r=>{r[0]==="["?(t.push(...n.sort(),r),n=[]):n.push(r)}),t.push(...n.sort()),t},fR=e=>({cache:uR(e.cacheSize),parseClassName:cR(e),...oR(e)}),pR=/\s+/,gR=(e,t)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:o}=t,i=[],l=e.trim().split(pR);let a="";for(let s=l.length-1;s>=0;s-=1){const u=l[s],{modifiers:c,hasImportantModifier:d,baseClassName:f,maybePostfixModifierPosition:p}=n(u);let y=!!p,m=r(y?f.substring(0,p):f);if(!m){if(!y){a=u+(a.length>0?" "+a:a);continue}if(m=r(f),!m){a=u+(a.length>0?" "+a:a);continue}y=!1}const S=dR(c).join(":"),g=d?S+Bm:S,h=g+m;if(i.includes(h))continue;i.push(h);const w=o(m,y);for(let x=0;x0?" "+a:a)}return a};function hR(){let e=0,t,n,r="";for(;e{if(typeof e=="string")return e;let t,n="";for(let r=0;rd(c),e());return n=fR(u),r=n.cache.get,o=n.cache.set,i=a,a(s)}function a(s){const u=r(s);if(u)return u;const c=gR(s,n);return o(s,c),c}return function(){return i(hR.apply(null,arguments))}}const me=e=>{const t=n=>n[e]||[];return t.isThemeGetter=!0,t},Gm=/^\[(?:([a-z-]+):)?(.+)\]$/i,vR=/^\d+\/\d+$/,yR=new Set(["px","full","screen"]),wR=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,SR=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,xR=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,CR=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,RR=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,rn=e=>to(e)||yR.has(e)||vR.test(e),Mn=e=>wo(e,"length",IR),to=e=>!!e&&!Number.isNaN(Number(e)),Fs=e=>wo(e,"number",to),jo=e=>!!e&&Number.isInteger(Number(e)),ER=e=>e.endsWith("%")&&to(e.slice(0,-1)),q=e=>Gm.test(e),kn=e=>wR.test(e),_R=new Set(["length","size","percentage"]),PR=e=>wo(e,_R,Wm),MR=e=>wo(e,"position",Wm),kR=new Set(["image","url"]),DR=e=>wo(e,kR,LR),NR=e=>wo(e,"",TR),bo=()=>!0,wo=(e,t,n)=>{const r=Gm.exec(e);return r?r[1]?typeof t=="string"?r[1]===t:t.has(r[1]):n(r[2]):!1},IR=e=>SR.test(e)&&!xR.test(e),Wm=()=>!1,TR=e=>CR.test(e),LR=e=>RR.test(e),OR=()=>{const e=me("colors"),t=me("spacing"),n=me("blur"),r=me("brightness"),o=me("borderColor"),i=me("borderRadius"),l=me("borderSpacing"),a=me("borderWidth"),s=me("contrast"),u=me("grayscale"),c=me("hueRotate"),d=me("invert"),f=me("gap"),p=me("gradientColorStops"),y=me("gradientColorStopPositions"),m=me("inset"),S=me("margin"),g=me("opacity"),h=me("padding"),w=me("saturate"),x=me("scale"),P=me("sepia"),D=me("skew"),k=me("space"),C=me("translate"),F=()=>["auto","contain","none"],T=()=>["auto","hidden","clip","visible","scroll"],b=()=>["auto",q,t],j=()=>[q,t],Q=()=>["",rn,Mn],G=()=>["auto",to,q],se=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],Z=()=>["solid","dashed","dotted","double","none"],ie=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],I=()=>["start","end","center","between","around","evenly","stretch"],N=()=>["","0",q],z=()=>["auto","avoid","all","avoid-page","page","left","right","column"],W=()=>[to,q];return{cacheSize:500,separator:":",theme:{colors:[bo],spacing:[rn,Mn],blur:["none","",kn,q],brightness:W(),borderColor:[e],borderRadius:["none","","full",kn,q],borderSpacing:j(),borderWidth:Q(),contrast:W(),grayscale:N(),hueRotate:W(),invert:N(),gap:j(),gradientColorStops:[e],gradientColorStopPositions:[ER,Mn],inset:b(),margin:b(),opacity:W(),padding:j(),saturate:W(),scale:W(),sepia:N(),skew:W(),space:j(),translate:j()},classGroups:{aspect:[{aspect:["auto","square","video",q]}],container:["container"],columns:[{columns:[kn]}],"break-after":[{"break-after":z()}],"break-before":[{"break-before":z()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...se(),q]}],overflow:[{overflow:T()}],"overflow-x":[{"overflow-x":T()}],"overflow-y":[{"overflow-y":T()}],overscroll:[{overscroll:F()}],"overscroll-x":[{"overscroll-x":F()}],"overscroll-y":[{"overscroll-y":F()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[m]}],"inset-x":[{"inset-x":[m]}],"inset-y":[{"inset-y":[m]}],start:[{start:[m]}],end:[{end:[m]}],top:[{top:[m]}],right:[{right:[m]}],bottom:[{bottom:[m]}],left:[{left:[m]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",jo,q]}],basis:[{basis:b()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",q]}],grow:[{grow:N()}],shrink:[{shrink:N()}],order:[{order:["first","last","none",jo,q]}],"grid-cols":[{"grid-cols":[bo]}],"col-start-end":[{col:["auto",{span:["full",jo,q]},q]}],"col-start":[{"col-start":G()}],"col-end":[{"col-end":G()}],"grid-rows":[{"grid-rows":[bo]}],"row-start-end":[{row:["auto",{span:[jo,q]},q]}],"row-start":[{"row-start":G()}],"row-end":[{"row-end":G()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",q]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",q]}],gap:[{gap:[f]}],"gap-x":[{"gap-x":[f]}],"gap-y":[{"gap-y":[f]}],"justify-content":[{justify:["normal",...I()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...I(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...I(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[h]}],px:[{px:[h]}],py:[{py:[h]}],ps:[{ps:[h]}],pe:[{pe:[h]}],pt:[{pt:[h]}],pr:[{pr:[h]}],pb:[{pb:[h]}],pl:[{pl:[h]}],m:[{m:[S]}],mx:[{mx:[S]}],my:[{my:[S]}],ms:[{ms:[S]}],me:[{me:[S]}],mt:[{mt:[S]}],mr:[{mr:[S]}],mb:[{mb:[S]}],ml:[{ml:[S]}],"space-x":[{"space-x":[k]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[k]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",q,t]}],"min-w":[{"min-w":[q,t,"min","max","fit"]}],"max-w":[{"max-w":[q,t,"none","full","min","max","fit","prose",{screen:[kn]},kn]}],h:[{h:[q,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[q,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[q,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[q,t,"auto","min","max","fit"]}],"font-size":[{text:["base",kn,Mn]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Fs]}],"font-family":[{font:[bo]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractons"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",q]}],"line-clamp":[{"line-clamp":["none",to,Fs]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",rn,q]}],"list-image":[{"list-image":["none",q]}],"list-style-type":[{list:["none","disc","decimal",q]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[g]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[g]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...Z(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",rn,Mn]}],"underline-offset":[{"underline-offset":["auto",rn,q]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:j()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",q]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",q]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[g]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...se(),MR]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",PR]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},DR]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[y]}],"gradient-via-pos":[{via:[y]}],"gradient-to-pos":[{to:[y]}],"gradient-from":[{from:[p]}],"gradient-via":[{via:[p]}],"gradient-to":[{to:[p]}],rounded:[{rounded:[i]}],"rounded-s":[{"rounded-s":[i]}],"rounded-e":[{"rounded-e":[i]}],"rounded-t":[{"rounded-t":[i]}],"rounded-r":[{"rounded-r":[i]}],"rounded-b":[{"rounded-b":[i]}],"rounded-l":[{"rounded-l":[i]}],"rounded-ss":[{"rounded-ss":[i]}],"rounded-se":[{"rounded-se":[i]}],"rounded-ee":[{"rounded-ee":[i]}],"rounded-es":[{"rounded-es":[i]}],"rounded-tl":[{"rounded-tl":[i]}],"rounded-tr":[{"rounded-tr":[i]}],"rounded-br":[{"rounded-br":[i]}],"rounded-bl":[{"rounded-bl":[i]}],"border-w":[{border:[a]}],"border-w-x":[{"border-x":[a]}],"border-w-y":[{"border-y":[a]}],"border-w-s":[{"border-s":[a]}],"border-w-e":[{"border-e":[a]}],"border-w-t":[{"border-t":[a]}],"border-w-r":[{"border-r":[a]}],"border-w-b":[{"border-b":[a]}],"border-w-l":[{"border-l":[a]}],"border-opacity":[{"border-opacity":[g]}],"border-style":[{border:[...Z(),"hidden"]}],"divide-x":[{"divide-x":[a]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[a]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[g]}],"divide-style":[{divide:Z()}],"border-color":[{border:[o]}],"border-color-x":[{"border-x":[o]}],"border-color-y":[{"border-y":[o]}],"border-color-t":[{"border-t":[o]}],"border-color-r":[{"border-r":[o]}],"border-color-b":[{"border-b":[o]}],"border-color-l":[{"border-l":[o]}],"divide-color":[{divide:[o]}],"outline-style":[{outline:["",...Z()]}],"outline-offset":[{"outline-offset":[rn,q]}],"outline-w":[{outline:[rn,Mn]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:Q()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[g]}],"ring-offset-w":[{"ring-offset":[rn,Mn]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",kn,NR]}],"shadow-color":[{shadow:[bo]}],opacity:[{opacity:[g]}],"mix-blend":[{"mix-blend":[...ie(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":ie()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[r]}],contrast:[{contrast:[s]}],"drop-shadow":[{"drop-shadow":["","none",kn,q]}],grayscale:[{grayscale:[u]}],"hue-rotate":[{"hue-rotate":[c]}],invert:[{invert:[d]}],saturate:[{saturate:[w]}],sepia:[{sepia:[P]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[s]}],"backdrop-grayscale":[{"backdrop-grayscale":[u]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[c]}],"backdrop-invert":[{"backdrop-invert":[d]}],"backdrop-opacity":[{"backdrop-opacity":[g]}],"backdrop-saturate":[{"backdrop-saturate":[w]}],"backdrop-sepia":[{"backdrop-sepia":[P]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[l]}],"border-spacing-x":[{"border-spacing-x":[l]}],"border-spacing-y":[{"border-spacing-y":[l]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",q]}],duration:[{duration:W()}],ease:[{ease:["linear","in","out","in-out",q]}],delay:[{delay:W()}],animate:[{animate:["none","spin","ping","pulse","bounce",q]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[x]}],"scale-x":[{"scale-x":[x]}],"scale-y":[{"scale-y":[x]}],rotate:[{rotate:[jo,q]}],"translate-x":[{"translate-x":[C]}],"translate-y":[{"translate-y":[C]}],"skew-x":[{"skew-x":[D]}],"skew-y":[{"skew-y":[D]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",q]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",q]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":j()}],"scroll-mx":[{"scroll-mx":j()}],"scroll-my":[{"scroll-my":j()}],"scroll-ms":[{"scroll-ms":j()}],"scroll-me":[{"scroll-me":j()}],"scroll-mt":[{"scroll-mt":j()}],"scroll-mr":[{"scroll-mr":j()}],"scroll-mb":[{"scroll-mb":j()}],"scroll-ml":[{"scroll-ml":j()}],"scroll-p":[{"scroll-p":j()}],"scroll-px":[{"scroll-px":j()}],"scroll-py":[{"scroll-py":j()}],"scroll-ps":[{"scroll-ps":j()}],"scroll-pe":[{"scroll-pe":j()}],"scroll-pt":[{"scroll-pt":j()}],"scroll-pr":[{"scroll-pr":j()}],"scroll-pb":[{"scroll-pb":j()}],"scroll-pl":[{"scroll-pl":j()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",q]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[rn,Mn,Fs]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},FR=mR(OR);function Ve(...e){return FR(rR(e))}function AR(e){return R.jsx("table",{className:Ve("w-full caption-bottom text-sm",e.className),...e})}function jR(e){return R.jsx("thead",{...e})}function bR(e){return R.jsx("tbody",{...e})}function As(e){return R.jsx("tr",{...e})}function zR({className:e,...t}){return R.jsx("th",{className:Ve("h-9 px-3 text-left align-middle font-medium text-zinc-600",e),...t})}function Ep({className:e,...t}){return R.jsx("td",{className:Ve("p-3 align-middle",e),...t})}function ne(e,t,{checkForDefaultPrevented:n=!0}={}){return function(o){if(e==null||e(o),n===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function _p(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function za(...e){return t=>{let n=!1;const r=e.map(o=>{const i=_p(o,t);return!n&&typeof i=="function"&&(n=!0),i});if(n)return()=>{for(let o=0;o{const{children:l,...a}=i,s=v.useMemo(()=>a,Object.values(a));return R.jsx(n.Provider,{value:s,children:l})};r.displayName=e+"Provider";function o(i){const l=v.useContext(n);if(l)return l;if(t!==void 0)return t;throw new Error(`\`${i}\` must be used within \`${e}\``)}return[r,o]}function So(e,t=[]){let n=[];function r(i,l){const a=v.createContext(l),s=n.length;n=[...n,l];const u=d=>{var g;const{scope:f,children:p,...y}=d,m=((g=f==null?void 0:f[e])==null?void 0:g[s])||a,S=v.useMemo(()=>y,Object.values(y));return R.jsx(m.Provider,{value:S,children:p})};u.displayName=i+"Provider";function c(d,f){var m;const p=((m=f==null?void 0:f[e])==null?void 0:m[s])||a,y=v.useContext(p);if(y)return y;if(l!==void 0)return l;throw new Error(`\`${d}\` must be used within \`${i}\``)}return[u,c]}const o=()=>{const i=n.map(l=>v.createContext(l));return function(a){const s=(a==null?void 0:a[e])||i;return v.useMemo(()=>({[`__scope${e}`]:{...a,[e]:s}}),[a,s])}};return o.scopeName=e,[r,VR(o,...t)]}function VR(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(i){const l=r.reduce((a,{useScope:s,scopeName:u})=>{const d=s(i)[`__scope${u}`];return{...a,...d}},{});return v.useMemo(()=>({[`__scope${t.scopeName}`]:l}),[l])}};return n.scopeName=t.scopeName,n}var Yn=globalThis!=null&&globalThis.document?v.useLayoutEffect:()=>{},UR=ic[" useInsertionEffect ".trim().toString()]||Yn;function sd({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){const[o,i,l]=BR({defaultProp:t,onChange:n}),a=e!==void 0,s=a?e:o;{const c=v.useRef(e!==void 0);v.useEffect(()=>{const d=c.current;d!==a&&console.warn(`${r} is changing from ${d?"controlled":"uncontrolled"} to ${a?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),c.current=a},[a,r])}const u=v.useCallback(c=>{var d;if(a){const f=HR(c)?c(e):c;f!==e&&((d=l.current)==null||d.call(l,f))}else i(c)},[a,e,i,l]);return[s,u]}function BR({defaultProp:e,onChange:t}){const[n,r]=v.useState(e),o=v.useRef(n),i=v.useRef(t);return UR(()=>{i.current=t},[t]),v.useEffect(()=>{var l;o.current!==n&&((l=i.current)==null||l.call(i,n),o.current=n)},[n,o]),[n,r,i]}function HR(e){return typeof e=="function"}function Si(e){const t=GR(e),n=v.forwardRef((r,o)=>{const{children:i,...l}=r,a=v.Children.toArray(i),s=a.find(KR);if(s){const u=s.props.children,c=a.map(d=>d===s?v.Children.count(u)>1?v.Children.only(null):v.isValidElement(u)?u.props.children:null:d);return R.jsx(t,{...l,ref:o,children:v.isValidElement(u)?v.cloneElement(u,void 0,c):null})}return R.jsx(t,{...l,ref:o,children:i})});return n.displayName=`${e}.Slot`,n}function GR(e){const t=v.forwardRef((n,r)=>{const{children:o,...i}=n;if(v.isValidElement(o)){const l=XR(o),a=QR(i,o.props);return o.type!==v.Fragment&&(a.ref=r?za(r,l):l),v.cloneElement(o,a)}return v.Children.count(o)>1?v.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var WR=Symbol("radix.slottable");function KR(e){return v.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===WR}function QR(e,t){const n={...t};for(const r in t){const o=e[r],i=t[r];/^on[A-Z]/.test(r)?o&&i?n[r]=(...a)=>{const s=i(...a);return o(...a),s}:o&&(n[r]=o):r==="style"?n[r]={...o,...i}:r==="className"&&(n[r]=[o,i].filter(Boolean).join(" "))}return{...e,...n}}function XR(e){var r,o;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var YR=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Oe=YR.reduce((e,t)=>{const n=Si(`Primitive.${t}`),r=v.forwardRef((o,i)=>{const{asChild:l,...a}=o,s=l?n:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),R.jsx(s,{...a,ref:i})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function Km(e,t){e&&Ni.flushSync(()=>e.dispatchEvent(t))}function Qm(e){const t=e+"CollectionProvider",[n,r]=So(t),[o,i]=n(t,{collectionRef:{current:null},itemMap:new Map}),l=m=>{const{scope:S,children:g}=m,h=on.useRef(null),w=on.useRef(new Map).current;return R.jsx(o,{scope:S,itemMap:w,collectionRef:h,children:g})};l.displayName=t;const a=e+"CollectionSlot",s=Si(a),u=on.forwardRef((m,S)=>{const{scope:g,children:h}=m,w=i(a,g),x=Ge(S,w.collectionRef);return R.jsx(s,{ref:x,children:h})});u.displayName=a;const c=e+"CollectionItemSlot",d="data-radix-collection-item",f=Si(c),p=on.forwardRef((m,S)=>{const{scope:g,children:h,...w}=m,x=on.useRef(null),P=Ge(S,x),D=i(c,g);return on.useEffect(()=>(D.itemMap.set(x,{ref:x,...w}),()=>void D.itemMap.delete(x))),R.jsx(f,{[d]:"",ref:P,children:h})});p.displayName=c;function y(m){const S=i(e+"CollectionConsumer",m);return on.useCallback(()=>{const h=S.collectionRef.current;if(!h)return[];const w=Array.from(h.querySelectorAll(`[${d}]`));return Array.from(S.itemMap.values()).sort((D,k)=>w.indexOf(D.ref.current)-w.indexOf(k.ref.current))},[S.collectionRef,S.itemMap])}return[{Provider:l,Slot:u,ItemSlot:p},y,r]}var ZR=v.createContext(void 0);function Xm(e){const t=v.useContext(ZR);return e||t||"ltr"}function yn(e){const t=v.useRef(e);return v.useEffect(()=>{t.current=e}),v.useMemo(()=>(...n)=>{var r;return(r=t.current)==null?void 0:r.call(t,...n)},[])}function JR(e,t=globalThis==null?void 0:globalThis.document){const n=yn(e);v.useEffect(()=>{const r=o=>{o.key==="Escape"&&n(o)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[n,t])}var qR="DismissableLayer",Qu="dismissableLayer.update",eE="dismissableLayer.pointerDownOutside",tE="dismissableLayer.focusOutside",Pp,Ym=v.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),ud=v.forwardRef((e,t)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:o,onFocusOutside:i,onInteractOutside:l,onDismiss:a,...s}=e,u=v.useContext(Ym),[c,d]=v.useState(null),f=(c==null?void 0:c.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,p]=v.useState({}),y=Ge(t,k=>d(k)),m=Array.from(u.layers),[S]=[...u.layersWithOutsidePointerEventsDisabled].slice(-1),g=m.indexOf(S),h=c?m.indexOf(c):-1,w=u.layersWithOutsidePointerEventsDisabled.size>0,x=h>=g,P=oE(k=>{const C=k.target,F=[...u.branches].some(T=>T.contains(C));!x||F||(o==null||o(k),l==null||l(k),k.defaultPrevented||a==null||a())},f),D=iE(k=>{const C=k.target;[...u.branches].some(T=>T.contains(C))||(i==null||i(k),l==null||l(k),k.defaultPrevented||a==null||a())},f);return JR(k=>{h===u.layers.size-1&&(r==null||r(k),!k.defaultPrevented&&a&&(k.preventDefault(),a()))},f),v.useEffect(()=>{if(c)return n&&(u.layersWithOutsidePointerEventsDisabled.size===0&&(Pp=f.body.style.pointerEvents,f.body.style.pointerEvents="none"),u.layersWithOutsidePointerEventsDisabled.add(c)),u.layers.add(c),Mp(),()=>{n&&u.layersWithOutsidePointerEventsDisabled.size===1&&(f.body.style.pointerEvents=Pp)}},[c,f,n,u]),v.useEffect(()=>()=>{c&&(u.layers.delete(c),u.layersWithOutsidePointerEventsDisabled.delete(c),Mp())},[c,u]),v.useEffect(()=>{const k=()=>p({});return document.addEventListener(Qu,k),()=>document.removeEventListener(Qu,k)},[]),R.jsx(Oe.div,{...s,ref:y,style:{pointerEvents:w?x?"auto":"none":void 0,...e.style},onFocusCapture:ne(e.onFocusCapture,D.onFocusCapture),onBlurCapture:ne(e.onBlurCapture,D.onBlurCapture),onPointerDownCapture:ne(e.onPointerDownCapture,P.onPointerDownCapture)})});ud.displayName=qR;var nE="DismissableLayerBranch",rE=v.forwardRef((e,t)=>{const n=v.useContext(Ym),r=v.useRef(null),o=Ge(t,r);return v.useEffect(()=>{const i=r.current;if(i)return n.branches.add(i),()=>{n.branches.delete(i)}},[n.branches]),R.jsx(Oe.div,{...e,ref:o})});rE.displayName=nE;function oE(e,t=globalThis==null?void 0:globalThis.document){const n=yn(e),r=v.useRef(!1),o=v.useRef(()=>{});return v.useEffect(()=>{const i=a=>{if(a.target&&!r.current){let s=function(){Zm(eE,n,u,{discrete:!0})};const u={originalEvent:a};a.pointerType==="touch"?(t.removeEventListener("click",o.current),o.current=s,t.addEventListener("click",o.current,{once:!0})):s()}else t.removeEventListener("click",o.current);r.current=!1},l=window.setTimeout(()=>{t.addEventListener("pointerdown",i)},0);return()=>{window.clearTimeout(l),t.removeEventListener("pointerdown",i),t.removeEventListener("click",o.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function iE(e,t=globalThis==null?void 0:globalThis.document){const n=yn(e),r=v.useRef(!1);return v.useEffect(()=>{const o=i=>{i.target&&!r.current&&Zm(tE,n,{originalEvent:i},{discrete:!1})};return t.addEventListener("focusin",o),()=>t.removeEventListener("focusin",o)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function Mp(){const e=new CustomEvent(Qu);document.dispatchEvent(e)}function Zm(e,t,n,{discrete:r}){const o=n.originalEvent.target,i=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&o.addEventListener(e,t,{once:!0}),r?Km(o,i):o.dispatchEvent(i)}var js=0;function Jm(){v.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??kp()),document.body.insertAdjacentElement("beforeend",e[1]??kp()),js++,()=>{js===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),js--}},[])}function kp(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var bs="focusScope.autoFocusOnMount",zs="focusScope.autoFocusOnUnmount",Dp={bubbles:!1,cancelable:!0},lE="FocusScope",cd=v.forwardRef((e,t)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:o,onUnmountAutoFocus:i,...l}=e,[a,s]=v.useState(null),u=yn(o),c=yn(i),d=v.useRef(null),f=Ge(t,m=>s(m)),p=v.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;v.useEffect(()=>{if(r){let m=function(w){if(p.paused||!a)return;const x=w.target;a.contains(x)?d.current=x:Nn(d.current,{select:!0})},S=function(w){if(p.paused||!a)return;const x=w.relatedTarget;x!==null&&(a.contains(x)||Nn(d.current,{select:!0}))},g=function(w){if(document.activeElement===document.body)for(const P of w)P.removedNodes.length>0&&Nn(a)};document.addEventListener("focusin",m),document.addEventListener("focusout",S);const h=new MutationObserver(g);return a&&h.observe(a,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",m),document.removeEventListener("focusout",S),h.disconnect()}}},[r,a,p.paused]),v.useEffect(()=>{if(a){Ip.add(p);const m=document.activeElement;if(!a.contains(m)){const g=new CustomEvent(bs,Dp);a.addEventListener(bs,u),a.dispatchEvent(g),g.defaultPrevented||(aE(fE(qm(a)),{select:!0}),document.activeElement===m&&Nn(a))}return()=>{a.removeEventListener(bs,u),setTimeout(()=>{const g=new CustomEvent(zs,Dp);a.addEventListener(zs,c),a.dispatchEvent(g),g.defaultPrevented||Nn(m??document.body,{select:!0}),a.removeEventListener(zs,c),Ip.remove(p)},0)}}},[a,u,c,p]);const y=v.useCallback(m=>{if(!n&&!r||p.paused)return;const S=m.key==="Tab"&&!m.altKey&&!m.ctrlKey&&!m.metaKey,g=document.activeElement;if(S&&g){const h=m.currentTarget,[w,x]=sE(h);w&&x?!m.shiftKey&&g===x?(m.preventDefault(),n&&Nn(w,{select:!0})):m.shiftKey&&g===w&&(m.preventDefault(),n&&Nn(x,{select:!0})):g===h&&m.preventDefault()}},[n,r,p.paused]);return R.jsx(Oe.div,{tabIndex:-1,...l,ref:f,onKeyDown:y})});cd.displayName=lE;function aE(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(Nn(r,{select:t}),document.activeElement!==n)return}function sE(e){const t=qm(e),n=Np(t,e),r=Np(t.reverse(),e);return[n,r]}function qm(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const o=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||o?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function Np(e,t){for(const n of e)if(!uE(n,{upTo:t}))return n}function uE(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function cE(e){return e instanceof HTMLInputElement&&"select"in e}function Nn(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&cE(e)&&t&&e.select()}}var Ip=dE();function dE(){let e=[];return{add(t){const n=e[0];t!==n&&(n==null||n.pause()),e=Tp(e,t),e.unshift(t)},remove(t){var n;e=Tp(e,t),(n=e[0])==null||n.resume()}}}function Tp(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function fE(e){return e.filter(t=>t.tagName!=="A")}var pE=ic[" useId ".trim().toString()]||(()=>{}),gE=0;function no(e){const[t,n]=v.useState(pE());return Yn(()=>{n(r=>r??String(gE++))},[e]),t?`radix-${t}`:""}const hE=["top","right","bottom","left"],Zn=Math.min,gt=Math.max,fa=Math.round,vl=Math.floor,Xt=e=>({x:e,y:e}),mE={left:"right",right:"left",bottom:"top",top:"bottom"},vE={start:"end",end:"start"};function Xu(e,t,n){return gt(e,Zn(t,n))}function wn(e,t){return typeof e=="function"?e(t):e}function Sn(e){return e.split("-")[0]}function xo(e){return e.split("-")[1]}function dd(e){return e==="x"?"y":"x"}function fd(e){return e==="y"?"height":"width"}const yE=new Set(["top","bottom"]);function Wt(e){return yE.has(Sn(e))?"y":"x"}function pd(e){return dd(Wt(e))}function wE(e,t,n){n===void 0&&(n=!1);const r=xo(e),o=pd(e),i=fd(o);let l=o==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[i]>t.floating[i]&&(l=pa(l)),[l,pa(l)]}function SE(e){const t=pa(e);return[Yu(e),t,Yu(t)]}function Yu(e){return e.replace(/start|end/g,t=>vE[t])}const Lp=["left","right"],Op=["right","left"],xE=["top","bottom"],CE=["bottom","top"];function RE(e,t,n){switch(e){case"top":case"bottom":return n?t?Op:Lp:t?Lp:Op;case"left":case"right":return t?xE:CE;default:return[]}}function EE(e,t,n,r){const o=xo(e);let i=RE(Sn(e),n==="start",r);return o&&(i=i.map(l=>l+"-"+o),t&&(i=i.concat(i.map(Yu)))),i}function pa(e){return e.replace(/left|right|bottom|top/g,t=>mE[t])}function _E(e){return{top:0,right:0,bottom:0,left:0,...e}}function ev(e){return typeof e!="number"?_E(e):{top:e,right:e,bottom:e,left:e}}function ga(e){const{x:t,y:n,width:r,height:o}=e;return{width:r,height:o,top:n,left:t,right:t+r,bottom:n+o,x:t,y:n}}function Fp(e,t,n){let{reference:r,floating:o}=e;const i=Wt(t),l=pd(t),a=fd(l),s=Sn(t),u=i==="y",c=r.x+r.width/2-o.width/2,d=r.y+r.height/2-o.height/2,f=r[a]/2-o[a]/2;let p;switch(s){case"top":p={x:c,y:r.y-o.height};break;case"bottom":p={x:c,y:r.y+r.height};break;case"right":p={x:r.x+r.width,y:d};break;case"left":p={x:r.x-o.width,y:d};break;default:p={x:r.x,y:r.y}}switch(xo(t)){case"start":p[l]-=f*(n&&u?-1:1);break;case"end":p[l]+=f*(n&&u?-1:1);break}return p}const PE=async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:i=[],platform:l}=n,a=i.filter(Boolean),s=await(l.isRTL==null?void 0:l.isRTL(t));let u=await l.getElementRects({reference:e,floating:t,strategy:o}),{x:c,y:d}=Fp(u,r,s),f=r,p={},y=0;for(let m=0;m({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:o,rects:i,platform:l,elements:a,middlewareData:s}=t,{element:u,padding:c=0}=wn(e,t)||{};if(u==null)return{};const d=ev(c),f={x:n,y:r},p=pd(o),y=fd(p),m=await l.getDimensions(u),S=p==="y",g=S?"top":"left",h=S?"bottom":"right",w=S?"clientHeight":"clientWidth",x=i.reference[y]+i.reference[p]-f[p]-i.floating[y],P=f[p]-i.reference[p],D=await(l.getOffsetParent==null?void 0:l.getOffsetParent(u));let k=D?D[w]:0;(!k||!await(l.isElement==null?void 0:l.isElement(D)))&&(k=a.floating[w]||i.floating[y]);const C=x/2-P/2,F=k/2-m[y]/2-1,T=Zn(d[g],F),b=Zn(d[h],F),j=T,Q=k-m[y]-b,G=k/2-m[y]/2+C,se=Xu(j,G,Q),Z=!s.arrow&&xo(o)!=null&&G!==se&&i.reference[y]/2-(GG<=0)){var b,j;const G=(((b=i.flip)==null?void 0:b.index)||0)+1,se=k[G];if(se&&(!(d==="alignment"?h!==Wt(se):!1)||T.every(I=>Wt(I.placement)===h?I.overflows[0]>0:!0)))return{data:{index:G,overflows:T},reset:{placement:se}};let Z=(j=T.filter(ie=>ie.overflows[0]<=0).sort((ie,I)=>ie.overflows[1]-I.overflows[1])[0])==null?void 0:j.placement;if(!Z)switch(p){case"bestFit":{var Q;const ie=(Q=T.filter(I=>{if(D){const N=Wt(I.placement);return N===h||N==="y"}return!0}).map(I=>[I.placement,I.overflows.filter(N=>N>0).reduce((N,z)=>N+z,0)]).sort((I,N)=>I[1]-N[1])[0])==null?void 0:Q[0];ie&&(Z=ie);break}case"initialPlacement":Z=a;break}if(o!==Z)return{reset:{placement:Z}}}return{}}}};function Ap(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function jp(e){return hE.some(t=>e[t]>=0)}const DE=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n}=t,{strategy:r="referenceHidden",...o}=wn(e,t);switch(r){case"referenceHidden":{const i=await xi(t,{...o,elementContext:"reference"}),l=Ap(i,n.reference);return{data:{referenceHiddenOffsets:l,referenceHidden:jp(l)}}}case"escaped":{const i=await xi(t,{...o,altBoundary:!0}),l=Ap(i,n.floating);return{data:{escapedOffsets:l,escaped:jp(l)}}}default:return{}}}}},tv=new Set(["left","top"]);async function NE(e,t){const{placement:n,platform:r,elements:o}=e,i=await(r.isRTL==null?void 0:r.isRTL(o.floating)),l=Sn(n),a=xo(n),s=Wt(n)==="y",u=tv.has(l)?-1:1,c=i&&s?-1:1,d=wn(t,e);let{mainAxis:f,crossAxis:p,alignmentAxis:y}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return a&&typeof y=="number"&&(p=a==="end"?y*-1:y),s?{x:p*c,y:f*u}:{x:f*u,y:p*c}}const IE=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:o,y:i,placement:l,middlewareData:a}=t,s=await NE(t,e);return l===((n=a.offset)==null?void 0:n.placement)&&(r=a.arrow)!=null&&r.alignmentOffset?{}:{x:o+s.x,y:i+s.y,data:{...s,placement:l}}}}},TE=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:o}=t,{mainAxis:i=!0,crossAxis:l=!1,limiter:a={fn:S=>{let{x:g,y:h}=S;return{x:g,y:h}}},...s}=wn(e,t),u={x:n,y:r},c=await xi(t,s),d=Wt(Sn(o)),f=dd(d);let p=u[f],y=u[d];if(i){const S=f==="y"?"top":"left",g=f==="y"?"bottom":"right",h=p+c[S],w=p-c[g];p=Xu(h,p,w)}if(l){const S=d==="y"?"top":"left",g=d==="y"?"bottom":"right",h=y+c[S],w=y-c[g];y=Xu(h,y,w)}const m=a.fn({...t,[f]:p,[d]:y});return{...m,data:{x:m.x-n,y:m.y-r,enabled:{[f]:i,[d]:l}}}}}},LE=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:o,rects:i,middlewareData:l}=t,{offset:a=0,mainAxis:s=!0,crossAxis:u=!0}=wn(e,t),c={x:n,y:r},d=Wt(o),f=dd(d);let p=c[f],y=c[d];const m=wn(a,t),S=typeof m=="number"?{mainAxis:m,crossAxis:0}:{mainAxis:0,crossAxis:0,...m};if(s){const w=f==="y"?"height":"width",x=i.reference[f]-i.floating[w]+S.mainAxis,P=i.reference[f]+i.reference[w]-S.mainAxis;pP&&(p=P)}if(u){var g,h;const w=f==="y"?"width":"height",x=tv.has(Sn(o)),P=i.reference[d]-i.floating[w]+(x&&((g=l.offset)==null?void 0:g[d])||0)+(x?0:S.crossAxis),D=i.reference[d]+i.reference[w]+(x?0:((h=l.offset)==null?void 0:h[d])||0)-(x?S.crossAxis:0);yD&&(y=D)}return{[f]:p,[d]:y}}}},OE=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var n,r;const{placement:o,rects:i,platform:l,elements:a}=t,{apply:s=()=>{},...u}=wn(e,t),c=await xi(t,u),d=Sn(o),f=xo(o),p=Wt(o)==="y",{width:y,height:m}=i.floating;let S,g;d==="top"||d==="bottom"?(S=d,g=f===(await(l.isRTL==null?void 0:l.isRTL(a.floating))?"start":"end")?"left":"right"):(g=d,S=f==="end"?"top":"bottom");const h=m-c.top-c.bottom,w=y-c.left-c.right,x=Zn(m-c[S],h),P=Zn(y-c[g],w),D=!t.middlewareData.shift;let k=x,C=P;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(C=w),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(k=h),D&&!f){const T=gt(c.left,0),b=gt(c.right,0),j=gt(c.top,0),Q=gt(c.bottom,0);p?C=y-2*(T!==0||b!==0?T+b:gt(c.left,c.right)):k=m-2*(j!==0||Q!==0?j+Q:gt(c.top,c.bottom))}await s({...t,availableWidth:C,availableHeight:k});const F=await l.getDimensions(a.floating);return y!==F.width||m!==F.height?{reset:{rects:!0}}:{}}}};function $a(){return typeof window<"u"}function Co(e){return nv(e)?(e.nodeName||"").toLowerCase():"#document"}function vt(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Zt(e){var t;return(t=(nv(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function nv(e){return $a()?e instanceof Node||e instanceof vt(e).Node:!1}function bt(e){return $a()?e instanceof Element||e instanceof vt(e).Element:!1}function Yt(e){return $a()?e instanceof HTMLElement||e instanceof vt(e).HTMLElement:!1}function bp(e){return!$a()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof vt(e).ShadowRoot}const FE=new Set(["inline","contents"]);function Oi(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=zt(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!FE.has(o)}const AE=new Set(["table","td","th"]);function jE(e){return AE.has(Co(e))}const bE=[":popover-open",":modal"];function Va(e){return bE.some(t=>{try{return e.matches(t)}catch{return!1}})}const zE=["transform","translate","scale","rotate","perspective"],$E=["transform","translate","scale","rotate","perspective","filter"],VE=["paint","layout","strict","content"];function gd(e){const t=hd(),n=bt(e)?zt(e):e;return zE.some(r=>n[r]?n[r]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!t&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!t&&(n.filter?n.filter!=="none":!1)||$E.some(r=>(n.willChange||"").includes(r))||VE.some(r=>(n.contain||"").includes(r))}function UE(e){let t=Jn(e);for(;Yt(t)&&!ho(t);){if(gd(t))return t;if(Va(t))return null;t=Jn(t)}return null}function hd(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const BE=new Set(["html","body","#document"]);function ho(e){return BE.has(Co(e))}function zt(e){return vt(e).getComputedStyle(e)}function Ua(e){return bt(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Jn(e){if(Co(e)==="html")return e;const t=e.assignedSlot||e.parentNode||bp(e)&&e.host||Zt(e);return bp(t)?t.host:t}function rv(e){const t=Jn(e);return ho(t)?e.ownerDocument?e.ownerDocument.body:e.body:Yt(t)&&Oi(t)?t:rv(t)}function Ci(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);const o=rv(e),i=o===((r=e.ownerDocument)==null?void 0:r.body),l=vt(o);if(i){const a=Zu(l);return t.concat(l,l.visualViewport||[],Oi(o)?o:[],a&&n?Ci(a):[])}return t.concat(o,Ci(o,[],n))}function Zu(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function ov(e){const t=zt(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=Yt(e),i=o?e.offsetWidth:n,l=o?e.offsetHeight:r,a=fa(n)!==i||fa(r)!==l;return a&&(n=i,r=l),{width:n,height:r,$:a}}function md(e){return bt(e)?e:e.contextElement}function ro(e){const t=md(e);if(!Yt(t))return Xt(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:i}=ov(t);let l=(i?fa(n.width):n.width)/r,a=(i?fa(n.height):n.height)/o;return(!l||!Number.isFinite(l))&&(l=1),(!a||!Number.isFinite(a))&&(a=1),{x:l,y:a}}const HE=Xt(0);function iv(e){const t=vt(e);return!hd()||!t.visualViewport?HE:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function GE(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==vt(e)?!1:t}function Rr(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const o=e.getBoundingClientRect(),i=md(e);let l=Xt(1);t&&(r?bt(r)&&(l=ro(r)):l=ro(e));const a=GE(i,n,r)?iv(i):Xt(0);let s=(o.left+a.x)/l.x,u=(o.top+a.y)/l.y,c=o.width/l.x,d=o.height/l.y;if(i){const f=vt(i),p=r&&bt(r)?vt(r):r;let y=f,m=Zu(y);for(;m&&r&&p!==y;){const S=ro(m),g=m.getBoundingClientRect(),h=zt(m),w=g.left+(m.clientLeft+parseFloat(h.paddingLeft))*S.x,x=g.top+(m.clientTop+parseFloat(h.paddingTop))*S.y;s*=S.x,u*=S.y,c*=S.x,d*=S.y,s+=w,u+=x,y=vt(m),m=Zu(y)}}return ga({width:c,height:d,x:s,y:u})}function Ba(e,t){const n=Ua(e).scrollLeft;return t?t.left+n:Rr(Zt(e)).left+n}function lv(e,t){const n=e.getBoundingClientRect(),r=n.left+t.scrollLeft-Ba(e,n),o=n.top+t.scrollTop;return{x:r,y:o}}function WE(e){let{elements:t,rect:n,offsetParent:r,strategy:o}=e;const i=o==="fixed",l=Zt(r),a=t?Va(t.floating):!1;if(r===l||a&&i)return n;let s={scrollLeft:0,scrollTop:0},u=Xt(1);const c=Xt(0),d=Yt(r);if((d||!d&&!i)&&((Co(r)!=="body"||Oi(l))&&(s=Ua(r)),Yt(r))){const p=Rr(r);u=ro(r),c.x=p.x+r.clientLeft,c.y=p.y+r.clientTop}const f=l&&!d&&!i?lv(l,s):Xt(0);return{width:n.width*u.x,height:n.height*u.y,x:n.x*u.x-s.scrollLeft*u.x+c.x+f.x,y:n.y*u.y-s.scrollTop*u.y+c.y+f.y}}function KE(e){return Array.from(e.getClientRects())}function QE(e){const t=Zt(e),n=Ua(e),r=e.ownerDocument.body,o=gt(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),i=gt(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let l=-n.scrollLeft+Ba(e);const a=-n.scrollTop;return zt(r).direction==="rtl"&&(l+=gt(t.clientWidth,r.clientWidth)-o),{width:o,height:i,x:l,y:a}}const zp=25;function XE(e,t){const n=vt(e),r=Zt(e),o=n.visualViewport;let i=r.clientWidth,l=r.clientHeight,a=0,s=0;if(o){i=o.width,l=o.height;const c=hd();(!c||c&&t==="fixed")&&(a=o.offsetLeft,s=o.offsetTop)}const u=Ba(r);if(u<=0){const c=r.ownerDocument,d=c.body,f=getComputedStyle(d),p=c.compatMode==="CSS1Compat"&&parseFloat(f.marginLeft)+parseFloat(f.marginRight)||0,y=Math.abs(r.clientWidth-d.clientWidth-p);y<=zp&&(i-=y)}else u<=zp&&(i+=u);return{width:i,height:l,x:a,y:s}}const YE=new Set(["absolute","fixed"]);function ZE(e,t){const n=Rr(e,!0,t==="fixed"),r=n.top+e.clientTop,o=n.left+e.clientLeft,i=Yt(e)?ro(e):Xt(1),l=e.clientWidth*i.x,a=e.clientHeight*i.y,s=o*i.x,u=r*i.y;return{width:l,height:a,x:s,y:u}}function $p(e,t,n){let r;if(t==="viewport")r=XE(e,n);else if(t==="document")r=QE(Zt(e));else if(bt(t))r=ZE(t,n);else{const o=iv(e);r={x:t.x-o.x,y:t.y-o.y,width:t.width,height:t.height}}return ga(r)}function av(e,t){const n=Jn(e);return n===t||!bt(n)||ho(n)?!1:zt(n).position==="fixed"||av(n,t)}function JE(e,t){const n=t.get(e);if(n)return n;let r=Ci(e,[],!1).filter(a=>bt(a)&&Co(a)!=="body"),o=null;const i=zt(e).position==="fixed";let l=i?Jn(e):e;for(;bt(l)&&!ho(l);){const a=zt(l),s=gd(l);!s&&a.position==="fixed"&&(o=null),(i?!s&&!o:!s&&a.position==="static"&&!!o&&YE.has(o.position)||Oi(l)&&!s&&av(e,l))?r=r.filter(c=>c!==l):o=a,l=Jn(l)}return t.set(e,r),r}function qE(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e;const l=[...n==="clippingAncestors"?Va(t)?[]:JE(t,this._c):[].concat(n),r],a=l[0],s=l.reduce((u,c)=>{const d=$p(t,c,o);return u.top=gt(d.top,u.top),u.right=Zn(d.right,u.right),u.bottom=Zn(d.bottom,u.bottom),u.left=gt(d.left,u.left),u},$p(t,a,o));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}}function e1(e){const{width:t,height:n}=ov(e);return{width:t,height:n}}function t1(e,t,n){const r=Yt(t),o=Zt(t),i=n==="fixed",l=Rr(e,!0,i,t);let a={scrollLeft:0,scrollTop:0};const s=Xt(0);function u(){s.x=Ba(o)}if(r||!r&&!i)if((Co(t)!=="body"||Oi(o))&&(a=Ua(t)),r){const p=Rr(t,!0,i,t);s.x=p.x+t.clientLeft,s.y=p.y+t.clientTop}else o&&u();i&&!r&&o&&u();const c=o&&!r&&!i?lv(o,a):Xt(0),d=l.left+a.scrollLeft-s.x-c.x,f=l.top+a.scrollTop-s.y-c.y;return{x:d,y:f,width:l.width,height:l.height}}function $s(e){return zt(e).position==="static"}function Vp(e,t){if(!Yt(e)||zt(e).position==="fixed")return null;if(t)return t(e);let n=e.offsetParent;return Zt(e)===n&&(n=n.ownerDocument.body),n}function sv(e,t){const n=vt(e);if(Va(e))return n;if(!Yt(e)){let o=Jn(e);for(;o&&!ho(o);){if(bt(o)&&!$s(o))return o;o=Jn(o)}return n}let r=Vp(e,t);for(;r&&jE(r)&&$s(r);)r=Vp(r,t);return r&&ho(r)&&$s(r)&&!gd(r)?n:r||UE(e)||n}const n1=async function(e){const t=this.getOffsetParent||sv,n=this.getDimensions,r=await n(e.floating);return{reference:t1(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function r1(e){return zt(e).direction==="rtl"}const o1={convertOffsetParentRelativeRectToViewportRelativeRect:WE,getDocumentElement:Zt,getClippingRect:qE,getOffsetParent:sv,getElementRects:n1,getClientRects:KE,getDimensions:e1,getScale:ro,isElement:bt,isRTL:r1};function uv(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function i1(e,t){let n=null,r;const o=Zt(e);function i(){var a;clearTimeout(r),(a=n)==null||a.disconnect(),n=null}function l(a,s){a===void 0&&(a=!1),s===void 0&&(s=1),i();const u=e.getBoundingClientRect(),{left:c,top:d,width:f,height:p}=u;if(a||t(),!f||!p)return;const y=vl(d),m=vl(o.clientWidth-(c+f)),S=vl(o.clientHeight-(d+p)),g=vl(c),w={rootMargin:-y+"px "+-m+"px "+-S+"px "+-g+"px",threshold:gt(0,Zn(1,s))||1};let x=!0;function P(D){const k=D[0].intersectionRatio;if(k!==s){if(!x)return l();k?l(!1,k):r=setTimeout(()=>{l(!1,1e-7)},1e3)}k===1&&!uv(u,e.getBoundingClientRect())&&l(),x=!1}try{n=new IntersectionObserver(P,{...w,root:o.ownerDocument})}catch{n=new IntersectionObserver(P,w)}n.observe(e)}return l(!0),i}function l1(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:o=!0,ancestorResize:i=!0,elementResize:l=typeof ResizeObserver=="function",layoutShift:a=typeof IntersectionObserver=="function",animationFrame:s=!1}=r,u=md(e),c=o||i?[...u?Ci(u):[],...Ci(t)]:[];c.forEach(g=>{o&&g.addEventListener("scroll",n,{passive:!0}),i&&g.addEventListener("resize",n)});const d=u&&a?i1(u,n):null;let f=-1,p=null;l&&(p=new ResizeObserver(g=>{let[h]=g;h&&h.target===u&&p&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var w;(w=p)==null||w.observe(t)})),n()}),u&&!s&&p.observe(u),p.observe(t));let y,m=s?Rr(e):null;s&&S();function S(){const g=Rr(e);m&&!uv(m,g)&&n(),m=g,y=requestAnimationFrame(S)}return n(),()=>{var g;c.forEach(h=>{o&&h.removeEventListener("scroll",n),i&&h.removeEventListener("resize",n)}),d==null||d(),(g=p)==null||g.disconnect(),p=null,s&&cancelAnimationFrame(y)}}const a1=IE,s1=TE,u1=kE,c1=OE,d1=DE,Up=ME,f1=LE,p1=(e,t,n)=>{const r=new Map,o={platform:o1,...n},i={...o.platform,_c:r};return PE(e,t,{...o,platform:i})};var g1=typeof document<"u",h1=function(){},Al=g1?v.useLayoutEffect:h1;function ha(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,r,o;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!ha(e[r],t[r]))return!1;return!0}if(o=Object.keys(e),n=o.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,o[r]))return!1;for(r=n;r--!==0;){const i=o[r];if(!(i==="_owner"&&e.$$typeof)&&!ha(e[i],t[i]))return!1}return!0}return e!==e&&t!==t}function cv(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Bp(e,t){const n=cv(e);return Math.round(t*n)/n}function Vs(e){const t=v.useRef(e);return Al(()=>{t.current=e}),t}function m1(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:o,elements:{reference:i,floating:l}={},transform:a=!0,whileElementsMounted:s,open:u}=e,[c,d]=v.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[f,p]=v.useState(r);ha(f,r)||p(r);const[y,m]=v.useState(null),[S,g]=v.useState(null),h=v.useCallback(I=>{I!==D.current&&(D.current=I,m(I))},[]),w=v.useCallback(I=>{I!==k.current&&(k.current=I,g(I))},[]),x=i||y,P=l||S,D=v.useRef(null),k=v.useRef(null),C=v.useRef(c),F=s!=null,T=Vs(s),b=Vs(o),j=Vs(u),Q=v.useCallback(()=>{if(!D.current||!k.current)return;const I={placement:t,strategy:n,middleware:f};b.current&&(I.platform=b.current),p1(D.current,k.current,I).then(N=>{const z={...N,isPositioned:j.current!==!1};G.current&&!ha(C.current,z)&&(C.current=z,Ni.flushSync(()=>{d(z)}))})},[f,t,n,b,j]);Al(()=>{u===!1&&C.current.isPositioned&&(C.current.isPositioned=!1,d(I=>({...I,isPositioned:!1})))},[u]);const G=v.useRef(!1);Al(()=>(G.current=!0,()=>{G.current=!1}),[]),Al(()=>{if(x&&(D.current=x),P&&(k.current=P),x&&P){if(T.current)return T.current(x,P,Q);Q()}},[x,P,Q,T,F]);const se=v.useMemo(()=>({reference:D,floating:k,setReference:h,setFloating:w}),[h,w]),Z=v.useMemo(()=>({reference:x,floating:P}),[x,P]),ie=v.useMemo(()=>{const I={position:n,left:0,top:0};if(!Z.floating)return I;const N=Bp(Z.floating,c.x),z=Bp(Z.floating,c.y);return a?{...I,transform:"translate("+N+"px, "+z+"px)",...cv(Z.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:N,top:z}},[n,a,Z.floating,c.x,c.y]);return v.useMemo(()=>({...c,update:Q,refs:se,elements:Z,floatingStyles:ie}),[c,Q,se,Z,ie])}const v1=e=>{function t(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:r,padding:o}=typeof e=="function"?e(n):e;return r&&t(r)?r.current!=null?Up({element:r.current,padding:o}).fn(n):{}:r?Up({element:r,padding:o}).fn(n):{}}}},y1=(e,t)=>({...a1(e),options:[e,t]}),w1=(e,t)=>({...s1(e),options:[e,t]}),S1=(e,t)=>({...f1(e),options:[e,t]}),x1=(e,t)=>({...u1(e),options:[e,t]}),C1=(e,t)=>({...c1(e),options:[e,t]}),R1=(e,t)=>({...d1(e),options:[e,t]}),E1=(e,t)=>({...v1(e),options:[e,t]});var _1="Arrow",dv=v.forwardRef((e,t)=>{const{children:n,width:r=10,height:o=5,...i}=e;return R.jsx(Oe.svg,{...i,ref:t,width:r,height:o,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?n:R.jsx("polygon",{points:"0,0 30,0 15,10"})})});dv.displayName=_1;var P1=dv;function M1(e){const[t,n]=v.useState(void 0);return Yn(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});const r=new ResizeObserver(o=>{if(!Array.isArray(o)||!o.length)return;const i=o[0];let l,a;if("borderBoxSize"in i){const s=i.borderBoxSize,u=Array.isArray(s)?s[0]:s;l=u.inlineSize,a=u.blockSize}else l=e.offsetWidth,a=e.offsetHeight;n({width:l,height:a})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}else n(void 0)},[e]),t}var vd="Popper",[fv,pv]=So(vd),[k1,gv]=fv(vd),hv=e=>{const{__scopePopper:t,children:n}=e,[r,o]=v.useState(null);return R.jsx(k1,{scope:t,anchor:r,onAnchorChange:o,children:n})};hv.displayName=vd;var mv="PopperAnchor",vv=v.forwardRef((e,t)=>{const{__scopePopper:n,virtualRef:r,...o}=e,i=gv(mv,n),l=v.useRef(null),a=Ge(t,l),s=v.useRef(null);return v.useEffect(()=>{const u=s.current;s.current=(r==null?void 0:r.current)||l.current,u!==s.current&&i.onAnchorChange(s.current)}),r?null:R.jsx(Oe.div,{...o,ref:a})});vv.displayName=mv;var yd="PopperContent",[D1,N1]=fv(yd),yv=v.forwardRef((e,t)=>{var Ee,ct,ot,Vt,bi,zi;const{__scopePopper:n,side:r="bottom",sideOffset:o=0,align:i="center",alignOffset:l=0,arrowPadding:a=0,avoidCollisions:s=!0,collisionBoundary:u=[],collisionPadding:c=0,sticky:d="partial",hideWhenDetached:f=!1,updatePositionStrategy:p="optimized",onPlaced:y,...m}=e,S=gv(yd,n),[g,h]=v.useState(null),w=Ge(t,lr=>h(lr)),[x,P]=v.useState(null),D=M1(x),k=(D==null?void 0:D.width)??0,C=(D==null?void 0:D.height)??0,F=r+(i!=="center"?"-"+i:""),T=typeof c=="number"?c:{top:0,right:0,bottom:0,left:0,...c},b=Array.isArray(u)?u:[u],j=b.length>0,Q={padding:T,boundary:b.filter(T1),altBoundary:j},{refs:G,floatingStyles:se,placement:Z,isPositioned:ie,middlewareData:I}=m1({strategy:"fixed",placement:F,whileElementsMounted:(...lr)=>l1(...lr,{animationFrame:p==="always"}),elements:{reference:S.anchor},middleware:[y1({mainAxis:o+C,alignmentAxis:l}),s&&w1({mainAxis:!0,crossAxis:!1,limiter:d==="partial"?S1():void 0,...Q}),s&&x1({...Q}),C1({...Q,apply:({elements:lr,rects:je,availableWidth:Cn,availableHeight:$i})=>{const{width:Xa,height:Jt}=je.reference,Dr=lr.floating.style;Dr.setProperty("--radix-popper-available-width",`${Cn}px`),Dr.setProperty("--radix-popper-available-height",`${$i}px`),Dr.setProperty("--radix-popper-anchor-width",`${Xa}px`),Dr.setProperty("--radix-popper-anchor-height",`${Jt}px`)}}),x&&E1({element:x,padding:a}),L1({arrowWidth:k,arrowHeight:C}),f&&R1({strategy:"referenceHidden",...Q})]}),[N,z]=xv(Z),W=yn(y);Yn(()=>{ie&&(W==null||W())},[ie,W]);const oe=(Ee=I.arrow)==null?void 0:Ee.x,De=(ct=I.arrow)==null?void 0:ct.y,Ne=((ot=I.arrow)==null?void 0:ot.centerOffset)!==0,[rt,ge]=v.useState();return Yn(()=>{g&&ge(window.getComputedStyle(g).zIndex)},[g]),R.jsx("div",{ref:G.setFloating,"data-radix-popper-content-wrapper":"",style:{...se,transform:ie?se.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:rt,"--radix-popper-transform-origin":[(Vt=I.transformOrigin)==null?void 0:Vt.x,(bi=I.transformOrigin)==null?void 0:bi.y].join(" "),...((zi=I.hide)==null?void 0:zi.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:R.jsx(D1,{scope:n,placedSide:N,onArrowChange:P,arrowX:oe,arrowY:De,shouldHideArrow:Ne,children:R.jsx(Oe.div,{"data-side":N,"data-align":z,...m,ref:w,style:{...m.style,animation:ie?void 0:"none"}})})})});yv.displayName=yd;var wv="PopperArrow",I1={top:"bottom",right:"left",bottom:"top",left:"right"},Sv=v.forwardRef(function(t,n){const{__scopePopper:r,...o}=t,i=N1(wv,r),l=I1[i.placedSide];return R.jsx("span",{ref:i.onArrowChange,style:{position:"absolute",left:i.arrowX,top:i.arrowY,[l]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[i.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[i.placedSide],visibility:i.shouldHideArrow?"hidden":void 0},children:R.jsx(P1,{...o,ref:n,style:{...o.style,display:"block"}})})});Sv.displayName=wv;function T1(e){return e!==null}var L1=e=>({name:"transformOrigin",options:e,fn(t){var S,g,h;const{placement:n,rects:r,middlewareData:o}=t,l=((S=o.arrow)==null?void 0:S.centerOffset)!==0,a=l?0:e.arrowWidth,s=l?0:e.arrowHeight,[u,c]=xv(n),d={start:"0%",center:"50%",end:"100%"}[c],f=(((g=o.arrow)==null?void 0:g.x)??0)+a/2,p=(((h=o.arrow)==null?void 0:h.y)??0)+s/2;let y="",m="";return u==="bottom"?(y=l?d:`${f}px`,m=`${-s}px`):u==="top"?(y=l?d:`${f}px`,m=`${r.floating.height+s}px`):u==="right"?(y=`${-s}px`,m=l?d:`${p}px`):u==="left"&&(y=`${r.floating.width+s}px`,m=l?d:`${p}px`),{data:{x:y,y:m}}}});function xv(e){const[t,n="center"]=e.split("-");return[t,n]}var O1=hv,F1=vv,A1=yv,j1=Sv,b1="Portal",wd=v.forwardRef((e,t)=>{var a;const{container:n,...r}=e,[o,i]=v.useState(!1);Yn(()=>i(!0),[]);const l=n||o&&((a=globalThis==null?void 0:globalThis.document)==null?void 0:a.body);return l?pm.createPortal(R.jsx(Oe.div,{...r,ref:t}),l):null});wd.displayName=b1;function z1(e,t){return v.useReducer((n,r)=>t[n][r]??n,e)}var ir=e=>{const{present:t,children:n}=e,r=$1(t),o=typeof n=="function"?n({present:r.isPresent}):v.Children.only(n),i=Ge(r.ref,V1(o));return typeof n=="function"||r.isPresent?v.cloneElement(o,{ref:i}):null};ir.displayName="Presence";function $1(e){const[t,n]=v.useState(),r=v.useRef(null),o=v.useRef(e),i=v.useRef("none"),l=e?"mounted":"unmounted",[a,s]=z1(l,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return v.useEffect(()=>{const u=yl(r.current);i.current=a==="mounted"?u:"none"},[a]),Yn(()=>{const u=r.current,c=o.current;if(c!==e){const f=i.current,p=yl(u);e?s("MOUNT"):p==="none"||(u==null?void 0:u.display)==="none"?s("UNMOUNT"):s(c&&f!==p?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,s]),Yn(()=>{if(t){let u;const c=t.ownerDocument.defaultView??window,d=p=>{const m=yl(r.current).includes(CSS.escape(p.animationName));if(p.target===t&&m&&(s("ANIMATION_END"),!o.current)){const S=t.style.animationFillMode;t.style.animationFillMode="forwards",u=c.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=S)})}},f=p=>{p.target===t&&(i.current=yl(r.current))};return t.addEventListener("animationstart",f),t.addEventListener("animationcancel",d),t.addEventListener("animationend",d),()=>{c.clearTimeout(u),t.removeEventListener("animationstart",f),t.removeEventListener("animationcancel",d),t.removeEventListener("animationend",d)}}else s("ANIMATION_END")},[t,s]),{isPresent:["mounted","unmountSuspended"].includes(a),ref:v.useCallback(u=>{r.current=u?getComputedStyle(u):null,n(u)},[])}}function yl(e){return(e==null?void 0:e.animationName)||"none"}function V1(e){var r,o;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var Us="rovingFocusGroup.onEntryFocus",U1={bubbles:!1,cancelable:!0},Fi="RovingFocusGroup",[Ju,Cv,B1]=Qm(Fi),[H1,Rv]=So(Fi,[B1]),[G1,W1]=H1(Fi),Ev=v.forwardRef((e,t)=>R.jsx(Ju.Provider,{scope:e.__scopeRovingFocusGroup,children:R.jsx(Ju.Slot,{scope:e.__scopeRovingFocusGroup,children:R.jsx(K1,{...e,ref:t})})}));Ev.displayName=Fi;var K1=v.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,orientation:r,loop:o=!1,dir:i,currentTabStopId:l,defaultCurrentTabStopId:a,onCurrentTabStopIdChange:s,onEntryFocus:u,preventScrollOnEntryFocus:c=!1,...d}=e,f=v.useRef(null),p=Ge(t,f),y=Xm(i),[m,S]=sd({prop:l,defaultProp:a??null,onChange:s,caller:Fi}),[g,h]=v.useState(!1),w=yn(u),x=Cv(n),P=v.useRef(!1),[D,k]=v.useState(0);return v.useEffect(()=>{const C=f.current;if(C)return C.addEventListener(Us,w),()=>C.removeEventListener(Us,w)},[w]),R.jsx(G1,{scope:n,orientation:r,dir:y,loop:o,currentTabStopId:m,onItemFocus:v.useCallback(C=>S(C),[S]),onItemShiftTab:v.useCallback(()=>h(!0),[]),onFocusableItemAdd:v.useCallback(()=>k(C=>C+1),[]),onFocusableItemRemove:v.useCallback(()=>k(C=>C-1),[]),children:R.jsx(Oe.div,{tabIndex:g||D===0?-1:0,"data-orientation":r,...d,ref:p,style:{outline:"none",...e.style},onMouseDown:ne(e.onMouseDown,()=>{P.current=!0}),onFocus:ne(e.onFocus,C=>{const F=!P.current;if(C.target===C.currentTarget&&F&&!g){const T=new CustomEvent(Us,U1);if(C.currentTarget.dispatchEvent(T),!T.defaultPrevented){const b=x().filter(Z=>Z.focusable),j=b.find(Z=>Z.active),Q=b.find(Z=>Z.id===m),se=[j,Q,...b].filter(Boolean).map(Z=>Z.ref.current);Mv(se,c)}}P.current=!1}),onBlur:ne(e.onBlur,()=>h(!1))})})}),_v="RovingFocusGroupItem",Pv=v.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,focusable:r=!0,active:o=!1,tabStopId:i,children:l,...a}=e,s=no(),u=i||s,c=W1(_v,n),d=c.currentTabStopId===u,f=Cv(n),{onFocusableItemAdd:p,onFocusableItemRemove:y,currentTabStopId:m}=c;return v.useEffect(()=>{if(r)return p(),()=>y()},[r,p,y]),R.jsx(Ju.ItemSlot,{scope:n,id:u,focusable:r,active:o,children:R.jsx(Oe.span,{tabIndex:d?0:-1,"data-orientation":c.orientation,...a,ref:t,onMouseDown:ne(e.onMouseDown,S=>{r?c.onItemFocus(u):S.preventDefault()}),onFocus:ne(e.onFocus,()=>c.onItemFocus(u)),onKeyDown:ne(e.onKeyDown,S=>{if(S.key==="Tab"&&S.shiftKey){c.onItemShiftTab();return}if(S.target!==S.currentTarget)return;const g=Y1(S,c.orientation,c.dir);if(g!==void 0){if(S.metaKey||S.ctrlKey||S.altKey||S.shiftKey)return;S.preventDefault();let w=f().filter(x=>x.focusable).map(x=>x.ref.current);if(g==="last")w.reverse();else if(g==="prev"||g==="next"){g==="prev"&&w.reverse();const x=w.indexOf(S.currentTarget);w=c.loop?Z1(w,x+1):w.slice(x+1)}setTimeout(()=>Mv(w))}}),children:typeof l=="function"?l({isCurrentTabStop:d,hasTabStop:m!=null}):l})})});Pv.displayName=_v;var Q1={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function X1(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function Y1(e,t,n){const r=X1(e.key,n);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return Q1[r]}function Mv(e,t=!1){const n=document.activeElement;for(const r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function Z1(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var J1=Ev,q1=Pv,e_=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},Lr=new WeakMap,wl=new WeakMap,Sl={},Bs=0,kv=function(e){return e&&(e.host||kv(e.parentNode))},t_=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=kv(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},n_=function(e,t,n,r){var o=t_(t,Array.isArray(e)?e:[e]);Sl[n]||(Sl[n]=new WeakMap);var i=Sl[n],l=[],a=new Set,s=new Set(o),u=function(d){!d||a.has(d)||(a.add(d),u(d.parentNode))};o.forEach(u);var c=function(d){!d||s.has(d)||Array.prototype.forEach.call(d.children,function(f){if(a.has(f))c(f);else try{var p=f.getAttribute(r),y=p!==null&&p!=="false",m=(Lr.get(f)||0)+1,S=(i.get(f)||0)+1;Lr.set(f,m),i.set(f,S),l.push(f),m===1&&y&&wl.set(f,!0),S===1&&f.setAttribute(n,"true"),y||f.setAttribute(r,"true")}catch(g){console.error("aria-hidden: cannot operate on ",f,g)}})};return c(t),a.clear(),Bs++,function(){l.forEach(function(d){var f=Lr.get(d)-1,p=i.get(d)-1;Lr.set(d,f),i.set(d,p),f||(wl.has(d)||d.removeAttribute(r),wl.delete(d)),p||d.removeAttribute(n)}),Bs--,Bs||(Lr=new WeakMap,Lr=new WeakMap,wl=new WeakMap,Sl={})}},Dv=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),o=e_(e);return o?(r.push.apply(r,Array.from(o.querySelectorAll("[aria-live], script"))),n_(r,o,n,"aria-hidden")):function(){return null}},Gt=function(){return Gt=Object.assign||function(t){for(var n,r=1,o=arguments.length;r"u")return w_;var t=S_(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},C_=Lv(),oo="data-scroll-locked",R_=function(e,t,n,r){var o=e.left,i=e.top,l=e.right,a=e.gap;return n===void 0&&(n="margin"),` + .`.concat(o_,` { + overflow: hidden `).concat(r,`; + padding-right: `).concat(a,"px ").concat(r,`; + } + body[`).concat(oo,`] { + overflow: hidden `).concat(r,`; + overscroll-behavior: contain; + `).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&` + padding-left: `.concat(o,`px; + padding-top: `).concat(i,`px; + padding-right: `).concat(l,`px; + margin-left:0; + margin-top:0; + margin-right: `).concat(a,"px ").concat(r,`; + `),n==="padding"&&"padding-right: ".concat(a,"px ").concat(r,";")].filter(Boolean).join(""),` + } + + .`).concat(jl,` { + right: `).concat(a,"px ").concat(r,`; + } + + .`).concat(bl,` { + margin-right: `).concat(a,"px ").concat(r,`; + } + + .`).concat(jl," .").concat(jl,` { + right: 0 `).concat(r,`; + } + + .`).concat(bl," .").concat(bl,` { + margin-right: 0 `).concat(r,`; + } + + body[`).concat(oo,`] { + `).concat(i_,": ").concat(a,`px; + } +`)},Gp=function(){var e=parseInt(document.body.getAttribute(oo)||"0",10);return isFinite(e)?e:0},E_=function(){v.useEffect(function(){return document.body.setAttribute(oo,(Gp()+1).toString()),function(){var e=Gp()-1;e<=0?document.body.removeAttribute(oo):document.body.setAttribute(oo,e.toString())}},[])},__=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,o=r===void 0?"margin":r;E_();var i=v.useMemo(function(){return x_(o)},[o]);return v.createElement(C_,{styles:R_(i,!t,o,n?"":"!important")})},qu=!1;if(typeof window<"u")try{var xl=Object.defineProperty({},"passive",{get:function(){return qu=!0,!0}});window.addEventListener("test",xl,xl),window.removeEventListener("test",xl,xl)}catch{qu=!1}var Or=qu?{passive:!1}:!1,P_=function(e){return e.tagName==="TEXTAREA"},Ov=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!P_(e)&&n[t]==="visible")},M_=function(e){return Ov(e,"overflowY")},k_=function(e){return Ov(e,"overflowX")},Wp=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var o=Fv(e,r);if(o){var i=Av(e,r),l=i[1],a=i[2];if(l>a)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},D_=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},N_=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},Fv=function(e,t){return e==="v"?M_(t):k_(t)},Av=function(e,t){return e==="v"?D_(t):N_(t)},I_=function(e,t){return e==="h"&&t==="rtl"?-1:1},T_=function(e,t,n,r,o){var i=I_(e,window.getComputedStyle(t).direction),l=i*r,a=n.target,s=t.contains(a),u=!1,c=l>0,d=0,f=0;do{if(!a)break;var p=Av(e,a),y=p[0],m=p[1],S=p[2],g=m-S-i*y;(y||g)&&Fv(e,a)&&(d+=g,f+=y);var h=a.parentNode;a=h&&h.nodeType===Node.DOCUMENT_FRAGMENT_NODE?h.host:h}while(!s&&a!==document.body||s&&(t.contains(a)||t===a));return(c&&Math.abs(d)<1||!c&&Math.abs(f)<1)&&(u=!0),u},Cl=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},Kp=function(e){return[e.deltaX,e.deltaY]},Qp=function(e){return e&&"current"in e?e.current:e},L_=function(e,t){return e[0]===t[0]&&e[1]===t[1]},O_=function(e){return` + .block-interactivity-`.concat(e,` {pointer-events: none;} + .allow-interactivity-`).concat(e,` {pointer-events: all;} +`)},F_=0,Fr=[];function A_(e){var t=v.useRef([]),n=v.useRef([0,0]),r=v.useRef(),o=v.useState(F_++)[0],i=v.useState(Lv)[0],l=v.useRef(e);v.useEffect(function(){l.current=e},[e]),v.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var m=r_([e.lockRef.current],(e.shards||[]).map(Qp),!0).filter(Boolean);return m.forEach(function(S){return S.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),m.forEach(function(S){return S.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var a=v.useCallback(function(m,S){if("touches"in m&&m.touches.length===2||m.type==="wheel"&&m.ctrlKey)return!l.current.allowPinchZoom;var g=Cl(m),h=n.current,w="deltaX"in m?m.deltaX:h[0]-g[0],x="deltaY"in m?m.deltaY:h[1]-g[1],P,D=m.target,k=Math.abs(w)>Math.abs(x)?"h":"v";if("touches"in m&&k==="h"&&D.type==="range")return!1;var C=Wp(k,D);if(!C)return!0;if(C?P=k:(P=k==="v"?"h":"v",C=Wp(k,D)),!C)return!1;if(!r.current&&"changedTouches"in m&&(w||x)&&(r.current=P),!P)return!0;var F=r.current||P;return T_(F,S,m,F==="h"?w:x)},[]),s=v.useCallback(function(m){var S=m;if(!(!Fr.length||Fr[Fr.length-1]!==i)){var g="deltaY"in S?Kp(S):Cl(S),h=t.current.filter(function(P){return P.name===S.type&&(P.target===S.target||S.target===P.shadowParent)&&L_(P.delta,g)})[0];if(h&&h.should){S.cancelable&&S.preventDefault();return}if(!h){var w=(l.current.shards||[]).map(Qp).filter(Boolean).filter(function(P){return P.contains(S.target)}),x=w.length>0?a(S,w[0]):!l.current.noIsolation;x&&S.cancelable&&S.preventDefault()}}},[]),u=v.useCallback(function(m,S,g,h){var w={name:m,delta:S,target:g,should:h,shadowParent:j_(g)};t.current.push(w),setTimeout(function(){t.current=t.current.filter(function(x){return x!==w})},1)},[]),c=v.useCallback(function(m){n.current=Cl(m),r.current=void 0},[]),d=v.useCallback(function(m){u(m.type,Kp(m),m.target,a(m,e.lockRef.current))},[]),f=v.useCallback(function(m){u(m.type,Cl(m),m.target,a(m,e.lockRef.current))},[]);v.useEffect(function(){return Fr.push(i),e.setCallbacks({onScrollCapture:d,onWheelCapture:d,onTouchMoveCapture:f}),document.addEventListener("wheel",s,Or),document.addEventListener("touchmove",s,Or),document.addEventListener("touchstart",c,Or),function(){Fr=Fr.filter(function(m){return m!==i}),document.removeEventListener("wheel",s,Or),document.removeEventListener("touchmove",s,Or),document.removeEventListener("touchstart",c,Or)}},[]);var p=e.removeScrollBar,y=e.inert;return v.createElement(v.Fragment,null,y?v.createElement(i,{styles:O_(o)}):null,p?v.createElement(__,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function j_(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const b_=f_(Tv,A_);var Sd=v.forwardRef(function(e,t){return v.createElement(Ha,Gt({},e,{ref:t,sideCar:b_}))});Sd.classNames=Ha.classNames;var ec=["Enter"," "],z_=["ArrowDown","PageUp","Home"],jv=["ArrowUp","PageDown","End"],$_=[...z_,...jv],V_={ltr:[...ec,"ArrowRight"],rtl:[...ec,"ArrowLeft"]},U_={ltr:["ArrowLeft"],rtl:["ArrowRight"]},Ai="Menu",[Ri,B_,H_]=Qm(Ai),[Mr,bv]=So(Ai,[H_,pv,Rv]),Ga=pv(),zv=Rv(),[G_,kr]=Mr(Ai),[W_,ji]=Mr(Ai),$v=e=>{const{__scopeMenu:t,open:n=!1,children:r,dir:o,onOpenChange:i,modal:l=!0}=e,a=Ga(t),[s,u]=v.useState(null),c=v.useRef(!1),d=yn(i),f=Xm(o);return v.useEffect(()=>{const p=()=>{c.current=!0,document.addEventListener("pointerdown",y,{capture:!0,once:!0}),document.addEventListener("pointermove",y,{capture:!0,once:!0})},y=()=>c.current=!1;return document.addEventListener("keydown",p,{capture:!0}),()=>{document.removeEventListener("keydown",p,{capture:!0}),document.removeEventListener("pointerdown",y,{capture:!0}),document.removeEventListener("pointermove",y,{capture:!0})}},[]),R.jsx(O1,{...a,children:R.jsx(G_,{scope:t,open:n,onOpenChange:d,content:s,onContentChange:u,children:R.jsx(W_,{scope:t,onClose:v.useCallback(()=>d(!1),[d]),isUsingKeyboardRef:c,dir:f,modal:l,children:r})})})};$v.displayName=Ai;var K_="MenuAnchor",xd=v.forwardRef((e,t)=>{const{__scopeMenu:n,...r}=e,o=Ga(n);return R.jsx(F1,{...o,...r,ref:t})});xd.displayName=K_;var Cd="MenuPortal",[Q_,Vv]=Mr(Cd,{forceMount:void 0}),Uv=e=>{const{__scopeMenu:t,forceMount:n,children:r,container:o}=e,i=kr(Cd,t);return R.jsx(Q_,{scope:t,forceMount:n,children:R.jsx(ir,{present:n||i.open,children:R.jsx(wd,{asChild:!0,container:o,children:r})})})};Uv.displayName=Cd;var Pt="MenuContent",[X_,Rd]=Mr(Pt),Bv=v.forwardRef((e,t)=>{const n=Vv(Pt,e.__scopeMenu),{forceMount:r=n.forceMount,...o}=e,i=kr(Pt,e.__scopeMenu),l=ji(Pt,e.__scopeMenu);return R.jsx(Ri.Provider,{scope:e.__scopeMenu,children:R.jsx(ir,{present:r||i.open,children:R.jsx(Ri.Slot,{scope:e.__scopeMenu,children:l.modal?R.jsx(Y_,{...o,ref:t}):R.jsx(Z_,{...o,ref:t})})})})}),Y_=v.forwardRef((e,t)=>{const n=kr(Pt,e.__scopeMenu),r=v.useRef(null),o=Ge(t,r);return v.useEffect(()=>{const i=r.current;if(i)return Dv(i)},[]),R.jsx(Ed,{...e,ref:o,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:ne(e.onFocusOutside,i=>i.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),Z_=v.forwardRef((e,t)=>{const n=kr(Pt,e.__scopeMenu);return R.jsx(Ed,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),J_=Si("MenuContent.ScrollLock"),Ed=v.forwardRef((e,t)=>{const{__scopeMenu:n,loop:r=!1,trapFocus:o,onOpenAutoFocus:i,onCloseAutoFocus:l,disableOutsidePointerEvents:a,onEntryFocus:s,onEscapeKeyDown:u,onPointerDownOutside:c,onFocusOutside:d,onInteractOutside:f,onDismiss:p,disableOutsideScroll:y,...m}=e,S=kr(Pt,n),g=ji(Pt,n),h=Ga(n),w=zv(n),x=B_(n),[P,D]=v.useState(null),k=v.useRef(null),C=Ge(t,k,S.onContentChange),F=v.useRef(0),T=v.useRef(""),b=v.useRef(0),j=v.useRef(null),Q=v.useRef("right"),G=v.useRef(0),se=y?Sd:v.Fragment,Z=y?{as:J_,allowPinchZoom:!0}:void 0,ie=N=>{var Ee,ct;const z=T.current+N,W=x().filter(ot=>!ot.disabled),oe=document.activeElement,De=(Ee=W.find(ot=>ot.ref.current===oe))==null?void 0:Ee.textValue,Ne=W.map(ot=>ot.textValue),rt=cP(Ne,z,De),ge=(ct=W.find(ot=>ot.textValue===rt))==null?void 0:ct.ref.current;(function ot(Vt){T.current=Vt,window.clearTimeout(F.current),Vt!==""&&(F.current=window.setTimeout(()=>ot(""),1e3))})(z),ge&&setTimeout(()=>ge.focus())};v.useEffect(()=>()=>window.clearTimeout(F.current),[]),Jm();const I=v.useCallback(N=>{var W,oe;return Q.current===((W=j.current)==null?void 0:W.side)&&fP(N,(oe=j.current)==null?void 0:oe.area)},[]);return R.jsx(X_,{scope:n,searchRef:T,onItemEnter:v.useCallback(N=>{I(N)&&N.preventDefault()},[I]),onItemLeave:v.useCallback(N=>{var z;I(N)||((z=k.current)==null||z.focus(),D(null))},[I]),onTriggerLeave:v.useCallback(N=>{I(N)&&N.preventDefault()},[I]),pointerGraceTimerRef:b,onPointerGraceIntentChange:v.useCallback(N=>{j.current=N},[]),children:R.jsx(se,{...Z,children:R.jsx(cd,{asChild:!0,trapped:o,onMountAutoFocus:ne(i,N=>{var z;N.preventDefault(),(z=k.current)==null||z.focus({preventScroll:!0})}),onUnmountAutoFocus:l,children:R.jsx(ud,{asChild:!0,disableOutsidePointerEvents:a,onEscapeKeyDown:u,onPointerDownOutside:c,onFocusOutside:d,onInteractOutside:f,onDismiss:p,children:R.jsx(J1,{asChild:!0,...w,dir:g.dir,orientation:"vertical",loop:r,currentTabStopId:P,onCurrentTabStopIdChange:D,onEntryFocus:ne(s,N=>{g.isUsingKeyboardRef.current||N.preventDefault()}),preventScrollOnEntryFocus:!0,children:R.jsx(A1,{role:"menu","aria-orientation":"vertical","data-state":iy(S.open),"data-radix-menu-content":"",dir:g.dir,...h,...m,ref:C,style:{outline:"none",...m.style},onKeyDown:ne(m.onKeyDown,N=>{const W=N.target.closest("[data-radix-menu-content]")===N.currentTarget,oe=N.ctrlKey||N.altKey||N.metaKey,De=N.key.length===1;W&&(N.key==="Tab"&&N.preventDefault(),!oe&&De&&ie(N.key));const Ne=k.current;if(N.target!==Ne||!$_.includes(N.key))return;N.preventDefault();const ge=x().filter(Ee=>!Ee.disabled).map(Ee=>Ee.ref.current);jv.includes(N.key)&&ge.reverse(),sP(ge)}),onBlur:ne(e.onBlur,N=>{N.currentTarget.contains(N.target)||(window.clearTimeout(F.current),T.current="")}),onPointerMove:ne(e.onPointerMove,Ei(N=>{const z=N.target,W=G.current!==N.clientX;if(N.currentTarget.contains(z)&&W){const oe=N.clientX>G.current?"right":"left";Q.current=oe,G.current=N.clientX}}))})})})})})})});Bv.displayName=Pt;var q_="MenuGroup",_d=v.forwardRef((e,t)=>{const{__scopeMenu:n,...r}=e;return R.jsx(Oe.div,{role:"group",...r,ref:t})});_d.displayName=q_;var eP="MenuLabel",Hv=v.forwardRef((e,t)=>{const{__scopeMenu:n,...r}=e;return R.jsx(Oe.div,{...r,ref:t})});Hv.displayName=eP;var ma="MenuItem",Xp="menu.itemSelect",Wa=v.forwardRef((e,t)=>{const{disabled:n=!1,onSelect:r,...o}=e,i=v.useRef(null),l=ji(ma,e.__scopeMenu),a=Rd(ma,e.__scopeMenu),s=Ge(t,i),u=v.useRef(!1),c=()=>{const d=i.current;if(!n&&d){const f=new CustomEvent(Xp,{bubbles:!0,cancelable:!0});d.addEventListener(Xp,p=>r==null?void 0:r(p),{once:!0}),Km(d,f),f.defaultPrevented?u.current=!1:l.onClose()}};return R.jsx(Gv,{...o,ref:s,disabled:n,onClick:ne(e.onClick,c),onPointerDown:d=>{var f;(f=e.onPointerDown)==null||f.call(e,d),u.current=!0},onPointerUp:ne(e.onPointerUp,d=>{var f;u.current||(f=d.currentTarget)==null||f.click()}),onKeyDown:ne(e.onKeyDown,d=>{const f=a.searchRef.current!=="";n||f&&d.key===" "||ec.includes(d.key)&&(d.currentTarget.click(),d.preventDefault())})})});Wa.displayName=ma;var Gv=v.forwardRef((e,t)=>{const{__scopeMenu:n,disabled:r=!1,textValue:o,...i}=e,l=Rd(ma,n),a=zv(n),s=v.useRef(null),u=Ge(t,s),[c,d]=v.useState(!1),[f,p]=v.useState("");return v.useEffect(()=>{const y=s.current;y&&p((y.textContent??"").trim())},[i.children]),R.jsx(Ri.ItemSlot,{scope:n,disabled:r,textValue:o??f,children:R.jsx(q1,{asChild:!0,...a,focusable:!r,children:R.jsx(Oe.div,{role:"menuitem","data-highlighted":c?"":void 0,"aria-disabled":r||void 0,"data-disabled":r?"":void 0,...i,ref:u,onPointerMove:ne(e.onPointerMove,Ei(y=>{r?l.onItemLeave(y):(l.onItemEnter(y),y.defaultPrevented||y.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:ne(e.onPointerLeave,Ei(y=>l.onItemLeave(y))),onFocus:ne(e.onFocus,()=>d(!0)),onBlur:ne(e.onBlur,()=>d(!1))})})})}),tP="MenuCheckboxItem",Wv=v.forwardRef((e,t)=>{const{checked:n=!1,onCheckedChange:r,...o}=e;return R.jsx(Zv,{scope:e.__scopeMenu,checked:n,children:R.jsx(Wa,{role:"menuitemcheckbox","aria-checked":va(n)?"mixed":n,...o,ref:t,"data-state":Md(n),onSelect:ne(o.onSelect,()=>r==null?void 0:r(va(n)?!0:!n),{checkForDefaultPrevented:!1})})})});Wv.displayName=tP;var Kv="MenuRadioGroup",[nP,rP]=Mr(Kv,{value:void 0,onValueChange:()=>{}}),Qv=v.forwardRef((e,t)=>{const{value:n,onValueChange:r,...o}=e,i=yn(r);return R.jsx(nP,{scope:e.__scopeMenu,value:n,onValueChange:i,children:R.jsx(_d,{...o,ref:t})})});Qv.displayName=Kv;var Xv="MenuRadioItem",Yv=v.forwardRef((e,t)=>{const{value:n,...r}=e,o=rP(Xv,e.__scopeMenu),i=n===o.value;return R.jsx(Zv,{scope:e.__scopeMenu,checked:i,children:R.jsx(Wa,{role:"menuitemradio","aria-checked":i,...r,ref:t,"data-state":Md(i),onSelect:ne(r.onSelect,()=>{var l;return(l=o.onValueChange)==null?void 0:l.call(o,n)},{checkForDefaultPrevented:!1})})})});Yv.displayName=Xv;var Pd="MenuItemIndicator",[Zv,oP]=Mr(Pd,{checked:!1}),Jv=v.forwardRef((e,t)=>{const{__scopeMenu:n,forceMount:r,...o}=e,i=oP(Pd,n);return R.jsx(ir,{present:r||va(i.checked)||i.checked===!0,children:R.jsx(Oe.span,{...o,ref:t,"data-state":Md(i.checked)})})});Jv.displayName=Pd;var iP="MenuSeparator",qv=v.forwardRef((e,t)=>{const{__scopeMenu:n,...r}=e;return R.jsx(Oe.div,{role:"separator","aria-orientation":"horizontal",...r,ref:t})});qv.displayName=iP;var lP="MenuArrow",ey=v.forwardRef((e,t)=>{const{__scopeMenu:n,...r}=e,o=Ga(n);return R.jsx(j1,{...o,...r,ref:t})});ey.displayName=lP;var aP="MenuSub",[FM,ty]=Mr(aP),Ho="MenuSubTrigger",ny=v.forwardRef((e,t)=>{const n=kr(Ho,e.__scopeMenu),r=ji(Ho,e.__scopeMenu),o=ty(Ho,e.__scopeMenu),i=Rd(Ho,e.__scopeMenu),l=v.useRef(null),{pointerGraceTimerRef:a,onPointerGraceIntentChange:s}=i,u={__scopeMenu:e.__scopeMenu},c=v.useCallback(()=>{l.current&&window.clearTimeout(l.current),l.current=null},[]);return v.useEffect(()=>c,[c]),v.useEffect(()=>{const d=a.current;return()=>{window.clearTimeout(d),s(null)}},[a,s]),R.jsx(xd,{asChild:!0,...u,children:R.jsx(Gv,{id:o.triggerId,"aria-haspopup":"menu","aria-expanded":n.open,"aria-controls":o.contentId,"data-state":iy(n.open),...e,ref:za(t,o.onTriggerChange),onClick:d=>{var f;(f=e.onClick)==null||f.call(e,d),!(e.disabled||d.defaultPrevented)&&(d.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:ne(e.onPointerMove,Ei(d=>{i.onItemEnter(d),!d.defaultPrevented&&!e.disabled&&!n.open&&!l.current&&(i.onPointerGraceIntentChange(null),l.current=window.setTimeout(()=>{n.onOpenChange(!0),c()},100))})),onPointerLeave:ne(e.onPointerLeave,Ei(d=>{var p,y;c();const f=(p=n.content)==null?void 0:p.getBoundingClientRect();if(f){const m=(y=n.content)==null?void 0:y.dataset.side,S=m==="right",g=S?-5:5,h=f[S?"left":"right"],w=f[S?"right":"left"];i.onPointerGraceIntentChange({area:[{x:d.clientX+g,y:d.clientY},{x:h,y:f.top},{x:w,y:f.top},{x:w,y:f.bottom},{x:h,y:f.bottom}],side:m}),window.clearTimeout(a.current),a.current=window.setTimeout(()=>i.onPointerGraceIntentChange(null),300)}else{if(i.onTriggerLeave(d),d.defaultPrevented)return;i.onPointerGraceIntentChange(null)}})),onKeyDown:ne(e.onKeyDown,d=>{var p;const f=i.searchRef.current!=="";e.disabled||f&&d.key===" "||V_[r.dir].includes(d.key)&&(n.onOpenChange(!0),(p=n.content)==null||p.focus(),d.preventDefault())})})})});ny.displayName=Ho;var ry="MenuSubContent",oy=v.forwardRef((e,t)=>{const n=Vv(Pt,e.__scopeMenu),{forceMount:r=n.forceMount,...o}=e,i=kr(Pt,e.__scopeMenu),l=ji(Pt,e.__scopeMenu),a=ty(ry,e.__scopeMenu),s=v.useRef(null),u=Ge(t,s);return R.jsx(Ri.Provider,{scope:e.__scopeMenu,children:R.jsx(ir,{present:r||i.open,children:R.jsx(Ri.Slot,{scope:e.__scopeMenu,children:R.jsx(Ed,{id:a.contentId,"aria-labelledby":a.triggerId,...o,ref:u,align:"start",side:l.dir==="rtl"?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:c=>{var d;l.isUsingKeyboardRef.current&&((d=s.current)==null||d.focus()),c.preventDefault()},onCloseAutoFocus:c=>c.preventDefault(),onFocusOutside:ne(e.onFocusOutside,c=>{c.target!==a.trigger&&i.onOpenChange(!1)}),onEscapeKeyDown:ne(e.onEscapeKeyDown,c=>{l.onClose(),c.preventDefault()}),onKeyDown:ne(e.onKeyDown,c=>{var p;const d=c.currentTarget.contains(c.target),f=U_[l.dir].includes(c.key);d&&f&&(i.onOpenChange(!1),(p=a.trigger)==null||p.focus(),c.preventDefault())})})})})})});oy.displayName=ry;function iy(e){return e?"open":"closed"}function va(e){return e==="indeterminate"}function Md(e){return va(e)?"indeterminate":e?"checked":"unchecked"}function sP(e){const t=document.activeElement;for(const n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function uP(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function cP(e,t,n){const o=t.length>1&&Array.from(t).every(u=>u===t[0])?t[0]:t,i=n?e.indexOf(n):-1;let l=uP(e,Math.max(i,0));o.length===1&&(l=l.filter(u=>u!==n));const s=l.find(u=>u.toLowerCase().startsWith(o.toLowerCase()));return s!==n?s:void 0}function dP(e,t){const{x:n,y:r}=e;let o=!1;for(let i=0,l=t.length-1;ir!=f>r&&n<(d-u)*(r-c)/(f-c)+u&&(o=!o)}return o}function fP(e,t){if(!t)return!1;const n={x:e.clientX,y:e.clientY};return dP(n,t)}function Ei(e){return t=>t.pointerType==="mouse"?e(t):void 0}var pP=$v,gP=xd,hP=Uv,mP=Bv,vP=_d,yP=Hv,wP=Wa,SP=Wv,xP=Qv,CP=Yv,RP=Jv,EP=qv,_P=ey,PP=ny,MP=oy,Ka="DropdownMenu",[kP,AM]=So(Ka,[bv]),nt=bv(),[DP,ly]=kP(Ka),ay=e=>{const{__scopeDropdownMenu:t,children:n,dir:r,open:o,defaultOpen:i,onOpenChange:l,modal:a=!0}=e,s=nt(t),u=v.useRef(null),[c,d]=sd({prop:o,defaultProp:i??!1,onChange:l,caller:Ka});return R.jsx(DP,{scope:t,triggerId:no(),triggerRef:u,contentId:no(),open:c,onOpenChange:d,onOpenToggle:v.useCallback(()=>d(f=>!f),[d]),modal:a,children:R.jsx(pP,{...s,open:c,onOpenChange:d,dir:r,modal:a,children:n})})};ay.displayName=Ka;var sy="DropdownMenuTrigger",uy=v.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,disabled:r=!1,...o}=e,i=ly(sy,n),l=nt(n);return R.jsx(gP,{asChild:!0,...l,children:R.jsx(Oe.button,{type:"button",id:i.triggerId,"aria-haspopup":"menu","aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":i.open?"open":"closed","data-disabled":r?"":void 0,disabled:r,...o,ref:za(t,i.triggerRef),onPointerDown:ne(e.onPointerDown,a=>{!r&&a.button===0&&a.ctrlKey===!1&&(i.onOpenToggle(),i.open||a.preventDefault())}),onKeyDown:ne(e.onKeyDown,a=>{r||(["Enter"," "].includes(a.key)&&i.onOpenToggle(),a.key==="ArrowDown"&&i.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(a.key)&&a.preventDefault())})})})});uy.displayName=sy;var NP="DropdownMenuPortal",cy=e=>{const{__scopeDropdownMenu:t,...n}=e,r=nt(t);return R.jsx(hP,{...r,...n})};cy.displayName=NP;var dy="DropdownMenuContent",fy=v.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=ly(dy,n),i=nt(n),l=v.useRef(!1);return R.jsx(mP,{id:o.contentId,"aria-labelledby":o.triggerId,...i,...r,ref:t,onCloseAutoFocus:ne(e.onCloseAutoFocus,a=>{var s;l.current||(s=o.triggerRef.current)==null||s.focus(),l.current=!1,a.preventDefault()}),onInteractOutside:ne(e.onInteractOutside,a=>{const s=a.detail.originalEvent,u=s.button===0&&s.ctrlKey===!0,c=s.button===2||u;(!o.modal||c)&&(l.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});fy.displayName=dy;var IP="DropdownMenuGroup",TP=v.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=nt(n);return R.jsx(vP,{...o,...r,ref:t})});TP.displayName=IP;var LP="DropdownMenuLabel",py=v.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=nt(n);return R.jsx(yP,{...o,...r,ref:t})});py.displayName=LP;var OP="DropdownMenuItem",gy=v.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=nt(n);return R.jsx(wP,{...o,...r,ref:t})});gy.displayName=OP;var FP="DropdownMenuCheckboxItem",AP=v.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=nt(n);return R.jsx(SP,{...o,...r,ref:t})});AP.displayName=FP;var jP="DropdownMenuRadioGroup",bP=v.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=nt(n);return R.jsx(xP,{...o,...r,ref:t})});bP.displayName=jP;var zP="DropdownMenuRadioItem",$P=v.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=nt(n);return R.jsx(CP,{...o,...r,ref:t})});$P.displayName=zP;var VP="DropdownMenuItemIndicator",UP=v.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=nt(n);return R.jsx(RP,{...o,...r,ref:t})});UP.displayName=VP;var BP="DropdownMenuSeparator",hy=v.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=nt(n);return R.jsx(EP,{...o,...r,ref:t})});hy.displayName=BP;var HP="DropdownMenuArrow",GP=v.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=nt(n);return R.jsx(_P,{...o,...r,ref:t})});GP.displayName=HP;var WP="DropdownMenuSubTrigger",KP=v.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=nt(n);return R.jsx(PP,{...o,...r,ref:t})});KP.displayName=WP;var QP="DropdownMenuSubContent",XP=v.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=nt(n);return R.jsx(MP,{...o,...r,ref:t,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});XP.displayName=QP;var YP=ay,ZP=uy,JP=cy,qP=fy,eM=py,tM=gy,nM=hy;const my=YP,vy=ZP,kd=v.forwardRef(({className:e,sideOffset:t=4,...n},r)=>R.jsx(JP,{children:R.jsx(qP,{ref:r,sideOffset:t,className:Ve("z-50 min-w-[12rem] overflow-hidden rounded-2xl border bg-white p-1 text-sm shadow-lg",e),...n})}));kd.displayName="DropdownMenuContent";const yy=v.forwardRef(({className:e,...t},n)=>R.jsx(eM,{ref:n,className:Ve("px-3 py-2 text-xs text-zinc-500",e),...t}));yy.displayName="DropdownMenuLabel";const wy=v.forwardRef(({className:e,...t},n)=>R.jsx(nM,{ref:n,className:Ve("my-1 h-px bg-zinc-200",e),...t}));wy.displayName="DropdownMenuSeparator";const ya=v.forwardRef(({className:e,...t},n)=>R.jsx(tM,{ref:n,className:Ve("relative flex cursor-pointer select-none items-center rounded-xl px-3 py-2 outline-none hover:bg-zinc-100",e),...t}));ya.displayName="DropdownMenuItem";function rM({columns:e,data:t,className:n,columnsTitle:r="Колонки",initialVisibility:o,initialSizing:i,initialPageSize:l=10,pageSizeOptions:a=[10,50,100]}){const[s,u]=v.useState(o??{}),[c]=v.useState(i??{}),[d,f]=v.useState(l),[p,y]=v.useState(0),m=nR({data:t,columns:e,state:{columnVisibility:s,columnSizing:c,pagination:{pageIndex:p,pageSize:d}},columnResizeMode:"onChange",onColumnVisibilityChange:u,onPaginationChange:g=>{const h=typeof g=="function"?g({pageIndex:p,pageSize:d}):g;(h==null?void 0:h.pageSize)!==void 0&&f(h.pageSize),(h==null?void 0:h.pageIndex)!==void 0&&y(h.pageIndex)},getCoreRowModel:YC(),getPaginationRowModel:JC()}),S=m.getAllLeafColumns();return R.jsxs("div",{className:Ve("space-y-3",n),children:[R.jsxs("div",{className:"flex items-center justify-between",children:[R.jsx("h2",{className:"text-lg font-semibold",children:"Список"}),R.jsxs(my,{children:[R.jsx(vy,{asChild:!0,children:R.jsx("button",{className:"h-9 rounded-2xl border px-3 text-sm hover:bg-zinc-50",children:r})}),R.jsx(kd,{className:"max-h-80 overflow-auto",children:S.filter(g=>g.getCanHide()).map(g=>R.jsx(ya,{onSelect:h=>h.preventDefault(),children:R.jsxs("label",{className:"flex items-center gap-2",children:[R.jsx("input",{type:"checkbox",checked:g.getIsVisible(),onChange:()=>g.toggleVisibility()}),R.jsx("span",{children:String(g.columnDef.header??g.id)})]})},g.id))})]})]}),R.jsx("div",{className:"rounded-2xl border",children:R.jsx("div",{className:"overflow-x-auto",children:R.jsxs(AR,{className:"min-w-[800px]",style:{width:m.getCenterTotalSize()},children:[R.jsx(jR,{children:m.getHeaderGroups().map(g=>R.jsx(As,{children:g.headers.map(h=>{var w,x;return R.jsx(zR,{className:Ve((x=(w=h.column.columnDef)==null?void 0:w.meta)==null?void 0:x.className),style:{width:h.column.getSize()},children:h.isPlaceholder?null:xp(h.column.columnDef.header,h.getContext())},h.id)})},g.id))}),R.jsx(bR,{children:m.getRowModel().rows.length?m.getRowModel().rows.map(g=>R.jsx(As,{"data-state":g.getIsSelected()&&"selected",className:"transition-colors hover:bg-zinc-50",children:g.getVisibleCells().map(h=>{var w,x;return R.jsx(Ep,{className:Ve((x=(w=h.column.columnDef)==null?void 0:w.meta)==null?void 0:x.className),style:{width:h.column.getSize()},children:xp(h.column.columnDef.cell,h.getContext())},h.id)})},g.id)):R.jsx(As,{children:R.jsx(Ep,{colSpan:S.length,className:"h-24 text-center",children:"Нет данных"})})})]})})}),R.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[R.jsxs("div",{className:"flex items-center gap-2",children:[R.jsx("span",{className:"text-sm text-zinc-600",children:"Показывать по:"}),R.jsx("select",{className:"h-9 rounded-2xl border px-3 text-sm bg-white",value:d,onChange:g=>m.setPageSize(Number(g.target.value)),children:a.map(g=>R.jsx("option",{value:g,children:g},g))})]}),R.jsxs("div",{className:"flex items-center gap-2",children:[R.jsx("button",{className:"h-9 rounded-xl border px-2 text-sm hover:bg-zinc-50 disabled:opacity-50",onClick:()=>m.setPageIndex(0),disabled:!m.getCanPreviousPage(),"aria-label":"Первая страница",children:"«"}),R.jsx("button",{className:"h-9 rounded-xl border px-3 text-sm hover:bg-zinc-50 disabled:opacity-50",onClick:()=>m.previousPage(),disabled:!m.getCanPreviousPage(),"aria-label":"Предыдущая страница",children:"‹"}),R.jsxs("span",{className:"text-sm px-2",children:["стр. ",m.getState().pagination.pageIndex+1," из ",m.getPageCount()]}),R.jsx("button",{className:"h-9 rounded-xl border px-3 text-sm hover:bg-zinc-50 disabled:opacity-50",onClick:()=>m.nextPage(),disabled:!m.getCanNextPage(),"aria-label":"Следующая страница",children:"›"}),R.jsx("button",{className:"h-9 rounded-xl border px-2 text-sm hover:bg-zinc-50 disabled:opacity-50",onClick:()=>m.setPageIndex(m.getPageCount()-1),disabled:!m.getCanNextPage(),"aria-label":"Последняя страница",children:"»"})]})]})]})}function Sy(e){if(!e)return"";try{const t=typeof e=="string"?new Date(e):e;return Number.isNaN(t.getTime())?String(e):new Intl.DateTimeFormat("ru-RU",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(t)}catch{return String(e)}}function oM(e){const{onView:t}=e;return[{accessorKey:"name",header:"Имя"},{accessorKey:"version",header:"Версия"},{id:"type_title",header:"Тип (имя)",cell:({row:n})=>{var r;return((r=n.original.type)==null?void 0:r.title)??""}},{id:"type_code",header:"Тип (код)",cell:({row:n})=>{var r;return((r=n.original.type)==null?void 0:r.code)??""}},{accessorKey:"namespace",header:"Namespace"},{accessorKey:"description",header:"Описание"},{accessorKey:"file_path",header:"Путь к файлу"},{accessorKey:"created_at",header:"Загружено",cell:({row:n})=>Sy(n.original.created_at)},{accessorKey:"id",header:"ID"},{id:"actions",header:"Действия",enableHiding:!1,meta:{className:"sticky right-0 z-10 bg-[var(--background)] border-l"},cell:({row:n})=>{const r=n.original;return R.jsxs(my,{children:[R.jsx(vy,{asChild:!0,children:R.jsx("button",{className:"h-8 w-8 rounded-xl hover:bg-zinc-100","aria-label":"Действия",children:"⋯"})}),R.jsxs(kd,{align:"end",children:[R.jsx(yy,{children:"Действия"}),R.jsx(ya,{onClick:()=>navigator.clipboard.writeText(String(r.id)),children:"Скопировать ID"}),R.jsx(wy,{}),R.jsx(ya,{onClick:()=>t(r.id),children:"Открыть"})]})]})}}]}var Qa="Dialog",[xy,jM]=So(Qa),[iM,$t]=xy(Qa),Cy=e=>{const{__scopeDialog:t,children:n,open:r,defaultOpen:o,onOpenChange:i,modal:l=!0}=e,a=v.useRef(null),s=v.useRef(null),[u,c]=sd({prop:r,defaultProp:o??!1,onChange:i,caller:Qa});return R.jsx(iM,{scope:t,triggerRef:a,contentRef:s,contentId:no(),titleId:no(),descriptionId:no(),open:u,onOpenChange:c,onOpenToggle:v.useCallback(()=>c(d=>!d),[c]),modal:l,children:n})};Cy.displayName=Qa;var Ry="DialogTrigger",lM=v.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=$t(Ry,n),i=Ge(t,o.triggerRef);return R.jsx(Oe.button,{type:"button","aria-haspopup":"dialog","aria-expanded":o.open,"aria-controls":o.contentId,"data-state":Id(o.open),...r,ref:i,onClick:ne(e.onClick,o.onOpenToggle)})});lM.displayName=Ry;var Dd="DialogPortal",[aM,Ey]=xy(Dd,{forceMount:void 0}),_y=e=>{const{__scopeDialog:t,forceMount:n,children:r,container:o}=e,i=$t(Dd,t);return R.jsx(aM,{scope:t,forceMount:n,children:v.Children.map(r,l=>R.jsx(ir,{present:n||i.open,children:R.jsx(wd,{asChild:!0,container:o,children:l})}))})};_y.displayName=Dd;var wa="DialogOverlay",Py=v.forwardRef((e,t)=>{const n=Ey(wa,e.__scopeDialog),{forceMount:r=n.forceMount,...o}=e,i=$t(wa,e.__scopeDialog);return i.modal?R.jsx(ir,{present:r||i.open,children:R.jsx(uM,{...o,ref:t})}):null});Py.displayName=wa;var sM=Si("DialogOverlay.RemoveScroll"),uM=v.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=$t(wa,n);return R.jsx(Sd,{as:sM,allowPinchZoom:!0,shards:[o.contentRef],children:R.jsx(Oe.div,{"data-state":Id(o.open),...r,ref:t,style:{pointerEvents:"auto",...r.style}})})}),Er="DialogContent",My=v.forwardRef((e,t)=>{const n=Ey(Er,e.__scopeDialog),{forceMount:r=n.forceMount,...o}=e,i=$t(Er,e.__scopeDialog);return R.jsx(ir,{present:r||i.open,children:i.modal?R.jsx(cM,{...o,ref:t}):R.jsx(dM,{...o,ref:t})})});My.displayName=Er;var cM=v.forwardRef((e,t)=>{const n=$t(Er,e.__scopeDialog),r=v.useRef(null),o=Ge(t,n.contentRef,r);return v.useEffect(()=>{const i=r.current;if(i)return Dv(i)},[]),R.jsx(ky,{...e,ref:o,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:ne(e.onCloseAutoFocus,i=>{var l;i.preventDefault(),(l=n.triggerRef.current)==null||l.focus()}),onPointerDownOutside:ne(e.onPointerDownOutside,i=>{const l=i.detail.originalEvent,a=l.button===0&&l.ctrlKey===!0;(l.button===2||a)&&i.preventDefault()}),onFocusOutside:ne(e.onFocusOutside,i=>i.preventDefault())})}),dM=v.forwardRef((e,t)=>{const n=$t(Er,e.__scopeDialog),r=v.useRef(!1),o=v.useRef(!1);return R.jsx(ky,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:i=>{var l,a;(l=e.onCloseAutoFocus)==null||l.call(e,i),i.defaultPrevented||(r.current||(a=n.triggerRef.current)==null||a.focus(),i.preventDefault()),r.current=!1,o.current=!1},onInteractOutside:i=>{var s,u;(s=e.onInteractOutside)==null||s.call(e,i),i.defaultPrevented||(r.current=!0,i.detail.originalEvent.type==="pointerdown"&&(o.current=!0));const l=i.target;((u=n.triggerRef.current)==null?void 0:u.contains(l))&&i.preventDefault(),i.detail.originalEvent.type==="focusin"&&o.current&&i.preventDefault()}})}),ky=v.forwardRef((e,t)=>{const{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:o,onCloseAutoFocus:i,...l}=e,a=$t(Er,n),s=v.useRef(null),u=Ge(t,s);return Jm(),R.jsxs(R.Fragment,{children:[R.jsx(cd,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:o,onUnmountAutoFocus:i,children:R.jsx(ud,{role:"dialog",id:a.contentId,"aria-describedby":a.descriptionId,"aria-labelledby":a.titleId,"data-state":Id(a.open),...l,ref:u,onDismiss:()=>a.onOpenChange(!1)})}),R.jsxs(R.Fragment,{children:[R.jsx(gM,{titleId:a.titleId}),R.jsx(mM,{contentRef:s,descriptionId:a.descriptionId})]})]})}),Nd="DialogTitle",fM=v.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=$t(Nd,n);return R.jsx(Oe.h2,{id:o.titleId,...r,ref:t})});fM.displayName=Nd;var Dy="DialogDescription",pM=v.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=$t(Dy,n);return R.jsx(Oe.p,{id:o.descriptionId,...r,ref:t})});pM.displayName=Dy;var Ny="DialogClose",Iy=v.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=$t(Ny,n);return R.jsx(Oe.button,{type:"button",...r,ref:t,onClick:ne(e.onClick,()=>o.onOpenChange(!1))})});Iy.displayName=Ny;function Id(e){return e?"open":"closed"}var Ty="DialogTitleWarning",[bM,Ly]=$R(Ty,{contentName:Er,titleName:Nd,docsSlug:"dialog"}),gM=({titleId:e})=>{const t=Ly(Ty),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users. + +If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component. + +For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return v.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},hM="DialogDescriptionWarning",mM=({contentRef:e,descriptionId:t})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${Ly(hM).contentName}}.`;return v.useEffect(()=>{var i;const o=(i=e.current)==null?void 0:i.getAttribute("aria-describedby");t&&o&&(document.getElementById(t)||console.warn(r))},[r,e,t]),null},vM=Cy,yM=_y,wM=Py,SM=My,Oy=Iy;const xM=vM,CM=Oy;function RM(e){return R.jsx(yM,{...e})}const Fy=v.forwardRef(({className:e,...t},n)=>R.jsx(wM,{ref:n,className:Ve("fixed inset-0 z-[60] bg-black/50 backdrop-blur-[1px]",e),...t}));Fy.displayName="DialogOverlay";const Ay=v.forwardRef(({className:e,children:t,...n},r)=>R.jsxs(RM,{children:[R.jsx(Fy,{}),R.jsxs(SM,{ref:r,className:Ve("fixed left-1/2 top-1/2 z-[70] w-[min(92vw,900px)] -translate-x-1/2 -translate-y-1/2","rounded-2xl border bg-white shadow-xl outline-none","max-h-[85vh] max-w-[92vw] flex flex-col overflow-hidden",e),...n,children:[R.jsx(Oy,{className:Ve("absolute right-3 top-3 h-8 w-8 rounded-xl text-zinc-500","hover:bg-zinc-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2"),"aria-label":"Закрыть",children:"×"}),t]})]}));Ay.displayName="DialogContent";function EM(e){return R.jsx("div",{className:Ve("border-b px-6 py-4",e.className),...e})}function _M(e){return R.jsx("h2",{className:Ve("text-lg font-semibold",e.className),...e})}function PM(e){return R.jsx("div",{className:Ve("px-6 py-5 flex-1 overflow-auto",e.className),...e})}function MM(e){return R.jsx("div",{className:Ve("border-t px-6 py-4 flex items-center justify-end gap-2",e.className),...e})}function jy(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e))for(t=0;ttypeof e=="boolean"?"".concat(e):e===0?"0":e,Zp=kM,DM=(e,t)=>n=>{var r;if((t==null?void 0:t.variants)==null)return Zp(e,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:o,defaultVariants:i}=t,l=Object.keys(o).map(u=>{const c=n==null?void 0:n[u],d=i==null?void 0:i[u];if(c===null)return null;const f=Yp(c)||Yp(d);return o[u][f]}),a=n&&Object.entries(n).reduce((u,c)=>{let[d,f]=c;return f===void 0||(u[d]=f),u},{}),s=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((u,c)=>{let{class:d,className:f,...p}=c;return Object.entries(p).every(y=>{let[m,S]=y;return Array.isArray(S)?S.includes({...i,...a}[m]):{...i,...a}[m]===S})?[...u,d,f]:u},[]);return Zp(e,l,s,n==null?void 0:n.class,n==null?void 0:n.className)},NM=DM("inline-flex items-center justify-center text-sm font-medium transition-colors rounded-[var(--radius)] focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none",{variants:{variant:{default:"bg-[var(--primary)] text-[var(--primary-foreground)] hover:opacity-90",outline:"border px-4 py-2 hover:bg-[var(--muted)]",ghost:"px-3 py-2 hover:bg-[var(--muted)]"},size:{sm:"h-8 px-3",md:"h-9 px-4",lg:"h-10 px-6"}},defaultVariants:{variant:"default",size:"md"}}),by=v.forwardRef(({className:e,variant:t,size:n,...r},o)=>R.jsx("button",{ref:o,className:Ve(NM({variant:t,size:n}),e),...r}));by.displayName="Button";function IM({open:e,schemaId:t,onOpenChange:n}){var u,c;const[r,o]=v.useState(!1),[i,l]=v.useState(null),[a,s]=v.useState(null);return v.useEffect(()=>{!e||t==null||(o(!0),l(null),s(null),(async()=>{try{const d=await fetch(`/api/schemas/${t}`);if(!d.ok)throw new Error(await d.text());const f=await d.json();s(f)}catch(d){l(String((d==null?void 0:d.message)??d))}finally{o(!1)}})())},[e,t]),R.jsx(xM,{open:e,onOpenChange:n,children:R.jsxs(Ay,{children:[R.jsx(EM,{children:R.jsx(_M,{children:"Просмотр схемы"})}),R.jsxs(PM,{children:[r&&R.jsx("div",{className:"text-sm",children:"Загрузка…"}),i&&R.jsxs("div",{className:"text-sm text-red-700",children:["Ошибка: ",i]}),a&&R.jsxs(R.Fragment,{children:[R.jsxs("div",{className:"grid grid-cols-[200px_1fr] gap-x-6 gap-y-2 text-sm",children:[R.jsx("div",{className:"text-zinc-500",children:"ID"}),R.jsx("div",{className:"break-words",children:a.id}),R.jsx("div",{className:"text-zinc-500",children:"Имя"}),R.jsx("div",{className:"break-words",children:a.name}),R.jsx("div",{className:"text-zinc-500",children:"Версия"}),R.jsx("div",{className:"break-words",children:a.version??""}),R.jsx("div",{className:"text-zinc-500",children:"Тип (имя)"}),R.jsx("div",{className:"break-words",children:((u=a.type)==null?void 0:u.title)??""}),R.jsx("div",{className:"text-zinc-500",children:"Тип (код)"}),R.jsx("div",{className:"break-words",children:((c=a.type)==null?void 0:c.code)??""}),R.jsx("div",{className:"text-zinc-500",children:"Namespace"}),R.jsx("div",{className:"break-words",children:a.namespace??""}),R.jsx("div",{className:"text-zinc-500",children:"Описание"}),R.jsx("div",{className:"break-words",children:a.description??""}),R.jsx("div",{className:"text-zinc-500",children:"Путь"}),R.jsx("div",{className:"break-all",children:a.file_path??""}),R.jsx("div",{className:"text-zinc-500",children:"Загружено"}),R.jsx("div",{className:"break-words",children:Sy(a.created_at)})]}),R.jsxs("details",{className:"rounded-2xl border mt-6",children:[R.jsx("summary",{className:"cursor-pointer select-none px-4 py-2 text-sm text-zinc-600",children:"JSON-представление"}),R.jsx("div",{className:"border-t p-3",children:R.jsx("pre",{className:"rounded-xl bg-zinc-50 p-3 text-xs overflow-auto",children:JSON.stringify(a,null,2)})})]})]})]}),R.jsx(MM,{children:R.jsx(CM,{asChild:!0,children:R.jsx(by,{autoFocus:!0,children:"Закрыть"})})})]})})}function Jp(){const[e,t]=v.useState(null),[n,r]=v.useState(null),[o,i]=v.useState(null),[l,a]=v.useState(!1),s=v.useMemo(()=>oM({onView:u=>{i(u),a(!0)}}),[]);return v.useEffect(()=>{fetch("/api/schemas").then(async u=>{if(!u.ok)throw new Error(await u.text());return u.json()}).then(u=>t(u)).catch(u=>r(String(u)))},[]),n?R.jsxs("div",{className:"p-6 text-red-700",children:["Ошибка: ",n]}):e?R.jsxs("div",{className:"p-6",children:[R.jsx(rM,{columns:s,data:e,initialVisibility:{id:!1,namespace:!1,file_path:!1,type_code:!1},initialSizing:{name:180,version:70,type_title:180,description:260,created_at:180,id:80,namespace:180,file_path:320,type_code:180,actions:64},initialPageSize:10}),R.jsx(IM,{open:l,schemaId:o,onOpenChange:u=>{u||i(null),a(u)}})]}):R.jsx("div",{className:"p-6",children:"Загрузка…"})}function TM(){return R.jsx("div",{className:"space-y-4",children:R.jsx("h1",{className:"text-xl font-semibold",children:"Загрузка XSD/XSL"})})}function LM(){return R.jsxs("div",{className:"text-sm text-neutral-500",children:["Детальный просмотр будет добавлен, когда появится эндпоинт /schemas/",id,"."]})}const OM=Kx([{path:"/",element:R.jsx(uC,{}),children:[{index:!0,element:R.jsx(Jp,{})},{path:"schemas",element:R.jsx(Jp,{})},{path:"schemas/upload",element:R.jsx(TM,{})},{path:"schemas/:id",element:R.jsx(LM,{})}]}],{basename:"/ui"});gm(document.getElementById("root")).render(R.jsx(on.StrictMode,{children:R.jsx(tC,{router:OM})})); diff --git a/app/static/assets/index-QKPzKNrt.css b/app/static/assets/index-QKPzKNrt.css deleted file mode 100644 index e5f04f0..0000000 --- a/app/static/assets/index-QKPzKNrt.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.mx-auto{margin-left:auto;margin-right:auto}.flex{display:flex}.table{display:table}.min-h-screen{min-height:100vh}.w-full{width:100%}.max-w-5xl{max-width:64rem}.items-center{align-items:center}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.p-4{padding:1rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.text-left{text-align:left}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity))}.text-neutral-500{--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity))}.underline{text-decoration-line:underline}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}html,body,#root{height:100%}.\[\&\>\*\]\:p-2>*{padding:.5rem} diff --git a/app/static/index.html b/app/static/index.html index 9990682..6fd882c 100644 --- a/app/static/index.html +++ b/app/static/index.html @@ -4,8 +4,8 @@ XSD Registry - - + +
    diff --git a/frontend/components.json b/frontend/components.json new file mode 100644 index 0000000..cfbafe2 --- /dev/null +++ b/frontend/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/styles/globals.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" +} \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 585ed7a..52d8eec 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,41 +8,29 @@ "name": "xsd-registry-ui", "version": "0.1.0", "dependencies": { - "@radix-ui/react-dialog": "1.1.1", - "@tanstack/react-table": "8.20.5", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@tanstack/react-table": "^8.21.3", "axios": "1.7.7", - "class-variance-authority": "0.7.0", - "clsx": "2.1.1", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "lucide-react": "^0.541.0", "react": "18.3.1", "react-dom": "18.3.1", - "react-hook-form": "7.53.0", "react-router-dom": "6.26.2", - "tailwind-merge": "2.5.2" + "tailwind-merge": "^2.5.2", + "tw-animate-css": "^1.3.7" }, "devDependencies": { + "@tailwindcss/vite": "^4.1.0", "@types/react": "18.3.5", "@types/react-dom": "18.3.0", "@vitejs/plugin-react": "^4.7.0", - "autoprefixer": "10.4.20", - "postcss": "8.4.45", - "tailwindcss": "3.4.9", + "tailwindcss": "^4.1.0", "typescript": "5.5.4", "vite": "5.4.2" } }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -740,22 +728,55 @@ "node": ">=12" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", + "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.4" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "dev": true, "license": "ISC", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "minipass": "^7.0.4" }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, "node_modules/@jridgewell/gen-mapping": { @@ -769,6 +790,17 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -797,65 +829,65 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@radix-ui/react-primitive": "2.1.3" }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", - "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", - "license": "MIT" - }, "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", - "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -868,9 +900,9 @@ } }, "node_modules/@radix-ui/react-context": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", - "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -883,25 +915,25 @@ } }, "node_modules/@radix-ui/react-dialog": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.1.tgz", - "integrity": "sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.0", - "@radix-ui/react-focus-guards": "1.1.0", - "@radix-ui/react-focus-scope": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-portal": "1.1.1", - "@radix-ui/react-presence": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.7" + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", @@ -918,17 +950,61 @@ } } }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz", - "integrity": "sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-escape-keydown": "1.1.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", @@ -946,9 +1022,9 @@ } }, "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz", - "integrity": "sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -961,14 +1037,14 @@ } }, "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", - "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -986,12 +1062,12 @@ } }, "node_modules/@radix-ui/react-id": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", - "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.0" + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -1003,14 +1079,86 @@ } } }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-portal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz", - "integrity": "sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-layout-effect": "1.1.0" + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -1028,13 +1176,13 @@ } }, "node_modules/@radix-ui/react-presence": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz", - "integrity": "sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -1052,12 +1200,43 @@ } }, "node_modules/@radix-ui/react-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", - "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.1.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", @@ -1075,12 +1254,12 @@ } }, "node_modules/@radix-ui/react-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", - "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0" + "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -1093,9 +1272,9 @@ } }, "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", - "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -1108,12 +1287,31 @@ } }, "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", - "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.0" + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -1126,12 +1324,12 @@ } }, "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", - "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.0" + "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -1144,10 +1342,46 @@ } }, "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", - "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -1158,6 +1392,12 @@ } } }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, "node_modules/@remix-run/router": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", @@ -1454,35 +1694,312 @@ "win32" ] }, - "node_modules/@tanstack/react-table": { - "version": "8.20.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.20.5.tgz", - "integrity": "sha512-WEHopKw3znbUZ61s9i0+i9g8drmDo6asTWbrQh8Us63DAk/M0FkmIqERew6P71HI75ksZ2Pxyuf4vvKh9rAkiA==", + "node_modules/@tailwindcss/node": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.12.tgz", + "integrity": "sha512-3hm9brwvQkZFe++SBt+oLjo4OLDtkvlE8q2WalaD/7QWaeM7KEJbAiY/LJZUaCs7Xa8aUu4xy3uoyX4q54UVdQ==", + "dev": true, "license": "MIT", "dependencies": { - "@tanstack/table-core": "8.20.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.5.1", + "lightningcss": "1.30.1", + "magic-string": "^0.30.17", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.12" } }, - "node_modules/@tanstack/table-core": { - "version": "8.20.5", - "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.20.5.tgz", - "integrity": "sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg==", + "node_modules/@tailwindcss/oxide": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.12.tgz", + "integrity": "sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw==", + "dev": true, + "hasInstallScript": true, "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, "engines": { - "node": ">=12" + "node": ">= 10" }, - "funding": { + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.12", + "@tailwindcss/oxide-darwin-arm64": "4.1.12", + "@tailwindcss/oxide-darwin-x64": "4.1.12", + "@tailwindcss/oxide-freebsd-x64": "4.1.12", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.12", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.12", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.12", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.12", + "@tailwindcss/oxide-linux-x64-musl": "4.1.12", + "@tailwindcss/oxide-wasm32-wasi": "4.1.12", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.12", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.12" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.12.tgz", + "integrity": "sha512-oNY5pq+1gc4T6QVTsZKwZaGpBb2N1H1fsc1GD4o7yinFySqIuRZ2E4NvGasWc6PhYJwGK2+5YT1f9Tp80zUQZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.12.tgz", + "integrity": "sha512-cq1qmq2HEtDV9HvZlTtrj671mCdGB93bVY6J29mwCyaMYCP/JaUBXxrQQQm7Qn33AXXASPUb2HFZlWiiHWFytw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.12.tgz", + "integrity": "sha512-6UCsIeFUcBfpangqlXay9Ffty9XhFH1QuUFn0WV83W8lGdX8cD5/+2ONLluALJD5+yJ7k8mVtwy3zMZmzEfbLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.12.tgz", + "integrity": "sha512-JOH/f7j6+nYXIrHobRYCtoArJdMJh5zy5lr0FV0Qu47MID/vqJAY3r/OElPzx1C/wdT1uS7cPq+xdYYelny1ww==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.12.tgz", + "integrity": "sha512-v4Ghvi9AU1SYgGr3/j38PD8PEe6bRfTnNSUE3YCMIRrrNigCFtHZ2TCm8142X8fcSqHBZBceDx+JlFJEfNg5zQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.12.tgz", + "integrity": "sha512-YP5s1LmetL9UsvVAKusHSyPlzSRqYyRB0f+Kl/xcYQSPLEw/BvGfxzbH+ihUciePDjiXwHh+p+qbSP3SlJw+6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.12.tgz", + "integrity": "sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.12.tgz", + "integrity": "sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.12.tgz", + "integrity": "sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.12.tgz", + "integrity": "sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.5", + "@emnapi/runtime": "^1.4.5", + "@emnapi/wasi-threads": "^1.0.4", + "@napi-rs/wasm-runtime": "^0.2.12", + "@tybys/wasm-util": "^0.10.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.12.tgz", + "integrity": "sha512-iGLyD/cVP724+FGtMWslhcFyg4xyYyM+5F4hGvKA7eifPkXHRAUDFaimu53fpNg9X8dfP75pXx/zFt/jlNF+lg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.12.tgz", + "integrity": "sha512-NKIh5rzw6CpEodv/++r0hGLlfgT/gFN+5WNdZtvh6wpU2BpGNgdjvj6H2oFc8nCM839QM1YOhjpgbAONUb4IxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.12.tgz", + "integrity": "sha512-4pt0AMFDx7gzIrAOIYgYP0KCBuKWqyW8ayrdiLEjoJTT4pKTjrzG/e4uzWtTLDziC+66R9wbUqZBccJalSE5vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.12", + "@tailwindcss/oxide": "4.1.12", + "tailwindcss": "4.1.12" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@tanstack/react-table": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.21.3.tgz", + "integrity": "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==", + "license": "MIT", + "dependencies": { + "@tanstack/table-core": "8.21.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", + "integrity": "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } @@ -1539,6 +2056,18 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/node": { + "version": "22.18.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.0.tgz", + "integrity": "sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, "node_modules/@types/prop-types": { "version": "15.7.15", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", @@ -1588,60 +2117,6 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, - "node_modules/ansi-regex": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", - "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, - "license": "MIT" - }, "node_modules/aria-hidden": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", @@ -1660,44 +2135,6 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, - "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, "node_modules/axios": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", @@ -1709,49 +2146,6 @@ "proxy-from-env": "^1.1.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/browserslist": { "version": "4.25.3", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.3.tgz", @@ -1798,16 +2192,6 @@ "node": ">= 0.4" } }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/caniuse-lite": { "version": "1.0.30001737", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001737.tgz", @@ -1829,42 +2213,14 @@ ], "license": "CC-BY-4.0" }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 6" + "node": ">=18" } }, "node_modules/class-variance-authority": { @@ -1897,26 +2253,6 @@ "node": ">=6" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1929,16 +2265,6 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -1946,34 +2272,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -2008,26 +2306,22 @@ "node": ">=0.4.0" } }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", "license": "MIT" }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, - "license": "MIT" - }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -2042,13 +2336,6 @@ "node": ">= 0.4" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, "node_modules/electron-to-chromium": { "version": "1.5.208", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.208.tgz", @@ -2056,12 +2343,19 @@ "dev": true, "license": "ISC" }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } }, "node_modules/es-define-property": { "version": "1.0.1", @@ -2157,59 +2451,6 @@ "node": ">=6" } }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/follow-redirects": { "version": "1.15.11", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", @@ -2230,23 +2471,6 @@ } } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/form-data": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", @@ -2257,24 +2481,10 @@ "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" + "mime-types": "^2.1.12" }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" + "engines": { + "node": ">= 6" } }, "node_modules/fsevents": { @@ -2357,40 +2567,6 @@ "node": ">= 0.4" } }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -2403,6 +2579,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -2442,159 +2625,286 @@ "node": ">= 0.4" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/jiti": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", + "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", "dev": true, "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" + "bin": { + "jiti": "lib/jiti-cli.mjs" } }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", "dev": true, - "license": "MIT", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, "engines": { - "node": ">=8" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.10.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=0.12.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], "dev": true, - "license": "ISC" + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=10" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, "node_modules/loose-envify": { "version": "1.4.0", @@ -2608,12 +2918,24 @@ "loose-envify": "cli.js" } }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "node_modules/lucide-react": { + "version": "0.541.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.541.0.tgz", + "integrity": "sha512-s0Vircsu5WaGv2KoJZ5+SoxiAJ3UXV5KqEM3eIFDHaHkcLIFdIWgXtZ412+Gh02UsdS7Was+jvEpBvPCWQISlg==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.18", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.18.tgz", + "integrity": "sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } }, "node_modules/math-intrinsics": { "version": "1.1.0", @@ -2624,30 +2946,6 @@ "node": ">= 0.4" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -2663,38 +2961,51 @@ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" }, "engines": { - "node": ">= 0.6" + "node": ">= 18" } }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -2702,18 +3013,6 @@ "dev": true, "license": "MIT" }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -2740,87 +3039,6 @@ "dev": true, "license": "MIT" }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -2828,39 +3046,6 @@ "dev": true, "license": "ISC" }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/postcss": { "version": "8.4.45", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz", @@ -2890,167 +3075,12 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", @@ -3076,22 +3106,6 @@ "react": "^18.3.1" } }, - "node_modules/react-hook-form": { - "version": "7.53.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.0.tgz", - "integrity": "sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-hook-form" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18 || ^19" - } - }, "node_modules/react-refresh": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", @@ -3103,23 +3117,23 @@ } }, "node_modules/react-remove-scroll": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz", - "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", + "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", "license": "MIT", "dependencies": { - "react-remove-scroll-bar": "^2.3.4", - "react-style-singleton": "^2.2.1", + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -3171,91 +3185,36 @@ "license": "MIT", "dependencies": { "@remix-run/router": "1.19.2", - "react-router": "6.26.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, - "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", - "license": "MIT", - "dependencies": { - "get-nonce": "^1.0.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "react-router": "6.26.2" }, "engines": { - "node": ">= 0.4" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/rollup": { @@ -3298,30 +3257,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -3341,42 +3276,6 @@ "semver": "bin/semver.js" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -3387,146 +3286,6 @@ "node": ">=0.10.0" } }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/tailwind-merge": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.2.tgz", @@ -3538,85 +3297,53 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.9.tgz", - "integrity": "sha512-1SEOvRr6sSdV5IDf9iC+NU4dhwdqzF4zKKq3sAbasUWHEM6lsMhX+eNN5gkPx1BvLFEnZQEUFbXnGj8Qlp83Pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.0", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.12.tgz", + "integrity": "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==", "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } + "license": "MIT" }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "node_modules/tapable": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz", + "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==", "dev": true, "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, "engines": { - "node": ">=0.8" + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "is-number": "^7.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" }, "engines": { - "node": ">=8.0" + "node": ">=18" } }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "license": "Apache-2.0" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } }, "node_modules/tslib": { "version": "2.8.1", @@ -3624,6 +3351,15 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/tw-animate-css": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.3.7.tgz", + "integrity": "sha512-lvLb3hTIpB5oGsk8JmLoAjeCHV58nKa2zHYn8yWOoG5JJusH3bhJlF2DLAZ/5NmJ+jyH3ssiAx/2KmbhavJy/A==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Wombosvideo" + } + }, "node_modules/typescript": { "version": "5.5.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", @@ -3638,6 +3374,15 @@ "node": ">=14.17" } }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -3712,13 +3457,6 @@ } } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, "node_modules/vite": { "version": "5.4.2", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz", @@ -3779,139 +3517,12 @@ } } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - } } } } diff --git a/frontend/package.json b/frontend/package.json index 2537b9f..66c0b14 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,24 +9,25 @@ "preview": "vite preview --port 4173" }, "dependencies": { - "@radix-ui/react-dialog": "1.1.1", - "@tanstack/react-table": "8.20.5", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@tanstack/react-table": "^8.21.3", "axios": "1.7.7", - "class-variance-authority": "0.7.0", - "clsx": "2.1.1", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "lucide-react": "^0.541.0", "react": "18.3.1", "react-dom": "18.3.1", - "react-hook-form": "7.53.0", "react-router-dom": "6.26.2", - "tailwind-merge": "2.5.2" + "tailwind-merge": "^2.5.2", + "tw-animate-css": "^1.3.7" }, "devDependencies": { + "@tailwindcss/vite": "^4.1.0", "@types/react": "18.3.5", "@types/react-dom": "18.3.0", "@vitejs/plugin-react": "^4.7.0", - "autoprefixer": "10.4.20", - "postcss": "8.4.45", - "tailwindcss": "3.4.9", + "tailwindcss": "^4.1.0", "typescript": "5.5.4", "vite": "5.4.2" } diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js deleted file mode 100644 index 2b75bd8..0000000 --- a/frontend/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {} - } -} diff --git a/frontend/src/components/ui/button.tsx b/frontend/src/components/ui/button.tsx index 782248a..d099b5f 100644 --- a/frontend/src/components/ui/button.tsx +++ b/frontend/src/components/ui/button.tsx @@ -1,7 +1,33 @@ -import { ButtonHTMLAttributes } from 'react' -import { clsx } from 'clsx' +import * as React from "react"; +import { cva, type VariantProps } from "class-variance-authority"; +import { cn } from "@/lib/utils"; -export function Button(props: ButtonHTMLAttributes) { - const { className, ...rest } = props - return + + + {leaf.filter(c => c.getCanHide()).map((c) => ( + e.preventDefault()}> + + + ))} + + + + +
    +
    + {/* width суммируется из размеров колонок; есть fallback min-w */} + + + {table.getHeaderGroups().map((hg) => ( + + {hg.headers.map((h) => ( + + {h.isPlaceholder ? null : flexRender(h.column.columnDef.header, h.getContext())} + + ))} + + ))} + + + {table.getRowModel().rows.length ? ( + table.getRowModel().rows.map((r) => ( + + {r.getVisibleCells().map((cell) => ( + + {flexRender(cell.column.columnDef.cell, cell.getContext())} + + ))} + + )) + ) : ( + + + Нет данных + + + )} + +
    +
    +
    + {/* Pagination bar */} +
    +
    + Показывать по: + +
    +
    + + + + стр. {table.getState().pagination.pageIndex + 1} из {table.getPageCount()} + + + +
    +
    + + ); +} diff --git a/frontend/src/components/ui/dialog.tsx b/frontend/src/components/ui/dialog.tsx new file mode 100644 index 0000000..9d0923b --- /dev/null +++ b/frontend/src/components/ui/dialog.tsx @@ -0,0 +1,74 @@ +"use client"; + +import * as React from "react"; +import * as DialogPrimitive from "@radix-ui/react-dialog"; +import { cn } from "@/lib/utils"; + +export const Dialog = DialogPrimitive.Root; +export const DialogTrigger = DialogPrimitive.Trigger; +export const DialogClose = DialogPrimitive.Close; + +export function DialogPortal(props: DialogPrimitive.DialogPortalProps) { + return ; +} + +export const DialogOverlay = React.forwardRef< + HTMLDivElement, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DialogOverlay.displayName = "DialogOverlay"; + +export const DialogContent = React.forwardRef< + HTMLDivElement, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + {/* Кнопка-крестик (закрыть диалог) */} + + × + + {children} + + +)); +DialogContent.displayName = "DialogContent"; + +export function DialogHeader(props: React.HTMLAttributes) { + return
    ; +} +export function DialogTitle(props: React.HTMLAttributes) { + return

    ; +} +export function DialogDescription(props: React.HTMLAttributes) { + return

    ; +} +export function DialogBody(props: React.HTMLAttributes) { + // внутренняя прокрутка только у тела + return

    ; +} +export function DialogFooter(props: React.HTMLAttributes) { + return
    ; +} diff --git a/frontend/src/components/ui/dropdown-menu.tsx b/frontend/src/components/ui/dropdown-menu.tsx new file mode 100644 index 0000000..e7ff0ab --- /dev/null +++ b/frontend/src/components/ui/dropdown-menu.tsx @@ -0,0 +1,57 @@ +"use client"; + +import * as React from "react"; +import * as R from "@radix-ui/react-dropdown-menu"; +import { cn } from "@/lib/utils"; + +export const DropdownMenu = R.Root; +export const DropdownMenuTrigger = R.Trigger; + +export const DropdownMenuContent = React.forwardRef< + HTMLDivElement, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)); +DropdownMenuContent.displayName = "DropdownMenuContent"; + +export const DropdownMenuLabel = React.forwardRef< + HTMLDivElement, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DropdownMenuLabel.displayName = "DropdownMenuLabel"; + +export const DropdownMenuSeparator = React.forwardRef< + HTMLDivElement, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DropdownMenuSeparator.displayName = "DropdownMenuSeparator"; + +export const DropdownMenuItem = React.forwardRef< + HTMLDivElement, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DropdownMenuItem.displayName = "DropdownMenuItem"; diff --git a/frontend/src/components/ui/input.tsx b/frontend/src/components/ui/input.tsx index bd060c5..fb86e11 100644 --- a/frontend/src/components/ui/input.tsx +++ b/frontend/src/components/ui/input.tsx @@ -1,8 +1,19 @@ -import { InputHTMLAttributes, forwardRef } from 'react' -import { clsx } from 'clsx' +import * as React from "react"; +import { cn } from "@/lib/utils"; -export const Input = forwardRef>(function Input( - { className, ...rest }, ref -) { - return -}) +export interface InputProps extends React.InputHTMLAttributes {} + +export const Input = React.forwardRef(({ className, ...props }, ref) => { + return ( + + ); +}); +Input.displayName = "Input"; diff --git a/frontend/src/components/ui/label.tsx b/frontend/src/components/ui/label.tsx new file mode 100644 index 0000000..d6afe71 --- /dev/null +++ b/frontend/src/components/ui/label.tsx @@ -0,0 +1,8 @@ +import * as React from "react"; +import { cn } from "@/lib/utils"; + +export interface LabelProps extends React.LabelHTMLAttributes {} + +export function Label({ className, ...props }: LabelProps) { + return