From caedaaa86e7f3f07c9167c3a702030c4347f7039 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Wed, 6 Nov 2024 18:11:38 -0500 Subject: [PATCH 01/56] Create backend model --- .gitignore | 10 +++++++++ ami/jobs/migrations/0011_alter_job_limit.py | 23 +++++++++++++++++++ ami/ml/migrations/0007_backend.py | 25 +++++++++++++++++++++ ami/ml/models/__init__.py | 1 + ami/ml/models/backend.py | 15 +++++++++++++ ami/ml/serializers.py | 7 ++++++ config/api_router.py | 1 + 7 files changed, 82 insertions(+) create mode 100644 ami/jobs/migrations/0011_alter_job_limit.py create mode 100644 ami/ml/migrations/0007_backend.py create mode 100644 ami/ml/models/backend.py diff --git a/.gitignore b/.gitignore index d4874b75c..5f7220662 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,13 @@ +ami_env/* +543_env/* +.gitignore +ui/public/* +*.png +*.ico +.git/* +.*/ +*.csv + ### Python template # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/ami/jobs/migrations/0011_alter_job_limit.py b/ami/jobs/migrations/0011_alter_job_limit.py new file mode 100644 index 000000000..3ed7e9c06 --- /dev/null +++ b/ami/jobs/migrations/0011_alter_job_limit.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.10 on 2024-11-03 23:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("jobs", "0010_job_limit_job_shuffle"), + ] + + operations = [ + migrations.AlterField( + model_name="job", + name="limit", + field=models.IntegerField( + blank=True, + default=None, + help_text="Limit the number of images to process", + null=True, + verbose_name="Limit", + ), + ), + ] diff --git a/ami/ml/migrations/0007_backend.py b/ami/ml/migrations/0007_backend.py new file mode 100644 index 000000000..67d216231 --- /dev/null +++ b/ami/ml/migrations/0007_backend.py @@ -0,0 +1,25 @@ +# Generated by Django 4.2.10 on 2024-11-03 23:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("main", "0038_alter_detection_path_alter_sourceimage_event_and_more"), + ("ml", "0006_alter_pipeline_endpoint_url_alter_pipeline_projects"), + ] + + operations = [ + migrations.CreateModel( + name="Backend", + fields=[ + ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), + ("endpoint_url", models.CharField(blank=True, max_length=1024, null=True)), + ("projects", models.ManyToManyField(blank=True, related_name="backends", to="main.project")), + ], + options={ + "verbose_name": "Backend", + "verbose_name_plural": "Backends", + }, + ), + ] diff --git a/ami/ml/models/__init__.py b/ami/ml/models/__init__.py index ba011027c..d6995ac89 100644 --- a/ami/ml/models/__init__.py +++ b/ami/ml/models/__init__.py @@ -4,4 +4,5 @@ __all__ = [ "Algorithm", "Pipeline", + "Backend", ] diff --git a/ami/ml/models/backend.py b/ami/ml/models/backend.py new file mode 100644 index 000000000..37f5370f8 --- /dev/null +++ b/ami/ml/models/backend.py @@ -0,0 +1,15 @@ +from django.db import models + + +class Backend(models.Model): + """An ML processing backend""" + + projects = models.ManyToManyField("main.Project", related_name="backends", blank=True) + endpoint_url = models.CharField(max_length=1024, null=True, blank=True) + + def __str__(self): + return self.endpoint_url + + class Meta: + verbose_name = "Backend" + verbose_name_plural = "Backends" diff --git a/ami/ml/serializers.py b/ami/ml/serializers.py index 30ff8c962..051a8dfb3 100644 --- a/ami/ml/serializers.py +++ b/ami/ml/serializers.py @@ -3,6 +3,7 @@ from ami.main.api.serializers import DefaultSerializer from .models.algorithm import Algorithm +from .models.backend import Backend from .models.pipeline import Pipeline, PipelineStage @@ -70,3 +71,9 @@ class Meta: "version", "version_name", ] + + +class BackendSerializer(DefaultSerializer): + class Meta: + model = Backend + fields = ["id", "details", "projects", "endpoint_url"] diff --git a/config/api_router.py b/config/api_router.py index 8950a3820..cadaafd3a 100644 --- a/config/api_router.py +++ b/config/api_router.py @@ -29,6 +29,7 @@ router.register(r"taxa", views.TaxonViewSet) router.register(r"ml/algorithms", ml_views.AlgorithmViewSet) router.register(r"ml/pipelines", ml_views.PipelineViewSet) +router.register(r"ml/backends", ml_views.BackendViewSet) router.register(r"classifications", views.ClassificationViewSet) router.register(r"identifications", views.IdentificationViewSet) router.register(r"jobs", job_views.JobViewSet) From 49bea0baf5f47801b2c4c51168948c6ad1babcd3 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Wed, 6 Nov 2024 19:21:56 -0500 Subject: [PATCH 02/56] Create backend status endpoint --- ami/ml/schemas.py | 33 +++++++++++++++++++++++++++++ ami/ml/views.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 85 insertions(+), 1 deletion(-) diff --git a/ami/ml/schemas.py b/ami/ml/schemas.py index ea7266e14..97368c6ca 100644 --- a/ami/ml/schemas.py +++ b/ami/ml/schemas.py @@ -65,3 +65,36 @@ class PipelineResponse(pydantic.BaseModel): total_time: float source_images: list[SourceImageResponse] detections: list[DetectionResponse] + + +class PipelineStageParam(pydantic.BaseModel): + """A configurable parameter of a stage of a pipeline.""" + + name: str + key: str + category: str = "default" + + +class PipelineStage(pydantic.BaseModel): + """A configurable stage of a pipeline.""" + + key: str + name: str + params: list[PipelineStageParam] = [] + description: str | None = None + + +class PipelineConfig(pydantic.BaseModel): + """A configurable pipeline.""" + + name: str + slug: str + description: str | None = None + stages: list[PipelineStage] = [] + + +class BackendResponse(pydantic.BaseModel): + timestamp: datetime.datetime + success: bool + pipeline_configs: list[PipelineConfig] = [] + error: str | None = None diff --git a/ami/ml/views.py b/ami/ml/views.py index b110373d1..7ca9f219e 100644 --- a/ami/ml/views.py +++ b/ami/ml/views.py @@ -1,8 +1,20 @@ +import datetime +import logging +from urllib.parse import urljoin + +import requests +from rest_framework.decorators import action +from rest_framework.response import Response + from ami.main.api.views import DefaultViewSet from .models.algorithm import Algorithm +from .models.backend import Backend from .models.pipeline import Pipeline -from .serializers import AlgorithmSerializer, PipelineSerializer +from .schemas import BackendResponse +from .serializers import AlgorithmSerializer, BackendSerializer, PipelineSerializer + +logger = logging.getLogger(__name__) class AlgorithmViewSet(DefaultViewSet): @@ -38,3 +50,42 @@ class PipelineViewSet(DefaultViewSet): # Don't enable projects filter until we can use the current users # membership to filter the projects. # filterset_fields = ["projects"] + + +class BackendViewSet(DefaultViewSet): + """ + API endpoint that allows ML processing backends to be viewed or edited. + """ + + queryset = Backend.objects.all() + serializer_class = BackendSerializer + filterset_fields = ["projects"] + ordering_fields = ["id"] + + @action(detail=True, methods=["get"]) + def status(self, request, pk=None): + backend = Backend.objects.get(pk=pk) + endpoint_url = backend.endpoint_url + info_url = urljoin(endpoint_url, "info") + + resp = requests.get(info_url) + if not resp.ok: + try: + msg = resp.json()["detail"] + except Exception: + msg = resp.content + + logger.error(msg) + + timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + pipeline_configs = resp.json() if resp.ok else [] + error = f"{resp.status_code} - {msg}" if not resp.ok else None + + response = BackendResponse( + timestamp=timestamp, + success=resp.ok, + pipeline_configs=pipeline_configs, + error=error, + ) + + return Response(response.dict()) From a7116d549facb2615085cfe0674812f74dd35d77 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Wed, 6 Nov 2024 20:37:21 -0500 Subject: [PATCH 03/56] Return server status and available pipelines --- ami/ml/schemas.py | 2 ++ ami/ml/views.py | 11 ++++++++++- ml_backends/example/api/api.py | 6 ++++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ami/ml/schemas.py b/ami/ml/schemas.py index 97368c6ca..dd9be2542 100644 --- a/ami/ml/schemas.py +++ b/ami/ml/schemas.py @@ -98,3 +98,5 @@ class BackendResponse(pydantic.BaseModel): success: bool pipeline_configs: list[PipelineConfig] = [] error: str | None = None + server_online: str + pipelines_online: list[str] | str diff --git a/ami/ml/views.py b/ami/ml/views.py index 7ca9f219e..603db47d1 100644 --- a/ami/ml/views.py +++ b/ami/ml/views.py @@ -4,6 +4,7 @@ import requests from rest_framework.decorators import action +from rest_framework.request import Request from rest_framework.response import Response from ami.main.api.views import DefaultViewSet @@ -63,7 +64,10 @@ class BackendViewSet(DefaultViewSet): ordering_fields = ["id"] @action(detail=True, methods=["get"]) - def status(self, request, pk=None): + def status(self, request: Request, pk=None) -> Response: + """ + Test the connection to the processing backend. + """ backend = Backend.objects.get(pk=pk) endpoint_url = backend.endpoint_url info_url = urljoin(endpoint_url, "info") @@ -81,9 +85,14 @@ def status(self, request, pk=None): pipeline_configs = resp.json() if resp.ok else [] error = f"{resp.status_code} - {msg}" if not resp.ok else None + server_live = requests.get(urljoin(endpoint_url, "livez")).json().get("status") + pipelines_online = requests.get(urljoin(endpoint_url, "readyz")).json().get("status") + response = BackendResponse( timestamp=timestamp, success=resp.ok, + server_online=server_live, + pipelines_online=pipelines_online, pipeline_configs=pipeline_configs, error=error, ) diff --git a/ml_backends/example/api/api.py b/ml_backends/example/api/api.py index f676e6f2c..451e0c717 100644 --- a/ml_backends/example/api/api.py +++ b/ml_backends/example/api/api.py @@ -50,11 +50,13 @@ async def livez(): return fastapi.responses.JSONResponse(status_code=200, content={"status": "ok"}) -# Check if the server is ready to process data +# Check if the pipelines are ready to process data @app.get("/readyz", tags=["health checks"]) async def readyz(): if pipelines: - return fastapi.responses.JSONResponse(status_code=200, content={"status": "ok"}) + return fastapi.responses.JSONResponse( + status_code=200, content={"status": [pipeline.name for pipeline in pipelines]} + ) else: return fastapi.responses.JSONResponse(status_code=503, content={"status": "pipelines unavailable"}) From 27d4792c313a7adde614e44ef468ef4f736654fd Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Wed, 6 Nov 2024 20:41:45 -0500 Subject: [PATCH 04/56] Use pipeline slug --- ml_backends/example/api/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ml_backends/example/api/api.py b/ml_backends/example/api/api.py index 451e0c717..759bf9df5 100644 --- a/ml_backends/example/api/api.py +++ b/ml_backends/example/api/api.py @@ -55,7 +55,7 @@ async def livez(): async def readyz(): if pipelines: return fastapi.responses.JSONResponse( - status_code=200, content={"status": [pipeline.name for pipeline in pipelines]} + status_code=200, content={"status": [pipeline.slug for pipeline in pipelines]} ) else: return fastapi.responses.JSONResponse(status_code=503, content={"status": "pipelines unavailable"}) From a8bb218d9d1cf3045c3804f8ba145a2efe935161 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Thu, 7 Nov 2024 17:56:42 -0500 Subject: [PATCH 05/56] Fix .gitignore --- .gitignore | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.gitignore b/.gitignore index 5f7220662..d4874b75c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,3 @@ -ami_env/* -543_env/* -.gitignore -ui/public/* -*.png -*.ico -.git/* -.*/ -*.csv - ### Python template # Byte-compiled / optimized / DLL files __pycache__/ From a1dfcc0d8368c735034562d801f71bf7575cea9f Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Mon, 11 Nov 2024 16:01:49 -0500 Subject: [PATCH 06/56] Update backend status endpoint, test pipeline process images --- ..._pipeline_endpoint_url_pipeline_backend.py | 24 ++++++ ami/ml/models/backend.py | 85 +++++++++++++++++++ ami/ml/models/pipeline.py | 12 ++- ami/ml/schemas.py | 13 +++ ami/ml/serializers.py | 2 +- ami/ml/views.py | 49 ++++------- ml_backends/example/api/schemas.py | 12 +++ 7 files changed, 160 insertions(+), 37 deletions(-) create mode 100644 ami/ml/migrations/0008_remove_pipeline_endpoint_url_pipeline_backend.py diff --git a/ami/ml/migrations/0008_remove_pipeline_endpoint_url_pipeline_backend.py b/ami/ml/migrations/0008_remove_pipeline_endpoint_url_pipeline_backend.py new file mode 100644 index 000000000..67365f249 --- /dev/null +++ b/ami/ml/migrations/0008_remove_pipeline_endpoint_url_pipeline_backend.py @@ -0,0 +1,24 @@ +# Generated by Django 4.2.10 on 2024-11-07 19:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + dependencies = [ + ("ml", "0007_backend"), + ] + + operations = [ + migrations.RemoveField( + model_name="pipeline", + name="endpoint_url", + ), + migrations.AddField( + model_name="pipeline", + name="backend", + field=models.ForeignKey( + null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="pipelines", to="ml.backend" + ), + ), + ] diff --git a/ami/ml/models/backend.py b/ami/ml/models/backend.py index 37f5370f8..e6cf7a892 100644 --- a/ami/ml/models/backend.py +++ b/ami/ml/models/backend.py @@ -1,5 +1,18 @@ +import datetime +import logging +from urllib.parse import urljoin + +import requests from django.db import models +from ami.main.models import Project +from ami.ml.schemas import BackendResponse + +from .algorithm import Algorithm +from .pipeline import Pipeline + +logger = logging.getLogger(__name__) + class Backend(models.Model): """An ML processing backend""" @@ -13,3 +26,75 @@ def __str__(self): class Meta: verbose_name = "Backend" verbose_name_plural = "Backends" + + def create_pipelines(self): + # Call the status endpoint and get the pipelines/algorithms + resp = requests.get(urljoin(self.endpoint_url, "status")) + pipelines_to_add = resp.data.get("pipeline_configs") + + for pipeline_data in pipelines_to_add: + pipeline, created = Pipeline.objects.get_or_create( + name=pipeline_data["name"], + slug=pipeline_data["slug"], + version=pipeline_data["version"], + ) + + if created: + logger.info(f'Successfully created pipeline {pipeline_data["name"]}.') + else: + logger.info(f'Using existing pipeline {pipeline_data["name"]}.') + + for algorithm_data in pipeline_data["algorithms"]: + algorithm, created = Algorithm.objects.get_or_create( + name=algorithm_data["name"], key=algorithm_data["key"] + ) + pipeline.algorithms.add(algorithm) + + if created: + logger.info(f'Successfully created algorithm {algorithm_data["name"]}.') + else: + logger.info(f'Using existing algorithm {algorithm_data["name"]}.') + + for project_data in pipeline_data["projects"]: + project, created = Project.objects.get_or_create(name=project_data["name"]) + pipeline.projects.add(project) + + if created: + logger.info(f'Successfully created project {project_data["name"]}.') + else: + logger.info(f'Using existing project {project_data["name"]}.') + + # @TODO: Add pipeline description and stages + + pipeline.save() + + def get_status(self): + info_url = urljoin(self.endpoint_url, "info") + + resp = requests.get(info_url) + if not resp.ok: + try: + msg = resp.json()["detail"] + except Exception: + msg = resp.content + + logger.error(msg) + + timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + pipeline_configs = resp.json() if resp.ok else [] + error = f"{resp.status_code} - {msg}" if not resp.ok else None + + server_live = requests.get(urljoin(self.endpoint_url, "livez")).json().get("status") + pipelines_online = requests.get(urljoin(self.endpoint_url, "readyz")).json().get("status") + + response = BackendResponse( + timestamp=timestamp, + success=resp.ok, + server_online=server_live, + pipelines_online=pipelines_online, + pipeline_configs=pipeline_configs, + endpoint_url=self.endpoint_url, + error=error, + ) + + return response diff --git a/ami/ml/models/pipeline.py b/ami/ml/models/pipeline.py index 86e3781d6..91e601cb0 100644 --- a/ami/ml/models/pipeline.py +++ b/ami/ml/models/pipeline.py @@ -1,5 +1,6 @@ import logging import typing +from urllib.parse import urljoin import requests from django.db import models, transaction @@ -404,7 +405,12 @@ class Pipeline(BaseModel): ), ) projects = models.ManyToManyField("main.Project", related_name="pipelines", blank=True) - endpoint_url = models.CharField(max_length=1024, null=True, blank=True) + backend = models.ForeignKey( + "ml.Backend", + on_delete=models.SET_NULL, # TODO: Pipelines should support multiple backends + related_name="pipelines", + null=True, + ) class Meta: ordering = ["name", "version"] @@ -431,10 +437,10 @@ def collect_images( ) def process_images(self, images: typing.Iterable[SourceImage], job_id: int | None = None): - if not self.endpoint_url: + if not self.backend.endpoint_url: raise ValueError("No endpoint URL configured for this pipeline") return process_images( - endpoint_url=self.endpoint_url, + endpoint_url=urljoin(self.backend.endpoint_url, "/process_images"), pipeline=self, images=images, job_id=job_id, diff --git a/ami/ml/schemas.py b/ami/ml/schemas.py index dd9be2542..d45a8c723 100644 --- a/ami/ml/schemas.py +++ b/ami/ml/schemas.py @@ -84,13 +84,25 @@ class PipelineStage(pydantic.BaseModel): description: str | None = None +class ProjectConfig(pydantic.BaseModel): + name: str + + +class AlgorithmConfig(pydantic.BaseModel): + name: str + key: str + + class PipelineConfig(pydantic.BaseModel): """A configurable pipeline.""" name: str slug: str + version: int description: str | None = None + algorithms: list[AlgorithmConfig] = [] stages: list[PipelineStage] = [] + projects: list[ProjectConfig] = [] class BackendResponse(pydantic.BaseModel): @@ -100,3 +112,4 @@ class BackendResponse(pydantic.BaseModel): error: str | None = None server_online: str pipelines_online: list[str] | str + endpoint_url: str diff --git a/ami/ml/serializers.py b/ami/ml/serializers.py index 051a8dfb3..79a4c4cc6 100644 --- a/ami/ml/serializers.py +++ b/ami/ml/serializers.py @@ -53,7 +53,7 @@ class Meta: "version_name", "algorithms", "stages", - "endpoint_url", + "backend", "created_at", "updated_at", ] diff --git a/ami/ml/views.py b/ami/ml/views.py index 603db47d1..f52ece1ff 100644 --- a/ami/ml/views.py +++ b/ami/ml/views.py @@ -1,18 +1,15 @@ -import datetime import logging -from urllib.parse import urljoin -import requests from rest_framework.decorators import action from rest_framework.request import Request from rest_framework.response import Response from ami.main.api.views import DefaultViewSet +from ami.main.models import SourceImage from .models.algorithm import Algorithm from .models.backend import Backend from .models.pipeline import Pipeline -from .schemas import BackendResponse from .serializers import AlgorithmSerializer, BackendSerializer, PipelineSerializer logger = logging.getLogger(__name__) @@ -52,6 +49,19 @@ class PipelineViewSet(DefaultViewSet): # membership to filter the projects. # filterset_fields = ["projects"] + @action(detail=True, methods=["post"]) + def test_process(self, request: Request, pk=None) -> Response: + """ + Process images using the pipeline. + """ + pipeline = Pipeline.objects.get(pk=pk) + random_image = ( + SourceImage.objects.all().order_by("?").first() + ) # TODO: Filter images by projects user has access to + results = pipeline.process_images(images=[random_image], job_id=None) + # @TODO: Add error or info messages to the response if image already processed or no detections returned + return Response(results.dict()) + class BackendViewSet(DefaultViewSet): """ @@ -61,7 +71,7 @@ class BackendViewSet(DefaultViewSet): queryset = Backend.objects.all() serializer_class = BackendSerializer filterset_fields = ["projects"] - ordering_fields = ["id"] + ordering_fields = ["id", "created_at", "updated_at"] @action(detail=True, methods=["get"]) def status(self, request: Request, pk=None) -> Response: @@ -69,32 +79,5 @@ def status(self, request: Request, pk=None) -> Response: Test the connection to the processing backend. """ backend = Backend.objects.get(pk=pk) - endpoint_url = backend.endpoint_url - info_url = urljoin(endpoint_url, "info") - - resp = requests.get(info_url) - if not resp.ok: - try: - msg = resp.json()["detail"] - except Exception: - msg = resp.content - - logger.error(msg) - - timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - pipeline_configs = resp.json() if resp.ok else [] - error = f"{resp.status_code} - {msg}" if not resp.ok else None - - server_live = requests.get(urljoin(endpoint_url, "livez")).json().get("status") - pipelines_online = requests.get(urljoin(endpoint_url, "readyz")).json().get("status") - - response = BackendResponse( - timestamp=timestamp, - success=resp.ok, - server_online=server_live, - pipelines_online=pipelines_online, - pipeline_configs=pipeline_configs, - error=error, - ) - + response = backend.get_status() return Response(response.dict()) diff --git a/ml_backends/example/api/schemas.py b/ml_backends/example/api/schemas.py index 81751d5cd..e1dec67de 100644 --- a/ml_backends/example/api/schemas.py +++ b/ml_backends/example/api/schemas.py @@ -148,10 +148,22 @@ class PipelineStage(pydantic.BaseModel): description: str | None = None +class ProjectConfig(pydantic.BaseModel): + name: str + + +class AlgorithmConfig(pydantic.BaseModel): + name: str + key: str + + class PipelineConfig(pydantic.BaseModel): """A configurable pipeline.""" name: str slug: str + version: int description: str | None = None + algorithms: list[AlgorithmConfig] = [] stages: list[PipelineStage] = [] + projects: list[ProjectConfig] = [] From a66ab33f2bdc13d676520e708568de5ac6741a00 Mon Sep 17 00:00:00 2001 From: Michael Bunsen Date: Tue, 19 Nov 2024 16:50:43 -0800 Subject: [PATCH 07/56] fix: missing import in ml models --- ami/ml/models/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ami/ml/models/__init__.py b/ami/ml/models/__init__.py index d6995ac89..4505b9482 100644 --- a/ami/ml/models/__init__.py +++ b/ami/ml/models/__init__.py @@ -1,4 +1,5 @@ from .algorithm import Algorithm +from .backend import Backend from .pipeline import Pipeline __all__ = [ From c0ca4a31f79de9e2b30a562dcfb5f2a2e45d6362 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Sun, 24 Nov 2024 17:32:41 -0500 Subject: [PATCH 08/56] Add Backend to admin, update pipeline/backend model, register_pipelines action --- ami/ml/admin.py | 9 +++ ...move_pipeline_backend_backend_pipelines.py | 21 +++++++ ...0_backend_created_at_backend_updated_at.py | 24 ++++++++ ami/ml/models/backend.py | 61 ++++++++++++------- ami/ml/models/pipeline.py | 49 ++++++++------- ami/ml/schemas.py | 15 ++++- ami/ml/serializers.py | 23 ++++++- ami/ml/views.py | 6 ++ ml_backends/example/api/schemas.py | 2 +- 9 files changed, 163 insertions(+), 47 deletions(-) create mode 100644 ami/ml/migrations/0009_remove_pipeline_backend_backend_pipelines.py create mode 100644 ami/ml/migrations/0010_backend_created_at_backend_updated_at.py diff --git a/ami/ml/admin.py b/ami/ml/admin.py index bd5415cf0..03dea1556 100644 --- a/ami/ml/admin.py +++ b/ami/ml/admin.py @@ -3,6 +3,7 @@ from ami.main.admin import AdminBase from .models.algorithm import Algorithm +from .models.backend import Backend from .models.pipeline import Pipeline @@ -57,3 +58,11 @@ class PipelineAdmin(AdminBase): # See https://pypi.org/project/django-json-widget/ # models.JSONField: {"widget": JSONInput}, } + + +@admin.register(Backend) +class BackendAdmin(AdminBase): + list_display = [ + "id", + "endpoint_url", + ] diff --git a/ami/ml/migrations/0009_remove_pipeline_backend_backend_pipelines.py b/ami/ml/migrations/0009_remove_pipeline_backend_backend_pipelines.py new file mode 100644 index 000000000..dcc6735de --- /dev/null +++ b/ami/ml/migrations/0009_remove_pipeline_backend_backend_pipelines.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.10 on 2024-11-14 19:36 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("ml", "0008_remove_pipeline_endpoint_url_pipeline_backend"), + ] + + operations = [ + migrations.RemoveField( + model_name="pipeline", + name="backend", + ), + migrations.AddField( + model_name="backend", + name="pipelines", + field=models.ManyToManyField(blank=True, related_name="backends", to="ml.pipeline"), + ), + ] diff --git a/ami/ml/migrations/0010_backend_created_at_backend_updated_at.py b/ami/ml/migrations/0010_backend_created_at_backend_updated_at.py new file mode 100644 index 000000000..b2155d3a9 --- /dev/null +++ b/ami/ml/migrations/0010_backend_created_at_backend_updated_at.py @@ -0,0 +1,24 @@ +# Generated by Django 4.2.10 on 2024-11-14 19:43 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + dependencies = [ + ("ml", "0009_remove_pipeline_backend_backend_pipelines"), + ] + + operations = [ + migrations.AddField( + model_name="backend", + name="created_at", + field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), + preserve_default=False, + ), + migrations.AddField( + model_name="backend", + name="updated_at", + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/ami/ml/models/backend.py b/ami/ml/models/backend.py index e6cf7a892..bb4b2d0ff 100644 --- a/ami/ml/models/backend.py +++ b/ami/ml/models/backend.py @@ -5,8 +5,9 @@ import requests from django.db import models +from ami.base.models import BaseModel from ami.main.models import Project -from ami.ml.schemas import BackendResponse +from ami.ml.schemas import BackendStatusResponse, PipelineRegistrationResponse from .algorithm import Algorithm from .pipeline import Pipeline @@ -14,11 +15,12 @@ logger = logging.getLogger(__name__) -class Backend(models.Model): +class Backend(BaseModel): """An ML processing backend""" projects = models.ManyToManyField("main.Project", related_name="backends", blank=True) endpoint_url = models.CharField(max_length=1024, null=True, blank=True) + pipelines = models.ManyToManyField("ml.Pipeline", related_name="backends", blank=True) def __str__(self): return self.endpoint_url @@ -29,44 +31,61 @@ class Meta: def create_pipelines(self): # Call the status endpoint and get the pipelines/algorithms - resp = requests.get(urljoin(self.endpoint_url, "status")) - pipelines_to_add = resp.data.get("pipeline_configs") + resp = self.get_status() + pipelines_to_add = resp.pipeline_configs + pipelines = [] + pipelines_created = [] + algorithms_created = [] + projects_created = [] for pipeline_data in pipelines_to_add: pipeline, created = Pipeline.objects.get_or_create( - name=pipeline_data["name"], - slug=pipeline_data["slug"], - version=pipeline_data["version"], + name=pipeline_data.name, + slug=pipeline_data.slug, + version=pipeline_data.version, + description=pipeline_data.description or "", ) + self.pipelines.add(pipeline) if created: - logger.info(f'Successfully created pipeline {pipeline_data["name"]}.') + logger.info(f"Successfully created pipeline {pipeline.name}.") + pipelines_created.append(pipeline.slug) else: - logger.info(f'Using existing pipeline {pipeline_data["name"]}.') + logger.info(f"Using existing pipeline {pipeline.name}.") - for algorithm_data in pipeline_data["algorithms"]: - algorithm, created = Algorithm.objects.get_or_create( - name=algorithm_data["name"], key=algorithm_data["key"] - ) + for algorithm_data in pipeline_data.algorithms: + algorithm, created = Algorithm.objects.get_or_create(name=algorithm_data.name, key=algorithm_data.key) pipeline.algorithms.add(algorithm) if created: - logger.info(f'Successfully created algorithm {algorithm_data["name"]}.') + logger.info(f"Successfully created algorithm {algorithm.name}.") + algorithms_created.append(algorithm.name) else: - logger.info(f'Using existing algorithm {algorithm_data["name"]}.') + logger.info(f"Using existing algorithm {algorithm.name}.") - for project_data in pipeline_data["projects"]: - project, created = Project.objects.get_or_create(name=project_data["name"]) + for project_data in pipeline_data.projects: + project, created = Project.objects.get_or_create(name=project_data.name) pipeline.projects.add(project) if created: - logger.info(f'Successfully created project {project_data["name"]}.') + logger.info(f"Successfully created project {project.name}.") + projects_created.append(project.name) else: - logger.info(f'Using existing project {project_data["name"]}.') + logger.info(f"Using existing project {project.name}.") - # @TODO: Add pipeline description and stages + # @TODO: Add the stages pipeline.save() + pipelines.append(pipeline) + + return PipelineRegistrationResponse( + timestamp=datetime.datetime.now(), + success=True, + pipelines=pipelines_to_add, + pipelines_created=pipelines_created, + algorithms_created=algorithms_created, + projects_created=projects_created, + ) def get_status(self): info_url = urljoin(self.endpoint_url, "info") @@ -87,7 +106,7 @@ def get_status(self): server_live = requests.get(urljoin(self.endpoint_url, "livez")).json().get("status") pipelines_online = requests.get(urljoin(self.endpoint_url, "readyz")).json().get("status") - response = BackendResponse( + response = BackendStatusResponse( timestamp=timestamp, success=resp.ok, server_online=server_live, diff --git a/ami/ml/models/pipeline.py b/ami/ml/models/pipeline.py index 91e601cb0..4f44ea11d 100644 --- a/ami/ml/models/pipeline.py +++ b/ami/ml/models/pipeline.py @@ -23,10 +23,11 @@ TaxonRank, update_calculated_fields_for_events, ) +from ami.ml.schemas import PipelineRequest, PipelineResponse, SourceImageRequest from ami.ml.tasks import celery_app, create_detection_images -from ..schemas import PipelineRequest, PipelineResponse, SourceImageRequest from .algorithm import Algorithm +from .backend import Backend logger = logging.getLogger(__name__) @@ -161,29 +162,40 @@ def process_images( task_logger.info(f"Sending {len(images)} images to ML backend {pipeline.slug}") urls = [source_image.public_url() for source_image in images if source_image.public_url()] + source_images = [ + SourceImageRequest( + id=str(source_image.pk), + url=url, + ) + for source_image, url in zip(images, urls) + if url + ] + request_data = PipelineRequest( pipeline=pipeline.slug, - source_images=[ - SourceImageRequest( - id=str(source_image.pk), - url=url, - ) - for source_image, url in zip(images, urls) - if url - ], + source_images=source_images, ) resp = requests.post(endpoint_url, json=request_data.dict()) if not resp.ok: - if job: - try: - msg = resp.json()["detail"] - except Exception: - msg = resp.content + try: + msg = resp.json()["detail"] + except Exception: + msg = resp.content + if job: job.logger.error(msg) + else: + logger.error(msg) - resp.raise_for_status() + results = PipelineResponse( + pipeline=pipeline.slug, + total_time=None, + source_images=source_images, + detections=[], + errors=msg, + ) + return results results = resp.json() results = PipelineResponse(**results) @@ -405,12 +417,7 @@ class Pipeline(BaseModel): ), ) projects = models.ManyToManyField("main.Project", related_name="pipelines", blank=True) - backend = models.ForeignKey( - "ml.Backend", - on_delete=models.SET_NULL, # TODO: Pipelines should support multiple backends - related_name="pipelines", - null=True, - ) + backends: models.QuerySet[Backend] class Meta: ordering = ["name", "version"] diff --git a/ami/ml/schemas.py b/ami/ml/schemas.py index d45a8c723..8b3eab2b5 100644 --- a/ami/ml/schemas.py +++ b/ami/ml/schemas.py @@ -62,9 +62,10 @@ class PipelineRequest(pydantic.BaseModel): class PipelineResponse(pydantic.BaseModel): # pipeline: PipelineChoice pipeline: str - total_time: float + total_time: float | None source_images: list[SourceImageResponse] detections: list[DetectionResponse] + errors: list | str | None = None class PipelineStageParam(pydantic.BaseModel): @@ -105,7 +106,7 @@ class PipelineConfig(pydantic.BaseModel): projects: list[ProjectConfig] = [] -class BackendResponse(pydantic.BaseModel): +class BackendStatusResponse(pydantic.BaseModel): timestamp: datetime.datetime success: bool pipeline_configs: list[PipelineConfig] = [] @@ -113,3 +114,13 @@ class BackendResponse(pydantic.BaseModel): server_online: str pipelines_online: list[str] | str endpoint_url: str + + +class PipelineRegistrationResponse(pydantic.BaseModel): + timestamp: datetime.datetime + success: bool + error: str | None = None + pipelines: list[PipelineConfig] = [] + pipelines_created: list[str] = [] + algorithms_created: list[str] = [] + projects_created: list[str] = [] diff --git a/ami/ml/serializers.py b/ami/ml/serializers.py index 79a4c4cc6..9b05d799a 100644 --- a/ami/ml/serializers.py +++ b/ami/ml/serializers.py @@ -37,9 +37,20 @@ class Meta: ] +class BackendNestedSerializer(DefaultSerializer): + class Meta: + model = Backend + fields = [ + "id", + "details", + "endpoint_url", + ] + + class PipelineSerializer(DefaultSerializer): algorithms = AlgorithmSerializer(many=True, read_only=True) stages = SchemaField(schema=list[PipelineStage], read_only=True) + backends = BackendNestedSerializer(many=True, read_only=True) class Meta: model = Pipeline @@ -53,7 +64,7 @@ class Meta: "version_name", "algorithms", "stages", - "backend", + "backends", "created_at", "updated_at", ] @@ -74,6 +85,14 @@ class Meta: class BackendSerializer(DefaultSerializer): + pipelines = PipelineNestedSerializer(many=True, read_only=True) + class Meta: model = Backend - fields = ["id", "details", "projects", "endpoint_url"] + fields = [ + "id", + "details", + "projects", + "endpoint_url", + "pipelines", + ] diff --git a/ami/ml/views.py b/ami/ml/views.py index f52ece1ff..4a93bade1 100644 --- a/ami/ml/views.py +++ b/ami/ml/views.py @@ -81,3 +81,9 @@ def status(self, request: Request, pk=None) -> Response: backend = Backend.objects.get(pk=pk) response = backend.get_status() return Response(response.dict()) + + @action(detail=True, methods=["post"]) + def register_pipelines(self, request: Request, pk=None) -> Response: + backend = Backend.objects.get(pk=pk) + response = backend.create_pipelines() + return Response(response.dict()) diff --git a/ml_backends/example/api/schemas.py b/ml_backends/example/api/schemas.py index e1dec67de..4a5a673fb 100644 --- a/ml_backends/example/api/schemas.py +++ b/ml_backends/example/api/schemas.py @@ -102,7 +102,7 @@ class SourceImageResponse(pydantic.BaseModel): url: str -PipelineChoice = typing.Literal["dummy"] +PipelineChoice = typing.Literal["dummy", "static"] class PipelineRequest(pydantic.BaseModel): From d5f43f5b9d64e07bd9cbd8fa3584344a0e52e292 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Mon, 25 Nov 2024 00:24:14 -0500 Subject: [PATCH 09/56] Fix type checking --- .../migrations/0011_alter_pipeline_stages.py | 24 +++++++++++++++++++ ami/ml/models/backend.py | 4 +++- ami/ml/models/pipeline.py | 14 +++++++---- 3 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 ami/ml/migrations/0011_alter_pipeline_stages.py diff --git a/ami/ml/migrations/0011_alter_pipeline_stages.py b/ami/ml/migrations/0011_alter_pipeline_stages.py new file mode 100644 index 000000000..6fefb26d9 --- /dev/null +++ b/ami/ml/migrations/0011_alter_pipeline_stages.py @@ -0,0 +1,24 @@ +# Generated by Django 4.2.10 on 2024-11-24 17:56 + +import ami.base.schemas +from django.db import migrations +import django_pydantic_field.fields + + +class Migration(migrations.Migration): + dependencies = [ + ("ml", "0010_backend_created_at_backend_updated_at"), + ] + + operations = [ + migrations.AlterField( + model_name="pipeline", + name="stages", + field=django_pydantic_field.fields.PydanticSchemaField( + config=None, + default=ami.base.schemas.default_stages, + help_text="The stages of the pipeline. This is mainly for display. The backend implementation of the pipeline may process data in any way.", + schema="list[PipelineStage]", + ), + ), + ] diff --git a/ami/ml/models/backend.py b/ami/ml/models/backend.py index bb4b2d0ff..b8343e1c3 100644 --- a/ami/ml/models/backend.py +++ b/ami/ml/models/backend.py @@ -1,5 +1,6 @@ import datetime import logging +import typing from urllib.parse import urljoin import requests @@ -15,12 +16,13 @@ logger = logging.getLogger(__name__) +@typing.final class Backend(BaseModel): """An ML processing backend""" projects = models.ManyToManyField("main.Project", related_name="backends", blank=True) endpoint_url = models.CharField(max_length=1024, null=True, blank=True) - pipelines = models.ManyToManyField("ml.Pipeline", related_name="backends", blank=True) + pipelines = models.ManyToManyField(Pipeline, related_name="backends", blank=True) def __str__(self): return self.endpoint_url diff --git a/ami/ml/models/pipeline.py b/ami/ml/models/pipeline.py index 4f44ea11d..c8be4e7db 100644 --- a/ami/ml/models/pipeline.py +++ b/ami/ml/models/pipeline.py @@ -1,3 +1,10 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from ami.ml.models import Backend + import logging import typing from urllib.parse import urljoin @@ -27,14 +34,13 @@ from ami.ml.tasks import celery_app, create_detection_images from .algorithm import Algorithm -from .backend import Backend logger = logging.getLogger(__name__) def filter_processed_images( images: typing.Iterable[SourceImage], - pipeline: "Pipeline", + pipeline: Pipeline, ) -> typing.Iterable[SourceImage]: """ Return only images that need to be processed by a given pipeline for the first time (have no detections) @@ -80,7 +86,7 @@ def collect_images( source_images: list[SourceImage] | None = None, deployment: Deployment | None = None, job_id: int | None = None, - pipeline: "Pipeline | None" = None, + pipeline: Pipeline | None = None, skip_processed: bool = True, ) -> typing.Iterable[SourceImage]: """ @@ -125,7 +131,7 @@ def collect_images( def process_images( - pipeline: "Pipeline", + pipeline: Pipeline, endpoint_url: str, images: typing.Iterable[SourceImage], job_id: int | None = None, From 74825fedc803cae93feb8a40c4df3bb109aead9f Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Mon, 25 Nov 2024 00:49:09 -0500 Subject: [PATCH 10/56] Add backend id to test pipeline processing --- ami/jobs/models.py | 2 +- ami/ml/models/pipeline.py | 6 +++--- ami/ml/views.py | 4 +++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/ami/jobs/models.py b/ami/jobs/models.py index 86e99321e..141bf27d1 100644 --- a/ami/jobs/models.py +++ b/ami/jobs/models.py @@ -368,7 +368,7 @@ def run(cls, job: "Job"): try: results = job.pipeline.process_images( images=chunk, - job_id=job.pk, + job_id=job.pk, # @TODO: add backend_id ) except Exception as e: # Log error about image batch and continue diff --git a/ami/ml/models/pipeline.py b/ami/ml/models/pipeline.py index c8be4e7db..5fa2a9ecc 100644 --- a/ami/ml/models/pipeline.py +++ b/ami/ml/models/pipeline.py @@ -449,11 +449,11 @@ def collect_images( skip_processed=skip_processed, ) - def process_images(self, images: typing.Iterable[SourceImage], job_id: int | None = None): - if not self.backend.endpoint_url: + def process_images(self, images: typing.Iterable[SourceImage], backend_id: int, job_id: int | None = None): + if not self.backends.filter(pk=backend_id).first().endpoint_url: # @TODO: use a get backend function raise ValueError("No endpoint URL configured for this pipeline") return process_images( - endpoint_url=urljoin(self.backend.endpoint_url, "/process_images"), + endpoint_url=urljoin(self.backends.filter(pk=backend_id).first().endpoint_url, "/process_images"), pipeline=self, images=images, job_id=job_id, diff --git a/ami/ml/views.py b/ami/ml/views.py index 4a93bade1..41dafa6d1 100644 --- a/ami/ml/views.py +++ b/ami/ml/views.py @@ -55,10 +55,12 @@ def test_process(self, request: Request, pk=None) -> Response: Process images using the pipeline. """ pipeline = Pipeline.objects.get(pk=pk) + # @TODO: Create function to backend from the current project and most recently responded OK to a status check + backend_id = pipeline.backends.first().pk random_image = ( SourceImage.objects.all().order_by("?").first() ) # TODO: Filter images by projects user has access to - results = pipeline.process_images(images=[random_image], job_id=None) + results = pipeline.process_images(images=[random_image], backend_id=backend_id, job_id=None) # @TODO: Add error or info messages to the response if image already processed or no detections returned return Response(results.dict()) From fa6579ad155b5eab373979a5157d634676bc6709 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Mon, 25 Nov 2024 00:56:03 -0500 Subject: [PATCH 11/56] Constant and Random pipeline processing --- ml_backends/example/api/api.py | 48 ++++++++++++++++++++--------- ml_backends/example/api/pipeline.py | 42 +++++++++++++++++++++++++ ml_backends/example/api/schemas.py | 2 +- 3 files changed, 76 insertions(+), 16 deletions(-) diff --git a/ml_backends/example/api/api.py b/ml_backends/example/api/api.py index 759bf9df5..094cf477d 100644 --- a/ml_backends/example/api/api.py +++ b/ml_backends/example/api/api.py @@ -6,32 +6,44 @@ import fastapi -from .pipeline import DummyPipeline +from .pipeline import ConstantPipeline, DummyPipeline from .schemas import ( + AlgorithmConfig, PipelineConfig, PipelineRequest, PipelineResponse, - PipelineStage, - PipelineStageParam, + ProjectConfig, SourceImage, SourceImageResponse, ) app = fastapi.FastAPI() -pipeline = PipelineConfig( - name="Pipeline 1", - slug="pipeline1", - stages=[ - PipelineStage( - name="Stage 1", - key="stage1", - params=[PipelineStageParam(name="Panama Moths", key="panama", category="Classifier")], - ) +pipeline1 = PipelineConfig( + name="ML Dummy Pipeline", + slug="dummy", + version=1, + algorithms=[ + AlgorithmConfig(name="Dummy Detector", key="1"), + AlgorithmConfig(name="Random Detector", key="2"), + AlgorithmConfig(name="Always Moth Classifier", key="3"), + ], + projects=[ProjectConfig(name="Test Project 1ed10463")], +) + +pipeline2 = PipelineConfig( + name="ML Constant Pipeline", + slug="constant", + version=1, + algorithms=[ + AlgorithmConfig(name="Dummy Detector", key="1"), + AlgorithmConfig(name="Random Detector", key="2"), + AlgorithmConfig(name="Always Moth Classifier", key="3"), ], + projects=[ProjectConfig(name="Test Project 1ed10463")], ) -pipelines = [pipeline] +pipelines = [pipeline1, pipeline2] @app.get("/") @@ -61,14 +73,20 @@ async def readyz(): return fastapi.responses.JSONResponse(status_code=503, content={"status": "pipelines unavailable"}) -@app.post("/pipeline/process", tags=["services"]) # @TODO: Future change use @app.post("/{pipeline_name}/process/") +@app.post("/process_images", tags=["services"]) async def process(data: PipelineRequest) -> PipelineResponse: + pipeline_slug = data.pipeline + source_image_results = [SourceImageResponse(**image.model_dump()) for image in data.source_images] source_images = [SourceImage(**image.model_dump()) for image in data.source_images] start_time = time.time() - pipeline = DummyPipeline(source_images=source_images) + if pipeline_slug == "constant": + pipeline = ConstantPipeline(source_images=source_images) # returns same detections + else: + pipeline = DummyPipeline(source_images=source_images) # returns random detections + try: results = pipeline.run() except Exception as e: diff --git a/ml_backends/example/api/pipeline.py b/ml_backends/example/api/pipeline.py index 51c7acd53..a19076949 100644 --- a/ml_backends/example/api/pipeline.py +++ b/ml_backends/example/api/pipeline.py @@ -80,6 +80,36 @@ def make_fake_detections(source_image: SourceImage, num_detections: int = 10): ] +def make_constant_detections(source_image: SourceImage, num_detections: int = 10): + source_image.open(raise_exception=True) + assert source_image.width is not None and source_image.height is not None + + # Define a fixed bounding box size and position relative to image size + box_width, box_height = source_image.width // 4, source_image.height // 4 + start_x, start_y = source_image.width // 8, source_image.height // 8 + bboxes = [BoundingBox(x1=start_x, y1=start_y, x2=start_x + box_width, y2=start_y + box_height)] + timestamp = datetime.datetime.now() + + return [ + Detection( + source_image_id=source_image.id, + bbox=bbox, + timestamp=timestamp, + algorithm="Fixed Detector", + classifications=[ + Classification( + classification="moth", + labels=["moth"], + scores=[0.9], # Constant score for each detection + timestamp=timestamp, + algorithm="Always Moth Classifier", + ) + ], + ) + for bbox in bboxes + ] + + class DummyPipeline: source_images: list[SourceImage] @@ -90,3 +120,15 @@ def run(self) -> list[Detection]: results = [make_fake_detections(source_image) for source_image in self.source_images] # Flatten the list of lists return [item for sublist in results for item in sublist] + + +class ConstantPipeline: + source_images: list[SourceImage] + + def __init__(self, source_images: list[SourceImage]): + self.source_images = source_images + + def run(self) -> list[Detection]: + results = [make_constant_detections(source_image) for source_image in self.source_images] + # Flatten the list of lists + return [item for sublist in results for item in sublist] diff --git a/ml_backends/example/api/schemas.py b/ml_backends/example/api/schemas.py index 4a5a673fb..99a85c872 100644 --- a/ml_backends/example/api/schemas.py +++ b/ml_backends/example/api/schemas.py @@ -102,7 +102,7 @@ class SourceImageResponse(pydantic.BaseModel): url: str -PipelineChoice = typing.Literal["dummy", "static"] +PipelineChoice = typing.Literal["dummy", "constant"] class PipelineRequest(pydantic.BaseModel): From 8ad8b574f205cbc8ef7a3c603f844402a48cf7c3 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Mon, 25 Nov 2024 18:54:15 -0500 Subject: [PATCH 12/56] Add test fixture --- ami/ml/models/__init__.py | 6 ++-- ami/ml/models/backend.py | 7 ++--- ami/ml/models/pipeline.py | 5 ++-- ami/ml/tests.py | 11 ++++++-- ami/tests/fixtures/main.py | 57 +++++++++++++++++--------------------- 5 files changed, 42 insertions(+), 44 deletions(-) diff --git a/ami/ml/models/__init__.py b/ami/ml/models/__init__.py index 4505b9482..fe1e7475e 100644 --- a/ami/ml/models/__init__.py +++ b/ami/ml/models/__init__.py @@ -1,6 +1,6 @@ -from .algorithm import Algorithm -from .backend import Backend -from .pipeline import Pipeline +from ami.ml.models.algorithm import Algorithm +from ami.ml.models.backend import Backend +from ami.ml.models.pipeline import Pipeline __all__ = [ "Algorithm", diff --git a/ami/ml/models/backend.py b/ami/ml/models/backend.py index b8343e1c3..21c0dbfd8 100644 --- a/ami/ml/models/backend.py +++ b/ami/ml/models/backend.py @@ -8,11 +8,10 @@ from ami.base.models import BaseModel from ami.main.models import Project +from ami.ml.models.algorithm import Algorithm +from ami.ml.models.pipeline import Pipeline from ami.ml.schemas import BackendStatusResponse, PipelineRegistrationResponse -from .algorithm import Algorithm -from .pipeline import Pipeline - logger = logging.getLogger(__name__) @@ -22,7 +21,7 @@ class Backend(BaseModel): projects = models.ManyToManyField("main.Project", related_name="backends", blank=True) endpoint_url = models.CharField(max_length=1024, null=True, blank=True) - pipelines = models.ManyToManyField(Pipeline, related_name="backends", blank=True) + pipelines = models.ManyToManyField("ml.Pipeline", related_name="backends", blank=True) def __str__(self): return self.endpoint_url diff --git a/ami/ml/models/pipeline.py b/ami/ml/models/pipeline.py index 5fa2a9ecc..2cb816c2d 100644 --- a/ami/ml/models/pipeline.py +++ b/ami/ml/models/pipeline.py @@ -30,11 +30,10 @@ TaxonRank, update_calculated_fields_for_events, ) +from ami.ml.models.algorithm import Algorithm from ami.ml.schemas import PipelineRequest, PipelineResponse, SourceImageRequest from ami.ml.tasks import celery_app, create_detection_images -from .algorithm import Algorithm - logger = logging.getLogger(__name__) @@ -414,7 +413,7 @@ class Pipeline(BaseModel): version = models.IntegerField(default=1) version_name = models.CharField(max_length=255, blank=True) # @TODO the algorithms list be retrieved by querying the pipeline endpoint - algorithms = models.ManyToManyField(Algorithm, related_name="pipelines") + algorithms = models.ManyToManyField("ml.Algorithm", related_name="pipelines") stages: list[PipelineStage] = SchemaField( default=default_stages, help_text=( diff --git a/ami/ml/tests.py b/ami/ml/tests.py index c9f9f727c..aff659e5e 100644 --- a/ami/ml/tests.py +++ b/ami/ml/tests.py @@ -13,7 +13,7 @@ PipelineResponse, SourceImageResponse, ) -from ami.tests.fixtures.main import create_captures_from_files, create_ml_pipeline, setup_test_project +from ami.tests.fixtures.main import create_captures_from_files, create_ml_backends, setup_test_project class TestPipelineWithMLBackend(TestCase): @@ -21,11 +21,16 @@ def setUp(self): self.project, self.deployment = setup_test_project() self.captures = create_captures_from_files(self.deployment, skip_existing=False) self.test_images = [image for image, frame in self.captures] - self.pipeline = create_ml_pipeline(self.project) + self.backend_instance = create_ml_backends(self.project) + self.backend = self.backend_instance + # @TODO: Create function to get most recent OK backend + self.pipeline = self.backend_instance.pipelines.all().filter(slug="constant").first() + self.backend_id = self.pipeline.backends.first().pk + # @TODO: Add error or info messages to the response if image already processed or no detections returned def test_run_pipeline(self): # Send images to ML backend to process and return detections - pipeline_response = self.pipeline.process_images(self.test_images) + pipeline_response = self.pipeline.process_images(self.test_images, backend_id=self.backend_id, job_id=None) assert pipeline_response.detections diff --git a/ami/tests/fixtures/main.py b/ami/tests/fixtures/main.py index 820c3afd6..3427b909b 100644 --- a/ami/tests/fixtures/main.py +++ b/ami/tests/fixtures/main.py @@ -17,6 +17,7 @@ TaxonRank, group_images_into_events, ) +from ami.ml.models.backend import Backend from ami.ml.tasks import create_detection_images from ami.tests.fixtures.storage import GeneratedTestFrame, create_storage_source, populate_bucket @@ -33,62 +34,56 @@ def update_site_settings(**kwargs): return site -def create_ml_pipeline(project): - from ami.ml.models import Algorithm, Pipeline - - pipelines_to_add = [ +# @TODO: To test this: delete project in admin, then run migrate +# (this will execute the signal in ami-platform/ami/tests/fixtures/signals.py) +def create_ml_backends(project): + backends_to_add = [ { - "name": "ML Dummy Backend", - "slug": "dummy", - "version": 1, - "algorithms": [ - {"name": "Dummy Detector", "key": 1}, - {"name": "Random Detector", "key": 2}, - {"name": "Always Moth Classifier", "key": 3}, - ], - "projects": {"name": project.name}, - "endpoint_url": "http://ml_backend:2000/pipeline/process", + "projects": [{"name": project.name}], + "endpoint_url": "http://ml_backend:2000", }, ] - for pipeline_data in pipelines_to_add: - pipeline, created = Pipeline.objects.get_or_create( - name=pipeline_data["name"], - slug=pipeline_data["slug"], - version=pipeline_data["version"], - endpoint_url=pipeline_data["endpoint_url"], + for backend_data in backends_to_add: + backend, created = Backend.objects.get_or_create( + endpoint_url=backend_data["endpoint_url"], ) if created: - logger.info(f'Successfully created {pipeline_data["name"]}.') + logger.info(f'Successfully created backend with {backend_data["endpoint_url"]}.') else: - logger.info(f'Using existing pipeline {pipeline_data["name"]}.') + logger.info(f'Using existing backend with {backend_data["endpoint_url"]}.') + + for project_data in backend_data["projects"]: + try: + project = Project.objects.get(name=project_data["name"]) + backend.projects.add(project) + except Exception: + logger.error(f'Could not find project {project_data["name"]}.') - for algorithm_data in pipeline_data["algorithms"]: - algorithm, _ = Algorithm.objects.get_or_create(name=algorithm_data["name"], key=algorithm_data["key"]) - pipeline.algorithms.add(algorithm) + backend.save() - pipeline.save() + backend.create_pipelines() - return pipeline + return backend def setup_test_project(reuse=True) -> tuple[Project, Deployment]: + short_id = "1ed10463" if reuse: - project, _ = Project.objects.get_or_create(name="Test Project") + project, _ = Project.objects.get_or_create(name=f"Test Project {short_id}") data_source = create_storage_source(project, "Test Data Source") deployment, _ = Deployment.objects.get_or_create( project=project, name="Test Deployment", defaults=dict(data_source=data_source) ) - create_ml_pipeline(project) + create_ml_backends(project) else: - short_id = uuid.uuid4().hex[:8] project = Project.objects.create(name=f"Test Project {short_id}") data_source = create_storage_source(project, f"Test Data Source {short_id}") deployment = Deployment.objects.create( project=project, name=f"Test Deployment {short_id}", data_source=data_source ) - create_ml_pipeline(project) + create_ml_backends(project) return project, deployment From 18f9b9e1fe4d12aba172de4e7f3c7f2196ae4866 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Mon, 25 Nov 2024 19:09:54 -0500 Subject: [PATCH 13/56] Don't use same project id for all tests --- ami/tests/fixtures/main.py | 3 ++- ami/tests/fixtures/signals.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ami/tests/fixtures/main.py b/ami/tests/fixtures/main.py index 3427b909b..0a4df453e 100644 --- a/ami/tests/fixtures/main.py +++ b/ami/tests/fixtures/main.py @@ -69,8 +69,8 @@ def create_ml_backends(project): def setup_test_project(reuse=True) -> tuple[Project, Deployment]: - short_id = "1ed10463" if reuse: + short_id = "001" project, _ = Project.objects.get_or_create(name=f"Test Project {short_id}") data_source = create_storage_source(project, "Test Data Source") deployment, _ = Deployment.objects.get_or_create( @@ -78,6 +78,7 @@ def setup_test_project(reuse=True) -> tuple[Project, Deployment]: ) create_ml_backends(project) else: + short_id = uuid.uuid4().hex[:8] project = Project.objects.create(name=f"Test Project {short_id}") data_source = create_storage_source(project, f"Test Data Source {short_id}") deployment = Deployment.objects.create( diff --git a/ami/tests/fixtures/signals.py b/ami/tests/fixtures/signals.py index 4ce5648cf..95975d8c1 100644 --- a/ami/tests/fixtures/signals.py +++ b/ami/tests/fixtures/signals.py @@ -24,7 +24,7 @@ def setup_complete_test_project(sender, **kwargs): with transaction.atomic(): update_site_settings(domain=settings.EXTERNAL_HOSTNAME) - project, deployment = setup_test_project(reuse=False) + project, deployment = setup_test_project(reuse=True) frame_data = create_captures_from_files(deployment) taxa_list = create_taxa(project) create_occurrences_from_frame_data(frame_data, taxa_list=taxa_list) From d2a9acd2ae489a1c3af118b553ae806af92933e2 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Mon, 16 Dec 2024 14:31:28 -0500 Subject: [PATCH 14/56] Added Backend created_at and updated_at serializer fields --- ami/ml/serializers.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ami/ml/serializers.py b/ami/ml/serializers.py index 9b05d799a..4c7c431cc 100644 --- a/ami/ml/serializers.py +++ b/ami/ml/serializers.py @@ -95,4 +95,6 @@ class Meta: "projects", "endpoint_url", "pipelines", + "created_at", + "updated_at", ] From 6fe426704eb3993cbaaa07a13eb1f958ce8eaf03 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Mon, 16 Dec 2024 17:34:46 -0500 Subject: [PATCH 15/56] Update models and display backends last checked --- ..._last_checked_backend_last_checked_live.py | 22 +++ ami/ml/models/backend.py | 10 +- ami/ml/schemas.py | 4 +- ami/ml/serializers.py | 4 + ml_backends/example/api/api.py | 2 +- ui/src/data-services/constants.ts | 1 + .../hooks/backends/useBackends.ts | 42 ++++++ .../hooks/backends/useBackendsDetails.ts | 34 +++++ .../backends/useTestBackendConnection.ts | 42 ++++++ ui/src/data-services/models/backend.ts | 59 ++++++++ ui/src/data-services/models/pipeline.ts | 24 ++++ .../overview/backends/backends-columns.tsx | 67 +++++++++ .../overview/backends/backends.module.scss | 20 +++ ui/src/pages/overview/backends/backends.tsx | 68 ++++++++++ .../overview/backends/connection-status.tsx | 127 ++++++++++++++++++ .../status-info/status-info.module.scss | 53 ++++++++ .../backends/status-info/status-info.tsx | 46 +++++++ .../overview/backends/status-info/types.ts | 5 + .../details-form/backend-details-form.tsx | 106 +++++++++++++++ .../entities/details-form/constants.ts | 2 + ui/src/pages/overview/overview.tsx | 8 ++ .../overview/pipelines/pipelines-columns.tsx | 12 ++ ui/src/utils/language.ts | 9 ++ 23 files changed, 762 insertions(+), 5 deletions(-) create mode 100644 ami/ml/migrations/0012_backend_last_checked_backend_last_checked_live.py create mode 100644 ui/src/data-services/hooks/backends/useBackends.ts create mode 100644 ui/src/data-services/hooks/backends/useBackendsDetails.ts create mode 100644 ui/src/data-services/hooks/backends/useTestBackendConnection.ts create mode 100644 ui/src/data-services/models/backend.ts create mode 100644 ui/src/pages/overview/backends/backends-columns.tsx create mode 100644 ui/src/pages/overview/backends/backends.module.scss create mode 100644 ui/src/pages/overview/backends/backends.tsx create mode 100644 ui/src/pages/overview/backends/connection-status.tsx create mode 100644 ui/src/pages/overview/backends/status-info/status-info.module.scss create mode 100644 ui/src/pages/overview/backends/status-info/status-info.tsx create mode 100644 ui/src/pages/overview/backends/status-info/types.ts create mode 100644 ui/src/pages/overview/entities/details-form/backend-details-form.tsx diff --git a/ami/ml/migrations/0012_backend_last_checked_backend_last_checked_live.py b/ami/ml/migrations/0012_backend_last_checked_backend_last_checked_live.py new file mode 100644 index 000000000..c6a1593e4 --- /dev/null +++ b/ami/ml/migrations/0012_backend_last_checked_backend_last_checked_live.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.10 on 2024-12-16 16:41 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("ml", "0011_alter_pipeline_stages"), + ] + + operations = [ + migrations.AddField( + model_name="backend", + name="last_checked", + field=models.DateTimeField(null=True), + ), + migrations.AddField( + model_name="backend", + name="last_checked_live", + field=models.BooleanField(null=True), + ), + ] diff --git a/ami/ml/models/backend.py b/ami/ml/models/backend.py index 21c0dbfd8..c090e78d9 100644 --- a/ami/ml/models/backend.py +++ b/ami/ml/models/backend.py @@ -22,6 +22,8 @@ class Backend(BaseModel): projects = models.ManyToManyField("main.Project", related_name="backends", blank=True) endpoint_url = models.CharField(max_length=1024, null=True, blank=True) pipelines = models.ManyToManyField("ml.Pipeline", related_name="backends", blank=True) + last_checked = models.DateTimeField(null=True) + last_checked_live = models.BooleanField(null=True) def __str__(self): return self.endpoint_url @@ -101,16 +103,20 @@ def get_status(self): logger.error(msg) timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + self.last_checked = timestamp + pipeline_configs = resp.json() if resp.ok else [] error = f"{resp.status_code} - {msg}" if not resp.ok else None server_live = requests.get(urljoin(self.endpoint_url, "livez")).json().get("status") pipelines_online = requests.get(urljoin(self.endpoint_url, "readyz")).json().get("status") + self.last_checked_live = server_live + self.save() response = BackendStatusResponse( timestamp=timestamp, - success=resp.ok, - server_online=server_live, + request_successful=resp.ok, + server_live=server_live, pipelines_online=pipelines_online, pipeline_configs=pipeline_configs, endpoint_url=self.endpoint_url, diff --git a/ami/ml/schemas.py b/ami/ml/schemas.py index 8b3eab2b5..97d348a5e 100644 --- a/ami/ml/schemas.py +++ b/ami/ml/schemas.py @@ -108,10 +108,10 @@ class PipelineConfig(pydantic.BaseModel): class BackendStatusResponse(pydantic.BaseModel): timestamp: datetime.datetime - success: bool + request_successful: bool pipeline_configs: list[PipelineConfig] = [] error: str | None = None - server_online: str + server_live: bool pipelines_online: list[str] | str endpoint_url: str diff --git a/ami/ml/serializers.py b/ami/ml/serializers.py index 4c7c431cc..a37bac963 100644 --- a/ami/ml/serializers.py +++ b/ami/ml/serializers.py @@ -44,6 +44,8 @@ class Meta: "id", "details", "endpoint_url", + "last_checked", + "last_checked_live", ] @@ -97,4 +99,6 @@ class Meta: "pipelines", "created_at", "updated_at", + "last_checked", + "last_checked_live", ] diff --git a/ml_backends/example/api/api.py b/ml_backends/example/api/api.py index 094cf477d..07176d509 100644 --- a/ml_backends/example/api/api.py +++ b/ml_backends/example/api/api.py @@ -59,7 +59,7 @@ async def info() -> list[PipelineConfig]: # Check if the server is online @app.get("/livez", tags=["health checks"]) async def livez(): - return fastapi.responses.JSONResponse(status_code=200, content={"status": "ok"}) + return fastapi.responses.JSONResponse(status_code=200, content={"status": True}) # Check if the pipelines are ready to process data diff --git a/ui/src/data-services/constants.ts b/ui/src/data-services/constants.ts index 2837b6737..47a0c7b8f 100644 --- a/ui/src/data-services/constants.ts +++ b/ui/src/data-services/constants.ts @@ -1,6 +1,7 @@ export const API_URL = '/api/v2' export const API_ROUTES = { + BACKENDS: 'ml/backends', CAPTURES: 'captures', COLLECTIONS: 'captures/collections', DEPLOYMENTS: 'deployments', diff --git a/ui/src/data-services/hooks/backends/useBackends.ts b/ui/src/data-services/hooks/backends/useBackends.ts new file mode 100644 index 000000000..016259004 --- /dev/null +++ b/ui/src/data-services/hooks/backends/useBackends.ts @@ -0,0 +1,42 @@ +import { API_ROUTES } from 'data-services/constants' +import { Backend, ServerBackend } from 'data-services/models/backend' +import { FetchParams } from 'data-services/types' +import { getFetchUrl } from 'data-services/utils' +import { useMemo } from 'react' +import { UserPermission } from 'utils/user/types' +import { useAuthorizedQuery } from '../auth/useAuthorizedQuery' + +const convertServerRecord = (record: ServerBackend) => new Backend(record) + +export const useBackends = ( + params?: FetchParams +): { + items?: Backend[] + total: number + userPermissions?: UserPermission[] + isLoading: boolean + isFetching: boolean + error?: unknown +} => { + const fetchUrl = getFetchUrl({ collection: API_ROUTES.BACKENDS, params }) + + const { data, isLoading, isFetching, error } = useAuthorizedQuery<{ + results: Backend[] + user_permissions?: UserPermission[] + count: number + }>({ + queryKey: [API_ROUTES.BACKENDS, params], + url: fetchUrl, + }) + + const items = useMemo(() => data?.results.map(convertServerRecord), [data]) + + return { + items, + total: data?.count ?? 0, + userPermissions: data?.user_permissions, + isLoading, + isFetching, + error, + } +} diff --git a/ui/src/data-services/hooks/backends/useBackendsDetails.ts b/ui/src/data-services/hooks/backends/useBackendsDetails.ts new file mode 100644 index 000000000..4ae30af6c --- /dev/null +++ b/ui/src/data-services/hooks/backends/useBackendsDetails.ts @@ -0,0 +1,34 @@ +import { API_ROUTES, API_URL } from 'data-services/constants' +import { Collection, ServerCollection } from 'data-services/models/collection' +import { useMemo } from 'react' +import { useAuthorizedQuery } from '../auth/useAuthorizedQuery' + +const convertServerRecord = (record: ServerCollection) => new Collection(record) + +export const useCollectionDetails = ( + id: string +): { + collection?: Collection + isLoading: boolean + isFetching: boolean + error?: unknown +} => { + const { data, isLoading, isFetching, error } = useAuthorizedQuery( + { + queryKey: [API_ROUTES.COLLECTIONS, id], + url: `${API_URL}/${API_ROUTES.COLLECTIONS}/${id}/`, + } + ) + + const collection = useMemo( + () => (data ? convertServerRecord(data) : undefined), + [data] + ) + + return { + collection, + isLoading, + isFetching, + error, + } +} diff --git a/ui/src/data-services/hooks/backends/useTestBackendConnection.ts b/ui/src/data-services/hooks/backends/useTestBackendConnection.ts new file mode 100644 index 000000000..6ebded37f --- /dev/null +++ b/ui/src/data-services/hooks/backends/useTestBackendConnection.ts @@ -0,0 +1,42 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query' +import axios, { AxiosError } from 'axios' +import { API_ROUTES, API_URL } from 'data-services/constants' +import { APIValidationError } from 'data-services/types' + +interface ResponseData { + request_successful: boolean + server_live: boolean + pipelines_online: [] + error_code: number | null + error_message: string | null + prefix_exists: boolean +} + +export const useTestBackendConnection = () => { + const queryClient = useQueryClient() + + const { data, mutateAsync, isLoading, isSuccess, error } = useMutation({ + mutationFn: (params: { id: string; subdir?: string; regex?: string }) => + axios.get( + `${API_URL}/${API_ROUTES.BACKENDS}/${params.id}/status/`, + ), + onSuccess: () => { + queryClient.invalidateQueries([API_ROUTES.BACKENDS]) + }, + onError: (error: AxiosError) => error, + }) + + let validationError = null + if (error && error.response?.status === 400) { + validationError = error.response?.data as APIValidationError + } + + return { + data: data?.data, + testBackendConnection: mutateAsync, + isLoading, + isSuccess, + error, + validationError, + } +} diff --git a/ui/src/data-services/models/backend.ts b/ui/src/data-services/models/backend.ts new file mode 100644 index 000000000..97e2d0927 --- /dev/null +++ b/ui/src/data-services/models/backend.ts @@ -0,0 +1,59 @@ +import { getFormatedDateTimeString } from 'utils/date/getFormatedDateTimeString/getFormatedDateTimeString' +import { Pipeline, ServerPipeline } from './pipeline' +import { Entity } from './entity' + +export type ServerBackend = any // TODO: Update this type + +export class Backend extends Entity { + protected readonly _backend: ServerBackend + protected readonly _pipelines: Pipeline[] = [] + + public constructor(backend: ServerBackend) { + super(backend) + this._backend = backend + + if (backend.pipelines) { + this._pipelines = backend.pipelines.map( + (pipeline: ServerPipeline) => new Pipeline(pipeline) + ) + } + } + + get pipelines(): Pipeline[] { + return this._pipelines + } + + get createdAt(): string { + return getFormatedDateTimeString({ + date: new Date(this._backend.created_at), + }) + } + + get id(): string { + return `${this._backend.id}` + } + + get endpointUrl(): string { + return `${this._backend.endpoint_url}` + } + + get updatedAt(): string | undefined { + if (!this._backend.updated_at) { + return undefined + } + + return getFormatedDateTimeString({ + date: new Date(this._backend.updated_at), + }) + } + + get lastChecked(): string | undefined { + if (!this._backend.last_checked) { + return undefined + } + + return getFormatedDateTimeString({ + date: new Date(this._backend.last_checked), + }) + } +} diff --git a/ui/src/data-services/models/pipeline.ts b/ui/src/data-services/models/pipeline.ts index 1e72dc224..19d992de8 100644 --- a/ui/src/data-services/models/pipeline.ts +++ b/ui/src/data-services/models/pipeline.ts @@ -81,4 +81,28 @@ export class Pipeline { date: new Date(this._pipeline.updated_at), }) } + + get backendsOnline(): string { + const backends = this._pipeline.backends + let total_online = 0 + for (const backend of backends) { + if (backend.last_checked_live) { + total_online += 1 + } + } + + return total_online + '/' + backends.length + } + + get backendsOnlineLastChecked(): string | undefined { + const backends = this._pipeline.backends + const last_checked_times = [] + for (const backend of backends) { + last_checked_times.push(new Date(backend.last_checked).getTime()) + } + + return getFormatedDateTimeString({ + date: new Date(Math.max(...last_checked_times)), + }) + } } diff --git a/ui/src/pages/overview/backends/backends-columns.tsx b/ui/src/pages/overview/backends/backends-columns.tsx new file mode 100644 index 000000000..06123212a --- /dev/null +++ b/ui/src/pages/overview/backends/backends-columns.tsx @@ -0,0 +1,67 @@ +import { API_ROUTES } from 'data-services/constants' +import { Backend } from 'data-services/models/backend' +import { BasicTableCell } from 'design-system/components/table/basic-table-cell/basic-table-cell' +import { TableColumn } from 'design-system/components/table/types' +import { DeleteEntityDialog } from 'pages/overview/entities/delete-entity-dialog' +import { UpdateEntityDialog } from 'pages/overview/entities/entity-details-dialog' +import styles from 'pages/overview/entities/styles.module.scss' +import { STRING, translate } from 'utils/language' + +export const columns: (projectId: string) => TableColumn[] = () => [ + { + id: 'id', + sortField: 'id', + name: translate(STRING.FIELD_LABEL_ID), + renderCell: (item: Backend) => , + }, + { + id: 'endpoint', + name: translate(STRING.FIELD_LABEL_ENDPOINT), + sortField: 'endpoint', + renderCell: (item: Backend) => , + }, + { + id: 'created-at', + name: translate(STRING.FIELD_LABEL_CREATED_AT), + sortField: 'created_at', + renderCell: (item: Backend) => , + }, + { + id: 'updated-at', + name: translate(STRING.FIELD_LABEL_UPDATED_AT), + sortField: 'updated_at', + renderCell: (item: Backend) => , + }, + { + id: 'last-checked', + name: translate(STRING.FIELD_LABEL_LAST_CHECKED), + sortField: 'last_checked', + renderCell: (item: Backend) => , + }, + { + id: 'actions', + name: '', + styles: { + padding: '16px', + width: '100%', + }, + renderCell: (item: Backend) => ( +
+ {item.canUpdate && ( + + )} + {item.canDelete && ( + + )} +
+ ), + }, +] diff --git a/ui/src/pages/overview/backends/backends.module.scss b/ui/src/pages/overview/backends/backends.module.scss new file mode 100644 index 000000000..8f340ebf9 --- /dev/null +++ b/ui/src/pages/overview/backends/backends.module.scss @@ -0,0 +1,20 @@ +@import 'src/design-system/variables/colors.scss'; +@import 'src/design-system/variables/typography.scss'; + +.connectionStatus { + .wizardRoot { + border-width: 1px !important; + } + + .wizardTrigger { + padding: 16px 64px; + background-color: $color-neutral-50; + @include paragraph-small(); + font-weight: 600; + } + + .wizardContent { + border-top: 1px solid $color-neutral-70; + padding: 32px 64px; + } +} diff --git a/ui/src/pages/overview/backends/backends.tsx b/ui/src/pages/overview/backends/backends.tsx new file mode 100644 index 000000000..220cd3c0d --- /dev/null +++ b/ui/src/pages/overview/backends/backends.tsx @@ -0,0 +1,68 @@ +import { API_ROUTES } from 'data-services/constants' +import { useBackends } from 'data-services/hooks/backends/useBackends' +import { PageHeader } from 'design-system/components/page-header/page-header' +import { PaginationBar } from 'design-system/components/pagination-bar/pagination-bar' +import { Table } from 'design-system/components/table/table/table' +import { TableSortSettings } from 'design-system/components/table/types' +import { Error } from 'pages/error/error' +import { NewEntityDialog } from 'pages/overview/entities/new-entity-dialog' +import { useState } from 'react' +import { useParams } from 'react-router-dom' +import { STRING, translate } from 'utils/language' +import { usePagination } from 'utils/usePagination' +import { UserPermission } from 'utils/user/types' +import { columns } from './backends-columns' + +export const Backends = () => { + const { projectId } = useParams() + const [sort, setSort] = useState({ + field: 'created_at', + order: 'desc', + }) + const { pagination, setPage } = usePagination() + const { items, userPermissions, total, isLoading, isFetching, error } = + useBackends({ + projectId, + pagination, + sort, + }) + const canCreate = userPermissions?.includes(UserPermission.Create) + + if (!isLoading && error) { + return + } + + return ( + <> + + {canCreate && ( + + )} + + + + {items?.length ? ( + + ) : null} + + ) +} diff --git a/ui/src/pages/overview/backends/connection-status.tsx b/ui/src/pages/overview/backends/connection-status.tsx new file mode 100644 index 000000000..eb037cc4e --- /dev/null +++ b/ui/src/pages/overview/backends/connection-status.tsx @@ -0,0 +1,127 @@ +import { FormRow } from 'components/form/layout/layout' +import { useTestBackendConnection } from 'data-services/hooks/backends/useTestBackendConnection' +import { InputContent, InputValue } from 'design-system/components/input/input' +import { Tooltip } from 'design-system/components/tooltip/tooltip' +import * as Wizard from 'design-system/components/wizard/wizard' +import { useEffect, useState } from 'react' +import { getFormatedDateTimeString } from 'utils/date/getFormatedDateTimeString/getFormatedDateTimeString' +import { STRING, translate } from 'utils/language' +import { StatusInfo } from './status-info/status-info' +import { Status } from './status-info/types' +import styles from './backends.module.scss' + +export const ConnectionStatus = ({ + regex, + showDetails, + backendId, + subdir, + updatedAt, + onConnectionChange, +}: { + regex?: string + showDetails?: boolean + backendId: string + subdir?: string + updatedAt?: string + onConnectionChange?: (isConnected: boolean) => void +}) => { + const { data, testBackendConnection, isLoading, error, validationError } = + useTestBackendConnection() + const [lastUpdated, setLastUpdated] = useState() + + const update = async () => { + await testBackendConnection({ id: backendId, subdir, regex }) + setLastUpdated(new Date()) + } + + const status = (() => { + if (data?.server_live) { + if (subdir) { + return data.prefix_exists ? Status.Connected : Status.NotConnected + } else { + return Status.Connected + } + } + + if (isLoading) { + return Status.Connecting + } + + return Status.NotConnected + })() + + const label = (() => { + if (data?.server_live) { + if (subdir) { + return data.prefix_exists + ? translate(STRING.CONNECTED) + : 'Problem with connection' + } else { + return translate(STRING.CONNECTED) + } + } + + if (isLoading) { + return translate(STRING.CONNECTING) + } + + return translate(STRING.NOT_CONNECTED) + })() + + const details = (() => { + // Show error info from request info + if (error) { + if (validationError?.detail) { + return validationError.detail + } + + if (Object.keys(error.response?.data ?? []).includes('subdir')) { + return 'Please provide a valid sub directory.' + } + + return translate(STRING.UNKNOWN_ERROR) + } + + // Show error info from response data + if (data?.error_code || data?.error_message) { + return data?.error_message || translate(STRING.UNKNOWN_ERROR) + } + + if (lastUpdated) { + return `${translate(STRING.LAST_UPDATED)} ${getFormatedDateTimeString({ + date: lastUpdated, + options: { second: true }, + })}` + } + })() + + useEffect(() => { + update() + }, [backendId, subdir, regex, updatedAt]) + + useEffect(() => { + onConnectionChange?.(status === Status.Connected) + }, [status]) + + return ( +
+ + + + + + + + + + + + + +
+ ) +} diff --git a/ui/src/pages/overview/backends/status-info/status-info.module.scss b/ui/src/pages/overview/backends/status-info/status-info.module.scss new file mode 100644 index 000000000..5e8592ea9 --- /dev/null +++ b/ui/src/pages/overview/backends/status-info/status-info.module.scss @@ -0,0 +1,53 @@ +@import 'src/design-system/variables/colors.scss'; +@import 'src/design-system/variables/typography.scss'; + +.wrapper { + display: flex; + align-items: center; + height: 38px; +} + +.content { + display: inline-flex; + align-items: center; + justify-content: flex-start; + gap: 8px; + + span { + @include paragraph-small(); + color: $color-neutral-300; + } +} + +.iconContainer { + display: flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; + box-sizing: border-box; + border-radius: 50%; + border-width: 2px; + border-style: solid; + flex-shrink: 0; + + &.notConnected { + border-color: $color-destructive-500; + } + + &.connecting { + border-color: $color-warning-500; + border-top-color: transparent; + animation: spin 0.7s ease-in-out infinite; + } + + &.connected { + border-color: $color-success-600; + } +} + +@keyframes spin { + to { + -webkit-transform: rotate(360deg); + } +} diff --git a/ui/src/pages/overview/backends/status-info/status-info.tsx b/ui/src/pages/overview/backends/status-info/status-info.tsx new file mode 100644 index 000000000..6abf69724 --- /dev/null +++ b/ui/src/pages/overview/backends/status-info/status-info.tsx @@ -0,0 +1,46 @@ +import classNames from 'classnames' +import { Icon, IconTheme, IconType } from 'design-system/components/icon/icon' +import { Tooltip } from 'design-system/components/tooltip/tooltip' +import styles from './status-info.module.scss' +import { Status } from './types' + +const statusInfo: { + [key in Status]: { icon?: IconType; className: string } +} = { + [Status.NotConnected]: { + icon: IconType.RadixQuestionMark, + className: styles.notConnected, + }, + [Status.Connecting]: { + className: styles.connecting, + }, + [Status.Connected]: { + icon: IconType.RadixCheck, + className: styles.connected, + }, +} + +export const StatusInfo = ({ + status, + tooltip, +}: { + label: string + status: Status + tooltip?: string +}) => { + const info = statusInfo[status] + + return ( +
+ +
+
+ {info.icon && ( + + )} +
+
+
+
+ ) +} diff --git a/ui/src/pages/overview/backends/status-info/types.ts b/ui/src/pages/overview/backends/status-info/types.ts new file mode 100644 index 000000000..1f3bc62a7 --- /dev/null +++ b/ui/src/pages/overview/backends/status-info/types.ts @@ -0,0 +1,5 @@ +export enum Status { + NotConnected, + Connecting, + Connected, +} diff --git a/ui/src/pages/overview/entities/details-form/backend-details-form.tsx b/ui/src/pages/overview/entities/details-form/backend-details-form.tsx new file mode 100644 index 000000000..0cb4c88a5 --- /dev/null +++ b/ui/src/pages/overview/entities/details-form/backend-details-form.tsx @@ -0,0 +1,106 @@ +import { FormController } from 'components/form/form-controller' +import { FormField } from 'components/form/form-field' +import { + FormActions, + FormError, + FormRow, + FormSection, +} from 'components/form/layout/layout' +import { FormConfig } from 'components/form/types' +import { Backend } from 'data-services/models/backend' +import { Button, ButtonTheme } from 'design-system/components/button/button' +import { IconType } from 'design-system/components/icon/icon' +import { Input, LockedInput } from 'design-system/components/input/input' +import { ConnectionStatus } from 'pages/overview/backends/connection-status' +import { useState } from 'react' +import { + ControllerFieldState, + ControllerRenderProps, + FieldPath, + FieldValues, + useForm, +} from 'react-hook-form' +import { STRING, translate } from 'utils/language' +import { useFormError } from 'utils/useFormError' +import { DetailsFormProps, FormValues } from './types' + +type BackendFormValues = FormValues & { + endpoint_url: string | undefined +} + +const config: FormConfig = { + endpoint_url: { + label: 'Endpoint URL', + description: 'ML Backend Endpoint', + }, +} + +export const BackendDetailsForm = ({ + entity, + error, + isLoading, + isSuccess, + onSubmit, +}: DetailsFormProps) => { + const backend = entity as Backend | undefined + const { + control, + handleSubmit, + setError: setFieldError, + setFocus, + } = useForm({ + defaultValues: { + endpoint_url: backend?.endpointUrl, + }, + mode: 'onChange', + }) + + const errorMessage = useFormError({ error, setFieldError }) + + return ( +
+ onSubmit({ + name: values.name, + customFields: { + endpoint_url: values.endpoint_url, + }, + }) + )} + > + {errorMessage && ( + + )} + + + + + {backend?.id && ( + + )} + + + + ) : null} ) } diff --git a/ui/src/components/filtering/filter-control.tsx b/ui/src/components/filtering/filter-control.tsx new file mode 100644 index 000000000..06045a933 --- /dev/null +++ b/ui/src/components/filtering/filter-control.tsx @@ -0,0 +1,91 @@ +import { X } from 'lucide-react' +import { Button } from 'nova-ui-kit' +import { AVAILABLE_FILTERS, useFilters } from 'utils/useFilters' +import { AlgorithmFilter, NotAlgorithmFilter } from './filters/algorithm-filter' +import { CollectionFilter } from './filters/collection-filter' +import { DateFilter } from './filters/date-filter' +import { ImageFilter } from './filters/image-filter' +import { PipelineFilter } from './filters/pipeline-filter' +import { ScoreFilter } from './filters/score-filter' +import { SessionFilter } from './filters/session-filter' +import { StationFilter } from './filters/station-filter' +import { StatusFilter } from './filters/status-filter' +import { TaxonFilter } from './filters/taxon-filter' +import { TypeFilter } from './filters/type-filter' +import { FilterProps } from './filters/types' +import { VerificationStatusFilter } from './filters/verification-status-filter' +import { VerifiedByFilter } from './filters/verified-by-filter' + +const ComponentMap: { + [key: string]: (props: FilterProps) => JSX.Element +} = { + algorithm: AlgorithmFilter, + classification_threshold: ScoreFilter, + collection: CollectionFilter, + date_end: DateFilter, + date_start: DateFilter, + deployment: StationFilter, + detections__source_image: ImageFilter, + event: SessionFilter, + job_type_key: TypeFilter, + not_algorithm: NotAlgorithmFilter, + pipeline: PipelineFilter, + source_image_collection: CollectionFilter, + source_image_single: ImageFilter, + status: StatusFilter, + taxon: TaxonFilter, + verified_by_me: VerifiedByFilter, + verified: VerificationStatusFilter, +} + +interface FilterControlProps { + clearable?: boolean + field: string + readonly?: boolean +} + +export const FilterControl = ({ + clearable = true, + field, + readonly, +}: FilterControlProps) => { + const { filters, addFilter, clearFilter } = useFilters() + const label = AVAILABLE_FILTERS.find( + (filter) => filter.field === field + )?.label + const value = filters.find((filter) => filter.field === field)?.value + const FilterComponent = ComponentMap[field] + + if (!label || !FilterComponent) { + return null + } + + if (readonly && !value) { + return null + } + + return ( +
+ +
+ addFilter(field, value)} + onClear={() => clearFilter(field)} + /> + {clearable && value && ( + + )} +
+
+ ) +} diff --git a/ui/src/components/filtering/filter-section.tsx b/ui/src/components/filtering/filter-section.tsx new file mode 100644 index 000000000..3f5ce2049 --- /dev/null +++ b/ui/src/components/filtering/filter-section.tsx @@ -0,0 +1,35 @@ +import { BREAKPOINTS } from 'components/constants' +import { ChevronsUpDown } from 'lucide-react' +import { Box, Button, Collapsible } from 'nova-ui-kit' +import { ReactNode } from 'react' + +interface FilterSectionProps { + children?: ReactNode + defaultOpen?: boolean + title?: string +} + +export const FilterSection = ({ + children, + defaultOpen, + title = 'Filters', +}: FilterSectionProps) => ( + + = BREAKPOINTS.MD ? defaultOpen : false} + > +
+ {title} + + + +
+ + {children} + +
+
+) diff --git a/ui/src/components/filtering/filters/algorithm-filter.tsx b/ui/src/components/filtering/filters/algorithm-filter.tsx new file mode 100644 index 000000000..78d057bfe --- /dev/null +++ b/ui/src/components/filtering/filters/algorithm-filter.tsx @@ -0,0 +1,38 @@ +import { useAlgorithms } from 'data-services/hooks/algorithm/useAlgorithms' +import { Select } from 'nova-ui-kit' +import { useParams } from 'react-router-dom' +import { FilterProps } from './types' + +export const AlgorithmFilter = ({ + value, + onAdd, + placeholder = 'All algorithms', +}: FilterProps & { placeholder?: string }) => { + const { projectId } = useParams() + const { algorithms = [], isLoading } = useAlgorithms({ + projectId: projectId as string, + }) + + return ( + + + + + + {algorithms.map((a) => ( + + {a.name} + + ))} + + + ) +} + +export const NotAlgorithmFilter = (props: FilterProps) => ( + +) diff --git a/ui/src/components/filtering/filters/collection-filter.tsx b/ui/src/components/filtering/filters/collection-filter.tsx new file mode 100644 index 000000000..3149b77b5 --- /dev/null +++ b/ui/src/components/filtering/filters/collection-filter.tsx @@ -0,0 +1,33 @@ +import { useCollections } from 'data-services/hooks/collections/useCollections' +import { Select } from 'nova-ui-kit' +import { useParams } from 'react-router-dom' +import { FilterProps } from './types' + +export const CollectionFilter = ({ value, onAdd }: FilterProps) => { + const { projectId } = useParams() + const { collections = [], isLoading } = useCollections( + { + projectId: projectId as string, + }, + 0 + ) + + return ( + + + + + + {collections.map((c) => ( + + {c.name} + + ))} + + + ) +} diff --git a/ui/src/components/filtering/filters/date-filter.tsx b/ui/src/components/filtering/filters/date-filter.tsx new file mode 100644 index 000000000..00243e0ad --- /dev/null +++ b/ui/src/components/filtering/filters/date-filter.tsx @@ -0,0 +1,44 @@ +import { format } from 'date-fns' +import { Calendar as CalendarIcon } from 'lucide-react' +import { Button, Calendar, Popover } from 'nova-ui-kit' +import { useState } from 'react' +import { FilterProps } from './types' + +const dateToLabel = (date: Date) => format(date, 'yyyy-MM-dd') + +export const DateFilter = ({ value, onAdd, onClear }: FilterProps) => { + const [open, setOpen] = useState(false) + const selected = value ? new Date(value) : undefined + + return ( + + + + + + { + if (date) { + onAdd(dateToLabel(date)) + } else { + onClear() + } + setOpen(false) + }} + /> + + + ) +} diff --git a/ui/src/components/filtering/filters/image-filter.tsx b/ui/src/components/filtering/filters/image-filter.tsx new file mode 100644 index 000000000..081ab9dce --- /dev/null +++ b/ui/src/components/filtering/filters/image-filter.tsx @@ -0,0 +1,22 @@ +import { useCaptureDetails } from 'data-services/hooks/captures/useCaptureDetails' +import { FilterProps } from './types' + +export const ImageFilter = ({ value }: FilterProps) => { + const { capture, isLoading } = useCaptureDetails(value) + + const label = (() => { + if (capture) { + return `#${capture.id}` + } + if (value && isLoading) { + return 'Loading...' + } + return 'All images' + })() + + return ( +
+ {label} +
+ ) +} diff --git a/ui/src/components/filtering/filters/pipeline-filter.tsx b/ui/src/components/filtering/filters/pipeline-filter.tsx new file mode 100644 index 000000000..55df36728 --- /dev/null +++ b/ui/src/components/filtering/filters/pipeline-filter.tsx @@ -0,0 +1,30 @@ +import { usePipelines } from 'data-services/hooks/pipelines/usePipelines' +import { Select } from 'nova-ui-kit' +import { useParams } from 'react-router-dom' +import { FilterProps } from './types' + +export const PipelineFilter = ({ value, onAdd }: FilterProps) => { + const { projectId } = useParams() + const { pipelines = [], isLoading } = usePipelines({ + projectId: projectId as string, + }) + + return ( + + + + + + {pipelines.map((p) => ( + + {p.name} + + ))} + + + ) +} diff --git a/ui/src/components/filtering/filters/score-filter.tsx b/ui/src/components/filtering/filters/score-filter.tsx new file mode 100644 index 000000000..3aebdd45b --- /dev/null +++ b/ui/src/components/filtering/filters/score-filter.tsx @@ -0,0 +1,38 @@ +import { Slider } from 'nova-ui-kit' +import { useEffect, useState } from 'react' +import { useUserPreferences } from 'utils/userPreferences/userPreferencesContext' +import { FilterProps } from './types' + +export const ScoreFilter = ({ value, onAdd }: FilterProps) => { + const { userPreferences, setUserPreferences } = useUserPreferences() + const [displayValue, setDisplayValue] = useState( + userPreferences.scoreThreshold + ) + + useEffect(() => { + if (value?.length) { + setDisplayValue(Number(value)) + } + }, [value]) + + return ( +
+ setDisplayValue(value)} + onValueCommit={([value]) => { + setDisplayValue(value) + onAdd(`${value}`) + setUserPreferences({ ...userPreferences, scoreThreshold: value }) + }} + /> + + {displayValue} + +
+ ) +} diff --git a/ui/src/components/filtering/filters/session-filter.tsx b/ui/src/components/filtering/filters/session-filter.tsx new file mode 100644 index 000000000..a4c3a4a4f --- /dev/null +++ b/ui/src/components/filtering/filters/session-filter.tsx @@ -0,0 +1,22 @@ +import { useSessionDetails } from 'data-services/hooks/sessions/useSessionDetails' +import { FilterProps } from './types' + +export const SessionFilter = ({ value }: FilterProps) => { + const { session, isLoading } = useSessionDetails(value) + + const label = (() => { + if (session) { + return session.label + } + if (value && isLoading) { + return 'Loading...' + } + return 'All sessions' + })() + + return ( +
+ {label} +
+ ) +} diff --git a/ui/src/components/filtering/filters/station-filter.tsx b/ui/src/components/filtering/filters/station-filter.tsx new file mode 100644 index 000000000..327501d81 --- /dev/null +++ b/ui/src/components/filtering/filters/station-filter.tsx @@ -0,0 +1,30 @@ +import { useDeployments } from 'data-services/hooks/deployments/useDeployments' +import { Select } from 'nova-ui-kit' +import { useParams } from 'react-router-dom' +import { FilterProps } from './types' + +export const StationFilter = ({ value, onAdd }: FilterProps) => { + const { projectId } = useParams() + const { deployments = [], isLoading } = useDeployments({ + projectId: projectId as string, + }) + + return ( + + + + + + {deployments.map((d) => ( + + {d.name} + + ))} + + + ) +} diff --git a/ui/src/components/filtering/filters/status-filter.tsx b/ui/src/components/filtering/filters/status-filter.tsx new file mode 100644 index 000000000..b22495b61 --- /dev/null +++ b/ui/src/components/filtering/filters/status-filter.tsx @@ -0,0 +1,32 @@ +import { Job, SERVER_JOB_STATUS_CODES } from 'data-services/models/job' +import { Select } from 'nova-ui-kit' +import { FilterProps } from './types' + +const OPTIONS = SERVER_JOB_STATUS_CODES.map((code) => { + const statusInfo = Job.getStatusInfo(code) + + return { + ...statusInfo, + } +}).sort((o1, o2) => o1.type - o2.type) + +export const StatusFilter = ({ value, onAdd }: FilterProps) => ( + + + + + + {OPTIONS.map((option) => ( + + + + {option.label} + + + ))} + + +) diff --git a/ui/src/components/filtering/filters/taxon-filter.tsx b/ui/src/components/filtering/filters/taxon-filter.tsx new file mode 100644 index 000000000..85a52095e --- /dev/null +++ b/ui/src/components/filtering/filters/taxon-filter.tsx @@ -0,0 +1,62 @@ +import { TaxonSearch } from 'components/taxon-search/taxon-search' +import { useSpeciesDetails } from 'data-services/hooks/species/useSpeciesDetails' +import { ChevronDownIcon, Loader2 } from 'lucide-react' +import { Button, Popover } from 'nova-ui-kit' +import { useState } from 'react' +import { useParams } from 'react-router-dom' +import { FilterProps } from './types' + +export const TaxonFilter = ({ value, onAdd, onClear }: FilterProps) => { + const { projectId } = useParams() + const [open, setOpen] = useState(false) + const { species: taxon, isLoading } = useSpeciesDetails(value, projectId) + + const triggerLabel = (() => { + if (taxon) { + return taxon.name + } + if (value && isLoading) { + return 'Loading...' + } + return 'All taxa' + })() + + return ( + + + + + + { + if (taxon) { + onAdd(taxon.id) + } else { + onClear() + } + setOpen(false) + }} + /> + + + ) +} diff --git a/ui/src/components/filtering/filters/type-filter.tsx b/ui/src/components/filtering/filters/type-filter.tsx new file mode 100644 index 000000000..1a50eb967 --- /dev/null +++ b/ui/src/components/filtering/filters/type-filter.tsx @@ -0,0 +1,26 @@ +import { Job, SERVER_JOB_TYPES } from 'data-services/models/job' +import { Select } from 'nova-ui-kit' +import { FilterProps } from './types' + +const OPTIONS = SERVER_JOB_TYPES.map((key) => { + const typrInfo = Job.getJobTypeInfo(key) + + return { + ...typrInfo, + } +}) + +export const TypeFilter = ({ value, onAdd }: FilterProps) => ( + + + + + + {OPTIONS.map((option) => ( + + {option.label} + + ))} + + +) diff --git a/ui/src/components/filtering/filters/types.ts b/ui/src/components/filtering/filters/types.ts new file mode 100644 index 000000000..a2e2b00df --- /dev/null +++ b/ui/src/components/filtering/filters/types.ts @@ -0,0 +1,5 @@ +export interface FilterProps { + value: string | undefined + onAdd: (value: string) => void + onClear: () => void +} diff --git a/ui/src/components/filtering/filters/verification-status-filter.tsx b/ui/src/components/filtering/filters/verification-status-filter.tsx new file mode 100644 index 000000000..313a17a85 --- /dev/null +++ b/ui/src/components/filtering/filters/verification-status-filter.tsx @@ -0,0 +1,33 @@ +import { Select } from 'nova-ui-kit' +import { booleanToString, stringToBoolean } from '../utils' +import { FilterProps } from './types' + +const OPTIONS = [ + { value: true, label: 'Verified' }, + { value: false, label: 'Not verified' }, +] + +export const VerificationStatusFilter = ({ + value: string, + onAdd, +}: FilterProps) => { + const value = stringToBoolean(string) + + return ( + + + + + + {OPTIONS.map((option) => ( + + {option.label} + + ))} + + + ) +} diff --git a/ui/src/components/filtering/filters/verified-by-filter.tsx b/ui/src/components/filtering/filters/verified-by-filter.tsx new file mode 100644 index 000000000..31705dcb4 --- /dev/null +++ b/ui/src/components/filtering/filters/verified-by-filter.tsx @@ -0,0 +1,30 @@ +import { Select } from 'nova-ui-kit' +import { booleanToString, stringToBoolean } from '../utils' +import { FilterProps } from './types' + +const OPTIONS = [ + { value: true, label: 'Verified by me' }, + { value: false, label: 'Not verified by me' }, +] + +export const VerifiedByFilter = ({ value: string, onAdd }: FilterProps) => { + const value = stringToBoolean(string) + + return ( + + + + + + {OPTIONS.map((option) => ( + + {option.label} + + ))} + + + ) +} diff --git a/ui/src/components/filtering/utils.ts b/ui/src/components/filtering/utils.ts new file mode 100644 index 000000000..675ba0aaf --- /dev/null +++ b/ui/src/components/filtering/utils.ts @@ -0,0 +1,22 @@ +// Help functions to handle boolean filters (search param values are defined as strings and need to be converted) +export const stringToBoolean = (string?: string) => { + switch (string?.toLowerCase()) { + case 'true': + case '1': + return true + case 'false': + case '0': + return false + default: + return undefined + } +} + +export const booleanToString = (value?: boolean) => + value !== undefined ? `${value}` : '' + +// Help function to decide if a filter section should be open or not on page load +export const someActive = ( + fields: string[], + activeFilters: { field: string; value: string }[] +) => activeFilters.some(({ field }) => fields.includes(field)) diff --git a/ui/src/components/gallery/gallery.module.scss b/ui/src/components/gallery/gallery.module.scss index 9cec9e6cf..42865049b 100644 --- a/ui/src/components/gallery/gallery.module.scss +++ b/ui/src/components/gallery/gallery.module.scss @@ -5,15 +5,11 @@ .gallery { position: relative; display: grid; - grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr; + grid-template-columns: 1fr 1fr 1fr 1fr 1fr; gap: 16px; width: 100%; min-height: 320px; - &.large { - grid-template-columns: 1fr 1fr 1fr 1fr 1fr !important; - } - &.loading { margin: 0; @@ -36,30 +32,18 @@ @media only screen and (max-width: $large-screen-breakpoint) { .gallery { - grid-template-columns: 1fr 1fr 1fr 1fr 1fr !important; - - &.large { - grid-template-columns: 1fr 1fr 1fr !important; - } + grid-template-columns: 1fr 1fr 1fr !important; } } @media only screen and (max-width: $medium-screen-breakpoint) { .gallery { - grid-template-columns: 1fr 1fr 1fr !important; - - &.large { - grid-template-columns: 1fr 1fr !important; - } + grid-template-columns: 1fr 1fr !important; } } @media only screen and (max-width: $small-screen-breakpoint) { .gallery { - grid-template-columns: 1fr 1fr !important; - - &.large { - grid-template-columns: 1fr !important; - } + grid-template-columns: 1fr !important; } } diff --git a/ui/src/components/header/user-info-dialog/user-info-form/user-info-form.tsx b/ui/src/components/header/user-info-dialog/user-info-form/user-info-form.tsx index 388615432..d3792fffc 100644 --- a/ui/src/components/header/user-info-dialog/user-info-form/user-info-form.tsx +++ b/ui/src/components/header/user-info-dialog/user-info-form/user-info-form.tsx @@ -68,7 +68,7 @@ export const UserInfoForm = ({ userInfo }: { userInfo: UserInfo }) => { const errorMessage = useFormError({ error, setFieldError }) return ( - <> +
updateUserInfo(values))}> {errorMessage && ( { - updateUserInfo(values))} - style={{ display: 'contents' }} - > + <> { )} /> - +
-) - -const LoadingTemplate: ComponentStory = () => ( -
-) - -const EmptyLoadingTemplate: ComponentStory = () => ( -
-) - -const SortableTableTemplate: ComponentStory = () => { - const [sortedItems, setSortedItems] = useState(items) - const [sort, setSort] = useState() - - useEffect(() => { - if (sort) { - setSortedItems(_.orderBy(items, sort.field, sort.order)) - } else { - setSortedItems(items) - } - }, [items, sort]) - - return ( -
- ) -} - -export const Default = DefaultTemplate.bind({}) -export const Loading = LoadingTemplate.bind({}) -export const EmptyLoading = EmptyLoadingTemplate.bind({}) -export const Sortable = SortableTableTemplate.bind({}) diff --git a/ui/src/design-system/components/tabs/tabs.stories.tsx b/ui/src/design-system/components/tabs/tabs.stories.tsx deleted file mode 100644 index 4cc995004..000000000 --- a/ui/src/design-system/components/tabs/tabs.stories.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { ComponentMeta, ComponentStory } from '@storybook/react' -import * as Tabs from './tabs' - -type Meta = ComponentMeta -type Story = ComponentStory - -export default { - title: 'Components/Tabs', - component: Tabs.Root, - subcomponents: { - List: Tabs.List, - Trigger: Tabs.Trigger, - Content: Tabs.Content, - }, - argTypes: { - defaultValue: { - control: { type: 'disable' }, - }, - }, -} as Meta - -const TabsTemplate: Story = () => ( - - - - - - - Tab one content - Tab two content - Tab three content - -) - -export const Default = TabsTemplate.bind({}) diff --git a/ui/src/design-system/components/toggle-group/toggle-group.module.scss b/ui/src/design-system/components/toggle-group/toggle-group.module.scss index ff96b7cb6..7c7a6eb79 100644 --- a/ui/src/design-system/components/toggle-group/toggle-group.module.scss +++ b/ui/src/design-system/components/toggle-group/toggle-group.module.scss @@ -4,6 +4,7 @@ .root { display: flex; gap: 2px; + height: 28px; border: 1px solid $color-neutral-100; background-color: $color-generic-white; box-sizing: border-box; @@ -14,8 +15,9 @@ display: flex; align-items: center; justify-content: center; - width: 28px; - height: 28px; + aspect-ratio: 1; + height: 100%; + outline: none; &[data-state='on'] { background-color: $color-neutral-600; diff --git a/ui/src/design-system/components/tooltip/tooltip.stories.tsx b/ui/src/design-system/components/tooltip/tooltip.stories.tsx deleted file mode 100644 index a3e17e8fe..000000000 --- a/ui/src/design-system/components/tooltip/tooltip.stories.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { ComponentMeta, ComponentStory } from '@storybook/react' -import { Button } from '../button/button' -import { Tooltip } from './tooltip' - -type Meta = ComponentMeta -type Story = ComponentStory - -export default { - title: 'Components/Tooltip', - component: Tooltip, - argTypes: {}, -} as Meta - -const TooltipTemplate: Story = () => ( - -
+
+
+ + + + + + + + +
+
+ + + {canCreate ? : null} + +
!!columnSettings[column.id] + )} + sortable + sortSettings={sort} + onSortSettingsChange={setSort} + /> + {jobs?.length ? ( { ) : null} {id ? : null} - + ) } diff --git a/ui/src/pages/occurrence-details/agree/userAgreed.ts b/ui/src/pages/occurrence-details/agree/userAgreed.ts deleted file mode 100644 index 91bd94444..000000000 --- a/ui/src/pages/occurrence-details/agree/userAgreed.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { HumanIdentification } from 'data-services/models/occurrence-details' - -export const userAgreed = ({ - identifications, - taxonId, - userId, -}: { - identifications: HumanIdentification[] - taxonId: string - userId?: string -}) => { - if (!userId) { - return false - } - - return identifications.some((i) => { - if (i.user.id !== userId) { - return false - } - if (i.overridden) { - return false - } - return i.taxon.id === taxonId - }) -} diff --git a/ui/src/pages/occurrence-details/identification-card/identification-card.module.scss b/ui/src/pages/occurrence-details/identification-card/identification-card.module.scss index 58ad5cf7b..5c402035d 100644 --- a/ui/src/pages/occurrence-details/identification-card/identification-card.module.scss +++ b/ui/src/pages/occurrence-details/identification-card/identification-card.module.scss @@ -8,6 +8,7 @@ flex-direction: column; border-radius: 4px; border: 1px solid $color-neutral-100; + overflow: hidden; } .header { diff --git a/ui/src/pages/occurrence-details/identification-card/identification-card.tsx b/ui/src/pages/occurrence-details/identification-card/identification-card.tsx index ce13a02b6..607bfd110 100644 --- a/ui/src/pages/occurrence-details/identification-card/identification-card.tsx +++ b/ui/src/pages/occurrence-details/identification-card/identification-card.tsx @@ -15,7 +15,6 @@ import { getAppRoute } from 'utils/getAppRoute' import { STRING, translate } from 'utils/language' import { UserInfo, UserPermission } from 'utils/user/types' import { Agree } from '../agree/agree' -import { userAgreed } from '../agree/userAgreed' import { StatusLabel } from '../status-label/status-label' import styles from './identification-card.module.scss' @@ -67,9 +66,9 @@ export const IdentificationCard = ({ taxon={identification.taxon} getLink={(id: string) => getAppRoute({ - to: APP_ROUTES.SPECIES_DETAILS({ + to: APP_ROUTES.TAXON_DETAILS({ projectId: projectId as string, - speciesId: id, + taxonId: id, }), }) } @@ -80,11 +79,9 @@ export const IdentificationCard = ({
{showAgree && ( getAppRoute({ - to: APP_ROUTES.SPECIES_DETAILS({ + to: APP_ROUTES.TAXON_DETAILS({ projectId: projectId as string, - speciesId: id, + taxonId: id, }), }) } @@ -155,11 +154,7 @@ export const OccurrenceDetails = ({ {canUpdate && ( <> getAppRoute({ - to: APP_ROUTES.SPECIES_DETAILS({ + to: APP_ROUTES.TAXON_DETAILS({ projectId: projectId as string, - speciesId: id, + taxonId: id, }), }) } diff --git a/ui/src/pages/occurrence-details/taxon-search/taxon-search.tsx b/ui/src/pages/occurrence-details/taxon-search/taxon-search.tsx index 5d952a2ee..2d0d9e5bf 100644 --- a/ui/src/pages/occurrence-details/taxon-search/taxon-search.tsx +++ b/ui/src/pages/occurrence-details/taxon-search/taxon-search.tsx @@ -1,10 +1,11 @@ +import { useTaxonSearch } from 'components/taxon-search/useTaxonSearch' import { Taxon } from 'data-services/models/taxa' import { ComboBoxTree } from 'design-system/components/combo-box/combo-box-tree/combo-box-tree' import { RefObject, useMemo, useState } from 'react' import { STRING, translate } from 'utils/language' import { useDebounce } from 'utils/useDebounce' -import { useTaxonSearch } from './useTaxonSearch' +/** Deprecated in favor of /components/taxon-search/ */ export const TaxonSearch = ({ autoFocus = true, containerRef, diff --git a/ui/src/pages/occurrences/occurrence-actions.tsx b/ui/src/pages/occurrences/occurrence-actions.tsx index dd8b2bc5a..01c6de217 100644 --- a/ui/src/pages/occurrences/occurrence-actions.tsx +++ b/ui/src/pages/occurrences/occurrence-actions.tsx @@ -18,9 +18,7 @@ export const OccurrenceActions = ({ const { userInfo } = useUserInfo() const allAgreed = !occurrences.some((occurrences) => { - const agreed = userInfo?.id - ? userInfo.id === occurrences.determinationVerifiedBy?.id - : false + const agreed = userInfo ? occurrences.userAgreed(userInfo.id) : false return !agreed }) diff --git a/ui/src/pages/occurrences/occurrence-columns.tsx b/ui/src/pages/occurrences/occurrence-columns.tsx index 55b0d4b39..b24a50394 100644 --- a/ui/src/pages/occurrences/occurrence-columns.tsx +++ b/ui/src/pages/occurrences/occurrence-columns.tsx @@ -194,9 +194,7 @@ const TaxonCell = ({ keepSearchParams: true, }) const canUpdate = item.userPermissions.includes(UserPermission.Update) - const agreed = userInfo?.id - ? userInfo.id === item.determinationVerifiedBy?.id - : false + const agreed = userInfo ? item.userAgreed(userInfo.id) : false return (
diff --git a/ui/src/pages/occurrences/occurrences.module.scss b/ui/src/pages/occurrences/occurrences.module.scss index 04e0e790c..9dfdf09f7 100644 --- a/ui/src/pages/occurrences/occurrences.module.scss +++ b/ui/src/pages/occurrences/occurrences.module.scss @@ -2,7 +2,7 @@ @import 'src/design-system/variables/typography.scss'; .galleryContent { - padding-top: 32px; + padding-top: 24px; } .taxonCell { diff --git a/ui/src/pages/occurrences/occurrences.tsx b/ui/src/pages/occurrences/occurrences.tsx index b3d9a4bf3..bcdd56f7e 100644 --- a/ui/src/pages/occurrences/occurrences.tsx +++ b/ui/src/pages/occurrences/occurrences.tsx @@ -1,3 +1,6 @@ +import { FilterControl } from 'components/filtering/filter-control' +import { FilterSection } from 'components/filtering/filter-section' +import { someActive } from 'components/filtering/utils' import { useOccurrenceDetails } from 'data-services/hooks/occurrences/useOccurrenceDetails' import { useOccurrences } from 'data-services/hooks/occurrences/useOccurrences' import { BulkActionBar } from 'design-system/components/bulk-action-bar/bulk-action-bar' @@ -21,20 +24,17 @@ import { useColumnSettings } from 'utils/useColumnSettings' import { useFilters } from 'utils/useFilters' import { usePagination } from 'utils/usePagination' import { useUser } from 'utils/user/userContext' +import { useUserPreferences } from 'utils/userPreferences/userPreferencesContext' import { useSelectedView } from 'utils/useSelectedView' import { useSort } from 'utils/useSort' import { OccurrenceActions } from './occurrence-actions' import { columns } from './occurrence-columns' import { OccurrenceGallery } from './occurrence-gallery' import styles from './occurrences.module.scss' -import { TaxonFilter } from './taxon-filter/taxon-filter' -import { useUserPreferences } from 'utils/userPreferences/userPreferencesContext' export const Occurrences = () => { const { user } = useUser() - const { - userPreferences: { scoreThreshold }, - } = useUserPreferences() + const { userPreferences } = useUserPreferences() const { projectId, id } = useParams() const { columnSettings, setColumnSettings } = useColumnSettings( 'occurrences', @@ -55,10 +55,9 @@ export const Occurrences = () => { order: 'desc', }) const { pagination, setPage } = usePagination() - const defaultFilters = [ - { field: 'classification_threshold', value: `${scoreThreshold}` }, - ] - const { filters } = useFilters(defaultFilters) + const { activeFilters, filters } = useFilters({ + classification_threshold: `${userPreferences.scoreThreshold}`, + }) const { occurrences, total, isLoading, isFetching, error } = useOccurrences({ projectId, pagination, @@ -77,64 +76,89 @@ export const Occurrences = () => { return ( <> - - - - - - {selectedView === 'table' && ( -
!!columnSettings[column.id])} - sortable - sortSettings={sort} - selectable={user.loggedIn} - selectedItems={selectedItems} - onSelectedItemsChange={setSelectedItems} - onSortSettingsChange={setSort} - /> - )} - {selectedView === 'gallery' && ( -
- +
+
+ + + + + + + + + {user.loggedIn && } + + + + + + + +
+
+ + + + + {selectedView === 'table' && ( +
!!columnSettings[column.id])} + sortable + sortSettings={sort} + selectable={user.loggedIn} + selectedItems={selectedItems} + onSelectedItemsChange={setSelectedItems} + onSortSettingsChange={setSort} + /> + )} + {selectedView === 'gallery' && ( +
+ +
+ )} - )} + { - const containerRef = useRef(null) - const inputRef = useRef(null) - const [taxon, setTaxon] = useState() - const { filters, addFilter, clearFilter } = useFilters() - - useEffect(() => { - // Clear taxon if taxon filter is cleared - const currentFilter = filters.find( - (filter) => filter.field === FILTER_FIELD - ) - - if (currentFilter?.value === undefined) { - setTaxon(undefined) - } - }, [filters]) - - return ( -
- { - setTaxon(taxon) - if (taxon) { - addFilter(FILTER_FIELD, taxon.id) - } else { - clearFilter(FILTER_FIELD) - } - }} - /> -
- ) -} diff --git a/ui/src/pages/overview/collections/collection-columns.tsx b/ui/src/pages/overview/collections/collection-columns.tsx index d26ad76c9..c3cd7ddab 100644 --- a/ui/src/pages/overview/collections/collection-columns.tsx +++ b/ui/src/pages/overview/collections/collection-columns.tsx @@ -73,7 +73,7 @@ export const columns: (projectId: string) => TableColumn[] = ( }, { id: 'taxa', - name: translate(STRING.FIELD_LABEL_SPECIES), + name: translate(STRING.FIELD_LABEL_TAXA), sortField: 'taxa_count', styles: { textAlign: TextAlign.Right, diff --git a/ui/src/pages/session-details/playback/capture-details/capture-details.module.scss b/ui/src/pages/session-details/playback/capture-details/capture-details.module.scss index f98b02a53..a0aca68eb 100644 --- a/ui/src/pages/session-details/playback/capture-details/capture-details.module.scss +++ b/ui/src/pages/session-details/playback/capture-details/capture-details.module.scss @@ -32,7 +32,7 @@ display: block; @include paragraph-xx-small(); text-transform: uppercase; - font-weight: 700; + font-weight: 600; color: $color-neutral-300; } @@ -40,6 +40,15 @@ display: block; @include paragraph-x-small(); color: $color-generic-white; + + &.bubble { + height: auto; + padding: 6px 8px 4px; + border-radius: 4px; + border: 1px solid $color-neutral-600; + background-color: $color-neutral-600; + font-weight: 600; + } } @media only screen and (max-width: $small-screen-breakpoint) { diff --git a/ui/src/pages/session-details/playback/capture-details/capture-details.tsx b/ui/src/pages/session-details/playback/capture-details/capture-details.tsx index 86e139bd1..f7333938c 100644 --- a/ui/src/pages/session-details/playback/capture-details/capture-details.tsx +++ b/ui/src/pages/session-details/playback/capture-details/capture-details.tsx @@ -1,3 +1,4 @@ +import classNames from 'classnames' import { useStarCapture } from 'data-services/hooks/captures/useStarCapture' import { usePipelines } from 'data-services/hooks/pipelines/usePipelines' import { useProjectDetails } from 'data-services/hooks/projects/useProjectDetails' @@ -10,7 +11,9 @@ import { IconType } from 'design-system/components/icon/icon' import { Select, SelectTheme } from 'design-system/components/select/select' import { Tooltip } from 'design-system/components/tooltip/tooltip' import { useState } from 'react' -import { useParams } from 'react-router-dom' +import { Link, useParams } from 'react-router-dom' +import { APP_ROUTES } from 'utils/constants' +import { getAppRoute } from 'utils/getAppRoute' import { STRING, translate } from 'utils/language' import { useUser } from 'utils/user/userContext' import styles from './capture-details.module.scss' @@ -24,6 +27,7 @@ export const CaptureDetails = ({ captureId: string }) => { const { user } = useUser() + const { projectId } = useParams() if (!capture) { return null @@ -69,6 +73,25 @@ export const CaptureDetails = ({ )} +
+ + {translate(STRING.FIELD_LABEL_JOBS)} + + + + {capture.numJobs} + + +
{translate(STRING.FIELD_LABEL_DETECTIONS)} @@ -79,7 +102,20 @@ export const CaptureDetails = ({ {translate(STRING.FIELD_LABEL_OCCURRENCES)} - {capture.numOccurrences} + + + {capture.numOccurrences} + +
diff --git a/ui/src/pages/session-details/playback/frame/frame.module.scss b/ui/src/pages/session-details/playback/frame/frame.module.scss index 74ae1d2b6..f6a446ca2 100644 --- a/ui/src/pages/session-details/playback/frame/frame.module.scss +++ b/ui/src/pages/session-details/playback/frame/frame.module.scss @@ -35,11 +35,17 @@ .detection { position: absolute; box-sizing: border-box; - outline: 2px solid $color-destructive-500; + outline: 2px solid $color-success-500; border-radius: 2px; - &.meetsThreshold { - outline: 2px solid $color-success-500; + + + &.warning { + outline-color: $color-warning-500; + } + + &.alert { + outline-color: $color-destructive-500; } &.active { diff --git a/ui/src/pages/session-details/playback/frame/frame.tsx b/ui/src/pages/session-details/playback/frame/frame.tsx index d0682e701..4129fe18e 100644 --- a/ui/src/pages/session-details/playback/frame/frame.tsx +++ b/ui/src/pages/session-details/playback/frame/frame.tsx @@ -4,19 +4,19 @@ import { LoadingSpinner } from 'design-system/components/loading-spinner/loading import { Tooltip } from 'design-system/components/tooltip/tooltip' import { useLayoutEffect, useMemo, useRef, useState } from 'react' import { useParams } from 'react-router-dom' -import { APP_ROUTES } from 'utils/constants' +import { APP_ROUTES, SCORE_THRESHOLDS } from 'utils/constants' import { useActiveOccurrences } from '../useActiveOccurrences' import styles from './frame.module.scss' import { BoxStyle } from './types' const FALLBACK_RATIO = 16 / 9 + interface FrameProps { src?: string width: number | null height: number | null detections: CaptureDetection[] showDetections?: boolean - threshold: number } export const Frame = ({ @@ -25,7 +25,6 @@ export const Frame = ({ height, detections, showDetections, - threshold, }: FrameProps) => { const [naturalSize, setNaturalSize] = useState<{ width: number @@ -123,7 +122,6 @@ export const Frame = ({ boxStyles={boxStyles} detections={detections} showDetections={showDetections} - threshold={threshold} />
{isLoading && ( @@ -170,12 +168,10 @@ const FrameDetections = ({ boxStyles, detections, showDetections, - threshold, }: { boxStyles: { [key: number]: BoxStyle } detections: CaptureDetection[] showDetections?: boolean - threshold: number }) => { const { projectId } = useParams() const containerRef = useRef(null) @@ -225,8 +221,8 @@ const FrameDetections = ({ style={style} className={classNames(styles.detection, { [styles.active]: isActive, - [styles.meetsThreshold]: - detection.score && detection.score >= threshold, + [styles.warning]: detection.score < SCORE_THRESHOLDS.WARNING, + [styles.alert]: detection.score < SCORE_THRESHOLDS.ALERT, [styles.clickable]: !!detection.occurrenceId, })} onClick={() => { diff --git a/ui/src/pages/session-details/playback/playback.module.scss b/ui/src/pages/session-details/playback/playback.module.scss index d8f5db0f7..3296dc409 100644 --- a/ui/src/pages/session-details/playback/playback.module.scss +++ b/ui/src/pages/session-details/playback/playback.module.scss @@ -39,6 +39,14 @@ @include label(); color: $color-generic-white; } + + .label { + display: block; + @include paragraph-xx-small(); + text-transform: uppercase; + font-weight: 600; + color: $color-neutral-300; + } } .captureNavigationWrapper { diff --git a/ui/src/pages/session-details/playback/playback.tsx b/ui/src/pages/session-details/playback/playback.tsx index c20a8bf2c..157ef3f19 100644 --- a/ui/src/pages/session-details/playback/playback.tsx +++ b/ui/src/pages/session-details/playback/playback.tsx @@ -7,6 +7,7 @@ import { CheckboxTheme, } from 'design-system/components/checkbox/checkbox' import { useMemo, useState } from 'react' +import { STRING, translate } from 'utils/language' import { useUserPreferences } from 'utils/userPreferences/userPreferencesContext' import { ActivityPlot } from './activity-plot/lazy-activity-plot' import { CaptureDetails } from './capture-details/capture-details' @@ -66,7 +67,12 @@ export const Playback = ({ session }: { session: SessionDetails }) => { )}
View settings - +
+ + {translate(STRING.FIELD_LABEL_SCORE_THRESHOLD)} + + +
{ height={activeCapture?.height ?? session.firstCapture.height} detections={detections} showDetections={showDetections} - threshold={scoreThreshold} />
diff --git a/ui/src/pages/session-details/playback/threshold-slider/threshold-slider.tsx b/ui/src/pages/session-details/playback/threshold-slider/threshold-slider.tsx index 8ab3c553f..cbd6b37cf 100644 --- a/ui/src/pages/session-details/playback/threshold-slider/threshold-slider.tsx +++ b/ui/src/pages/session-details/playback/threshold-slider/threshold-slider.tsx @@ -1,29 +1,43 @@ -import { ScoreSlider } from 'design-system/components/slider/score-slider' +import { Slider } from 'nova-ui-kit' import { useState } from 'react' -import { STRING, translate } from 'utils/language' import { useUserPreferences } from 'utils/userPreferences/userPreferencesContext' -const DEFAULT_THRESHOLD = 0.6 // TODO: Current model should decide this value - export const ThresholdSlider = () => { + const [active, setActive] = useState(false) const { userPreferences, setUserPreferences } = useUserPreferences() const [displayThreshold, setDisplayThreshold] = useState( userPreferences.scoreThreshold ) + const onValueCommit = (value: number) => { + setDisplayThreshold(value) + setUserPreferences({ + ...userPreferences, + scoreThreshold: value, + }) + } + return ( - { - setDisplayThreshold(value) - setUserPreferences({ - ...userPreferences, - scoreThreshold: value, - }) - }} - /> +
+ setDisplayThreshold(value)} + onValueCommit={([value]) => onValueCommit(value)} + onPointerDown={() => setActive(true)} + onPointerUp={() => setActive(false)} + onPointerLeave={() => { + if (active) { + onValueCommit(displayThreshold) + } + }} + /> + {displayThreshold} +
) } diff --git a/ui/src/pages/session-details/session-info/session-info.tsx b/ui/src/pages/session-details/session-info/session-info.tsx index 39abbd2b6..a54944b70 100644 --- a/ui/src/pages/session-details/session-info/session-info.tsx +++ b/ui/src/pages/session-details/session-info/session-info.tsx @@ -46,14 +46,14 @@ export const SessionInfo = ({ session }: { session: Session }) => { filters: { event: session.id }, }), }, - ...(session.numSpecies !== undefined + ...(session.numTaxa !== undefined ? [ { - label: translate(STRING.FIELD_LABEL_SPECIES), - value: session.numSpecies, + label: translate(STRING.FIELD_LABEL_TAXA), + value: session.numTaxa, to: getAppRoute({ - to: APP_ROUTES.SPECIES({ projectId: projectId as string }), - filters: { occurrences__event: session.id }, + to: APP_ROUTES.TAXA({ projectId: projectId as string }), + filters: { event: session.id }, }), }, ] diff --git a/ui/src/pages/sessions/session-columns.tsx b/ui/src/pages/sessions/session-columns.tsx index 046786c26..8343435c6 100644 --- a/ui/src/pages/sessions/session-columns.tsx +++ b/ui/src/pages/sessions/session-columns.tsx @@ -129,7 +129,7 @@ export const columns: (projectId: string) => TableColumn[] = ( }, { id: 'species', - name: translate(STRING.FIELD_LABEL_SPECIES), + name: translate(STRING.FIELD_LABEL_TAXA), sortField: 'taxa_count', styles: { textAlign: TextAlign.Right, @@ -137,11 +137,11 @@ export const columns: (projectId: string) => TableColumn[] = ( renderCell: (item: Session) => ( - + ), }, diff --git a/ui/src/pages/sessions/sessions.module.scss b/ui/src/pages/sessions/sessions.module.scss index 671955ba9..e8a4c4f15 100644 --- a/ui/src/pages/sessions/sessions.module.scss +++ b/ui/src/pages/sessions/sessions.module.scss @@ -1,7 +1,7 @@ @import 'src/design-system/variables/variables.scss'; .galleryContent { - padding-top: 32px; + padding-top: 24px; } @media only screen and (max-width: $small-screen-breakpoint) { diff --git a/ui/src/pages/sessions/sessions.tsx b/ui/src/pages/sessions/sessions.tsx index 5ee4a3c5c..646c01369 100644 --- a/ui/src/pages/sessions/sessions.tsx +++ b/ui/src/pages/sessions/sessions.tsx @@ -1,3 +1,5 @@ +import { FilterControl } from 'components/filtering/filter-control' +import { FilterSection } from 'components/filtering/filter-section' import { useSessions } from 'data-services/hooks/sessions/useSessions' import { IconType } from 'design-system/components/icon/icon' import { PageFooter } from 'design-system/components/page-footer/page-footer' @@ -50,55 +52,61 @@ export const Sessions = () => { return ( <> - - - - - {selectedView === 'table' && ( -
!!columnSettings[column.id] +
+ + + +
+ + + + + {selectedView === 'table' && ( +
!!columnSettings[column.id] + )} + sortable + sortSettings={sort} + onSortSettingsChange={setSort} + /> + )} + {selectedView === 'gallery' && ( +
+ +
)} - sortable - sortSettings={sort} - onSortSettingsChange={setSort} - /> - )} - {selectedView === 'gallery' && ( -
-
- )} + {sessions?.length ? ( { size={TaxonInfoSize.Large} getLink={(id: string) => getAppRoute({ - to: APP_ROUTES.SPECIES_DETAILS({ + to: APP_ROUTES.TAXON_DETAILS({ projectId: projectId as string, - speciesId: id, + taxonId: id, }), }) } diff --git a/ui/src/pages/species/species-columns.tsx b/ui/src/pages/species/species-columns.tsx index 79d5e4d33..bfaaab9b4 100644 --- a/ui/src/pages/species/species-columns.tsx +++ b/ui/src/pages/species/species-columns.tsx @@ -24,7 +24,7 @@ export const columns: (projectId: string) => TableColumn[] = ( }, renderCell: (item: Species) => { const detailsRoute = getAppRoute({ - to: APP_ROUTES.SPECIES_DETAILS({ projectId, speciesId: item.id }), + to: APP_ROUTES.TAXON_DETAILS({ projectId, taxonId: item.id }), keepSearchParams: true, }) @@ -45,7 +45,7 @@ export const columns: (projectId: string) => TableColumn[] = ( renderCell: (item: Species) => ( diff --git a/ui/src/pages/species/species-gallery.tsx b/ui/src/pages/species/species-gallery.tsx index 887d37b7a..35ab15ca8 100644 --- a/ui/src/pages/species/species-gallery.tsx +++ b/ui/src/pages/species/species-gallery.tsx @@ -21,9 +21,9 @@ export const SpeciesGallery = ({ image: s.images[0], title: s.name, to: getAppRoute({ - to: APP_ROUTES.SPECIES_DETAILS({ + to: APP_ROUTES.TAXON_DETAILS({ projectId: projectId as string, - speciesId: s.id, + taxonId: s.id, }), keepSearchParams: true, }), diff --git a/ui/src/pages/species/species.module.scss b/ui/src/pages/species/species.module.scss index 671955ba9..e8a4c4f15 100644 --- a/ui/src/pages/species/species.module.scss +++ b/ui/src/pages/species/species.module.scss @@ -1,7 +1,7 @@ @import 'src/design-system/variables/variables.scss'; .galleryContent { - padding-top: 32px; + padding-top: 24px; } @media only screen and (max-width: $small-screen-breakpoint) { diff --git a/ui/src/pages/species/species.tsx b/ui/src/pages/species/species.tsx index 0cec39f3b..5b0a99e3d 100644 --- a/ui/src/pages/species/species.tsx +++ b/ui/src/pages/species/species.tsx @@ -1,3 +1,5 @@ +import { FilterControl } from 'components/filtering/filter-control' +import { FilterSection } from 'components/filtering/filter-section' import { useSpecies } from 'data-services/hooks/species/useSpecies' import { useSpeciesDetails } from 'data-services/hooks/species/useSpeciesDetails' import * as Dialog from 'design-system/components/dialog/dialog' @@ -8,7 +10,6 @@ import { PaginationBar } from 'design-system/components/pagination-bar/paginatio import { Table } from 'design-system/components/table/table/table' import { ToggleGroup } from 'design-system/components/toggle-group/toggle-group' import { Error } from 'pages/error/error' -import { TaxonFilter } from 'pages/occurrences/taxon-filter/taxon-filter' import { SpeciesDetails } from 'pages/species-details/species-details' import { useContext, useEffect } from 'react' import { useNavigate, useParams } from 'react-router-dom' @@ -23,19 +24,12 @@ import { useSort } from 'utils/useSort' import { columns } from './species-columns' import { SpeciesGallery } from './species-gallery' import styles from './species.module.scss' -import { useUserPreferences } from 'utils/userPreferences/userPreferencesContext' export const Species = () => { - const { - userPreferences: { scoreThreshold }, - } = useUserPreferences() const { projectId, id } = useParams() const { sort, setSort } = useSort({ field: 'name', order: 'asc' }) const { pagination, setPage } = usePagination() - const defaultFilters = [ - { field: 'classification_threshold', value: `${scoreThreshold}` }, - ] - const { filters } = useFilters(defaultFilters) + const { filters } = useFilters() const { species, total, isLoading, isFetching, error } = useSpecies({ projectId, sort, @@ -50,49 +44,55 @@ export const Species = () => { return ( <> - - - - - {selectedView === 'table' && ( -
- )} - {selectedView === 'gallery' && ( -
- +
+ + + + + +
+ + + + {selectedView === 'table' && ( +
+ )} + {selectedView === 'gallery' && ( +
+ +
+ )} - )} + {species?.length ? ( { onOpenChange={() => navigate( getAppRoute({ - to: APP_ROUTES.SPECIES({ projectId: projectId as string }), + to: APP_ROUTES.TAXA({ projectId: projectId as string }), keepSearchParams: true, }) ) diff --git a/ui/src/utils/constants.ts b/ui/src/utils/constants.ts index a19092566..0814256b4 100644 --- a/ui/src/utils/constants.ts +++ b/ui/src/utils/constants.ts @@ -35,11 +35,10 @@ export const APP_ROUTES = { OCCURRENCE_DETAILS: (params: { projectId: string; occurrenceId: string }) => `/projects/${params.projectId}/occurrences/${params.occurrenceId}`, - SPECIES: (params: { projectId: string }) => - `/projects/${params.projectId}/species`, + TAXA: (params: { projectId: string }) => `/projects/${params.projectId}/taxa`, - SPECIES_DETAILS: (params: { projectId: string; speciesId: string }) => - `/projects/${params.projectId}/species/${params.speciesId}`, + TAXON_DETAILS: (params: { projectId: string; taxonId: string }) => + `/projects/${params.projectId}/taxa/${params.taxonId}`, COLLECTIONS: (params: { projectId: string }) => `/projects/${params.projectId}/collections`, @@ -53,3 +52,8 @@ export const API_MAX_UPLOAD_SIZE = 1024 * 1024 * 30 // 30MB export const LANDING_PAGE_URL = 'https://insectai.org/' export const LANDING_PAGE_WAITLIST_URL = 'https://insectai.org/waitlist' + +export const SCORE_THRESHOLDS = { + WARNING: 0.8, + ALERT: 0.6, +} diff --git a/ui/src/utils/getAppRoute.ts b/ui/src/utils/getAppRoute.ts index 5c05c465e..dfd877179 100644 --- a/ui/src/utils/getAppRoute.ts +++ b/ui/src/utils/getAppRoute.ts @@ -1,14 +1,13 @@ type FilterType = | 'deployment' | 'event' - | 'occurrences__deployment' - | 'occurrences__event' | 'occurrence' | 'capture' | 'detections__source_image' | 'taxon' | 'timestamp' | 'collection' + | 'source_image_single' export const getAppRoute = ({ to, diff --git a/ui/src/utils/language.ts b/ui/src/utils/language.ts index a315c9aa5..74ab15352 100644 --- a/ui/src/utils/language.ts +++ b/ui/src/utils/language.ts @@ -23,6 +23,7 @@ export enum STRING { REFRESH, RESET, RETRY, + RERUN, SAVE, SAVED, SEARCH_MAP, @@ -79,6 +80,7 @@ export enum STRING { FIELD_LABEL_IMAGE, FIELD_LABEL_ICON, FIELD_LABEL_LAST_CHECKED, + FIELD_LABEL_JOBS, FIELD_LABEL_LAST_SYNCED, FIELD_LABEL_LATITUDE, FIELD_LABEL_LOCATION, @@ -105,8 +107,8 @@ export enum STRING { FIELD_LABEL_DATA_SOURCE, FIELD_LABEL_SAMPLE_CAPTURES, FIELD_LABEL_SCORE, + FIELD_LABEL_SCORE_THRESHOLD, FIELD_LABEL_SNAPSHOTS, - FIELD_LABEL_SPECIES, FIELD_LABEL_STARTED_AT, FIELD_LABEL_STATUS, FIELD_LABEL_TAXON, @@ -118,6 +120,7 @@ export enum STRING { FIELD_LABEL_TOTAL_FILES, FIELD_LABEL_TOTAL_SIZE, FIELD_LABEL_TRAINING_IMAGES, + FIELD_LABEL_TYPE, FIELD_LABEL_FIRST_DATE, FIELD_LABEL_LAST_DATE, FIELD_LABEL_UPDATED_AT, @@ -160,7 +163,7 @@ export enum STRING { NAV_ITEM_OVERVIEW, NAV_ITEM_PROJECTS, NAV_ITEM_SESSIONS, - NAV_ITEM_SPECIES, + NAV_ITEM_TAXA, /* TAB_ITEM */ TAB_ITEM_BACKENDS, @@ -258,6 +261,7 @@ const ENGLISH_STRINGS: { [key in STRING]: string } = { [STRING.REFRESH]: 'Refresh', [STRING.RESET]: 'Reset', [STRING.RETRY]: 'Retry', + [STRING.RERUN]: 'Re-run', [STRING.SAVE]: 'Save', [STRING.SAVED]: 'Saved', [STRING.SEARCH_MAP]: 'Search on the map', @@ -301,6 +305,7 @@ const ENGLISH_STRINGS: { [key in STRING]: string } = { [STRING.FIELD_LABEL_IMAGE]: 'Cover image', [STRING.FIELD_LABEL_ICON]: 'Icon', [STRING.FIELD_LABEL_LAST_CHECKED]: 'Last seen online', + [STRING.FIELD_LABEL_JOBS]: 'Jobs', [STRING.FIELD_LABEL_LAST_SYNCED]: 'Last synced with data source', [STRING.FIELD_LABEL_LATITUDE]: 'Latitude', [STRING.FIELD_LABEL_LOCATION]: 'Location', @@ -322,17 +327,17 @@ const ENGLISH_STRINGS: { [key in STRING]: string } = { [STRING.FIELD_LABEL_SESSIONS]: 'Sessions', [STRING.FIELD_LABEL_SITE]: 'Site', [STRING.FIELD_LABEL_SIZE]: 'Size', - [STRING.FIELD_LABEL_SOURCE_IMAGE]: 'Capture', - [STRING.FIELD_LABEL_SOURCE_IMAGES]: 'Captures', + [STRING.FIELD_LABEL_SOURCE_IMAGE]: 'Source image', + [STRING.FIELD_LABEL_SOURCE_IMAGES]: 'Source image collection', [STRING.FIELD_LABEL_DATA_SOURCE]: 'Data source', [STRING.FIELD_LABEL_SAMPLE_CAPTURES]: 'Sample images', [STRING.FIELD_LABEL_SCORE]: 'Score', + [STRING.FIELD_LABEL_SCORE_THRESHOLD]: 'Score threshold', [STRING.FIELD_LABEL_SNAPSHOTS]: 'Snapshots', - [STRING.FIELD_LABEL_SPECIES]: 'Species', [STRING.FIELD_LABEL_STARTED_AT]: 'Started at', [STRING.FIELD_LABEL_STATUS]: 'Status', - [STRING.FIELD_LABEL_TAXON]: 'Taxon', [STRING.FIELD_LABEL_TAXA]: 'Taxa', + [STRING.FIELD_LABEL_TAXON]: 'Taxon', [STRING.FIELD_LABEL_THUMBNAIL]: 'Thumbnail', [STRING.FIELD_LABEL_TIME]: 'Local time', [STRING.FIELD_LABEL_TIME_OBSERVED]: 'Local time observed', @@ -340,6 +345,7 @@ const ENGLISH_STRINGS: { [key in STRING]: string } = { [STRING.FIELD_LABEL_TOTAL_FILES]: 'Total files', [STRING.FIELD_LABEL_TOTAL_SIZE]: 'Total size', [STRING.FIELD_LABEL_TRAINING_IMAGES]: 'Reference images', + [STRING.FIELD_LABEL_TYPE]: 'Type', [STRING.FIELD_LABEL_FIRST_DATE]: 'First date', [STRING.FIELD_LABEL_LAST_DATE]: 'Last date', [STRING.FIELD_LABEL_UPLOAD_CAPTURES]: 'Upload images', @@ -410,7 +416,7 @@ const ENGLISH_STRINGS: { [key in STRING]: string } = { [STRING.NAV_ITEM_OVERVIEW]: 'Overview', [STRING.NAV_ITEM_PROJECTS]: 'Projects', [STRING.NAV_ITEM_SESSIONS]: 'Sessions', - [STRING.NAV_ITEM_SPECIES]: 'Species', + [STRING.NAV_ITEM_TAXA]: 'Taxa', /* TAB_ITEM */ [STRING.TAB_ITEM_BACKENDS]: 'Backends', @@ -454,7 +460,7 @@ const ENGLISH_STRINGS: { [key in STRING]: string } = { [STRING.TOOLTIP_SITE]: 'A site is a physical location where monitoring is taking place. One or many stations can be connected to a site.', [STRING.TOOLTIP_STATUS]: - 'A status is the processing stage of a job once submitted: Created > Pending > Running > Done. A Failed status means the job stopped before it had finished.', + 'A status is the processing stage of a job once submitted: Created > Pending > Started > Success. A Failed status means the job stopped before it had finished.', [STRING.TOOLTIP_STORAGE]: 'A storage is a place where source images are kept, for example a S3 bucket. One or many stations can be connected to a storage.', diff --git a/ui/src/utils/useFilters.ts b/ui/src/utils/useFilters.ts index 55d8a9301..d277401ce 100644 --- a/ui/src/utils/useFilters.ts +++ b/ui/src/utils/useFilters.ts @@ -1,58 +1,89 @@ import { useSearchParams } from 'react-router-dom' -const AVAILABLE_FILTERS = [ +export const AVAILABLE_FILTERS = [ + { + label: 'Include algorithm', + field: 'algorithm', + }, + { + label: 'Score threshold', + field: 'classification_threshold', + }, + { + label: 'Collection', + field: 'collection', // This is for viewing Occurrences by collection + }, + { + label: 'Collection', + field: 'source_image_collection', // This is for viewing Jobs by collection. @TODO: Can we update this key to "collection" to streamline? + }, { label: 'Station', field: 'deployment', }, { - label: 'Occurrence station', - field: 'occurrences__deployment', + label: 'End date', + field: 'date_end', + }, + { + label: 'Start date', + field: 'date_start', + }, + { + label: 'Source image', + field: 'detections__source_image', // This is for viewing Occurrences by source image. @TODO: Can we update this key to "source_image" to streamline? }, { label: 'Session', field: 'event', }, { - label: 'Occurrence session', - field: 'occurrences__event', + label: 'Pipeline', + field: 'pipeline', + }, + { + label: 'Exclude algorithm', + field: 'not_algorithm', }, { label: 'Taxon', field: 'taxon', }, { - label: 'Score threshold', - field: 'classification_threshold', + label: 'Source image', + field: 'source_image_single', // This is for viewing Jobs by source image. @TODO: Can we update this key to "source_image" to streamline? }, { - label: 'Capture collection', - field: 'collection', + label: 'Status', + field: 'status', }, { - label: 'Capture', - field: 'detections__source_image', + label: 'Type', + field: 'job_type_key', + }, + { + label: 'Verification status', + field: 'verified', + }, + { + label: 'Verified by', + field: 'verified_by_me', }, ] -export const useFilters = ( - defaultFilters?: { field: string; value: string }[] -) => { +export const useFilters = (defaultFilters?: { [field: string]: string }) => { const [searchParams, setSearchParams] = useSearchParams() const filters = AVAILABLE_FILTERS.map((filter) => { const value = searchParams.getAll(filter.field)[0] - const defaultValue = defaultFilters?.find( - (defaultFilter) => defaultFilter.field === filter.field - )?.value return { ...filter, - value: value ?? defaultValue, + value: value ?? defaultFilters?.[filter.field], } }) - const isActive = filters.some((filter) => filter.value?.length) + const activeFilters = filters.filter((filter) => filter.value?.length) const addFilter = (field: string, value: string) => { if (AVAILABLE_FILTERS.some((filter) => filter.field === field)) { @@ -69,9 +100,9 @@ export const useFilters = ( } return { - filters, - isActive, + activeFilters, addFilter, clearFilter, + filters, } } diff --git a/ui/src/utils/useNavItems.ts b/ui/src/utils/useNavItems.ts index 07b01249c..3823b41c3 100644 --- a/ui/src/utils/useNavItems.ts +++ b/ui/src/utils/useNavItems.ts @@ -80,14 +80,14 @@ export const useNavItems = () => { }), }, { - id: 'species', - title: translate(STRING.NAV_ITEM_SPECIES), + id: 'taxa', + title: translate(STRING.NAV_ITEM_TAXA), icon: IconType.Species, count: status?.numSpecies, - path: APP_ROUTES.SPECIES({ projectId: projectId as string }), - matchPath: APP_ROUTES.SPECIES_DETAILS({ + path: APP_ROUTES.TAXA({ projectId: projectId as string }), + matchPath: APP_ROUTES.TAXON_DETAILS({ projectId: ':projectId', - speciesId: '*', + taxonId: '*', }), }, ], diff --git a/ui/tailwind.config.js b/ui/tailwind.config.js new file mode 100644 index 000000000..d3222203e --- /dev/null +++ b/ui/tailwind.config.js @@ -0,0 +1,21 @@ +import { CONSTANTS } from 'nova-ui-kit' +import { BREAKPOINTS } from './src/components/constants' + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./src/**/*.{ts,tsx}', './node_modules/nova-ui-kit/**/*.js'], + theme: { + colors: CONSTANTS.COLORS, + screens: { + sm: `${BREAKPOINTS.SM}px`, + md: `${BREAKPOINTS.MD}px`, + lg: `${BREAKPOINTS.LG}px`, + xl: `${BREAKPOINTS.XL}px`, + }, + extend: { + backgroundImage: CONSTANTS.GRADIENTS, + colors: CONSTANTS.COLOR_THEME, + }, + }, + plugins: [], +} diff --git a/ui/tsconfig.json b/ui/tsconfig.json index 9ce6beeeb..e73dd3936 100644 --- a/ui/tsconfig.json +++ b/ui/tsconfig.json @@ -16,7 +16,7 @@ "noEmit": true, "jsx": "react-jsx", "baseUrl": "src", - "types": ["vite/client", "vite-plugin-svgr/client"] + "types": ["vite/client", "vite-plugin-svgr/client", "node"] }, "include": ["src", "vite-env.d.ts"] } diff --git a/ui/yarn.lock b/ui/yarn.lock index 06026d9bc..d22e197cf 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -19,6 +19,13 @@ __metadata: languageName: node linkType: hard +"@alloc/quick-lru@npm:^5.2.0": + version: 5.2.0 + resolution: "@alloc/quick-lru@npm:5.2.0" + checksum: 7b878c48b9d25277d0e1a9b8b2f2312a314af806b4129dc902f2bc29ab09b58236e53964689feec187b28c80d2203aff03829754773a707a8a5987f1b7682d92 + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0": version: 2.2.0 resolution: "@ampproject/remapping@npm:2.2.0" @@ -29,17 +36,6 @@ __metadata: languageName: node linkType: hard -"@aw-web-design/x-default-browser@npm:1.4.126": - version: 1.4.126 - resolution: "@aw-web-design/x-default-browser@npm:1.4.126" - dependencies: - default-browser-id: "npm:3.0.0" - bin: - x-default-browser: bin/x-default-browser.js - checksum: 634c7fad7a5f4df86e3fcd3a11e50034fcb6f6302281569727574cbda7532850063cb34ec328384a686ab0812f297bf301a5e2450bc7b93b5f80a006b1f2dfd7 - languageName: node - linkType: hard - "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6": version: 7.18.6 resolution: "@babel/code-frame@npm:7.18.6" @@ -66,14 +62,14 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9, @babel/compat-data@npm:^7.23.3": +"@babel/compat-data@npm:^7.22.9": version: 7.23.3 resolution: "@babel/compat-data@npm:7.23.3" checksum: c6af331753c34ee8a5678bc94404320826cb56b1dda3efc1311ec8fb0774e78225132f3c1acc988440ace667f14a838e297a822692b95758aa63da406e1f97a1 languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.13.16, @babel/core@npm:^7.18.9, @babel/core@npm:^7.20.12, @babel/core@npm:^7.21.3, @babel/core@npm:^7.22.9, @babel/core@npm:^7.23.2": +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.2": version: 7.23.3 resolution: "@babel/core@npm:7.23.3" dependencies: @@ -131,7 +127,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.22.9, @babel/generator@npm:^7.23.3, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.23.3, @babel/generator@npm:^7.7.2": version: 7.23.3 resolution: "@babel/generator@npm:7.23.3" dependencies: @@ -143,24 +139,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" - dependencies: - "@babel/types": "npm:^7.22.5" - checksum: 5a80dc364ddda26b334bbbc0f6426cab647381555ef7d0cd32eb284e35b867c012ce6ce7d52a64672ed71383099c99d32765b3d260626527bb0e3470b0f58e45 - languageName: node - linkType: hard - -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.15" - dependencies: - "@babel/types": "npm:^7.22.15" - checksum: 2535e3824ca6337f65786bbac98e562f71699f25532cecd196f027d7698b4967a96953d64e36567956658ad1a05ccbdc62d1ba79ee751c79f4f1d2d3ecc2e01c - languageName: node - linkType: hard - "@babel/helper-compilation-targets@npm:^7.20.7": version: 7.20.7 resolution: "@babel/helper-compilation-targets@npm:7.20.7" @@ -176,7 +154,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.6": +"@babel/helper-compilation-targets@npm:^7.22.15": version: 7.22.15 resolution: "@babel/helper-compilation-targets@npm:7.22.15" dependencies: @@ -189,53 +167,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/helper-create-class-features-plugin@npm:7.22.15" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-environment-visitor": "npm:^7.22.5" - "@babel/helper-function-name": "npm:^7.22.5" - "@babel/helper-member-expression-to-functions": "npm:^7.22.15" - "@babel/helper-optimise-call-expression": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" - "@babel/helper-split-export-declaration": "npm:^7.22.6" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 2ae5759fe8845fda99b34f2ba6cd0794fc860213d14c93a87aa9180960252bce621157a79c373b7fbb423b25a55fb0e20eae0d5f8e4ad5ef22dc70e7c2af3805 - languageName: node - linkType: hard - -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.15, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": - version: 7.22.15 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.22.5" - regexpu-core: "npm:^5.3.1" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 8eba4c1b7b94a83e7a82df5c3e504584ff0ba6ab8710a67ecc2c434a7fb841a29c2f5c94d2de51f25446119a1df538fa90b37bd570db22ddd5e7147fe98277c6 - languageName: node - linkType: hard - -"@babel/helper-define-polyfill-provider@npm:^0.4.3": - version: 0.4.3 - resolution: "@babel/helper-define-polyfill-provider@npm:0.4.3" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.22.6" - "@babel/helper-plugin-utils": "npm:^7.22.5" - debug: "npm:^4.1.1" - lodash.debounce: "npm:^4.0.8" - resolve: "npm:^1.14.2" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 0007035157e0d32ee9cb4ca319b89d6f3705523383efe52a59eb3d4dfa2ed08c5147e49c10a6e6d69c15221d89c76c8e5875475d6710fb44a5c37b8e69388e40 - languageName: node - linkType: hard - "@babel/helper-environment-visitor@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-environment-visitor@npm:7.18.9" @@ -243,14 +174,14 @@ __metadata: languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.22.20, @babel/helper-environment-visitor@npm:^7.22.5": +"@babel/helper-environment-visitor@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-environment-visitor@npm:7.22.20" checksum: e762c2d8f5d423af89bd7ae9abe35bd4836d2eb401af868a63bbb63220c513c783e25ef001019418560b3fdc6d9a6fb67e6c0b650bcdeb3a2ac44b5c3d2bdd94 languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.22.5, @babel/helper-function-name@npm:^7.23.0": +"@babel/helper-function-name@npm:^7.23.0": version: 7.23.0 resolution: "@babel/helper-function-name@npm:7.23.0" dependencies: @@ -269,15 +200,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.22.15": - version: 7.23.0 - resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" - dependencies: - "@babel/types": "npm:^7.23.0" - checksum: b810daddf093ffd0802f1429052349ed9ea08ef7d0c56da34ffbcdecbdafac86f95bdea2fe30e0e0e629febc7dd41b56cb5eacc10d1a44336d37b755dac31fa4 - languageName: node - linkType: hard - "@babel/helper-module-imports@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-module-imports@npm:7.18.6" @@ -327,15 +249,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-optimise-call-expression@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" - dependencies: - "@babel/types": "npm:^7.22.5" - checksum: 31b41a764fc3c585196cf5b776b70cf4705c132e4ce9723f39871f215f2ddbfb2e28a62f9917610f67c8216c1080482b9b05f65dd195dae2a52cef461f2ac7b8 - languageName: node - linkType: hard - "@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.8.0": version: 7.20.2 resolution: "@babel/helper-plugin-utils@npm:7.20.2" @@ -343,39 +256,13 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.3": +"@babel/helper-plugin-utils@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-plugin-utils@npm:7.22.5" checksum: d2c4bfe2fa91058bcdee4f4e57a3f4933aed7af843acfd169cd6179fab8d13c1d636474ecabb2af107dc77462c7e893199aa26632bac1c6d7e025a17cbb9d20d languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-environment-visitor": "npm:^7.22.20" - "@babel/helper-wrap-function": "npm:^7.22.20" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: aa93aa74250b636d477e8d863fbe59d4071f8c2654841b7ac608909e480c1cf3ff7d7af5a4038568829ad09d810bb681668cbe497d9c89ba5c352793dc9edf1e - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.22.20, @babel/helper-replace-supers@npm:^7.22.9": - version: 7.22.20 - resolution: "@babel/helper-replace-supers@npm:7.22.20" - dependencies: - "@babel/helper-environment-visitor": "npm:^7.22.20" - "@babel/helper-member-expression-to-functions": "npm:^7.22.15" - "@babel/helper-optimise-call-expression": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 6b0858811ad46873817c90c805015d63300e003c5a85c147a17d9845fa2558a02047c3cc1f07767af59014b2dd0fa75b503e5bc36e917f360e9b67bb6f1e79f4 - languageName: node - linkType: hard - "@babel/helper-simple-access@npm:^7.20.2": version: 7.20.2 resolution: "@babel/helper-simple-access@npm:7.20.2" @@ -394,15 +281,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0, @babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5" - dependencies: - "@babel/types": "npm:^7.22.5" - checksum: ab7fa2aa709ab49bb8cd86515a1e715a3108c4bb9a616965ba76b43dc346dee66d1004ccf4d222b596b6224e43e04cbc5c3a34459501b388451f8c589fbc3691 - languageName: node - linkType: hard - "@babel/helper-split-export-declaration@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-split-export-declaration@npm:7.18.6" @@ -463,17 +341,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-wrap-function@npm:7.22.20" - dependencies: - "@babel/helper-function-name": "npm:^7.22.5" - "@babel/template": "npm:^7.22.15" - "@babel/types": "npm:^7.22.19" - checksum: 97b5f42ff4d305318ff2f99a5f59d3e97feff478333b2d893c4f85456d3c66372070f71d7bf9141f598c8cf2741c49a15918193633c427a88d170d98eb8c46eb - languageName: node - linkType: hard - "@babel/helpers@npm:^7.21.0": version: 7.21.0 resolution: "@babel/helpers@npm:7.21.0" @@ -527,7 +394,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.13.16, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.7, @babel/parser@npm:^7.23.3": +"@babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.3": version: 7.23.3 resolution: "@babel/parser@npm:7.23.3" bin: @@ -536,88 +403,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 356a4e9fc52d7ca761ce6857fc58e2295c2785d22565760e6a5680be86c6e5883ab86e0ba25ef572882c01713d3a31ae6cfa3e3222cdb95e6026671dab1fa415 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" - "@babel/plugin-transform-optional-chaining": "npm:^7.23.3" - peerDependencies: - "@babel/core": ^7.13.0 - checksum: a8785f099d55ca71ed89815e0f3a636a80c16031f80934cfec17c928d096ee0798964733320c8b145ef36ba429c5e19d5107b06231e0ab6777cfb0f01adfdc23 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.23.3" - dependencies: - "@babel/helper-environment-visitor": "npm:^7.22.20" - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 0f43b74741d50e637ba4dcef2786621126fe4da6ccf4ee2e94423ee23f6a04ecd91d458e59764c43e4968be139e5197ee43be8a2fea2c09f0b202a3391e548cc - languageName: node - linkType: hard - -"@babel/plugin-proposal-class-properties@npm:^7.13.0": - version: 7.18.6 - resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.18.6" - "@babel/helper-plugin-utils": "npm:^7.18.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d5172ac6c9948cdfc387e94f3493ad86cb04035cf7433f86b5d358270b1b9752dc25e176db0c5d65892a246aca7bdb4636672e15626d7a7de4bc0bd0040168d9 - languageName: node - linkType: hard - -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.13.8": - version: 7.18.6 - resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.18.6" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f6629158196ee9f16295d16db75825092ef543f8b98f4dfdd516e642a0430c7b1d69319ee676d35485d9b86a53ade6de0b883490d44de6d4336d38cdeccbe0bf - languageName: node - linkType: hard - -"@babel/plugin-proposal-optional-chaining@npm:^7.13.12": - version: 7.21.0 - resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.20.0" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b524a61b1de3f3ad287cd1e98c2a7f662178d21cd02205b0d615512e475f0159fa1b569fa7e34c8ed67baef689c0136fa20ba7d1bf058d186d30736a581a723f - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": - version: 7.21.0-placeholder-for-preset-env.2 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e605e0070da087f6c35579499e65801179a521b6842c15181a1e305c04fded2393f11c1efd09b087be7f8b083d1b75e8f3efcbc1292b4f60d3369e14812cff63 - languageName: node - linkType: hard - "@babel/plugin-syntax-async-generators@npm:^7.8.4": version: 7.8.4 resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" @@ -640,7 +425,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": +"@babel/plugin-syntax-class-properties@npm:^7.8.3": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -651,73 +436,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-static-block@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 4464bf9115f4a2d02ce1454411baf9cfb665af1da53709c5c56953e5e2913745b0fcce82982a00463d6facbdd93445c691024e310b91431a1e2f024b158f6371 - languageName: node - linkType: hard - -"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 9c50927bf71adf63f60c75370e2335879402648f468d0172bc912e303c6a3876927d8eb35807331b57f415392732ed05ab9b42c68ac30a936813ab549e0246c5 - languageName: node - linkType: hard - -"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 5100d658ba563829700cd8d001ddc09f4c0187b1a13de300d729c5b3e87503f75a6d6c99c1794182f7f1a9f546ee009df4f15a0ce36376e206ed0012fa7cdc24 - languageName: node - linkType: hard - -"@babel/plugin-syntax-flow@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-syntax-flow@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 8a5e1e8b6a3728a2c8fe6d70c09a43642e737d9c0485e1b041cd3a6021ef05376ec3c9137be3b118c622ba09b5770d26fdc525473f8d06d4ab9e46de2783dd0a - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-assertions@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7db8b59f75667bada2293353bb66b9d5651a673b22c72f47da9f5c46e719142481601b745f9822212fd7522f92e26e8576af37116f85dae1b5e5967f80d0faab - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-attributes@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 99b40d33d79205a8e04bb5dea56fd72906ffc317513b20ca7319e7683e18fce8ea2eea5e9171056f92b979dc0ab1e31b2cb5171177a5ba61e05b54fe7850a606 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": +"@babel/plugin-syntax-import-meta@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" dependencies: @@ -739,7 +458,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.23.3, @babel/plugin-syntax-jsx@npm:^7.7.2": +"@babel/plugin-syntax-jsx@npm:^7.7.2": version: 7.23.3 resolution: "@babel/plugin-syntax-jsx@npm:7.23.3" dependencies: @@ -750,7 +469,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" dependencies: @@ -772,7 +491,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": +"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" dependencies: @@ -816,18 +535,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 69822772561706c87f0a65bc92d0772cea74d6bc0911537904a676d5ff496a6d3ac4e05a166d8125fce4a16605bace141afc3611074e170a994e66e5397787f3 - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": +"@babel/plugin-syntax-top-level-await@npm:^7.8.3": version: 7.14.5 resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" dependencies: @@ -838,7 +546,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.23.3, @babel/plugin-syntax-typescript@npm:^7.7.2": +"@babel/plugin-syntax-typescript@npm:^7.7.2": version: 7.23.3 resolution: "@babel/plugin-syntax-typescript@npm:7.23.3" dependencies: @@ -849,2225 +557,1037 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.18.6" - "@babel/helper-plugin-utils": "npm:^7.18.6" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 9144e5b02a211a4fb9a0ce91063f94fbe1004e80bde3485a0910c9f14897cf83fabd8c21267907cff25db8e224858178df0517f14333cfcf3380ad9a4139cb50 - languageName: node - linkType: hard - -"@babel/plugin-transform-arrow-functions@npm:^7.23.3": +"@babel/plugin-transform-react-jsx-self@npm:^7.22.5": version: 7.23.3 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.23.3" + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b128315c058f5728d29b0b78723659b11de88247ea4d0388f0b935cddf60a80c40b9067acf45cbbe055bd796928faef152a09d9e4a0695465aca4394d9f109ca + checksum: 6b586508fc58998483d4ee93a7e784c4f4d2350e2633739cf1990b7ad172e13906f72382fdaf7f07b4e3c7e7555342634d392bdeb1a079bb64762c6368ca9a32 languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.23.3": +"@babel/plugin-transform-react-jsx-source@npm:^7.22.5": version: 7.23.3 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.3" + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.23.3" dependencies: - "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-remap-async-to-generator": "npm:^7.22.20" - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e846f282658e097fce4fccf3ee29289bf05f0654846a5994727a36f0cdc2e47abdffd4be4fa65787e94aa975824fae894c90afbfdc8caacd46c12c7f43e99d7f + checksum: a3aad7cf738e9bfaddc26cdbb83bb9684c2e689d26fb0793d772af0c8da0cd25bb02523d192fbc6946c32143e56b472c1d33fa82466b3f2d3346e1ce8fe83cf6 languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.23.3" +"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.9.2": + version: 7.21.0 + resolution: "@babel/runtime@npm:7.21.0" dependencies: - "@babel/helper-module-imports": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-remap-async-to-generator": "npm:^7.22.20" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: da3ffd413eef02a8e2cfee3e0bb0d5fc0fcb795c187bc14a5a8e8874cdbdc43bbf00089c587412d7752d97efc5967c3c18ff5398e3017b9a14a06126f017e7e9 + regenerator-runtime: "npm:^0.13.11" + checksum: 8fc28acf3b353390a8188a63d443719847b24b66028fdc8bb301c08e2ee013b52aaeb9d0e9783fa5dcd72bb3c0172fb647419db32392101001738356bdc1f4ab languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.23.3" +"@babel/template@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/template@npm:7.20.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 82c12a11277528184a979163de7189ceb00129f60dd930b0d5313454310bf71205f302fb2bf0430247161c8a22aaa9fb9eec1459f9f7468206422c191978fd59 + "@babel/code-frame": "npm:^7.18.6" + "@babel/parser": "npm:^7.20.7" + "@babel/types": "npm:^7.20.7" + checksum: 1c6dcf9ac92769e6ab5e3d9048975537d26ab00b869646462ab4583d45e419c01db5144715ec0d70548835a3098c5d5416148c4a0b996a95e8e0b9dc8d042dd3 languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-block-scoping@npm:7.23.3" +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.3.3": + version: 7.22.15 + resolution: "@babel/template@npm:7.22.15" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ccaeded7954c196811d22a35322579254cda52676e823682b6234885a3aaf88fe0d5152dacaec43db9031dcf35a050a5343e36028e5905b0ba9c02d36b30a57f + "@babel/code-frame": "npm:^7.22.13" + "@babel/parser": "npm:^7.22.15" + "@babel/types": "npm:^7.22.15" + checksum: 9312edd37cf1311d738907003f2aa321a88a42ba223c69209abe4d7111db019d321805504f606c7fd75f21c6cf9d24d0a8223104cd21ebd207e241b6c551f454 languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.23.3": +"@babel/traverse@npm:^7.21.0, @babel/traverse@npm:^7.21.2, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.3": version: 7.23.3 - resolution: "@babel/plugin-transform-class-properties@npm:7.23.3" + resolution: "@babel/traverse@npm:7.23.3" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bca30d576f539eef216494b56d610f1a64aa9375de4134bc021d9660f1fa735b1d7cc413029f22abc0b7cb737e3a57935c8ae9d8bd1730921ccb1deebce51bfd + "@babel/code-frame": "npm:^7.22.13" + "@babel/generator": "npm:^7.23.3" + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-function-name": "npm:^7.23.0" + "@babel/helper-hoist-variables": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/parser": "npm:^7.23.3" + "@babel/types": "npm:^7.23.3" + debug: "npm:^4.1.0" + globals: "npm:^11.1.0" + checksum: 3c2784f4765185126d64fd5eebce0413b7aee6d54f779998594a343a7f973a9693a441ba27533df84e7ab7ce22f1239c6837f35e903132a1b25f7fc7a67bc30f languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-class-static-block@npm:7.23.3" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.2, @babel/types@npm:^7.3.0": + version: 7.21.2 + resolution: "@babel/types@npm:7.21.2" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.12.0 - checksum: 89cdb66d7bc834cd51659eb7286a6bee23add0bc114943d68c4b6c0c834178cf0d55183df0cf508fec9c55ed4155641360e6f55a91c16fe826ccaf1adf381922 + "@babel/helper-string-parser": "npm:^7.19.4" + "@babel/helper-validator-identifier": "npm:^7.19.1" + to-fast-properties: "npm:^2.0.0" + checksum: e9a5445dd55f86decc373c24abe10eb76ff9247d30cf46267bc4998c29152ebcec8f6a768b03cbb5d5a728232acc7084913d8e1c60e69477f592244700457d4e languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.23.3": +"@babel/types@npm:^7.21.3, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.3, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": version: 7.23.3 - resolution: "@babel/plugin-transform-classes@npm:7.23.3" + resolution: "@babel/types@npm:7.23.3" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-compilation-targets": "npm:^7.22.15" - "@babel/helper-environment-visitor": "npm:^7.22.20" - "@babel/helper-function-name": "npm:^7.23.0" - "@babel/helper-optimise-call-expression": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.20" - "@babel/helper-split-export-declaration": "npm:^7.22.6" - globals: "npm:^11.1.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 88bfd332db0ba5cbfb8557a2ba5a7185151aebc9cfe3035b014aa6d795556acbe672bb8c78da3c9fd1d23f55a333d14b5daa127ef037f5ced5198b6d79a146d6 + "@babel/helper-string-parser": "npm:^7.22.5" + "@babel/helper-validator-identifier": "npm:^7.22.20" + to-fast-properties: "npm:^2.0.0" + checksum: 371a10dd9c8d8ebf48fc5d9e1b327dafd74453f8ea582dcbddd1cee5ae34e8881b743e783a86c08c04dcd1849b1842455472a911ae8a1c185484fe9b7b5f1595 languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-computed-properties@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/template": "npm:^7.22.15" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3ca8a006f8e652b58c21ecb84df1d01a73f0a96b1d216fd09a890b235dd90cb966b152b603b88f7e850ae238644b1636ce5c30b7c029c0934b43383932372e4a +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 6b80ae4cb3db53f486da2dc63b6e190a74c8c3cca16bb2733f234a0b6a9382b09b146488ae08e2b22cf00f6c83e20f3e040a2f7894f05c045c946d6a090b1d52 languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-destructuring@npm:7.23.3" +"@choojs/findup@npm:^0.2.0": + version: 0.2.1 + resolution: "@choojs/findup@npm:0.2.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 717e9a62c1b0c93c507f87b4eaf839ec08d3c3147f14d74ae240d8749488d9762a8b3950132be620a069bde70f4b3e4ee9867b226c973fcc40f3cdec975cde71 + commander: "npm:^2.15.1" + bin: + findup: bin/findup.js + checksum: 0aa58fde413a4cbfd7c67551df1338b638594c46dfa96aa1d79065b88f944a4465d95f3540f4e864130c532182a20cbdef3c2817d20f51253c94096fe57e970f languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.23.3" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 6c89286d1277c2a63802a453c797c87c1203f89e4c25115f7b6620f5fce15d8c8d37af613222f6aa497aa98773577a6ec8752e79e13d59bc5429270677ea010b +"@esbuild/android-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm64@npm:0.18.20" + conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7e2640e4e6adccd5e7b0615b6e9239d7c98363e21c52086ea13759dfa11cf7159b255fc5331c2de435639ea8eb6acefae115ae0d797a3d19d12587652f8052a5 +"@esbuild/android-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm@npm:0.18.20" + conditions: os=android & cpu=arm languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: df3fd130312dc53d068fa76333991dce5e86987b023af8c3b502bd7d36a8e67da6f718e61dc838576a9fbacd06628e29607ee22d9bae30705485c14130eab201 +"@esbuild/android-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-x64@npm:0.18.20" + conditions: os=android & cpu=x64 languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.23.3" - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 5c33ee6a1bdc52fcdf0807f445b27e3fbdce33008531885e65a699762327565fffbcfde8395be7f21bcb22d582e425eddae45650c986462bb84ba68f43687516 +"@esbuild/darwin-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-arm64@npm:0.18.20" + conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 390c6626dcda99023629049d92090242b4575351a4a7b47f97febabd2381f2cd0f624de661d8de8d1f715fedd63753cfd1feddead19e5960c27b88e447465b81 +"@esbuild/darwin-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-x64@npm:0.18.20" + conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-flow": "npm:^7.23.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 9ab627f9668fc1f95564b26bffd6706f86205960d9ccc168236752fbef65dbe10aa0ce74faae12f48bb3b72ec7f38ef2a78b4874c222c1e85754e981639f3b33 +"@esbuild/freebsd-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-arm64@npm:0.18.20" + conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-for-of@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 8a36202cfee312ba80e509c7c2131e6773524e572b4dc64a8ee95bd912634fdeb5ea91c6c7747ee30e03562d0f0d333f88ed7dbb929b36b60b8d74189189e12f +"@esbuild/freebsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-x64@npm:0.18.20" + conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-function-name@npm:7.23.3" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.22.15" - "@babel/helper-function-name": "npm:^7.23.0" - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 89cb9747802118048115cf92a8f310752f02030549b26f008904990cbdc86c3d4a68e07ca3b5c46de8a46ed4df2cb576ac222c74c56de67253d2a3ddc2956083 +"@esbuild/linux-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm64@npm:0.18.20" + conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-json-strings@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e1cef6a485b9da32aba9449fb459dac062dfc401f3d6ad48e7fbdcb73bbe470c995cc15ce5c421b95efe1e9a90d5507eb606360fe10b6d8cb869dd5dae7a2562 +"@esbuild/linux-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm@npm:0.18.20" + conditions: os=linux & cpu=arm languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-literals@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 8292106b106201464c2bfdd5c014fe6a9ca1c0256eb0a8031deb20081e21906fe68b156186f77d993c23eeab6d8d6f5f66e8895eec7ed97ce6de5dbcafbcd7f4 +"@esbuild/linux-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ia32@npm:0.18.20" + conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 23b7588b26d420c8b132bd08916d49871ca0c8db892f6b58637b10e2a0d918163d413c505db880a9157fc2e61d089040f139298a60d837ccbd0efca0474ac7ca +"@esbuild/linux-loong64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-loong64@npm:0.18.20" + conditions: os=linux & cpu=loong64 languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 687f24f3ec60b627fef6e87b9e2770df77f76727b9d5f54fa4c84a495bb24eb4a20f1a6240fa22d339d45aac5eaeb1b39882e941bfd00cf498f9c53478d1ec88 +"@esbuild/linux-mips64el@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-mips64el@npm:0.18.20" + conditions: os=linux & cpu=mips64el languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-modules-amd@npm:7.23.3" - dependencies: - "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 9f7ec036f7cfc588833a4dd117a44813b64aa4c1fd5bfb6c78f60198c1d290938213090c93a46f97a68a2490fad909e21a82b2472e95da74d108c125df21c8d5 +"@esbuild/linux-ppc64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ppc64@npm:0.18.20" + conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3" - dependencies: - "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-simple-access": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 5c8840c5c9ecba39367ae17c973ed13dbc43234147b77ae780eec65010e2a9993c5d717721b23e8179f7cf49decdd325c509b241d69cfbf92aa647a1d8d5a37d +"@esbuild/linux-riscv64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-riscv64@npm:0.18.20" + conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.23.3" - dependencies: - "@babel/helper-hoist-variables": "npm:^7.22.5" - "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-validator-identifier": "npm:^7.22.20" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0d55280a276510222c8896bf4e581acb84824aa5b14c824f7102242ad6bc5104aaffe5ab22fe4d27518f4ae2811bd59c36d0c0bfa695157f9cfce33f0517a069 +"@esbuild/linux-s390x@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-s390x@npm:0.18.20" + conditions: os=linux & cpu=s390x languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-modules-umd@npm:7.23.3" - dependencies: - "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f0d2f890a15b4367d0d8f160bed7062bdb145c728c24e9bfbc1211c7925aae5df72a88df3832c92dd2011927edfed4da1b1249e4c78402e893509316c0c2caa6 +"@esbuild/linux-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-x64@npm:0.18.20" + conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: b0b072bef303670b5a98307bc37d1ac326cb7ad40ea162b89a03c2ffc465451be7ef05be95cb81ed28bfeb29670dc98fe911f793a67bceab18b4cb4c81ef48f3 +"@esbuild/netbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/netbsd-x64@npm:0.18.20" + conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-new-target@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f489b9e1f17b42b2ba6312d58351e757cb23a8409f64f2bb6af4c09d015359588a5d68943b20756f141d0931a94431c782f3ed1225228a930a04b07be0c31b04 +"@esbuild/openbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/openbsd-x64@npm:0.18.20" + conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f960faed3975c8454c52d2b5d85daf0c9a27677b248d7933882e59b10202ade2a98c7b925ce0bae2b8eb4d66eb5d63a5588c1090d54eaa4cd235533d71228ff3 +"@esbuild/sunos-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/sunos-x64@npm:0.18.20" + conditions: os=sunos & cpu=x64 languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d3748cce20e8752e61dfda55e275c699459a3ff8d0bb46585da813136e04066b1ce70b71beef504fcdc8d4cca3c955112cea96d5e9fd5a42a5bc8956d05236c2 +"@esbuild/win32-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-arm64@npm:0.18.20" + conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.23.3" - dependencies: - "@babel/compat-data": "npm:^7.23.3" - "@babel/helper-compilation-targets": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-transform-parameters": "npm:^7.23.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 31ab631aaba945c118662943e5f1f54a21f07d64f06e06b25d55871168c460f3eeeccdf7b05aa74a1340e2cfbe781ad3c7ceccd0c2585d39f7b73ba11ebaa9d0 +"@esbuild/win32-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-ia32@npm:0.18.20" + conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-object-super@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.20" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a6856fd8c0afbe5b3318c344d4d201d009f4051e2f6ff6237ff2660593e93c5997a58772b13d639077c3e29ced3440247b29c496cd77b13af1e7559a70009775 +"@esbuild/win32-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-x64@npm:0.18.20" + conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.23.3" +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + eslint-visitor-keys: "npm:^3.3.0" peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 85ac1e94ee8f21648816151628ff931cc16143ec8c904649a1ecfd8960160290eccc5a197b4ae3ee7a1c7a27a7c4189e61b4de24483d5bad4040784afe2d206f + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 7e559c4ce59cd3a06b1b5a517b593912e680a7f981ae7affab0d01d709e99cd5647019be8fafa38c350305bc32f1f7d42c7073edde2ab536c745e365f37b607e languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2b358962169d871392aa292a67527e5335909438da0ddbb0d19e7838c0f8a2081cc751a49e6e534ac4d6c932254531a205ac22b197f64fc4c89f41bf9f595497 +"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": + version: 4.10.0 + resolution: "@eslint-community/regexpp@npm:4.10.0" + checksum: c5f60ef1f1ea7649fa7af0e80a5a79f64b55a8a8fa5086de4727eb4c86c652aedee407a9c143b8995d2c0b2d75c1222bec9ba5d73dbfc1f314550554f0979ef4 languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-parameters@npm:7.23.3" +"@eslint/eslintrc@npm:^2.1.3": + version: 2.1.3 + resolution: "@eslint/eslintrc@npm:2.1.3" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a8d4cbe0f6ba68d158f5b4215c63004fc37a1fdc539036eb388a9792017c8496ea970a1932ccb929308f61e53dc56676ed01d8df6f42bc0a85c7fd5ba82482b7 + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^9.6.0" + globals: "npm:^13.19.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: f4103f4346126292eb15581c5a1d12bef03410fd3719dedbdb92e1f7031d46a5a2d60de8566790445d5d4b70b75ba050876799a11f5fff8265a91ee3fa77dab0 languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-private-methods@npm:7.23.3" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 745a655edcd111b7f91882b921671ca0613079760d8c9befe336b8a9bc4ce6bb49c0c08941831c950afb1b225b4b2d3eaac8842e732db095b04db38efd8c34f4 +"@eslint/js@npm:8.53.0": + version: 8.53.0 + resolution: "@eslint/js@npm:8.53.0" + checksum: d29f6c207b2f6dc4ef174d16a3c07b0d3a17ca3d805680496ff267edd773e3bac41db4e7dcab622ca1970d892535bd19671e2a756d4eac75e96fd8c8dcdb619b languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.23.3" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-create-class-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 9211dd25a6e87a01535f2d97a663fa6de3472b963c8dcfaacce229a2e3fa6500f2e9fc690bc100a540fc7b66c8364faf7ef19b32e9c9b9791e4561b742c15ed3 +"@floating-ui/core@npm:^0.7.3": + version: 0.7.3 + resolution: "@floating-ui/core@npm:0.7.3" + checksum: 5173066faf454f1475f465adeaab04fb195670cda019109660199587c05bf2fa74d79a50e53c1d2fed426d6a40f9698afa4d386e89485843c46a7ffba850efe1 languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-property-literals@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b2549f23f90cf276c2e3058c2225c3711c2ad1c417e336d3391199445a9776dd791b83be47b2b9a7ae374b40652d74b822387e31fa5267a37bf49c122e1a9747 +"@floating-ui/core@npm:^1.2.6": + version: 1.2.6 + resolution: "@floating-ui/core@npm:1.2.6" + checksum: dc2628d13502ec8fb3fd77de21139c2dd484f4c988263e2c1adea20ea932e268bf4aae3731c202748509824c5dc5a32b397b93cce3b40ef2cfacd095d2f2bb23 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-self@npm:^7.18.6, @babel/plugin-transform-react-jsx-self@npm:^7.22.5": - version: 7.23.3 - resolution: "@babel/plugin-transform-react-jsx-self@npm:7.23.3" +"@floating-ui/dom@npm:^0.5.3": + version: 0.5.4 + resolution: "@floating-ui/dom@npm:0.5.4" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 6b586508fc58998483d4ee93a7e784c4f4d2350e2633739cf1990b7ad172e13906f72382fdaf7f07b4e3c7e7555342634d392bdeb1a079bb64762c6368ca9a32 + "@floating-ui/core": "npm:^0.7.3" + checksum: c395ec32862ef4d4a1d5c3cb3b54b462f7872a323746e0b5f7f7a31b17570a042ad1f1b134040a30bf0d6181c14867daebfac1c1bb89b42f8f000b3f9981516c languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-source@npm:^7.19.6, @babel/plugin-transform-react-jsx-source@npm:^7.22.5": - version: 7.23.3 - resolution: "@babel/plugin-transform-react-jsx-source@npm:7.23.3" +"@floating-ui/dom@npm:^1.2.7": + version: 1.2.9 + resolution: "@floating-ui/dom@npm:1.2.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a3aad7cf738e9bfaddc26cdbb83bb9684c2e689d26fb0793d772af0c8da0cd25bb02523d192fbc6946c32143e56b472c1d33fa82466b3f2d3346e1ce8fe83cf6 + "@floating-ui/core": "npm:^1.2.6" + checksum: cc7307ac189f1f9d744970c6dfe9e15cb14a7c0262b7223081b7b0005e113d727828f41aafb34f7ffa3670ccef0457921551add325fa67de85cc2e65cf10f7fd languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-regenerator@npm:7.23.3" +"@floating-ui/react-dom@npm:0.7.2": + version: 0.7.2 + resolution: "@floating-ui/react-dom@npm:0.7.2" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - regenerator-transform: "npm:^0.15.2" + "@floating-ui/dom": "npm:^0.5.3" + use-isomorphic-layout-effect: "npm:^1.1.1" peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3b0e989ae5db78894ee300b24e07fbcec490c39ab48629c519377581cf94e90308f4ddc10a8914edc9f403e2d3ac7a7ae0ae09003629d852da03e2ba846299c6 + react: ">=16.8.0" + react-dom: ">=16.8.0" + checksum: fc0e857fdc5ebc2c56e3127581477842d659f938b15e5364ad494df357824f52667e50d97b9adc37cd45154cfbac51b30461cb19b7f1dffb86e18397150a6243 languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-reserved-words@npm:7.23.3" +"@floating-ui/react-dom@npm:^2.0.0": + version: 2.0.0 + resolution: "@floating-ui/react-dom@npm:2.0.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@floating-ui/dom": "npm:^1.2.7" peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 4e6d61f6c9757592661cfbd2c39c4f61551557b98cb5f0995ef10f5540f67e18dde8a42b09716d58943b6e4b7ef5c9bcf19902839e7328a4d49149e0fecdbfcd + react: ">=16.8.0" + react-dom: ">=16.8.0" + checksum: 57be5b9547b5d65f7b475923c2844fabf1b0aa0fe4cbdf1e36f673389ac19e5ffa045a186d3cb4364256482d8b408eee8018fb0208793a0bb8d925d8eae9cd7f languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.23.3" +"@humanwhocodes/config-array@npm:^0.11.13": + version: 0.11.13 + resolution: "@humanwhocodes/config-array@npm:0.11.13" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c423c66fec0b6503f50561741754c84366ef9e9818442c8881fbaa90cc363fd137084b9431cdc00ed2f1fd8c8a1a5982c4a7e1f2af3769db4caf2ac7ea55d4f0 + "@humanwhocodes/object-schema": "npm:^2.0.1" + debug: "npm:^4.1.1" + minimatch: "npm:^3.0.5" + checksum: d76ca802d853366094d0e98ff0d0994117fc8eff96649cd357b15e469e428228f597cd2e929d54ab089051684949955f16ee905bb19f7b2f0446fb377157be7a languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-spread@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a348e4ae47e4ceeceb760506ec7bf835ccc18a2cf70ec74ebfbe41bc172fa2412b05b7d1b86836f8aee375e41a04ff20486074778d0e2d19d668b33dc52e9dbb +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: cd15c407906b41e4b924ea151e455c11274dba050771ee7154ad88a1a274140ac5e84efc8d08c4379f2f0cec8a09e4a0a3b2a3a954ba6a67d9fb35df1c714c56 +"@humanwhocodes/object-schema@npm:^2.0.1": + version: 2.0.1 + resolution: "@humanwhocodes/object-schema@npm:2.0.1" + checksum: 9dba24e59fdb4041829d92b693aacb778add3b6f612aaa9c0774f3b650c11a378cc64f042a59da85c11dae33df456580a3c36837b953541aed6ff94294f97fac languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-template-literals@npm:7.23.3" +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 9b5f43788b9ffcb8f2b445a16b1aa40fcf23cb0446a4649445f098ec6b4cb751f243a535da623d59fefe48f4c40552f5621187a61811779076bab26863e3373d + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.23.3" +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 50e81d84c6059878be2a0e41e0d790cab10882cfb8fa85e8c2665ccb0b3cd7233f49197f17427bc7c1b36c80e07076640ecf1b641888d78b9cb91bc16478d84a + camelcase: "npm:^5.3.1" + find-up: "npm:^4.1.0" + get-package-type: "npm:^0.1.0" + js-yaml: "npm:^3.13.1" + resolve-from: "npm:^5.0.0" + checksum: dd2a8b094887da5a1a2339543a4933d06db2e63cbbc2e288eb6431bd832065df0c099d091b6a67436e71b7d6bf85f01ce7c15f9253b4cbebcc3b9a496165ba42 languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-typescript@npm:7.23.3" +"@istanbuljs/schema@npm:^0.1.2": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a + languageName: node + linkType: hard + +"@jest/console@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/console@npm:29.7.0" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-create-class-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-typescript": "npm:^7.23.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a3c738efcf491ceb1eee646f57c44990ee0c80465527b88fcfa0b7602688c4ff8c165a4c5b62caf05d968b095212018fd30a02879c12d37c657081f57b31fb26 + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + slash: "npm:^3.0.0" + checksum: 7be408781d0a6f657e969cbec13b540c329671819c2f57acfad0dae9dbfe2c9be859f38fe99b35dba9ff1536937dc6ddc69fdcd2794812fa3c647a1619797f6c languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.23.3" +"@jest/core@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/core@npm:29.7.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@jest/console": "npm:^29.7.0" + "@jest/reporters": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + exit: "npm:^0.1.2" + graceful-fs: "npm:^4.2.9" + jest-changed-files: "npm:^29.7.0" + jest-config: "npm:^29.7.0" + jest-haste-map: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-resolve-dependencies: "npm:^29.7.0" + jest-runner: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + jest-watcher: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-ansi: "npm:^6.0.0" peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f1ed54742dc982666f471df5d087cfda9c6dbf7842bec2d0f7893ed359b142a38c0210358f297ab5c7a3e11ec0dfb0e523de2e2edf48b62f257aaadd5f068866 + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 934f7bf73190f029ac0f96662c85cd276ec460d407baf6b0dbaec2872e157db4d55a7ee0b1c43b18874602f662b37cb973dda469a4e6d88b4e4845b521adeeb2 languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.23.3" +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: dca5702d43fac70351623a12e4dfa454fd028a67498888522b644fd1a02534fabd440106897e886ebcc6ce6a39c58094ca29953b6f51bc67372aa8845a5ae49f + "@jest/fake-timers": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-mock: "npm:^29.7.0" + checksum: c7b1b40c618f8baf4d00609022d2afa086d9c6acc706f303a70bb4b67275868f620ad2e1a9efc5edd418906157337cce50589a627a6400bbdf117d351b91ef86 languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.23.3" +"@jest/expect-utils@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/expect-utils@npm:29.5.0" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: df824dcca2f6e731f61d69103e87d5dd974d8a04e46e28684a4ba935ae633d876bded09b8db890fd72d0caf7b9638e2672b753671783613cc78d472951e2df8c + jest-get-type: "npm:^29.4.3" + checksum: e7f44de651b5ef71c6e1b7a0350a704258167c20b6e8165b3100346d5c7f8eb4cd2c229ea2c048e9161666d1c086fbbc422f111f3b77da3fb89a99d52d4b3690 languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.23.3" +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 30fe1d29af8395a867d40a63a250ca89072033d9bc7d4587eeebeaf4ad7f776aab83064321bfdb1d09d7e29a1d392852361f4f60a353f0f4d1a3b435dcbf256b + jest-get-type: "npm:^29.6.3" + checksum: 60b79d23a5358dc50d9510d726443316253ecda3a7fb8072e1526b3e0d3b14f066ee112db95699b7a43ad3f0b61b750c72e28a5a1cac361d7a2bb34747fa938a languageName: node linkType: hard -"@babel/preset-env@npm:^7.22.9": - version: 7.23.3 - resolution: "@babel/preset-env@npm:7.23.3" +"@jest/expect@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect@npm:29.7.0" dependencies: - "@babel/compat-data": "npm:^7.23.3" - "@babel/helper-compilation-targets": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-validator-option": "npm:^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.23.3" - "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/plugin-syntax-class-properties": "npm:^7.12.13" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" - "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" - "@babel/plugin-syntax-import-assertions": "npm:^7.23.3" - "@babel/plugin-syntax-import-attributes": "npm:^7.23.3" - "@babel/plugin-syntax-import-meta": "npm:^7.10.4" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" - "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" - "@babel/plugin-transform-arrow-functions": "npm:^7.23.3" - "@babel/plugin-transform-async-generator-functions": "npm:^7.23.3" - "@babel/plugin-transform-async-to-generator": "npm:^7.23.3" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.23.3" - "@babel/plugin-transform-block-scoping": "npm:^7.23.3" - "@babel/plugin-transform-class-properties": "npm:^7.23.3" - "@babel/plugin-transform-class-static-block": "npm:^7.23.3" - "@babel/plugin-transform-classes": "npm:^7.23.3" - "@babel/plugin-transform-computed-properties": "npm:^7.23.3" - "@babel/plugin-transform-destructuring": "npm:^7.23.3" - "@babel/plugin-transform-dotall-regex": "npm:^7.23.3" - "@babel/plugin-transform-duplicate-keys": "npm:^7.23.3" - "@babel/plugin-transform-dynamic-import": "npm:^7.23.3" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.23.3" - "@babel/plugin-transform-export-namespace-from": "npm:^7.23.3" - "@babel/plugin-transform-for-of": "npm:^7.23.3" - "@babel/plugin-transform-function-name": "npm:^7.23.3" - "@babel/plugin-transform-json-strings": "npm:^7.23.3" - "@babel/plugin-transform-literals": "npm:^7.23.3" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.23.3" - "@babel/plugin-transform-member-expression-literals": "npm:^7.23.3" - "@babel/plugin-transform-modules-amd": "npm:^7.23.3" - "@babel/plugin-transform-modules-commonjs": "npm:^7.23.3" - "@babel/plugin-transform-modules-systemjs": "npm:^7.23.3" - "@babel/plugin-transform-modules-umd": "npm:^7.23.3" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.22.5" - "@babel/plugin-transform-new-target": "npm:^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.23.3" - "@babel/plugin-transform-numeric-separator": "npm:^7.23.3" - "@babel/plugin-transform-object-rest-spread": "npm:^7.23.3" - "@babel/plugin-transform-object-super": "npm:^7.23.3" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.23.3" - "@babel/plugin-transform-optional-chaining": "npm:^7.23.3" - "@babel/plugin-transform-parameters": "npm:^7.23.3" - "@babel/plugin-transform-private-methods": "npm:^7.23.3" - "@babel/plugin-transform-private-property-in-object": "npm:^7.23.3" - "@babel/plugin-transform-property-literals": "npm:^7.23.3" - "@babel/plugin-transform-regenerator": "npm:^7.23.3" - "@babel/plugin-transform-reserved-words": "npm:^7.23.3" - "@babel/plugin-transform-shorthand-properties": "npm:^7.23.3" - "@babel/plugin-transform-spread": "npm:^7.23.3" - "@babel/plugin-transform-sticky-regex": "npm:^7.23.3" - "@babel/plugin-transform-template-literals": "npm:^7.23.3" - "@babel/plugin-transform-typeof-symbol": "npm:^7.23.3" - "@babel/plugin-transform-unicode-escapes": "npm:^7.23.3" - "@babel/plugin-transform-unicode-property-regex": "npm:^7.23.3" - "@babel/plugin-transform-unicode-regex": "npm:^7.23.3" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.23.3" - "@babel/preset-modules": "npm:0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2: "npm:^0.4.6" - babel-plugin-polyfill-corejs3: "npm:^0.8.5" - babel-plugin-polyfill-regenerator: "npm:^0.5.3" - core-js-compat: "npm:^3.31.0" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 36b02a86817ab5474bb74a8d62a110723b0b05904a52ddc5627cf89457525b8d5ac0739b8e435a6ae12ef8b90cd5fc191169898c3dc2ac9d2c84026b02f2580a + expect: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + checksum: b41f193fb697d3ced134349250aed6ccea075e48c4f803159db102b826a4e473397c68c31118259868fd69a5cba70e97e1c26d2c2ff716ca39dc73a2ccec037e languageName: node linkType: hard -"@babel/preset-flow@npm:^7.13.13": - version: 7.23.3 - resolution: "@babel/preset-flow@npm:7.23.3" +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-validator-option": "npm:^7.22.15" - "@babel/plugin-transform-flow-strip-types": "npm:^7.23.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 1cf109925791f2af679f03289848d27596b4f27cb0ad4ee74a8dd4c1cbecc119bdef3b45cbbe12489bc9bdf61163f94c1c0bf6013cc58c325f1cc99edc01bda9 + "@jest/types": "npm:^29.6.3" + "@sinonjs/fake-timers": "npm:^10.0.2" + "@types/node": "npm:*" + jest-message-util: "npm:^29.7.0" + jest-mock: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: cf0a8bcda801b28dc2e2b2ba36302200ee8104a45ad7a21e6c234148932f826cb3bc57c8df3b7b815aeea0861d7b6ca6f0d4778f93b9219398ef28749e03595c languageName: node linkType: hard -"@babel/preset-modules@npm:0.1.6-no-external-plugins": - version: 0.1.6-no-external-plugins - resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" +"@jest/globals@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/globals@npm:29.7.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.0.0" - "@babel/types": "npm:^7.4.4" - esutils: "npm:^2.0.2" - peerDependencies: - "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 - checksum: 9d02f70d7052446c5f3a4fb39e6b632695fb6801e46d31d7f7c5001f7c18d31d1ea8369212331ca7ad4e7877b73231f470b0d559162624128f1b80fe591409e6 + "@jest/environment": "npm:^29.7.0" + "@jest/expect": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + jest-mock: "npm:^29.7.0" + checksum: a385c99396878fe6e4460c43bd7bb0a5cc52befb462cc6e7f2a3810f9e7bcce7cdeb51908fd530391ee452dc856c98baa2c5f5fa8a5b30b071d31ef7f6955cea languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.13.0": - version: 7.23.3 - resolution: "@babel/preset-typescript@npm:7.23.3" +"@jest/reporters@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/reporters@npm:29.7.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-validator-option": "npm:^7.22.15" - "@babel/plugin-syntax-jsx": "npm:^7.23.3" - "@babel/plugin-transform-modules-commonjs": "npm:^7.23.3" - "@babel/plugin-transform-typescript": "npm:^7.23.3" + "@bcoe/v8-coverage": "npm:^0.2.3" + "@jest/console": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@jridgewell/trace-mapping": "npm:^0.3.18" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + collect-v8-coverage: "npm:^1.0.0" + exit: "npm:^0.1.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + istanbul-lib-coverage: "npm:^3.0.0" + istanbul-lib-instrument: "npm:^6.0.0" + istanbul-lib-report: "npm:^3.0.0" + istanbul-lib-source-maps: "npm:^4.0.0" + istanbul-reports: "npm:^3.1.3" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-worker: "npm:^29.7.0" + slash: "npm:^3.0.0" + string-length: "npm:^4.0.1" + strip-ansi: "npm:^6.0.0" + v8-to-istanbul: "npm:^9.0.1" peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e72b654c7f0f08b35d7e1c0e3a59c0c13037f295c425760b8b148aa7dde01e6ddd982efc525710f997a1494fafdd55cb525738c016609e7e4d703d02014152b7 + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: a754402a799541c6e5aff2c8160562525e2a47e7d568f01ebfc4da66522de39cbb809bbb0a841c7052e4270d79214e70aec3c169e4eae42a03bc1a8a20cb9fa2 languageName: node linkType: hard -"@babel/register@npm:^7.13.16": - version: 7.22.15 - resolution: "@babel/register@npm:7.22.15" +"@jest/schemas@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/schemas@npm:29.4.3" dependencies: - clone-deep: "npm:^4.0.1" - find-cache-dir: "npm:^2.0.0" - make-dir: "npm:^2.1.0" - pirates: "npm:^4.0.5" - source-map-support: "npm:^0.5.16" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 895cc773c3b3eae909478ea2a9735ef6edd634b04b4aaaad2ce576fd591c2b3c70ff8c90423e769a291bee072186e7e4801480c1907e31ba3053c6cdba5571cb + "@sinclair/typebox": "npm:^0.25.16" + checksum: 8a35967cec454d1de2d5a58ab99b49a0ff798d1dce2d817bdd9960bb2f070493f767fbbf419e6a263860d3b1ef1e50ab609a76ae21b5f8c09bb0859e8f51a098 languageName: node linkType: hard -"@babel/regjsgen@npm:^0.8.0": - version: 0.8.0 - resolution: "@babel/regjsgen@npm:0.8.0" - checksum: 4f3ddd8c7c96d447e05c8304c1d5ba3a83fcabd8a716bc1091c2f31595cdd43a3a055fff7cb5d3042b8cb7d402d78820fcb4e05d896c605a7d8bcf30f2424c4a +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": "npm:^0.27.8" + checksum: b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be languageName: node linkType: hard -"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.9.2": - version: 7.21.0 - resolution: "@babel/runtime@npm:7.21.0" +"@jest/source-map@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/source-map@npm:29.6.3" dependencies: - regenerator-runtime: "npm:^0.13.11" - checksum: 8fc28acf3b353390a8188a63d443719847b24b66028fdc8bb301c08e2ee013b52aaeb9d0e9783fa5dcd72bb3c0172fb647419db32392101001738356bdc1f4ab + "@jridgewell/trace-mapping": "npm:^0.3.18" + callsites: "npm:^3.0.0" + graceful-fs: "npm:^4.2.9" + checksum: a2f177081830a2e8ad3f2e29e20b63bd40bade294880b595acf2fc09ec74b6a9dd98f126a2baa2bf4941acd89b13a4ade5351b3885c224107083a0059b60a219 languageName: node linkType: hard -"@babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.8.4": - version: 7.23.2 - resolution: "@babel/runtime@npm:7.23.2" +"@jest/test-result@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-result@npm:29.7.0" dependencies: - regenerator-runtime: "npm:^0.14.0" - checksum: 271fcfad8574269d9967b8a1c03f2e1eab108a52ad7c96ed136eee0b11f46156f1186637bd5e79a4207163db9a00413cd70a6428e137b982d0ee8ab85eb9f438 + "@jest/console": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + collect-v8-coverage: "npm:^1.0.0" + checksum: 7de54090e54a674ca173470b55dc1afdee994f2d70d185c80236003efd3fa2b753fff51ffcdda8e2890244c411fd2267529d42c4a50a8303755041ee493e6a04 languageName: node linkType: hard -"@babel/template@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/template@npm:7.20.7" +"@jest/test-sequencer@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-sequencer@npm:29.7.0" dependencies: - "@babel/code-frame": "npm:^7.18.6" - "@babel/parser": "npm:^7.20.7" - "@babel/types": "npm:^7.20.7" - checksum: 1c6dcf9ac92769e6ab5e3d9048975537d26ab00b869646462ab4583d45e419c01db5144715ec0d70548835a3098c5d5416148c4a0b996a95e8e0b9dc8d042dd3 + "@jest/test-result": "npm:^29.7.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + slash: "npm:^3.0.0" + checksum: 593a8c4272797bb5628984486080cbf57aed09c7cfdc0a634e8c06c38c6bef329c46c0016e84555ee55d1cd1f381518cf1890990ff845524c1123720c8c1481b languageName: node linkType: hard -"@babel/template@npm:^7.22.15, @babel/template@npm:^7.3.3": - version: 7.22.15 - resolution: "@babel/template@npm:7.22.15" +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" dependencies: - "@babel/code-frame": "npm:^7.22.13" - "@babel/parser": "npm:^7.22.15" - "@babel/types": "npm:^7.22.15" - checksum: 9312edd37cf1311d738907003f2aa321a88a42ba223c69209abe4d7111db019d321805504f606c7fd75f21c6cf9d24d0a8223104cd21ebd207e241b6c551f454 + "@babel/core": "npm:^7.11.6" + "@jest/types": "npm:^29.6.3" + "@jridgewell/trace-mapping": "npm:^0.3.18" + babel-plugin-istanbul: "npm:^6.1.1" + chalk: "npm:^4.0.0" + convert-source-map: "npm:^2.0.0" + fast-json-stable-stringify: "npm:^2.1.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-util: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + pirates: "npm:^4.0.4" + slash: "npm:^3.0.0" + write-file-atomic: "npm:^4.0.2" + checksum: 7f4a7f73dcf45dfdf280c7aa283cbac7b6e5a904813c3a93ead7e55873761fc20d5c4f0191d2019004fac6f55f061c82eb3249c2901164ad80e362e7a7ede5a6 languageName: node linkType: hard -"@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.21.0, @babel/traverse@npm:^7.21.2, @babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/traverse@npm:7.23.3" +"@jest/types@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/types@npm:29.5.0" dependencies: - "@babel/code-frame": "npm:^7.22.13" - "@babel/generator": "npm:^7.23.3" - "@babel/helper-environment-visitor": "npm:^7.22.20" - "@babel/helper-function-name": "npm:^7.23.0" - "@babel/helper-hoist-variables": "npm:^7.22.5" - "@babel/helper-split-export-declaration": "npm:^7.22.6" - "@babel/parser": "npm:^7.23.3" - "@babel/types": "npm:^7.23.3" - debug: "npm:^4.1.0" - globals: "npm:^11.1.0" - checksum: 3c2784f4765185126d64fd5eebce0413b7aee6d54f779998594a343a7f973a9693a441ba27533df84e7ab7ce22f1239c6837f35e903132a1b25f7fc7a67bc30f + "@jest/schemas": "npm:^29.4.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + "@types/istanbul-reports": "npm:^3.0.0" + "@types/node": "npm:*" + "@types/yargs": "npm:^17.0.8" + chalk: "npm:^4.0.0" + checksum: f1cccd2e9b00a985bfdac03517f906cdf7a481be3606c335f8ec08a7272b7cf700b23484ce323a912b374defb90d3ab88c643cf2a2f47635c1c4feacfa1c1b2d languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.2, @babel/types@npm:^7.3.0": - version: 7.21.2 - resolution: "@babel/types@npm:7.21.2" +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" dependencies: - "@babel/helper-string-parser": "npm:^7.19.4" - "@babel/helper-validator-identifier": "npm:^7.19.1" - to-fast-properties: "npm:^2.0.0" - checksum: e9a5445dd55f86decc373c24abe10eb76ff9247d30cf46267bc4998c29152ebcec8f6a768b03cbb5d5a728232acc7084913d8e1c60e69477f592244700457d4e + "@jest/schemas": "npm:^29.6.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + "@types/istanbul-reports": "npm:^3.0.0" + "@types/node": "npm:*" + "@types/yargs": "npm:^17.0.8" + chalk: "npm:^4.0.0" + checksum: ea4e493dd3fb47933b8ccab201ae573dcc451f951dc44ed2a86123cd8541b82aa9d2b1031caf9b1080d6673c517e2dcc25a44b2dc4f3fbc37bfc965d444888c0 languageName: node linkType: hard -"@babel/types@npm:^7.18.9, @babel/types@npm:^7.21.3, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.3, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.23.3 - resolution: "@babel/types@npm:7.23.3" +"@jridgewell/gen-mapping@npm:^0.1.0": + version: 0.1.1 + resolution: "@jridgewell/gen-mapping@npm:0.1.1" dependencies: - "@babel/helper-string-parser": "npm:^7.22.5" - "@babel/helper-validator-identifier": "npm:^7.22.20" - to-fast-properties: "npm:^2.0.0" - checksum: 371a10dd9c8d8ebf48fc5d9e1b327dafd74453f8ea582dcbddd1cee5ae34e8881b743e783a86c08c04dcd1849b1842455472a911ae8a1c185484fe9b7b5f1595 + "@jridgewell/set-array": "npm:^1.0.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + checksum: 3d784d87aee604bc4d48d3d9e547e0466d9f4a432cd9b3a4f3e55d104313bf3945e7e970cd5fa767bc145df11f1d568a01ab6659696be41f0ed2a817f3b583a3 languageName: node linkType: hard -"@base2/pretty-print-object@npm:1.0.1": - version: 1.0.1 - resolution: "@base2/pretty-print-object@npm:1.0.1" - checksum: 98f77ea185a30c854897feb2a68fe51be8451a1a0b531bac61a5dd67033926a0ba0c9be6e0f819b8cb72ca349b3e7648bf81c12fd21df0b45219c75a3a75784b +"@jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.2 + resolution: "@jridgewell/gen-mapping@npm:0.3.2" + dependencies: + "@jridgewell/set-array": "npm:^1.0.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.9" + checksum: 82685c8735c63fe388badee45e2970a6bc83eed1c84d46d8652863bafeca22a6c6cc15812f5999a4535366f4668ccc9ba6d5c67dfb72e846fa8a063806f10afd languageName: node linkType: hard -"@bcoe/v8-coverage@npm:^0.2.3": - version: 0.2.3 - resolution: "@bcoe/v8-coverage@npm:0.2.3" - checksum: 6b80ae4cb3db53f486da2dc63b6e190a74c8c3cca16bb2733f234a0b6a9382b09b146488ae08e2b22cf00f6c83e20f3e040a2f7894f05c045c946d6a090b1d52 +"@jridgewell/resolve-uri@npm:3.1.0": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: 78055e2526108331126366572045355051a930f017d1904a4f753d3f4acee8d92a14854948095626f6163cffc24ea4e3efa30637417bb866b84743dec7ef6fd9 languageName: node linkType: hard -"@choojs/findup@npm:^0.2.0": - version: 0.2.1 - resolution: "@choojs/findup@npm:0.2.1" - dependencies: - commander: "npm:^2.15.1" - bin: - findup: bin/findup.js - checksum: 0aa58fde413a4cbfd7c67551df1338b638594c46dfa96aa1d79065b88f944a4465d95f3540f4e864130c532182a20cbdef3c2817d20f51253c94096fe57e970f +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: 0dbc9e29bc640bbbdc5b9876d2859c69042bfcf1423c1e6421bcca53e826660bff4e41c7d4bcb8dbea696404231a6f902f76ba41835d049e20f2dd6cffb713bf languageName: node linkType: hard -"@colors/colors@npm:1.5.0": - version: 1.5.0 - resolution: "@colors/colors@npm:1.5.0" - checksum: eb42729851adca56d19a08e48d5a1e95efd2a32c55ae0323de8119052be0510d4b7a1611f2abcbf28c044a6c11e6b7d38f99fccdad7429300c37a8ea5fb95b44 +"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: bc7ab4c4c00470de4e7562ecac3c0c84f53e7ee8a711e546d67c47da7febe7c45cd67d4d84ee3c9b2c05ae8e872656cdded8a707a283d30bd54fbc65aef821ab languageName: node linkType: hard -"@discoveryjs/json-ext@npm:^0.5.3": - version: 0.5.7 - resolution: "@discoveryjs/json-ext@npm:0.5.7" - checksum: e10f1b02b78e4812646ddf289b7d9f2cb567d336c363b266bd50cd223cf3de7c2c74018d91cd2613041568397ef3a4a2b500aba588c6e5bd78c38374ba68f38c +"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.14 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" + checksum: 3fbaff1387c1338b097eeb6ff92890d7838f7de0dde259e4983763b44540bfd5ca6a1f7644dc8ad003a57f7e80670d5b96a8402f1386ba9aee074743ae9bad51 languageName: node linkType: hard -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.0": - version: 1.0.1 - resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.1" - peerDependencies: - react: ">=16.8.0" - checksum: a15b2167940e3a908160687b73fc4fcd81e59ab45136b6967f02c7c419d9a149acd22a416b325c389642d4f1c3d33cf4196cad6b618128b55b7c74f6807a240b +"@jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: 0c6b5ae663087558039052a626d2d7ed5208da36cfd707dcc5cea4a07cfc918248403dcb5989a8f7afaf245ce0573b7cc6fd94c4a30453bd10e44d9363940ba5 languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/android-arm64@npm:0.18.20" - conditions: os=android & cpu=arm64 +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.17 + resolution: "@jridgewell/trace-mapping@npm:0.3.17" + dependencies: + "@jridgewell/resolve-uri": "npm:3.1.0" + "@jridgewell/sourcemap-codec": "npm:1.4.14" + checksum: 40b65fcbdd7cc5a60dbe0a2780b6670ebbc1a31c96e43833e0bf2fee0773b1ba5137ab7d137b28fc3f215567bd5f9d06b7b30634ba15636c13bd8a863c20ae9a languageName: node linkType: hard -"@esbuild/android-arm@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/android-arm@npm:0.18.20" - conditions: os=android & cpu=arm +"@jridgewell/trace-mapping@npm:^0.3.18": + version: 0.3.20 + resolution: "@jridgewell/trace-mapping@npm:0.3.20" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 0ea0b2675cf513ec44dc25605616a3c9b808b9832e74b5b63c44260d66b58558bba65764f81928fc1033ead911f8718dca1134049c3e7a93937faf436671df31 languageName: node linkType: hard -"@esbuild/android-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/android-x64@npm:0.18.20" - conditions: os=android & cpu=x64 +"@mapbox/geojson-rewind@npm:^0.5.2": + version: 0.5.2 + resolution: "@mapbox/geojson-rewind@npm:0.5.2" + dependencies: + get-stream: "npm:^6.0.1" + minimist: "npm:^1.2.6" + bin: + geojson-rewind: geojson-rewind + checksum: 631f89ba5b656cb1e02197c242b231f98da0afb96815fa26481497176d6bd5f2aac77af4950da91c954094694acbc26382bd3d38146705737e8ff06442d95a12 languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/darwin-arm64@npm:0.18.20" - conditions: os=darwin & cpu=arm64 +"@mapbox/geojson-types@npm:^1.0.2": + version: 1.0.2 + resolution: "@mapbox/geojson-types@npm:1.0.2" + checksum: aa0a2cb95a358d8756ab5aa70356bcbd6f554a4571703a88a09e7db6580061d6ef4054db5fe3ecb2817c383b8b5433746a8f46712dc606b32063f73b154f99fc languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/darwin-x64@npm:0.18.20" - conditions: os=darwin & cpu=x64 +"@mapbox/jsonlint-lines-primitives@npm:^2.0.2": + version: 2.0.2 + resolution: "@mapbox/jsonlint-lines-primitives@npm:2.0.2" + checksum: 5814e42fc453700132f93ea742aabcef9a3c98d9bf17d4c1106f82d1dcd91bbc93052e66e29014323b9b2a41b020c743d897e4a96cc4ed2f734482d587d8c2b2 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/freebsd-arm64@npm:0.18.20" - conditions: os=freebsd & cpu=arm64 +"@mapbox/mapbox-gl-supported@npm:^1.5.0": + version: 1.5.0 + resolution: "@mapbox/mapbox-gl-supported@npm:1.5.0" + peerDependencies: + mapbox-gl: ">=0.32.1 <2.0.0" + checksum: 5b7712e8b546e598dc5152632504cad53081211b64ddc4447825840ddca703275bc36599167b9550ab906ca8a9554936bcdae562073fdef24b8d38d78ee262fb languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/freebsd-x64@npm:0.18.20" - conditions: os=freebsd & cpu=x64 +"@mapbox/point-geometry@npm:0.1.0, @mapbox/point-geometry@npm:^0.1.0, @mapbox/point-geometry@npm:~0.1.0": + version: 0.1.0 + resolution: "@mapbox/point-geometry@npm:0.1.0" + checksum: e4d861908574cb3165f5ad37b000416ebc90a2d6b3e0073191e6b6dc5074a6159d84ac5114d78557399bb429134f0d05bfb529e7902d1cb2b36d722b72ab662c languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-arm64@npm:0.18.20" - conditions: os=linux & cpu=arm64 +"@mapbox/tiny-sdf@npm:^1.1.1": + version: 1.2.5 + resolution: "@mapbox/tiny-sdf@npm:1.2.5" + checksum: de0252388a628ddb491c986c715f0b63ca6a74f5dac16d3e51eb75a21935a31e34fba5db47c81cc59a462d782021fc68b2e3cc119b2d6cabe15d31e311674d6c languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-arm@npm:0.18.20" - conditions: os=linux & cpu=arm +"@mapbox/unitbezier@npm:^0.0.0": + version: 0.0.0 + resolution: "@mapbox/unitbezier@npm:0.0.0" + checksum: af1943ebeb7532317a5cedfc38d0e580b7bd76cc5c43988df65541d377f3e3fa7d68c201dda20f5239213a4bc81ec5d13146354107196ffc4f14d6f39b8343b5 languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-ia32@npm:0.18.20" - conditions: os=linux & cpu=ia32 +"@mapbox/vector-tile@npm:^1.3.1": + version: 1.3.1 + resolution: "@mapbox/vector-tile@npm:1.3.1" + dependencies: + "@mapbox/point-geometry": "npm:~0.1.0" + checksum: ffb271b95c383923768295e72bdf95e428efb906434b864ea04d3853a8373cf0de19f039bd6615f7cf018fbfb4dbf4599f27ebaa86c2b7b09f7d69187f8d7da1 languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-loong64@npm:0.18.20" - conditions: os=linux & cpu=loong64 +"@mapbox/whoots-js@npm:^3.1.0": + version: 3.1.0 + resolution: "@mapbox/whoots-js@npm:3.1.0" + checksum: fe9e959a9049bcbc2c05d9d1156e050191ad697a1bd95e41cdfa069051ff1d6f2930ced234a8d68d5a0bf78091feab30d76497418ec800d90f0aac8691fe4fd4 languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-mips64el@npm:0.18.20" - conditions: os=linux & cpu=mips64el +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-ppc64@npm:0.18.20" - conditions: os=linux & cpu=ppc64 +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-riscv64@npm:0.18.20" - conditions: os=linux & cpu=riscv64 +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-s390x@npm:0.18.20" - conditions: os=linux & cpu=s390x +"@npmcli/agent@npm:^2.0.0": + version: 2.2.0 + resolution: "@npmcli/agent@npm:2.2.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.1" + checksum: 7b89590598476dda88e79c473766b67c682aae6e0ab0213491daa6083dcc0c171f86b3868f5506f22c09aa5ea69ad7dfb78f4bf39a8dca375d89a42f408645b3 languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-x64@npm:0.18.20" - conditions: os=linux & cpu=x64 +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 162b4a0b8705cd6f5c2470b851d1dc6cd228c86d2170e1769d738c1fbb69a87160901411c3c035331e9e99db72f1f1099a8b734bf1637cc32b9a5be1660e4e1e languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/netbsd-x64@npm:0.18.20" - conditions: os=netbsd & cpu=x64 +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/openbsd-x64@npm:0.18.20" - conditions: os=openbsd & cpu=x64 +"@plotly/d3-sankey-circular@npm:0.33.1": + version: 0.33.1 + resolution: "@plotly/d3-sankey-circular@npm:0.33.1" + dependencies: + d3-array: "npm:^1.2.1" + d3-collection: "npm:^1.0.4" + d3-shape: "npm:^1.2.0" + elementary-circuits-directed-graph: "npm:^1.0.4" + checksum: 7a1c7caa4297099a0403ad1e2c4a5446f8239fce4b9a4ac44c5bc144d56e4c0eb0761dea05993db8b17a85934f9f1723ded2e008e6096d0c226b481313e6fe29 languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/sunos-x64@npm:0.18.20" - conditions: os=sunos & cpu=x64 +"@plotly/d3-sankey@npm:0.7.2": + version: 0.7.2 + resolution: "@plotly/d3-sankey@npm:0.7.2" + dependencies: + d3-array: "npm:1" + d3-collection: "npm:1" + d3-shape: "npm:^1.2.0" + checksum: d3443749f9e7ea692ac1f19c740bac40e25df293af738164d4e313bcc6fd27d35822d5f83530cc9c1c1472d0be49e409edafbbf1ca58164aeca0ec4fe2a392e5 languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/win32-arm64@npm:0.18.20" - conditions: os=win32 & cpu=arm64 +"@plotly/d3@npm:3.8.1": + version: 3.8.1 + resolution: "@plotly/d3@npm:3.8.1" + checksum: 71473d9f495ba415c3f2d4af9186de7e5fae4e38283d89f88921a736d6bd7187227af9d54da7927f89f3e5e4042931df9e6103163293e644e04ca327c752c4d1 languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/win32-ia32@npm:0.18.20" - conditions: os=win32 & cpu=ia32 +"@plotly/mapbox-gl@npm:v1.13.4": + version: 1.13.4 + resolution: "@plotly/mapbox-gl@npm:1.13.4" + dependencies: + "@mapbox/geojson-rewind": "npm:^0.5.2" + "@mapbox/geojson-types": "npm:^1.0.2" + "@mapbox/jsonlint-lines-primitives": "npm:^2.0.2" + "@mapbox/mapbox-gl-supported": "npm:^1.5.0" + "@mapbox/point-geometry": "npm:^0.1.0" + "@mapbox/tiny-sdf": "npm:^1.1.1" + "@mapbox/unitbezier": "npm:^0.0.0" + "@mapbox/vector-tile": "npm:^1.3.1" + "@mapbox/whoots-js": "npm:^3.1.0" + csscolorparser: "npm:~1.0.3" + earcut: "npm:^2.2.2" + geojson-vt: "npm:^3.2.1" + gl-matrix: "npm:^3.2.1" + grid-index: "npm:^1.1.0" + murmurhash-js: "npm:^1.0.0" + pbf: "npm:^3.2.1" + potpack: "npm:^1.0.1" + quickselect: "npm:^2.0.0" + rw: "npm:^1.3.3" + supercluster: "npm:^7.1.0" + tinyqueue: "npm:^2.0.3" + vt-pbf: "npm:^3.1.1" + checksum: e528983335ef8d8ef564e2c0b21a98888b2220750d069679a334d91a43487d12dbbaaf6c798e47ba42f8a5d17dd996207cb1f2ed081d00705631d8cbfcba0a44 languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/win32-x64@npm:0.18.20" - conditions: os=win32 & cpu=x64 +"@plotly/point-cluster@npm:^3.1.9": + version: 3.1.9 + resolution: "@plotly/point-cluster@npm:3.1.9" + dependencies: + array-bounds: "npm:^1.0.1" + binary-search-bounds: "npm:^2.0.4" + clamp: "npm:^1.0.1" + defined: "npm:^1.0.0" + dtype: "npm:^2.0.0" + flatten-vertex-data: "npm:^1.0.2" + is-obj: "npm:^1.0.1" + math-log2: "npm:^1.0.1" + parse-rect: "npm:^1.2.0" + pick-by-alias: "npm:^1.2.0" + checksum: 3e451b1b04f1ce9c2ff1dcc2adbbc5d56bebc419f49c903eb215fa6973315d7f279fe9ebffea6f7ff0c09ba1c21bfe393bb74f54d0e5522a2d20bf43b7f35c38 languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": - version: 4.4.0 - resolution: "@eslint-community/eslint-utils@npm:4.4.0" +"@radix-ui/number@npm:1.0.0": + version: 1.0.0 + resolution: "@radix-ui/number@npm:1.0.0" dependencies: - eslint-visitor-keys: "npm:^3.3.0" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 7e559c4ce59cd3a06b1b5a517b593912e680a7f981ae7affab0d01d709e99cd5647019be8fafa38c350305bc32f1f7d42c7073edde2ab536c745e365f37b607e + "@babel/runtime": "npm:^7.13.10" + checksum: 30a81959548997f065bc259717e9f7ddc3ba7b40b02c4ca9672769f487f650b92c9bbbb8b8e73c14bac9f412b115e8de933609bde973e8514f9b3c53d9e99bb7 languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": - version: 4.10.0 - resolution: "@eslint-community/regexpp@npm:4.10.0" - checksum: c5f60ef1f1ea7649fa7af0e80a5a79f64b55a8a8fa5086de4727eb4c86c652aedee407a9c143b8995d2c0b2d75c1222bec9ba5d73dbfc1f314550554f0979ef4 +"@radix-ui/number@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/number@npm:1.1.0" + checksum: a48e34d5ff1484de1b7cf5d7317fefc831d49e96a2229f300fd37b657bd8cfb59c922830c00ec02838ab21de3b299a523474592e4f30882153412ed47edce6a4 languageName: node linkType: hard -"@eslint/eslintrc@npm:^2.1.3": - version: 2.1.3 - resolution: "@eslint/eslintrc@npm:2.1.3" - dependencies: - ajv: "npm:^6.12.4" - debug: "npm:^4.3.2" - espree: "npm:^9.6.0" - globals: "npm:^13.19.0" - ignore: "npm:^5.2.0" - import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" - minimatch: "npm:^3.1.2" - strip-json-comments: "npm:^3.1.1" - checksum: f4103f4346126292eb15581c5a1d12bef03410fd3719dedbdb92e1f7031d46a5a2d60de8566790445d5d4b70b75ba050876799a11f5fff8265a91ee3fa77dab0 - languageName: node - linkType: hard - -"@eslint/js@npm:8.53.0": - version: 8.53.0 - resolution: "@eslint/js@npm:8.53.0" - checksum: d29f6c207b2f6dc4ef174d16a3c07b0d3a17ca3d805680496ff267edd773e3bac41db4e7dcab622ca1970d892535bd19671e2a756d4eac75e96fd8c8dcdb619b - languageName: node - linkType: hard - -"@fal-works/esbuild-plugin-global-externals@npm:^2.1.2": - version: 2.1.2 - resolution: "@fal-works/esbuild-plugin-global-externals@npm:2.1.2" - checksum: 2c84a8e6121b00ac8e4eb2469ab8f188142db2f1927391758e5d0142cb684b7eb0fad0c9d6caf358616eb2a77af2c067e08b9ec8e05749b415fc4dd0ef96d0fe - languageName: node - linkType: hard - -"@floating-ui/core@npm:^0.7.3": - version: 0.7.3 - resolution: "@floating-ui/core@npm:0.7.3" - checksum: 5173066faf454f1475f465adeaab04fb195670cda019109660199587c05bf2fa74d79a50e53c1d2fed426d6a40f9698afa4d386e89485843c46a7ffba850efe1 - languageName: node - linkType: hard - -"@floating-ui/core@npm:^1.2.6": - version: 1.2.6 - resolution: "@floating-ui/core@npm:1.2.6" - checksum: dc2628d13502ec8fb3fd77de21139c2dd484f4c988263e2c1adea20ea932e268bf4aae3731c202748509824c5dc5a32b397b93cce3b40ef2cfacd095d2f2bb23 - languageName: node - linkType: hard - -"@floating-ui/dom@npm:^0.5.3": - version: 0.5.4 - resolution: "@floating-ui/dom@npm:0.5.4" - dependencies: - "@floating-ui/core": "npm:^0.7.3" - checksum: c395ec32862ef4d4a1d5c3cb3b54b462f7872a323746e0b5f7f7a31b17570a042ad1f1b134040a30bf0d6181c14867daebfac1c1bb89b42f8f000b3f9981516c - languageName: node - linkType: hard - -"@floating-ui/dom@npm:^1.2.7": - version: 1.2.9 - resolution: "@floating-ui/dom@npm:1.2.9" - dependencies: - "@floating-ui/core": "npm:^1.2.6" - checksum: cc7307ac189f1f9d744970c6dfe9e15cb14a7c0262b7223081b7b0005e113d727828f41aafb34f7ffa3670ccef0457921551add325fa67de85cc2e65cf10f7fd - languageName: node - linkType: hard - -"@floating-ui/react-dom@npm:0.7.2": - version: 0.7.2 - resolution: "@floating-ui/react-dom@npm:0.7.2" - dependencies: - "@floating-ui/dom": "npm:^0.5.3" - use-isomorphic-layout-effect: "npm:^1.1.1" - peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: fc0e857fdc5ebc2c56e3127581477842d659f938b15e5364ad494df357824f52667e50d97b9adc37cd45154cfbac51b30461cb19b7f1dffb86e18397150a6243 - languageName: node - linkType: hard - -"@floating-ui/react-dom@npm:^2.0.0": - version: 2.0.0 - resolution: "@floating-ui/react-dom@npm:2.0.0" - dependencies: - "@floating-ui/dom": "npm:^1.2.7" - peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: 57be5b9547b5d65f7b475923c2844fabf1b0aa0fe4cbdf1e36f673389ac19e5ffa045a186d3cb4364256482d8b408eee8018fb0208793a0bb8d925d8eae9cd7f - languageName: node - linkType: hard - -"@humanwhocodes/config-array@npm:^0.11.13": - version: 0.11.13 - resolution: "@humanwhocodes/config-array@npm:0.11.13" - dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.1" - debug: "npm:^4.1.1" - minimatch: "npm:^3.0.5" - checksum: d76ca802d853366094d0e98ff0d0994117fc8eff96649cd357b15e469e428228f597cd2e929d54ab089051684949955f16ee905bb19f7b2f0446fb377157be7a - languageName: node - linkType: hard - -"@humanwhocodes/module-importer@npm:^1.0.1": - version: 1.0.1 - resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: 909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 - languageName: node - linkType: hard - -"@humanwhocodes/object-schema@npm:^2.0.1": - version: 2.0.1 - resolution: "@humanwhocodes/object-schema@npm:2.0.1" - checksum: 9dba24e59fdb4041829d92b693aacb778add3b6f612aaa9c0774f3b650c11a378cc64f042a59da85c11dae33df456580a3c36837b953541aed6ff94294f97fac - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: "npm:^5.1.2" - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: "npm:^7.0.1" - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: "npm:^8.1.0" - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e - languageName: node - linkType: hard - -"@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" - dependencies: - camelcase: "npm:^5.3.1" - find-up: "npm:^4.1.0" - get-package-type: "npm:^0.1.0" - js-yaml: "npm:^3.13.1" - resolve-from: "npm:^5.0.0" - checksum: dd2a8b094887da5a1a2339543a4933d06db2e63cbbc2e288eb6431bd832065df0c099d091b6a67436e71b7d6bf85f01ce7c15f9253b4cbebcc3b9a496165ba42 - languageName: node - linkType: hard - -"@istanbuljs/schema@npm:^0.1.2": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a - languageName: node - linkType: hard - -"@jest/console@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/console@npm:29.7.0" - dependencies: - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - jest-message-util: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - slash: "npm:^3.0.0" - checksum: 7be408781d0a6f657e969cbec13b540c329671819c2f57acfad0dae9dbfe2c9be859f38fe99b35dba9ff1536937dc6ddc69fdcd2794812fa3c647a1619797f6c - languageName: node - linkType: hard - -"@jest/core@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/core@npm:29.7.0" - dependencies: - "@jest/console": "npm:^29.7.0" - "@jest/reporters": "npm:^29.7.0" - "@jest/test-result": "npm:^29.7.0" - "@jest/transform": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - ansi-escapes: "npm:^4.2.1" - chalk: "npm:^4.0.0" - ci-info: "npm:^3.2.0" - exit: "npm:^0.1.2" - graceful-fs: "npm:^4.2.9" - jest-changed-files: "npm:^29.7.0" - jest-config: "npm:^29.7.0" - jest-haste-map: "npm:^29.7.0" - jest-message-util: "npm:^29.7.0" - jest-regex-util: "npm:^29.6.3" - jest-resolve: "npm:^29.7.0" - jest-resolve-dependencies: "npm:^29.7.0" - jest-runner: "npm:^29.7.0" - jest-runtime: "npm:^29.7.0" - jest-snapshot: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - jest-validate: "npm:^29.7.0" - jest-watcher: "npm:^29.7.0" - micromatch: "npm:^4.0.4" - pretty-format: "npm:^29.7.0" - slash: "npm:^3.0.0" - strip-ansi: "npm:^6.0.0" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 934f7bf73190f029ac0f96662c85cd276ec460d407baf6b0dbaec2872e157db4d55a7ee0b1c43b18874602f662b37cb973dda469a4e6d88b4e4845b521adeeb2 - languageName: node - linkType: hard - -"@jest/environment@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/environment@npm:29.7.0" - dependencies: - "@jest/fake-timers": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - jest-mock: "npm:^29.7.0" - checksum: c7b1b40c618f8baf4d00609022d2afa086d9c6acc706f303a70bb4b67275868f620ad2e1a9efc5edd418906157337cce50589a627a6400bbdf117d351b91ef86 - languageName: node - linkType: hard - -"@jest/expect-utils@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/expect-utils@npm:29.5.0" - dependencies: - jest-get-type: "npm:^29.4.3" - checksum: e7f44de651b5ef71c6e1b7a0350a704258167c20b6e8165b3100346d5c7f8eb4cd2c229ea2c048e9161666d1c086fbbc422f111f3b77da3fb89a99d52d4b3690 - languageName: node - linkType: hard - -"@jest/expect-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect-utils@npm:29.7.0" - dependencies: - jest-get-type: "npm:^29.6.3" - checksum: 60b79d23a5358dc50d9510d726443316253ecda3a7fb8072e1526b3e0d3b14f066ee112db95699b7a43ad3f0b61b750c72e28a5a1cac361d7a2bb34747fa938a - languageName: node - linkType: hard - -"@jest/expect@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect@npm:29.7.0" - dependencies: - expect: "npm:^29.7.0" - jest-snapshot: "npm:^29.7.0" - checksum: b41f193fb697d3ced134349250aed6ccea075e48c4f803159db102b826a4e473397c68c31118259868fd69a5cba70e97e1c26d2c2ff716ca39dc73a2ccec037e - languageName: node - linkType: hard - -"@jest/fake-timers@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/fake-timers@npm:29.7.0" - dependencies: - "@jest/types": "npm:^29.6.3" - "@sinonjs/fake-timers": "npm:^10.0.2" - "@types/node": "npm:*" - jest-message-util: "npm:^29.7.0" - jest-mock: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - checksum: cf0a8bcda801b28dc2e2b2ba36302200ee8104a45ad7a21e6c234148932f826cb3bc57c8df3b7b815aeea0861d7b6ca6f0d4778f93b9219398ef28749e03595c - languageName: node - linkType: hard - -"@jest/globals@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/globals@npm:29.7.0" - dependencies: - "@jest/environment": "npm:^29.7.0" - "@jest/expect": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - jest-mock: "npm:^29.7.0" - checksum: a385c99396878fe6e4460c43bd7bb0a5cc52befb462cc6e7f2a3810f9e7bcce7cdeb51908fd530391ee452dc856c98baa2c5f5fa8a5b30b071d31ef7f6955cea - languageName: node - linkType: hard - -"@jest/reporters@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/reporters@npm:29.7.0" - dependencies: - "@bcoe/v8-coverage": "npm:^0.2.3" - "@jest/console": "npm:^29.7.0" - "@jest/test-result": "npm:^29.7.0" - "@jest/transform": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@jridgewell/trace-mapping": "npm:^0.3.18" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - collect-v8-coverage: "npm:^1.0.0" - exit: "npm:^0.1.2" - glob: "npm:^7.1.3" - graceful-fs: "npm:^4.2.9" - istanbul-lib-coverage: "npm:^3.0.0" - istanbul-lib-instrument: "npm:^6.0.0" - istanbul-lib-report: "npm:^3.0.0" - istanbul-lib-source-maps: "npm:^4.0.0" - istanbul-reports: "npm:^3.1.3" - jest-message-util: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - jest-worker: "npm:^29.7.0" - slash: "npm:^3.0.0" - string-length: "npm:^4.0.1" - strip-ansi: "npm:^6.0.0" - v8-to-istanbul: "npm:^9.0.1" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: a754402a799541c6e5aff2c8160562525e2a47e7d568f01ebfc4da66522de39cbb809bbb0a841c7052e4270d79214e70aec3c169e4eae42a03bc1a8a20cb9fa2 - languageName: node - linkType: hard - -"@jest/schemas@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/schemas@npm:29.4.3" - dependencies: - "@sinclair/typebox": "npm:^0.25.16" - checksum: 8a35967cec454d1de2d5a58ab99b49a0ff798d1dce2d817bdd9960bb2f070493f767fbbf419e6a263860d3b1ef1e50ab609a76ae21b5f8c09bb0859e8f51a098 - languageName: node - linkType: hard - -"@jest/schemas@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/schemas@npm:29.6.3" - dependencies: - "@sinclair/typebox": "npm:^0.27.8" - checksum: b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be - languageName: node - linkType: hard - -"@jest/source-map@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/source-map@npm:29.6.3" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.18" - callsites: "npm:^3.0.0" - graceful-fs: "npm:^4.2.9" - checksum: a2f177081830a2e8ad3f2e29e20b63bd40bade294880b595acf2fc09ec74b6a9dd98f126a2baa2bf4941acd89b13a4ade5351b3885c224107083a0059b60a219 - languageName: node - linkType: hard - -"@jest/test-result@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-result@npm:29.7.0" - dependencies: - "@jest/console": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@types/istanbul-lib-coverage": "npm:^2.0.0" - collect-v8-coverage: "npm:^1.0.0" - checksum: 7de54090e54a674ca173470b55dc1afdee994f2d70d185c80236003efd3fa2b753fff51ffcdda8e2890244c411fd2267529d42c4a50a8303755041ee493e6a04 - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-sequencer@npm:29.7.0" - dependencies: - "@jest/test-result": "npm:^29.7.0" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^29.7.0" - slash: "npm:^3.0.0" - checksum: 593a8c4272797bb5628984486080cbf57aed09c7cfdc0a634e8c06c38c6bef329c46c0016e84555ee55d1cd1f381518cf1890990ff845524c1123720c8c1481b - languageName: node - linkType: hard - -"@jest/transform@npm:^29.3.1, @jest/transform@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/transform@npm:29.7.0" - dependencies: - "@babel/core": "npm:^7.11.6" - "@jest/types": "npm:^29.6.3" - "@jridgewell/trace-mapping": "npm:^0.3.18" - babel-plugin-istanbul: "npm:^6.1.1" - chalk: "npm:^4.0.0" - convert-source-map: "npm:^2.0.0" - fast-json-stable-stringify: "npm:^2.1.0" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^29.7.0" - jest-regex-util: "npm:^29.6.3" - jest-util: "npm:^29.7.0" - micromatch: "npm:^4.0.4" - pirates: "npm:^4.0.4" - slash: "npm:^3.0.0" - write-file-atomic: "npm:^4.0.2" - checksum: 7f4a7f73dcf45dfdf280c7aa283cbac7b6e5a904813c3a93ead7e55873761fc20d5c4f0191d2019004fac6f55f061c82eb3249c2901164ad80e362e7a7ede5a6 - languageName: node - linkType: hard - -"@jest/types@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/types@npm:27.5.1" - dependencies: - "@types/istanbul-lib-coverage": "npm:^2.0.0" - "@types/istanbul-reports": "npm:^3.0.0" - "@types/node": "npm:*" - "@types/yargs": "npm:^16.0.0" - chalk: "npm:^4.0.0" - checksum: 4598b302398db0eb77168b75a6c58148ea02cc9b9f21c5d1bbe985c1c9257110a5653cf7b901c3cab87fba231e3fed83633687f1c0903b4bc6939ab2a8452504 - languageName: node - linkType: hard - -"@jest/types@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/types@npm:29.5.0" - dependencies: - "@jest/schemas": "npm:^29.4.3" - "@types/istanbul-lib-coverage": "npm:^2.0.0" - "@types/istanbul-reports": "npm:^3.0.0" - "@types/node": "npm:*" - "@types/yargs": "npm:^17.0.8" - chalk: "npm:^4.0.0" - checksum: f1cccd2e9b00a985bfdac03517f906cdf7a481be3606c335f8ec08a7272b7cf700b23484ce323a912b374defb90d3ab88c643cf2a2f47635c1c4feacfa1c1b2d - languageName: node - linkType: hard - -"@jest/types@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/types@npm:29.6.3" - dependencies: - "@jest/schemas": "npm:^29.6.3" - "@types/istanbul-lib-coverage": "npm:^2.0.0" - "@types/istanbul-reports": "npm:^3.0.0" - "@types/node": "npm:*" - "@types/yargs": "npm:^17.0.8" - chalk: "npm:^4.0.0" - checksum: ea4e493dd3fb47933b8ccab201ae573dcc451f951dc44ed2a86123cd8541b82aa9d2b1031caf9b1080d6673c517e2dcc25a44b2dc4f3fbc37bfc965d444888c0 - languageName: node - linkType: hard - -"@joshwooding/vite-plugin-react-docgen-typescript@npm:0.3.0": - version: 0.3.0 - resolution: "@joshwooding/vite-plugin-react-docgen-typescript@npm:0.3.0" - dependencies: - glob: "npm:^7.2.0" - glob-promise: "npm:^4.2.0" - magic-string: "npm:^0.27.0" - react-docgen-typescript: "npm:^2.2.2" - peerDependencies: - typescript: ">= 4.3.x" - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 31098ad8fcc2440437534599c111d9f2951dd74821e8ba46c521b969bae4c918d830b7bb0484efbad29a51711bb62d3bc623d5a1ed5b1695b5b5594ea9dd4ca0 - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.1.0": - version: 0.1.1 - resolution: "@jridgewell/gen-mapping@npm:0.1.1" - dependencies: - "@jridgewell/set-array": "npm:^1.0.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" - checksum: 3d784d87aee604bc4d48d3d9e547e0466d9f4a432cd9b3a4f3e55d104313bf3945e7e970cd5fa767bc145df11f1d568a01ab6659696be41f0ed2a817f3b583a3 - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.2": - version: 0.3.2 - resolution: "@jridgewell/gen-mapping@npm:0.3.2" - dependencies: - "@jridgewell/set-array": "npm:^1.0.1" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 82685c8735c63fe388badee45e2970a6bc83eed1c84d46d8652863bafeca22a6c6cc15812f5999a4535366f4668ccc9ba6d5c67dfb72e846fa8a063806f10afd - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:3.1.0": - version: 3.1.0 - resolution: "@jridgewell/resolve-uri@npm:3.1.0" - checksum: 78055e2526108331126366572045355051a930f017d1904a4f753d3f4acee8d92a14854948095626f6163cffc24ea4e3efa30637417bb866b84743dec7ef6fd9 - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.1 - resolution: "@jridgewell/resolve-uri@npm:3.1.1" - checksum: 0dbc9e29bc640bbbdc5b9876d2859c69042bfcf1423c1e6421bcca53e826660bff4e41c7d4bcb8dbea696404231a6f902f76ba41835d049e20f2dd6cffb713bf - languageName: node - linkType: hard - -"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": - version: 1.1.2 - resolution: "@jridgewell/set-array@npm:1.1.2" - checksum: bc7ab4c4c00470de4e7562ecac3c0c84f53e7ee8a711e546d67c47da7febe7c45cd67d4d84ee3c9b2c05ae8e872656cdded8a707a283d30bd54fbc65aef821ab - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10": - version: 1.4.14 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" - checksum: 3fbaff1387c1338b097eeb6ff92890d7838f7de0dde259e4983763b44540bfd5ca6a1f7644dc8ad003a57f7e80670d5b96a8402f1386ba9aee074743ae9bad51 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.13, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: 0c6b5ae663087558039052a626d2d7ed5208da36cfd707dcc5cea4a07cfc918248403dcb5989a8f7afaf245ce0573b7cc6fd94c4a30453bd10e44d9363940ba5 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.17 - resolution: "@jridgewell/trace-mapping@npm:0.3.17" - dependencies: - "@jridgewell/resolve-uri": "npm:3.1.0" - "@jridgewell/sourcemap-codec": "npm:1.4.14" - checksum: 40b65fcbdd7cc5a60dbe0a2780b6670ebbc1a31c96e43833e0bf2fee0773b1ba5137ab7d137b28fc3f215567bd5f9d06b7b30634ba15636c13bd8a863c20ae9a - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.18": - version: 0.3.20 - resolution: "@jridgewell/trace-mapping@npm:0.3.20" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 0ea0b2675cf513ec44dc25605616a3c9b808b9832e74b5b63c44260d66b58558bba65764f81928fc1033ead911f8718dca1134049c3e7a93937faf436671df31 - languageName: node - linkType: hard - -"@juggle/resize-observer@npm:^3.3.1": - version: 3.4.0 - resolution: "@juggle/resize-observer@npm:3.4.0" - checksum: 12930242357298c6f2ad5d4ec7cf631dfb344ca7c8c830ab7f64e6ac11eb1aae486901d8d880fd08fb1b257800c160a0da3aee1e7ed9adac0ccbb9b7c5d93347 - languageName: node - linkType: hard - -"@mapbox/geojson-rewind@npm:^0.5.2": - version: 0.5.2 - resolution: "@mapbox/geojson-rewind@npm:0.5.2" - dependencies: - get-stream: "npm:^6.0.1" - minimist: "npm:^1.2.6" - bin: - geojson-rewind: geojson-rewind - checksum: 631f89ba5b656cb1e02197c242b231f98da0afb96815fa26481497176d6bd5f2aac77af4950da91c954094694acbc26382bd3d38146705737e8ff06442d95a12 - languageName: node - linkType: hard - -"@mapbox/geojson-types@npm:^1.0.2": - version: 1.0.2 - resolution: "@mapbox/geojson-types@npm:1.0.2" - checksum: aa0a2cb95a358d8756ab5aa70356bcbd6f554a4571703a88a09e7db6580061d6ef4054db5fe3ecb2817c383b8b5433746a8f46712dc606b32063f73b154f99fc - languageName: node - linkType: hard - -"@mapbox/jsonlint-lines-primitives@npm:^2.0.2": - version: 2.0.2 - resolution: "@mapbox/jsonlint-lines-primitives@npm:2.0.2" - checksum: 5814e42fc453700132f93ea742aabcef9a3c98d9bf17d4c1106f82d1dcd91bbc93052e66e29014323b9b2a41b020c743d897e4a96cc4ed2f734482d587d8c2b2 - languageName: node - linkType: hard - -"@mapbox/mapbox-gl-supported@npm:^1.5.0": - version: 1.5.0 - resolution: "@mapbox/mapbox-gl-supported@npm:1.5.0" - peerDependencies: - mapbox-gl: ">=0.32.1 <2.0.0" - checksum: 5b7712e8b546e598dc5152632504cad53081211b64ddc4447825840ddca703275bc36599167b9550ab906ca8a9554936bcdae562073fdef24b8d38d78ee262fb - languageName: node - linkType: hard - -"@mapbox/point-geometry@npm:0.1.0, @mapbox/point-geometry@npm:^0.1.0, @mapbox/point-geometry@npm:~0.1.0": - version: 0.1.0 - resolution: "@mapbox/point-geometry@npm:0.1.0" - checksum: e4d861908574cb3165f5ad37b000416ebc90a2d6b3e0073191e6b6dc5074a6159d84ac5114d78557399bb429134f0d05bfb529e7902d1cb2b36d722b72ab662c - languageName: node - linkType: hard - -"@mapbox/tiny-sdf@npm:^1.1.1": - version: 1.2.5 - resolution: "@mapbox/tiny-sdf@npm:1.2.5" - checksum: de0252388a628ddb491c986c715f0b63ca6a74f5dac16d3e51eb75a21935a31e34fba5db47c81cc59a462d782021fc68b2e3cc119b2d6cabe15d31e311674d6c - languageName: node - linkType: hard - -"@mapbox/unitbezier@npm:^0.0.0": - version: 0.0.0 - resolution: "@mapbox/unitbezier@npm:0.0.0" - checksum: af1943ebeb7532317a5cedfc38d0e580b7bd76cc5c43988df65541d377f3e3fa7d68c201dda20f5239213a4bc81ec5d13146354107196ffc4f14d6f39b8343b5 - languageName: node - linkType: hard - -"@mapbox/vector-tile@npm:^1.3.1": - version: 1.3.1 - resolution: "@mapbox/vector-tile@npm:1.3.1" - dependencies: - "@mapbox/point-geometry": "npm:~0.1.0" - checksum: ffb271b95c383923768295e72bdf95e428efb906434b864ea04d3853a8373cf0de19f039bd6615f7cf018fbfb4dbf4599f27ebaa86c2b7b09f7d69187f8d7da1 - languageName: node - linkType: hard - -"@mapbox/whoots-js@npm:^3.1.0": - version: 3.1.0 - resolution: "@mapbox/whoots-js@npm:3.1.0" - checksum: fe9e959a9049bcbc2c05d9d1156e050191ad697a1bd95e41cdfa069051ff1d6f2930ced234a8d68d5a0bf78091feab30d76497418ec800d90f0aac8691fe4fd4 - languageName: node - linkType: hard - -"@mdx-js/react@npm:^2.1.5": - version: 2.3.0 - resolution: "@mdx-js/react@npm:2.3.0" - dependencies: - "@types/mdx": "npm:^2.0.0" - "@types/react": "npm:>=16" - peerDependencies: - react: ">=16" - checksum: 6d647115703dbe258f7fe372499fa8c6fe17a053ff0f2a208111c9973a71ae738a0ed376770445d39194d217e00e1a015644b24f32c2f7cb4f57988de0649b15 - languageName: node - linkType: hard - -"@ndelangen/get-tarball@npm:^3.0.7": - version: 3.0.9 - resolution: "@ndelangen/get-tarball@npm:3.0.9" - dependencies: - gunzip-maybe: "npm:^1.4.2" - pump: "npm:^3.0.0" - tar-fs: "npm:^2.1.1" - checksum: d66e76c6c990745d691c85d1dfa7f3dfd181405bb52c295baf4d1838b847d40c686e24602ea0ab1cdeb14d409db59f6bb9e2f96f56fe53da275da9cccf778e27 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": "npm:2.0.5" - run-parallel: "npm:^1.1.9" - checksum: 732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": "npm:2.1.5" - fastq: "npm:^1.6.0" - checksum: db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 - languageName: node - linkType: hard - -"@npmcli/agent@npm:^2.0.0": - version: 2.2.0 - resolution: "@npmcli/agent@npm:2.2.0" - dependencies: - agent-base: "npm:^7.1.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^10.0.1" - socks-proxy-agent: "npm:^8.0.1" - checksum: 7b89590598476dda88e79c473766b67c682aae6e0ab0213491daa6083dcc0c171f86b3868f5506f22c09aa5ea69ad7dfb78f4bf39a8dca375d89a42f408645b3 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/fs@npm:3.1.0" - dependencies: - semver: "npm:^7.3.5" - checksum: 162b4a0b8705cd6f5c2470b851d1dc6cd228c86d2170e1769d738c1fbb69a87160901411c3c035331e9e99db72f1f1099a8b734bf1637cc32b9a5be1660e4e1e - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd - languageName: node - linkType: hard - -"@plotly/d3-sankey-circular@npm:0.33.1": - version: 0.33.1 - resolution: "@plotly/d3-sankey-circular@npm:0.33.1" - dependencies: - d3-array: "npm:^1.2.1" - d3-collection: "npm:^1.0.4" - d3-shape: "npm:^1.2.0" - elementary-circuits-directed-graph: "npm:^1.0.4" - checksum: 7a1c7caa4297099a0403ad1e2c4a5446f8239fce4b9a4ac44c5bc144d56e4c0eb0761dea05993db8b17a85934f9f1723ded2e008e6096d0c226b481313e6fe29 - languageName: node - linkType: hard - -"@plotly/d3-sankey@npm:0.7.2": - version: 0.7.2 - resolution: "@plotly/d3-sankey@npm:0.7.2" - dependencies: - d3-array: "npm:1" - d3-collection: "npm:1" - d3-shape: "npm:^1.2.0" - checksum: d3443749f9e7ea692ac1f19c740bac40e25df293af738164d4e313bcc6fd27d35822d5f83530cc9c1c1472d0be49e409edafbbf1ca58164aeca0ec4fe2a392e5 - languageName: node - linkType: hard - -"@plotly/d3@npm:3.8.1": - version: 3.8.1 - resolution: "@plotly/d3@npm:3.8.1" - checksum: 71473d9f495ba415c3f2d4af9186de7e5fae4e38283d89f88921a736d6bd7187227af9d54da7927f89f3e5e4042931df9e6103163293e644e04ca327c752c4d1 - languageName: node - linkType: hard - -"@plotly/mapbox-gl@npm:v1.13.4": - version: 1.13.4 - resolution: "@plotly/mapbox-gl@npm:1.13.4" - dependencies: - "@mapbox/geojson-rewind": "npm:^0.5.2" - "@mapbox/geojson-types": "npm:^1.0.2" - "@mapbox/jsonlint-lines-primitives": "npm:^2.0.2" - "@mapbox/mapbox-gl-supported": "npm:^1.5.0" - "@mapbox/point-geometry": "npm:^0.1.0" - "@mapbox/tiny-sdf": "npm:^1.1.1" - "@mapbox/unitbezier": "npm:^0.0.0" - "@mapbox/vector-tile": "npm:^1.3.1" - "@mapbox/whoots-js": "npm:^3.1.0" - csscolorparser: "npm:~1.0.3" - earcut: "npm:^2.2.2" - geojson-vt: "npm:^3.2.1" - gl-matrix: "npm:^3.2.1" - grid-index: "npm:^1.1.0" - murmurhash-js: "npm:^1.0.0" - pbf: "npm:^3.2.1" - potpack: "npm:^1.0.1" - quickselect: "npm:^2.0.0" - rw: "npm:^1.3.3" - supercluster: "npm:^7.1.0" - tinyqueue: "npm:^2.0.3" - vt-pbf: "npm:^3.1.1" - checksum: e528983335ef8d8ef564e2c0b21a98888b2220750d069679a334d91a43487d12dbbaaf6c798e47ba42f8a5d17dd996207cb1f2ed081d00705631d8cbfcba0a44 - languageName: node - linkType: hard - -"@plotly/point-cluster@npm:^3.1.9": - version: 3.1.9 - resolution: "@plotly/point-cluster@npm:3.1.9" - dependencies: - array-bounds: "npm:^1.0.1" - binary-search-bounds: "npm:^2.0.4" - clamp: "npm:^1.0.1" - defined: "npm:^1.0.0" - dtype: "npm:^2.0.0" - flatten-vertex-data: "npm:^1.0.2" - is-obj: "npm:^1.0.1" - math-log2: "npm:^1.0.1" - parse-rect: "npm:^1.2.0" - pick-by-alias: "npm:^1.2.0" - checksum: 3e451b1b04f1ce9c2ff1dcc2adbbc5d56bebc419f49c903eb215fa6973315d7f279fe9ebffea6f7ff0c09ba1c21bfe393bb74f54d0e5522a2d20bf43b7f35c38 - languageName: node - linkType: hard - -"@radix-ui/number@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/number@npm:1.0.0" - dependencies: - "@babel/runtime": "npm:^7.13.10" - checksum: 30a81959548997f065bc259717e9f7ddc3ba7b40b02c4ca9672769f487f650b92c9bbbb8b8e73c14bac9f412b115e8de933609bde973e8514f9b3c53d9e99bb7 - languageName: node - linkType: hard - -"@radix-ui/number@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/number@npm:1.0.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - checksum: 42e4870cd14459da6da03e43c7507dc4c807ed787a87bda52912a0d1d6d5013326b697c18c9625fc6a2cf0af2b45d9c86747985b45358fd92ab646b983978e3c - languageName: node - linkType: hard - -"@radix-ui/primitive@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/primitive@npm:1.0.0" - dependencies: - "@babel/runtime": "npm:^7.13.10" - checksum: 4b0a4bdbf312df2317c3a3c728b0d2249242220a93eedaffecd4207bc0b8d3f28498c4b15f16c8f60b8292302d6d28ef73d751f63e77ef9bf6a318f52c6dc19b - languageName: node - linkType: hard - -"@radix-ui/primitive@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/primitive@npm:1.0.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - checksum: 912216455537db3ca77f3e7f70174fb2b454fbd4a37a0acb7cfadad9ab6131abdfb787472242574460a3c301edf45738340cc84f6717982710082840fde7d916 - languageName: node - linkType: hard - -"@radix-ui/primitive@npm:1.0.1-rc.3": - version: 1.0.1-rc.3 - resolution: "@radix-ui/primitive@npm:1.0.1-rc.3" - dependencies: - "@babel/runtime": "npm:^7.13.10" - checksum: 917ea77af7cc320ef1613b3f9cb76913e093168368d09aae83011f6712f099f618df42ddd4c40425916febb370a32355bfd226e1fc1778e44866043f7f9f849d - languageName: node - linkType: hard - -"@radix-ui/primitive@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/primitive@npm:1.1.0" - checksum: 1dcc8b5401799416ff8bdb15c7189b4536c193220ad8fd348a48b88f804ee38cec7bd03e2b9641f7da24610e2f61f23a306911ce883af92c4e8c1abac634cb61 - languageName: node - linkType: hard - -"@radix-ui/react-accordion@npm:^1.1.2": - version: 1.1.2 - resolution: "@radix-ui/react-accordion@npm:1.1.2" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.1" - "@radix-ui/react-collapsible": "npm:1.0.3" - "@radix-ui/react-collection": "npm:1.0.3" - "@radix-ui/react-compose-refs": "npm:1.0.1" - "@radix-ui/react-context": "npm:1.0.1" - "@radix-ui/react-direction": "npm:1.0.1" - "@radix-ui/react-id": "npm:1.0.1" - "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-use-controllable-state": "npm:1.0.1" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 54fe3642306d62f68ac4d534c6bec1998d00d441663b16119fe267cb085e48761acf3c02b9466245d42b8ab419632a573d35d79d3a5d328906bde121dd1816db - languageName: node - linkType: hard - -"@radix-ui/react-arrow@npm:1.0.2": - version: 1.0.2 - resolution: "@radix-ui/react-arrow@npm:1.0.2" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-primitive": "npm:1.0.2" - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: 0fcf02ae5e2141ca8983d6981a1590806146221d7ef0c693634b66f27aea6cb7f8491197aa629685725dce95afb80d0aed6f5038074af073ff9573b0f4410da3 - languageName: node - linkType: hard - -"@radix-ui/react-arrow@npm:1.0.3": - version: 1.0.3 - resolution: "@radix-ui/react-arrow@npm:1.0.3" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-primitive": "npm:1.0.3" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: c931f6d7e0bac50fd1654a0303a303aff74a68a13a33a851a43a7c88677b53a92ca6557920b9105144a3002f899ce888437d20ddd7803a5c716edac99587626d - languageName: node - linkType: hard - -"@radix-ui/react-checkbox@npm:^1.0.3": - version: 1.0.3 - resolution: "@radix-ui/react-checkbox@npm:1.0.3" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.0" - "@radix-ui/react-compose-refs": "npm:1.0.0" - "@radix-ui/react-context": "npm:1.0.0" - "@radix-ui/react-presence": "npm:1.0.0" - "@radix-ui/react-primitive": "npm:1.0.2" - "@radix-ui/react-use-controllable-state": "npm:1.0.0" - "@radix-ui/react-use-previous": "npm:1.0.0" - "@radix-ui/react-use-size": "npm:1.0.0" - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: 99a8a41fd4af5b5330563edccb3977c57b57101e7f7cc99ae1c63a3db8628600dfb6c7fffcbeed03a886985e097bf07418b49ad46162c0cfa7ee8747ff1d41f1 - languageName: node - linkType: hard - -"@radix-ui/react-collapsible@npm:1.0.3": - version: 1.0.3 - resolution: "@radix-ui/react-collapsible@npm:1.0.3" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.1" - "@radix-ui/react-compose-refs": "npm:1.0.1" - "@radix-ui/react-context": "npm:1.0.1" - "@radix-ui/react-id": "npm:1.0.1" - "@radix-ui/react-presence": "npm:1.0.1" - "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-use-controllable-state": "npm:1.0.1" - "@radix-ui/react-use-layout-effect": "npm:1.0.1" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 7bc3e601e3fa84991bdf46ea1bdb725760942f8facadf42f05808abc7a1399c6ab90a00c70699367026afbd8afba0254ff9634f9d1e05b24ae452d9e0524d328 - languageName: node - linkType: hard - -"@radix-ui/react-collection@npm:1.0.2": - version: 1.0.2 - resolution: "@radix-ui/react-collection@npm:1.0.2" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-compose-refs": "npm:1.0.0" - "@radix-ui/react-context": "npm:1.0.0" - "@radix-ui/react-primitive": "npm:1.0.2" - "@radix-ui/react-slot": "npm:1.0.1" - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: 205d7c2af98094244f5d47ea8bbb41bb0f138b39875296a84d20733a0bf54a5a2cefa2e54024309d3700b322bec0d3dec3555b823edf9bec24deb6b6ae189b49 - languageName: node - linkType: hard - -"@radix-ui/react-collection@npm:1.0.3": - version: 1.0.3 - resolution: "@radix-ui/react-collection@npm:1.0.3" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-compose-refs": "npm:1.0.1" - "@radix-ui/react-context": "npm:1.0.1" - "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-slot": "npm:1.0.2" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: cefa56383d7451ca79e4bd5a29aaeef6c205a04297213efd149aaead82fc8cde4fb8298e20e6b3613e5696e43f814fb4489805428f6604834fb31f73c6725fa8 - languageName: node - linkType: hard - -"@radix-ui/react-collection@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-collection@npm:1.1.0" - dependencies: - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-slot": "npm: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 - checksum: fecb9f0871c827070a8794b39c7379fdc7d0855c4b05804f0b395eef39c37b2c2b6779865d6cb35d3bc74b6b380107bd8b3754d1730a34ea88913e6cd0eb84d4 - languageName: node - linkType: hard - -"@radix-ui/react-compose-refs@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-compose-refs@npm:1.0.0" - dependencies: - "@babel/runtime": "npm:^7.13.10" - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: 449148920c1df82ffcdd78a68d3485036d198b41b9fcfc407b008df5dfefc8f1a60391f7b53e2bc69e0fdbbba846b0b79fede5f7ed35bca82af4eff6c56b8854 - languageName: node - linkType: hard - -"@radix-ui/react-compose-refs@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/react-compose-refs@npm:1.0.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: be06f8dab35b5a1bffa7a5982fb26218ddade1acb751288333e3b89d7b4a7dfb5a6371be83876dac0ec2ebe0866d295e8618b778608e1965342986ea448040ec - languageName: node - linkType: hard - -"@radix-ui/react-compose-refs@npm:1.0.1-rc.3": - version: 1.0.1-rc.3 - resolution: "@radix-ui/react-compose-refs@npm:1.0.1-rc.3" - dependencies: - "@babel/runtime": "npm:^7.13.10" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 011d8f33937137df1a1a60f468bbf7aee4a5f229b557dcb10c8420db3a6395cebdbbec7e12306c79270f6f11dd932a2743e03ca6149f46da7f8001275ca1b514 - languageName: node - linkType: hard - -"@radix-ui/react-compose-refs@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-compose-refs@npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 7e18706084397d9458ca3473d8565b10691da06f6499a78edbcc4bd72cde08f62e91120658d17d58c19fc39d6b1dffe0133cc4535c8f5fce470abd478f6107e5 - languageName: node - linkType: hard - -"@radix-ui/react-context@npm:1.0.0": +"@radix-ui/primitive@npm:1.0.0": version: 1.0.0 - resolution: "@radix-ui/react-context@npm:1.0.0" + resolution: "@radix-ui/primitive@npm:1.0.0" dependencies: "@babel/runtime": "npm:^7.13.10" - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: 3744c8f6291d1c0645dfb2497e232b2084f8c62075258370987592e3533710dc84b8ae983489ca354c0567eff3f311230f6c696bc4536ba0e431068b79196b00 + checksum: 4b0a4bdbf312df2317c3a3c728b0d2249242220a93eedaffecd4207bc0b8d3f28498c4b15f16c8f60b8292302d6d28ef73d751f63e77ef9bf6a318f52c6dc19b languageName: node linkType: hard -"@radix-ui/react-context@npm:1.0.1": +"@radix-ui/primitive@npm:1.0.1": version: 1.0.1 - resolution: "@radix-ui/react-context@npm:1.0.1" + resolution: "@radix-ui/primitive@npm:1.0.1" dependencies: "@babel/runtime": "npm:^7.13.10" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 3de5761b32cc70cd61715527f29d8c699c01ab28c195ced972ccbc7025763a373a68f18c9f948c7a7b922e469fd2df7fee5f7536e3f7bad44ffc06d959359333 + checksum: 912216455537db3ca77f3e7f70174fb2b454fbd4a37a0acb7cfadad9ab6131abdfb787472242574460a3c301edf45738340cc84f6717982710082840fde7d916 languageName: node linkType: hard -"@radix-ui/react-context@npm:1.0.1-rc.3": +"@radix-ui/primitive@npm:1.0.1-rc.3": version: 1.0.1-rc.3 - resolution: "@radix-ui/react-context@npm:1.0.1-rc.3" + resolution: "@radix-ui/primitive@npm:1.0.1-rc.3" dependencies: "@babel/runtime": "npm:^7.13.10" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 105c8df481827ad033c661172c788aa6bd6389c394f332431d751b34ce08456cc44ba25a8d90cd9b2562ab8767dd5053c6a3037619a8257f65a524babc6e6960 + checksum: 917ea77af7cc320ef1613b3f9cb76913e093168368d09aae83011f6712f099f618df42ddd4c40425916febb370a32355bfd226e1fc1778e44866043f7f9f849d languageName: node linkType: hard -"@radix-ui/react-context@npm:1.1.0": +"@radix-ui/primitive@npm:1.1.0": version: 1.1.0 - resolution: "@radix-ui/react-context@npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: c843980f568cc61b512708863ec84c42a02e0f88359b22ad1c0e290cea3e6d7618eccbd2cd37bd974fadaa7636cbed5bda27553722e61197eb53852eaa34f1bb - languageName: node - linkType: hard - -"@radix-ui/react-dialog@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-dialog@npm:1.0.0" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.0" - "@radix-ui/react-compose-refs": "npm:1.0.0" - "@radix-ui/react-context": "npm:1.0.0" - "@radix-ui/react-dismissable-layer": "npm:1.0.0" - "@radix-ui/react-focus-guards": "npm:1.0.0" - "@radix-ui/react-focus-scope": "npm:1.0.0" - "@radix-ui/react-id": "npm:1.0.0" - "@radix-ui/react-portal": "npm:1.0.0" - "@radix-ui/react-presence": "npm:1.0.0" - "@radix-ui/react-primitive": "npm:1.0.0" - "@radix-ui/react-slot": "npm:1.0.0" - "@radix-ui/react-use-controllable-state": "npm:1.0.0" - aria-hidden: "npm:^1.1.1" - react-remove-scroll: "npm:2.5.4" - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: af2afc8b88f6fc542d6e4d8594afcf038dff47baed76fccbc619e1ac99c7a6d0735ef736bfa1c89d64a56f0e0a70c01f8290ffc5c1e03dde7c643a09b6541b05 + resolution: "@radix-ui/primitive@npm:1.1.0" + checksum: 1dcc8b5401799416ff8bdb15c7189b4536c193220ad8fd348a48b88f804ee38cec7bd03e2b9641f7da24610e2f61f23a306911ce883af92c4e8c1abac634cb61 languageName: node linkType: hard -"@radix-ui/react-dialog@npm:^1.0.4-rc.9": - version: 1.0.4-rc.9 - resolution: "@radix-ui/react-dialog@npm:1.0.4-rc.9" +"@radix-ui/react-accordion@npm:^1.1.2": + version: 1.1.2 + resolution: "@radix-ui/react-accordion@npm:1.1.2" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.1-rc.3" - "@radix-ui/react-compose-refs": "npm:1.0.1-rc.3" - "@radix-ui/react-context": "npm:1.0.1-rc.3" - "@radix-ui/react-dismissable-layer": "npm:1.0.4-rc.8" - "@radix-ui/react-focus-guards": "npm:1.0.1-rc.3" - "@radix-ui/react-focus-scope": "npm:1.0.3-rc.8" - "@radix-ui/react-id": "npm:1.0.1-rc.3" - "@radix-ui/react-portal": "npm:1.0.3-rc.8" - "@radix-ui/react-presence": "npm:1.0.1-rc.3" - "@radix-ui/react-primitive": "npm:1.0.3-rc.8" - "@radix-ui/react-slot": "npm:1.0.2-rc.8" - "@radix-ui/react-use-controllable-state": "npm:1.0.1-rc.3" - aria-hidden: "npm:^1.1.1" - react-remove-scroll: "npm:2.5.5" + "@radix-ui/primitive": "npm:1.0.1" + "@radix-ui/react-collapsible": "npm:1.0.3" + "@radix-ui/react-collection": "npm:1.0.3" + "@radix-ui/react-compose-refs": "npm:1.0.1" + "@radix-ui/react-context": "npm:1.0.1" + "@radix-ui/react-direction": "npm:1.0.1" + "@radix-ui/react-id": "npm:1.0.1" + "@radix-ui/react-primitive": "npm:1.0.3" + "@radix-ui/react-use-controllable-state": "npm:1.0.1" peerDependencies: "@types/react": "*" "@types/react-dom": "*" @@ -3078,117 +1598,29 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: dafe7d3bfb9c63626dbd5be3860d4585c910fe89abcbfa14f30166e68019401aa83823470c784c18d44e5cdcff575632637e5a1431005a75c4cb997237e225ae - languageName: node - linkType: hard - -"@radix-ui/react-direction@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-direction@npm:1.0.0" - dependencies: - "@babel/runtime": "npm:^7.13.10" - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: 9e13eb248d37a7df8d8288dda32b4688d9341c056a31302686852e230e16ecc909843c842fe028d47de11b74948359281c04562afbe0161596749daefce67583 - languageName: node - linkType: hard - -"@radix-ui/react-direction@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/react-direction@npm:1.0.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: b1a45b4d1d5070ca3b5864b920f6c6210c962bdb519abb62b38b1baef9d06737dc3d8ecdb61860b7504a735235a539652f5977c7299ec021da84e6b0f64d988a - languageName: node - linkType: hard - -"@radix-ui/react-direction@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-direction@npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: eb07d8cc3ae2388b824e0a11ae0e3b71fb0c49972b506e249cec9f27a5b7ef4305ee668c98b674833c92e842163549a83beb0a197dec1ec65774bdeeb61f932c - languageName: node - linkType: hard - -"@radix-ui/react-dismissable-layer@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-dismissable-layer@npm:1.0.0" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.0" - "@radix-ui/react-compose-refs": "npm:1.0.0" - "@radix-ui/react-primitive": "npm:1.0.0" - "@radix-ui/react-use-callback-ref": "npm:1.0.0" - "@radix-ui/react-use-escape-keydown": "npm:1.0.0" - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: 4aec9216d85671ea1c22ac56f0bf98dde3ddc10d912bedc9bfdbc230057411c4567cdb014fc006495bcbffeffab904fbfa0622e1bbd8b30c9bb327e0304dea33 + checksum: 54fe3642306d62f68ac4d534c6bec1998d00d441663b16119fe267cb085e48761acf3c02b9466245d42b8ab419632a573d35d79d3a5d328906bde121dd1816db languageName: node linkType: hard -"@radix-ui/react-dismissable-layer@npm:1.0.3": - version: 1.0.3 - resolution: "@radix-ui/react-dismissable-layer@npm:1.0.3" +"@radix-ui/react-arrow@npm:1.0.2": + version: 1.0.2 + resolution: "@radix-ui/react-arrow@npm:1.0.2" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.0" - "@radix-ui/react-compose-refs": "npm:1.0.0" "@radix-ui/react-primitive": "npm:1.0.2" - "@radix-ui/react-use-callback-ref": "npm:1.0.0" - "@radix-ui/react-use-escape-keydown": "npm:1.0.2" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: ea73fbabb189ceaec63f8147a03bc68ffbe8a7481c5c6c8c040e1d5072d5a89e80e503f495d6d9ec30798d7a1a7f3dbccfb89a2f00d99f6eaeb54e8f4b238d1b + checksum: 0fcf02ae5e2141ca8983d6981a1590806146221d7ef0c693634b66f27aea6cb7f8491197aa629685725dce95afb80d0aed6f5038074af073ff9573b0f4410da3 languageName: node linkType: hard -"@radix-ui/react-dismissable-layer@npm:1.0.4": - version: 1.0.4 - resolution: "@radix-ui/react-dismissable-layer@npm:1.0.4" +"@radix-ui/react-arrow@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-arrow@npm:1.0.3" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.1" - "@radix-ui/react-compose-refs": "npm:1.0.1" "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-use-callback-ref": "npm:1.0.1" - "@radix-ui/react-use-escape-keydown": "npm:1.0.3" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: a7b9695092cd4109a7b4a4a66b7f634c42d4f39aa0893621a8ee5e8bc90f8ae27e741df66db726c341a60d2115e3f813520fee1f5cc4fb05d77914b4ade3819f - languageName: node - linkType: hard - -"@radix-ui/react-dismissable-layer@npm:1.0.4-rc.8": - version: 1.0.4-rc.8 - resolution: "@radix-ui/react-dismissable-layer@npm:1.0.4-rc.8" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.1-rc.3" - "@radix-ui/react-compose-refs": "npm:1.0.1-rc.3" - "@radix-ui/react-primitive": "npm:1.0.3-rc.8" - "@radix-ui/react-use-callback-ref": "npm:1.0.1-rc.3" - "@radix-ui/react-use-escape-keydown": "npm:1.0.3-rc.3" peerDependencies: "@types/react": "*" "@types/react-dom": "*" @@ -3199,115 +1631,127 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: d77bd786021f5c4422192c4547776b978fdea3f03e953181c60c2c68aebeae3d398f425f2121c094647d7cf5622cdf8a08b2a9727b01dac6522f863cec739f4a + checksum: c931f6d7e0bac50fd1654a0303a303aff74a68a13a33a851a43a7c88677b53a92ca6557920b9105144a3002f899ce888437d20ddd7803a5c716edac99587626d languageName: node linkType: hard -"@radix-ui/react-dropdown-menu@npm:^2.0.5": - version: 2.0.5 - resolution: "@radix-ui/react-dropdown-menu@npm:2.0.5" +"@radix-ui/react-arrow@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-arrow@npm:1.1.0" dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.1" - "@radix-ui/react-compose-refs": "npm:1.0.1" - "@radix-ui/react-context": "npm:1.0.1" - "@radix-ui/react-id": "npm:1.0.1" - "@radix-ui/react-menu": "npm:2.0.5" - "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-use-controllable-state": "npm:1.0.1" + "@radix-ui/react-primitive": "npm:2.0.0" peerDependencies: "@types/react": "*" "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + 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 - checksum: fdc163b07894101a88bd2b0a6a425838b5e4164fb0dcf306e215120ebe034c7f2c114f7d4c2b20eb48d90402fb1caefb61a22b2c2084b40d63fa551429fe6e86 + checksum: cbe059dfa5a9c1677478d363bb5fd75b0c7a08221d0ac7f8e7b9aec9dbae9754f6a3518218cf63e4ed53df6c36d193c8d2618d03433a37aa0cb7ee77a60a591f languageName: node linkType: hard -"@radix-ui/react-focus-guards@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-focus-guards@npm:1.0.0" +"@radix-ui/react-checkbox@npm:^1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-checkbox@npm:1.0.3" dependencies: "@babel/runtime": "npm:^7.13.10" + "@radix-ui/primitive": "npm:1.0.0" + "@radix-ui/react-compose-refs": "npm:1.0.0" + "@radix-ui/react-context": "npm:1.0.0" + "@radix-ui/react-presence": "npm:1.0.0" + "@radix-ui/react-primitive": "npm:1.0.2" + "@radix-ui/react-use-controllable-state": "npm:1.0.0" + "@radix-ui/react-use-previous": "npm:1.0.0" + "@radix-ui/react-use-size": "npm:1.0.0" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 - checksum: 3b6578b31ad042d06e00fc511cd465fb019cfc2726edcd9b56a6d47f22049c1c6f1aec203a099c9f1e1bb5870c47cfaf9a969a5448159b90346b47b8c24ceef7 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: 99a8a41fd4af5b5330563edccb3977c57b57101e7f7cc99ae1c63a3db8628600dfb6c7fffcbeed03a886985e097bf07418b49ad46162c0cfa7ee8747ff1d41f1 languageName: node linkType: hard -"@radix-ui/react-focus-guards@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/react-focus-guards@npm:1.0.1" +"@radix-ui/react-collapsible@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-collapsible@npm:1.0.3" dependencies: "@babel/runtime": "npm:^7.13.10" + "@radix-ui/primitive": "npm:1.0.1" + "@radix-ui/react-compose-refs": "npm:1.0.1" + "@radix-ui/react-context": "npm:1.0.1" + "@radix-ui/react-id": "npm:1.0.1" + "@radix-ui/react-presence": "npm:1.0.1" + "@radix-ui/react-primitive": "npm:1.0.3" + "@radix-ui/react-use-controllable-state": "npm:1.0.1" + "@radix-ui/react-use-layout-effect": "npm:1.0.1" peerDependencies: "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: "@types/react": optional: true - checksum: d5fd4e5aa9d9a87c8ad490b3b4992d6f1d9eddf18e56df2a2bcf8744c4332b275d73377fd193df3e6ba0ad9608dc497709beca5c64de2b834d5f5350b3c9a272 + "@types/react-dom": + optional: true + checksum: 7bc3e601e3fa84991bdf46ea1bdb725760942f8facadf42f05808abc7a1399c6ab90a00c70699367026afbd8afba0254ff9634f9d1e05b24ae452d9e0524d328 languageName: node linkType: hard -"@radix-ui/react-focus-guards@npm:1.0.1-rc.3": - version: 1.0.1-rc.3 - resolution: "@radix-ui/react-focus-guards@npm:1.0.1-rc.3" +"@radix-ui/react-collapsible@npm:^1.1.1": + version: 1.1.1 + resolution: "@radix-ui/react-collapsible@npm:1.1.1" dependencies: - "@babel/runtime": "npm:^7.13.10" + "@radix-ui/primitive": "npm:1.1.0" + "@radix-ui/react-compose-refs": "npm:1.1.0" + "@radix-ui/react-context": "npm:1.1.1" + "@radix-ui/react-id": "npm:1.1.0" + "@radix-ui/react-presence": "npm:1.1.1" + "@radix-ui/react-primitive": "npm:2.0.0" + "@radix-ui/react-use-controllable-state": "npm:1.1.0" + "@radix-ui/react-use-layout-effect": "npm:1.1.0" peerDependencies: "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 + "@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 - checksum: fb35081a0cc12cdaffd2a987564d02c5cefd9ef3ff966bbed014ffee5b56970bd1f22535841c5395313049eb28d81bcbcb9eaea9b5c27876f2c9fd5a75f77f72 - languageName: node - linkType: hard - -"@radix-ui/react-focus-scope@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-focus-scope@npm:1.0.0" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-compose-refs": "npm:1.0.0" - "@radix-ui/react-primitive": "npm:1.0.0" - "@radix-ui/react-use-callback-ref": "npm:1.0.0" - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: 0c4cad9c3db4cb7882435fac05ee7ae3b3e0244410d9b8d264370a1edf56b0c7285df6dffe556ba7939f4a3d887d0d5044acee8cb2f04818b91bcbe9b912c2a7 + "@types/react-dom": + optional: true + checksum: e3a510c8f3a31709add35c31e3e108a2bc4db2df06e9e50cb5f25144b1cf9596b8118ad2618f851fa7c1498e057938f641a842a6770b5b7b6cd068cd2b4914f1 languageName: node linkType: hard -"@radix-ui/react-focus-scope@npm:1.0.2": +"@radix-ui/react-collection@npm:1.0.2": version: 1.0.2 - resolution: "@radix-ui/react-focus-scope@npm:1.0.2" + resolution: "@radix-ui/react-collection@npm:1.0.2" dependencies: "@babel/runtime": "npm:^7.13.10" "@radix-ui/react-compose-refs": "npm:1.0.0" + "@radix-ui/react-context": "npm:1.0.0" "@radix-ui/react-primitive": "npm:1.0.2" - "@radix-ui/react-use-callback-ref": "npm:1.0.0" + "@radix-ui/react-slot": "npm:1.0.1" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: a7b8e9ddd99ff186719b3d6882d7273dc9f9073e777dbf12777728629d8a91a3c548e86834117d0d261a5219f2276ac6141c914b18cc142524c31c35bd62819b + checksum: 205d7c2af98094244f5d47ea8bbb41bb0f138b39875296a84d20733a0bf54a5a2cefa2e54024309d3700b322bec0d3dec3555b823edf9bec24deb6b6ae189b49 languageName: node linkType: hard -"@radix-ui/react-focus-scope@npm:1.0.3": +"@radix-ui/react-collection@npm:1.0.3": version: 1.0.3 - resolution: "@radix-ui/react-focus-scope@npm:1.0.3" + resolution: "@radix-ui/react-collection@npm:1.0.3" dependencies: "@babel/runtime": "npm:^7.13.10" "@radix-ui/react-compose-refs": "npm:1.0.1" + "@radix-ui/react-context": "npm:1.0.1" "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-use-callback-ref": "npm:1.0.1" + "@radix-ui/react-slot": "npm:1.0.2" peerDependencies: "@types/react": "*" "@types/react-dom": "*" @@ -3318,265 +1762,198 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: bfff46919666c122f5b812ee427494ae8408c0eebee30337bd2ce0eedf539f0feaa242f790304ef9df15425b837010ffc6061ce467bedd2c5fd9373bee2b95da + checksum: cefa56383d7451ca79e4bd5a29aaeef6c205a04297213efd149aaead82fc8cde4fb8298e20e6b3613e5696e43f814fb4489805428f6604834fb31f73c6725fa8 languageName: node linkType: hard -"@radix-ui/react-focus-scope@npm:1.0.3-rc.8": - version: 1.0.3-rc.8 - resolution: "@radix-ui/react-focus-scope@npm:1.0.3-rc.8" +"@radix-ui/react-collection@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-collection@npm:1.1.0" dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-compose-refs": "npm:1.0.1-rc.3" - "@radix-ui/react-primitive": "npm:1.0.3-rc.8" - "@radix-ui/react-use-callback-ref": "npm:1.0.1-rc.3" + "@radix-ui/react-compose-refs": "npm:1.1.0" + "@radix-ui/react-context": "npm:1.1.0" + "@radix-ui/react-primitive": "npm:2.0.0" + "@radix-ui/react-slot": "npm:1.1.0" peerDependencies: "@types/react": "*" "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + 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 - checksum: 4d0c2f8b48e70c0e7a4916f2395c5b0af50e0cd88974ca26085c8fc7edd6725c2ba214d793f298a0bde0e90128bd9e3da226ad34b3bf162673b261f5a759cce0 + checksum: fecb9f0871c827070a8794b39c7379fdc7d0855c4b05804f0b395eef39c37b2c2b6779865d6cb35d3bc74b6b380107bd8b3754d1730a34ea88913e6cd0eb84d4 languageName: node linkType: hard -"@radix-ui/react-id@npm:1.0.0": +"@radix-ui/react-compose-refs@npm:1.0.0": version: 1.0.0 - resolution: "@radix-ui/react-id@npm:1.0.0" + resolution: "@radix-ui/react-compose-refs@npm:1.0.0" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-use-layout-effect": "npm:1.0.0" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 - checksum: 56e9817abdc209e0d5169ba2e6d3de477101650b02c04f7f1477800cfd3a9e8bc415bcd14760557a17de8cfcae571342e4f6a5ec182b05d613ae7d77309a861c + checksum: 449148920c1df82ffcdd78a68d3485036d198b41b9fcfc407b008df5dfefc8f1a60391f7b53e2bc69e0fdbbba846b0b79fede5f7ed35bca82af4eff6c56b8854 languageName: node linkType: hard -"@radix-ui/react-id@npm:1.0.1": +"@radix-ui/react-compose-refs@npm:1.0.1": version: 1.0.1 - resolution: "@radix-ui/react-id@npm:1.0.1" + resolution: "@radix-ui/react-compose-refs@npm:1.0.1" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-use-layout-effect": "npm:1.0.1" peerDependencies: "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: "@types/react": optional: true - checksum: e2859ca58bea171c956098ace7ecf615cf9432f58a118b779a14720746b3adcf0351c36c75de131548672d3cd290ca238198acbd33b88dc4706f98312e9317ad + checksum: be06f8dab35b5a1bffa7a5982fb26218ddade1acb751288333e3b89d7b4a7dfb5a6371be83876dac0ec2ebe0866d295e8618b778608e1965342986ea448040ec languageName: node linkType: hard -"@radix-ui/react-id@npm:1.0.1-rc.3": +"@radix-ui/react-compose-refs@npm:1.0.1-rc.3": version: 1.0.1-rc.3 - resolution: "@radix-ui/react-id@npm:1.0.1-rc.3" + resolution: "@radix-ui/react-compose-refs@npm:1.0.1-rc.3" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-use-layout-effect": "npm:1.0.1-rc.3" peerDependencies: "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 178f6fd90acecc677549bfc1fec0b919bb7c70be8c78f943c3413a61994c852c3e3e685ebacb6486882df9c23436f22fe31d8e8e62659444fc792702b812324f + checksum: 011d8f33937137df1a1a60f468bbf7aee4a5f229b557dcb10c8420db3a6395cebdbbec7e12306c79270f6f11dd932a2743e03ca6149f46da7f8001275ca1b514 languageName: node linkType: hard -"@radix-ui/react-id@npm:1.1.0": +"@radix-ui/react-compose-refs@npm:1.1.0": version: 1.1.0 - resolution: "@radix-ui/react-id@npm:1.1.0" - dependencies: - "@radix-ui/react-use-layout-effect": "npm:1.1.0" + resolution: "@radix-ui/react-compose-refs@npm:1.1.0" peerDependencies: "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: "@types/react": optional: true - checksum: acf13e29e51ee96336837fc0cfecc306328b20b0e0070f6f0f7aa7a621ded4a1ee5537cfad58456f64bae76caa7f8769231e88dc7dc106197347ee433c275a79 + checksum: 7e18706084397d9458ca3473d8565b10691da06f6499a78edbcc4bd72cde08f62e91120658d17d58c19fc39d6b1dffe0133cc4535c8f5fce470abd478f6107e5 languageName: node linkType: hard -"@radix-ui/react-menu@npm:2.0.5": - version: 2.0.5 - resolution: "@radix-ui/react-menu@npm:2.0.5" +"@radix-ui/react-context@npm:1.0.0": + version: 1.0.0 + resolution: "@radix-ui/react-context@npm:1.0.0" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.1" - "@radix-ui/react-collection": "npm:1.0.3" - "@radix-ui/react-compose-refs": "npm:1.0.1" - "@radix-ui/react-context": "npm:1.0.1" - "@radix-ui/react-direction": "npm:1.0.1" - "@radix-ui/react-dismissable-layer": "npm:1.0.4" - "@radix-ui/react-focus-guards": "npm:1.0.1" - "@radix-ui/react-focus-scope": "npm:1.0.3" - "@radix-ui/react-id": "npm:1.0.1" - "@radix-ui/react-popper": "npm:1.1.2" - "@radix-ui/react-portal": "npm:1.0.3" - "@radix-ui/react-presence": "npm:1.0.1" - "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-roving-focus": "npm:1.0.4" - "@radix-ui/react-slot": "npm:1.0.2" - "@radix-ui/react-use-callback-ref": "npm:1.0.1" - aria-hidden: "npm:^1.1.1" - react-remove-scroll: "npm:2.5.5" peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 9b21a5fb159dc106ea7b45c64cf08487fb4cc1bba2e8696d70320f3e4173f2a0098eeeef16bc846391f569fd2abb5fe7b2ef40de929b9625e18a27f702743705 + checksum: 3744c8f6291d1c0645dfb2497e232b2084f8c62075258370987592e3533710dc84b8ae983489ca354c0567eff3f311230f6c696bc4536ba0e431068b79196b00 languageName: node linkType: hard -"@radix-ui/react-popover@npm:^1.0.6": - version: 1.0.6 - resolution: "@radix-ui/react-popover@npm:1.0.6" +"@radix-ui/react-context@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-context@npm:1.0.1" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.1" - "@radix-ui/react-compose-refs": "npm:1.0.1" - "@radix-ui/react-context": "npm:1.0.1" - "@radix-ui/react-dismissable-layer": "npm:1.0.4" - "@radix-ui/react-focus-guards": "npm:1.0.1" - "@radix-ui/react-focus-scope": "npm:1.0.3" - "@radix-ui/react-id": "npm:1.0.1" - "@radix-ui/react-popper": "npm:1.1.2" - "@radix-ui/react-portal": "npm:1.0.3" - "@radix-ui/react-presence": "npm:1.0.1" - "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-slot": "npm:1.0.2" - "@radix-ui/react-use-controllable-state": "npm:1.0.1" - aria-hidden: "npm:^1.1.1" - react-remove-scroll: "npm:2.5.5" peerDependencies: "@types/react": "*" - "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: "@types/react": optional: true - "@types/react-dom": - optional: true - checksum: 1b9fd21f6b73a74af88c5cd151f7de2a8dcc46a4d7ac7bee1104d5a45869f170bcb2490c3205b18597457b9153e71016bc1f71077938317e07eca5cf45fca7ae - languageName: node - linkType: hard - -"@radix-ui/react-popper@npm:1.1.1": - version: 1.1.1 - resolution: "@radix-ui/react-popper@npm:1.1.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@floating-ui/react-dom": "npm:0.7.2" - "@radix-ui/react-arrow": "npm:1.0.2" - "@radix-ui/react-compose-refs": "npm:1.0.0" - "@radix-ui/react-context": "npm:1.0.0" - "@radix-ui/react-primitive": "npm:1.0.2" - "@radix-ui/react-use-callback-ref": "npm:1.0.0" - "@radix-ui/react-use-layout-effect": "npm:1.0.0" - "@radix-ui/react-use-rect": "npm:1.0.0" - "@radix-ui/react-use-size": "npm:1.0.0" - "@radix-ui/rect": "npm:1.0.0" - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: fb654fed958bc53e5a70cc5015c25cb3ef03a81727db9b9fc6c9faa69d64ad8c6c76b5d35b7e6466888ebc7d9a617a4a7a155fd24d1a2e1c07255ffa02a962ba + checksum: 3de5761b32cc70cd61715527f29d8c699c01ab28c195ced972ccbc7025763a373a68f18c9f948c7a7b922e469fd2df7fee5f7536e3f7bad44ffc06d959359333 languageName: node linkType: hard -"@radix-ui/react-popper@npm:1.1.2": - version: 1.1.2 - resolution: "@radix-ui/react-popper@npm:1.1.2" +"@radix-ui/react-context@npm:1.0.1-rc.3": + version: 1.0.1-rc.3 + resolution: "@radix-ui/react-context@npm:1.0.1-rc.3" dependencies: "@babel/runtime": "npm:^7.13.10" - "@floating-ui/react-dom": "npm:^2.0.0" - "@radix-ui/react-arrow": "npm:1.0.3" - "@radix-ui/react-compose-refs": "npm:1.0.1" - "@radix-ui/react-context": "npm:1.0.1" - "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-use-callback-ref": "npm:1.0.1" - "@radix-ui/react-use-layout-effect": "npm:1.0.1" - "@radix-ui/react-use-rect": "npm:1.0.1" - "@radix-ui/react-use-size": "npm:1.0.1" - "@radix-ui/rect": "npm:1.0.1" peerDependencies: "@types/react": "*" - "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: "@types/react": optional: true - "@types/react-dom": - optional: true - checksum: 4bd069b79f7046af2c0967b8e43f727cd09834cbd6df1e3d5a943c4f83428ff8b646882737fdf7593c22e261a1d13768a5c020138d79503862ae2e1729081bba + checksum: 105c8df481827ad033c661172c788aa6bd6389c394f332431d751b34ce08456cc44ba25a8d90cd9b2562ab8767dd5053c6a3037619a8257f65a524babc6e6960 languageName: node linkType: hard -"@radix-ui/react-portal@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-portal@npm:1.0.0" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-primitive": "npm:1.0.0" +"@radix-ui/react-context@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-context@npm:1.1.0" peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: c7330e05d99cbb52bfc16c60c996edf2ace0d80b78eb3828dbce45fe53558a5474dfc347d152a956259740d37d92ec63a88638a22ab808c5f80681f1ad41a810 - languageName: node - linkType: hard - -"@radix-ui/react-portal@npm:1.0.2": - version: 1.0.2 - resolution: "@radix-ui/react-portal@npm:1.0.2" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-primitive": "npm:1.0.2" + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: c843980f568cc61b512708863ec84c42a02e0f88359b22ad1c0e290cea3e6d7618eccbd2cd37bd974fadaa7636cbed5bda27553722e61197eb53852eaa34f1bb + languageName: node + linkType: hard + +"@radix-ui/react-context@npm:1.1.1": + version: 1.1.1 + resolution: "@radix-ui/react-context@npm:1.1.1" peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: 2397b9a3fe5e1f7b4982e0995fb088f77221754e42ebf5aa52374794ed7d35048ec530cc486927e65b1975fdb5f5caa1d8d2f87e8aa15004dfa011511fe8c606 + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: fc4ace9d79d7954c715ade765e06c95d7e1b12a63a536bcbe842fb904f03f88fc5bd6e38d44bd23243d37a270b4c44380fedddaeeae2d274f0b898a20665aba2 languageName: node linkType: hard -"@radix-ui/react-portal@npm:1.0.3": - version: 1.0.3 - resolution: "@radix-ui/react-portal@npm:1.0.3" +"@radix-ui/react-dialog@npm:1.0.0": + version: 1.0.0 + resolution: "@radix-ui/react-dialog@npm:1.0.0" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-primitive": "npm:1.0.3" + "@radix-ui/primitive": "npm:1.0.0" + "@radix-ui/react-compose-refs": "npm:1.0.0" + "@radix-ui/react-context": "npm:1.0.0" + "@radix-ui/react-dismissable-layer": "npm:1.0.0" + "@radix-ui/react-focus-guards": "npm:1.0.0" + "@radix-ui/react-focus-scope": "npm:1.0.0" + "@radix-ui/react-id": "npm:1.0.0" + "@radix-ui/react-portal": "npm:1.0.0" + "@radix-ui/react-presence": "npm:1.0.0" + "@radix-ui/react-primitive": "npm:1.0.0" + "@radix-ui/react-slot": "npm:1.0.0" + "@radix-ui/react-use-controllable-state": "npm:1.0.0" + aria-hidden: "npm:^1.1.1" + react-remove-scroll: "npm:2.5.4" peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: baf295bbbf09ead37b64ee1dc025a6a540960f5e60552766d78f6065504c67d4bcf49fad5e2073617d9a3011daafad625aa3bd1da7a886c704833b22a49e888f + checksum: af2afc8b88f6fc542d6e4d8594afcf038dff47baed76fccbc619e1ac99c7a6d0735ef736bfa1c89d64a56f0e0a70c01f8290ffc5c1e03dde7c643a09b6541b05 languageName: node linkType: hard -"@radix-ui/react-portal@npm:1.0.3-rc.8": - version: 1.0.3-rc.8 - resolution: "@radix-ui/react-portal@npm:1.0.3-rc.8" +"@radix-ui/react-dialog@npm:^1.0.4-rc.9": + version: 1.0.4-rc.9 + resolution: "@radix-ui/react-dialog@npm:1.0.4-rc.9" dependencies: "@babel/runtime": "npm:^7.13.10" + "@radix-ui/primitive": "npm:1.0.1-rc.3" + "@radix-ui/react-compose-refs": "npm:1.0.1-rc.3" + "@radix-ui/react-context": "npm:1.0.1-rc.3" + "@radix-ui/react-dismissable-layer": "npm:1.0.4-rc.8" + "@radix-ui/react-focus-guards": "npm:1.0.1-rc.3" + "@radix-ui/react-focus-scope": "npm:1.0.3-rc.8" + "@radix-ui/react-id": "npm:1.0.1-rc.3" + "@radix-ui/react-portal": "npm:1.0.3-rc.8" + "@radix-ui/react-presence": "npm:1.0.1-rc.3" "@radix-ui/react-primitive": "npm:1.0.3-rc.8" + "@radix-ui/react-slot": "npm:1.0.2-rc.8" + "@radix-ui/react-use-controllable-state": "npm:1.0.1-rc.3" + aria-hidden: "npm:^1.1.1" + react-remove-scroll: "npm:2.5.5" peerDependencies: "@types/react": "*" "@types/react-dom": "*" @@ -3587,16 +1964,28 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: fa162e9891e61a365e350d1b06b7f462209e8c35e72ea10fb11bee9f11b0594877ffba85c2b7a4011ec76ad6e045de0c2274e09f02161589c1ff1e9fe02ffac1 + checksum: dafe7d3bfb9c63626dbd5be3860d4585c910fe89abcbfa14f30166e68019401aa83823470c784c18d44e5cdcff575632637e5a1431005a75c4cb997237e225ae languageName: node linkType: hard -"@radix-ui/react-portal@npm:^1.1.1": - version: 1.1.1 - resolution: "@radix-ui/react-portal@npm:1.1.1" +"@radix-ui/react-dialog@npm:^1.1.2": + version: 1.1.2 + resolution: "@radix-ui/react-dialog@npm:1.1.2" dependencies: + "@radix-ui/primitive": "npm:1.1.0" + "@radix-ui/react-compose-refs": "npm:1.1.0" + "@radix-ui/react-context": "npm:1.1.1" + "@radix-ui/react-dismissable-layer": "npm:1.1.1" + "@radix-ui/react-focus-guards": "npm:1.1.1" + "@radix-ui/react-focus-scope": "npm:1.1.0" + "@radix-ui/react-id": "npm:1.1.0" + "@radix-ui/react-portal": "npm:1.1.2" + "@radix-ui/react-presence": "npm:1.1.1" "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-layout-effect": "npm:1.1.0" + "@radix-ui/react-slot": "npm:1.1.0" + "@radix-ui/react-use-controllable-state": "npm:1.1.0" + aria-hidden: "npm:^1.1.1" + react-remove-scroll: "npm:2.6.0" peerDependencies: "@types/react": "*" "@types/react-dom": "*" @@ -3607,98 +1996,93 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: 7e7130fcb0d99197322cd97987e1d7279b6c264fb6be3d883cbfcd49267740d83ca17b431e0d98848afd6067a13ee823ca396a8b63ae68f18a728cf70398c830 + checksum: 61997c23605ff604ef1673480eea0b63cbe2e102d24e64b71431afa408bfdda26f879193c09254304eb17a8d623085a2e6c96b5c944658c02bd935f8cf0f9546 languageName: node linkType: hard -"@radix-ui/react-presence@npm:1.0.0": +"@radix-ui/react-direction@npm:1.0.0": version: 1.0.0 - resolution: "@radix-ui/react-presence@npm:1.0.0" + resolution: "@radix-ui/react-direction@npm:1.0.0" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-compose-refs": "npm:1.0.0" - "@radix-ui/react-use-layout-effect": "npm:1.0.0" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: 2d696781e58f7acc45df2965b4756d5072a80704677cb6905a927754bd2076c87cd137820d3e58d8c2118a9b12aaa82fee79c6fef49b80012a12983002101fc5 + checksum: 9e13eb248d37a7df8d8288dda32b4688d9341c056a31302686852e230e16ecc909843c842fe028d47de11b74948359281c04562afbe0161596749daefce67583 languageName: node linkType: hard -"@radix-ui/react-presence@npm:1.0.1": +"@radix-ui/react-direction@npm:1.0.1": version: 1.0.1 - resolution: "@radix-ui/react-presence@npm:1.0.1" + resolution: "@radix-ui/react-direction@npm:1.0.1" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-compose-refs": "npm:1.0.1" - "@radix-ui/react-use-layout-effect": "npm:1.0.1" peerDependencies: "@types/react": "*" - "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: "@types/react": optional: true - "@types/react-dom": - optional: true - checksum: 90780618b265fe794a8f1ddaa5bfd3c71a1127fa79330a14d32722e6265b44452a9dd36efe4e769129d33e57f979f6b8713e2cbf2e2755326aa3b0f337185b6e + checksum: b1a45b4d1d5070ca3b5864b920f6c6210c962bdb519abb62b38b1baef9d06737dc3d8ecdb61860b7504a735235a539652f5977c7299ec021da84e6b0f64d988a languageName: node linkType: hard -"@radix-ui/react-presence@npm:1.0.1-rc.3": - version: 1.0.1-rc.3 - resolution: "@radix-ui/react-presence@npm:1.0.1-rc.3" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-compose-refs": "npm:1.0.1-rc.3" - "@radix-ui/react-use-layout-effect": "npm:1.0.1-rc.3" +"@radix-ui/react-direction@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-direction@npm:1.1.0" peerDependencies: "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: "@types/react": optional: true - "@types/react-dom": - optional: true - checksum: 3c0511fb19ee816825d29ff2f9a73da2a764c56e657ee48be7d82ad2658cdc38ea4ee85d1fdd5fa05790076aa2b3f545d1ba3ce9854dd51bbf6255652c5a3cb4 + checksum: eb07d8cc3ae2388b824e0a11ae0e3b71fb0c49972b506e249cec9f27a5b7ef4305ee668c98b674833c92e842163549a83beb0a197dec1ec65774bdeeb61f932c languageName: node linkType: hard -"@radix-ui/react-primitive@npm:1.0.0": +"@radix-ui/react-dismissable-layer@npm:1.0.0": version: 1.0.0 - resolution: "@radix-ui/react-primitive@npm:1.0.0" + resolution: "@radix-ui/react-dismissable-layer@npm:1.0.0" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-slot": "npm:1.0.0" + "@radix-ui/primitive": "npm:1.0.0" + "@radix-ui/react-compose-refs": "npm:1.0.0" + "@radix-ui/react-primitive": "npm:1.0.0" + "@radix-ui/react-use-callback-ref": "npm:1.0.0" + "@radix-ui/react-use-escape-keydown": "npm:1.0.0" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: a68b3afe6eb39e1c73d6cc162283ce071b2a5793e5c417547a0b43281654346be7474f51c7055b5d2636667efbab863eb76f785e8484e63c670b0a9d863684be + checksum: 4aec9216d85671ea1c22ac56f0bf98dde3ddc10d912bedc9bfdbc230057411c4567cdb014fc006495bcbffeffab904fbfa0622e1bbd8b30c9bb327e0304dea33 languageName: node linkType: hard -"@radix-ui/react-primitive@npm:1.0.2": - version: 1.0.2 - resolution: "@radix-ui/react-primitive@npm:1.0.2" +"@radix-ui/react-dismissable-layer@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-dismissable-layer@npm:1.0.3" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-slot": "npm:1.0.1" + "@radix-ui/primitive": "npm:1.0.0" + "@radix-ui/react-compose-refs": "npm:1.0.0" + "@radix-ui/react-primitive": "npm:1.0.2" + "@radix-ui/react-use-callback-ref": "npm:1.0.0" + "@radix-ui/react-use-escape-keydown": "npm:1.0.2" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: bc9dc28568a9d4e0343363e62428fc13685667e470a663a69413a23145264f7a114de9d45c1ce33e6ccdeb7ae5bbfdbc198ee4b2505cd71da8f8d470c4f88d68 + checksum: ea73fbabb189ceaec63f8147a03bc68ffbe8a7481c5c6c8c040e1d5072d5a89e80e503f495d6d9ec30798d7a1a7f3dbccfb89a2f00d99f6eaeb54e8f4b238d1b languageName: node linkType: hard -"@radix-ui/react-primitive@npm:1.0.3": - version: 1.0.3 - resolution: "@radix-ui/react-primitive@npm:1.0.3" +"@radix-ui/react-dismissable-layer@npm:1.0.4": + version: 1.0.4 + resolution: "@radix-ui/react-dismissable-layer@npm:1.0.4" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-slot": "npm:1.0.2" + "@radix-ui/primitive": "npm:1.0.1" + "@radix-ui/react-compose-refs": "npm:1.0.1" + "@radix-ui/react-primitive": "npm:1.0.3" + "@radix-ui/react-use-callback-ref": "npm:1.0.1" + "@radix-ui/react-use-escape-keydown": "npm:1.0.3" peerDependencies: "@types/react": "*" "@types/react-dom": "*" @@ -3709,16 +2093,20 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: 67a66ff8898a5e7739eda228ab6f5ce808858da1dce967014138d87e72b6bbfc93dc1467c706d98d1a2b93bf0b6e09233d1a24d31c78227b078444c1a69c42be + checksum: a7b9695092cd4109a7b4a4a66b7f634c42d4f39aa0893621a8ee5e8bc90f8ae27e741df66db726c341a60d2115e3f813520fee1f5cc4fb05d77914b4ade3819f languageName: node linkType: hard -"@radix-ui/react-primitive@npm:1.0.3-rc.8": - version: 1.0.3-rc.8 - resolution: "@radix-ui/react-primitive@npm:1.0.3-rc.8" +"@radix-ui/react-dismissable-layer@npm:1.0.4-rc.8": + version: 1.0.4-rc.8 + resolution: "@radix-ui/react-dismissable-layer@npm:1.0.4-rc.8" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-slot": "npm:1.0.2-rc.8" + "@radix-ui/primitive": "npm:1.0.1-rc.3" + "@radix-ui/react-compose-refs": "npm:1.0.1-rc.3" + "@radix-ui/react-primitive": "npm:1.0.3-rc.8" + "@radix-ui/react-use-callback-ref": "npm:1.0.1-rc.3" + "@radix-ui/react-use-escape-keydown": "npm:1.0.3-rc.3" peerDependencies: "@types/react": "*" "@types/react-dom": "*" @@ -3729,15 +2117,19 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: 442598ac2d187278668a904be0d52afa29ca03b9ec96c6712dbec838aec068a8ec5c777dd765b8f2798acc42670dc92b3885b3b283632b06e3923375045342cc + checksum: d77bd786021f5c4422192c4547776b978fdea3f03e953181c60c2c68aebeae3d398f425f2121c094647d7cf5622cdf8a08b2a9727b01dac6522f863cec739f4a languageName: node linkType: hard -"@radix-ui/react-primitive@npm:2.0.0": - version: 2.0.0 - resolution: "@radix-ui/react-primitive@npm:2.0.0" +"@radix-ui/react-dismissable-layer@npm:1.1.1": + version: 1.1.1 + resolution: "@radix-ui/react-dismissable-layer@npm:1.1.1" dependencies: - "@radix-ui/react-slot": "npm:1.1.0" + "@radix-ui/primitive": "npm:1.1.0" + "@radix-ui/react-compose-refs": "npm:1.1.0" + "@radix-ui/react-primitive": "npm:2.0.0" + "@radix-ui/react-use-callback-ref": "npm:1.1.0" + "@radix-ui/react-use-escape-keydown": "npm:1.1.0" peerDependencies: "@types/react": "*" "@types/react-dom": "*" @@ -3748,44 +2140,21 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: 00cb6ca499252ca848c299212ba6976171cea7608b10b3f9a9639d6732dea2df1197ba0d97c001a4fdb29313c3e7fc2a490f6245dd3579617a0ffd85ae964fdd - languageName: node - linkType: hard - -"@radix-ui/react-roving-focus@npm:1.0.3": - version: 1.0.3 - resolution: "@radix-ui/react-roving-focus@npm:1.0.3" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.0" - "@radix-ui/react-collection": "npm:1.0.2" - "@radix-ui/react-compose-refs": "npm:1.0.0" - "@radix-ui/react-context": "npm:1.0.0" - "@radix-ui/react-direction": "npm:1.0.0" - "@radix-ui/react-id": "npm:1.0.0" - "@radix-ui/react-primitive": "npm:1.0.2" - "@radix-ui/react-use-callback-ref": "npm:1.0.0" - "@radix-ui/react-use-controllable-state": "npm:1.0.0" - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: 0e951c9afbbc6155f90e2130b6b2a2d8be9f6aadf7b7b58407c7ade5cca4a71f8e64598564435e26c8a8853525c9cac906814263fd57b530cada6415f1272f03 + checksum: 637f8d55437bd2269d5aa9fa48e869eade31082cd950b5efcc5f0d9ed016b46feb7fcfcc115ba9972dba68c4686b57873d84aca67ece76ab77463e7de995f6da languageName: node linkType: hard -"@radix-ui/react-roving-focus@npm:1.0.4": - version: 1.0.4 - resolution: "@radix-ui/react-roving-focus@npm:1.0.4" +"@radix-ui/react-dropdown-menu@npm:^2.0.5": + version: 2.0.5 + resolution: "@radix-ui/react-dropdown-menu@npm:2.0.5" dependencies: "@babel/runtime": "npm:^7.13.10" "@radix-ui/primitive": "npm:1.0.1" - "@radix-ui/react-collection": "npm:1.0.3" "@radix-ui/react-compose-refs": "npm:1.0.1" "@radix-ui/react-context": "npm:1.0.1" - "@radix-ui/react-direction": "npm:1.0.1" "@radix-ui/react-id": "npm:1.0.1" + "@radix-ui/react-menu": "npm:2.0.5" "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-use-callback-ref": "npm:1.0.1" "@radix-ui/react-use-controllable-state": "npm:1.0.1" peerDependencies: "@types/react": "*" @@ -3797,96 +2166,102 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: 61e3ddfd1647e64fba855434ff41e8e7ba707244fe8841f78c450fbdce525383b64259279475615d030dbf1625cbffd8eeebee72d91bf6978794f5dbcf887fc0 + checksum: fdc163b07894101a88bd2b0a6a425838b5e4164fb0dcf306e215120ebe034c7f2c114f7d4c2b20eb48d90402fb1caefb61a22b2c2084b40d63fa551429fe6e86 languageName: node linkType: hard -"@radix-ui/react-roving-focus@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-roving-focus@npm:1.1.0" +"@radix-ui/react-focus-guards@npm:1.0.0": + version: 1.0.0 + resolution: "@radix-ui/react-focus-guards@npm:1.0.0" dependencies: - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-collection": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-direction": "npm:1.1.0" - "@radix-ui/react-id": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-callback-ref": "npm:1.1.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" + "@babel/runtime": "npm:^7.13.10" + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + checksum: 3b6578b31ad042d06e00fc511cd465fb019cfc2726edcd9b56a6d47f22049c1c6f1aec203a099c9f1e1bb5870c47cfaf9a969a5448159b90346b47b8c24ceef7 + languageName: node + linkType: hard + +"@radix-ui/react-focus-guards@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-focus-guards@npm:1.0.1" + dependencies: + "@babel/runtime": "npm:^7.13.10" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: d5fd4e5aa9d9a87c8ad490b3b4992d6f1d9eddf18e56df2a2bcf8744c4332b275d73377fd193df3e6ba0ad9608dc497709beca5c64de2b834d5f5350b3c9a272 + languageName: node + linkType: hard + +"@radix-ui/react-focus-guards@npm:1.0.1-rc.3": + version: 1.0.1-rc.3 + resolution: "@radix-ui/react-focus-guards@npm:1.0.1-rc.3" + dependencies: + "@babel/runtime": "npm:^7.13.10" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: fb35081a0cc12cdaffd2a987564d02c5cefd9ef3ff966bbed014ffee5b56970bd1f22535841c5395313049eb28d81bcbcb9eaea9b5c27876f2c9fd5a75f77f72 + languageName: node + linkType: hard + +"@radix-ui/react-focus-guards@npm:1.1.1": + version: 1.1.1 + resolution: "@radix-ui/react-focus-guards@npm: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 - checksum: ce367d3033a12d639a8d445d2efa090aa4bc5a78125be568f8c8e4e59f30afd51b585a90031ec18cdba19afbaf1974633dbc0c2c3d2a14d9eb1bfea2ddbe5369 + checksum: 2e99750ca593083a530542a185d656b45b100752353a7a193a67566e3c256414a76fa9171d152f8c0167b8d6c1fdf62b2e07750d7af2974bf8ef39eb204aa537 languageName: node linkType: hard -"@radix-ui/react-select@npm:^1.2.1": - version: 1.2.1 - resolution: "@radix-ui/react-select@npm:1.2.1" +"@radix-ui/react-focus-scope@npm:1.0.0": + version: 1.0.0 + resolution: "@radix-ui/react-focus-scope@npm:1.0.0" + dependencies: + "@babel/runtime": "npm:^7.13.10" + "@radix-ui/react-compose-refs": "npm:1.0.0" + "@radix-ui/react-primitive": "npm:1.0.0" + "@radix-ui/react-use-callback-ref": "npm:1.0.0" + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: 0c4cad9c3db4cb7882435fac05ee7ae3b3e0244410d9b8d264370a1edf56b0c7285df6dffe556ba7939f4a3d887d0d5044acee8cb2f04818b91bcbe9b912c2a7 + languageName: node + linkType: hard + +"@radix-ui/react-focus-scope@npm:1.0.2": + version: 1.0.2 + resolution: "@radix-ui/react-focus-scope@npm:1.0.2" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/number": "npm:1.0.0" - "@radix-ui/primitive": "npm:1.0.0" - "@radix-ui/react-collection": "npm:1.0.2" "@radix-ui/react-compose-refs": "npm:1.0.0" - "@radix-ui/react-context": "npm:1.0.0" - "@radix-ui/react-direction": "npm:1.0.0" - "@radix-ui/react-dismissable-layer": "npm:1.0.3" - "@radix-ui/react-focus-guards": "npm:1.0.0" - "@radix-ui/react-focus-scope": "npm:1.0.2" - "@radix-ui/react-id": "npm:1.0.0" - "@radix-ui/react-popper": "npm:1.1.1" - "@radix-ui/react-portal": "npm:1.0.2" "@radix-ui/react-primitive": "npm:1.0.2" - "@radix-ui/react-slot": "npm:1.0.1" "@radix-ui/react-use-callback-ref": "npm:1.0.0" - "@radix-ui/react-use-controllable-state": "npm:1.0.0" - "@radix-ui/react-use-layout-effect": "npm:1.0.0" - "@radix-ui/react-use-previous": "npm:1.0.0" - "@radix-ui/react-visually-hidden": "npm:1.0.2" - aria-hidden: "npm:^1.1.1" - react-remove-scroll: "npm:2.5.5" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: 11c66e2bb298145f809674f240b8637a2bb692ebc4aeb75895ec394601dbdeb6f9f84c948675283452881c94991437aee3ca4cd1bd33d944a3760d604ef62b6c + checksum: a7b8e9ddd99ff186719b3d6882d7273dc9f9073e777dbf12777728629d8a91a3c548e86834117d0d261a5219f2276ac6141c914b18cc142524c31c35bd62819b languageName: node linkType: hard -"@radix-ui/react-select@npm:^1.2.2": - version: 1.2.2 - resolution: "@radix-ui/react-select@npm:1.2.2" +"@radix-ui/react-focus-scope@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-focus-scope@npm:1.0.3" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/number": "npm:1.0.1" - "@radix-ui/primitive": "npm:1.0.1" - "@radix-ui/react-collection": "npm:1.0.3" "@radix-ui/react-compose-refs": "npm:1.0.1" - "@radix-ui/react-context": "npm:1.0.1" - "@radix-ui/react-direction": "npm:1.0.1" - "@radix-ui/react-dismissable-layer": "npm:1.0.4" - "@radix-ui/react-focus-guards": "npm:1.0.1" - "@radix-ui/react-focus-scope": "npm:1.0.3" - "@radix-ui/react-id": "npm:1.0.1" - "@radix-ui/react-popper": "npm:1.1.2" - "@radix-ui/react-portal": "npm:1.0.3" "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-slot": "npm:1.0.2" "@radix-ui/react-use-callback-ref": "npm:1.0.1" - "@radix-ui/react-use-controllable-state": "npm:1.0.1" - "@radix-ui/react-use-layout-effect": "npm:1.0.1" - "@radix-ui/react-use-previous": "npm:1.0.1" - "@radix-ui/react-visually-hidden": "npm:1.0.3" - aria-hidden: "npm:^1.1.1" - react-remove-scroll: "npm:2.5.5" peerDependencies: "@types/react": "*" "@types/react-dom": "*" @@ -3897,16 +2272,18 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: 888fffa703a8f79b45c01d5f03ad9aae66250ddfff827bbba4f222c4d0720aa2f01a3e4b6bd80acabaf5e2fa7ad79de9e9dfd14831f7f4c24337d4d8dfb58ccc + checksum: bfff46919666c122f5b812ee427494ae8408c0eebee30337bd2ce0eedf539f0feaa242f790304ef9df15425b837010ffc6061ce467bedd2c5fd9373bee2b95da languageName: node linkType: hard -"@radix-ui/react-separator@npm:1.0.3": - version: 1.0.3 - resolution: "@radix-ui/react-separator@npm:1.0.3" +"@radix-ui/react-focus-scope@npm:1.0.3-rc.8": + version: 1.0.3-rc.8 + resolution: "@radix-ui/react-focus-scope@npm:1.0.3-rc.8" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-primitive": "npm:1.0.3" + "@radix-ui/react-compose-refs": "npm:1.0.1-rc.3" + "@radix-ui/react-primitive": "npm:1.0.3-rc.8" + "@radix-ui/react-use-callback-ref": "npm:1.0.1-rc.3" peerDependencies: "@types/react": "*" "@types/react-dom": "*" @@ -3917,136 +2294,147 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: 87bcde47343f2bc4439a0dc34381f557905d9b3c1e8c5a0d32ceea62a8ef84f3abf671c5cb29309fc87759ad41d39af619ba546cf54109d64c8746e3ca683de3 + checksum: 4d0c2f8b48e70c0e7a4916f2395c5b0af50e0cd88974ca26085c8fc7edd6725c2ba214d793f298a0bde0e90128bd9e3da226ad34b3bf162673b261f5a759cce0 languageName: node linkType: hard -"@radix-ui/react-slider@npm:^1.1.1": - version: 1.1.1 - resolution: "@radix-ui/react-slider@npm:1.1.1" +"@radix-ui/react-focus-scope@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-focus-scope@npm:1.1.0" dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/number": "npm:1.0.0" - "@radix-ui/primitive": "npm:1.0.0" - "@radix-ui/react-collection": "npm:1.0.2" - "@radix-ui/react-compose-refs": "npm:1.0.0" - "@radix-ui/react-context": "npm:1.0.0" - "@radix-ui/react-direction": "npm:1.0.0" - "@radix-ui/react-primitive": "npm:1.0.2" - "@radix-ui/react-use-controllable-state": "npm:1.0.0" - "@radix-ui/react-use-layout-effect": "npm:1.0.0" - "@radix-ui/react-use-previous": "npm:1.0.0" - "@radix-ui/react-use-size": "npm:1.0.0" + "@radix-ui/react-compose-refs": "npm:1.1.0" + "@radix-ui/react-primitive": "npm:2.0.0" + "@radix-ui/react-use-callback-ref": "npm:1.1.0" peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: 89a2fa0c1e403800c8c4953796ac74d541f67f66607951d815d0999b56b0e7959f76fa8706953a4c7010160febe316410bb7c8d3c56aea1f4cb423131ebdf0a3 + "@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 + checksum: 2593d4bbd4a3525624675ec1d5a591a44f015f43f449b99a5a33228159b83f445e8f1c6bc6f9f2011387abaeadd3df406623c08d4e795b7ae509795652a1d069 languageName: node linkType: hard -"@radix-ui/react-slot@npm:1.0.0": +"@radix-ui/react-id@npm:1.0.0": version: 1.0.0 - resolution: "@radix-ui/react-slot@npm:1.0.0" + resolution: "@radix-ui/react-id@npm:1.0.0" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-compose-refs": "npm:1.0.0" + "@radix-ui/react-use-layout-effect": "npm:1.0.0" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 - checksum: a02573ae7c637b16a72d8511d879db37f33cf35b34b8d2cfe507ba8312abbb8e4075b0cb8cd39c5ba89ce341045375f83634457113256321e7a4c3c3638d2955 + checksum: 56e9817abdc209e0d5169ba2e6d3de477101650b02c04f7f1477800cfd3a9e8bc415bcd14760557a17de8cfcae571342e4f6a5ec182b05d613ae7d77309a861c languageName: node linkType: hard -"@radix-ui/react-slot@npm:1.0.1": +"@radix-ui/react-id@npm:1.0.1": version: 1.0.1 - resolution: "@radix-ui/react-slot@npm:1.0.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-compose-refs": "npm:1.0.0" - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: 5d6c3fe567dec7ac55a581e1fe6a5a5a4bdde32cf17bf022ebe3f96bae3b274ba02ddaa1028ba8413ab4088bd1fca23479de8739cf42eea73e5ce02ee3e8bb70 - languageName: node - linkType: hard - -"@radix-ui/react-slot@npm:1.0.2": - version: 1.0.2 - resolution: "@radix-ui/react-slot@npm:1.0.2" + resolution: "@radix-ui/react-id@npm:1.0.1" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-compose-refs": "npm:1.0.1" + "@radix-ui/react-use-layout-effect": "npm:1.0.1" peerDependencies: "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 3af6ea4891e6fa8091e666802adffe7718b3cd390a10fa9229a5f40f8efded9f3918ea01b046103d93923d41cc32119505ebb6bde76cad07a87b6cf4f2119347 + checksum: e2859ca58bea171c956098ace7ecf615cf9432f58a118b779a14720746b3adcf0351c36c75de131548672d3cd290ca238198acbd33b88dc4706f98312e9317ad languageName: node linkType: hard -"@radix-ui/react-slot@npm:1.0.2-rc.8": - version: 1.0.2-rc.8 - resolution: "@radix-ui/react-slot@npm:1.0.2-rc.8" +"@radix-ui/react-id@npm:1.0.1-rc.3": + version: 1.0.1-rc.3 + resolution: "@radix-ui/react-id@npm:1.0.1-rc.3" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-compose-refs": "npm:1.0.1-rc.3" + "@radix-ui/react-use-layout-effect": "npm:1.0.1-rc.3" peerDependencies: "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: "@types/react": optional: true - checksum: c97aaf9d37cca5f6bc87caa0659d5237367ac6f4e24c2e1eb441158ee2c0ba30b4b06efc6464891423e6c0c0300fb8a3701ce35d210c0f84a91f118d8700fe3f + checksum: 178f6fd90acecc677549bfc1fec0b919bb7c70be8c78f943c3413a61994c852c3e3e685ebacb6486882df9c23436f22fe31d8e8e62659444fc792702b812324f languageName: node linkType: hard -"@radix-ui/react-slot@npm:1.1.0": +"@radix-ui/react-id@npm:1.1.0, @radix-ui/react-id@npm:^1.1.0": version: 1.1.0 - resolution: "@radix-ui/react-slot@npm:1.1.0" + resolution: "@radix-ui/react-id@npm:1.1.0" dependencies: - "@radix-ui/react-compose-refs": "npm:1.1.0" + "@radix-ui/react-use-layout-effect": "npm:1.1.0" peerDependencies: "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: "@types/react": optional: true - checksum: a2e8bfb70c440506dd84a1a274f9a8bc433cca37ceae275e53552c9122612e3837744d7fc6f113d6ef1a11491aa914f4add71d76de41cb6d4db72547a8e261ae + checksum: acf13e29e51ee96336837fc0cfecc306328b20b0e0070f6f0f7aa7a621ded4a1ee5537cfad58456f64bae76caa7f8769231e88dc7dc106197347ee433c275a79 languageName: node linkType: hard -"@radix-ui/react-tabs@npm:^1.0.3": - version: 1.0.3 - resolution: "@radix-ui/react-tabs@npm:1.0.3" +"@radix-ui/react-menu@npm:2.0.5": + version: 2.0.5 + resolution: "@radix-ui/react-menu@npm:2.0.5" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.0" - "@radix-ui/react-context": "npm:1.0.0" - "@radix-ui/react-direction": "npm:1.0.0" - "@radix-ui/react-id": "npm:1.0.0" - "@radix-ui/react-presence": "npm:1.0.0" - "@radix-ui/react-primitive": "npm:1.0.2" - "@radix-ui/react-roving-focus": "npm:1.0.3" - "@radix-ui/react-use-controllable-state": "npm:1.0.0" + "@radix-ui/primitive": "npm:1.0.1" + "@radix-ui/react-collection": "npm:1.0.3" + "@radix-ui/react-compose-refs": "npm:1.0.1" + "@radix-ui/react-context": "npm:1.0.1" + "@radix-ui/react-direction": "npm:1.0.1" + "@radix-ui/react-dismissable-layer": "npm:1.0.4" + "@radix-ui/react-focus-guards": "npm:1.0.1" + "@radix-ui/react-focus-scope": "npm:1.0.3" + "@radix-ui/react-id": "npm:1.0.1" + "@radix-ui/react-popper": "npm:1.1.2" + "@radix-ui/react-portal": "npm:1.0.3" + "@radix-ui/react-presence": "npm:1.0.1" + "@radix-ui/react-primitive": "npm:1.0.3" + "@radix-ui/react-roving-focus": "npm:1.0.4" + "@radix-ui/react-slot": "npm:1.0.2" + "@radix-ui/react-use-callback-ref": "npm:1.0.1" + aria-hidden: "npm:^1.1.1" + react-remove-scroll: "npm:2.5.5" peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: af7b1343aefb2cadc82ff70773faa84006706dbe211f5d9fc3120ac5ff3705e6a2ee89ddc555e5c84a156efdf137ae923d569edc6c41a1fb0835c860a7a0fb5f + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 9b21a5fb159dc106ea7b45c64cf08487fb4cc1bba2e8696d70320f3e4173f2a0098eeeef16bc846391f569fd2abb5fe7b2ef40de929b9625e18a27f702743705 languageName: node linkType: hard -"@radix-ui/react-toggle-group@npm:1.0.4": - version: 1.0.4 - resolution: "@radix-ui/react-toggle-group@npm:1.0.4" +"@radix-ui/react-popover@npm:^1.0.6": + version: 1.0.6 + resolution: "@radix-ui/react-popover@npm:1.0.6" dependencies: "@babel/runtime": "npm:^7.13.10" "@radix-ui/primitive": "npm:1.0.1" + "@radix-ui/react-compose-refs": "npm:1.0.1" "@radix-ui/react-context": "npm:1.0.1" - "@radix-ui/react-direction": "npm:1.0.1" + "@radix-ui/react-dismissable-layer": "npm:1.0.4" + "@radix-ui/react-focus-guards": "npm:1.0.1" + "@radix-ui/react-focus-scope": "npm:1.0.3" + "@radix-ui/react-id": "npm:1.0.1" + "@radix-ui/react-popper": "npm:1.1.2" + "@radix-ui/react-portal": "npm:1.0.3" + "@radix-ui/react-presence": "npm:1.0.1" "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-roving-focus": "npm:1.0.4" - "@radix-ui/react-toggle": "npm:1.0.3" + "@radix-ui/react-slot": "npm:1.0.2" "@radix-ui/react-use-controllable-state": "npm:1.0.1" + aria-hidden: "npm:^1.1.1" + react-remove-scroll: "npm:2.5.5" peerDependencies: "@types/react": "*" "@types/react-dom": "*" @@ -4057,21 +2445,29 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: 4f4761965022759ac0950ac026029b64049e1f18ef07a01ddde788b7606efcb262c9ae3a418de0c0756bf7285182ed0d268502c6f17ba86d2ff27eee5507bbf7 + checksum: 1b9fd21f6b73a74af88c5cd151f7de2a8dcc46a4d7ac7bee1104d5a45869f170bcb2490c3205b18597457b9153e71016bc1f71077938317e07eca5cf45fca7ae languageName: node linkType: hard -"@radix-ui/react-toggle-group@npm:^1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-toggle-group@npm:1.1.0" +"@radix-ui/react-popover@npm:^1.1.2": + version: 1.1.2 + resolution: "@radix-ui/react-popover@npm:1.1.2" dependencies: "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-direction": "npm:1.1.0" + "@radix-ui/react-compose-refs": "npm:1.1.0" + "@radix-ui/react-context": "npm:1.1.1" + "@radix-ui/react-dismissable-layer": "npm:1.1.1" + "@radix-ui/react-focus-guards": "npm:1.1.1" + "@radix-ui/react-focus-scope": "npm:1.1.0" + "@radix-ui/react-id": "npm:1.1.0" + "@radix-ui/react-popper": "npm:1.2.0" + "@radix-ui/react-portal": "npm:1.1.2" + "@radix-ui/react-presence": "npm:1.1.1" "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-roving-focus": "npm:1.1.0" - "@radix-ui/react-toggle": "npm:1.1.0" + "@radix-ui/react-slot": "npm:1.1.0" "@radix-ui/react-use-controllable-state": "npm:1.1.0" + aria-hidden: "npm:^1.1.1" + react-remove-scroll: "npm:2.6.0" peerDependencies: "@types/react": "*" "@types/react-dom": "*" @@ -4082,18 +2478,47 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: 041ac1ba365cbf237588649d3b0afb45057fa8b2d26c35fbdbf4c39affb959a53ec2a65bb5ffde76fc95b03835d487f5dfc40c2a83605740608b2b7768becde4 + checksum: d8fb4e3507a3cd6168bdbb6b840fb8eb538b3b1ce62192a1dcc4e8e4947fbf082c437c0ad5f6faed078006dcb7073867e493378d04c50372c6ea826c5a811f2c languageName: node linkType: hard -"@radix-ui/react-toggle@npm:1.0.3": - version: 1.0.3 - resolution: "@radix-ui/react-toggle@npm:1.0.3" +"@radix-ui/react-popper@npm:1.1.1": + version: 1.1.1 + resolution: "@radix-ui/react-popper@npm:1.1.1" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.1" + "@floating-ui/react-dom": "npm:0.7.2" + "@radix-ui/react-arrow": "npm:1.0.2" + "@radix-ui/react-compose-refs": "npm:1.0.0" + "@radix-ui/react-context": "npm:1.0.0" + "@radix-ui/react-primitive": "npm:1.0.2" + "@radix-ui/react-use-callback-ref": "npm:1.0.0" + "@radix-ui/react-use-layout-effect": "npm:1.0.0" + "@radix-ui/react-use-rect": "npm:1.0.0" + "@radix-ui/react-use-size": "npm:1.0.0" + "@radix-ui/rect": "npm:1.0.0" + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: fb654fed958bc53e5a70cc5015c25cb3ef03a81727db9b9fc6c9faa69d64ad8c6c76b5d35b7e6466888ebc7d9a617a4a7a155fd24d1a2e1c07255ffa02a962ba + languageName: node + linkType: hard + +"@radix-ui/react-popper@npm:1.1.2": + version: 1.1.2 + resolution: "@radix-ui/react-popper@npm:1.1.2" + dependencies: + "@babel/runtime": "npm:^7.13.10" + "@floating-ui/react-dom": "npm:^2.0.0" + "@radix-ui/react-arrow": "npm:1.0.3" + "@radix-ui/react-compose-refs": "npm:1.0.1" + "@radix-ui/react-context": "npm:1.0.1" "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-use-controllable-state": "npm:1.0.1" + "@radix-ui/react-use-callback-ref": "npm:1.0.1" + "@radix-ui/react-use-layout-effect": "npm:1.0.1" + "@radix-ui/react-use-rect": "npm:1.0.1" + "@radix-ui/react-use-size": "npm:1.0.1" + "@radix-ui/rect": "npm:1.0.1" peerDependencies: "@types/react": "*" "@types/react-dom": "*" @@ -4104,17 +2529,24 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: 9b487dad213ea7e70b0aa205e7c6f790a6f2bf394c39912e22dbe003403fd0d24a41c2efd31695fc31ab7bac286f28253dbb2fc5202cacd572ebf909f1fdc86c + checksum: 4bd069b79f7046af2c0967b8e43f727cd09834cbd6df1e3d5a943c4f83428ff8b646882737fdf7593c22e261a1d13768a5c020138d79503862ae2e1729081bba languageName: node linkType: hard -"@radix-ui/react-toggle@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-toggle@npm:1.1.0" +"@radix-ui/react-popper@npm:1.2.0": + version: 1.2.0 + resolution: "@radix-ui/react-popper@npm:1.2.0" dependencies: - "@radix-ui/primitive": "npm:1.1.0" + "@floating-ui/react-dom": "npm:^2.0.0" + "@radix-ui/react-arrow": "npm:1.1.0" + "@radix-ui/react-compose-refs": "npm:1.1.0" + "@radix-ui/react-context": "npm:1.1.0" "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" + "@radix-ui/react-use-callback-ref": "npm:1.1.0" + "@radix-ui/react-use-layout-effect": "npm:1.1.0" + "@radix-ui/react-use-rect": "npm:1.1.0" + "@radix-ui/react-use-size": "npm:1.1.0" + "@radix-ui/rect": "npm:1.1.0" peerDependencies: "@types/react": "*" "@types/react-dom": "*" @@ -4125,1468 +2557,1192 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: 68af7280b88e1696f0c5b2dfbb53473d45ccc960dc8ae3326aed6086945696f2a4a9d73305a80cd945fb9d33ccf756a3162041d5e89bb713aa5a5231b636b010 + checksum: a78ea534b9822d07153fff0895b6cdf742e7213782b140b3ab94a76df0ca70e6001925aea946e99ca680fc63a7fcca49c1d62e8dc5a2f651692fba3541e180c0 languageName: node linkType: hard -"@radix-ui/react-toolbar@npm:^1.0.4": - version: 1.0.4 - resolution: "@radix-ui/react-toolbar@npm:1.0.4" +"@radix-ui/react-portal@npm:1.0.0": + version: 1.0.0 + resolution: "@radix-ui/react-portal@npm:1.0.0" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.1" - "@radix-ui/react-context": "npm:1.0.1" - "@radix-ui/react-direction": "npm:1.0.1" - "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-roving-focus": "npm:1.0.4" - "@radix-ui/react-separator": "npm:1.0.3" - "@radix-ui/react-toggle-group": "npm:1.0.4" + "@radix-ui/react-primitive": "npm:1.0.0" peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 3ed7ebe22ef2e8369e08bb59776671a7b8c413628249c338b8db86b4b9ac40127b4201d5bd4a9c23ea1fd21464769b4fa427d3ebcda3a7fcdbd45b256b5a753a + checksum: c7330e05d99cbb52bfc16c60c996edf2ace0d80b78eb3828dbce45fe53558a5474dfc347d152a956259740d37d92ec63a88638a22ab808c5f80681f1ad41a810 languageName: node linkType: hard -"@radix-ui/react-tooltip@npm:^1.0.5": - version: 1.0.5 - resolution: "@radix-ui/react-tooltip@npm:1.0.5" +"@radix-ui/react-portal@npm:1.0.2": + version: 1.0.2 + resolution: "@radix-ui/react-portal@npm:1.0.2" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.0" - "@radix-ui/react-compose-refs": "npm:1.0.0" - "@radix-ui/react-context": "npm:1.0.0" - "@radix-ui/react-dismissable-layer": "npm:1.0.3" - "@radix-ui/react-id": "npm:1.0.0" - "@radix-ui/react-popper": "npm:1.1.1" - "@radix-ui/react-portal": "npm:1.0.2" - "@radix-ui/react-presence": "npm:1.0.0" "@radix-ui/react-primitive": "npm:1.0.2" - "@radix-ui/react-slot": "npm:1.0.1" - "@radix-ui/react-use-controllable-state": "npm:1.0.0" - "@radix-ui/react-visually-hidden": "npm:1.0.2" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: 6b90fda91da03d3111fc1c1663fff525f58ae1fa5b0b9927d06991ed226f660b2e9bb559f469e02711f7ce0d35127631b600d13d5e2651450683060b7ad02623 + checksum: 2397b9a3fe5e1f7b4982e0995fb088f77221754e42ebf5aa52374794ed7d35048ec530cc486927e65b1975fdb5f5caa1d8d2f87e8aa15004dfa011511fe8c606 languageName: node linkType: hard -"@radix-ui/react-use-callback-ref@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-use-callback-ref@npm:1.0.0" +"@radix-ui/react-portal@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-portal@npm:1.0.3" dependencies: "@babel/runtime": "npm:^7.13.10" + "@radix-ui/react-primitive": "npm:1.0.3" peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 - checksum: 91bf130d39cfbda61de83fd4a6893cf459b3d72ec01268e3761eafd3c709f70f82940a6b46676ba6fe06fc707fdefe580946b3b99bb2af5f59887aa203e56533 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: baf295bbbf09ead37b64ee1dc025a6a540960f5e60552766d78f6065504c67d4bcf49fad5e2073617d9a3011daafad625aa3bd1da7a886c704833b22a49e888f languageName: node linkType: hard -"@radix-ui/react-use-callback-ref@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/react-use-callback-ref@npm:1.0.1" +"@radix-ui/react-portal@npm:1.0.3-rc.8": + version: 1.0.3-rc.8 + resolution: "@radix-ui/react-portal@npm:1.0.3-rc.8" dependencies: "@babel/runtime": "npm:^7.13.10" + "@radix-ui/react-primitive": "npm:1.0.3-rc.8" peerDependencies: "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 331b432be1edc960ca148637ae6087220873ee828ceb13bd155926ef8f49e862812de5b379129f6aaefcd11be53715f3237e6caa9a33d9c0abfff43f3ba58938 + "@types/react-dom": + optional: true + checksum: fa162e9891e61a365e350d1b06b7f462209e8c35e72ea10fb11bee9f11b0594877ffba85c2b7a4011ec76ad6e045de0c2274e09f02161589c1ff1e9fe02ffac1 languageName: node linkType: hard -"@radix-ui/react-use-callback-ref@npm:1.0.1-rc.3": - version: 1.0.1-rc.3 - resolution: "@radix-ui/react-use-callback-ref@npm:1.0.1-rc.3" +"@radix-ui/react-portal@npm:1.1.2": + version: 1.1.2 + resolution: "@radix-ui/react-portal@npm:1.1.2" dependencies: - "@babel/runtime": "npm:^7.13.10" + "@radix-ui/react-primitive": "npm:2.0.0" + "@radix-ui/react-use-layout-effect": "npm:1.1.0" peerDependencies: "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 + "@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 - checksum: 7a11e2baf8169a3679a8c2812f09b3fc3ae31adebac1f4581d0ac897f86e108f228af031620d56b518600227cb937d2f0f4abb77b2e16bb9d5338e4376c8ecd2 + "@types/react-dom": + optional: true + checksum: 836967330893b16b85371775ed1a59e038ce99189f4851cfa976bde2710d704c2a9e49e0a5206e7ac3fcf8a67ddd2d126b8352a88f295d6ef49d04e269736ed1 languageName: node linkType: hard -"@radix-ui/react-use-callback-ref@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-use-callback-ref@npm:1.1.0" +"@radix-ui/react-portal@npm:^1.1.1": + version: 1.1.1 + resolution: "@radix-ui/react-portal@npm:1.1.1" + dependencies: + "@radix-ui/react-primitive": "npm:2.0.0" + "@radix-ui/react-use-layout-effect": "npm: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 - checksum: e954863f3baa151faf89ac052a5468b42650efca924417470efd1bd254b411a94c69c30de2fdbb90187b38cb984795978e12e30423dc41e4309d93d53b66d819 + "@types/react-dom": + optional: true + checksum: 7e7130fcb0d99197322cd97987e1d7279b6c264fb6be3d883cbfcd49267740d83ca17b431e0d98848afd6067a13ee823ca396a8b63ae68f18a728cf70398c830 languageName: node linkType: hard -"@radix-ui/react-use-controllable-state@npm:1.0.0": +"@radix-ui/react-presence@npm:1.0.0": version: 1.0.0 - resolution: "@radix-ui/react-use-controllable-state@npm:1.0.0" + resolution: "@radix-ui/react-presence@npm:1.0.0" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-use-callback-ref": "npm:1.0.0" + "@radix-ui/react-compose-refs": "npm:1.0.0" + "@radix-ui/react-use-layout-effect": "npm:1.0.0" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 - checksum: fa2ad3b70bec91b628883455152b7ce19d321199e3677051822c14aa3941901f5fd14cddec1c9ab0998e4061fd3b8397727aef856fec099c419d8e1e3d7f75de + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: 2d696781e58f7acc45df2965b4756d5072a80704677cb6905a927754bd2076c87cd137820d3e58d8c2118a9b12aaa82fee79c6fef49b80012a12983002101fc5 languageName: node linkType: hard -"@radix-ui/react-use-controllable-state@npm:1.0.1": +"@radix-ui/react-presence@npm:1.0.1": version: 1.0.1 - resolution: "@radix-ui/react-use-controllable-state@npm:1.0.1" + resolution: "@radix-ui/react-presence@npm:1.0.1" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-use-callback-ref": "npm:1.0.1" + "@radix-ui/react-compose-refs": "npm:1.0.1" + "@radix-ui/react-use-layout-effect": "npm:1.0.1" peerDependencies: "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 29b069dbf09e48bca321af6272574ad0fc7283174e7d092731a10663fe00c0e6b4bde5e1b5ea67725fe48dcbe8026e7ff0d69d42891c62cbb9ca408498171fbe + "@types/react-dom": + optional: true + checksum: 90780618b265fe794a8f1ddaa5bfd3c71a1127fa79330a14d32722e6265b44452a9dd36efe4e769129d33e57f979f6b8713e2cbf2e2755326aa3b0f337185b6e languageName: node linkType: hard -"@radix-ui/react-use-controllable-state@npm:1.0.1-rc.3": +"@radix-ui/react-presence@npm:1.0.1-rc.3": version: 1.0.1-rc.3 - resolution: "@radix-ui/react-use-controllable-state@npm:1.0.1-rc.3" + resolution: "@radix-ui/react-presence@npm:1.0.1-rc.3" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-use-callback-ref": "npm:1.0.1-rc.3" + "@radix-ui/react-compose-refs": "npm:1.0.1-rc.3" + "@radix-ui/react-use-layout-effect": "npm:1.0.1-rc.3" peerDependencies: "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 718ef2d79899a8e89bba051e1437052fb809651209dcd9995883407077d8567a278947d64254025ab183096e357fa155f7c36b2e3c62e4ce83acb3c99d97ebdd + "@types/react-dom": + optional: true + checksum: 3c0511fb19ee816825d29ff2f9a73da2a764c56e657ee48be7d82ad2658cdc38ea4ee85d1fdd5fa05790076aa2b3f545d1ba3ce9854dd51bbf6255652c5a3cb4 languageName: node linkType: hard -"@radix-ui/react-use-controllable-state@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-use-controllable-state@npm:1.1.0" +"@radix-ui/react-presence@npm:1.1.1": + version: 1.1.1 + resolution: "@radix-ui/react-presence@npm:1.1.1" dependencies: - "@radix-ui/react-use-callback-ref": "npm:1.1.0" + "@radix-ui/react-compose-refs": "npm:1.1.0" + "@radix-ui/react-use-layout-effect": "npm: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 - checksum: 2af883b5b25822ac226e60a6bfde647c0123a76345052a90219026059b3f7225844b2c13a9a16fba859c1cda5fb3d057f2a04503f71780e607516492db4eb3a1 + "@types/react-dom": + optional: true + checksum: 777cda0406450ff5ca0e49235e486237723323d046a3382e35a0e78eededccfc95a76a9b5fecd7404dac793264762f4bc10111af1e08f8cc2d4d571d7971220e languageName: node linkType: hard -"@radix-ui/react-use-escape-keydown@npm:1.0.0": +"@radix-ui/react-primitive@npm:1.0.0": version: 1.0.0 - resolution: "@radix-ui/react-use-escape-keydown@npm:1.0.0" + resolution: "@radix-ui/react-primitive@npm:1.0.0" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-use-callback-ref": "npm:1.0.0" + "@radix-ui/react-slot": "npm:1.0.0" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 - checksum: a64e8dbd0e37b53c6cb9f370923afbf29646d6c28dcadd2a7076451692b70263916b9926322ecd7cc3975b2a5111903ec5abcda7e389b35ef197eb1aba17be38 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: a68b3afe6eb39e1c73d6cc162283ce071b2a5793e5c417547a0b43281654346be7474f51c7055b5d2636667efbab863eb76f785e8484e63c670b0a9d863684be languageName: node linkType: hard -"@radix-ui/react-use-escape-keydown@npm:1.0.2": +"@radix-ui/react-primitive@npm:1.0.2": version: 1.0.2 - resolution: "@radix-ui/react-use-escape-keydown@npm:1.0.2" + resolution: "@radix-ui/react-primitive@npm:1.0.2" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-use-callback-ref": "npm:1.0.0" + "@radix-ui/react-slot": "npm:1.0.1" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 - checksum: 0bdecc9f19cba2d491eca7eac0adad8bac687b37d5886618801b2ed3dc831623a6437f3771aa0797b32fa909ca3a2ca5be1176ac23147bc5fe68533115dc5c13 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: bc9dc28568a9d4e0343363e62428fc13685667e470a663a69413a23145264f7a114de9d45c1ce33e6ccdeb7ae5bbfdbc198ee4b2505cd71da8f8d470c4f88d68 languageName: node linkType: hard -"@radix-ui/react-use-escape-keydown@npm:1.0.3": +"@radix-ui/react-primitive@npm:1.0.3": version: 1.0.3 - resolution: "@radix-ui/react-use-escape-keydown@npm:1.0.3" + resolution: "@radix-ui/react-primitive@npm:1.0.3" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-use-callback-ref": "npm:1.0.1" + "@radix-ui/react-slot": "npm:1.0.2" peerDependencies: "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 3c94c78902dcb40b60083ee2184614f45c95a189178f52d89323b467bd04bcf5fdb1bc4d43debecd7f0b572c3843c7e04edbcb56f40a4b4b43936fb2770fb8ad + "@types/react-dom": + optional: true + checksum: 67a66ff8898a5e7739eda228ab6f5ce808858da1dce967014138d87e72b6bbfc93dc1467c706d98d1a2b93bf0b6e09233d1a24d31c78227b078444c1a69c42be languageName: node linkType: hard -"@radix-ui/react-use-escape-keydown@npm:1.0.3-rc.3": - version: 1.0.3-rc.3 - resolution: "@radix-ui/react-use-escape-keydown@npm:1.0.3-rc.3" +"@radix-ui/react-primitive@npm:1.0.3-rc.8": + version: 1.0.3-rc.8 + resolution: "@radix-ui/react-primitive@npm:1.0.3-rc.8" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-use-callback-ref": "npm:1.0.1-rc.3" + "@radix-ui/react-slot": "npm:1.0.2-rc.8" peerDependencies: "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 36c9de0f144868d70c6471e50a8bc7b2c1c9be71aebb85a8492bf8d2853045472ff8faad7e792947eba39124988a216c37d97c95e67b8d33c3b3c700d0dcc3c5 + "@types/react-dom": + optional: true + checksum: 442598ac2d187278668a904be0d52afa29ca03b9ec96c6712dbec838aec068a8ec5c777dd765b8f2798acc42670dc92b3885b3b283632b06e3923375045342cc languageName: node linkType: hard -"@radix-ui/react-use-layout-effect@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-use-layout-effect@npm:1.0.0" +"@radix-ui/react-primitive@npm:2.0.0, @radix-ui/react-primitive@npm:^2.0.0": + version: 2.0.0 + resolution: "@radix-ui/react-primitive@npm:2.0.0" dependencies: - "@babel/runtime": "npm:^7.13.10" + "@radix-ui/react-slot": "npm:1.1.0" peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: 04bbcddbfaa2863cbd64978b70925d0a0b664131f8c33a518b0df2866966840b3d72302258b0f8cb7ed45b50b6d52d6cbdca00cc159c47f323eb8d7b70126d83 + "@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 + checksum: 00cb6ca499252ca848c299212ba6976171cea7608b10b3f9a9639d6732dea2df1197ba0d97c001a4fdb29313c3e7fc2a490f6245dd3579617a0ffd85ae964fdd languageName: node linkType: hard -"@radix-ui/react-use-layout-effect@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/react-use-layout-effect@npm:1.0.1" +"@radix-ui/react-roving-focus@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-roving-focus@npm:1.0.3" dependencies: "@babel/runtime": "npm:^7.13.10" + "@radix-ui/primitive": "npm:1.0.0" + "@radix-ui/react-collection": "npm:1.0.2" + "@radix-ui/react-compose-refs": "npm:1.0.0" + "@radix-ui/react-context": "npm:1.0.0" + "@radix-ui/react-direction": "npm:1.0.0" + "@radix-ui/react-id": "npm:1.0.0" + "@radix-ui/react-primitive": "npm:1.0.2" + "@radix-ui/react-use-callback-ref": "npm:1.0.0" + "@radix-ui/react-use-controllable-state": "npm:1.0.0" peerDependencies: - "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 13cd0c38395c5838bc9a18238020d3bcf67fb340039e6d1cbf438be1b91d64cf6900b78121f3dc9219faeb40dcc7b523ce0f17e4a41631655690e5a30a40886a + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: 0e951c9afbbc6155f90e2130b6b2a2d8be9f6aadf7b7b58407c7ade5cca4a71f8e64598564435e26c8a8853525c9cac906814263fd57b530cada6415f1272f03 languageName: node linkType: hard -"@radix-ui/react-use-layout-effect@npm:1.0.1-rc.3": - version: 1.0.1-rc.3 - resolution: "@radix-ui/react-use-layout-effect@npm:1.0.1-rc.3" +"@radix-ui/react-roving-focus@npm:1.0.4": + version: 1.0.4 + resolution: "@radix-ui/react-roving-focus@npm:1.0.4" dependencies: "@babel/runtime": "npm:^7.13.10" + "@radix-ui/primitive": "npm:1.0.1" + "@radix-ui/react-collection": "npm:1.0.3" + "@radix-ui/react-compose-refs": "npm:1.0.1" + "@radix-ui/react-context": "npm:1.0.1" + "@radix-ui/react-direction": "npm:1.0.1" + "@radix-ui/react-id": "npm:1.0.1" + "@radix-ui/react-primitive": "npm:1.0.3" + "@radix-ui/react-use-callback-ref": "npm:1.0.1" + "@radix-ui/react-use-controllable-state": "npm:1.0.1" peerDependencies: "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 657cc331948ce846840bf9a9161bd70858d93464d0d888d115c3ad7327b94a55013bd3d0cf27724e9d296eaf845cf33861fe1c0074ad2de6f81208fa5e285793 + "@types/react-dom": + optional: true + checksum: 61e3ddfd1647e64fba855434ff41e8e7ba707244fe8841f78c450fbdce525383b64259279475615d030dbf1625cbffd8eeebee72d91bf6978794f5dbcf887fc0 languageName: node linkType: hard -"@radix-ui/react-use-layout-effect@npm:1.1.0": +"@radix-ui/react-roving-focus@npm:1.1.0": version: 1.1.0 - resolution: "@radix-ui/react-use-layout-effect@npm:1.1.0" + resolution: "@radix-ui/react-roving-focus@npm:1.1.0" + dependencies: + "@radix-ui/primitive": "npm:1.1.0" + "@radix-ui/react-collection": "npm:1.1.0" + "@radix-ui/react-compose-refs": "npm:1.1.0" + "@radix-ui/react-context": "npm:1.1.0" + "@radix-ui/react-direction": "npm:1.1.0" + "@radix-ui/react-id": "npm:1.1.0" + "@radix-ui/react-primitive": "npm:2.0.0" + "@radix-ui/react-use-callback-ref": "npm:1.1.0" + "@radix-ui/react-use-controllable-state": "npm: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 - checksum: 9bf87ece1845c038ed95863cfccf9d75f557c2400d606343bab0ab3192b9806b9840e6aa0a0333fdf3e83cf9982632852192f3e68d7d8367bc8c788dfdf8e62b + "@types/react-dom": + optional: true + checksum: ce367d3033a12d639a8d445d2efa090aa4bc5a78125be568f8c8e4e59f30afd51b585a90031ec18cdba19afbaf1974633dbc0c2c3d2a14d9eb1bfea2ddbe5369 languageName: node linkType: hard -"@radix-ui/react-use-previous@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-use-previous@npm:1.0.0" +"@radix-ui/react-select@npm:^1.2.1": + version: 1.2.1 + resolution: "@radix-ui/react-select@npm:1.2.1" dependencies: "@babel/runtime": "npm:^7.13.10" + "@radix-ui/number": "npm:1.0.0" + "@radix-ui/primitive": "npm:1.0.0" + "@radix-ui/react-collection": "npm:1.0.2" + "@radix-ui/react-compose-refs": "npm:1.0.0" + "@radix-ui/react-context": "npm:1.0.0" + "@radix-ui/react-direction": "npm:1.0.0" + "@radix-ui/react-dismissable-layer": "npm:1.0.3" + "@radix-ui/react-focus-guards": "npm:1.0.0" + "@radix-ui/react-focus-scope": "npm:1.0.2" + "@radix-ui/react-id": "npm:1.0.0" + "@radix-ui/react-popper": "npm:1.1.1" + "@radix-ui/react-portal": "npm:1.0.2" + "@radix-ui/react-primitive": "npm:1.0.2" + "@radix-ui/react-slot": "npm:1.0.1" + "@radix-ui/react-use-callback-ref": "npm:1.0.0" + "@radix-ui/react-use-controllable-state": "npm:1.0.0" + "@radix-ui/react-use-layout-effect": "npm:1.0.0" + "@radix-ui/react-use-previous": "npm:1.0.0" + "@radix-ui/react-visually-hidden": "npm:1.0.2" + aria-hidden: "npm:^1.1.1" + react-remove-scroll: "npm:2.5.5" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 - checksum: a6e3d0f7ae61e741fabd729cb0d26a02933249091a57aee1182e6880ad65f4fded486e5353eae930208fd33ec2ae8fd4853cd97a12c582c262dc934d5e723acc + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: 11c66e2bb298145f809674f240b8637a2bb692ebc4aeb75895ec394601dbdeb6f9f84c948675283452881c94991437aee3ca4cd1bd33d944a3760d604ef62b6c languageName: node linkType: hard -"@radix-ui/react-use-previous@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/react-use-previous@npm:1.0.1" +"@radix-ui/react-select@npm:^2.1.2": + version: 2.1.2 + resolution: "@radix-ui/react-select@npm:2.1.2" dependencies: - "@babel/runtime": "npm:^7.13.10" + "@radix-ui/number": "npm:1.1.0" + "@radix-ui/primitive": "npm:1.1.0" + "@radix-ui/react-collection": "npm:1.1.0" + "@radix-ui/react-compose-refs": "npm:1.1.0" + "@radix-ui/react-context": "npm:1.1.1" + "@radix-ui/react-direction": "npm:1.1.0" + "@radix-ui/react-dismissable-layer": "npm:1.1.1" + "@radix-ui/react-focus-guards": "npm:1.1.1" + "@radix-ui/react-focus-scope": "npm:1.1.0" + "@radix-ui/react-id": "npm:1.1.0" + "@radix-ui/react-popper": "npm:1.2.0" + "@radix-ui/react-portal": "npm:1.1.2" + "@radix-ui/react-primitive": "npm:2.0.0" + "@radix-ui/react-slot": "npm:1.1.0" + "@radix-ui/react-use-callback-ref": "npm:1.1.0" + "@radix-ui/react-use-controllable-state": "npm:1.1.0" + "@radix-ui/react-use-layout-effect": "npm:1.1.0" + "@radix-ui/react-use-previous": "npm:1.1.0" + "@radix-ui/react-visually-hidden": "npm:1.1.0" + aria-hidden: "npm:^1.1.1" + react-remove-scroll: "npm:2.6.0" peerDependencies: "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 + "@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 - checksum: f5fbc602108668484a4ed506b7842482222d1d03094362e26abb7fdd593eee8794fc47d85b3524fb9d00884801c89a6eefd0bed0971eba1ec189c637b6afd398 + "@types/react-dom": + optional: true + checksum: cb9d510cbbcc64ec56e1aa19da83220e21e7a101857be423cfb6c159b11bcd8f29b3f67c473df81b1a5203700731ab5f5861f4633ff3f1dec3d58ec74825b16a languageName: node linkType: hard -"@radix-ui/react-use-rect@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-use-rect@npm:1.0.0" +"@radix-ui/react-slider@npm:^1.1.1": + version: 1.1.1 + resolution: "@radix-ui/react-slider@npm:1.1.1" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/rect": "npm:1.0.0" + "@radix-ui/number": "npm:1.0.0" + "@radix-ui/primitive": "npm:1.0.0" + "@radix-ui/react-collection": "npm:1.0.2" + "@radix-ui/react-compose-refs": "npm:1.0.0" + "@radix-ui/react-context": "npm:1.0.0" + "@radix-ui/react-direction": "npm:1.0.0" + "@radix-ui/react-primitive": "npm:1.0.2" + "@radix-ui/react-use-controllable-state": "npm:1.0.0" + "@radix-ui/react-use-layout-effect": "npm:1.0.0" + "@radix-ui/react-use-previous": "npm:1.0.0" + "@radix-ui/react-use-size": "npm:1.0.0" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 - checksum: 56e2322e7b4564301324f2e6f37dd9862a5a43bf79484eb4d0b95b66aa539f03fa24dc31549711d5f2fafe9821a5a93f4e76254eaf34bc6b81d25d024a9a3cbb + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: 89a2fa0c1e403800c8c4953796ac74d541f67f66607951d815d0999b56b0e7959f76fa8706953a4c7010160febe316410bb7c8d3c56aea1f4cb423131ebdf0a3 languageName: node linkType: hard -"@radix-ui/react-use-rect@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/react-use-rect@npm:1.0.1" +"@radix-ui/react-slider@npm:^1.2.1": + version: 1.2.1 + resolution: "@radix-ui/react-slider@npm:1.2.1" dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/rect": "npm:1.0.1" + "@radix-ui/number": "npm:1.1.0" + "@radix-ui/primitive": "npm:1.1.0" + "@radix-ui/react-collection": "npm:1.1.0" + "@radix-ui/react-compose-refs": "npm:1.1.0" + "@radix-ui/react-context": "npm:1.1.1" + "@radix-ui/react-direction": "npm:1.1.0" + "@radix-ui/react-primitive": "npm:2.0.0" + "@radix-ui/react-use-controllable-state": "npm:1.1.0" + "@radix-ui/react-use-layout-effect": "npm:1.1.0" + "@radix-ui/react-use-previous": "npm:1.1.0" + "@radix-ui/react-use-size": "npm:1.1.0" peerDependencies: "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 + "@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 - checksum: 94c5ab31dfd3678c0cb77a30025e82b3a287577c1a8674b0d703a36d27434bc9c59790e0bebf57ed153f0b8e0d8c3b9675fc9787b9eac525a09abcda8fa9e7eb + "@types/react-dom": + optional: true + checksum: f39b67f019accc2fddebddb0d7f5bca7fc6ce8b370d294779e5139f7f36135ead9dff8672a9e4d5c771103280df9a05185ff17656d11e9eb88170e8f30e5efb4 languageName: node linkType: hard -"@radix-ui/react-use-size@npm:1.0.0": +"@radix-ui/react-slot@npm:1.0.0": version: 1.0.0 - resolution: "@radix-ui/react-use-size@npm:1.0.0" + resolution: "@radix-ui/react-slot@npm:1.0.0" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-use-layout-effect": "npm:1.0.0" + "@radix-ui/react-compose-refs": "npm:1.0.0" peerDependencies: react: ^16.8 || ^17.0 || ^18.0 - checksum: 56a8b2ace55c827ce4ed794bf96798438674ea3b8c805ffd6aa15a98a4884995016a067cf6a2cd2855e00eab387875fbed76c2da0d56e74a8e7f434a0cba96e1 + checksum: a02573ae7c637b16a72d8511d879db37f33cf35b34b8d2cfe507ba8312abbb8e4075b0cb8cd39c5ba89ce341045375f83634457113256321e7a4c3c3638d2955 languageName: node linkType: hard -"@radix-ui/react-use-size@npm:1.0.1": +"@radix-ui/react-slot@npm:1.0.1": version: 1.0.1 - resolution: "@radix-ui/react-use-size@npm:1.0.1" + resolution: "@radix-ui/react-slot@npm:1.0.1" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-use-layout-effect": "npm:1.0.1" + "@radix-ui/react-compose-refs": "npm:1.0.0" peerDependencies: - "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: b109a4b3781781c4dc641a1173f0a6fcb0b0f7b2d7cdba5848a46070c9fb4e518909a46c20a3c2efbc78737c64859c59ead837f2940e8c8394d1c503ef58773b + checksum: 5d6c3fe567dec7ac55a581e1fe6a5a5a4bdde32cf17bf022ebe3f96bae3b274ba02ddaa1028ba8413ab4088bd1fca23479de8739cf42eea73e5ce02ee3e8bb70 languageName: node linkType: hard -"@radix-ui/react-visually-hidden@npm:1.0.2": +"@radix-ui/react-slot@npm:1.0.2": version: 1.0.2 - resolution: "@radix-ui/react-visually-hidden@npm:1.0.2" + resolution: "@radix-ui/react-slot@npm:1.0.2" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-primitive": "npm:1.0.2" + "@radix-ui/react-compose-refs": "npm:1.0.1" peerDependencies: + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: c9ae668af539cbeb13fdd9d41799676f40d68cd349ffe62a47040ec1cea7cd49008c67359ca133ac55d85c450d40484934962c9135c9b2855b24fb3918cdc82a + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 3af6ea4891e6fa8091e666802adffe7718b3cd390a10fa9229a5f40f8efded9f3918ea01b046103d93923d41cc32119505ebb6bde76cad07a87b6cf4f2119347 languageName: node linkType: hard -"@radix-ui/react-visually-hidden@npm:1.0.3": - version: 1.0.3 - resolution: "@radix-ui/react-visually-hidden@npm:1.0.3" +"@radix-ui/react-slot@npm:1.0.2-rc.8": + version: 1.0.2-rc.8 + resolution: "@radix-ui/react-slot@npm:1.0.2-rc.8" dependencies: "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-primitive": "npm:1.0.3" + "@radix-ui/react-compose-refs": "npm:1.0.1-rc.3" peerDependencies: "@types/react": "*" - "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: "@types/react": optional: true - "@types/react-dom": - optional: true - checksum: 0cbc12c2156b3fa0e40090cafd8525ce84c16a6b5a038a8e8fc7cbb16ed6da9ab369593962c57a18c41a16ec8713e0195c68ea34072ef1ca254ed4d4c0770bb4 + checksum: c97aaf9d37cca5f6bc87caa0659d5237367ac6f4e24c2e1eb441158ee2c0ba30b4b06efc6464891423e6c0c0300fb8a3701ce35d210c0f84a91f118d8700fe3f languageName: node linkType: hard -"@radix-ui/rect@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/rect@npm:1.0.0" +"@radix-ui/react-slot@npm:1.1.0, @radix-ui/react-slot@npm:^1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-slot@npm:1.1.0" dependencies: - "@babel/runtime": "npm:^7.13.10" - checksum: 22a06c958a5830b5706715c2850e3759219dc4a481d469ec3f65e926661004fcd7114270ada501b1d638ba76e351e13b3b28b1ae665b98b0e51aba78cd38ed8e + "@radix-ui/react-compose-refs": "npm:1.1.0" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: a2e8bfb70c440506dd84a1a274f9a8bc433cca37ceae275e53552c9122612e3837744d7fc6f113d6ef1a11491aa914f4add71d76de41cb6d4db72547a8e261ae languageName: node linkType: hard -"@radix-ui/rect@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/rect@npm:1.0.1" +"@radix-ui/react-tabs@npm:^1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-tabs@npm:1.0.3" dependencies: "@babel/runtime": "npm:^7.13.10" - checksum: 4c5159661340acc31b11e1f2ebd87a1521d39bfa287544dd2cd75b399539a4b625d38a1501c90ceae21fcca18ed164b0c3735817ff140ae334098192c110e571 - languageName: node - linkType: hard - -"@react-leaflet/core@npm:^2.1.0": - version: 2.1.0 - resolution: "@react-leaflet/core@npm:2.1.0" + "@radix-ui/primitive": "npm:1.0.0" + "@radix-ui/react-context": "npm:1.0.0" + "@radix-ui/react-direction": "npm:1.0.0" + "@radix-ui/react-id": "npm:1.0.0" + "@radix-ui/react-presence": "npm:1.0.0" + "@radix-ui/react-primitive": "npm:1.0.2" + "@radix-ui/react-roving-focus": "npm:1.0.3" + "@radix-ui/react-use-controllable-state": "npm:1.0.0" peerDependencies: - leaflet: ^1.9.0 - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: d5218c79ab9decd458e1fa8a0ec3757542e3ea4e569afa151a32ef0e9ceb63a13174f3fbc740fe0d514df8b0b3e30d913bfb0b8b661dac13924934d7e430bfc9 - languageName: node - linkType: hard - -"@remix-run/router@npm:1.3.3": - version: 1.3.3 - resolution: "@remix-run/router@npm:1.3.3" - checksum: e64594e5dea4e3228e84911535fa67023fd7feb2534e43e51b599a6bcd1cfa20f8ee5680416fb7963d882b5866d76f3979508e1db33451db3c8ff3622bb9dbdf - languageName: node - linkType: hard - -"@rollup/pluginutils@npm:^4.2.1": - version: 4.2.1 - resolution: "@rollup/pluginutils@npm:4.2.1" - dependencies: - estree-walker: "npm:^2.0.1" - picomatch: "npm:^2.2.2" - checksum: 3ee56b2c8f1ed8dfd0a92631da1af3a2dfdd0321948f089b3752b4de1b54dc5076701eadd0e5fc18bd191b77af594ac1db6279e83951238ba16bf8a414c64c48 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: af7b1343aefb2cadc82ff70773faa84006706dbe211f5d9fc3120ac5ff3705e6a2ee89ddc555e5c84a156efdf137ae923d569edc6c41a1fb0835c860a7a0fb5f languageName: node linkType: hard -"@rollup/pluginutils@npm:^5.0.2, @rollup/pluginutils@npm:^5.0.4": - version: 5.0.5 - resolution: "@rollup/pluginutils@npm:5.0.5" +"@radix-ui/react-toggle-group@npm:^1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-toggle-group@npm:1.1.0" dependencies: - "@types/estree": "npm:^1.0.0" - estree-walker: "npm:^2.0.2" - picomatch: "npm:^2.3.1" + "@radix-ui/primitive": "npm:1.1.0" + "@radix-ui/react-context": "npm:1.1.0" + "@radix-ui/react-direction": "npm:1.1.0" + "@radix-ui/react-primitive": "npm:2.0.0" + "@radix-ui/react-roving-focus": "npm:1.1.0" + "@radix-ui/react-toggle": "npm:1.1.0" + "@radix-ui/react-use-controllable-state": "npm:1.1.0" peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + "@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: - rollup: + "@types/react": + optional: true + "@types/react-dom": optional: true - checksum: 18a1f5a9afa993a76663cc2102169cd546786b39a3e92bdc8a2a0b408b509d070a02b20970a30daa9d5d0b1b591b5e7734add84b3aaf263178aef5a26cfab2cf + checksum: 041ac1ba365cbf237588649d3b0afb45057fa8b2d26c35fbdbf4c39affb959a53ec2a65bb5ffde76fc95b03835d487f5dfc40c2a83605740608b2b7768becde4 languageName: node linkType: hard -"@sentry-internal/tracing@npm:7.81.1": - version: 7.81.1 - resolution: "@sentry-internal/tracing@npm:7.81.1" +"@radix-ui/react-toggle@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-toggle@npm:1.1.0" dependencies: - "@sentry/core": "npm:7.81.1" - "@sentry/types": "npm:7.81.1" - "@sentry/utils": "npm:7.81.1" - checksum: 580764b33155284724d7eb544f2fcb519ac88fd0ea76ebe4f286b63291fb95dadd88eecea7249ee05bfdc9219ab02529cc6c6b2ffd286dbed420af0e1e4cc65e + "@radix-ui/primitive": "npm:1.1.0" + "@radix-ui/react-primitive": "npm:2.0.0" + "@radix-ui/react-use-controllable-state": "npm: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 + checksum: 68af7280b88e1696f0c5b2dfbb53473d45ccc960dc8ae3326aed6086945696f2a4a9d73305a80cd945fb9d33ccf756a3162041d5e89bb713aa5a5231b636b010 languageName: node linkType: hard -"@sentry/browser@npm:7.81.1": - version: 7.81.1 - resolution: "@sentry/browser@npm:7.81.1" +"@radix-ui/react-tooltip@npm:^1.0.5": + version: 1.0.5 + resolution: "@radix-ui/react-tooltip@npm:1.0.5" dependencies: - "@sentry-internal/tracing": "npm:7.81.1" - "@sentry/core": "npm:7.81.1" - "@sentry/replay": "npm:7.81.1" - "@sentry/types": "npm:7.81.1" - "@sentry/utils": "npm:7.81.1" - checksum: 30003f0419b80e2066485b4ff62acc6608756c94c5c63c165e67221a1f4afb22eabf5e531e097f8ed08cfa49ac7ce366de54affc82904fe56be5df406b66735f + "@babel/runtime": "npm:^7.13.10" + "@radix-ui/primitive": "npm:1.0.0" + "@radix-ui/react-compose-refs": "npm:1.0.0" + "@radix-ui/react-context": "npm:1.0.0" + "@radix-ui/react-dismissable-layer": "npm:1.0.3" + "@radix-ui/react-id": "npm:1.0.0" + "@radix-ui/react-popper": "npm:1.1.1" + "@radix-ui/react-portal": "npm:1.0.2" + "@radix-ui/react-presence": "npm:1.0.0" + "@radix-ui/react-primitive": "npm:1.0.2" + "@radix-ui/react-slot": "npm:1.0.1" + "@radix-ui/react-use-controllable-state": "npm:1.0.0" + "@radix-ui/react-visually-hidden": "npm:1.0.2" + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: 6b90fda91da03d3111fc1c1663fff525f58ae1fa5b0b9927d06991ed226f660b2e9bb559f469e02711f7ce0d35127631b600d13d5e2651450683060b7ad02623 languageName: node linkType: hard -"@sentry/core@npm:7.81.1": - version: 7.81.1 - resolution: "@sentry/core@npm:7.81.1" +"@radix-ui/react-use-callback-ref@npm:1.0.0": + version: 1.0.0 + resolution: "@radix-ui/react-use-callback-ref@npm:1.0.0" dependencies: - "@sentry/types": "npm:7.81.1" - "@sentry/utils": "npm:7.81.1" - checksum: 3bf303d71f0195e996b1be17b40d341b8df32fbe693aea044f31546a2b95e61e9bb772ebfe52768337d77b81c27e806bbad1a963018af388013a6116749b1fa3 + "@babel/runtime": "npm:^7.13.10" + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + checksum: 91bf130d39cfbda61de83fd4a6893cf459b3d72ec01268e3761eafd3c709f70f82940a6b46676ba6fe06fc707fdefe580946b3b99bb2af5f59887aa203e56533 languageName: node linkType: hard -"@sentry/react@npm:^7.81.1": - version: 7.81.1 - resolution: "@sentry/react@npm:7.81.1" +"@radix-ui/react-use-callback-ref@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-callback-ref@npm:1.0.1" dependencies: - "@sentry/browser": "npm:7.81.1" - "@sentry/types": "npm:7.81.1" - "@sentry/utils": "npm:7.81.1" - hoist-non-react-statics: "npm:^3.3.2" + "@babel/runtime": "npm:^7.13.10" peerDependencies: - react: 15.x || 16.x || 17.x || 18.x - checksum: b2f1effc92114b509235c8999fb3e2750666d84de7cae9daf47ebe7fb0b21c57bd3862bf3963ff0d6a546b7144e994309300d6b4a06bbf8ee9530ba1c0fd6397 + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 331b432be1edc960ca148637ae6087220873ee828ceb13bd155926ef8f49e862812de5b379129f6aaefcd11be53715f3237e6caa9a33d9c0abfff43f3ba58938 languageName: node linkType: hard -"@sentry/replay@npm:7.81.1": - version: 7.81.1 - resolution: "@sentry/replay@npm:7.81.1" +"@radix-ui/react-use-callback-ref@npm:1.0.1-rc.3": + version: 1.0.1-rc.3 + resolution: "@radix-ui/react-use-callback-ref@npm:1.0.1-rc.3" dependencies: - "@sentry-internal/tracing": "npm:7.81.1" - "@sentry/core": "npm:7.81.1" - "@sentry/types": "npm:7.81.1" - "@sentry/utils": "npm:7.81.1" - checksum: 8496e87a2f916efcf01ab282e064c68bfa43b4536dcc8788a01a8133e6bb47894c3220c538c06e4a4f2f7530197a9436528d8b931d368d74fae230cf9b391a67 + "@babel/runtime": "npm:^7.13.10" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 7a11e2baf8169a3679a8c2812f09b3fc3ae31adebac1f4581d0ac897f86e108f228af031620d56b518600227cb937d2f0f4abb77b2e16bb9d5338e4376c8ecd2 languageName: node linkType: hard -"@sentry/types@npm:7.81.1": - version: 7.81.1 - resolution: "@sentry/types@npm:7.81.1" - checksum: ee0c400b242b1566d126550421ac2abea772355c4482397e06fbf8e36d3f540f318bcee08c035fbf93f276376a2062fed66061e08a52584e6f93093e321e92ab +"@radix-ui/react-use-callback-ref@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-use-callback-ref@npm:1.1.0" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: e954863f3baa151faf89ac052a5468b42650efca924417470efd1bd254b411a94c69c30de2fdbb90187b38cb984795978e12e30423dc41e4309d93d53b66d819 languageName: node linkType: hard -"@sentry/utils@npm:7.81.1": - version: 7.81.1 - resolution: "@sentry/utils@npm:7.81.1" +"@radix-ui/react-use-controllable-state@npm:1.0.0": + version: 1.0.0 + resolution: "@radix-ui/react-use-controllable-state@npm:1.0.0" dependencies: - "@sentry/types": "npm:7.81.1" - checksum: 3b294427ae945b5bb901113ea8547fc5d00c38bb5973e14dd0d8bfdb6ec5b4cc594752e39ab7c089ea564582e2aa4705a743960130f3d42485b6be29859af0f7 + "@babel/runtime": "npm:^7.13.10" + "@radix-ui/react-use-callback-ref": "npm:1.0.0" + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + checksum: fa2ad3b70bec91b628883455152b7ce19d321199e3677051822c14aa3941901f5fd14cddec1c9ab0998e4061fd3b8397727aef856fec099c419d8e1e3d7f75de languageName: node linkType: hard -"@sinclair/typebox@npm:^0.25.16": - version: 0.25.24 - resolution: "@sinclair/typebox@npm:0.25.24" - checksum: 2faf9878f3a65a1f2855add80b0fe8c6fe83f084ea1ab432fa7506e7c85c55ae121c4af516d089b5737f5fad23b3628fcc83a6a5df29030c3f611185ce0388ac +"@radix-ui/react-use-controllable-state@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-controllable-state@npm:1.0.1" + dependencies: + "@babel/runtime": "npm:^7.13.10" + "@radix-ui/react-use-callback-ref": "npm:1.0.1" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 29b069dbf09e48bca321af6272574ad0fc7283174e7d092731a10663fe00c0e6b4bde5e1b5ea67725fe48dcbe8026e7ff0d69d42891c62cbb9ca408498171fbe languageName: node linkType: hard -"@sinclair/typebox@npm:^0.27.8": - version: 0.27.8 - resolution: "@sinclair/typebox@npm:0.27.8" - checksum: ef6351ae073c45c2ac89494dbb3e1f87cc60a93ce4cde797b782812b6f97da0d620ae81973f104b43c9b7eaa789ad20ba4f6a1359f1cc62f63729a55a7d22d4e +"@radix-ui/react-use-controllable-state@npm:1.0.1-rc.3": + version: 1.0.1-rc.3 + resolution: "@radix-ui/react-use-controllable-state@npm:1.0.1-rc.3" + dependencies: + "@babel/runtime": "npm:^7.13.10" + "@radix-ui/react-use-callback-ref": "npm:1.0.1-rc.3" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 718ef2d79899a8e89bba051e1437052fb809651209dcd9995883407077d8567a278947d64254025ab183096e357fa155f7c36b2e3c62e4ce83acb3c99d97ebdd languageName: node linkType: hard -"@sinonjs/commons@npm:^3.0.0": - version: 3.0.0 - resolution: "@sinonjs/commons@npm:3.0.0" +"@radix-ui/react-use-controllable-state@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-use-controllable-state@npm:1.1.0" dependencies: - type-detect: "npm:4.0.8" - checksum: 1df9cd257942f4e4960dfb9fd339d9e97b6a3da135f3d5b8646562918e863809cb8e00268535f4f4723535d2097881c8fc03d545c414d8555183376cfc54ee84 + "@radix-ui/react-use-callback-ref": "npm:1.1.0" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 2af883b5b25822ac226e60a6bfde647c0123a76345052a90219026059b3f7225844b2c13a9a16fba859c1cda5fb3d057f2a04503f71780e607516492db4eb3a1 languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^10.0.2": - version: 10.3.0 - resolution: "@sinonjs/fake-timers@npm:10.3.0" +"@radix-ui/react-use-escape-keydown@npm:1.0.0": + version: 1.0.0 + resolution: "@radix-ui/react-use-escape-keydown@npm:1.0.0" dependencies: - "@sinonjs/commons": "npm:^3.0.0" - checksum: 2e2fb6cc57f227912814085b7b01fede050cd4746ea8d49a1e44d5a0e56a804663b0340ae2f11af7559ea9bf4d087a11f2f646197a660ea3cb04e19efc04aa63 + "@babel/runtime": "npm:^7.13.10" + "@radix-ui/react-use-callback-ref": "npm:1.0.0" + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + checksum: a64e8dbd0e37b53c6cb9f370923afbf29646d6c28dcadd2a7076451692b70263916b9926322ecd7cc3975b2a5111903ec5abcda7e389b35ef197eb1aba17be38 languageName: node linkType: hard -"@storybook/addon-actions@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-actions@npm:7.5.3" +"@radix-ui/react-use-escape-keydown@npm:1.0.2": + version: 1.0.2 + resolution: "@radix-ui/react-use-escape-keydown@npm:1.0.2" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - dequal: "npm:^2.0.2" - lodash: "npm:^4.17.21" - polished: "npm:^4.2.2" - prop-types: "npm:^15.7.2" - react-inspector: "npm:^6.0.0" - telejson: "npm:^7.2.0" - ts-dedent: "npm:^2.0.0" - uuid: "npm:^9.0.0" + "@babel/runtime": "npm:^7.13.10" + "@radix-ui/react-use-callback-ref": "npm:1.0.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: c9077396239e03370a6010f6cf60cfa566fab7e39c013d887f78398a17b29774d34991eaa8560add3692c25a12ac1db01b15b7a8552709b1d700aac0b7e24c5f + react: ^16.8 || ^17.0 || ^18.0 + checksum: 0bdecc9f19cba2d491eca7eac0adad8bac687b37d5886618801b2ed3dc831623a6437f3771aa0797b32fa909ca3a2ca5be1176ac23147bc5fe68533115dc5c13 languageName: node linkType: hard -"@storybook/addon-backgrounds@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-backgrounds@npm:7.5.3" +"@radix-ui/react-use-escape-keydown@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-use-escape-keydown@npm:1.0.3" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - memoizerific: "npm:^1.11.3" - ts-dedent: "npm:^2.0.0" + "@babel/runtime": "npm:^7.13.10" + "@radix-ui/react-use-callback-ref": "npm:1.0.1" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: - react: - optional: true - react-dom: + "@types/react": optional: true - checksum: 70308dbec3cc77e3978d1036e5dc442c3ec84904d5d44e877c286d1db56d7f0d87dc5eea1284160006111b10e2e57f9b4c55025fd953dbcc3717a5e9c6025d63 + checksum: 3c94c78902dcb40b60083ee2184614f45c95a189178f52d89323b467bd04bcf5fdb1bc4d43debecd7f0b572c3843c7e04edbcb56f40a4b4b43936fb2770fb8ad languageName: node linkType: hard -"@storybook/addon-controls@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-controls@npm:7.5.3" +"@radix-ui/react-use-escape-keydown@npm:1.0.3-rc.3": + version: 1.0.3-rc.3 + resolution: "@radix-ui/react-use-escape-keydown@npm:1.0.3-rc.3" dependencies: - "@storybook/blocks": "npm:7.5.3" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-common": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - lodash: "npm:^4.17.21" - ts-dedent: "npm:^2.0.0" + "@babel/runtime": "npm:^7.13.10" + "@radix-ui/react-use-callback-ref": "npm:1.0.1-rc.3" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: - react: - optional: true - react-dom: + "@types/react": optional: true - checksum: 43d39c726ff9c21aab0472f0b56e17633b2c1bc4ad3c445b0e718eff92efde29a3c6c5b4d3cd50841c9d03fe6b8231873e9dedf178e4b11efaa79ff717ca25b3 - languageName: node - linkType: hard - -"@storybook/addon-docs@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-docs@npm:7.5.3" - dependencies: - "@jest/transform": "npm:^29.3.1" - "@mdx-js/react": "npm:^2.1.5" - "@storybook/blocks": "npm:7.5.3" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/csf-plugin": "npm:7.5.3" - "@storybook/csf-tools": "npm:7.5.3" - "@storybook/global": "npm:^5.0.0" - "@storybook/mdx2-csf": "npm:^1.0.0" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/postinstall": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/react-dom-shim": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - fs-extra: "npm:^11.1.0" - remark-external-links: "npm:^8.0.0" - remark-slug: "npm:^6.0.0" - ts-dedent: "npm:^2.0.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: a54f608cbf9f67db3dde5c2fc8ce05579a2a3ca449cf52a919535710881d88d6548fffad8c1fc7964a16d6e68578a85b5cf1ab3d15b691a0154d94ab444feab1 - languageName: node - linkType: hard - -"@storybook/addon-essentials@npm:^7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-essentials@npm:7.5.3" - dependencies: - "@storybook/addon-actions": "npm:7.5.3" - "@storybook/addon-backgrounds": "npm:7.5.3" - "@storybook/addon-controls": "npm:7.5.3" - "@storybook/addon-docs": "npm:7.5.3" - "@storybook/addon-highlight": "npm:7.5.3" - "@storybook/addon-measure": "npm:7.5.3" - "@storybook/addon-outline": "npm:7.5.3" - "@storybook/addon-toolbars": "npm:7.5.3" - "@storybook/addon-viewport": "npm:7.5.3" - "@storybook/core-common": "npm:7.5.3" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - ts-dedent: "npm:^2.0.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 4f74cb0558c965b04e955004f8902464341bc87f790d6b80b2824a8707b4038ca3334634f7a0e29c814de913b38eb1e116bb58db86f8819ea37bd5d6cb927a39 - languageName: node - linkType: hard - -"@storybook/addon-highlight@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-highlight@npm:7.5.3" - dependencies: - "@storybook/core-events": "npm:7.5.3" - "@storybook/global": "npm:^5.0.0" - "@storybook/preview-api": "npm:7.5.3" - checksum: d0d8665682bcbc4241489e75695dba4fa831803ddbe17c0936dc7a1e1981237f8698b6b228031594def37a2df9a7ce217afc279aa4f3af052c67c2579972bf70 + checksum: 36c9de0f144868d70c6471e50a8bc7b2c1c9be71aebb85a8492bf8d2853045472ff8faad7e792947eba39124988a216c37d97c95e67b8d33c3b3c700d0dcc3c5 languageName: node linkType: hard -"@storybook/addon-interactions@npm:^7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-interactions@npm:7.5.3" +"@radix-ui/react-use-escape-keydown@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-use-escape-keydown@npm:1.1.0" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-common": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/global": "npm:^5.0.0" - "@storybook/instrumenter": "npm:7.5.3" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - jest-mock: "npm:^27.0.6" - polished: "npm:^4.2.2" - ts-dedent: "npm:^2.2.0" + "@radix-ui/react-use-callback-ref": "npm:1.1.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - react: - optional: true - react-dom: + "@types/react": optional: true - checksum: e9c4b42e781a56f151687a8c116bcdfd2033ff104af66d2e802f35d6f1fc859c1b312186946836cd4be7ebba8b85487c9f4a17b0b2d54778cd88066fc7ed03d5 + checksum: 910fd696e5a0994b0e06b9cb68def8a865f47951a013ec240c77db2a9e1e726105602700ef5e5f01af49f2f18fe0e73164f9a9651021f28538ef8a30d91f3fbb languageName: node linkType: hard -"@storybook/addon-links@npm:^7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-links@npm:7.5.3" +"@radix-ui/react-use-layout-effect@npm:1.0.0": + version: 1.0.0 + resolution: "@radix-ui/react-use-layout-effect@npm:1.0.0" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/csf": "npm:^0.1.0" - "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/router": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - prop-types: "npm:^15.7.2" - ts-dedent: "npm:^2.0.0" + "@babel/runtime": "npm:^7.13.10" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: 5ac8ccf17be8a2029a028cb1e680bcc24ea937b60e5a1d785018668b4388809c5a42744ec4a9c17d1e6571241298c7f4de0750ab32feed49b82ac32aa4d6dcbc + react: ^16.8 || ^17.0 || ^18.0 + checksum: 04bbcddbfaa2863cbd64978b70925d0a0b664131f8c33a518b0df2866966840b3d72302258b0f8cb7ed45b50b6d52d6cbdca00cc159c47f323eb8d7b70126d83 languageName: node linkType: hard -"@storybook/addon-measure@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-measure@npm:7.5.3" +"@radix-ui/react-use-layout-effect@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-layout-effect@npm:1.0.1" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - tiny-invariant: "npm:^1.3.1" + "@babel/runtime": "npm:^7.13.10" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: - react: - optional: true - react-dom: + "@types/react": optional: true - checksum: 48a7bf4d6b252ec1b892ece3ee0bf3385ede2aa7a284f49443fe77d36d64cc12366051a6ad3b403da7282f2e631253722b76cf7310f0110c5da812fa27c8cc6b + checksum: 13cd0c38395c5838bc9a18238020d3bcf67fb340039e6d1cbf438be1b91d64cf6900b78121f3dc9219faeb40dcc7b523ce0f17e4a41631655690e5a30a40886a languageName: node linkType: hard -"@storybook/addon-outline@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-outline@npm:7.5.3" +"@radix-ui/react-use-layout-effect@npm:1.0.1-rc.3": + version: 1.0.1-rc.3 + resolution: "@radix-ui/react-use-layout-effect@npm:1.0.1-rc.3" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - ts-dedent: "npm:^2.0.0" + "@babel/runtime": "npm:^7.13.10" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: - react: - optional: true - react-dom: + "@types/react": optional: true - checksum: 754413dc06a7fc4a0e0bd8e64553443afd0930b387ddeec5b32ef1e84ba9740d0944f9e60d793d8797fd588400c09fdfb3c5aa9330955bb4967e0b1c1fa3f309 + checksum: 657cc331948ce846840bf9a9161bd70858d93464d0d888d115c3ad7327b94a55013bd3d0cf27724e9d296eaf845cf33861fe1c0074ad2de6f81208fa5e285793 languageName: node linkType: hard -"@storybook/addon-toolbars@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-toolbars@npm:7.5.3" - dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" +"@radix-ui/react-use-layout-effect@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-use-layout-effect@npm:1.1.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - react: - optional: true - react-dom: + "@types/react": optional: true - checksum: d0c393c9e16b14654fdc92a78eaf20b2c0685fa1ac9c1d1011c11e72cc5ad69a187ef7ac2e6568e3a77c32a53c524da126b55f3d7a31d97d958bc809d34b79c8 + checksum: 9bf87ece1845c038ed95863cfccf9d75f557c2400d606343bab0ab3192b9806b9840e6aa0a0333fdf3e83cf9982632852192f3e68d7d8367bc8c788dfdf8e62b languageName: node linkType: hard -"@storybook/addon-viewport@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-viewport@npm:7.5.3" +"@radix-ui/react-use-previous@npm:1.0.0": + version: 1.0.0 + resolution: "@radix-ui/react-use-previous@npm:1.0.0" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - memoizerific: "npm:^1.11.3" - prop-types: "npm:^15.7.2" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: 50207e3bb943ea43914513324fc35c8036556a797c20f1b66bf89615a7158450652d78bbe9ae09a11c539d4dcfeb8a716f1bb41d92e3fecca61aa1ac5bf8646f - languageName: node - linkType: hard - -"@storybook/blocks@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/blocks@npm:7.5.3" - dependencies: - "@storybook/channels": "npm:7.5.3" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/csf": "npm:^0.1.0" - "@storybook/docs-tools": "npm:7.5.3" - "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - "@types/lodash": "npm:^4.14.167" - color-convert: "npm:^2.0.1" - dequal: "npm:^2.0.2" - lodash: "npm:^4.17.21" - markdown-to-jsx: "npm:^7.1.8" - memoizerific: "npm:^1.11.3" - polished: "npm:^4.2.2" - react-colorful: "npm:^5.1.2" - telejson: "npm:^7.2.0" - tocbot: "npm:^4.20.1" - ts-dedent: "npm:^2.0.0" - util-deprecate: "npm:^1.0.2" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: d7036bea0ff1137063dd7aab28a6fe2e114809127b7f53aadfae272b752b1ffaaf54ec8cbdff689da54285d64cfff58108885fe8f937748efc71a7bbdae0bf75 - languageName: node - linkType: hard - -"@storybook/builder-manager@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/builder-manager@npm:7.5.3" - dependencies: - "@fal-works/esbuild-plugin-global-externals": "npm:^2.1.2" - "@storybook/core-common": "npm:7.5.3" - "@storybook/manager": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@types/ejs": "npm:^3.1.1" - "@types/find-cache-dir": "npm:^3.2.1" - "@yarnpkg/esbuild-plugin-pnp": "npm:^3.0.0-rc.10" - browser-assert: "npm:^1.2.1" - ejs: "npm:^3.1.8" - esbuild: "npm:^0.18.0" - esbuild-plugin-alias: "npm:^0.2.1" - express: "npm:^4.17.3" - find-cache-dir: "npm:^3.0.0" - fs-extra: "npm:^11.1.0" - process: "npm:^0.11.10" - util: "npm:^0.12.4" - checksum: 35ed5138a7b7fd968539a3b177a3b8b9a2eff4ddea0a05eb1134188a5c14c0d4334a8e7ac6e5bb5a2eea0c1fe7eec079eee7e056a9584933fd1e9f01def98157 - languageName: node - linkType: hard - -"@storybook/builder-vite@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/builder-vite@npm:7.5.3" - dependencies: - "@storybook/channels": "npm:7.5.3" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-common": "npm:7.5.3" - "@storybook/csf-plugin": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/preview": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - "@types/find-cache-dir": "npm:^3.2.1" - browser-assert: "npm:^1.2.1" - es-module-lexer: "npm:^0.9.3" - express: "npm:^4.17.3" - find-cache-dir: "npm:^3.0.0" - fs-extra: "npm:^11.1.0" - magic-string: "npm:^0.30.0" - rollup: "npm:^2.25.0 || ^3.3.0" + "@babel/runtime": "npm:^7.13.10" peerDependencies: - "@preact/preset-vite": "*" - typescript: ">= 4.3.x" - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - vite-plugin-glimmerx: "*" - peerDependenciesMeta: - "@preact/preset-vite": - optional: true - typescript: - optional: true - vite-plugin-glimmerx: - optional: true - checksum: f6dcb2935cae22d07bb20d0f248019fc9130f4fcfd1d1457d5776378642799cdddc19a8011a88bde899b984eb342a197725106112c781a8281f4cfa333b8a8c6 + react: ^16.8 || ^17.0 || ^18.0 + checksum: a6e3d0f7ae61e741fabd729cb0d26a02933249091a57aee1182e6880ad65f4fded486e5353eae930208fd33ec2ae8fd4853cd97a12c582c262dc934d5e723acc languageName: node linkType: hard -"@storybook/channels@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/channels@npm:7.5.3" - dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/global": "npm:^5.0.0" - qs: "npm:^6.10.0" - telejson: "npm:^7.2.0" - tiny-invariant: "npm:^1.3.1" - checksum: 875977b663c0d9d82e47206fa94bbe2f072b2e8700e1f7bec9a0848bbc368247c270d1823221b3455292dd68cc580483a03849bc43e92c551b2224932ff57f92 +"@radix-ui/react-use-previous@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-use-previous@npm:1.1.0" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 9787d24790d4e330715127f2f4db56c4cbed9b0a47f97e11a68582c08a356a53c1ec41c7537382f6fb8d0db25de152770f17430e8eaf0fa59705be97760acbad languageName: node linkType: hard -"@storybook/cli@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/cli@npm:7.5.3" +"@radix-ui/react-use-rect@npm:1.0.0": + version: 1.0.0 + resolution: "@radix-ui/react-use-rect@npm:1.0.0" dependencies: - "@babel/core": "npm:^7.22.9" - "@babel/preset-env": "npm:^7.22.9" - "@babel/types": "npm:^7.22.5" - "@ndelangen/get-tarball": "npm:^3.0.7" - "@storybook/codemod": "npm:7.5.3" - "@storybook/core-common": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/core-server": "npm:7.5.3" - "@storybook/csf-tools": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/telemetry": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - "@types/semver": "npm:^7.3.4" - "@yarnpkg/fslib": "npm:2.10.3" - "@yarnpkg/libzip": "npm:2.3.0" - chalk: "npm:^4.1.0" - commander: "npm:^6.2.1" - cross-spawn: "npm:^7.0.3" - detect-indent: "npm:^6.1.0" - envinfo: "npm:^7.7.3" - execa: "npm:^5.0.0" - express: "npm:^4.17.3" - find-up: "npm:^5.0.0" - fs-extra: "npm:^11.1.0" - get-npm-tarball-url: "npm:^2.0.3" - get-port: "npm:^5.1.1" - giget: "npm:^1.0.0" - globby: "npm:^11.0.2" - jscodeshift: "npm:^0.14.0" - leven: "npm:^3.1.0" - ora: "npm:^5.4.1" - prettier: "npm:^2.8.0" - prompts: "npm:^2.4.0" - puppeteer-core: "npm:^2.1.1" - read-pkg-up: "npm:^7.0.1" - semver: "npm:^7.3.7" - simple-update-notifier: "npm:^2.0.0" - strip-json-comments: "npm:^3.0.1" - tempy: "npm:^1.0.1" - ts-dedent: "npm:^2.0.0" - util-deprecate: "npm:^1.0.2" - bin: - getstorybook: ./bin/index.js - sb: ./bin/index.js - checksum: 8d1e694fb39d805482f5b61fa9b2c4fcc5fa70cfe97ba64e0be220b73faaf69454e7347f1630618e53e6c3abb6c152c57df72f6b93b103a172b8930f4286f480 + "@babel/runtime": "npm:^7.13.10" + "@radix-ui/rect": "npm:1.0.0" + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + checksum: 56e2322e7b4564301324f2e6f37dd9862a5a43bf79484eb4d0b95b66aa539f03fa24dc31549711d5f2fafe9821a5a93f4e76254eaf34bc6b81d25d024a9a3cbb languageName: node linkType: hard -"@storybook/client-logger@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/client-logger@npm:7.5.3" +"@radix-ui/react-use-rect@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-rect@npm:1.0.1" dependencies: - "@storybook/global": "npm:^5.0.0" - checksum: 43997b47a4e49b38c599a08de1cec7a6ae6f000ec35a1d676522325aba60bc11507ad18cb0f40954bcfd77dfbb853493687e4e8fd88e2fdac07cd282ecc0d0bf + "@babel/runtime": "npm:^7.13.10" + "@radix-ui/rect": "npm:1.0.1" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 94c5ab31dfd3678c0cb77a30025e82b3a287577c1a8674b0d703a36d27434bc9c59790e0bebf57ed153f0b8e0d8c3b9675fc9787b9eac525a09abcda8fa9e7eb languageName: node linkType: hard -"@storybook/codemod@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/codemod@npm:7.5.3" +"@radix-ui/react-use-rect@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-use-rect@npm:1.1.0" dependencies: - "@babel/core": "npm:^7.22.9" - "@babel/preset-env": "npm:^7.22.9" - "@babel/types": "npm:^7.22.5" - "@storybook/csf": "npm:^0.1.0" - "@storybook/csf-tools": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - "@types/cross-spawn": "npm:^6.0.2" - cross-spawn: "npm:^7.0.3" - globby: "npm:^11.0.2" - jscodeshift: "npm:^0.14.0" - lodash: "npm:^4.17.21" - prettier: "npm:^2.8.0" - recast: "npm:^0.23.1" - checksum: 83c3e2306a00e2351b1a9930fe1a85eeffb5cee5a92946339352094c01d6d5c223ec3be075e35e7d1abd9957a69046d32f414625cfc245c6b567d76443567c20 + "@radix-ui/rect": "npm:1.1.0" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: c2e30150ab49e2cec238cda306fd748c3d47fb96dcff69a3b08e1d19108d80bac239d48f1747a25dadca614e3e967267d43b91e60ea59db2befbc7bea913ff84 languageName: node linkType: hard -"@storybook/components@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/components@npm:7.5.3" +"@radix-ui/react-use-size@npm:1.0.0": + version: 1.0.0 + resolution: "@radix-ui/react-use-size@npm:1.0.0" dependencies: - "@radix-ui/react-select": "npm:^1.2.2" - "@radix-ui/react-toolbar": "npm:^1.0.4" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/csf": "npm:^0.1.0" - "@storybook/global": "npm:^5.0.0" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - memoizerific: "npm:^1.11.3" - use-resize-observer: "npm:^9.1.0" - util-deprecate: "npm:^1.0.2" + "@babel/runtime": "npm:^7.13.10" + "@radix-ui/react-use-layout-effect": "npm:1.0.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 7d25a5fa2d7c8686c455ee260989e2cf5c0ad3e9d8ba1093a1e43c5647775c06ef79c084b539cbc9fee4753ee175759a7d0e2715d22c7b929687620ad9f4e841 + react: ^16.8 || ^17.0 || ^18.0 + checksum: 56a8b2ace55c827ce4ed794bf96798438674ea3b8c805ffd6aa15a98a4884995016a067cf6a2cd2855e00eab387875fbed76c2da0d56e74a8e7f434a0cba96e1 languageName: node linkType: hard -"@storybook/core-client@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/core-client@npm:7.5.3" +"@radix-ui/react-use-size@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-size@npm:1.0.1" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - checksum: 41c21431f803843c2cf43c72685f10df9282fbe0730623000979296e864770d38c444b4812ed81e6a14bdbfc7ad778761b5c68dd27a8888029cb23e6f82cb1c3 + "@babel/runtime": "npm:^7.13.10" + "@radix-ui/react-use-layout-effect": "npm:1.0.1" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: b109a4b3781781c4dc641a1173f0a6fcb0b0f7b2d7cdba5848a46070c9fb4e518909a46c20a3c2efbc78737c64859c59ead837f2940e8c8394d1c503ef58773b languageName: node linkType: hard -"@storybook/core-common@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/core-common@npm:7.5.3" +"@radix-ui/react-use-size@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-use-size@npm:1.1.0" dependencies: - "@storybook/core-events": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - "@types/find-cache-dir": "npm:^3.2.1" - "@types/node": "npm:^18.0.0" - "@types/node-fetch": "npm:^2.6.4" - "@types/pretty-hrtime": "npm:^1.0.0" - chalk: "npm:^4.1.0" - esbuild: "npm:^0.18.0" - esbuild-register: "npm:^3.5.0" - file-system-cache: "npm:2.3.0" - find-cache-dir: "npm:^3.0.0" - find-up: "npm:^5.0.0" - fs-extra: "npm:^11.1.0" - glob: "npm:^10.0.0" - handlebars: "npm:^4.7.7" - lazy-universal-dotenv: "npm:^4.0.0" - node-fetch: "npm:^2.0.0" - picomatch: "npm:^2.3.0" - pkg-dir: "npm:^5.0.0" - pretty-hrtime: "npm:^1.0.3" - resolve-from: "npm:^5.0.0" - ts-dedent: "npm:^2.0.0" - checksum: f099aca961729abaeafdf224e61da64237632bf13088dea703d13036c89d7b0a188ce4ac4b0d26d40523ddb8b8d12a64a26dac2c5514f7ed7939c47340acba4f - languageName: node - linkType: hard - -"@storybook/core-events@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/core-events@npm:7.5.3" - dependencies: - ts-dedent: "npm:^2.0.0" - checksum: 2c0db835f840e8001928cc032b55531f9225eb146aaf069437925c2f55ad28a15eea287885c3cd59b9be3bb31822dc427fe9a33d79bc0861ceb3f6ee5395766d - languageName: node - linkType: hard - -"@storybook/core-server@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/core-server@npm:7.5.3" - dependencies: - "@aw-web-design/x-default-browser": "npm:1.4.126" - "@discoveryjs/json-ext": "npm:^0.5.3" - "@storybook/builder-manager": "npm:7.5.3" - "@storybook/channels": "npm:7.5.3" - "@storybook/core-common": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/csf": "npm:^0.1.0" - "@storybook/csf-tools": "npm:7.5.3" - "@storybook/docs-mdx": "npm:^0.1.0" - "@storybook/global": "npm:^5.0.0" - "@storybook/manager": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/telemetry": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - "@types/detect-port": "npm:^1.3.0" - "@types/node": "npm:^18.0.0" - "@types/pretty-hrtime": "npm:^1.0.0" - "@types/semver": "npm:^7.3.4" - better-opn: "npm:^3.0.2" - chalk: "npm:^4.1.0" - cli-table3: "npm:^0.6.1" - compression: "npm:^1.7.4" - detect-port: "npm:^1.3.0" - express: "npm:^4.17.3" - fs-extra: "npm:^11.1.0" - globby: "npm:^11.0.2" - ip: "npm:^2.0.0" - lodash: "npm:^4.17.21" - open: "npm:^8.4.0" - pretty-hrtime: "npm:^1.0.3" - prompts: "npm:^2.4.0" - read-pkg-up: "npm:^7.0.1" - semver: "npm:^7.3.7" - telejson: "npm:^7.2.0" - tiny-invariant: "npm:^1.3.1" - ts-dedent: "npm:^2.0.0" - util: "npm:^0.12.4" - util-deprecate: "npm:^1.0.2" - watchpack: "npm:^2.2.0" - ws: "npm:^8.2.3" - checksum: 6fa783f3efbd6e2cbfb2d29c8d4da8c5bf6daa0c1615bd6484bfd92115c45295fc91de095961f178cb28f5e95cc73c62f67d59c53c5d972ba3fdd1e086d006f4 + "@radix-ui/react-use-layout-effect": "npm:1.1.0" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 4c8b89037597fdc1824d009e0c941b510c7c6c30f83024cc02c934edd748886786e7d9f36f57323b02ad29833e7fa7e8974d81969b4ab33d8f41661afa4f30a6 languageName: node linkType: hard -"@storybook/csf-plugin@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/csf-plugin@npm:7.5.3" +"@radix-ui/react-visually-hidden@npm:1.0.2": + version: 1.0.2 + resolution: "@radix-ui/react-visually-hidden@npm:1.0.2" dependencies: - "@storybook/csf-tools": "npm:7.5.3" - unplugin: "npm:^1.3.1" - checksum: 700ef994b1694faf5955d37e52569b8e20f15d800c3aa8ff4a24b02f5a0cf1467a07d72149314b46de477bb710d7d523ca05b20f97f953b28323aa41b30930da + "@babel/runtime": "npm:^7.13.10" + "@radix-ui/react-primitive": "npm:1.0.2" + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: c9ae668af539cbeb13fdd9d41799676f40d68cd349ffe62a47040ec1cea7cd49008c67359ca133ac55d85c450d40484934962c9135c9b2855b24fb3918cdc82a languageName: node linkType: hard -"@storybook/csf-tools@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/csf-tools@npm:7.5.3" +"@radix-ui/react-visually-hidden@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-visually-hidden@npm:1.1.0" dependencies: - "@babel/generator": "npm:^7.22.9" - "@babel/parser": "npm:^7.22.7" - "@babel/traverse": "npm:^7.22.8" - "@babel/types": "npm:^7.22.5" - "@storybook/csf": "npm:^0.1.0" - "@storybook/types": "npm:7.5.3" - fs-extra: "npm:^11.1.0" - recast: "npm:^0.23.1" - ts-dedent: "npm:^2.0.0" - checksum: d92300f8bb1c70b2313f3fe8fdae5a88fd46b8ca6403ac74543b695289bddd827a7ed8e46b31b1ebc87c5a3b5f4c07a3652f05ff00e85a66df5159bbfc36e2df + "@radix-ui/react-primitive": "npm:2.0.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 + checksum: db138dd5f3c94958a9f836740d4408c89c4a73e770eaba5ead921e69b3c0d196c5cd58323d82829a9bc05a74873c299195dfd8366b9808e53a9a3dbca5a1e5fe languageName: node linkType: hard -"@storybook/csf@npm:^0.0.1": - version: 0.0.1 - resolution: "@storybook/csf@npm:0.0.1" +"@radix-ui/rect@npm:1.0.0": + version: 1.0.0 + resolution: "@radix-ui/rect@npm:1.0.0" dependencies: - lodash: "npm:^4.17.15" - checksum: 7b0f75763415f9147692a460b44417ee56ea9639433716a1fd4d1df4c8b0221cbc71b8da0fbed4dcecb3ccd6c7ed64be39f5c255c713539a6088a1d6488aaa24 + "@babel/runtime": "npm:^7.13.10" + checksum: 22a06c958a5830b5706715c2850e3759219dc4a481d469ec3f65e926661004fcd7114270ada501b1d638ba76e351e13b3b28b1ae665b98b0e51aba78cd38ed8e languageName: node linkType: hard -"@storybook/csf@npm:^0.1.0": - version: 0.1.1 - resolution: "@storybook/csf@npm:0.1.1" +"@radix-ui/rect@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/rect@npm:1.0.1" dependencies: - type-fest: "npm:^2.19.0" - checksum: 999bb87fbbe047a559bbaa5baf2ed84872fcd5cdcae3c1169f8e4c641eefe8759d09a09034a78ed114032c0e5cf6301b7fa89e5e3ce60d75cf0bd5e33ec0a6e7 + "@babel/runtime": "npm:^7.13.10" + checksum: 4c5159661340acc31b11e1f2ebd87a1521d39bfa287544dd2cd75b399539a4b625d38a1501c90ceae21fcca18ed164b0c3735817ff140ae334098192c110e571 languageName: node linkType: hard -"@storybook/docs-mdx@npm:^0.1.0": - version: 0.1.0 - resolution: "@storybook/docs-mdx@npm:0.1.0" - checksum: e4d510f0452a7a3cb09d9617920c18b974f836299dfba38d6b2e62fbfea418d71f340b6c280a87201b1336a7221c7cc16b47794c1f8e81d01dcfa1f599343085 +"@radix-ui/rect@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/rect@npm:1.1.0" + checksum: a26ff7f8708fb5f2f7949baad70a6b2a597d761ee4dd4aadaf1c1a33ea82ea23dfef6ce6366a08310c5d008cdd60b2e626e4ee03fa342bd5f246ddd9d427f6be languageName: node linkType: hard -"@storybook/docs-tools@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/docs-tools@npm:7.5.3" - dependencies: - "@storybook/core-common": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - "@types/doctrine": "npm:^0.0.3" - doctrine: "npm:^3.0.0" - lodash: "npm:^4.17.21" - checksum: 1726947cbe552531831df426f55e297e2ad8dce5af274ab09ba52aa667f656420705301a34776d38a503728e86f4b6a4301566dfa543d40c909fd652f1b2a4a3 +"@react-leaflet/core@npm:^2.1.0": + version: 2.1.0 + resolution: "@react-leaflet/core@npm:2.1.0" + peerDependencies: + leaflet: ^1.9.0 + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: d5218c79ab9decd458e1fa8a0ec3757542e3ea4e569afa151a32ef0e9ceb63a13174f3fbc740fe0d514df8b0b3e30d913bfb0b8b661dac13924934d7e430bfc9 languageName: node linkType: hard -"@storybook/global@npm:^5.0.0": - version: 5.0.0 - resolution: "@storybook/global@npm:5.0.0" - checksum: 8f1b61dcdd3a89584540896e659af2ecc700bc740c16909a7be24ac19127ea213324de144a141f7caf8affaed017d064fea0618d453afbe027cf60f54b4a6d0b +"@remix-run/router@npm:1.3.3": + version: 1.3.3 + resolution: "@remix-run/router@npm:1.3.3" + checksum: e64594e5dea4e3228e84911535fa67023fd7feb2534e43e51b599a6bcd1cfa20f8ee5680416fb7963d882b5866d76f3979508e1db33451db3c8ff3622bb9dbdf languageName: node linkType: hard -"@storybook/instrumenter@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/instrumenter@npm:7.5.3" +"@rollup/pluginutils@npm:^4.2.1": + version: 4.2.1 + resolution: "@rollup/pluginutils@npm:4.2.1" dependencies: - "@storybook/channels": "npm:7.5.3" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/global": "npm:^5.0.0" - "@storybook/preview-api": "npm:7.5.3" - checksum: dc260bc908df36119023512129fb07e297da0aefb880f469e9aceb0dac0edc2dc8be1754f693483382796b46c7b9854018f81999de315ef008d730b0e35a5822 + estree-walker: "npm:^2.0.1" + picomatch: "npm:^2.2.2" + checksum: 3ee56b2c8f1ed8dfd0a92631da1af3a2dfdd0321948f089b3752b4de1b54dc5076701eadd0e5fc18bd191b77af594ac1db6279e83951238ba16bf8a414c64c48 languageName: node linkType: hard -"@storybook/manager-api@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/manager-api@npm:7.5.3" +"@rollup/pluginutils@npm:^5.0.4": + version: 5.0.5 + resolution: "@rollup/pluginutils@npm:5.0.5" dependencies: - "@storybook/channels": "npm:7.5.3" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/csf": "npm:^0.1.0" - "@storybook/global": "npm:^5.0.0" - "@storybook/router": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - dequal: "npm:^2.0.2" - lodash: "npm:^4.17.21" - memoizerific: "npm:^1.11.3" - semver: "npm:^7.3.7" - store2: "npm:^2.14.2" - telejson: "npm:^7.2.0" - ts-dedent: "npm:^2.0.0" + "@types/estree": "npm:^1.0.0" + estree-walker: "npm:^2.0.2" + picomatch: "npm:^2.3.1" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 8f48834b477ba07a252cb7a99e7513fab4d3f1cd52e4133e30de1984e43a5f86b94f55bfc06c218cfd98dc15ebb62d07f2f3929a37dbc74af29aaad0b779edea - languageName: node - linkType: hard - -"@storybook/manager@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/manager@npm:7.5.3" - checksum: 19e0a7d3791c0621c63fe1cbc6de6bdb92195d0cdff9259437c54763bd9958ddaaea75497a0be2b9ea8e5300e746f39c7c3ee5e0e1902a48f4f04a2f3aa0a23d + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 18a1f5a9afa993a76663cc2102169cd546786b39a3e92bdc8a2a0b408b509d070a02b20970a30daa9d5d0b1b591b5e7734add84b3aaf263178aef5a26cfab2cf languageName: node linkType: hard -"@storybook/mdx2-csf@npm:^1.0.0": - version: 1.1.0 - resolution: "@storybook/mdx2-csf@npm:1.1.0" - checksum: ba4496a51efae35edb3e509e488cd16066ccf0768d2dc527bbc2650d0bc0f630540985205772d63d1711d1a5dae66136a919077c90fa2ac7a02a13de43446baa +"@sentry-internal/tracing@npm:7.81.1": + version: 7.81.1 + resolution: "@sentry-internal/tracing@npm:7.81.1" + dependencies: + "@sentry/core": "npm:7.81.1" + "@sentry/types": "npm:7.81.1" + "@sentry/utils": "npm:7.81.1" + checksum: 580764b33155284724d7eb544f2fcb519ac88fd0ea76ebe4f286b63291fb95dadd88eecea7249ee05bfdc9219ab02529cc6c6b2ffd286dbed420af0e1e4cc65e languageName: node linkType: hard -"@storybook/node-logger@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/node-logger@npm:7.5.3" - checksum: 327f5eef43adcbbf9c5daa49c82ee8d57e6cf795defdde12b9988e04c66209ea99a49574f73a82c01c78331756dd5d50440a1d09cc7b3b6ff19e672d24390e94 +"@sentry/browser@npm:7.81.1": + version: 7.81.1 + resolution: "@sentry/browser@npm:7.81.1" + dependencies: + "@sentry-internal/tracing": "npm:7.81.1" + "@sentry/core": "npm:7.81.1" + "@sentry/replay": "npm:7.81.1" + "@sentry/types": "npm:7.81.1" + "@sentry/utils": "npm:7.81.1" + checksum: 30003f0419b80e2066485b4ff62acc6608756c94c5c63c165e67221a1f4afb22eabf5e531e097f8ed08cfa49ac7ce366de54affc82904fe56be5df406b66735f languageName: node linkType: hard -"@storybook/postinstall@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/postinstall@npm:7.5.3" - checksum: b2bc3a91ffedb83a54624d6880fa10fab86db86abd6aaa07bc130abd9ffab21f5be8d7e880173c911e58b56f2dfcab03ae0d6e6ce710997f1c323b378d917932 +"@sentry/core@npm:7.81.1": + version: 7.81.1 + resolution: "@sentry/core@npm:7.81.1" + dependencies: + "@sentry/types": "npm:7.81.1" + "@sentry/utils": "npm:7.81.1" + checksum: 3bf303d71f0195e996b1be17b40d341b8df32fbe693aea044f31546a2b95e61e9bb772ebfe52768337d77b81c27e806bbad1a963018af388013a6116749b1fa3 languageName: node linkType: hard -"@storybook/preview-api@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/preview-api@npm:7.5.3" +"@sentry/react@npm:^7.81.1": + version: 7.81.1 + resolution: "@sentry/react@npm:7.81.1" dependencies: - "@storybook/channels": "npm:7.5.3" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/csf": "npm:^0.1.0" - "@storybook/global": "npm:^5.0.0" - "@storybook/types": "npm:7.5.3" - "@types/qs": "npm:^6.9.5" - dequal: "npm:^2.0.2" - lodash: "npm:^4.17.21" - memoizerific: "npm:^1.11.3" - qs: "npm:^6.10.0" - synchronous-promise: "npm:^2.0.15" - ts-dedent: "npm:^2.0.0" - util-deprecate: "npm:^1.0.2" - checksum: 3acc48f1a9e801ff3b9e93261f68810a7f1827b777939dea0065c6385062c24e0e9081f3cca4b8b35d907dccbc2f1ea405ff8dcbfb6bbac9b4cd993f5ad23ccb + "@sentry/browser": "npm:7.81.1" + "@sentry/types": "npm:7.81.1" + "@sentry/utils": "npm:7.81.1" + hoist-non-react-statics: "npm:^3.3.2" + peerDependencies: + react: 15.x || 16.x || 17.x || 18.x + checksum: b2f1effc92114b509235c8999fb3e2750666d84de7cae9daf47ebe7fb0b21c57bd3862bf3963ff0d6a546b7144e994309300d6b4a06bbf8ee9530ba1c0fd6397 languageName: node linkType: hard -"@storybook/preview@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/preview@npm:7.5.3" - checksum: e1f86b40f2d510f0f53ecb214c2cfb67f58c7f4b19456c1ef843e52e9caba4515d25c1ee74fcd514b5d4f74994d02d53f37f9b1c34a2209525b354f7fe8af111 +"@sentry/replay@npm:7.81.1": + version: 7.81.1 + resolution: "@sentry/replay@npm:7.81.1" + dependencies: + "@sentry-internal/tracing": "npm:7.81.1" + "@sentry/core": "npm:7.81.1" + "@sentry/types": "npm:7.81.1" + "@sentry/utils": "npm:7.81.1" + checksum: 8496e87a2f916efcf01ab282e064c68bfa43b4536dcc8788a01a8133e6bb47894c3220c538c06e4a4f2f7530197a9436528d8b931d368d74fae230cf9b391a67 languageName: node linkType: hard -"@storybook/react-dom-shim@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/react-dom-shim@npm:7.5.3" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 91314e9891ef7f80fe32c2c239b112dafbc739d5eba72f8fd2ccde62058b9e649280dd2245705f13cb00044d9482a8b6f358a8262018449f5feb8e5df5b96494 +"@sentry/types@npm:7.81.1": + version: 7.81.1 + resolution: "@sentry/types@npm:7.81.1" + checksum: ee0c400b242b1566d126550421ac2abea772355c4482397e06fbf8e36d3f540f318bcee08c035fbf93f276376a2062fed66061e08a52584e6f93093e321e92ab languageName: node linkType: hard -"@storybook/react-vite@npm:^7.5.3": - version: 7.5.3 - resolution: "@storybook/react-vite@npm:7.5.3" +"@sentry/utils@npm:7.81.1": + version: 7.81.1 + resolution: "@sentry/utils@npm:7.81.1" dependencies: - "@joshwooding/vite-plugin-react-docgen-typescript": "npm:0.3.0" - "@rollup/pluginutils": "npm:^5.0.2" - "@storybook/builder-vite": "npm:7.5.3" - "@storybook/react": "npm:7.5.3" - "@vitejs/plugin-react": "npm:^3.0.1" - magic-string: "npm:^0.30.0" - react-docgen: "npm:^6.0.2" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - checksum: 53319f9249129479b66ef8f954cbff26e747696c6e5780930b7a2cf8a183c028a7bf263d432cb53b6ffb51dd3147199379ffcf852428800fd18f5394e21f5512 - languageName: node - linkType: hard - -"@storybook/react@npm:7.5.3, @storybook/react@npm:^7.5.3": - version: 7.5.3 - resolution: "@storybook/react@npm:7.5.3" - dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-client": "npm:7.5.3" - "@storybook/docs-tools": "npm:7.5.3" - "@storybook/global": "npm:^5.0.0" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/react-dom-shim": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - "@types/escodegen": "npm:^0.0.6" - "@types/estree": "npm:^0.0.51" - "@types/node": "npm:^18.0.0" - acorn: "npm:^7.4.1" - acorn-jsx: "npm:^5.3.1" - acorn-walk: "npm:^7.2.0" - escodegen: "npm:^2.1.0" - html-tags: "npm:^3.1.0" - lodash: "npm:^4.17.21" - prop-types: "npm:^15.7.2" - react-element-to-jsx-string: "npm:^15.0.0" - ts-dedent: "npm:^2.0.0" - type-fest: "npm:~2.19" - util-deprecate: "npm:^1.0.2" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - typescript: "*" - peerDependenciesMeta: - typescript: - optional: true - checksum: 6433c12e12e1eb570d06bd1e03a8eacfcea08387b708bc3d423685d90c6de980ea39a79f5c188fa58c2b8b78fabbe0cb1c07136806f264eb05d2d50fd3532a13 + "@sentry/types": "npm:7.81.1" + checksum: 3b294427ae945b5bb901113ea8547fc5d00c38bb5973e14dd0d8bfdb6ec5b4cc594752e39ab7c089ea564582e2aa4705a743960130f3d42485b6be29859af0f7 languageName: node linkType: hard -"@storybook/router@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/router@npm:7.5.3" - dependencies: - "@storybook/client-logger": "npm:7.5.3" - memoizerific: "npm:^1.11.3" - qs: "npm:^6.10.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 2d85a9c16e2817f38a66d1718dbe2b9b23a31676e991d4760273acb508c40491cb7ff91f14a563529c3cd15becc213c3e3f5cf3290001323a89528907388b368 +"@sinclair/typebox@npm:^0.25.16": + version: 0.25.24 + resolution: "@sinclair/typebox@npm:0.25.24" + checksum: 2faf9878f3a65a1f2855add80b0fe8c6fe83f084ea1ab432fa7506e7c85c55ae121c4af516d089b5737f5fad23b3628fcc83a6a5df29030c3f611185ce0388ac languageName: node linkType: hard -"@storybook/telemetry@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/telemetry@npm:7.5.3" - dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-common": "npm:7.5.3" - "@storybook/csf-tools": "npm:7.5.3" - chalk: "npm:^4.1.0" - detect-package-manager: "npm:^2.0.1" - fetch-retry: "npm:^5.0.2" - fs-extra: "npm:^11.1.0" - read-pkg-up: "npm:^7.0.1" - checksum: 6dc3eb14162ea7846913591b425701e9e238cad704bb00c062850b1db99417073a3c1e7a699768bb79968a4f11b4f4b542ba45845e578cf58665a7e101cf4f40 +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: ef6351ae073c45c2ac89494dbb3e1f87cc60a93ce4cde797b782812b6f97da0d620ae81973f104b43c9b7eaa789ad20ba4f6a1359f1cc62f63729a55a7d22d4e languageName: node linkType: hard -"@storybook/theming@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/theming@npm:7.5.3" +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.0 + resolution: "@sinonjs/commons@npm:3.0.0" dependencies: - "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.0.0" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/global": "npm:^5.0.0" - memoizerific: "npm:^1.11.3" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 30dc5fd55617fcd7f33a6c75ddd1b2b5e1e28ce2973425fb8764f5770292659e1676264252bd14909ac9843799ab2e0a5d9e83ad3b4a29848c54600264f8af10 + type-detect: "npm:4.0.8" + checksum: 1df9cd257942f4e4960dfb9fd339d9e97b6a3da135f3d5b8646562918e863809cb8e00268535f4f4723535d2097881c8fc03d545c414d8555183376cfc54ee84 languageName: node linkType: hard -"@storybook/types@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/types@npm:7.5.3" +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" dependencies: - "@storybook/channels": "npm:7.5.3" - "@types/babel__core": "npm:^7.0.0" - "@types/express": "npm:^4.7.0" - file-system-cache: "npm:2.3.0" - checksum: 4219a92a6e7762ac5a1dae101aa1072f4c37607f6f2173ae70d224ddc294d9f70e55462eb42028a87e676840f2e87f1bc0e82b28bbb35207278405868b467eb7 + "@sinonjs/commons": "npm:^3.0.0" + checksum: 2e2fb6cc57f227912814085b7b01fede050cd4746ea8d49a1e44d5a0e56a804663b0340ae2f11af7559ea9bf4d087a11f2f646197a660ea3cb04e19efc04aa63 languageName: node linkType: hard @@ -5874,7 +4030,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.18.0, @types/babel__core@npm:^7.20.3": +"@types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.20.3": version: 7.20.4 resolution: "@types/babel__core@npm:7.20.4" dependencies: @@ -5915,7 +4071,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:^7.0.6, @types/babel__traverse@npm:^7.18.0": +"@types/babel__traverse@npm:^7.0.6": version: 7.20.4 resolution: "@types/babel__traverse@npm:7.20.4" dependencies: @@ -5924,34 +4080,6 @@ __metadata: languageName: node linkType: hard -"@types/body-parser@npm:*": - version: 1.19.5 - resolution: "@types/body-parser@npm:1.19.5" - dependencies: - "@types/connect": "npm:*" - "@types/node": "npm:*" - checksum: aebeb200f25e8818d8cf39cd0209026750d77c9b85381cdd8deeb50913e4d18a1ebe4b74ca9b0b4d21952511eeaba5e9fbbf739b52731a2061e206ec60d568df - languageName: node - linkType: hard - -"@types/connect@npm:*": - version: 3.4.38 - resolution: "@types/connect@npm:3.4.38" - dependencies: - "@types/node": "npm:*" - checksum: 2e1cdba2c410f25649e77856505cd60223250fa12dff7a503e492208dbfdd25f62859918f28aba95315251fd1f5e1ffbfca1e25e73037189ab85dd3f8d0a148c - languageName: node - linkType: hard - -"@types/cross-spawn@npm:^6.0.2": - version: 6.0.5 - resolution: "@types/cross-spawn@npm:6.0.5" - dependencies: - "@types/node": "npm:*" - checksum: 871a21a96e03292a4a257f0bdefcc0f3ce33a9d14a87899eb7b4a4f05910a094cbeb71d5a6c6deb3eef6b0a798570f7105c0fae11323c743df1243186a0098f6 - languageName: node - linkType: hard - "@types/debug@npm:^4.0.0": version: 4.1.12 resolution: "@types/debug@npm:4.1.12" @@ -5961,48 +4089,6 @@ __metadata: languageName: node linkType: hard -"@types/detect-port@npm:^1.3.0": - version: 1.3.5 - resolution: "@types/detect-port@npm:1.3.5" - checksum: d8dd9d0e643106a2263f530b24ffdc3409d9391c50fc5e404018ba3633947aa3777db7fb094aeb0f49a13cc998aae8889747ad9edaa02b13a2de2385f37106ef - languageName: node - linkType: hard - -"@types/doctrine@npm:^0.0.3": - version: 0.0.3 - resolution: "@types/doctrine@npm:0.0.3" - checksum: 566dcdc988c97ff01d14493ceb2223643347f07cf0a88c86cd7cb7c2821cfc837fd39295e6809a29614fdfdc6c4e981408155ca909b2e5da5d947af939b6c966 - languageName: node - linkType: hard - -"@types/doctrine@npm:^0.0.6": - version: 0.0.6 - resolution: "@types/doctrine@npm:0.0.6" - checksum: eae59a178be3b7989f3dd269cbe30fee9041a95ccb7ac963bbff3fcc82e7985c5002228afe23b7fad985f3eedf5257d36c7011bd8caafb087fcdcc6df1e52cb3 - languageName: node - linkType: hard - -"@types/ejs@npm:^3.1.1": - version: 3.1.5 - resolution: "@types/ejs@npm:3.1.5" - checksum: 13d994cf0323d7e0ad33b9384914ccd3b4cd8bf282eced3649b1621b66ee7c784ac2d120a9d7b1f43d6f873518248fb8c3221b06a649b847860b9c2389a0b0ed - languageName: node - linkType: hard - -"@types/emscripten@npm:^1.39.6": - version: 1.39.10 - resolution: "@types/emscripten@npm:1.39.10" - checksum: c9adde9307d54efb5152931bfe99966fbe12fbd4d07663fb5cdc4cc1bd3a1f030882d50d4a27875b7b2d9713d160609e67b72e92177a021c9f4699ee5ac41035 - languageName: node - linkType: hard - -"@types/escodegen@npm:^0.0.6": - version: 0.0.6 - resolution: "@types/escodegen@npm:0.0.6" - checksum: bbef189319c7b0386486bc7224369f118c7aedf35cc13e40ae5879b9ab4f848936f31e8eea50e71d4de72d4b7a77d9e6e9e5ceec4406c648fbc0077ede634ed5 - languageName: node - linkType: hard - "@types/eslint@npm:^8.4.5": version: 8.44.7 resolution: "@types/eslint@npm:8.44.7" @@ -6029,13 +4115,6 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:^0.0.51": - version: 0.0.51 - resolution: "@types/estree@npm:0.0.51" - checksum: a70c60d5e634e752fcd45b58c9c046ef22ad59ede4bc93ad5193c7e3b736ebd6bcd788ade59d9c3b7da6eeb0939235f011d4c59bb4fc04d8c346b76035099dd1 - languageName: node - linkType: hard - "@types/estree@npm:^1.0.0": version: 1.0.5 resolution: "@types/estree@npm:1.0.5" @@ -6043,37 +4122,6 @@ __metadata: languageName: node linkType: hard -"@types/express-serve-static-core@npm:^4.17.33": - version: 4.17.41 - resolution: "@types/express-serve-static-core@npm:4.17.41" - dependencies: - "@types/node": "npm:*" - "@types/qs": "npm:*" - "@types/range-parser": "npm:*" - "@types/send": "npm:*" - checksum: dc166cbf4475c00a81fbcab120bf7477c527184be11ae149df7f26d9c1082114c68f8d387a2926fe80291b06477c8bbd9231ff4f5775de328e887695aefce269 - languageName: node - linkType: hard - -"@types/express@npm:^4.7.0": - version: 4.17.21 - resolution: "@types/express@npm:4.17.21" - dependencies: - "@types/body-parser": "npm:*" - "@types/express-serve-static-core": "npm:^4.17.33" - "@types/qs": "npm:*" - "@types/serve-static": "npm:*" - checksum: 12e562c4571da50c7d239e117e688dc434db1bac8be55613294762f84fd77fbd0658ccd553c7d3ab02408f385bc93980992369dd30e2ecd2c68c358e6af8fabf - languageName: node - linkType: hard - -"@types/find-cache-dir@npm:^3.2.1": - version: 3.2.1 - resolution: "@types/find-cache-dir@npm:3.2.1" - checksum: 68059aec88ef776a689c1711a881fd91a9ce1b03dd5898ea1d2ac5d77d7b0235f21fdf210f380c13deca8b45e4499841a63aaf31fd2123af687f2c6b472f41ce - languageName: node - linkType: hard - "@types/geojson@npm:*": version: 7946.0.10 resolution: "@types/geojson@npm:7946.0.10" @@ -6081,16 +4129,6 @@ __metadata: languageName: node linkType: hard -"@types/glob@npm:^7.1.3": - version: 7.2.0 - resolution: "@types/glob@npm:7.2.0" - dependencies: - "@types/minimatch": "npm:*" - "@types/node": "npm:*" - checksum: a8eb5d5cb5c48fc58c7ca3ff1e1ddf771ee07ca5043da6e4871e6757b4472e2e73b4cfef2644c38983174a4bc728c73f8da02845c28a1212f98cabd293ecae98 - languageName: node - linkType: hard - "@types/graceful-fs@npm:^4.1.3": version: 4.1.9 resolution: "@types/graceful-fs@npm:4.1.9" @@ -6109,13 +4147,6 @@ __metadata: languageName: node linkType: hard -"@types/http-errors@npm:*": - version: 2.0.4 - resolution: "@types/http-errors@npm:2.0.4" - checksum: 494670a57ad4062fee6c575047ad5782506dd35a6b9ed3894cea65830a94367bd84ba302eb3dde331871f6d70ca287bfedb1b2cf658e6132cd2cbd427ab56836 - languageName: node - linkType: hard - "@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": version: 2.0.4 resolution: "@types/istanbul-lib-coverage@npm:2.0.4" @@ -6169,7 +4200,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:^7.0.12": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db @@ -6185,10 +4216,10 @@ __metadata: languageName: node linkType: hard -"@types/lodash@npm:^4.14.167": - version: 4.14.201 - resolution: "@types/lodash@npm:4.14.201" - checksum: 14dc43787296c429433d7d034ed47c5ac24b92217056f80a0e6c990449120b9c9c1058918188945fb88353c0c8333c5c36dccc40c51edbd39b05d2169ab2e0ad +"@types/lodash@npm:^4": + version: 4.17.13 + resolution: "@types/lodash@npm:4.17.13" + checksum: c3d0b7efe7933ac0369b99f2f7bff9240d960680fdb74b41ed4bd1b3ca60cca1e31fe4046d9abbde778f941a41bc2a75eb629abf8659fa6c27b66efbbb0802a9 languageName: node linkType: hard @@ -6201,41 +4232,6 @@ __metadata: languageName: node linkType: hard -"@types/mdx@npm:^2.0.0": - version: 2.0.10 - resolution: "@types/mdx@npm:2.0.10" - checksum: a2a5d71967c44c650e883eaaeb61db9c0758b9c1d675e04b7a3cfeeaee6efd5044dc9c78d780aa3fe408a2f85680bf3b723c92a1772bb6c2da35ef346d766de2 - languageName: node - linkType: hard - -"@types/mime-types@npm:^2.1.0": - version: 2.1.4 - resolution: "@types/mime-types@npm:2.1.4" - checksum: a10d57881d14a053556b3d09292de467968d965b0a06d06732c748da39b3aa569270b5b9f32529fd0e9ac1e5f3b91abb894f5b1996373254a65cb87903c86622 - languageName: node - linkType: hard - -"@types/mime@npm:*": - version: 3.0.4 - resolution: "@types/mime@npm:3.0.4" - checksum: db478bc0f99e40f7b3e01d356a9bdf7817060808a294978111340317bcd80ca35382855578c5b60fbc84ae449674bd9bb38427b18417e1f8f19e4f72f8b242cd - languageName: node - linkType: hard - -"@types/mime@npm:^1": - version: 1.3.5 - resolution: "@types/mime@npm:1.3.5" - checksum: c2ee31cd9b993804df33a694d5aa3fa536511a49f2e06eeab0b484fef59b4483777dbb9e42a4198a0809ffbf698081fdbca1e5c2218b82b91603dfab10a10fbc - languageName: node - linkType: hard - -"@types/minimatch@npm:*": - version: 5.1.2 - resolution: "@types/minimatch@npm:5.1.2" - checksum: 83cf1c11748891b714e129de0585af4c55dd4c2cafb1f1d5233d79246e5e1e19d1b5ad9e8db449667b3ffa2b6c80125c429dbee1054e9efb45758dbc4e118562 - languageName: node - linkType: hard - "@types/ms@npm:*": version: 0.7.34 resolution: "@types/ms@npm:0.7.34" @@ -6243,16 +4239,6 @@ __metadata: languageName: node linkType: hard -"@types/node-fetch@npm:^2.6.4": - version: 2.6.9 - resolution: "@types/node-fetch@npm:2.6.9" - dependencies: - "@types/node": "npm:*" - form-data: "npm:^4.0.0" - checksum: b15b6d518ea4dd4a21cf328e9df0a88b2e5b76f3455ddfeb9063a3b97087c50b15ab195a869dadbbeb09d08dcc915557fb6a4f72b4fe79ee42e215fce3d9b0db - languageName: node - linkType: hard - "@types/node@npm:*": version: 18.14.6 resolution: "@types/node@npm:18.14.6" @@ -6267,22 +4253,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^18.0.0": - version: 18.18.9 - resolution: "@types/node@npm:18.18.9" - dependencies: - undici-types: "npm:~5.26.4" - checksum: 8d58fba5eede0df009412ee188bc96f4baf340f4fafbda1bc66fb680fa775aedc88f0cb154a2455966443d9538af402fff022fb0632bddb1bd0648e5a86e5db9 - languageName: node - linkType: hard - -"@types/normalize-package-data@npm:^2.4.0": - version: 2.4.4 - resolution: "@types/normalize-package-data@npm:2.4.4" - checksum: aef7bb9b015883d6f4119c423dd28c4bdc17b0e8a0ccf112c78b4fe0e91fbc4af7c6204b04bba0e199a57d2f3fbbd5b4a14bf8739bf9d2a39b2a0aad545e0f86 - languageName: node - linkType: hard - "@types/plotly.js@npm:*": version: 2.12.18 resolution: "@types/plotly.js@npm:2.12.18" @@ -6290,13 +4260,6 @@ __metadata: languageName: node linkType: hard -"@types/pretty-hrtime@npm:^1.0.0": - version: 1.0.3 - resolution: "@types/pretty-hrtime@npm:1.0.3" - checksum: e4c22475c588be982b398dee9ac0b05b21078bc26581819290a4901c5b269bcaa04cae0e61e012d412e811b0897c9dab316db064208914df2f0ed0960fc5306b - languageName: node - linkType: hard - "@types/prop-types@npm:*": version: 15.7.5 resolution: "@types/prop-types@npm:15.7.5" @@ -6304,20 +4267,6 @@ __metadata: languageName: node linkType: hard -"@types/qs@npm:*, @types/qs@npm:^6.9.5": - version: 6.9.10 - resolution: "@types/qs@npm:6.9.10" - checksum: 6be12e5f062d1b41eb037d59bf9cb65bc9410cedd5e6da832dfd7c8e2b3f4c91e81c9b90b51811140770e5052c6c4e8361181bd9437ddcd4515dc128b7c00353 - languageName: node - linkType: hard - -"@types/range-parser@npm:*": - version: 1.2.7 - resolution: "@types/range-parser@npm:1.2.7" - checksum: 361bb3e964ec5133fa40644a0b942279ed5df1949f21321d77de79f48b728d39253e5ce0408c9c17e4e0fd95ca7899da36841686393b9f7a1e209916e9381a3c - languageName: node - linkType: hard - "@types/react-dom@npm:^18.0.0": version: 18.0.11 resolution: "@types/react-dom@npm:18.0.11" @@ -6348,24 +4297,6 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:>=16": - version: 18.2.37 - resolution: "@types/react@npm:18.2.37" - dependencies: - "@types/prop-types": "npm:*" - "@types/scheduler": "npm:*" - csstype: "npm:^3.0.2" - checksum: 79dd5d23da05bec54e7423ca17096e345eb8fd80a3bf8dd916bb5cdd60677d27c298523aa5b245d090fcc4ec100cfd58c1af4631fbac709d0a9d8be75f9d78a9 - languageName: node - linkType: hard - -"@types/resolve@npm:^1.20.2": - version: 1.20.5 - resolution: "@types/resolve@npm:1.20.5" - checksum: ff6a53de46aa811521ab34b84a7ee2779414a7eef24d70805856e1ed37ced7fd28cb2d7501f76b7305e3acc204c27f23b63572c7ad8228f0f044149a1690abdf - languageName: node - linkType: hard - "@types/scheduler@npm:*": version: 0.16.2 resolution: "@types/scheduler@npm:0.16.2" @@ -6373,34 +4304,13 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.3.12, @types/semver@npm:^7.3.4, @types/semver@npm:^7.5.0": +"@types/semver@npm:^7.5.0": version: 7.5.5 resolution: "@types/semver@npm:7.5.5" checksum: bb1b525221d93c9e7b45914af5ed1729a5bfdfa80927d6b02bcb4550ff7015f8c713152c32cb679ffcc79e77c0dda66d1f972ff5ee8d2205336729c51198bb18 languageName: node linkType: hard -"@types/send@npm:*": - version: 0.17.4 - resolution: "@types/send@npm:0.17.4" - dependencies: - "@types/mime": "npm:^1" - "@types/node": "npm:*" - checksum: 7f17fa696cb83be0a104b04b424fdedc7eaba1c9a34b06027239aba513b398a0e2b7279778af521f516a397ced417c96960e5f50fcfce40c4bc4509fb1a5883c - languageName: node - linkType: hard - -"@types/serve-static@npm:*": - version: 1.15.5 - resolution: "@types/serve-static@npm:1.15.5" - dependencies: - "@types/http-errors": "npm:*" - "@types/mime": "npm:*" - "@types/node": "npm:*" - checksum: 811d1a2f7e74a872195e7a013bcd87a2fb1edf07eaedcb9dcfd20c1eb4bc56ad4ea0d52141c13192c91ccda7c8aeb8a530d8a7e60b9c27f5990d7e62e0fecb03 - languageName: node - linkType: hard - "@types/stack-utils@npm:^2.0.0": version: 2.0.1 resolution: "@types/stack-utils@npm:2.0.1" @@ -6445,15 +4355,6 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:^16.0.0": - version: 16.0.8 - resolution: "@types/yargs@npm:16.0.8" - dependencies: - "@types/yargs-parser": "npm:*" - checksum: ba659eb5a48009ccaa8d6426ad63f2b8de09c153d02f70c911d86b421cfc29ad63e92e17c120d97e81f43cda306760fb3cb5a4137b083d5fafb38c174a6ddf01 - languageName: node - linkType: hard - "@types/yargs@npm:^17.0.8": version: 17.0.22 resolution: "@types/yargs@npm:17.0.22" @@ -6506,16 +4407,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/scope-manager@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" - checksum: 861253235576c1c5c1772d23cdce1418c2da2618a479a7de4f6114a12a7ca853011a1e530525d0931c355a8fd237b9cd828fac560f85f9623e24054fd024726f - languageName: node - linkType: hard - "@typescript-eslint/scope-manager@npm:6.11.0": version: 6.11.0 resolution: "@typescript-eslint/scope-manager@npm:6.11.0" @@ -6543,13 +4434,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/types@npm:5.62.0" - checksum: 7febd3a7f0701c0b927e094f02e82d8ee2cada2b186fcb938bc2b94ff6fbad88237afc304cbaf33e82797078bbbb1baf91475f6400912f8b64c89be79bfa4ddf - languageName: node - linkType: hard - "@typescript-eslint/types@npm:6.11.0": version: 6.11.0 resolution: "@typescript-eslint/types@npm:6.11.0" @@ -6557,24 +4441,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" - debug: "npm:^4.3.4" - globby: "npm:^11.1.0" - is-glob: "npm:^4.0.3" - semver: "npm:^7.3.7" - tsutils: "npm:^3.21.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: d7984a3e9d56897b2481940ec803cb8e7ead03df8d9cfd9797350be82ff765dfcf3cfec04e7355e1779e948da8f02bc5e11719d07a596eb1cb995c48a95e38cf - languageName: node - linkType: hard - "@typescript-eslint/typescript-estree@npm:6.11.0": version: 6.11.0 resolution: "@typescript-eslint/typescript-estree@npm:6.11.0" @@ -6610,34 +4476,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:^5.45.0": - version: 5.62.0 - resolution: "@typescript-eslint/utils@npm:5.62.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@types/json-schema": "npm:^7.0.9" - "@types/semver": "npm:^7.3.12" - "@typescript-eslint/scope-manager": "npm:5.62.0" - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/typescript-estree": "npm:5.62.0" - eslint-scope: "npm:^5.1.1" - semver: "npm:^7.3.7" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: f09b7d9952e4a205eb1ced31d7684dd55cee40bf8c2d78e923aa8a255318d97279825733902742c09d8690f37a50243f4c4d383ab16bd7aefaf9c4b438f785e1 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - eslint-visitor-keys: "npm:^3.3.0" - checksum: 7c3b8e4148e9b94d9b7162a596a1260d7a3efc4e65199693b8025c71c4652b8042501c0bc9f57654c1e2943c26da98c0f77884a746c6ae81389fcb0b513d995d - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:6.11.0": version: 6.11.0 resolution: "@typescript-eslint/visitor-keys@npm:6.11.0" @@ -6655,21 +4493,6 @@ __metadata: languageName: node linkType: hard -"@vitejs/plugin-react@npm:^3.0.1": - version: 3.1.0 - resolution: "@vitejs/plugin-react@npm:3.1.0" - dependencies: - "@babel/core": "npm:^7.20.12" - "@babel/plugin-transform-react-jsx-self": "npm:^7.18.6" - "@babel/plugin-transform-react-jsx-source": "npm:^7.19.6" - magic-string: "npm:^0.27.0" - react-refresh: "npm:^0.14.0" - peerDependencies: - vite: ^4.1.0-beta.0 - checksum: 259a92a303cd736240dc0d3282d1261339e7bbcf51c5b326868c910b35d4bd22a360334b2dafa5bfc7f3e935f2cd0fdc7ccb6ec6b519b81017c4c4812cd05290 - languageName: node - linkType: hard - "@vitejs/plugin-react@npm:^4.1.1": version: 4.1.1 resolution: "@vitejs/plugin-react@npm:4.1.1" @@ -6685,37 +4508,6 @@ __metadata: languageName: node linkType: hard -"@yarnpkg/esbuild-plugin-pnp@npm:^3.0.0-rc.10": - version: 3.0.0-rc.15 - resolution: "@yarnpkg/esbuild-plugin-pnp@npm:3.0.0-rc.15" - dependencies: - tslib: "npm:^2.4.0" - peerDependencies: - esbuild: ">=0.10.0" - checksum: 5095bc316862971add31ca1fadb0095b6ad15f25120f6ab3a06086bb6a7be93c2f3c45bff80d5976689fc89b0e9bf82bd3d410e205c852739874d32d050c4e57 - languageName: node - linkType: hard - -"@yarnpkg/fslib@npm:2.10.3": - version: 2.10.3 - resolution: "@yarnpkg/fslib@npm:2.10.3" - dependencies: - "@yarnpkg/libzip": "npm:^2.3.0" - tslib: "npm:^1.13.0" - checksum: c4fbbed99e801f17c381204e9699d9ea4fb51b14e99968985f477bdbc7b02b61e026860173f3f46bd60d9f46ae6a06f420a3edb3c02c3a45ae83779095928094 - languageName: node - linkType: hard - -"@yarnpkg/libzip@npm:2.3.0, @yarnpkg/libzip@npm:^2.3.0": - version: 2.3.0 - resolution: "@yarnpkg/libzip@npm:2.3.0" - dependencies: - "@types/emscripten": "npm:^1.39.6" - tslib: "npm:^1.13.0" - checksum: 0c2361ccb002e28463ed98541f3bdaab54f52aad6a2080666c2a9ea605ebd9cdfb7b0340b1db6f105820d05bcb803cdfb3ce755a8f6034657298c291bf884f81 - languageName: node - linkType: hard - "abab@npm:^2.0.6": version: 2.0.6 resolution: "abab@npm:2.0.6" @@ -6737,16 +4529,6 @@ __metadata: languageName: node linkType: hard -"accepts@npm:~1.3.5, accepts@npm:~1.3.8": - version: 1.3.8 - resolution: "accepts@npm:1.3.8" - dependencies: - mime-types: "npm:~2.1.34" - negotiator: "npm:0.6.3" - checksum: 3a35c5f5586cfb9a21163ca47a5f77ac34fa8ceb5d17d2fa2c0d81f41cbd7f8c6fa52c77e2c039acc0f4d09e71abdc51144246900f6bef5e3c4b333f77d89362 - languageName: node - linkType: hard - "acorn-globals@npm:^7.0.0": version: 7.0.1 resolution: "acorn-globals@npm:7.0.1" @@ -6757,7 +4539,7 @@ __metadata: languageName: node linkType: hard -"acorn-jsx@npm:^5.3.1, acorn-jsx@npm:^5.3.2": +"acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" peerDependencies: @@ -6766,13 +4548,6 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^7.2.0": - version: 7.2.0 - resolution: "acorn-walk@npm:7.2.0" - checksum: ff99f3406ed8826f7d6ef6ac76b7608f099d45a1ff53229fa267125da1924188dbacf02e7903dfcfd2ae4af46f7be8847dc7d564c73c4e230dfb69c8ea8e6b4c - languageName: node - linkType: hard - "acorn-walk@npm:^8.0.2": version: 8.3.0 resolution: "acorn-walk@npm:8.3.0" @@ -6780,7 +4555,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^7.1.1, acorn@npm:^7.4.1": +"acorn@npm:^7.1.1": version: 7.4.1 resolution: "acorn@npm:7.4.1" bin: @@ -6789,7 +4564,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.1.0, acorn@npm:^8.10.0, acorn@npm:^8.8.1, acorn@npm:^8.9.0": +"acorn@npm:^8.1.0, acorn@npm:^8.8.1, acorn@npm:^8.9.0": version: 8.11.2 resolution: "acorn@npm:8.11.2" bin: @@ -6798,20 +4573,6 @@ __metadata: languageName: node linkType: hard -"address@npm:^1.0.1": - version: 1.2.2 - resolution: "address@npm:1.2.2" - checksum: 1c8056b77fb124456997b78ed682ecc19d2fd7ea8bd5850a2aa8c3e3134c913847c57bcae418622efd32ba858fa1e242a40a251ac31da0515664fc0ac03a047d - languageName: node - linkType: hard - -"agent-base@npm:5": - version: 5.1.1 - resolution: "agent-base@npm:5.1.1" - checksum: 3baa3f01072c16e3955ce7802166e576cde9831af82b262aae1c780af49c0c84e82e64ba9ef9e7d1704fe29e9f0096a78a4f998ec137360fee3cb95186f97161 - languageName: node - linkType: hard - "agent-base@npm:6": version: 6.0.2 resolution: "agent-base@npm:6.0.2" @@ -6875,16 +4636,12 @@ __metadata: "@radix-ui/react-toggle-group": "npm:^1.1.0" "@radix-ui/react-tooltip": "npm:^1.0.5" "@sentry/react": "npm:^7.81.1" - "@storybook/addon-essentials": "npm:^7.5.3" - "@storybook/addon-interactions": "npm:^7.5.3" - "@storybook/addon-links": "npm:^7.5.3" - "@storybook/react": "npm:^7.5.3" - "@storybook/react-vite": "npm:^7.5.3" "@tanstack/react-query": "npm:^4.29.5" "@tanstack/react-query-devtools": "npm:^4.29.6" "@testing-library/jest-dom": "npm:^5.14.1" "@testing-library/react": "npm:^13.0.0" "@types/leaflet": "npm:^1.9.3" + "@types/lodash": "npm:^4" "@types/node": "npm:^16.7.13" "@types/react": "npm:^18.0.0" "@types/react-dom": "npm:^18.0.0" @@ -6892,16 +4649,19 @@ __metadata: "@typescript-eslint/eslint-plugin": "npm:^6.11.0" "@typescript-eslint/parser": "npm:^6.11.0" "@vitejs/plugin-react": "npm:^4.1.1" + autoprefixer: "npm:^10.4.20" axios: "npm:^1.6.2" classnames: "npm:^2.3.2" cmdk: "npm:^0.2.0" eslint: "npm:^8.53.0" - eslint-plugin-storybook: "npm:^0.6.15" jest: "npm:^29.7.0" jest-environment-jsdom: "npm:^29.7.0" leaflet: "npm:^1.9.3" lodash: "npm:^4.17.21" + lucide-react: "npm:^0.454.0" + nova-ui-kit: "npm:^1.1.12" plotly.js: "npm:^2.25.2" + postcss: "npm:^8.4.47" prettier: "npm:2.8.4" react: "npm:^18.2.0" react-dom: "npm:^18.2.0" @@ -6913,7 +4673,7 @@ __metadata: react-plotly.js: "npm:^2.6.0" react-router-dom: "npm:^6.8.2" sass: "npm:^1.58.3" - storybook: "npm:^7.5.3" + tailwindcss: "npm:^3.4.14" ts-jest: "npm:^29.1.1" typescript: "npm:^4.4.2" vite: "npm:^4.5.3" @@ -6978,6 +4738,13 @@ __metadata: languageName: node linkType: hard +"any-promise@npm:^1.0.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 60f0298ed34c74fef50daab88e8dab786036ed5a7fad02e012ab57e376e0a0b4b29e83b95ea9b5e7d89df762f5f25119b83e00706ecaccb22cfbacee98d74889 + languageName: node + linkType: hard + "anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" @@ -6988,10 +4755,10 @@ __metadata: languageName: node linkType: hard -"app-root-dir@npm:^1.0.2": - version: 1.0.2 - resolution: "app-root-dir@npm:1.0.2" - checksum: 0225e4be7788968a82bb76df9b14b0d7f212a5c12e8c625cdc34f80548780bcbfc5f3287d0806dddd83bf9dbf9ce302e76b2887cd3a6f4be52b79df7f3aa9e7c +"arg@npm:^5.0.2": + version: 5.0.2 + resolution: "arg@npm:5.0.2" + checksum: ccaf86f4e05d342af6666c569f844bec426595c567d32a8289715087825c2ca7edd8a3d204e4d2fb2aa4602e09a57d0c13ea8c9eea75aac3dbb4af5514e6800e languageName: node linkType: hard @@ -7050,13 +4817,6 @@ __metadata: languageName: node linkType: hard -"array-flatten@npm:1.1.1": - version: 1.1.1 - resolution: "array-flatten@npm:1.1.1" - checksum: 806966c8abb2f858b08f5324d9d18d7737480610f3bd5d3498aaae6eb5efdc501a884ba019c9b4a8f02ff67002058749d05548fd42fa8643f02c9c7f22198b91 - languageName: node - linkType: hard - "array-normalize@npm:^1.1.4": version: 1.1.4 resolution: "array-normalize@npm:1.1.4" @@ -7087,51 +4847,6 @@ __metadata: languageName: node linkType: hard -"assert@npm:^2.0.0": - version: 2.1.0 - resolution: "assert@npm:2.1.0" - dependencies: - call-bind: "npm:^1.0.2" - is-nan: "npm:^1.3.2" - object-is: "npm:^1.1.5" - object.assign: "npm:^4.1.4" - util: "npm:^0.12.5" - checksum: 7271a5da883c256a1fa690677bf1dd9d6aa882139f2bed1cd15da4f9e7459683e1da8e32a203d6cc6767e5e0f730c77a9532a87b896b4b0af0dd535f668775f0 - languageName: node - linkType: hard - -"ast-types@npm:0.15.2": - version: 0.15.2 - resolution: "ast-types@npm:0.15.2" - dependencies: - tslib: "npm:^2.0.1" - checksum: 5b26e3656e9e8d1db8c8d14971d0cb88ca0138aacce72171cb4cd4555fc8dc53c07e821c568e57fe147366931708fefd25cb9d7e880d42ce9cb569947844c962 - languageName: node - linkType: hard - -"ast-types@npm:^0.16.1": - version: 0.16.1 - resolution: "ast-types@npm:0.16.1" - dependencies: - tslib: "npm:^2.0.1" - checksum: abcc49e42eb921a7ebc013d5bec1154651fb6dbc3f497541d488859e681256901b2990b954d530ba0da4d0851271d484f7057d5eff5e07cb73e8b10909f711bf - languageName: node - linkType: hard - -"async-limiter@npm:~1.0.0": - version: 1.0.1 - resolution: "async-limiter@npm:1.0.1" - checksum: 0693d378cfe86842a70d4c849595a0bb50dc44c11649640ca982fa90cbfc74e3cc4753b5a0847e51933f2e9c65ce8e05576e75e5e1fd963a086e673735b35969 - languageName: node - linkType: hard - -"async@npm:^3.2.3": - version: 3.2.5 - resolution: "async@npm:3.2.5" - checksum: 1408287b26c6db67d45cb346e34892cee555b8b59e6c68e6f8c3e495cad5ca13b4f218180e871f3c2ca30df4ab52693b66f2f6ff43644760cab0b2198bda79c1 - languageName: node - linkType: hard - "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -7146,6 +4861,24 @@ __metadata: languageName: node linkType: hard +"autoprefixer@npm:^10.4.20": + version: 10.4.20 + resolution: "autoprefixer@npm:10.4.20" + dependencies: + browserslist: "npm:^4.23.3" + caniuse-lite: "npm:^1.0.30001646" + fraction.js: "npm:^4.3.7" + normalize-range: "npm:^0.1.2" + picocolors: "npm:^1.0.1" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.1.0 + bin: + autoprefixer: bin/autoprefixer + checksum: e1f00978a26e7c5b54ab12036d8c13833fad7222828fc90914771b1263f51b28c7ddb5803049de4e77696cbd02bb25cfc3634e80533025bb26c26aacdf938940 + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.5": version: 1.0.5 resolution: "available-typed-arrays@npm:1.0.5" @@ -7164,15 +4897,6 @@ __metadata: languageName: node linkType: hard -"babel-core@npm:^7.0.0-bridge.0": - version: 7.0.0-bridge.0 - resolution: "babel-core@npm:7.0.0-bridge.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f57576e30267be4607d163b7288031d332cf9200ea35efe9fb33c97f834e304376774c28c1f9d6928d6733fcde7041e4010f1248a0519e7730c590d4b07b9608 - languageName: node - linkType: hard - "babel-jest@npm:^29.7.0": version: 29.7.0 resolution: "babel-jest@npm:29.7.0" @@ -7215,42 +4939,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs2@npm:^0.4.6": - version: 0.4.6 - resolution: "babel-plugin-polyfill-corejs2@npm:0.4.6" - dependencies: - "@babel/compat-data": "npm:^7.22.6" - "@babel/helper-define-polyfill-provider": "npm:^0.4.3" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 64a98811f343492aa6970ab253760194e389c0417e5b830522f944009c1f0c78e1251975fd1b9869cd48cc4623111b20a3389cf6732a1d10ba0d19de6fa5114f - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs3@npm:^0.8.5": - version: 0.8.6 - resolution: "babel-plugin-polyfill-corejs3@npm:0.8.6" - dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.4.3" - core-js-compat: "npm:^3.33.1" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 97d974c1dfbefdf27866e21a1ac757f6ab1626379b544d6f8ddb05f7bfa02173f8347b6140295b0f770394549f9321775d3048e466a9a02b99b88ad5f0346858 - languageName: node - linkType: hard - -"babel-plugin-polyfill-regenerator@npm:^0.5.3": - version: 0.5.3 - resolution: "babel-plugin-polyfill-regenerator@npm:0.5.3" - dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.4.3" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: cc32313b9ebbf1d7bedc33524a861136b9e5d3b6e9be317ac360a1c2a59ae5ed1b465a6c68b2715cdefb089780ddfb0c11f4a148e49827a947beee76e43da598 - languageName: node - linkType: hard - "babel-preset-current-node-syntax@npm:^1.0.0": version: 1.0.1 resolution: "babel-preset-current-node-syntax@npm:1.0.1" @@ -7306,29 +4994,6 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.3.1": - version: 1.5.1 - resolution: "base64-js@npm:1.5.1" - checksum: f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf - languageName: node - linkType: hard - -"better-opn@npm:^3.0.2": - version: 3.0.2 - resolution: "better-opn@npm:3.0.2" - dependencies: - open: "npm:^8.0.4" - checksum: 911ef25d44da75aabfd2444ce7a4294a8000ebcac73068c04a60298b0f7c7506b60421aa4cd02ac82502fb42baaff7e4892234b51e6923eded44c5a11185f2f5 - languageName: node - linkType: hard - -"big-integer@npm:^1.6.44": - version: 1.6.51 - resolution: "big-integer@npm:1.6.51" - checksum: c8139662d57f8833a44802f4b65be911679c569535ea73c5cfd3c1c8994eaead1b84b6f63e1db63833e4d4cacb6b6a9e5522178113dfdc8e4c81ed8436f1e8cc - languageName: node - linkType: hard - "binary-extensions@npm:^2.0.0": version: 2.2.0 resolution: "binary-extensions@npm:2.2.0" @@ -7367,46 +5032,6 @@ __metadata: languageName: node linkType: hard -"bl@npm:^4.0.3, bl@npm:^4.1.0": - version: 4.1.0 - resolution: "bl@npm:4.1.0" - dependencies: - buffer: "npm:^5.5.0" - inherits: "npm:^2.0.4" - readable-stream: "npm:^3.4.0" - checksum: 02847e1d2cb089c9dc6958add42e3cdeaf07d13f575973963335ac0fdece563a50ac770ac4c8fa06492d2dd276f6cc3b7f08c7cd9c7a7ad0f8d388b2a28def5f - languageName: node - linkType: hard - -"body-parser@npm:1.20.2": - version: 1.20.2 - resolution: "body-parser@npm:1.20.2" - dependencies: - bytes: "npm:3.1.2" - content-type: "npm:~1.0.5" - debug: "npm:2.6.9" - depd: "npm:2.0.0" - destroy: "npm:1.2.0" - http-errors: "npm:2.0.0" - iconv-lite: "npm:0.4.24" - on-finished: "npm:2.4.1" - qs: "npm:6.11.0" - raw-body: "npm:2.5.2" - type-is: "npm:~1.6.18" - unpipe: "npm:1.0.0" - checksum: 06f1438fff388a2e2354c96aa3ea8147b79bfcb1262dfcc2aae68ec13723d01d5781680657b74e9f83c808266d5baf52804032fbde2b7382b89bd8cdb273ace9 - languageName: node - linkType: hard - -"bplist-parser@npm:^0.2.0": - version: 0.2.0 - resolution: "bplist-parser@npm:0.2.0" - dependencies: - big-integer: "npm:^1.6.44" - checksum: ce79c69e0f6efe506281e7c84e3712f7d12978991675b6e3a58a295b16f13ca81aa9b845c335614a545e0af728c8311b6aa3142af76ba1cb616af9bbac5c4a9f - languageName: node - linkType: hard - "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -7426,7 +5051,7 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.2, braces@npm:~3.0.2": +"braces@npm:^3.0.2, braces@npm:^3.0.3, braces@npm:~3.0.2": version: 3.0.3 resolution: "braces@npm:3.0.3" dependencies: @@ -7435,22 +5060,6 @@ __metadata: languageName: node linkType: hard -"browser-assert@npm:^1.2.1": - version: 1.2.1 - resolution: "browser-assert@npm:1.2.1" - checksum: 902abf999f92c9c951fdb6d7352c09eea9a84706258699655f7e7906e42daa06a1ae286398a755872740e05a6a71c43c5d1a0c0431d67a8cdb66e5d859a3fc0c - languageName: node - linkType: hard - -"browserify-zlib@npm:^0.1.4": - version: 0.1.4 - resolution: "browserify-zlib@npm:0.1.4" - dependencies: - pako: "npm:~0.2.0" - checksum: 0cde7ca5d33d43125649330fd75c056397e53731956a2593c4a2529f4e609a8e6abdb2b8e1921683abf5645375b92cfb2a21baa42fe3c9fc3e2556d32043af93 - languageName: node - linkType: hard - "browserslist@npm:^4.21.3": version: 4.21.5 resolution: "browserslist@npm:4.21.5" @@ -7465,7 +5074,7 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.21.9, browserslist@npm:^4.22.1": +"browserslist@npm:^4.21.9": version: 4.22.1 resolution: "browserslist@npm:4.22.1" dependencies: @@ -7479,6 +5088,20 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.23.3": + version: 4.24.2 + resolution: "browserslist@npm:4.24.2" + dependencies: + caniuse-lite: "npm:^1.0.30001669" + electron-to-chromium: "npm:^1.5.41" + node-releases: "npm:^2.0.18" + update-browserslist-db: "npm:^1.1.1" + bin: + browserslist: cli.js + checksum: d747c9fb65ed7b4f1abcae4959405707ed9a7b835639f8a9ba0da2911995a6ab9b0648fd05baf2a4d4e3cf7f9fdbad56d3753f91881e365992c1d49c8d88ff7a + languageName: node + linkType: hard + "bs-logger@npm:0.x": version: 0.2.6 resolution: "bs-logger@npm:0.2.6" @@ -7497,13 +5120,6 @@ __metadata: languageName: node linkType: hard -"buffer-crc32@npm:~0.2.3": - version: 0.2.13 - resolution: "buffer-crc32@npm:0.2.13" - checksum: cb0a8ddf5cf4f766466db63279e47761eb825693eeba6a5a95ee4ec8cb8f81ede70aa7f9d8aeec083e781d47154290eb5d4d26b3f7a465ec57fb9e7d59c47150 - languageName: node - linkType: hard - "buffer-from@npm:^1.0.0": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" @@ -7511,30 +5127,6 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^5.5.0": - version: 5.7.1 - resolution: "buffer@npm:5.7.1" - dependencies: - base64-js: "npm:^1.3.1" - ieee754: "npm:^1.1.13" - checksum: 27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e - languageName: node - linkType: hard - -"bytes@npm:3.0.0": - version: 3.0.0 - resolution: "bytes@npm:3.0.0" - checksum: 91d42c38601c76460519ffef88371caacaea483a354c8e4b8808e7b027574436a5713337c003ea3de63ee4991c2a9a637884fdfe7f761760d746929d9e8fec60 - languageName: node - linkType: hard - -"bytes@npm:3.1.2": - version: 3.1.2 - resolution: "bytes@npm:3.1.2" - checksum: 76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e - languageName: node - linkType: hard - "cacache@npm:^18.0.0": version: 18.0.0 resolution: "cacache@npm:18.0.0" @@ -7565,17 +5157,6 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.4": - version: 1.0.5 - resolution: "call-bind@npm:1.0.5" - dependencies: - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.1" - set-function-length: "npm:^1.1.1" - checksum: a6172c168fd6dacf744fcde745099218056bd755c50415b592655dcd6562157ed29f130f56c3f6db2250f67e4bd62e5c218cdc56d7bfd76e0bda50770fce2d10 - languageName: node - linkType: hard - "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -7583,6 +5164,13 @@ __metadata: languageName: node linkType: hard +"camelcase-css@npm:^2.0.1": + version: 2.0.1 + resolution: "camelcase-css@npm:2.0.1" + checksum: 1a1a3137e8a781e6cbeaeab75634c60ffd8e27850de410c162cce222ea331cd1ba5364e8fb21c95e5ca76f52ac34b81a090925ca00a87221355746d049c6e273 + languageName: node + linkType: hard + "camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" @@ -7611,6 +5199,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001646, caniuse-lite@npm:^1.0.30001669": + version: 1.0.30001676 + resolution: "caniuse-lite@npm:1.0.30001676" + checksum: 53d310d76b5282947c99638a65d7534ac28a80aae1920de085a616ec8ad603358fad67cebacfc0452b1efdea12cce24fd37a50a712d074986b4962110e87d82b + languageName: node + linkType: hard + "canvas-fit@npm:^1.5.0": version: 1.5.0 resolution: "canvas-fit@npm:1.5.0" @@ -7648,7 +5243,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.2": +"chalk@npm:^4.0.0, chalk@npm:^4.1.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -7712,13 +5307,6 @@ __metadata: languageName: node linkType: hard -"chownr@npm:^1.1.1": - version: 1.1.4 - resolution: "chownr@npm:1.1.4" - checksum: ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db - languageName: node - linkType: hard - "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -7747,6 +5335,15 @@ __metadata: languageName: node linkType: hard +"class-variance-authority@npm:^0.7.0": + version: 0.7.0 + resolution: "class-variance-authority@npm:0.7.0" + dependencies: + clsx: "npm:2.0.0" + checksum: e11c57edf4bf50ef1c97bae41d68885afbaaedba26c48b7cc5dfb033390fed7012147e9532168d8c4f3497fce4dff15e20e6e60b8c9c9a4b0fe26b0e804513db + languageName: node + linkType: hard + "classnames@npm:^2.3.2": version: 2.3.2 resolution: "classnames@npm:2.3.2" @@ -7761,35 +5358,6 @@ __metadata: languageName: node linkType: hard -"cli-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "cli-cursor@npm:3.1.0" - dependencies: - restore-cursor: "npm:^3.1.0" - checksum: 92a2f98ff9037d09be3dfe1f0d749664797fb674bf388375a2207a1203b69d41847abf16434203e0089212479e47a358b13a0222ab9fccfe8e2644a7ccebd111 - languageName: node - linkType: hard - -"cli-spinners@npm:^2.5.0": - version: 2.9.1 - resolution: "cli-spinners@npm:2.9.1" - checksum: c9b1152bd387e5b76823bdee6f19079c4017994d352627216e5d3dab9220a8402514519ad96a0a12120b80752fead98d1e7a7a5f56ce32125f92778ef47bdd8c - languageName: node - linkType: hard - -"cli-table3@npm:^0.6.1": - version: 0.6.3 - resolution: "cli-table3@npm:0.6.3" - dependencies: - "@colors/colors": "npm:1.5.0" - string-width: "npm:^4.2.0" - dependenciesMeta: - "@colors/colors": - optional: true - checksum: 39e580cb346c2eaf1bd8f4ff055ae644e902b8303c164a1b8894c0dc95941f92e001db51f49649011be987e708d9fa3183ccc2289a4d376a057769664048cc0c - languageName: node - linkType: hard - "cliui@npm:^8.0.1": version: 8.0.1 resolution: "cliui@npm:8.0.1" @@ -7801,21 +5369,17 @@ __metadata: languageName: node linkType: hard -"clone-deep@npm:^4.0.1": - version: 4.0.1 - resolution: "clone-deep@npm:4.0.1" - dependencies: - is-plain-object: "npm:^2.0.4" - kind-of: "npm:^6.0.2" - shallow-clone: "npm:^3.0.0" - checksum: 637753615aa24adf0f2d505947a1bb75e63964309034a1cf56ba4b1f30af155201edd38d26ffe26911adaae267a3c138b344a4947d39f5fc1b6d6108125aa758 +"clsx@npm:2.0.0": + version: 2.0.0 + resolution: "clsx@npm:2.0.0" + checksum: c09f43b3144a0b7826b6b11b6a111b2c7440831004eecc02d333533c5e58ef0aa5f2dce071d3b25fbb8c8ea97b45df96c74bcc1d51c8c2027eb981931107b0cd languageName: node linkType: hard -"clone@npm:^1.0.2": - version: 1.0.4 - resolution: "clone@npm:1.0.4" - checksum: 2176952b3649293473999a95d7bebfc9dc96410f6cbd3d2595cf12fd401f63a4bf41a7adbfd3ab2ff09ed60cb9870c58c6acdd18b87767366fabfc163700f13b +"clsx@npm:^2.1.1": + version: 2.1.1 + resolution: "clsx@npm:2.1.1" + checksum: c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 languageName: node linkType: hard @@ -7832,6 +5396,21 @@ __metadata: languageName: node linkType: hard +"cmdk@npm:^1.0.0": + version: 1.0.4 + resolution: "cmdk@npm:1.0.4" + dependencies: + "@radix-ui/react-dialog": "npm:^1.1.2" + "@radix-ui/react-id": "npm:^1.1.0" + "@radix-ui/react-primitive": "npm:^2.0.0" + use-sync-external-store: "npm:^1.2.2" + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + react-dom: ^18 || ^19 || ^19.0.0-rc + checksum: 8c37568c9b52cb44a7b8f1414d622100cea0368f564167f4a1bc5c97ba3ba2b392ab4871f691c60a9a414a7295fb702c2f941e6556d6861a48657bb4e82fd979 + languageName: node + linkType: hard + "co@npm:^4.6.0": version: 4.6.0 resolution: "co@npm:4.6.0" @@ -7984,13 +5563,6 @@ __metadata: languageName: node linkType: hard -"colorette@npm:^2.0.20": - version: 2.0.20 - resolution: "colorette@npm:2.0.20" - checksum: e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 - languageName: node - linkType: hard - "combined-stream@npm:^1.0.8": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" @@ -8021,41 +5593,10 @@ __metadata: languageName: node linkType: hard -"commander@npm:^6.2.1": - version: 6.2.1 - resolution: "commander@npm:6.2.1" - checksum: 85748abd9d18c8bc88febed58b98f66b7c591d9b5017cad459565761d7b29ca13b7783ea2ee5ce84bf235897333706c4ce29adf1ce15c8252780e7000e2ce9ea - languageName: node - linkType: hard - -"commondir@npm:^1.0.1": - version: 1.0.1 - resolution: "commondir@npm:1.0.1" - checksum: 33a124960e471c25ee19280c9ce31ccc19574b566dc514fe4f4ca4c34fa8b0b57cf437671f5de380e11353ea9426213fca17687dd2ef03134fea2dbc53809fd6 - languageName: node - linkType: hard - -"compressible@npm:~2.0.16": - version: 2.0.18 - resolution: "compressible@npm:2.0.18" - dependencies: - mime-db: "npm:>= 1.43.0 < 2" - checksum: 8a03712bc9f5b9fe530cc5a79e164e665550d5171a64575d7dcf3e0395d7b4afa2d79ab176c61b5b596e28228b350dd07c1a2a6ead12fd81d1b6cd632af2fef7 - languageName: node - linkType: hard - -"compression@npm:^1.7.4": - version: 1.7.4 - resolution: "compression@npm:1.7.4" - dependencies: - accepts: "npm:~1.3.5" - bytes: "npm:3.0.0" - compressible: "npm:~2.0.16" - debug: "npm:2.6.9" - on-headers: "npm:~1.0.2" - safe-buffer: "npm:5.1.2" - vary: "npm:~1.1.2" - checksum: 138db836202a406d8a14156a5564fb1700632a76b6e7d1546939472895a5304f2b23c80d7a22bf44c767e87a26e070dbc342ea63bb45ee9c863354fa5556bbbc +"commander@npm:^4.0.0": + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: 84a76c08fe6cc08c9c93f62ac573d2907d8e79138999312c92d4155bc2325d487d64d13f669b2000c9f8caf70493c1be2dac74fec3c51d5a04f8bc3ae1830bab languageName: node linkType: hard @@ -8079,7 +5620,7 @@ __metadata: languageName: node linkType: hard -"concat-stream@npm:^1.5.2, concat-stream@npm:^1.6.2": +"concat-stream@npm:^1.5.2": version: 1.6.2 resolution: "concat-stream@npm:1.6.2" dependencies: @@ -8105,22 +5646,6 @@ __metadata: languageName: node linkType: hard -"content-disposition@npm:0.5.4": - version: 0.5.4 - resolution: "content-disposition@npm:0.5.4" - dependencies: - safe-buffer: "npm:5.2.1" - checksum: bac0316ebfeacb8f381b38285dc691c9939bf0a78b0b7c2d5758acadad242d04783cee5337ba7d12a565a19075af1b3c11c728e1e4946de73c6ff7ce45f3f1bb - languageName: node - linkType: hard - -"content-type@npm:~1.0.4, content-type@npm:~1.0.5": - version: 1.0.5 - resolution: "content-type@npm:1.0.5" - checksum: b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af - languageName: node - linkType: hard - "convert-source-map@npm:^1.7.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" @@ -8135,20 +5660,6 @@ __metadata: languageName: node linkType: hard -"cookie-signature@npm:1.0.6": - version: 1.0.6 - resolution: "cookie-signature@npm:1.0.6" - checksum: b36fd0d4e3fef8456915fcf7742e58fbfcc12a17a018e0eb9501c9d5ef6893b596466f03b0564b81af29ff2538fd0aa4b9d54fe5ccbfb4c90ea50ad29fe2d221 - languageName: node - linkType: hard - -"cookie@npm:0.6.0": - version: 0.6.0 - resolution: "cookie@npm:0.6.0" - checksum: f2318b31af7a31b4ddb4a678d024514df5e705f9be5909a192d7f116cfb6d45cbacf96a473fa733faa95050e7cff26e7832bb3ef94751592f1387b71c8956686 - languageName: node - linkType: hard - "copy-anything@npm:^3.0.2": version: 3.0.3 resolution: "copy-anything@npm:3.0.3" @@ -8158,15 +5669,6 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.33.1": - version: 3.33.2 - resolution: "core-js-compat@npm:3.33.2" - dependencies: - browserslist: "npm:^4.22.1" - checksum: bcf6f0badffbbf4a127449f64720c33e9c960f204f072d9644954b30d7742e18de733e9f446c7093f1ccf5d9e101205a7c64747a5aeec7d3925f336322f85a03 - languageName: node - linkType: hard - "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -8226,13 +5728,6 @@ __metadata: languageName: node linkType: hard -"crypto-random-string@npm:^2.0.0": - version: 2.0.0 - resolution: "crypto-random-string@npm:2.0.0" - checksum: 288589b2484fe787f9e146f56c4be90b940018f17af1b152e4dde12309042ff5a2bf69e949aab8b8ac253948381529cc6f3e5a2427b73643a71ff177fa122b37 - languageName: node - linkType: hard - "css-font-size-keywords@npm:^1.0.0": version: 1.0.0 resolution: "css-font-size-keywords@npm:1.0.0" @@ -8306,6 +5801,15 @@ __metadata: languageName: node linkType: hard +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: 6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 + languageName: node + linkType: hard + "cssom@npm:^0.5.0": version: 0.5.0 resolution: "cssom@npm:0.5.0" @@ -8493,7 +5997,14 @@ __metadata: languageName: node linkType: hard -"debug@npm:2, debug@npm:2.6.9, debug@npm:^2.6.9": +"date-fns@npm:^3.6.0": + version: 3.6.0 + resolution: "date-fns@npm:3.6.0" + checksum: 0b5fb981590ef2f8e5a3ba6cd6d77faece0ea7f7158948f2eaae7bbb7c80a8f63ae30b01236c2923cf89bb3719c33aeb150c715ea4fe4e86e37dcf06bed42fb6 + languageName: node + linkType: hard + +"debug@npm:2": version: 2.6.9 resolution: "debug@npm:2.6.9" dependencies: @@ -8587,55 +6098,18 @@ __metadata: checksum: 31de99f3c1b516ef67ba82cbe54fdc1691cdd93ab8ede561eee94f7f8baff6594ddc0860c48707f6cd12e4efd5421e3450e20c40ca71906a9d0abe9017944cd3 languageName: node linkType: hard - -"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: 7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c - languageName: node - linkType: hard - -"deepmerge@npm:^4.2.2": - version: 4.3.0 - resolution: "deepmerge@npm:4.3.0" - checksum: 7ff5c6294b3316c1bc6bca9d3ef2193c1d7beec4e62252db8bcb8a6366d85b924850492eb1a746a5f33d609862e03dfb907ce9fa8769583300f65f20a337cec5 - languageName: node - linkType: hard - -"default-browser-id@npm:3.0.0": - version: 3.0.0 - resolution: "default-browser-id@npm:3.0.0" - dependencies: - bplist-parser: "npm:^0.2.0" - untildify: "npm:^4.0.0" - checksum: 8db3ab882eb3e1e8b59d84c8641320e6c66d8eeb17eb4bb848b7dd549b1e6fd313988e4a13542e95fbaeff03f6e9dedc5ad191ad4df7996187753eb0d45c00b7 - languageName: node - linkType: hard - -"defaults@npm:^1.0.3": - version: 1.0.4 - resolution: "defaults@npm:1.0.4" - dependencies: - clone: "npm:^1.0.2" - checksum: 9cfbe498f5c8ed733775db62dfd585780387d93c17477949e1670bfcfb9346e0281ce8c4bf9f4ac1fc0f9b851113bd6dc9e41182ea1644ccd97de639fa13c35a - languageName: node - linkType: hard - -"define-data-property@npm:^1.1.1": - version: 1.1.1 - resolution: "define-data-property@npm:1.1.1" - dependencies: - get-intrinsic: "npm:^1.2.1" - gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.0" - checksum: 77ef6e0bceb515e05b5913ab635a84d537cee84f8a7c37c77fdcb31fc5b80f6dbe81b33375e4b67d96aa04e6a0d8d4ea099e431d83f089af8d93adfb584bcb94 + +"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c languageName: node linkType: hard -"define-lazy-prop@npm:^2.0.0": - version: 2.0.0 - resolution: "define-lazy-prop@npm:2.0.0" - checksum: db6c63864a9d3b7dc9def55d52764968a5af296de87c1b2cc71d8be8142e445208071953649e0386a8cc37cfcf9a2067a47207f1eb9ff250c2a269658fdae422 +"deepmerge@npm:^4.2.2": + version: 4.3.0 + resolution: "deepmerge@npm:4.3.0" + checksum: 7ff5c6294b3316c1bc6bca9d3ef2193c1d7beec4e62252db8bcb8a6366d85b924850492eb1a746a5f33d609862e03dfb907ce9fa8769583300f65f20a337cec5 languageName: node linkType: hard @@ -8656,29 +6130,6 @@ __metadata: languageName: node linkType: hard -"defu@npm:^6.1.2": - version: 6.1.3 - resolution: "defu@npm:6.1.3" - checksum: 60d0d9a6e328148d5313fe0239ba3777701291f35570b52562454653d953fec5281b084514540f8d3b60d61bad9e39b52e95b3c0451631ded220ad8fdc893455 - languageName: node - linkType: hard - -"del@npm:^6.0.0": - version: 6.1.1 - resolution: "del@npm:6.1.1" - dependencies: - globby: "npm:^11.0.1" - graceful-fs: "npm:^4.2.4" - is-glob: "npm:^4.0.1" - is-path-cwd: "npm:^2.2.0" - is-path-inside: "npm:^3.0.2" - p-map: "npm:^4.0.0" - rimraf: "npm:^3.0.2" - slash: "npm:^3.0.0" - checksum: 8a095c5ccade42c867a60252914ae485ec90da243d735d1f63ec1e64c1cfbc2b8810ad69a29ab6326d159d4fddaa2f5bad067808c42072351ec458efff86708f - languageName: node - linkType: hard - "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -8686,34 +6137,13 @@ __metadata: languageName: node linkType: hard -"depd@npm:2.0.0": - version: 2.0.0 - resolution: "depd@npm:2.0.0" - checksum: 58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c - languageName: node - linkType: hard - -"dequal@npm:^2.0.0, dequal@npm:^2.0.2": +"dequal@npm:^2.0.0": version: 2.0.3 resolution: "dequal@npm:2.0.3" checksum: f98860cdf58b64991ae10205137c0e97d384c3a4edc7f807603887b7c4b850af1224a33d88012009f150861cbee4fa2d322c4cc04b9313bee312e47f6ecaa888 languageName: node linkType: hard -"destroy@npm:1.2.0": - version: 1.2.0 - resolution: "destroy@npm:1.2.0" - checksum: bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643 - languageName: node - linkType: hard - -"detect-indent@npm:^6.1.0": - version: 6.1.0 - resolution: "detect-indent@npm:6.1.0" - checksum: dd83cdeda9af219cf77f5e9a0dc31d828c045337386cfb55ce04fad94ba872ee7957336834154f7647b89b899c3c7acc977c57a79b7c776b506240993f97acc7 - languageName: node - linkType: hard - "detect-kerning@npm:^2.1.2": version: 2.1.2 resolution: "detect-kerning@npm:2.1.2" @@ -8735,28 +6165,6 @@ __metadata: languageName: node linkType: hard -"detect-package-manager@npm:^2.0.1": - version: 2.0.1 - resolution: "detect-package-manager@npm:2.0.1" - dependencies: - execa: "npm:^5.1.1" - checksum: 56ffd65228d1ff3ead5ea7f8ab951a517a29270de27510b790c9a8b77d4f36efbd61493e170ca77ee3dc13cbb5218583ce65b78ad14a59dc48565c9bcbbf3c71 - languageName: node - linkType: hard - -"detect-port@npm:^1.3.0": - version: 1.5.1 - resolution: "detect-port@npm:1.5.1" - dependencies: - address: "npm:^1.0.1" - debug: "npm:4" - bin: - detect: bin/detect-port.js - detect-port: bin/detect-port.js - checksum: f2b204ad3a9f8e8b53fea35fcc97469f31a8e3e786a2f59fbc886397e33b5f130c5f964bf001b9a64d990047c3824f6a439308461ff19801df04ab48a754639e - languageName: node - linkType: hard - "devlop@npm:^1.0.0, devlop@npm:^1.1.0": version: 1.1.0 resolution: "devlop@npm:1.1.0" @@ -8766,6 +6174,13 @@ __metadata: languageName: node linkType: hard +"didyoumean@npm:^1.2.2": + version: 1.2.2 + resolution: "didyoumean@npm:1.2.2" + checksum: 95d0b53d23b851aacff56dfadb7ecfedce49da4232233baecfeecb7710248c4aa03f0aa8995062f0acafaf925adf8536bd7044a2e68316fd7d411477599bc27b + languageName: node + linkType: hard + "diff-sequences@npm:^29.4.3": version: 29.4.3 resolution: "diff-sequences@npm:29.4.3" @@ -8789,6 +6204,13 @@ __metadata: languageName: node linkType: hard +"dlv@npm:^1.1.3": + version: 1.1.3 + resolution: "dlv@npm:1.1.3" + checksum: 03eb4e769f19a027fd5b43b59e8a05e3fd2100ac239ebb0bf9a745de35d449e2f25cfaf3aa3934664551d72856f4ae8b7822016ce5c42c2d27c18ae79429ec42 + languageName: node + linkType: hard + "doctrine@npm:^3.0.0": version: 3.0.0 resolution: "doctrine@npm:3.0.0" @@ -8824,20 +6246,6 @@ __metadata: languageName: node linkType: hard -"dotenv-expand@npm:^10.0.0": - version: 10.0.0 - resolution: "dotenv-expand@npm:10.0.0" - checksum: 298f5018e29cfdcb0b5f463ba8e8627749103fbcf6cf81c561119115754ed582deee37b49dfc7253028aaba875ab7aea5fa90e5dac88e511d009ab0e6677924e - languageName: node - linkType: hard - -"dotenv@npm:^16.0.0": - version: 16.3.1 - resolution: "dotenv@npm:16.3.1" - checksum: b95ff1bbe624ead85a3cd70dbd827e8e06d5f05f716f2d0cbc476532d54c7c9469c3bc4dd93ea519f6ad711cb522c00ac9a62b6eb340d5affae8008facc3fbd7 - languageName: node - linkType: hard - "draw-svg-path@npm:^1.0.0": version: 1.0.0 resolution: "draw-svg-path@npm:1.0.0" @@ -8862,7 +6270,7 @@ __metadata: languageName: node linkType: hard -"duplexify@npm:^3.4.5, duplexify@npm:^3.5.0, duplexify@npm:^3.6.0": +"duplexify@npm:^3.4.5": version: 3.7.1 resolution: "duplexify@npm:3.7.1" dependencies: @@ -8888,24 +6296,6 @@ __metadata: languageName: node linkType: hard -"ee-first@npm:1.1.1": - version: 1.1.1 - resolution: "ee-first@npm:1.1.1" - checksum: b5bb125ee93161bc16bfe6e56c6b04de5ad2aa44234d8f644813cc95d861a6910903132b05093706de2b706599367c4130eb6d170f6b46895686b95f87d017b7 - languageName: node - linkType: hard - -"ejs@npm:^3.1.8": - version: 3.1.10 - resolution: "ejs@npm:3.1.10" - dependencies: - jake: "npm:^10.8.5" - bin: - ejs: bin/cli.js - checksum: 52eade9e68416ed04f7f92c492183340582a36482836b11eab97b159fcdcfdedc62233a1bf0bf5e5e1851c501f2dca0e2e9afd111db2599e4e7f53ee29429ae1 - languageName: node - linkType: hard - "electron-to-chromium@npm:^1.4.284": version: 1.4.324 resolution: "electron-to-chromium@npm:1.4.324" @@ -8920,6 +6310,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.5.41": + version: 1.5.49 + resolution: "electron-to-chromium@npm:1.5.49" + checksum: 7b22141c7ebea2f49b87adcbe2b353919abbe44066c50e5e44dd47759c4ef07f0a802b9fc8ce2eaa832a293945b6d49064c859f0fef36d10c12fb46af2c1005d + languageName: node + linkType: hard + "element-size@npm:^1.1.1": version: 1.1.1 resolution: "element-size@npm:1.1.1" @@ -8957,13 +6354,6 @@ __metadata: languageName: node linkType: hard -"encodeurl@npm:~1.0.2": - version: 1.0.2 - resolution: "encodeurl@npm:1.0.2" - checksum: f6c2387379a9e7c1156c1c3d4f9cb7bb11cf16dd4c1682e1f6746512564b053df5781029b6061296832b59fb22f459dbe250386d217c2f6e203601abb2ee0bec - languageName: node - linkType: hard - "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -8973,7 +6363,7 @@ __metadata: languageName: node linkType: hard -"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": +"end-of-stream@npm:^1.0.0": version: 1.4.4 resolution: "end-of-stream@npm:1.4.4" dependencies: @@ -8996,15 +6386,6 @@ __metadata: languageName: node linkType: hard -"envinfo@npm:^7.7.3": - version: 7.11.0 - resolution: "envinfo@npm:7.11.0" - bin: - envinfo: dist/cli.js - checksum: 4415b9c1ca32cdf92ce126136b9965eeac2efd6ab7e5278c06e8f86d048edad87ef4084710313a6d938ef9bc084ab17e1caee16339d731d230f3e2650f3aaf4d - languageName: node - linkType: hard - "err-code@npm:^2.0.2": version: 2.0.3 resolution: "err-code@npm:2.0.3" @@ -9038,13 +6419,6 @@ __metadata: languageName: node linkType: hard -"es-module-lexer@npm:^0.9.3": - version: 0.9.3 - resolution: "es-module-lexer@npm:0.9.3" - checksum: be77d73aee709fdc68d22b9938da81dfee3bc45e8d601629258643fe5bfdab253d6e2540035e035cfa8cf52a96366c1c19b46bcc23b4507b1d44e5907d2e7f6c - languageName: node - linkType: hard - "es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.46, es5-ext@npm:^0.10.50": version: 0.10.62 resolution: "es5-ext@npm:0.10.62" @@ -9089,25 +6463,7 @@ __metadata: languageName: node linkType: hard -"esbuild-plugin-alias@npm:^0.2.1": - version: 0.2.1 - resolution: "esbuild-plugin-alias@npm:0.2.1" - checksum: a67bc6bc2744fc8637f7321f00c1f00e4fae86c182662421738ebfabf3ad344967b9c667185c6c34d9edd5b289807d34bfdceef94620e94e0a45683534af69e0 - languageName: node - linkType: hard - -"esbuild-register@npm:^3.5.0": - version: 3.5.0 - resolution: "esbuild-register@npm:3.5.0" - dependencies: - debug: "npm:^4.3.4" - peerDependencies: - esbuild: ">=0.12 <1" - checksum: 9ccd0573cb66018e4cce3c1416eed0f5f3794c7026ce469a94e2f8761335abed8e363fc8e8bb036ab9ad7e579bb4296b8568a04ae5626596c123576b0d9c9bde - languageName: node - linkType: hard - -"esbuild@npm:^0.18.0, esbuild@npm:^0.18.10": +"esbuild@npm:^0.18.10": version: 0.18.20 resolution: "esbuild@npm:0.18.20" dependencies: @@ -9191,10 +6547,10 @@ __metadata: languageName: node linkType: hard -"escape-html@npm:~1.0.3": - version: 1.0.3 - resolution: "escape-html@npm:1.0.3" - checksum: 524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 +"escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 languageName: node linkType: hard @@ -9257,48 +6613,6 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:^2.1.0": - version: 2.1.0 - resolution: "escodegen@npm:2.1.0" - dependencies: - esprima: "npm:^4.0.1" - estraverse: "npm:^5.2.0" - esutils: "npm:^2.0.2" - source-map: "npm:~0.6.1" - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: e1450a1f75f67d35c061bf0d60888b15f62ab63aef9df1901cffc81cffbbb9e8b3de237c5502cf8613a017c1df3a3003881307c78835a1ab54d8c8d2206e01d3 - languageName: node - linkType: hard - -"eslint-plugin-storybook@npm:^0.6.15": - version: 0.6.15 - resolution: "eslint-plugin-storybook@npm:0.6.15" - dependencies: - "@storybook/csf": "npm:^0.0.1" - "@typescript-eslint/utils": "npm:^5.45.0" - requireindex: "npm:^1.1.0" - ts-dedent: "npm:^2.2.0" - peerDependencies: - eslint: ">=6" - checksum: c61f5f2af72b614c30e8b36644672cfa25ca28e963e5e6cfab438f0cb287a6270f875a2dd8cd600a04c9864b9c549e269d95ea8da88c412e2b868fcd6a3605a4 - languageName: node - linkType: hard - -"eslint-scope@npm:^5.1.1": - version: 5.1.1 - resolution: "eslint-scope@npm:5.1.1" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^4.1.1" - checksum: d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a - languageName: node - linkType: hard - "eslint-scope@npm:^7.2.2": version: 7.2.2 resolution: "eslint-scope@npm:7.2.2" @@ -9375,7 +6689,7 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": +"esprima@npm:^4.0.0, esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -9403,7 +6717,7 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^4.1.1, estraverse@npm:^4.2.0": +"estraverse@npm:^4.2.0": version: 4.3.0 resolution: "estraverse@npm:4.3.0" checksum: 9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d @@ -9438,13 +6752,6 @@ __metadata: languageName: node linkType: hard -"etag@npm:~1.8.1": - version: 1.8.1 - resolution: "etag@npm:1.8.1" - checksum: 12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84 - languageName: node - linkType: hard - "events@npm:^3.2.0": version: 3.3.0 resolution: "events@npm:3.3.0" @@ -9452,7 +6759,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:^5.0.0, execa@npm:^5.1.1": +"execa@npm:^5.0.0": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -9509,45 +6816,6 @@ __metadata: languageName: node linkType: hard -"express@npm:^4.17.3": - version: 4.19.2 - resolution: "express@npm:4.19.2" - dependencies: - accepts: "npm:~1.3.8" - array-flatten: "npm:1.1.1" - body-parser: "npm:1.20.2" - content-disposition: "npm:0.5.4" - content-type: "npm:~1.0.4" - cookie: "npm:0.6.0" - cookie-signature: "npm:1.0.6" - debug: "npm:2.6.9" - depd: "npm:2.0.0" - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - etag: "npm:~1.8.1" - finalhandler: "npm:1.2.0" - fresh: "npm:0.5.2" - http-errors: "npm:2.0.0" - merge-descriptors: "npm:1.0.1" - methods: "npm:~1.1.2" - on-finished: "npm:2.4.1" - parseurl: "npm:~1.3.3" - path-to-regexp: "npm:0.1.7" - proxy-addr: "npm:~2.0.7" - qs: "npm:6.11.0" - range-parser: "npm:~1.2.1" - safe-buffer: "npm:5.2.1" - send: "npm:0.18.0" - serve-static: "npm:1.15.0" - setprototypeof: "npm:1.2.0" - statuses: "npm:2.0.1" - type-is: "npm:~1.6.18" - utils-merge: "npm:1.0.1" - vary: "npm:~1.1.2" - checksum: e82e2662ea9971c1407aea9fc3c16d6b963e55e3830cd0ef5e00b533feda8b770af4e3be630488ef8a752d7c75c4fcefb15892868eeaafe7353cb9e3e269fdcb - languageName: node - linkType: hard - "ext@npm:^1.1.2": version: 1.7.0 resolution: "ext@npm:1.7.0" @@ -9564,20 +6832,6 @@ __metadata: languageName: node linkType: hard -"extract-zip@npm:^1.6.6": - version: 1.7.0 - resolution: "extract-zip@npm:1.7.0" - dependencies: - concat-stream: "npm:^1.6.2" - debug: "npm:^2.6.9" - mkdirp: "npm:^0.5.4" - yauzl: "npm:^2.10.0" - bin: - extract-zip: cli.js - checksum: 333f1349ee678d47268315f264dbfcd7003747d25640441e186e87c66efd7129f171f1bcfe8ff1151a24da19d5f8602daff002ee24145dc65516bc9a8e40ee08 - languageName: node - linkType: hard - "falafel@npm:^2.1.0": version: 2.2.5 resolution: "falafel@npm:2.2.5" @@ -9608,6 +6862,19 @@ __metadata: languageName: node linkType: hard +"fast-glob@npm:^3.3.0": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845 + languageName: node + linkType: hard + "fast-isnumeric@npm:^1.1.4": version: 1.1.4 resolution: "fast-isnumeric@npm:1.1.4" @@ -9649,22 +6916,6 @@ __metadata: languageName: node linkType: hard -"fd-slicer@npm:~1.1.0": - version: 1.1.0 - resolution: "fd-slicer@npm:1.1.0" - dependencies: - pend: "npm:~1.2.0" - checksum: 304dd70270298e3ffe3bcc05e6f7ade2511acc278bc52d025f8918b48b6aa3b77f10361bddfadfe2a28163f7af7adbdce96f4d22c31b2f648ba2901f0c5fc20e - languageName: node - linkType: hard - -"fetch-retry@npm:^5.0.2": - version: 5.0.6 - resolution: "fetch-retry@npm:5.0.6" - checksum: 349f50db631039630e915f70c763469cb696f3ac92ca6f63823109334a2bc62f63670b8c5a5c7e0195c39df517e60ef385cc5264f4c4904d0c6707d371fa8999 - languageName: node - linkType: hard - "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" @@ -9674,25 +6925,6 @@ __metadata: languageName: node linkType: hard -"file-system-cache@npm:2.3.0": - version: 2.3.0 - resolution: "file-system-cache@npm:2.3.0" - dependencies: - fs-extra: "npm:11.1.1" - ramda: "npm:0.29.0" - checksum: 43de19f0db32e6546bb7abeecb1d6ea83c1eca23b38905c9415a29f6219cc9d6d87b0c1a6aca92c46a0f1bc276241a339f2f68b8aa0ca5c2eb64b6e1e3e4da01 - languageName: node - linkType: hard - -"filelist@npm:^1.0.4": - version: 1.0.4 - resolution: "filelist@npm:1.0.4" - dependencies: - minimatch: "npm:^5.0.1" - checksum: 426b1de3944a3d153b053f1c0ebfd02dccd0308a4f9e832ad220707a6d1f1b3c9784d6cadf6b2f68f09a57565f63ebc7bcdc913ccf8012d834f472c46e596f41 - languageName: node - linkType: hard - "fill-range@npm:^7.1.1": version: 7.1.1 resolution: "fill-range@npm:7.1.1" @@ -9702,52 +6934,6 @@ __metadata: languageName: node linkType: hard -"finalhandler@npm:1.2.0": - version: 1.2.0 - resolution: "finalhandler@npm:1.2.0" - dependencies: - debug: "npm:2.6.9" - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - on-finished: "npm:2.4.1" - parseurl: "npm:~1.3.3" - statuses: "npm:2.0.1" - unpipe: "npm:~1.0.0" - checksum: 64b7e5ff2ad1fcb14931cd012651631b721ce657da24aedb5650ddde9378bf8e95daa451da43398123f5de161a81e79ff5affe4f9f2a6d2df4a813d6d3e254b7 - languageName: node - linkType: hard - -"find-cache-dir@npm:^2.0.0": - version: 2.1.0 - resolution: "find-cache-dir@npm:2.1.0" - dependencies: - commondir: "npm:^1.0.1" - make-dir: "npm:^2.0.0" - pkg-dir: "npm:^3.0.0" - checksum: 556117fd0af14eb88fb69250f4bba9e905e7c355c6136dff0e161b9cbd1f5285f761b778565a278da73a130f42eccc723d7ad4c002ae547ed1d698d39779dabb - languageName: node - linkType: hard - -"find-cache-dir@npm:^3.0.0": - version: 3.3.2 - resolution: "find-cache-dir@npm:3.3.2" - dependencies: - commondir: "npm:^1.0.1" - make-dir: "npm:^3.0.2" - pkg-dir: "npm:^4.1.0" - checksum: 92747cda42bff47a0266b06014610981cfbb71f55d60f2c8216bc3108c83d9745507fb0b14ecf6ab71112bed29cd6fb1a137ee7436179ea36e11287e3159e587 - languageName: node - linkType: hard - -"find-up@npm:^3.0.0": - version: 3.0.0 - resolution: "find-up@npm:3.0.0" - dependencies: - locate-path: "npm:^3.0.0" - checksum: 2c2e7d0a26db858e2f624f39038c74739e38306dee42b45f404f770db357947be9d0d587f1cac72d20c114deb38aa57316e879eb0a78b17b46da7dab0a3bd6e3 - languageName: node - linkType: hard - "find-up@npm:^4.0.0, find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" @@ -9801,13 +6987,6 @@ __metadata: languageName: node linkType: hard -"flow-parser@npm:0.*": - version: 0.221.0 - resolution: "flow-parser@npm:0.221.0" - checksum: 7ab12ff7d32b8af08493576d826eaad8b43bca501ce19c22fd1d43ee9a5d5fa9b4a9f2dc126b686f4b566462660da8e735e28185fbc4c354d2c0faf65badfc66 - languageName: node - linkType: hard - "follow-redirects@npm:^1.15.0": version: 1.15.2 resolution: "follow-redirects@npm:1.15.2" @@ -9866,17 +7045,10 @@ __metadata: languageName: node linkType: hard -"forwarded@npm:0.2.0": - version: 0.2.0 - resolution: "forwarded@npm:0.2.0" - checksum: 9b67c3fac86acdbc9ae47ba1ddd5f2f81526fa4c8226863ede5600a3f7c7416ef451f6f1e240a3cc32d0fd79fcfe6beb08fd0da454f360032bde70bf80afbb33 - languageName: node - linkType: hard - -"fresh@npm:0.5.2": - version: 0.5.2 - resolution: "fresh@npm:0.5.2" - checksum: c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a +"fraction.js@npm:^4.3.7": + version: 4.3.7 + resolution: "fraction.js@npm:4.3.7" + checksum: df291391beea9ab4c263487ffd9d17fed162dbb736982dee1379b2a8cc94e4e24e46ed508c6d278aded9080ba51872f1bc5f3a5fd8d7c74e5f105b508ac28711 languageName: node linkType: hard @@ -9890,24 +7062,6 @@ __metadata: languageName: node linkType: hard -"fs-constants@npm:^1.0.0": - version: 1.0.0 - resolution: "fs-constants@npm:1.0.0" - checksum: a0cde99085f0872f4d244e83e03a46aa387b74f5a5af750896c6b05e9077fac00e9932fdf5aef84f2f16634cd473c63037d7a512576da7d5c2b9163d1909f3a8 - languageName: node - linkType: hard - -"fs-extra@npm:11.1.1, fs-extra@npm:^11.1.0": - version: 11.1.1 - resolution: "fs-extra@npm:11.1.1" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: a2480243d7dcfa7d723c5f5b24cf4eba02a6ccece208f1524a2fbde1c629492cfb9a59e4b6d04faff6fbdf71db9fdc8ef7f396417a02884195a625f5d8dc9427 - languageName: node - linkType: hard - "fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -10031,18 +7185,6 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.2.1": - version: 1.2.2 - resolution: "get-intrinsic@npm:1.2.2" - dependencies: - function-bind: "npm:^1.1.2" - has-proto: "npm:^1.0.1" - has-symbols: "npm:^1.0.3" - hasown: "npm:^2.0.0" - checksum: 4e7fb8adc6172bae7c4fe579569b4d5238b3667c07931cd46b4eee74bbe6ff6b91329bec311a638d8e60f5b51f44fe5445693c6be89ae88d4b5c49f7ff12db0b - languageName: node - linkType: hard - "get-nonce@npm:^1.0.0": version: 1.0.1 resolution: "get-nonce@npm:1.0.1" @@ -10050,13 +7192,6 @@ __metadata: languageName: node linkType: hard -"get-npm-tarball-url@npm:^2.0.3": - version: 2.1.0 - resolution: "get-npm-tarball-url@npm:2.1.0" - checksum: af779fa5b9c89a3deaf9640630a23368f5ba6a028a1179872aaf581a59485fb2c2c6bd9b94670de228cfc5f23600c89a01e594879085f7fb4dddf820a63105b8 - languageName: node - linkType: hard - "get-package-type@npm:^0.1.0": version: 0.1.0 resolution: "get-package-type@npm:0.1.0" @@ -10064,13 +7199,6 @@ __metadata: languageName: node linkType: hard -"get-port@npm:^5.1.1": - version: 5.1.1 - resolution: "get-port@npm:5.1.1" - checksum: 2873877a469b24e6d5e0be490724a17edb39fafc795d1d662e7bea951ca649713b4a50117a473f9d162312cb0e946597bd0e049ed2f866e79e576e8e213d3d1c - languageName: node - linkType: hard - "get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" @@ -10078,30 +7206,6 @@ __metadata: languageName: node linkType: hard -"giget@npm:^1.0.0": - version: 1.1.3 - resolution: "giget@npm:1.1.3" - dependencies: - colorette: "npm:^2.0.20" - defu: "npm:^6.1.2" - https-proxy-agent: "npm:^7.0.2" - mri: "npm:^1.2.0" - node-fetch-native: "npm:^1.4.0" - pathe: "npm:^1.1.1" - tar: "npm:^6.2.0" - bin: - giget: dist/cli.mjs - checksum: 7f3d3628f4c488ab543e2edcd93b6899b2486a0afc2caab748ad65714d631f5cdfc9cf00404ed21b390c070cf5214037dffb593cd667c54b97adc6a1c657cdf9 - languageName: node - linkType: hard - -"github-slugger@npm:^1.0.0": - version: 1.5.0 - resolution: "github-slugger@npm:1.5.0" - checksum: 116f99732925f939cbfd6f2e57db1aa7e111a460db0d103e3b3f2fce6909d44311663d4542350706cad806345b9892358cc3b153674f88eeae77f43380b3bfca - languageName: node - linkType: hard - "gl-mat4@npm:^1.2.0": version: 1.2.0 resolution: "gl-mat4@npm:1.2.0" @@ -10174,25 +7278,7 @@ __metadata: languageName: node linkType: hard -"glob-promise@npm:^4.2.0": - version: 4.2.2 - resolution: "glob-promise@npm:4.2.2" - dependencies: - "@types/glob": "npm:^7.1.3" - peerDependencies: - glob: ^7.1.6 - checksum: 3eb01bed2901539365df6a4d27800afb8788840647d01f9bf3500b3de756597f2ff4b8c823971ace34db228c83159beca459dc42a70968d4e9c8200ed2cc96bd - languageName: node - linkType: hard - -"glob-to-regexp@npm:^0.4.1": - version: 0.4.1 - resolution: "glob-to-regexp@npm:0.4.1" - checksum: 0486925072d7a916f052842772b61c3e86247f0a80cc0deb9b5a3e8a1a9faad5b04fb6f58986a09f34d3e96cd2a22a24b7e9882fb1cf904c31e9a310de96c429 - languageName: node - linkType: hard - -"glob@npm:^10.0.0, glob@npm:^10.2.2, glob@npm:^10.3.10": +"glob@npm:^10.2.2, glob@npm:^10.3.10": version: 10.3.10 resolution: "glob@npm:10.3.10" dependencies: @@ -10207,7 +7293,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0": +"glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -10237,7 +7323,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.0.1, globby@npm:^11.0.2, globby@npm:^11.1.0": +"globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -10426,20 +7512,20 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: 386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.9": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" checksum: 4223a833e38e1d0d2aea630c2433cfb94ddc07dfc11d511dbd6be1d16688c5be848acc31f9a5d0d0ddbfb56d2ee5a6ae0278aceeb0ca6a13f27e06b9956fb952 languageName: node linkType: hard +"graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + "graphemer@npm:^1.4.0": version: 1.4.0 resolution: "graphemer@npm:1.4.0" @@ -10447,44 +7533,10 @@ __metadata: languageName: node linkType: hard -"grid-index@npm:^1.1.0": - version: 1.1.0 - resolution: "grid-index@npm:1.1.0" - checksum: 0ba2a622a52badc86642a002abee79b48c207092347e869528253e634573b9b55494db649fbd1779122d797aaa3b59e284023a96a7a5c666c7375f0e320f8f57 - languageName: node - linkType: hard - -"gunzip-maybe@npm:^1.4.2": - version: 1.4.2 - resolution: "gunzip-maybe@npm:1.4.2" - dependencies: - browserify-zlib: "npm:^0.1.4" - is-deflate: "npm:^1.0.0" - is-gzip: "npm:^1.0.0" - peek-stream: "npm:^1.1.0" - pumpify: "npm:^1.3.3" - through2: "npm:^2.0.3" - bin: - gunzip-maybe: bin.js - checksum: 42798a8061759885c2084e1804e51313d14f2dc9cf6c137e222953ec802f914e592d6f9dbf6ad67f4e78eb036e86db017d9c7c93bb23e90cd5ae09326296ed77 - languageName: node - linkType: hard - -"handlebars@npm:^4.7.7": - version: 4.7.8 - resolution: "handlebars@npm:4.7.8" - dependencies: - minimist: "npm:^1.2.5" - neo-async: "npm:^2.6.2" - source-map: "npm:^0.6.1" - uglify-js: "npm:^3.1.4" - wordwrap: "npm:^1.0.0" - dependenciesMeta: - uglify-js: - optional: true - bin: - handlebars: bin/handlebars - checksum: 7aff423ea38a14bb379316f3857fe0df3c5d66119270944247f155ba1f08e07a92b340c58edaa00cfe985c21508870ee5183e0634dcb53dd405f35c93ef7f10d +"grid-index@npm:^1.1.0": + version: 1.1.0 + resolution: "grid-index@npm:1.1.0" + checksum: 0ba2a622a52badc86642a002abee79b48c207092347e869528253e634573b9b55494db649fbd1779122d797aaa3b59e284023a96a7a5c666c7375f0e320f8f57 languageName: node linkType: hard @@ -10536,13 +7588,6 @@ __metadata: languageName: node linkType: hard -"has-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "has-proto@npm:1.0.1" - checksum: c8a8fe411f810b23a564bd5546a8f3f0fff6f1b692740eb7a2fdc9df716ef870040806891e2f23ff4653f1083e3895bf12088703dd1a0eac3d9202d3a4768cd0 - languageName: node - linkType: hard - "has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" @@ -10618,13 +7663,6 @@ __metadata: languageName: node linkType: hard -"hosted-git-info@npm:^2.1.4": - version: 2.8.9 - resolution: "hosted-git-info@npm:2.8.9" - checksum: 317cbc6b1bbbe23c2a40ae23f3dafe9fa349ce42a89a36f930e3f9c0530c179a3882d2ef1e4141a4c3674d6faaea862138ec55b43ad6f75e387fda2483a13c70 - languageName: node - linkType: hard - "hsluv@npm:^0.0.3": version: 0.0.3 resolution: "hsluv@npm:0.0.3" @@ -10648,13 +7686,6 @@ __metadata: languageName: node linkType: hard -"html-tags@npm:^3.1.0": - version: 3.3.1 - resolution: "html-tags@npm:3.3.1" - checksum: 680165e12baa51bad7397452d247dbcc5a5c29dac0e6754b1187eee3bf26f514bc1907a431dd2f7eb56207611ae595ee76a0acc8eaa0d931e72c791dd6463d79 - languageName: node - linkType: hard - "html-url-attributes@npm:^3.0.0": version: 3.0.0 resolution: "html-url-attributes@npm:3.0.0" @@ -10669,19 +7700,6 @@ __metadata: languageName: node linkType: hard -"http-errors@npm:2.0.0": - version: 2.0.0 - resolution: "http-errors@npm:2.0.0" - dependencies: - depd: "npm:2.0.0" - inherits: "npm:2.0.4" - setprototypeof: "npm:1.2.0" - statuses: "npm:2.0.1" - toidentifier: "npm:1.0.1" - checksum: fc6f2715fe188d091274b5ffc8b3657bd85c63e969daa68ccb77afb05b071a4b62841acb7a21e417b5539014dff2ebf9550f0b14a9ff126f2734a7c1387f8e19 - languageName: node - linkType: hard - "http-proxy-agent@npm:^5.0.0": version: 5.0.0 resolution: "http-proxy-agent@npm:5.0.0" @@ -10703,16 +7721,6 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^4.0.0": - version: 4.0.0 - resolution: "https-proxy-agent@npm:4.0.0" - dependencies: - agent-base: "npm:5" - debug: "npm:4" - checksum: fbba3e037ec04e1850e867064a763b86dd884baae9c5f4ad380504e321068c9e9b5de79cf2f3a28ede7c36036dce905b58d9f51703c5b3884d887114f4887f77 - languageName: node - linkType: hard - "https-proxy-agent@npm:^5.0.1": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" @@ -10723,7 +7731,7 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.2": +"https-proxy-agent@npm:^7.0.1": version: 7.0.2 resolution: "https-proxy-agent@npm:7.0.2" dependencies: @@ -10740,15 +7748,6 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.4": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3" - checksum: c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 - languageName: node - linkType: hard - "iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" @@ -10758,7 +7757,16 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:^1.1.12, ieee754@npm:^1.1.13": +"iconv-lite@npm:^0.4.4": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3" + checksum: c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.12": version: 1.2.1 resolution: "ieee754@npm:1.2.1" checksum: b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb @@ -10836,7 +7844,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.1, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 @@ -10877,20 +7885,6 @@ __metadata: languageName: node linkType: hard -"ipaddr.js@npm:1.9.1": - version: 1.9.1 - resolution: "ipaddr.js@npm:1.9.1" - checksum: 0486e775047971d3fdb5fb4f063829bac45af299ae0b82dcf3afa2145338e08290563a2a70f34b732d795ecc8311902e541a8530eeb30d75860a78ff4e94ce2a - languageName: node - linkType: hard - -"is-absolute-url@npm:^3.0.0": - version: 3.0.3 - resolution: "is-absolute-url@npm:3.0.3" - checksum: 04c415974c32e73a83d3a21a9bea18fc4e2c14fbe6bbd64832cf1e67a75ade2af0e900f552f0b8a447f1305f5ffc9d143ccd8d005dbe715d198c359d342b86f0 - languageName: node - linkType: hard - "is-alphabetical@npm:^2.0.0": version: 2.0.1 resolution: "is-alphabetical@npm:2.0.1" @@ -10908,7 +7902,7 @@ __metadata: languageName: node linkType: hard -"is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.1": +"is-arguments@npm:^1.1.1": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" dependencies: @@ -11033,22 +8027,6 @@ __metadata: languageName: node linkType: hard -"is-deflate@npm:^1.0.0": - version: 1.0.0 - resolution: "is-deflate@npm:1.0.0" - checksum: 35f7ffcbef3549dd8a4d8df5dc09b4f4656a0fc88326e8b5201cda54114a9c2d8efb689d87c16f3f35c95bd71dcf13dc790d62b7504745b42c53ab4b40238f5a - languageName: node - linkType: hard - -"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": - version: 2.2.1 - resolution: "is-docker@npm:2.2.1" - bin: - is-docker: cli.js - checksum: e828365958d155f90c409cdbe958f64051d99e8aedc2c8c4cd7c89dcf35329daed42f7b99346f7828df013e27deb8f721cf9408ba878c76eb9e8290235fbcdcc - languageName: node - linkType: hard - "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -11091,15 +8069,6 @@ __metadata: languageName: node linkType: hard -"is-generator-function@npm:^1.0.7": - version: 1.0.10 - resolution: "is-generator-function@npm:1.0.10" - dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: df03514df01a6098945b5a0cfa1abff715807c8e72f57c49a0686ad54b3b74d394e2d8714e6f709a71eb00c9630d48e73ca1796c1ccc84ac95092c1fecc0d98b - languageName: node - linkType: hard - "is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" @@ -11109,13 +8078,6 @@ __metadata: languageName: node linkType: hard -"is-gzip@npm:^1.0.0": - version: 1.0.0 - resolution: "is-gzip@npm:1.0.0" - checksum: cbc1db080c636a6fb0f7346e3076f8276a29a9d8b52ae67c1971a8131c43f308e98ed227d1a6f49970e6c6ebabee0568e60aed7a3579dd4e1817cddf2faaf9b7 - languageName: node - linkType: hard - "is-hexadecimal@npm:^2.0.0": version: 2.0.1 resolution: "is-hexadecimal@npm:2.0.1" @@ -11130,13 +8092,6 @@ __metadata: languageName: node linkType: hard -"is-interactive@npm:^1.0.0": - version: 1.0.0 - resolution: "is-interactive@npm:1.0.0" - checksum: dd47904dbf286cd20aa58c5192161be1a67138485b9836d5a70433b21a45442e9611b8498b8ab1f839fc962c7620667a50535fdfb4a6bc7989b8858645c06b4d - languageName: node - linkType: hard - "is-lambda@npm:^1.0.1": version: 1.0.1 resolution: "is-lambda@npm:1.0.1" @@ -11158,16 +8113,6 @@ __metadata: languageName: node linkType: hard -"is-nan@npm:^1.3.2": - version: 1.3.2 - resolution: "is-nan@npm:1.3.2" - dependencies: - call-bind: "npm:^1.0.0" - define-properties: "npm:^1.1.3" - checksum: 8bfb286f85763f9c2e28ea32e9127702fe980ffd15fa5d63ade3be7786559e6e21355d3625dd364c769c033c5aedf0a2ed3d4025d336abf1b9241e3d9eddc5b0 - languageName: node - linkType: hard - "is-number-object@npm:^1.0.4": version: 1.0.7 resolution: "is-number-object@npm:1.0.7" @@ -11191,14 +8136,7 @@ __metadata: languageName: node linkType: hard -"is-path-cwd@npm:^2.2.0": - version: 2.2.0 - resolution: "is-path-cwd@npm:2.2.0" - checksum: afce71533a427a759cd0329301c18950333d7589533c2c90205bd3fdcf7b91eb92d1940493190567a433134d2128ec9325de2fd281e05be1920fbee9edd22e0a - languageName: node - linkType: hard - -"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3": +"is-path-inside@npm:^3.0.3": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" checksum: cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 @@ -11219,22 +8157,6 @@ __metadata: languageName: node linkType: hard -"is-plain-object@npm:5.0.0": - version: 5.0.0 - resolution: "is-plain-object@npm:5.0.0" - checksum: 893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c - languageName: node - linkType: hard - -"is-plain-object@npm:^2.0.4": - version: 2.0.4 - resolution: "is-plain-object@npm:2.0.4" - dependencies: - isobject: "npm:^3.0.1" - checksum: f050fdd5203d9c81e8c4df1b3ff461c4bc64e8b5ca383bcdde46131361d0a678e80bcf00b5257646f6c636197629644d53bd8e2375aea633de09a82d57e942f4 - languageName: node - linkType: hard - "is-potential-custom-element-name@npm:^1.0.1": version: 1.0.1 resolution: "is-potential-custom-element-name@npm:1.0.1" @@ -11320,22 +8242,6 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.3": - version: 1.1.12 - resolution: "is-typed-array@npm:1.1.12" - dependencies: - which-typed-array: "npm:^1.1.11" - checksum: 9863e9cc7223c6fc1c462a2c3898a7beff6b41b1ee0fabb03b7d278ae7de670b5bcbc8627db56bb66ed60902fa37d53fe5cce0fd2f7d73ac64fe5da6f409b6ae - languageName: node - linkType: hard - -"is-unicode-supported@npm:^0.1.0": - version: 0.1.0 - resolution: "is-unicode-supported@npm:0.1.0" - checksum: 00cbe3455c3756be68d2542c416cab888aebd5012781d6819749fefb15162ff23e38501fe681b3d751c73e8ff561ac09a5293eba6f58fdf0178462ce6dcb3453 - languageName: node - linkType: hard - "is-weakmap@npm:^2.0.1": version: 2.0.1 resolution: "is-weakmap@npm:2.0.1" @@ -11360,15 +8266,6 @@ __metadata: languageName: node linkType: hard -"is-wsl@npm:^2.2.0": - version: 2.2.0 - resolution: "is-wsl@npm:2.2.0" - dependencies: - is-docker: "npm:^2.0.0" - checksum: a6fa2d370d21be487c0165c7a440d567274fbba1a817f2f0bfa41cc5e3af25041d84267baa22df66696956038a43973e72fca117918c91431920bdef490fa25e - languageName: node - linkType: hard - "isarray@npm:0.0.1": version: 0.0.1 resolution: "isarray@npm:0.0.1" @@ -11404,13 +8301,6 @@ __metadata: languageName: node linkType: hard -"isobject@npm:^3.0.1": - version: 3.0.1 - resolution: "isobject@npm:3.0.1" - checksum: 03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db - languageName: node - linkType: hard - "istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": version: 3.2.0 resolution: "istanbul-lib-coverage@npm:3.2.0" @@ -11489,20 +8379,6 @@ __metadata: languageName: node linkType: hard -"jake@npm:^10.8.5": - version: 10.8.7 - resolution: "jake@npm:10.8.7" - dependencies: - async: "npm:^3.2.3" - chalk: "npm:^4.0.2" - filelist: "npm:^1.0.4" - minimatch: "npm:^3.1.2" - bin: - jake: bin/cli.js - checksum: 89326d01a8bc110d02d973729a66394c79a34b34461116f5c530a2a2dbc30265683fe6737928f75df9178e9d369ff1442f5753fb983d525e740eefdadc56a103 - languageName: node - linkType: hard - "jest-changed-files@npm:^29.7.0": version: 29.7.0 resolution: "jest-changed-files@npm:29.7.0" @@ -11792,16 +8668,6 @@ __metadata: languageName: node linkType: hard -"jest-mock@npm:^27.0.6": - version: 27.5.1 - resolution: "jest-mock@npm:27.5.1" - dependencies: - "@jest/types": "npm:^27.5.1" - "@types/node": "npm:*" - checksum: 6ad58454b37ee3f726930b07efbf40a7c79d2d2d9c7b226708b4b550bc0904de93bcacf714105d11952a5c0bc855e5d59145c8c9dbbb4e69b46e7367abf53b52 - languageName: node - linkType: hard - "jest-mock@npm:^29.7.0": version: 29.7.0 resolution: "jest-mock@npm:29.7.0" @@ -12035,6 +8901,15 @@ __metadata: languageName: node linkType: hard +"jiti@npm:^1.21.0": + version: 1.21.6 + resolution: "jiti@npm:1.21.6" + bin: + jiti: bin/jiti.js + checksum: 05b9ed58cd30d0c3ccd3c98209339e74f50abd9a17e716f65db46b6a35812103f6bde6e134be7124d01745586bca8cc5dae1d0d952267c3ebe55171949c32e56 + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -12065,37 +8940,6 @@ __metadata: languageName: node linkType: hard -"jscodeshift@npm:^0.14.0": - version: 0.14.0 - resolution: "jscodeshift@npm:0.14.0" - dependencies: - "@babel/core": "npm:^7.13.16" - "@babel/parser": "npm:^7.13.16" - "@babel/plugin-proposal-class-properties": "npm:^7.13.0" - "@babel/plugin-proposal-nullish-coalescing-operator": "npm:^7.13.8" - "@babel/plugin-proposal-optional-chaining": "npm:^7.13.12" - "@babel/plugin-transform-modules-commonjs": "npm:^7.13.8" - "@babel/preset-flow": "npm:^7.13.13" - "@babel/preset-typescript": "npm:^7.13.0" - "@babel/register": "npm:^7.13.16" - babel-core: "npm:^7.0.0-bridge.0" - chalk: "npm:^4.1.2" - flow-parser: "npm:0.*" - graceful-fs: "npm:^4.2.4" - micromatch: "npm:^4.0.4" - neo-async: "npm:^2.5.0" - node-dir: "npm:^0.1.17" - recast: "npm:^0.21.0" - temp: "npm:^0.8.4" - write-file-atomic: "npm:^2.3.0" - peerDependencies: - "@babel/preset-env": ^7.1.6 - bin: - jscodeshift: bin/jscodeshift.js - checksum: dab63bdb4b7e67d79634fcd3f5dc8b227146e9f68aa88700bc49c5a45b6339d05bd934a98aa53d29abd04f81237d010e7e037799471b2aab66ec7b9a7d752786 - languageName: node - linkType: hard - "jsdom@npm:^20.0.0": version: 20.0.3 resolution: "jsdom@npm:20.0.3" @@ -12144,15 +8988,6 @@ __metadata: languageName: node linkType: hard -"jsesc@npm:~0.5.0": - version: 0.5.0 - resolution: "jsesc@npm:0.5.0" - bin: - jsesc: bin/jsesc - checksum: f93792440ae1d80f091b65f8ceddf8e55c4bb7f1a09dee5dcbdb0db5612c55c0f6045625aa6b7e8edb2e0a4feabd80ee48616dbe2d37055573a84db3d24f96d9 - languageName: node - linkType: hard - "json-parse-even-better-errors@npm:^2.3.0": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" @@ -12183,19 +9018,6 @@ __metadata: languageName: node linkType: hard -"jsonfile@npm:^6.0.1": - version: 6.1.0 - resolution: "jsonfile@npm:6.1.0" - dependencies: - graceful-fs: "npm:^4.1.6" - universalify: "npm:^2.0.0" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 - languageName: node - linkType: hard - "kdbush@npm:^3.0.0": version: 3.0.0 resolution: "kdbush@npm:3.0.0" @@ -12203,13 +9025,6 @@ __metadata: languageName: node linkType: hard -"kind-of@npm:^6.0.2": - version: 6.0.3 - resolution: "kind-of@npm:6.0.3" - checksum: 61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 - languageName: node - linkType: hard - "kleur@npm:^3.0.3": version: 3.0.3 resolution: "kleur@npm:3.0.3" @@ -12217,17 +9032,6 @@ __metadata: languageName: node linkType: hard -"lazy-universal-dotenv@npm:^4.0.0": - version: 4.0.0 - resolution: "lazy-universal-dotenv@npm:4.0.0" - dependencies: - app-root-dir: "npm:^1.0.2" - dotenv: "npm:^16.0.0" - dotenv-expand: "npm:^10.0.0" - checksum: 3bc4fe649c46c4a20561ca1fd10cd1df641d2c6c42c61af6c65a5fe0546cb548f449e13e6c7440be445c9fe5b4973c25f499e7d899b8704b7b9bd0ec85bbfe2d - languageName: node - linkType: hard - "leaflet@npm:^1.9.3": version: 1.9.3 resolution: "leaflet@npm:1.9.3" @@ -12262,6 +9066,20 @@ __metadata: languageName: node linkType: hard +"lilconfig@npm:^2.1.0": + version: 2.1.0 + resolution: "lilconfig@npm:2.1.0" + checksum: 64645641aa8d274c99338e130554abd6a0190533c0d9eb2ce7ebfaf2e05c7d9961f3ffe2bfa39efd3b60c521ba3dd24fa236fe2775fc38501bf82bf49d4678b8 + languageName: node + linkType: hard + +"lilconfig@npm:^3.0.0": + version: 3.1.2 + resolution: "lilconfig@npm:3.1.2" + checksum: f059630b1a9bddaeba83059db00c672b64dc14074e9f232adce32b38ca1b5686ab737eb665c5ba3c32f147f0002b4bee7311ad0386a9b98547b5623e87071fbe + languageName: node + linkType: hard + "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -12269,16 +9087,6 @@ __metadata: languageName: node linkType: hard -"locate-path@npm:^3.0.0": - version: 3.0.0 - resolution: "locate-path@npm:3.0.0" - dependencies: - p-locate: "npm:^3.0.0" - path-exists: "npm:^3.0.0" - checksum: 3db394b7829a7fe2f4fbdd25d3c4689b85f003c318c5da4052c7e56eed697da8f1bce5294f685c69ff76e32cba7a33629d94396976f6d05fb7f4c755c5e2ae8b - languageName: node - linkType: hard - "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -12297,13 +9105,6 @@ __metadata: languageName: node linkType: hard -"lodash.debounce@npm:^4.0.8": - version: 4.0.8 - resolution: "lodash.debounce@npm:4.0.8" - checksum: 762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 - languageName: node - linkType: hard - "lodash.memoize@npm:4.x": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" @@ -12325,16 +9126,6 @@ __metadata: languageName: node linkType: hard -"log-symbols@npm:^4.1.0": - version: 4.1.0 - resolution: "log-symbols@npm:4.1.0" - dependencies: - chalk: "npm:^4.1.0" - is-unicode-supported: "npm:^0.1.0" - checksum: 67f445a9ffa76db1989d0fa98586e5bc2fd5247260dafb8ad93d9f0ccd5896d53fb830b0e54dade5ad838b9de2006c826831a3c528913093af20dff8bd24aca6 - languageName: node - linkType: hard - "longest-streak@npm:^3.0.0": version: 3.1.0 resolution: "longest-streak@npm:3.1.0" @@ -12389,44 +9180,34 @@ __metadata: languageName: node linkType: hard -"lz-string@npm:^1.4.4": - version: 1.5.0 - resolution: "lz-string@npm:1.5.0" - bin: - lz-string: bin/bin.js - checksum: 36128e4de34791838abe979b19927c26e67201ca5acf00880377af7d765b38d1c60847e01c5ec61b1a260c48029084ab3893a3925fd6e48a04011364b089991b - languageName: node - linkType: hard - -"magic-string@npm:^0.27.0": - version: 0.27.0 - resolution: "magic-string@npm:0.27.0" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.4.13" - checksum: cddacfea14441ca57ae8a307bc3cf90bac69efaa4138dd9a80804cffc2759bf06f32da3a293fb13eaa96334b7d45b7768a34f1d226afae25d2f05b05a3bb37d8 +"lucide-react@npm:^0.452.0": + version: 0.452.0 + resolution: "lucide-react@npm:0.452.0" + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc + checksum: 8e8dd351dfcdffc65a3a76eba04f08310fb13c8fce3e2cab74246c72df45d37e467d521b36053298fb33fe1c5c4770be4750eefa224ae5cf6258dffe95c72da1 languageName: node linkType: hard -"magic-string@npm:^0.30.0": - version: 0.30.5 - resolution: "magic-string@npm:0.30.5" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.4.15" - checksum: 38ac220ca7539e96da7ea2f38d85796bdf5c69b6bcae728c4bc2565084e6dc326b9174ee9770bea345cf6c9b3a24041b767167874fab5beca874d2356a9d1520 +"lucide-react@npm:^0.454.0": + version: 0.454.0 + resolution: "lucide-react@npm:0.454.0" + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc + checksum: e5eebe542e32f0c2210a702fddbbe6e37b977dc7d8ff991b7fd5e886f96adf2ac4870275b618c79d6b2f611da1bfb8696062c5138b06ee728090309b8e27ca07 languageName: node linkType: hard -"make-dir@npm:^2.0.0, make-dir@npm:^2.1.0": - version: 2.1.0 - resolution: "make-dir@npm:2.1.0" - dependencies: - pify: "npm:^4.0.1" - semver: "npm:^5.6.0" - checksum: ada869944d866229819735bee5548944caef560d7a8536ecbc6536edca28c72add47cc4f6fc39c54fb25d06b58da1f8994cf7d9df7dadea047064749efc085d8 +"lz-string@npm:^1.4.4": + version: 1.5.0 + resolution: "lz-string@npm:1.5.0" + bin: + lz-string: bin/bin.js + checksum: 36128e4de34791838abe979b19927c26e67201ca5acf00880377af7d765b38d1c60847e01c5ec61b1a260c48029084ab3893a3925fd6e48a04011364b089991b languageName: node linkType: hard -"make-dir@npm:^3.0.0, make-dir@npm:^3.0.2": +"make-dir@npm:^3.0.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" dependencies: @@ -12479,22 +9260,6 @@ __metadata: languageName: node linkType: hard -"map-or-similar@npm:^1.5.0": - version: 1.5.0 - resolution: "map-or-similar@npm:1.5.0" - checksum: 33c6ccfdc272992e33e4e99a69541a3e7faed9de3ac5bc732feb2500a9ee71d3f9d098980a70b7746e7eeb7f859ff7dfb8aa9b5ecc4e34170a32ab78cfb18def - languageName: node - linkType: hard - -"markdown-to-jsx@npm:^7.1.8": - version: 7.3.2 - resolution: "markdown-to-jsx@npm:7.3.2" - peerDependencies: - react: ">= 0.14.0" - checksum: 191b9a9defeed02e12dd340cebf279f577266dac7b34574fa44ce4d64ee8536f9967d455b8303c853f84413feb473118290a6160d8221eeaf3b9e4961b8980e3 - languageName: node - linkType: hard - "math-log2@npm:^1.0.1": version: 1.0.1 resolution: "math-log2@npm:1.0.1" @@ -12502,15 +9267,6 @@ __metadata: languageName: node linkType: hard -"mdast-util-definitions@npm:^4.0.0": - version: 4.0.0 - resolution: "mdast-util-definitions@npm:4.0.0" - dependencies: - unist-util-visit: "npm:^2.0.0" - checksum: d81bb0b702f99878c8e8e4f66dd7f6f673ab341f061b3d9487ba47dad28b584e02f16b4c42df23714eaac8a7dd8544ba7d77308fad8d4a9fd0ac92e2a7f56be9 - languageName: node - linkType: hard - "mdast-util-from-markdown@npm:^2.0.0": version: 2.0.1 resolution: "mdast-util-from-markdown@npm:2.0.1" @@ -12622,13 +9378,6 @@ __metadata: languageName: node linkType: hard -"mdast-util-to-string@npm:^1.0.0": - version: 1.1.0 - resolution: "mdast-util-to-string@npm:1.1.0" - checksum: 5dad9746ec0839792a8a35f504564e8d2b8c30013652410306c111963d33f1ee7b5477aa64ed77b64e13216363a29395809875ffd80e2031a08614657628a121 - languageName: node - linkType: hard - "mdast-util-to-string@npm:^4.0.0": version: 4.0.0 resolution: "mdast-util-to-string@npm:4.0.0" @@ -12638,29 +9387,6 @@ __metadata: languageName: node linkType: hard -"media-typer@npm:0.3.0": - version: 0.3.0 - resolution: "media-typer@npm:0.3.0" - checksum: d160f31246907e79fed398470285f21bafb45a62869dc469b1c8877f3f064f5eabc4bcc122f9479b8b605bc5c76187d7871cf84c4ee3ecd3e487da1993279928 - languageName: node - linkType: hard - -"memoizerific@npm:^1.11.3": - version: 1.11.3 - resolution: "memoizerific@npm:1.11.3" - dependencies: - map-or-similar: "npm:^1.5.0" - checksum: 661bf69b7afbfad57f0208f0c63324f4c96087b480708115b78ee3f0237d86c7f91347f6db31528740b2776c2e34c709bcb034e1e910edee2270c9603a0a469e - languageName: node - linkType: hard - -"merge-descriptors@npm:1.0.1": - version: 1.0.1 - resolution: "merge-descriptors@npm:1.0.1" - checksum: b67d07bd44cfc45cebdec349bb6e1f7b077ee2fd5beb15d1f7af073849208cb6f144fe403e29a36571baf3f4e86469ac39acf13c318381e958e186b2766f54ec - languageName: node - linkType: hard - "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -12675,13 +9401,6 @@ __metadata: languageName: node linkType: hard -"methods@npm:~1.1.2": - version: 1.1.2 - resolution: "methods@npm:1.1.2" - checksum: bdf7cc72ff0a33e3eede03708c08983c4d7a173f91348b4b1e4f47d4cdbf734433ad971e7d1e8c77247d9e5cd8adb81ea4c67b0a2db526b758b2233d7814b8b2 - languageName: node - linkType: hard - "micromark-core-commonmark@npm:^2.0.0": version: 2.0.1 resolution: "micromark-core-commonmark@npm:2.0.1" @@ -12928,37 +9647,29 @@ __metadata: languageName: node linkType: hard -"mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": +"micromatch@npm:^4.0.5": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": version: 1.52.0 resolution: "mime-db@npm:1.52.0" checksum: 0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.25, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12": version: 2.1.35 resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 - languageName: node - linkType: hard - -"mime@npm:1.6.0": - version: 1.6.0 - resolution: "mime@npm:1.6.0" - bin: - mime: cli.js - checksum: b92cd0adc44888c7135a185bfd0dddc42c32606401c72896a842ae15da71eb88858f17669af41e498b463cd7eb998f7b48939a25b08374c7924a9c8a6f8a81b0 - languageName: node - linkType: hard - -"mime@npm:^2.0.3": - version: 2.6.0 - resolution: "mime@npm:2.6.0" - bin: - mime: cli.js - checksum: a7f2589900d9c16e3bdf7672d16a6274df903da958c1643c9c45771f0478f3846dcb1097f31eb9178452570271361e2149310931ec705c037210fc69639c8e6c + dependencies: + mime-db: "npm:1.52.0" + checksum: 82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 languageName: node linkType: hard @@ -12969,14 +9680,14 @@ __metadata: languageName: node linkType: hard -"min-indent@npm:^1.0.0, min-indent@npm:^1.0.1": +"min-indent@npm:^1.0.0": version: 1.0.1 resolution: "min-indent@npm:1.0.1" checksum: 7e207bd5c20401b292de291f02913230cb1163abca162044f7db1d951fa245b174dc00869d40dd9a9f32a885ad6a5f3e767ee104cf278f399cb4e92d3f582d5c languageName: node linkType: hard -"minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -12985,15 +9696,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3 - languageName: node - linkType: hard - "minimatch@npm:^9.0.1": version: 9.0.3 resolution: "minimatch@npm:9.0.3" @@ -13094,24 +9796,6 @@ __metadata: languageName: node linkType: hard -"mkdirp-classic@npm:^0.5.2": - version: 0.5.3 - resolution: "mkdirp-classic@npm:0.5.3" - checksum: 95371d831d196960ddc3833cc6907e6b8f67ac5501a6582f47dfae5eb0f092e9f8ce88e0d83afcae95d6e2b61a01741ba03714eeafb6f7a6e9dcc158ac85b168 - languageName: node - linkType: hard - -"mkdirp@npm:^0.5.4": - version: 0.5.6 - resolution: "mkdirp@npm:0.5.6" - dependencies: - minimist: "npm:^1.2.6" - bin: - mkdirp: bin/cmd.js - checksum: e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 - languageName: node - linkType: hard - "mkdirp@npm:^1.0.3": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" @@ -13155,13 +9839,6 @@ __metadata: languageName: node linkType: hard -"mri@npm:^1.2.0": - version: 1.2.0 - resolution: "mri@npm:1.2.0" - checksum: a3d32379c2554cf7351db6237ddc18dc9e54e4214953f3da105b97dc3babe0deb3ffe99cf409b38ea47cc29f9430561ba6b53b24ab8f9ce97a4b50409e4a50e7 - languageName: node - linkType: hard - "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -13176,7 +9853,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.1.1": +"ms@npm:^2.1.1": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 @@ -13199,7 +9876,18 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.6": +"mz@npm:^2.7.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: "npm:^1.0.0" + object-assign: "npm:^4.0.1" + thenify-all: "npm:^1.0.0" + checksum: 103114e93f87362f0b56ab5b2e7245051ad0276b646e3902c98397d18bb8f4a77f2ea4a2c9d3ad516034ea3a56553b60d3f5f78220001ca4c404bd711bd0af39 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.6, nanoid@npm:^3.3.7": version: 3.3.7 resolution: "nanoid@npm:3.3.7" bin: @@ -13235,20 +9923,13 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": +"negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: 3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 languageName: node linkType: hard -"neo-async@npm:^2.5.0, neo-async@npm:^2.6.2": - version: 2.6.2 - resolution: "neo-async@npm:2.6.2" - checksum: c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d - languageName: node - linkType: hard - "next-tick@npm:^1.1.0": version: 1.1.0 resolution: "next-tick@npm:1.1.0" @@ -13266,36 +9947,6 @@ __metadata: languageName: node linkType: hard -"node-dir@npm:^0.1.17": - version: 0.1.17 - resolution: "node-dir@npm:0.1.17" - dependencies: - minimatch: "npm:^3.0.2" - checksum: 16222e871708c405079ff8122d4a7e1d522c5b90fc8f12b3112140af871cfc70128c376e845dcd0044c625db0d2efebd2d852414599d240564db61d53402b4c1 - languageName: node - linkType: hard - -"node-fetch-native@npm:^1.4.0": - version: 1.4.1 - resolution: "node-fetch-native@npm:1.4.1" - checksum: ab298a42ebf3b1b6c6a8cbc53d8ba703895f55171ed743b0828c2a87d461642d8053143864915a69d41cc01013db86406da105fff6c0a05a00d8caf5c279549c - languageName: node - linkType: hard - -"node-fetch@npm:^2.0.0": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 - languageName: node - linkType: hard - "node-gyp@npm:latest": version: 10.0.1 resolution: "node-gyp@npm:10.0.1" @@ -13330,6 +9981,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.18": + version: 2.0.18 + resolution: "node-releases@npm:2.0.18" + checksum: 786ac9db9d7226339e1dc84bbb42007cb054a346bd9257e6aa154d294f01bc6a6cddb1348fa099f079be6580acbb470e3c048effd5f719325abd0179e566fd27 + languageName: node + linkType: hard + "node-releases@npm:^2.0.8": version: 2.0.10 resolution: "node-releases@npm:2.0.10" @@ -13348,18 +10006,6 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^2.5.0": - version: 2.5.0 - resolution: "normalize-package-data@npm:2.5.0" - dependencies: - hosted-git-info: "npm:^2.1.4" - resolve: "npm:^1.10.0" - semver: "npm:2 || 3 || 4 || 5" - validate-npm-package-license: "npm:^3.0.1" - checksum: 357cb1646deb42f8eb4c7d42c4edf0eec312f3628c2ef98501963cc4bbe7277021b2b1d977f982b2edce78f5a1014613ce9cf38085c3df2d76730481357ca504 - languageName: node - linkType: hard - "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -13367,6 +10013,13 @@ __metadata: languageName: node linkType: hard +"normalize-range@npm:^0.1.2": + version: 0.1.2 + resolution: "normalize-range@npm:0.1.2" + checksum: bf39b73a63e0a42ad1a48c2bd1bda5a07ede64a7e2567307a407674e595bcff0fa0d57e8e5f1e7fa5e91000797c7615e13613227aaaa4d6d6e87f5bd5cc95de6 + languageName: node + linkType: hard + "normalize-svg-path@npm:^1.0.0": version: 1.1.0 resolution: "normalize-svg-path@npm:1.1.0" @@ -13383,6 +10036,29 @@ __metadata: languageName: node linkType: hard +"nova-ui-kit@npm:^1.1.12": + version: 1.1.12 + resolution: "nova-ui-kit@npm:1.1.12" + dependencies: + "@radix-ui/react-collapsible": "npm:^1.1.1" + "@radix-ui/react-popover": "npm:^1.1.2" + "@radix-ui/react-select": "npm:^2.1.2" + "@radix-ui/react-slider": "npm:^1.2.1" + "@radix-ui/react-slot": "npm:^1.1.0" + class-variance-authority: "npm:^0.7.0" + clsx: "npm:^2.1.1" + cmdk: "npm:^1.0.0" + date-fns: "npm:^3.6.0" + lucide-react: "npm:^0.452.0" + react: "npm:^18.3.1" + react-day-picker: "npm:^8.10.1" + react-dom: "npm:^18.3.1" + tailwind-merge: "npm:^2.5.4" + tailwindcss-animate: "npm:^1.0.7" + checksum: 25b1d24a5209c1dfa4b71bbaba1eb3bbf6a93eacdf7c9e89e1e83d5657b4f46f2b84d414d98b0b33ef38e6c951958eea37e8af839db989db69d571394da04d67 + languageName: node + linkType: hard + "npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" @@ -13408,13 +10084,20 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: 1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 languageName: node linkType: hard +"object-hash@npm:^3.0.0": + version: 3.0.0 + resolution: "object-hash@npm:3.0.0" + checksum: a06844537107b960c1c8b96cd2ac8592a265186bfa0f6ccafe0d34eabdb526f6fa81da1f37c43df7ed13b12a4ae3457a16071603bcd39d8beddb5f08c37b0f47 + languageName: node + linkType: hard + "object-inspect@npm:^1.9.0": version: 1.12.3 resolution: "object-inspect@npm:1.12.3" @@ -13451,23 +10134,7 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:2.4.1": - version: 2.4.1 - resolution: "on-finished@npm:2.4.1" - dependencies: - ee-first: "npm:1.1.1" - checksum: 46fb11b9063782f2d9968863d9cbba33d77aa13c17f895f56129c274318b86500b22af3a160fe9995aa41317efcd22941b6eba747f718ced08d9a73afdb087b4 - languageName: node - linkType: hard - -"on-headers@npm:~1.0.2": - version: 1.0.2 - resolution: "on-headers@npm:1.0.2" - checksum: f649e65c197bf31505a4c0444875db0258e198292f34b884d73c2f751e91792ef96bb5cf89aa0f4fecc2e4dc662461dda606b1274b0e564f539cae5d2f5fc32f - languageName: node - linkType: hard - -"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": +"once@npm:^1.3.0, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" dependencies: @@ -13485,7 +10152,7 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.0, onetime@npm:^5.1.2": +"onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" dependencies: @@ -13494,17 +10161,6 @@ __metadata: languageName: node linkType: hard -"open@npm:^8.0.4, open@npm:^8.4.0": - version: 8.4.2 - resolution: "open@npm:8.4.2" - dependencies: - define-lazy-prop: "npm:^2.0.0" - is-docker: "npm:^2.1.1" - is-wsl: "npm:^2.2.0" - checksum: bb6b3a58401dacdb0aad14360626faf3fb7fba4b77816b373495988b724fb48941cad80c1b65d62bb31a17609b2cd91c41a181602caea597ca80dfbcc27e84c9 - languageName: node - linkType: hard - "optionator@npm:^0.8.1": version: 0.8.3 resolution: "optionator@npm:0.8.3" @@ -13533,24 +10189,7 @@ __metadata: languageName: node linkType: hard -"ora@npm:^5.4.1": - version: 5.4.1 - resolution: "ora@npm:5.4.1" - dependencies: - bl: "npm:^4.1.0" - chalk: "npm:^4.1.0" - cli-cursor: "npm:^3.1.0" - cli-spinners: "npm:^2.5.0" - is-interactive: "npm:^1.0.0" - is-unicode-supported: "npm:^0.1.0" - log-symbols: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - wcwidth: "npm:^1.0.1" - checksum: 10ff14aace236d0e2f044193362b22edce4784add08b779eccc8f8ef97195cae1248db8ec1ec5f5ff076f91acbe573f5f42a98c19b78dba8c54eefff983cae85 - languageName: node - linkType: hard - -"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": +"p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" dependencies: @@ -13568,15 +10207,6 @@ __metadata: languageName: node linkType: hard -"p-locate@npm:^3.0.0": - version: 3.0.0 - resolution: "p-locate@npm:3.0.0" - dependencies: - p-limit: "npm:^2.0.0" - checksum: 7b7f06f718f19e989ce6280ed4396fb3c34dabdee0df948376483032f9d5ec22fdf7077ec942143a75827bb85b11da72016497fc10dac1106c837ed593969ee8 - languageName: node - linkType: hard - "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -13611,13 +10241,6 @@ __metadata: languageName: node linkType: hard -"pako@npm:~0.2.0": - version: 0.2.9 - resolution: "pako@npm:0.2.9" - checksum: 79c1806ebcf325b60ae599e4d7227c2e346d7b829dc20f5cf24cef07c934079dc3a61c5b3c8278a2f7a190c4a613e343ea11e5302dbe252efd11712df4b6b041 - languageName: node - linkType: hard - "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -13650,7 +10273,7 @@ __metadata: languageName: node linkType: hard -"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": +"parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" dependencies: @@ -13694,20 +10317,6 @@ __metadata: languageName: node linkType: hard -"parseurl@npm:~1.3.3": - version: 1.3.3 - resolution: "parseurl@npm:1.3.3" - checksum: 90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 - languageName: node - linkType: hard - -"path-exists@npm:^3.0.0": - version: 3.0.0 - resolution: "path-exists@npm:3.0.0" - checksum: 17d6a5664bc0a11d48e2b2127d28a0e58822c6740bde30403f08013da599182289c56518bec89407e3f31d3c2b6b296a4220bc3f867f0911fee6952208b04167 - languageName: node - linkType: hard - "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -13746,13 +10355,6 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:0.1.7": - version: 0.1.7 - resolution: "path-to-regexp@npm:0.1.7" - checksum: 50a1ddb1af41a9e68bd67ca8e331a705899d16fb720a1ea3a41e310480948387daf603abb14d7b0826c58f10146d49050a1291ba6a82b78a382d1c02c0b8f905 - languageName: node - linkType: hard - "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -13760,13 +10362,6 @@ __metadata: languageName: node linkType: hard -"pathe@npm:^1.1.1": - version: 1.1.1 - resolution: "pathe@npm:1.1.1" - checksum: 3ae5a0529c3415d91c3ac9133f52cffea54a0dd46892fe059f4b80faf36fd207957d4594bdc87043b65d0761b1e5728f81f46bafff3b5302da4e2e48889b8c0e - languageName: node - linkType: hard - "pbf@npm:^3.2.1": version: 3.2.1 resolution: "pbf@npm:3.2.1" @@ -13779,24 +10374,6 @@ __metadata: languageName: node linkType: hard -"peek-stream@npm:^1.1.0": - version: 1.1.3 - resolution: "peek-stream@npm:1.1.3" - dependencies: - buffer-from: "npm:^1.0.0" - duplexify: "npm:^3.5.0" - through2: "npm:^2.0.3" - checksum: 3c35d1951b8640036f93b1b5628a90f849e49ca4f2e6aba393ff4978413931d9c491c83f71a92f878d5ea4c670af0bba04dfcfb79b310ead22601db7c1420e36 - languageName: node - linkType: hard - -"pend@npm:~1.2.0": - version: 1.2.0 - resolution: "pend@npm:1.2.0" - checksum: 8a87e63f7a4afcfb0f9f77b39bb92374afc723418b9cb716ee4257689224171002e07768eeade4ecd0e86f1fa3d8f022994219fb45634f2dbd78c6803e452458 - languageName: node - linkType: hard - "performance-now@npm:^2.1.0": version: 2.1.0 resolution: "performance-now@npm:2.1.0" @@ -13818,37 +10395,35 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.2.3, picomatch@npm:^2.3.0, picomatch@npm:^2.3.1": +"picocolors@npm:^1.0.1, picocolors@npm:^1.1.0": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be languageName: node linkType: hard -"pify@npm:^4.0.1": - version: 4.0.1 - resolution: "pify@npm:4.0.1" - checksum: 6f9d404b0d47a965437403c9b90eca8bb2536407f03de165940e62e72c8c8b75adda5516c6b9b23675a5877cc0bcac6bdfb0ef0e39414cd2476d5495da40e7cf +"pify@npm:^2.3.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc languageName: node linkType: hard -"pirates@npm:^4.0.4, pirates@npm:^4.0.5": +"pirates@npm:^4.0.1, pirates@npm:^4.0.4": version: 4.0.6 resolution: "pirates@npm:4.0.6" checksum: 00d5fa51f8dded94d7429700fb91a0c1ead00ae2c7fd27089f0c5b63e6eca36197fe46384631872690a66f390c5e27198e99006ab77ae472692ab9c2ca903f36 languageName: node linkType: hard -"pkg-dir@npm:^3.0.0": - version: 3.0.0 - resolution: "pkg-dir@npm:3.0.0" - dependencies: - find-up: "npm:^3.0.0" - checksum: 902a3d0c1f8ac43b1795fa1ba6ffeb37dfd53c91469e969790f6ed5e29ff2bdc50b63ba6115dc056d2efb4a040aa2446d512b3804bdafdf302f734fb3ec21847 - languageName: node - linkType: hard - -"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": +"pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" dependencies: @@ -13857,15 +10432,6 @@ __metadata: languageName: node linkType: hard -"pkg-dir@npm:^5.0.0": - version: 5.0.0 - resolution: "pkg-dir@npm:5.0.0" - dependencies: - find-up: "npm:^5.0.0" - checksum: 793a496d685dc55bbbdbbb22d884535c3b29241e48e3e8d37e448113a71b9e42f5481a61fdc672d7322de12fbb2c584dd3a68bf89b18fffce5c48a390f911bc5 - languageName: node - linkType: hard - "plotly.js@npm:^2.25.2": version: 2.28.0 resolution: "plotly.js@npm:2.28.0" @@ -13931,15 +10497,6 @@ __metadata: languageName: node linkType: hard -"polished@npm:^4.2.2": - version: 4.2.2 - resolution: "polished@npm:4.2.2" - dependencies: - "@babel/runtime": "npm:^7.17.8" - checksum: 1d054d1fea18ac7d921ca91504ffcf1ef0f505eda6acbfec6e205a98ebfea80b658664995deb35907dabc5f75f287dc2894812503a8aed28285bb91f25cf7400 - languageName: node - linkType: hard - "polybooljs@npm:^1.2.0": version: 1.2.0 resolution: "polybooljs@npm:1.2.0" @@ -13947,6 +10504,87 @@ __metadata: languageName: node linkType: hard +"postcss-import@npm:^15.1.0": + version: 15.1.0 + resolution: "postcss-import@npm:15.1.0" + dependencies: + postcss-value-parser: "npm:^4.0.0" + read-cache: "npm:^1.0.0" + resolve: "npm:^1.1.7" + peerDependencies: + postcss: ^8.0.0 + checksum: 518aee5c83ea6940e890b0be675a2588db68b2582319f48c3b4e06535a50ea6ee45f7e63e4309f8754473245c47a0372632378d1d73d901310f295a92f26f17b + languageName: node + linkType: hard + +"postcss-js@npm:^4.0.1": + version: 4.0.1 + resolution: "postcss-js@npm:4.0.1" + dependencies: + camelcase-css: "npm:^2.0.1" + peerDependencies: + postcss: ^8.4.21 + checksum: af35d55cb873b0797d3b42529514f5318f447b134541844285c9ac31a17497297eb72296902967911bb737a75163441695737300ce2794e3bd8c70c13a3b106e + languageName: node + linkType: hard + +"postcss-load-config@npm:^4.0.1": + version: 4.0.2 + resolution: "postcss-load-config@npm:4.0.2" + dependencies: + lilconfig: "npm:^3.0.0" + yaml: "npm:^2.3.4" + peerDependencies: + postcss: ">=8.0.9" + ts-node: ">=9.0.0" + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + checksum: 3d7939acb3570b0e4b4740e483d6e555a3e2de815219cb8a3c8fc03f575a6bde667443aa93369c0be390af845cb84471bf623e24af833260de3a105b78d42519 + languageName: node + linkType: hard + +"postcss-nested@npm:^6.0.1": + version: 6.2.0 + resolution: "postcss-nested@npm:6.2.0" + dependencies: + postcss-selector-parser: "npm:^6.1.1" + peerDependencies: + postcss: ^8.2.14 + checksum: 7f9c3f2d764191a39364cbdcec350f26a312431a569c9ef17408021424726b0d67995ff5288405e3724bb7152a4c92f73c027e580ec91e798800ed3c52e2bc6e + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.1.1": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.2.0": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161 + languageName: node + linkType: hard + +"postcss@npm:^8.4.23, postcss@npm:^8.4.47": + version: 8.4.47 + resolution: "postcss@npm:8.4.47" + dependencies: + nanoid: "npm:^3.3.7" + picocolors: "npm:^1.1.0" + source-map-js: "npm:^1.2.1" + checksum: 929f68b5081b7202709456532cee2a145c1843d391508c5a09de2517e8c4791638f71dd63b1898dba6712f8839d7a6da046c72a5e44c162e908f5911f57b5f44 + languageName: node + linkType: hard + "postcss@npm:^8.4.27": version: 8.4.31 resolution: "postcss@npm:8.4.31" @@ -13988,15 +10626,6 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^2.8.0": - version: 2.8.8 - resolution: "prettier@npm:2.8.8" - bin: - prettier: bin-prettier.js - checksum: 463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a - languageName: node - linkType: hard - "pretty-format@npm:^27.0.2": version: 27.5.1 resolution: "pretty-format@npm:27.5.1" @@ -14030,13 +10659,6 @@ __metadata: languageName: node linkType: hard -"pretty-hrtime@npm:^1.0.3": - version: 1.0.3 - resolution: "pretty-hrtime@npm:1.0.3" - checksum: 67cb3fc283a72252b49ac488647e6a01b78b7aa1b8f2061834aa1650691229081518ef3ca940f77f41cc8a8f02ba9eeb74b843481596670209e493062f2e89e0 - languageName: node - linkType: hard - "probe-image-size@npm:^7.2.3": version: 7.2.3 resolution: "probe-image-size@npm:7.2.3" @@ -14062,20 +10684,6 @@ __metadata: languageName: node linkType: hard -"process@npm:^0.11.10": - version: 0.11.10 - resolution: "process@npm:0.11.10" - checksum: 40c3ce4b7e6d4b8c3355479df77aeed46f81b279818ccdc500124e6a5ab882c0cc81ff7ea16384873a95a74c4570b01b120f287abbdd4c877931460eca6084b3 - languageName: node - linkType: hard - -"progress@npm:^2.0.1": - version: 2.0.3 - resolution: "progress@npm:2.0.3" - checksum: 1697e07cb1068055dbe9fe858d242368ff5d2073639e652b75a7eb1f2a1a8d4afd404d719de23c7b48481a6aa0040686310e2dac2f53d776daa2176d3f96369c - languageName: node - linkType: hard - "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -14086,7 +10694,7 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.0.1, prompts@npm:^2.4.0": +"prompts@npm:^2.0.1": version: 2.4.2 resolution: "prompts@npm:2.4.2" dependencies: @@ -14096,7 +10704,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": +"prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -14121,17 +10729,7 @@ __metadata: languageName: node linkType: hard -"proxy-addr@npm:~2.0.7": - version: 2.0.7 - resolution: "proxy-addr@npm:2.0.7" - dependencies: - forwarded: "npm:0.2.0" - ipaddr.js: "npm:1.9.1" - checksum: c3eed999781a35f7fd935f398b6d8920b6fb00bbc14287bc6de78128ccc1a02c89b95b56742bf7cf0362cc333c61d138532049c7dedc7a328ef13343eff81210 - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.0.0, proxy-from-env@npm:^1.1.0": +"proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" checksum: fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b @@ -14145,37 +10743,6 @@ __metadata: languageName: node linkType: hard -"pump@npm:^2.0.0": - version: 2.0.1 - resolution: "pump@npm:2.0.1" - dependencies: - end-of-stream: "npm:^1.1.0" - once: "npm:^1.3.1" - checksum: f1fe8960f44d145f8617ea4c67de05392da4557052980314c8f85081aee26953bdcab64afad58a2b1df0e8ff7203e3710e848cbe81a01027978edc6e264db355 - languageName: node - linkType: hard - -"pump@npm:^3.0.0": - version: 3.0.0 - resolution: "pump@npm:3.0.0" - dependencies: - end-of-stream: "npm:^1.1.0" - once: "npm:^1.3.1" - checksum: bbdeda4f747cdf47db97428f3a135728669e56a0ae5f354a9ac5b74556556f5446a46f720a8f14ca2ece5be9b4d5d23c346db02b555f46739934cc6c093a5478 - languageName: node - linkType: hard - -"pumpify@npm:^1.3.3": - version: 1.5.1 - resolution: "pumpify@npm:1.5.1" - dependencies: - duplexify: "npm:^3.6.0" - inherits: "npm:^2.0.3" - pump: "npm:^2.0.0" - checksum: 0bcabf9e3dbf2d0cc1f9b84ac80d3c75386111caf8963bfd98817a1e2192000ac0ccc804ca6ccd5b2b8430fdb71347b20fb2f014fe3d41adbacb1b502a841c45 - languageName: node - linkType: hard - "punycode@npm:^2.1.0": version: 2.3.0 resolution: "punycode@npm:2.3.0" @@ -14190,24 +10757,6 @@ __metadata: languageName: node linkType: hard -"puppeteer-core@npm:^2.1.1": - version: 2.1.1 - resolution: "puppeteer-core@npm:2.1.1" - dependencies: - "@types/mime-types": "npm:^2.1.0" - debug: "npm:^4.1.0" - extract-zip: "npm:^1.6.6" - https-proxy-agent: "npm:^4.0.0" - mime: "npm:^2.0.3" - mime-types: "npm:^2.1.25" - progress: "npm:^2.0.1" - proxy-from-env: "npm:^1.0.0" - rimraf: "npm:^2.6.1" - ws: "npm:^6.1.0" - checksum: 29a73c2327e208e6528bac05f841b3340ee1a8d7bd59e7b235c9d8b3c0bf266804ad1aa901a0e4a1d66ce4202646f242988c3c5c4dfb105e9ad082bf4aae69be - languageName: node - linkType: hard - "pure-rand@npm:^6.0.0": version: 6.0.4 resolution: "pure-rand@npm:6.0.4" @@ -14229,24 +10778,6 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.11.0": - version: 6.11.0 - resolution: "qs@npm:6.11.0" - dependencies: - side-channel: "npm:^1.0.4" - checksum: 4e4875e4d7c7c31c233d07a448e7e4650f456178b9dd3766b7cfa13158fdb24ecb8c4f059fa91e820dc6ab9f2d243721d071c9c0378892dcdad86e9e9a27c68f - languageName: node - linkType: hard - -"qs@npm:^6.10.0": - version: 6.11.2 - resolution: "qs@npm:6.11.2" - dependencies: - side-channel: "npm:^1.0.4" - checksum: 4f95d4ff18ed480befcafa3390022817ffd3087fc65f146cceb40fc5edb9fa96cb31f648cae2fa96ca23818f0798bd63ad4ca369a0e22702fcd41379b3ab6571 - languageName: node - linkType: hard - "quantize@npm:^1.0.2": version: 1.0.2 resolution: "quantize@npm:1.0.2" @@ -14268,82 +10799,29 @@ __metadata: languageName: node linkType: hard -"quickselect@npm:^2.0.0": - version: 2.0.0 - resolution: "quickselect@npm:2.0.0" - checksum: 6c8d591bc73beae4c1996b7b7138233a7dbbbdde29b7b6d822a02d08cd220fd27613f47d6e9635989b12e250d42ef9da3448de1ed12ad962974e207ab3c3562c - languageName: node - linkType: hard - -"raf@npm:^3.4.1": - version: 3.4.1 - resolution: "raf@npm:3.4.1" - dependencies: - performance-now: "npm:^2.1.0" - checksum: 337f0853c9e6a77647b0f499beedafea5d6facfb9f2d488a624f88b03df2be72b8a0e7f9118a3ff811377d534912039a3311815700d2b6d2313f82f736f9eb6e - languageName: node - linkType: hard - -"ramda@npm:0.29.0": - version: 0.29.0 - resolution: "ramda@npm:0.29.0" - checksum: b00eaaf1c62b06a99affa1d583e256bd65ad27ab9d0ef512f55d7d93b842e7cd244a4a09179f61fdd8548362e409323867a2b0477cbd0626b5644eb6ac7c53da - languageName: node - linkType: hard - -"range-parser@npm:~1.2.1": - version: 1.2.1 - resolution: "range-parser@npm:1.2.1" - checksum: 96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 - languageName: node - linkType: hard - -"raw-body@npm:2.5.2": - version: 2.5.2 - resolution: "raw-body@npm:2.5.2" - dependencies: - bytes: "npm:3.1.2" - http-errors: "npm:2.0.0" - iconv-lite: "npm:0.4.24" - unpipe: "npm:1.0.0" - checksum: b201c4b66049369a60e766318caff5cb3cc5a900efd89bdac431463822d976ad0670912c931fdbdcf5543207daf6f6833bca57aa116e1661d2ea91e12ca692c4 +"quickselect@npm:^2.0.0": + version: 2.0.0 + resolution: "quickselect@npm:2.0.0" + checksum: 6c8d591bc73beae4c1996b7b7138233a7dbbbdde29b7b6d822a02d08cd220fd27613f47d6e9635989b12e250d42ef9da3448de1ed12ad962974e207ab3c3562c languageName: node linkType: hard -"react-colorful@npm:^5.1.2": - version: 5.6.1 - resolution: "react-colorful@npm:5.6.1" - peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: 48eb73cf71e10841c2a61b6b06ab81da9fffa9876134c239bfdebcf348ce2a47e56b146338e35dfb03512c85966bfc9a53844fc56bc50154e71f8daee59ff6f0 +"raf@npm:^3.4.1": + version: 3.4.1 + resolution: "raf@npm:3.4.1" + dependencies: + performance-now: "npm:^2.1.0" + checksum: 337f0853c9e6a77647b0f499beedafea5d6facfb9f2d488a624f88b03df2be72b8a0e7f9118a3ff811377d534912039a3311815700d2b6d2313f82f736f9eb6e languageName: node linkType: hard -"react-docgen-typescript@npm:^2.2.2": - version: 2.2.2 - resolution: "react-docgen-typescript@npm:2.2.2" +"react-day-picker@npm:^8.10.1": + version: 8.10.1 + resolution: "react-day-picker@npm:8.10.1" peerDependencies: - typescript: ">= 4.3.x" - checksum: d31a061a21b5d4b67d4af7bc742541fd9e16254bd32861cd29c52565bc2175f40421a3550d52b6a6b0d0478e7cc408558eb0060a0bdd2957b02cfceeb0ee1e88 - languageName: node - linkType: hard - -"react-docgen@npm:^6.0.2": - version: 6.0.4 - resolution: "react-docgen@npm:6.0.4" - dependencies: - "@babel/core": "npm:^7.18.9" - "@babel/traverse": "npm:^7.18.9" - "@babel/types": "npm:^7.18.9" - "@types/babel__core": "npm:^7.18.0" - "@types/babel__traverse": "npm:^7.18.0" - "@types/doctrine": "npm:^0.0.6" - "@types/resolve": "npm:^1.20.2" - doctrine: "npm:^3.0.0" - resolve: "npm:^1.22.1" - strip-indent: "npm:^4.0.0" - checksum: 6e372de705b0ce576c8a46c8aedaea3f584441b18d68c02128f14e20657597fe088c80bb67374d5057001f71505924e07d6e366ec8d768e2456d47395bd32066 + date-fns: ^2.28.0 || ^3.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: a0ff28c4b61b3882e6a825b19e5679e2fdf3256cf1be8eb0a0c028949815c1ae5a6561474c2c19d231c010c8e0e0b654d3a322610881e0655abca05a2e03d9df languageName: node linkType: hard @@ -14359,17 +10837,15 @@ __metadata: languageName: node linkType: hard -"react-element-to-jsx-string@npm:^15.0.0": - version: 15.0.0 - resolution: "react-element-to-jsx-string@npm:15.0.0" +"react-dom@npm:^18.3.1": + version: 18.3.1 + resolution: "react-dom@npm:18.3.1" dependencies: - "@base2/pretty-print-object": "npm:1.0.1" - is-plain-object: "npm:5.0.0" - react-is: "npm:18.1.0" + loose-envify: "npm:^1.1.0" + scheduler: "npm:^0.23.2" peerDependencies: - react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 - react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 - checksum: 0d60a0ea758529c32a706d0c69d70b69fb94de3c46442fffdee34f08f51ffceddbb5395b41dfd1565895653e9f60f98ca525835be9d5db1f16d6b22be12f4cd4 + react: ^18.3.1 + checksum: a752496c1941f958f2e8ac56239172296fcddce1365ce45222d04a1947e0cc5547df3e8447f855a81d6d39f008d7c32eab43db3712077f09e3f67c4874973e85 languageName: node linkType: hard @@ -14413,22 +10889,6 @@ __metadata: languageName: node linkType: hard -"react-inspector@npm:^6.0.0": - version: 6.0.2 - resolution: "react-inspector@npm:6.0.2" - peerDependencies: - react: ^16.8.4 || ^17.0.0 || ^18.0.0 - checksum: 8f9b23c21b4d95722e28c9455c2bf00fd9437347714382594461f98e5b9954d60864d0f4e74e881639b065e752a97ba52a65e39930c234072e5bff291bb02b5e - languageName: node - linkType: hard - -"react-is@npm:18.1.0": - version: 18.1.0 - resolution: "react-is@npm:18.1.0" - checksum: 558874e4c3bd9805a9294426e090919ee6901be3ab07f80b997c36b5a01a8d691112802e7438d146f6c82fd6495d8c030f276ef05ec3410057f8740a8d723f8c - languageName: node - linkType: hard - "react-is@npm:^16.13.1, react-is@npm:^16.7.0": version: 16.13.1 resolution: "react-is@npm:16.13.1" @@ -14519,6 +10979,22 @@ __metadata: languageName: node linkType: hard +"react-remove-scroll-bar@npm:^2.3.6": + version: 2.3.6 + resolution: "react-remove-scroll-bar@npm:2.3.6" + dependencies: + react-style-singleton: "npm:^2.2.1" + tslib: "npm:^2.0.0" + 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 + checksum: 4e32ee04bf655a8bd3b4aacf6ffc596ae9eb1b9ba27eef83f7002632ee75371f61516ae62250634a9eae4b2c8fc6f6982d9b182de260f6c11841841e6e2e7515 + languageName: node + linkType: hard + "react-remove-scroll@npm:2.5.4": version: 2.5.4 resolution: "react-remove-scroll@npm:2.5.4" @@ -14557,6 +11033,25 @@ __metadata: languageName: node linkType: hard +"react-remove-scroll@npm:2.6.0": + version: 2.6.0 + resolution: "react-remove-scroll@npm:2.6.0" + dependencies: + react-remove-scroll-bar: "npm:^2.3.6" + react-style-singleton: "npm:^2.2.1" + tslib: "npm:^2.1.0" + use-callback-ref: "npm:^1.3.0" + use-sidecar: "npm:^1.1.2" + 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 + checksum: c5881c537477d986e8d25d2588a9b6f7fe1254e05946fb4f4b55baeead502b0e1875fc3c42bb6f82736772cd96a50266e41d84e3c4cd25e9525bdfe2d838e96d + languageName: node + linkType: hard + "react-router-dom@npm:^6.8.2": version: 6.8.2 resolution: "react-router-dom@npm:6.8.2" @@ -14607,26 +11102,21 @@ __metadata: languageName: node linkType: hard -"read-pkg-up@npm:^7.0.1": - version: 7.0.1 - resolution: "read-pkg-up@npm:7.0.1" +"react@npm:^18.3.1": + version: 18.3.1 + resolution: "react@npm:18.3.1" dependencies: - find-up: "npm:^4.1.0" - read-pkg: "npm:^5.2.0" - type-fest: "npm:^0.8.1" - checksum: 82b3ac9fd7c6ca1bdc1d7253eb1091a98ff3d195ee0a45386582ce3e69f90266163c34121e6a0a02f1630073a6c0585f7880b3865efcae9c452fa667f02ca385 + loose-envify: "npm:^1.1.0" + checksum: 283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 languageName: node linkType: hard -"read-pkg@npm:^5.2.0": - version: 5.2.0 - resolution: "read-pkg@npm:5.2.0" +"read-cache@npm:^1.0.0": + version: 1.0.0 + resolution: "read-cache@npm:1.0.0" dependencies: - "@types/normalize-package-data": "npm:^2.4.0" - normalize-package-data: "npm:^2.5.0" - parse-json: "npm:^5.0.0" - type-fest: "npm:^0.6.0" - checksum: b51a17d4b51418e777029e3a7694c9bd6c578a5ab99db544764a0b0f2c7c0f58f8a6bc101f86a6fceb8ba6d237d67c89acf6170f6b98695d0420ddc86cf109fb + pify: "npm:^2.3.0" + checksum: 90cb2750213c7dd7c80cb420654344a311fdec12944e81eb912cd82f1bc92aea21885fa6ce442e3336d9fccd663b8a7a19c46d9698e6ca55620848ab932da814 languageName: node linkType: hard @@ -14657,17 +11147,6 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" - dependencies: - inherits: "npm:^2.0.3" - string_decoder: "npm:^1.1.1" - util-deprecate: "npm:^1.0.1" - checksum: e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 - languageName: node - linkType: hard - "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -14677,31 +11156,6 @@ __metadata: languageName: node linkType: hard -"recast@npm:^0.21.0": - version: 0.21.5 - resolution: "recast@npm:0.21.5" - dependencies: - ast-types: "npm:0.15.2" - esprima: "npm:~4.0.0" - source-map: "npm:~0.6.1" - tslib: "npm:^2.0.1" - checksum: a45168c82195f24fa2c70293a624fece0069a2e8e8adb637f9963777735f81cb3bb62e55172db677ec3573b08b2daaf1eddd85b74da6fe0bd37c9b15eeaf94b4 - languageName: node - linkType: hard - -"recast@npm:^0.23.1": - version: 0.23.4 - resolution: "recast@npm:0.23.4" - dependencies: - assert: "npm:^2.0.0" - ast-types: "npm:^0.16.1" - esprima: "npm:~4.0.0" - source-map: "npm:~0.6.1" - tslib: "npm:^2.0.1" - checksum: d719633be8029e28f23b8191d4a525c5dbdac721792ab3cb5e9dfcf1694fb93f3c147b186916195a9c7fa0711f1e4990ba457cdcee02faed3899d4a80da1bd1f - languageName: node - linkType: hard - "redent@npm:^3.0.0": version: 3.0.0 resolution: "redent@npm:3.0.0" @@ -14712,22 +11166,6 @@ __metadata: languageName: node linkType: hard -"regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.1 - resolution: "regenerate-unicode-properties@npm:10.1.1" - dependencies: - regenerate: "npm:^1.4.2" - checksum: 89adb5ee5ba081380c78f9057c02e156a8181969f6fcca72451efc45612e0c3df767b4333f8d8479c274d9c6fe52ec4854f0d8a22ef95dccbe87da8e5f2ac77d - languageName: node - linkType: hard - -"regenerate@npm:^1.4.2": - version: 1.4.2 - resolution: "regenerate@npm:1.4.2" - checksum: f73c9eba5d398c818edc71d1c6979eaa05af7a808682749dd079f8df2a6d91a9b913db216c2c9b03e0a8ba2bba8701244a93f45211afbff691c32c7b275db1b8 - languageName: node - linkType: hard - "regenerator-runtime@npm:^0.13.11": version: 0.13.11 resolution: "regenerator-runtime@npm:0.13.11" @@ -14735,22 +11173,6 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.14.0": - version: 0.14.0 - resolution: "regenerator-runtime@npm:0.14.0" - checksum: e25f062c1a183f81c99681691a342760e65c55e8d3a4d4fe347ebe72433b123754b942b70b622959894e11f8a9131dc549bd3c9a5234677db06a4af42add8d12 - languageName: node - linkType: hard - -"regenerator-transform@npm:^0.15.2": - version: 0.15.2 - resolution: "regenerator-transform@npm:0.15.2" - dependencies: - "@babel/runtime": "npm:^7.8.4" - checksum: 7cfe6931ec793269701994a93bab89c0cc95379191fad866270a7fea2adfec67ea62bb5b374db77058b60ba4509319d9b608664d0d288bd9989ca8dbd08fae90 - languageName: node - linkType: hard - "regex-regex@npm:^1.0.0": version: 1.0.0 resolution: "regex-regex@npm:1.0.0" @@ -14769,31 +11191,6 @@ __metadata: languageName: node linkType: hard -"regexpu-core@npm:^5.3.1": - version: 5.3.2 - resolution: "regexpu-core@npm:5.3.2" - dependencies: - "@babel/regjsgen": "npm:^0.8.0" - regenerate: "npm:^1.4.2" - regenerate-unicode-properties: "npm:^10.1.0" - regjsparser: "npm:^0.9.1" - unicode-match-property-ecmascript: "npm:^2.0.0" - unicode-match-property-value-ecmascript: "npm:^2.1.0" - checksum: 7945d5ab10c8bbed3ca383d4274687ea825aee4ab93a9c51c6e31e1365edd5ea807f6908f800ba017b66c462944ba68011164e7055207747ab651f8111ef3770 - languageName: node - linkType: hard - -"regjsparser@npm:^0.9.1": - version: 0.9.1 - resolution: "regjsparser@npm:0.9.1" - dependencies: - jsesc: "npm:~0.5.0" - bin: - regjsparser: bin/parser - checksum: fe44fcf19a99fe4f92809b0b6179530e5ef313ff7f87df143b08ce9a2eb3c4b6189b43735d645be6e8f4033bfb015ed1ca54f0583bc7561bed53fd379feb8225 - languageName: node - linkType: hard - "regl-error2d@npm:^2.0.12": version: 2.0.12 resolution: "regl-error2d@npm:2.0.12" @@ -14906,19 +11303,6 @@ __metadata: languageName: node linkType: hard -"remark-external-links@npm:^8.0.0": - version: 8.0.0 - resolution: "remark-external-links@npm:8.0.0" - dependencies: - extend: "npm:^3.0.0" - is-absolute-url: "npm:^3.0.0" - mdast-util-definitions: "npm:^4.0.0" - space-separated-tokens: "npm:^1.0.0" - unist-util-visit: "npm:^2.0.0" - checksum: 5f0affc97e18ad3247e3b29449f4df98be5a75950cf0f0f13dd1755c4ef1065f9ab44626bba34d913d32bb92afd6f06a8e2f8068e83b48337f0b7a5d1f0cecfe - languageName: node - linkType: hard - "remark-parse@npm:^11.0.0": version: 11.0.0 resolution: "remark-parse@npm:11.0.0" @@ -14944,17 +11328,6 @@ __metadata: languageName: node linkType: hard -"remark-slug@npm:^6.0.0": - version: 6.1.0 - resolution: "remark-slug@npm:6.1.0" - dependencies: - github-slugger: "npm:^1.0.0" - mdast-util-to-string: "npm:^1.0.0" - unist-util-visit: "npm:^2.0.0" - checksum: 7cc2857936fce9c9c00b9c7d70de46d594cedf93bd8560fd006164dee7aacccdf472654ee35b33f4fb4bd0af882d89998c6d0c9088c2e95702a9fc15ebae002a - languageName: node - linkType: hard - "remove-accents@npm:0.4.2": version: 0.4.2 resolution: "remove-accents@npm:0.4.2" @@ -14969,13 +11342,6 @@ __metadata: languageName: node linkType: hard -"requireindex@npm:^1.1.0": - version: 1.2.0 - resolution: "requireindex@npm:1.2.0" - checksum: 7fb42aed73bf8de9acc4d6716cf07acc7fbe180e58729433bafcf702e76e7bb10e54f8266c06bfec62d752e0ac14d50e8758833de539e6f4e2cd642077866153 - languageName: node - linkType: hard - "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" @@ -15042,7 +11408,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.1": +"resolve@npm:^1.1.7, resolve@npm:^1.20.0, resolve@npm:^1.22.2": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -15075,7 +11441,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin": +"resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -15088,16 +11454,6 @@ __metadata: languageName: node linkType: hard -"restore-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "restore-cursor@npm:3.1.0" - dependencies: - onetime: "npm:^5.1.0" - signal-exit: "npm:^3.0.2" - checksum: 8051a371d6aa67ff21625fa94e2357bd81ffdc96267f3fb0fc4aaf4534028343836548ef34c240ffa8c25b280ca35eb36be00b3cb2133fa4f51896d7e73c6b4f - languageName: node - linkType: hard - "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -15119,17 +11475,6 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^2.6.1": - version: 2.7.1 - resolution: "rimraf@npm:2.7.1" - dependencies: - glob: "npm:^7.1.3" - bin: - rimraf: ./bin.js - checksum: 4eef73d406c6940927479a3a9dee551e14a54faf54b31ef861250ac815172bade86cc6f7d64a4dc5e98b65e4b18a2e1c9ff3b68d296be0c748413f092bb0dd40 - languageName: node - linkType: hard - "rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" @@ -15141,20 +11486,9 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:~2.6.2": - version: 2.6.3 - resolution: "rimraf@npm:2.6.3" - dependencies: - glob: "npm:^7.1.3" - bin: - rimraf: ./bin.js - checksum: f1e646f8c567795f2916aef7aadf685b543da6b9a53e482bb04b07472c7eef2b476045ba1e29f401c301c66b630b22b815ab31fdd60c5e1ae6566ff523debf45 - languageName: node - linkType: hard - -"rollup@npm:^2.25.0 || ^3.3.0, rollup@npm:^3.27.1": - version: 3.29.4 - resolution: "rollup@npm:3.29.4" +"rollup@npm:^2.77.2": + version: 2.79.1 + resolution: "rollup@npm:2.79.1" dependencies: fsevents: "npm:~2.3.2" dependenciesMeta: @@ -15162,13 +11496,13 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 65eddf84bf389ea8e4d4c1614b1c6a298d08f8ae785c0c087e723a879190c8aaddbab4aa3b8a0524551b9036750c9f8bfea27b377798accfd2ba5084ceff5aaa + checksum: 421418687f5dcd7324f4387f203c6bfc7118b7ace789e30f5da022471c43e037a76f5fd93837052754eeeae798a4fb266ac05ccee1e594406d912a59af98dde9 languageName: node linkType: hard -"rollup@npm:^2.77.2": - version: 2.79.1 - resolution: "rollup@npm:2.79.1" +"rollup@npm:^3.27.1": + version: 3.29.4 + resolution: "rollup@npm:3.29.4" dependencies: fsevents: "npm:~2.3.2" dependenciesMeta: @@ -15176,7 +11510,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 421418687f5dcd7324f4387f203c6bfc7118b7ace789e30f5da022471c43e037a76f5fd93837052754eeeae798a4fb266ac05ccee1e594406d912a59af98dde9 + checksum: 65eddf84bf389ea8e4d4c1614b1c6a298d08f8ae785c0c087e723a879190c8aaddbab4aa3b8a0524551b9036750c9f8bfea27b377798accfd2ba5084ceff5aaa languageName: node linkType: hard @@ -15196,20 +11530,20 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: 780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 - languageName: node - linkType: hard - -"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.1.1, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:^5.1.1": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 languageName: node linkType: hard +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: 780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 + languageName: node + linkType: hard + "safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -15255,12 +11589,12 @@ __metadata: languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.6.0": - version: 5.7.2 - resolution: "semver@npm:5.7.2" - bin: - semver: bin/semver - checksum: e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 +"scheduler@npm:^0.23.2": + version: 0.23.2 + resolution: "scheduler@npm:0.23.2" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: 26383305e249651d4c58e6705d5f8425f153211aef95f15161c151f7b8de885f24751b377e4a0b3dd42cce09aad3f87a61dab7636859c0d89b7daf1a1e2a5c78 languageName: node linkType: hard @@ -15273,7 +11607,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4": +"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: @@ -15284,67 +11618,6 @@ __metadata: languageName: node linkType: hard -"send@npm:0.18.0": - version: 0.18.0 - resolution: "send@npm:0.18.0" - dependencies: - debug: "npm:2.6.9" - depd: "npm:2.0.0" - destroy: "npm:1.2.0" - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - etag: "npm:~1.8.1" - fresh: "npm:0.5.2" - http-errors: "npm:2.0.0" - mime: "npm:1.6.0" - ms: "npm:2.1.3" - on-finished: "npm:2.4.1" - range-parser: "npm:~1.2.1" - statuses: "npm:2.0.1" - checksum: 0eb134d6a51fc13bbcb976a1f4214ea1e33f242fae046efc311e80aff66c7a43603e26a79d9d06670283a13000e51be6e0a2cb80ff0942eaf9f1cd30b7ae736a - languageName: node - linkType: hard - -"serve-static@npm:1.15.0": - version: 1.15.0 - resolution: "serve-static@npm:1.15.0" - dependencies: - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - parseurl: "npm:~1.3.3" - send: "npm:0.18.0" - checksum: fa9f0e21a540a28f301258dfe1e57bb4f81cd460d28f0e973860477dd4acef946a1f41748b5bd41c73b621bea2029569c935faa38578fd34cd42a9b4947088ba - languageName: node - linkType: hard - -"set-function-length@npm:^1.1.1": - version: 1.1.1 - resolution: "set-function-length@npm:1.1.1" - dependencies: - define-data-property: "npm:^1.1.1" - get-intrinsic: "npm:^1.2.1" - gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.0" - checksum: a29e255c116c29e3323b851c4f46c58c91be9bb8b065f191e2ea1807cb2c839df56e3175732a498e0c6d54626ba6b6fef896bf699feb7ab70c42dc47eb247c95 - languageName: node - linkType: hard - -"setprototypeof@npm:1.2.0": - version: 1.2.0 - resolution: "setprototypeof@npm:1.2.0" - checksum: 68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc - languageName: node - linkType: hard - -"shallow-clone@npm:^3.0.0": - version: 3.0.1 - resolution: "shallow-clone@npm:3.0.1" - dependencies: - kind-of: "npm:^6.0.2" - checksum: 7bab09613a1b9f480c85a9823aebec533015579fa055ba6634aa56ba1f984380670eaf33b8217502931872aa1401c9fcadaa15f9f604d631536df475b05bcf1e - languageName: node - linkType: hard - "shallow-copy@npm:0.0.1": version: 0.0.1 resolution: "shallow-copy@npm:0.0.1" @@ -15386,7 +11659,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: 25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 @@ -15407,15 +11680,6 @@ __metadata: languageName: node linkType: hard -"simple-update-notifier@npm:^2.0.0": - version: 2.0.0 - resolution: "simple-update-notifier@npm:2.0.0" - dependencies: - semver: "npm:^7.5.3" - checksum: 2a00bd03bfbcbf8a737c47ab230d7920f8bfb92d1159d421bdd194479f6d01ebc995d13fbe13d45dace23066a78a3dc6642999b4e3b38b847e6664191575b20c - languageName: node - linkType: hard - "sisteransi@npm:^1.0.5": version: 1.0.5 resolution: "sisteransi@npm:1.0.5" @@ -15475,6 +11739,13 @@ __metadata: languageName: node linkType: hard +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + "source-map-support@npm:0.5.13": version: 0.5.13 resolution: "source-map-support@npm:0.5.13" @@ -15485,16 +11756,6 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.16": - version: 0.5.21 - resolution: "source-map-support@npm:0.5.21" - dependencies: - buffer-from: "npm:^1.0.0" - source-map: "npm:^0.6.0" - checksum: 9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d - languageName: node - linkType: hard - "source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" @@ -15502,13 +11763,6 @@ __metadata: languageName: node linkType: hard -"space-separated-tokens@npm:^1.0.0": - version: 1.1.5 - resolution: "space-separated-tokens@npm:1.1.5" - checksum: 3ee0a6905f89e1ffdfe474124b1ade9fe97276a377a0b01350bc079b6ec566eb5b219e26064cc5b7f3899c05bde51ffbc9154290b96eaf82916a1e2c2c13ead9 - languageName: node - linkType: hard - "space-separated-tokens@npm:^2.0.0": version: 2.0.2 resolution: "space-separated-tokens@npm:2.0.2" @@ -15516,40 +11770,6 @@ __metadata: languageName: node linkType: hard -"spdx-correct@npm:^3.0.0": - version: 3.2.0 - resolution: "spdx-correct@npm:3.2.0" - dependencies: - spdx-expression-parse: "npm:^3.0.0" - spdx-license-ids: "npm:^3.0.0" - checksum: 49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 - languageName: node - linkType: hard - -"spdx-exceptions@npm:^2.1.0": - version: 2.3.0 - resolution: "spdx-exceptions@npm:2.3.0" - checksum: 83089e77d2a91cb6805a5c910a2bedb9e50799da091f532c2ba4150efdef6e53f121523d3e2dc2573a340dc0189e648b03157097f65465b3a0c06da1f18d7e8a - languageName: node - linkType: hard - -"spdx-expression-parse@npm:^3.0.0": - version: 3.0.1 - resolution: "spdx-expression-parse@npm:3.0.1" - dependencies: - spdx-exceptions: "npm:^2.1.0" - spdx-license-ids: "npm:^3.0.0" - checksum: 6f8a41c87759fa184a58713b86c6a8b028250f158159f1d03ed9d1b6ee4d9eefdc74181c8ddc581a341aa971c3e7b79e30b59c23b05d2436d5de1c30bdef7171 - languageName: node - linkType: hard - -"spdx-license-ids@npm:^3.0.0": - version: 3.0.16 - resolution: "spdx-license-ids@npm:3.0.16" - checksum: 7d88b8f01308948bb3ea69c066448f2776cf3d35a410d19afb836743086ced1566f6824ee8e6d67f8f25aa81fa86d8076a666c60ac4528caecd55e93edb5114e - languageName: node - linkType: hard - "sprintf-js@npm:~1.0.2": version: 1.0.3 resolution: "sprintf-js@npm:1.0.3" @@ -15591,13 +11811,6 @@ __metadata: languageName: node linkType: hard -"statuses@npm:2.0.1": - version: 2.0.1 - resolution: "statuses@npm:2.0.1" - checksum: 34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0 - languageName: node - linkType: hard - "stop-iteration-iterator@npm:^1.0.0": version: 1.0.0 resolution: "stop-iteration-iterator@npm:1.0.0" @@ -15607,25 +11820,6 @@ __metadata: languageName: node linkType: hard -"store2@npm:^2.14.2": - version: 2.14.2 - resolution: "store2@npm:2.14.2" - checksum: 2f27c3eaa7207b81410e170e7c41379816d22c1566308a9d97fbf853c4facff531fcb2a85f085c7503c578736570972f747c26018ebeaba7d1341fb82a7b6d52 - languageName: node - linkType: hard - -"storybook@npm:^7.5.3": - version: 7.5.3 - resolution: "storybook@npm:7.5.3" - dependencies: - "@storybook/cli": "npm:7.5.3" - bin: - sb: ./index.js - storybook: ./index.js - checksum: 9a2ad5dd703f86bf488efdd425eedb850cbbeca05d2d15f97bca5700d02234cd281f81c07b5d9566986e8d96901c9dc8536f449ba7c1c9e40707b670b9aa6820 - languageName: node - linkType: hard - "stream-parser@npm:~0.3.1": version: 0.3.1 resolution: "stream-parser@npm:0.3.1" @@ -15693,15 +11887,6 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:^1.1.1": - version: 1.3.0 - resolution: "string_decoder@npm:1.3.0" - dependencies: - safe-buffer: "npm:~5.2.0" - checksum: 810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d - languageName: node - linkType: hard - "string_decoder@npm:~0.10.x": version: 0.10.31 resolution: "string_decoder@npm:0.10.31" @@ -15769,16 +11954,7 @@ __metadata: languageName: node linkType: hard -"strip-indent@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-indent@npm:4.0.0" - dependencies: - min-indent: "npm:^1.0.1" - checksum: 6b1fb4e22056867f5c9e7a6f3f45922d9a2436cac758607d58aeaac0d3b16ec40b1c43317de7900f1b8dd7a4107352fa47fb960f2c23566538c51e8585c8870e - languageName: node - linkType: hard - -"strip-json-comments@npm:^3.0.1, strip-json-comments@npm:^3.1.1": +"strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd @@ -15796,8 +11972,26 @@ __metadata: version: 1.0.7 resolution: "style-to-object@npm:1.0.7" dependencies: - inline-style-parser: "npm:0.2.3" - checksum: 61f393482fdaf3f88acb1a31087875073d952c22f7614de90d5ce4f7aa86714c2523f96ab6ebefbecb327cfb31b41c14151878cb5e1e7999e5ee006987a11e62 + inline-style-parser: "npm:0.2.3" + checksum: 61f393482fdaf3f88acb1a31087875073d952c22f7614de90d5ce4f7aa86714c2523f96ab6ebefbecb327cfb31b41c14151878cb5e1e7999e5ee006987a11e62 + languageName: node + linkType: hard + +"sucrase@npm:^3.32.0": + version: 3.35.0 + resolution: "sucrase@npm:3.35.0" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.2" + commander: "npm:^4.0.0" + glob: "npm:^10.3.10" + lines-and-columns: "npm:^1.1.6" + mz: "npm:^2.7.0" + pirates: "npm:^4.0.1" + ts-interface-checker: "npm:^0.1.9" + bin: + sucrase: bin/sucrase + sucrase-node: bin/sucrase-node + checksum: ac85f3359d2c2ecbf5febca6a24ae9bf96c931f05fde533c22a94f59c6a74895e5d5f0e871878dfd59c2697a75ebb04e4b2224ef0bfc24ca1210735c2ec191ef languageName: node linkType: hard @@ -15906,39 +12100,56 @@ __metadata: languageName: node linkType: hard -"synchronous-promise@npm:^2.0.15": - version: 2.0.17 - resolution: "synchronous-promise@npm:2.0.17" - checksum: 1babe643d8417789ef6e5a2f3d4b8abcda2de236acd09bbe2c98f6be82c0a2c92ed21a6e4f934845fa8de18b1435a9cba1e8c3d945032e8a532f076224c024b1 +"tailwind-merge@npm:^2.5.4": + version: 2.5.4 + resolution: "tailwind-merge@npm:2.5.4" + checksum: 6c3d2a1d44344f373859f005e6366f0dbd7f66131d330a51dbe823dab08f71c388b2efcbb2b6a2170ca469581d27079c25cd40c234ca1356c4893ae99c2febb3 languageName: node linkType: hard -"tar-fs@npm:^2.1.1": - version: 2.1.1 - resolution: "tar-fs@npm:2.1.1" - dependencies: - chownr: "npm:^1.1.1" - mkdirp-classic: "npm:^0.5.2" - pump: "npm:^3.0.0" - tar-stream: "npm:^2.1.4" - checksum: 871d26a934bfb7beeae4c4d8a09689f530b565f79bd0cf489823ff0efa3705da01278160da10bb006d1a793fa0425cf316cec029b32a9159eacbeaff4965fb6d +"tailwindcss-animate@npm:^1.0.7": + version: 1.0.7 + resolution: "tailwindcss-animate@npm:1.0.7" + peerDependencies: + tailwindcss: "*" + checksum: ec7dbd1631076b97d66a1fbaaa06e0725fccfa63119221e8d87a997b02dcede98ad88bb1ef6665b968f5d260fcefb10592e0299ca70208d365b37761edf5e19a languageName: node linkType: hard -"tar-stream@npm:^2.1.4": - version: 2.2.0 - resolution: "tar-stream@npm:2.2.0" +"tailwindcss@npm:^3.4.14": + version: 3.4.14 + resolution: "tailwindcss@npm:3.4.14" dependencies: - bl: "npm:^4.0.3" - end-of-stream: "npm:^1.4.1" - fs-constants: "npm:^1.0.0" - inherits: "npm:^2.0.3" - readable-stream: "npm:^3.1.1" - checksum: 2f4c910b3ee7196502e1ff015a7ba321ec6ea837667220d7bcb8d0852d51cb04b87f7ae471008a6fb8f5b1a1b5078f62f3a82d30c706f20ada1238ac797e7692 + "@alloc/quick-lru": "npm:^5.2.0" + arg: "npm:^5.0.2" + chokidar: "npm:^3.5.3" + didyoumean: "npm:^1.2.2" + dlv: "npm:^1.1.3" + fast-glob: "npm:^3.3.0" + glob-parent: "npm:^6.0.2" + is-glob: "npm:^4.0.3" + jiti: "npm:^1.21.0" + lilconfig: "npm:^2.1.0" + micromatch: "npm:^4.0.5" + normalize-path: "npm:^3.0.0" + object-hash: "npm:^3.0.0" + picocolors: "npm:^1.0.0" + postcss: "npm:^8.4.23" + postcss-import: "npm:^15.1.0" + postcss-js: "npm:^4.0.1" + postcss-load-config: "npm:^4.0.1" + postcss-nested: "npm:^6.0.1" + postcss-selector-parser: "npm:^6.0.11" + resolve: "npm:^1.22.2" + sucrase: "npm:^3.32.0" + bin: + tailwind: lib/cli.js + tailwindcss: lib/cli.js + checksum: f6c23f8a3293ce3b2511bca1e50008ac94bd8562cb09fec32fe4f8e8a4f54d9e9fc10e567b7f974abdd4b33e550564a2616d4e793c736955432f28448141ce45 languageName: node linkType: hard -"tar@npm:^6.1.11, tar@npm:^6.1.2, tar@npm:^6.2.0": +"tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.2.1 resolution: "tar@npm:6.2.1" dependencies: @@ -15952,44 +12163,6 @@ __metadata: languageName: node linkType: hard -"telejson@npm:^7.2.0": - version: 7.2.0 - resolution: "telejson@npm:7.2.0" - dependencies: - memoizerific: "npm:^1.11.3" - checksum: d26e6cc93e54bfdcdb207b49905508c5db45862e811a2e2193a735409e47b14530e1c19351618a3e03ad2fd4ffc3759364fcd72851aba2df0300fab574b6151c - languageName: node - linkType: hard - -"temp-dir@npm:^2.0.0": - version: 2.0.0 - resolution: "temp-dir@npm:2.0.0" - checksum: b1df969e3f3f7903f3426861887ed76ba3b495f63f6d0c8e1ce22588679d9384d336df6064210fda14e640ed422e2a17d5c40d901f60e161c99482d723f4d309 - languageName: node - linkType: hard - -"temp@npm:^0.8.4": - version: 0.8.4 - resolution: "temp@npm:0.8.4" - dependencies: - rimraf: "npm:~2.6.2" - checksum: 7f071c963031bfece37e13c5da11e9bb451e4ddfc4653e23e327a2f91594102dc826ef6a693648e09a6e0eb856f507967ec759ae55635e0878091eccf411db37 - languageName: node - linkType: hard - -"tempy@npm:^1.0.1": - version: 1.0.1 - resolution: "tempy@npm:1.0.1" - dependencies: - del: "npm:^6.0.0" - is-stream: "npm:^2.0.0" - temp-dir: "npm:^2.0.0" - type-fest: "npm:^0.16.0" - unique-string: "npm:^2.0.0" - checksum: 864a1cf1b5536dc21e84ae45dbbc3ba4dd2c7ec1674d895f99c349cf209df959a53d797ca38d0b2cf69c7684d565fde5cfc67faaa63b7208ffb21d454b957472 - languageName: node - linkType: hard - "test-exclude@npm:^6.0.0": version: 6.0.0 resolution: "test-exclude@npm:6.0.0" @@ -16008,6 +12181,24 @@ __metadata: languageName: node linkType: hard +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: "npm:>= 3.1.0 < 4" + checksum: 9b896a22735e8122754fe70f1d65f7ee691c1d70b1f116fda04fea103d0f9b356e3676cb789506e3909ae0486a79a476e4914b0f92472c2e093d206aed4b7d6b + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: "npm:^1.0.0" + checksum: f375aeb2b05c100a456a30bc3ed07ef03a39cbdefe02e0403fb714b8c7e57eeaad1a2f5c4ecfb9ce554ce3db9c2b024eba144843cd9e344566d9fcee73b04767 + languageName: node + linkType: hard + "through2@npm:^0.6.3": version: 0.6.5 resolution: "through2@npm:0.6.5" @@ -16018,7 +12209,7 @@ __metadata: languageName: node linkType: hard -"through2@npm:^2.0.1, through2@npm:^2.0.3": +"through2@npm:^2.0.1": version: 2.0.5 resolution: "through2@npm:2.0.5" dependencies: @@ -16028,13 +12219,6 @@ __metadata: languageName: node linkType: hard -"tiny-invariant@npm:^1.3.1": - version: 1.3.1 - resolution: "tiny-invariant@npm:1.3.1" - checksum: 5b87c1d52847d9452b60d0dcb77011b459044e0361ca8253bfe7b43d6288106e12af926adb709a6fc28900e3864349b91dad9a4ac93c39aa15f360b26c2ff4db - languageName: node - linkType: hard - "tinycolor2@npm:^1.4.2": version: 1.6.0 resolution: "tinycolor2@npm:1.6.0" @@ -16121,20 +12305,6 @@ __metadata: languageName: node linkType: hard -"tocbot@npm:^4.20.1": - version: 4.22.0 - resolution: "tocbot@npm:4.22.0" - checksum: 85a05ddf162ce41c764b6563318a3a26526de996586672d07154389f95f8082fb8211879c9f0b0ff30346d4f6aa9aaca47ed5177329285fd3f73adec951d6b4e - languageName: node - linkType: hard - -"toidentifier@npm:1.0.1": - version: 1.0.1 - resolution: "toidentifier@npm:1.0.1" - checksum: 93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 - languageName: node - linkType: hard - "topojson-client@npm:^3.1.0": version: 3.1.0 resolution: "topojson-client@npm:3.1.0" @@ -16169,13 +12339,6 @@ __metadata: languageName: node linkType: hard -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 - languageName: node - linkType: hard - "trim-lines@npm:^3.0.0": version: 3.0.1 resolution: "trim-lines@npm:3.0.1" @@ -16199,10 +12362,10 @@ __metadata: languageName: node linkType: hard -"ts-dedent@npm:^2.0.0, ts-dedent@npm:^2.2.0": - version: 2.2.0 - resolution: "ts-dedent@npm:2.2.0" - checksum: 175adea838468cc2ff7d5e97f970dcb798bbcb623f29c6088cb21aa2880d207c5784be81ab1741f56b9ac37840cbaba0c0d79f7f8b67ffe61c02634cafa5c303 +"ts-interface-checker@npm:^0.1.9": + version: 0.1.13 + resolution: "ts-interface-checker@npm:0.1.13" + checksum: 232509f1b84192d07b81d1e9b9677088e590ac1303436da1e92b296e9be8e31ea042e3e1fd3d29b1742ad2c959e95afe30f63117b8f1bc3a3850070a5142fea7 languageName: node linkType: hard @@ -16253,13 +12416,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.13.0, tslib@npm:^1.8.1": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: 69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 - languageName: node - linkType: hard - "tslib@npm:^2.0.0, tslib@npm:^2.0.3, tslib@npm:^2.1.0": version: 2.5.0 resolution: "tslib@npm:2.5.0" @@ -16267,24 +12423,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.1, tslib@npm:^2.4.0": - version: 2.6.2 - resolution: "tslib@npm:2.6.2" - checksum: e03a8a4271152c8b26604ed45535954c0a45296e32445b4b87f8a5abdb2421f40b59b4ca437c4346af0f28179780d604094eb64546bee2019d903d01c6c19bdb - languageName: node - linkType: hard - -"tsutils@npm:^3.21.0": - version: 3.21.0 - resolution: "tsutils@npm:3.21.0" - dependencies: - tslib: "npm:^1.8.1" - peerDependencies: - typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - checksum: 02f19e458ec78ead8fffbf711f834ad8ecd2cc6ade4ec0320790713dccc0a412b99e7fd907c4cda2a1dc602c75db6f12e0108e87a5afad4b2f9e90a24cabd5a2 - languageName: node - linkType: hard - "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -16310,13 +12448,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.16.0": - version: 0.16.0 - resolution: "type-fest@npm:0.16.0" - checksum: 6b4d846534e7bcb49a6160b068ffaed2b62570d989d909ac3f29df5ef1e993859f890a4242eebe023c9e923f96adbcb3b3e88a198c35a1ee9a731e147a6839c3 - languageName: node - linkType: hard - "type-fest@npm:^0.20.2": version: 0.20.2 resolution: "type-fest@npm:0.20.2" @@ -16331,37 +12462,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.6.0": - version: 0.6.0 - resolution: "type-fest@npm:0.6.0" - checksum: 0c585c26416fce9ecb5691873a1301b5aff54673c7999b6f925691ed01f5b9232db408cdbb0bd003d19f5ae284322523f44092d1f81ca0a48f11f7cf0be8cd38 - languageName: node - linkType: hard - -"type-fest@npm:^0.8.1": - version: 0.8.1 - resolution: "type-fest@npm:0.8.1" - checksum: dffbb99329da2aa840f506d376c863bd55f5636f4741ad6e65e82f5ce47e6914108f44f340a0b74009b0cb5d09d6752ae83203e53e98b1192cf80ecee5651636 - languageName: node - linkType: hard - -"type-fest@npm:^2.19.0, type-fest@npm:~2.19": - version: 2.19.0 - resolution: "type-fest@npm:2.19.0" - checksum: a5a7ecf2e654251613218c215c7493574594951c08e52ab9881c9df6a6da0aeca7528c213c622bc374b4e0cb5c443aa3ab758da4e3c959783ce884c3194e12cb - languageName: node - linkType: hard - -"type-is@npm:~1.6.18": - version: 1.6.18 - resolution: "type-is@npm:1.6.18" - dependencies: - media-typer: "npm:0.3.0" - mime-types: "npm:~2.1.24" - checksum: a23daeb538591b7efbd61ecf06b6feb2501b683ffdc9a19c74ef5baba362b4347e42f1b4ed81f5882a8c96a3bfff7f93ce3ffaf0cbbc879b532b04c97a55db9d - languageName: node - linkType: hard - "type-name@npm:^2.0.0": version: 2.0.2 resolution: "type-name@npm:2.0.2" @@ -16420,53 +12520,6 @@ __metadata: languageName: node linkType: hard -"uglify-js@npm:^3.1.4": - version: 3.17.4 - resolution: "uglify-js@npm:3.17.4" - bin: - uglifyjs: bin/uglifyjs - checksum: 8b7fcdca69deb284fed7d2025b73eb747ce37f9aca6af53422844f46427152d5440601b6e2a033e77856a2f0591e4167153d5a21b68674ad11f662034ec13ced - languageName: node - linkType: hard - -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 - languageName: node - linkType: hard - -"unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" - checksum: 0fe812641bcfa3ae433025178a64afb5d9afebc21a922dafa7cba971deebb5e4a37350423890750132a85c936c290fb988146d0b1bd86838ad4897f4fc5bd0de - languageName: node - linkType: hard - -"unicode-match-property-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-match-property-ecmascript@npm:2.0.0" - dependencies: - unicode-canonical-property-names-ecmascript: "npm:^2.0.0" - unicode-property-aliases-ecmascript: "npm:^2.0.0" - checksum: 4d05252cecaf5c8e36d78dc5332e03b334c6242faf7cf16b3658525441386c0a03b5f603d42cbec0f09bb63b9fd25c9b3b09667aee75463cac3efadae2cd17ec - languageName: node - linkType: hard - -"unicode-match-property-value-ecmascript@npm:^2.1.0": - version: 2.1.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" - checksum: f5b9499b9e0ffdc6027b744d528f17ec27dd7c15da03254ed06851feec47e0531f20d410910c8a49af4a6a190f4978413794c8d75ce112950b56d583b5d5c7f2 - languageName: node - linkType: hard - -"unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.1.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" - checksum: 50ded3f8c963c7785e48c510a3b7c6bc4e08a579551489aa0349680a35b1ceceec122e33b2b6c1b579d0be2250f34bb163ac35f5f8695fe10bbc67fb757f0af8 - languageName: node - linkType: hard - "unified@npm:^11.0.0": version: 11.0.5 resolution: "unified@npm:11.0.5" @@ -16500,22 +12553,6 @@ __metadata: languageName: node linkType: hard -"unique-string@npm:^2.0.0": - version: 2.0.0 - resolution: "unique-string@npm:2.0.0" - dependencies: - crypto-random-string: "npm:^2.0.0" - checksum: 11820db0a4ba069d174bedfa96c588fc2c96b083066fafa186851e563951d0de78181ac79c744c1ed28b51f9d82ac5b8196ff3e4560d0178046ef455d8c2244b - languageName: node - linkType: hard - -"unist-util-is@npm:^4.0.0": - version: 4.1.0 - resolution: "unist-util-is@npm:4.1.0" - checksum: 21ca3d7bacc88853b880b19cb1b133a056c501617d7f9b8cce969cd8b430ed7e1bc416a3a11b02540d5de6fb86807e169d00596108a459d034cf5faec97c055e - languageName: node - linkType: hard - "unist-util-is@npm:^6.0.0": version: 6.0.0 resolution: "unist-util-is@npm:6.0.0" @@ -16543,16 +12580,6 @@ __metadata: languageName: node linkType: hard -"unist-util-visit-parents@npm:^3.0.0": - version: 3.1.1 - resolution: "unist-util-visit-parents@npm:3.1.1" - dependencies: - "@types/unist": "npm:^2.0.0" - unist-util-is: "npm:^4.0.0" - checksum: 231c80c5ba8e79263956fcaa25ed2a11ad7fe77ac5ba0d322e9d51bbc4238501e3bb52f405e518bcdc5471e27b33eff520db0aa4a3b1feb9fb6e2de6ae385d49 - languageName: node - linkType: hard - "unist-util-visit-parents@npm:^6.0.0": version: 6.0.1 resolution: "unist-util-visit-parents@npm:6.0.1" @@ -16563,17 +12590,6 @@ __metadata: languageName: node linkType: hard -"unist-util-visit@npm:^2.0.0": - version: 2.0.3 - resolution: "unist-util-visit@npm:2.0.3" - dependencies: - "@types/unist": "npm:^2.0.0" - unist-util-is: "npm:^4.0.0" - unist-util-visit-parents: "npm:^3.0.0" - checksum: 7b11303d82271ca53a2ced2d56c87a689dd518596c99ff4a11cdff750f5cc5c0e4b64b146bd2363557cb29443c98713bfd1e8dc6d1c3f9d474b9eb1f23a60888 - languageName: node - linkType: hard - "unist-util-visit@npm:^5.0.0": version: 5.0.0 resolution: "unist-util-visit@npm:5.0.0" @@ -16592,32 +12608,6 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^2.0.0": - version: 2.0.1 - resolution: "universalify@npm:2.0.1" - checksum: 73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a - languageName: node - linkType: hard - -"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": - version: 1.0.0 - resolution: "unpipe@npm:1.0.0" - checksum: 193400255bd48968e5c5383730344fbb4fa114cdedfab26e329e50dd2d81b134244bb8a72c6ac1b10ab0281a58b363d06405632c9d49ca9dfd5e90cbd7d0f32c - languageName: node - linkType: hard - -"unplugin@npm:^1.3.1": - version: 1.5.0 - resolution: "unplugin@npm:1.5.0" - dependencies: - acorn: "npm:^8.10.0" - chokidar: "npm:^3.5.3" - webpack-sources: "npm:^3.2.3" - webpack-virtual-modules: "npm:^0.5.0" - checksum: 2f79a7bf6b428a6aac80bf21852ed83cafead0ae3ed8866db1dca1cd4489f3b50c95874275e9a9b0f10c2e3c4892bfe0431c70d13635775c4c620a6a3f9eae37 - languageName: node - linkType: hard - "unquote@npm:^1.1.0": version: 1.1.1 resolution: "unquote@npm:1.1.1" @@ -16625,13 +12615,6 @@ __metadata: languageName: node linkType: hard -"untildify@npm:^4.0.0": - version: 4.0.0 - resolution: "untildify@npm:4.0.0" - checksum: d758e624c707d49f76f7511d75d09a8eda7f2020d231ec52b67ff4896bcf7013be3f9522d8375f57e586e9a2e827f5641c7e06ee46ab9c435fc2b2b2e9de517a - languageName: node - linkType: hard - "update-browserslist-db@npm:^1.0.10": version: 1.0.10 resolution: "update-browserslist-db@npm:1.0.10" @@ -16660,6 +12643,20 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.1.1": + version: 1.1.1 + resolution: "update-browserslist-db@npm:1.1.1" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.0" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 536a2979adda2b4be81b07e311bd2f3ad5e978690987956bc5f514130ad50cac87cd22c710b686d79731e00fbee8ef43efe5fcd72baa241045209195d43dcc80 + languageName: node + linkType: hard + "update-diff@npm:^1.1.0": version: 1.1.0 resolution: "update-diff@npm:1.1.0" @@ -16713,18 +12710,6 @@ __metadata: languageName: node linkType: hard -"use-resize-observer@npm:^9.1.0": - version: 9.1.0 - resolution: "use-resize-observer@npm:9.1.0" - dependencies: - "@juggle/resize-observer": "npm:^3.3.1" - peerDependencies: - react: 16.8.0 - 18 - react-dom: 16.8.0 - 18 - checksum: 6ccdeb09fe20566ec182b1635a22f189e13d46226b74610432590e69b31ef5d05d069badc3306ebd0d2bb608743b17981fb535763a1d7dc2c8ae462ee8e5999c - languageName: node - linkType: hard - "use-sidecar@npm:^1.1.2": version: 1.1.2 resolution: "use-sidecar@npm:1.1.2" @@ -16750,23 +12735,19 @@ __metadata: languageName: node linkType: hard -"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 +"use-sync-external-store@npm:^1.2.2": + version: 1.2.2 + resolution: "use-sync-external-store@npm:1.2.2" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 23b1597c10adf15b26ade9e8c318d8cc0abc9ec0ab5fc7ca7338da92e89c2536abd150a5891bf076836c352fdfa104fc7231fb48f806fd9960e0cbe03601abaf languageName: node linkType: hard -"util@npm:^0.12.4, util@npm:^0.12.5": - version: 0.12.5 - resolution: "util@npm:0.12.5" - dependencies: - inherits: "npm:^2.0.3" - is-arguments: "npm:^1.0.4" - is-generator-function: "npm:^1.0.7" - is-typed-array: "npm:^1.1.3" - which-typed-array: "npm:^1.1.2" - checksum: c27054de2cea2229a66c09522d0fa1415fb12d861d08523a8846bf2e4cbf0079d4c3f725f09dcb87493549bcbf05f5798dce1688b53c6c17201a45759e7253f3 +"util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 languageName: node linkType: hard @@ -16807,13 +12788,6 @@ __metadata: languageName: node linkType: hard -"utils-merge@npm:1.0.1": - version: 1.0.1 - resolution: "utils-merge@npm:1.0.1" - checksum: 02ba649de1b7ca8854bfe20a82f1dfbdda3fb57a22ab4a8972a63a34553cf7aa51bc9081cf7e001b035b88186d23689d69e71b510e610a09a4c66f68aa95b672 - languageName: node - linkType: hard - "utils-regex-from-string@npm:^1.0.0": version: 1.0.0 resolution: "utils-regex-from-string@npm:1.0.0" @@ -16824,15 +12798,6 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^9.0.0": - version: 9.0.1 - resolution: "uuid@npm:9.0.1" - bin: - uuid: dist/bin/uuid - checksum: 1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b - languageName: node - linkType: hard - "v8-to-istanbul@npm:^9.0.1": version: 9.1.3 resolution: "v8-to-istanbul@npm:9.1.3" @@ -16844,16 +12809,6 @@ __metadata: languageName: node linkType: hard -"validate-npm-package-license@npm:^3.0.1": - version: 3.0.4 - resolution: "validate-npm-package-license@npm:3.0.4" - dependencies: - spdx-correct: "npm:^3.0.0" - spdx-expression-parse: "npm:^3.0.0" - checksum: 7b91e455a8de9a0beaa9fe961e536b677da7f48c9a493edf4d4d4a87fd80a7a10267d438723364e432c2fcd00b5650b5378275cded362383ef570276e6312f4f - languageName: node - linkType: hard - "validate.io-array-like@npm:^1.0.1": version: 1.0.2 resolution: "validate.io-array-like@npm:1.0.2" @@ -16949,13 +12904,6 @@ __metadata: languageName: node linkType: hard -"vary@npm:~1.1.2": - version: 1.1.2 - resolution: "vary@npm:1.1.2" - checksum: f15d588d79f3675135ba783c91a4083dcd290a2a5be9fcb6514220a1634e23df116847b1cc51f66bfb0644cf9353b2abb7815ae499bab06e46dd33c1a6bf1f4f - languageName: node - linkType: hard - "vfile-message@npm:^4.0.0": version: 4.0.2 resolution: "vfile-message@npm:4.0.2" @@ -17088,25 +13036,6 @@ __metadata: languageName: node linkType: hard -"watchpack@npm:^2.2.0": - version: 2.4.0 - resolution: "watchpack@npm:2.4.0" - dependencies: - glob-to-regexp: "npm:^0.4.1" - graceful-fs: "npm:^4.1.2" - checksum: c5e35f9fb9338d31d2141d9835643c0f49b5f9c521440bb648181059e5940d93dd8ed856aa8a33fbcdd4e121dad63c7e8c15c063cf485429cd9d427be197fe62 - languageName: node - linkType: hard - -"wcwidth@npm:^1.0.1": - version: 1.0.1 - resolution: "wcwidth@npm:1.0.1" - dependencies: - defaults: "npm:^1.0.3" - checksum: 5b61ca583a95e2dd85d7078400190efd452e05751a64accb8c06ce4db65d7e0b0cde9917d705e826a2e05cc2548f61efde115ffa374c3e436d04be45c889e5b4 - languageName: node - linkType: hard - "weak-map@npm:^1.0.5": version: 1.0.8 resolution: "weak-map@npm:1.0.8" @@ -17123,13 +13052,6 @@ __metadata: languageName: node linkType: hard -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db - languageName: node - linkType: hard - "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -17137,20 +13059,6 @@ __metadata: languageName: node linkType: hard -"webpack-sources@npm:^3.2.3": - version: 3.2.3 - resolution: "webpack-sources@npm:3.2.3" - checksum: 2ef63d77c4fad39de4a6db17323d75eb92897b32674e97d76f0a1e87c003882fc038571266ad0ef581ac734cbe20952912aaa26155f1905e96ce251adbb1eb4e - languageName: node - linkType: hard - -"webpack-virtual-modules@npm:^0.5.0": - version: 0.5.0 - resolution: "webpack-virtual-modules@npm:0.5.0" - checksum: 0742e069cd49d91ccd0b59431b3666903d321582c1b1062fa6bdae005c3538af55ff8787ea5eafbf72662f3496d3a879e2c705d55ca0af8283548a925be18484 - languageName: node - linkType: hard - "whatwg-encoding@npm:^2.0.0": version: 2.0.0 resolution: "whatwg-encoding@npm:2.0.0" @@ -17177,16 +13085,6 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 - languageName: node - linkType: hard - "which-boxed-primitive@npm:^1.0.2": version: 1.0.2 resolution: "which-boxed-primitive@npm:1.0.2" @@ -17212,19 +13110,6 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.2": - version: 1.1.13 - resolution: "which-typed-array@npm:1.1.13" - dependencies: - available-typed-arrays: "npm:^1.0.5" - call-bind: "npm:^1.0.4" - for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - has-tostringtag: "npm:^1.0.0" - checksum: 9f5f1c42918df3d5b91c4315ed0051d5d874370998bf095c9ae0df374f0881f85094e3c384b8fb08ab7b4d4f54ba81c0aff75da6226e7c0589b83dfbec1cd4c9 - languageName: node - linkType: hard - "which-typed-array@npm:^1.1.9": version: 1.1.9 resolution: "which-typed-array@npm:1.1.9" @@ -17268,13 +13153,6 @@ __metadata: languageName: node linkType: hard -"wordwrap@npm:^1.0.0": - version: 1.0.0 - resolution: "wordwrap@npm:1.0.0" - checksum: 7ed2e44f3c33c5c3e3771134d2b0aee4314c9e49c749e37f464bf69f2bcdf0cbf9419ca638098e2717cff4875c47f56a007532f6111c3319f557a2ca91278e92 - languageName: node - linkType: hard - "world-calendars@npm:^1.0.3": version: 1.0.3 resolution: "world-calendars@npm:1.0.3" @@ -17313,17 +13191,6 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^2.3.0": - version: 2.4.3 - resolution: "write-file-atomic@npm:2.4.3" - dependencies: - graceful-fs: "npm:^4.1.11" - imurmurhash: "npm:^0.1.4" - signal-exit: "npm:^3.0.2" - checksum: 8cb4bba0c1ab814a9b127844da0db4fb8c5e06ddbe6317b8b319377c73b283673036c8b9360120062898508b9428d81611cf7fa97584504a00bc179b2a580b92 - languageName: node - linkType: hard - "write-file-atomic@npm:^4.0.2": version: 4.0.2 resolution: "write-file-atomic@npm:4.0.2" @@ -17334,16 +13201,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^6.1.0": - version: 6.2.2 - resolution: "ws@npm:6.2.2" - dependencies: - async-limiter: "npm:~1.0.0" - checksum: d628a1e95668a296644b4f51ce5debb43d9f1d89ebb2e32fef205a685b9439378eb824d60ce3a40bbc3bad0e887d84a56b343f2076f48d74f17c4c0800c42967 - languageName: node - linkType: hard - -"ws@npm:^8.11.0, ws@npm:^8.2.3": +"ws@npm:^8.11.0": version: 8.14.2 resolution: "ws@npm:8.14.2" peerDependencies: @@ -17407,6 +13265,15 @@ __metadata: languageName: node linkType: hard +"yaml@npm:^2.3.4": + version: 2.6.0 + resolution: "yaml@npm:2.6.0" + bin: + yaml: bin.mjs + checksum: 9e74cdb91cc35512a1c41f5ce509b0e93cc1d00eff0901e4ba831ee75a71ddf0845702adcd6f4ee6c811319eb9b59653248462ab94fa021ab855543a75396ceb + languageName: node + linkType: hard + "yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" @@ -17429,16 +13296,6 @@ __metadata: languageName: node linkType: hard -"yauzl@npm:^2.10.0": - version: 2.10.0 - resolution: "yauzl@npm:2.10.0" - dependencies: - buffer-crc32: "npm:~0.2.3" - fd-slicer: "npm:~1.1.0" - checksum: f265002af7541b9ec3589a27f5fb8f11cf348b53cc15e2751272e3c062cd73f3e715bc72d43257de71bbaecae446c3f1b14af7559e8ab0261625375541816422 - languageName: node - linkType: hard - "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" From a70a3256104afdf8338e117225f2b32cee4a9f02 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Mon, 16 Dec 2024 22:58:03 -0500 Subject: [PATCH 17/56] Remove unused variables --- .../pages/overview/backends/connection-status.tsx | 5 +---- .../details-form/backend-details-form.tsx | 15 ++------------- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/ui/src/pages/overview/backends/connection-status.tsx b/ui/src/pages/overview/backends/connection-status.tsx index eb037cc4e..f34b546a5 100644 --- a/ui/src/pages/overview/backends/connection-status.tsx +++ b/ui/src/pages/overview/backends/connection-status.tsx @@ -1,7 +1,6 @@ import { FormRow } from 'components/form/layout/layout' import { useTestBackendConnection } from 'data-services/hooks/backends/useTestBackendConnection' -import { InputContent, InputValue } from 'design-system/components/input/input' -import { Tooltip } from 'design-system/components/tooltip/tooltip' +import { InputValue } from 'design-system/components/input/input' import * as Wizard from 'design-system/components/wizard/wizard' import { useEffect, useState } from 'react' import { getFormatedDateTimeString } from 'utils/date/getFormatedDateTimeString/getFormatedDateTimeString' @@ -12,14 +11,12 @@ import styles from './backends.module.scss' export const ConnectionStatus = ({ regex, - showDetails, backendId, subdir, updatedAt, onConnectionChange, }: { regex?: string - showDetails?: boolean backendId: string subdir?: string updatedAt?: string diff --git a/ui/src/pages/overview/entities/details-form/backend-details-form.tsx b/ui/src/pages/overview/entities/details-form/backend-details-form.tsx index 0cb4c88a5..50ff86c37 100644 --- a/ui/src/pages/overview/entities/details-form/backend-details-form.tsx +++ b/ui/src/pages/overview/entities/details-form/backend-details-form.tsx @@ -1,4 +1,3 @@ -import { FormController } from 'components/form/form-controller' import { FormField } from 'components/form/form-field' import { FormActions, @@ -10,16 +9,8 @@ import { FormConfig } from 'components/form/types' import { Backend } from 'data-services/models/backend' import { Button, ButtonTheme } from 'design-system/components/button/button' import { IconType } from 'design-system/components/icon/icon' -import { Input, LockedInput } from 'design-system/components/input/input' import { ConnectionStatus } from 'pages/overview/backends/connection-status' -import { useState } from 'react' -import { - ControllerFieldState, - ControllerRenderProps, - FieldPath, - FieldValues, - useForm, -} from 'react-hook-form' +import { useForm } from 'react-hook-form' import { STRING, translate } from 'utils/language' import { useFormError } from 'utils/useFormError' import { DetailsFormProps, FormValues } from './types' @@ -47,7 +38,6 @@ export const BackendDetailsForm = ({ control, handleSubmit, setError: setFieldError, - setFocus, } = useForm({ defaultValues: { endpoint_url: backend?.endpointUrl, @@ -86,7 +76,7 @@ export const BackendDetailsForm = ({ {backend?.id && ( )} @@ -103,4 +93,3 @@ export const BackendDetailsForm = ({ ) } - From 81d92fe371d9ee103d9ee98ce1fa042abf0d0a5d Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Mon, 16 Dec 2024 23:29:56 -0500 Subject: [PATCH 18/56] Remove unused file --- .../hooks/backends/useBackendsDetails.ts | 34 ------------------- 1 file changed, 34 deletions(-) delete mode 100644 ui/src/data-services/hooks/backends/useBackendsDetails.ts diff --git a/ui/src/data-services/hooks/backends/useBackendsDetails.ts b/ui/src/data-services/hooks/backends/useBackendsDetails.ts deleted file mode 100644 index 4ae30af6c..000000000 --- a/ui/src/data-services/hooks/backends/useBackendsDetails.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { API_ROUTES, API_URL } from 'data-services/constants' -import { Collection, ServerCollection } from 'data-services/models/collection' -import { useMemo } from 'react' -import { useAuthorizedQuery } from '../auth/useAuthorizedQuery' - -const convertServerRecord = (record: ServerCollection) => new Collection(record) - -export const useCollectionDetails = ( - id: string -): { - collection?: Collection - isLoading: boolean - isFetching: boolean - error?: unknown -} => { - const { data, isLoading, isFetching, error } = useAuthorizedQuery( - { - queryKey: [API_ROUTES.COLLECTIONS, id], - url: `${API_URL}/${API_ROUTES.COLLECTIONS}/${id}/`, - } - ) - - const collection = useMemo( - () => (data ? convertServerRecord(data) : undefined), - [data] - ) - - return { - collection, - isLoading, - isFetching, - error, - } -} From 20ca91288020117a84716cda9fdf75fb1ced80fc Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Tue, 17 Dec 2024 00:00:49 -0500 Subject: [PATCH 19/56] Register pipelines via frontend --- .../hooks/backends/usePopulateBackend.ts | 26 ++++++++++++++++ .../overview/backends/backends-actions.tsx | 30 +++++++++++++++++++ .../overview/backends/backends-columns.tsx | 14 +++++++++ 3 files changed, 70 insertions(+) create mode 100644 ui/src/data-services/hooks/backends/usePopulateBackend.ts create mode 100644 ui/src/pages/overview/backends/backends-actions.tsx diff --git a/ui/src/data-services/hooks/backends/usePopulateBackend.ts b/ui/src/data-services/hooks/backends/usePopulateBackend.ts new file mode 100644 index 000000000..9dc67efaf --- /dev/null +++ b/ui/src/data-services/hooks/backends/usePopulateBackend.ts @@ -0,0 +1,26 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query' +import axios from 'axios' +import { API_ROUTES, API_URL } from 'data-services/constants' +import { getAuthHeader } from 'data-services/utils' +import { useUser } from 'utils/user/userContext' + +export const usePopulateBackend = () => { + const { user } = useUser() + const queryClient = useQueryClient() + + const { mutateAsync, isLoading, isSuccess, error } = useMutation({ + mutationFn: (id: string) => + axios.post<{ id: number }>( + `${API_URL}/${API_ROUTES.BACKENDS}/${id}/register_pipelines/`, + undefined, + { + headers: getAuthHeader(user), + } + ), + onSuccess: () => { + queryClient.invalidateQueries([API_ROUTES.BACKENDS]) + }, + }) + + return { populateBackend: mutateAsync, isLoading, isSuccess, error } +} diff --git a/ui/src/pages/overview/backends/backends-actions.tsx b/ui/src/pages/overview/backends/backends-actions.tsx new file mode 100644 index 000000000..bf0118aff --- /dev/null +++ b/ui/src/pages/overview/backends/backends-actions.tsx @@ -0,0 +1,30 @@ +import { usePopulateBackend } from 'data-services/hooks/backends/usePopulateBackend' +import { Backend } from 'data-services/models/backend' +import { Button, ButtonTheme } from 'design-system/components/button/button' +import { useState } from 'react' +import { STRING, translate } from 'utils/language' + +export const PopulateBackend = ({ + backend, +}: { + backend: Backend +}) => { + const [timestamp, setTimestamp] = useState() + const { populateBackend, isLoading } = usePopulateBackend() + + // TODO: It would be better to inspect task status here, but we currently don't have this information. + const isPopulating = isLoading || timestamp === backend.updatedAtDetailed + + return ( + + + + +
+ +
+
+ + ) +} + +const BackendDetailsContent = ({ + id, + onLoadingChange, +}: { + id: string + onLoadingChange: (isLoading: boolean) => void +}) => { + const { backend, isLoading, error } = useBackendDetails(id) + + useEffect(() => { + onLoadingChange(isLoading) + }, [isLoading]) + + return ( + <> + {backend ? ( + <> + + + + + + + + + + + + + + + + {backend.pipelines.length > 0 && ( + +
+ +
+
+ )} + + ) : error ? ( +
+ +
+ ) : null} + + ) +} diff --git a/ui/src/pages/backend-details/backend-pipelines.tsx b/ui/src/pages/backend-details/backend-pipelines.tsx new file mode 100644 index 000000000..3c9c05611 --- /dev/null +++ b/ui/src/pages/backend-details/backend-pipelines.tsx @@ -0,0 +1,50 @@ +import { Pipeline } from 'data-services/models/pipeline' +import { Backend } from 'data-services/models/backend' +import { BasicTableCell } from 'design-system/components/table/basic-table-cell/basic-table-cell' +import { + Table, + TableBackgroundTheme, +} from 'design-system/components/table/table/table' +import { TableColumn } from 'design-system/components/table/types' +import { STRING, translate } from 'utils/language' + +export const columns: TableColumn[] = [ + { + id: 'name', + name: translate(STRING.FIELD_LABEL_NAME), + renderCell: (item: Pipeline) => ( + + ), + }, + { + id: 'description', + name: translate(STRING.FIELD_LABEL_DESCRIPTION), + renderCell: (item: Pipeline) => ( + + ), + }, + { + id: 'created-at', + name: translate(STRING.FIELD_LABEL_CREATED_AT), + renderCell: (item: Pipeline) => , + }, + { + id: 'updated-at', + name: translate(STRING.FIELD_LABEL_UPDATED_AT), + renderCell: (item: Pipeline) => , + }, +] + +export const BackendPipelines = ({ backend }: { backend: Backend }) => ( +
+) diff --git a/ui/src/pages/backend-details/styles.module.scss b/ui/src/pages/backend-details/styles.module.scss new file mode 100644 index 000000000..93c4fe574 --- /dev/null +++ b/ui/src/pages/backend-details/styles.module.scss @@ -0,0 +1,32 @@ +@import 'src/design-system/variables/colors.scss'; +@import 'src/design-system/variables/typography.scss'; + +.content { + width: 720px; + max-width: 100%; + box-sizing: border-box; +} + +.dialogTrigger { + @include paragraph-medium(); + color: $color-primary-1-600; + font-weight: 600; + + &:hover { + cursor: pointer; + opacity: 0.7; + } + + &:focus-visible { + box-shadow: 0 0 0 2px $color-generic-black; + } +} + +.tableContainer { + max-width: 100%; + overflow: hidden; +} + +.errorContent { + padding: 32px; +} diff --git a/ui/src/pages/overview/backends/backends-columns.tsx b/ui/src/pages/overview/backends/backends-columns.tsx index 292325e21..919b20e0d 100644 --- a/ui/src/pages/overview/backends/backends-columns.tsx +++ b/ui/src/pages/overview/backends/backends-columns.tsx @@ -7,6 +7,7 @@ import { UpdateEntityDialog } from 'pages/overview/entities/entity-details-dialo import styles from 'pages/overview/entities/styles.module.scss' import { STRING, translate } from 'utils/language' import { PopulateBackend } from './backends-actions' +import { BackendDetailsDialog } from 'pages/backend-details/backend-details-dialog' export const columns: (projectId: string) => TableColumn[] = () => [ { @@ -19,7 +20,11 @@ export const columns: (projectId: string) => TableColumn[] = () => [ id: 'endpoint', name: translate(STRING.FIELD_LABEL_ENDPOINT), sortField: 'endpoint', - renderCell: (item: Backend) => , + renderCell: (item: Backend) => ( + + + + ), }, { id: 'created-at', diff --git a/ui/src/utils/language.ts b/ui/src/utils/language.ts index 74ab15352..28d6f07f1 100644 --- a/ui/src/utils/language.ts +++ b/ui/src/utils/language.ts @@ -45,6 +45,7 @@ export enum STRING { ENTITY_DELETE, ENTITY_DETAILS, ENTITY_EDIT, + ENTITY_TYPE_BACKEND, ENTITY_TYPE_CAPTURE, ENTITY_TYPE_DEPLOYMENT, ENTITY_TYPE_IDENTIFICATION, @@ -219,6 +220,7 @@ export enum STRING { NEW_ID, NOT_CONNECTED, OR, + PIPELINES, RECENT, REJECT_ID, REJECT_ID_SHORT, @@ -358,6 +360,7 @@ const ENGLISH_STRINGS: { [key in STRING]: string } = { [STRING.ENTITY_DELETE]: 'Delete {{type}}', [STRING.ENTITY_DETAILS]: '{{type}} details', [STRING.ENTITY_EDIT]: 'Edit {{type}}', + [STRING.ENTITY_TYPE_BACKEND]: 'backend', [STRING.ENTITY_TYPE_CAPTURE]: 'capture', [STRING.ENTITY_TYPE_DEPLOYMENT]: 'station', [STRING.ENTITY_TYPE_IDENTIFICATION]: 'identification', @@ -483,6 +486,7 @@ const ENGLISH_STRINGS: { [key in STRING]: string } = { [STRING.NEW_ID]: 'New ID', [STRING.NOT_CONNECTED]: 'Not connected', [STRING.OR]: 'Or', + [STRING.PIPELINES]: 'Pipelines', [STRING.RECENT]: 'Recent', [STRING.REJECT_ID]: 'Reject ID', [STRING.REJECT_ID_SHORT]: 'Reject', From 6fbdc3e170d0c62ab09da46cc7cfb949b1ada30a Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Wed, 18 Dec 2024 00:37:56 -0500 Subject: [PATCH 22/56] Display backend details --- ami/ml/admin.py | 4 ++ ami/ml/models/backend.py | 2 +- ami/ml/serializers.py | 10 ++- .../overview/backends/backends-columns.tsx | 6 ++ .../details-form/backend-details-form.tsx | 69 ++++++++++++++++++- ui/src/utils/language.ts | 4 +- 6 files changed, 91 insertions(+), 4 deletions(-) diff --git a/ami/ml/admin.py b/ami/ml/admin.py index 03dea1556..427f8e87a 100644 --- a/ami/ml/admin.py +++ b/ami/ml/admin.py @@ -64,5 +64,9 @@ class PipelineAdmin(AdminBase): class BackendAdmin(AdminBase): list_display = [ "id", + "name", "endpoint_url", + "version", + "version_name", + "created_at", ] diff --git a/ami/ml/models/backend.py b/ami/ml/models/backend.py index bfdb09a76..02a9ca117 100644 --- a/ami/ml/models/backend.py +++ b/ami/ml/models/backend.py @@ -31,7 +31,7 @@ class Backend(BaseModel): last_checked_live = models.BooleanField(null=True) def __str__(self): - return self.endpoint_url + return self.name class Meta: verbose_name = "Backend" diff --git a/ami/ml/serializers.py b/ami/ml/serializers.py index e2f5070a5..1d18e4432 100644 --- a/ami/ml/serializers.py +++ b/ami/ml/serializers.py @@ -43,6 +43,10 @@ class BackendNestedSerializer(DefaultSerializer): class Meta: model = Backend fields = [ + "name", + "slug", + "version", + "version_name", "id", "details", "endpoint_url", @@ -99,7 +103,11 @@ class Meta: model = Backend fields = [ "id", - "details", + "name", + "slug", + "description", + "version", + "version_name", "projects", "endpoint_url", "pipelines", diff --git a/ui/src/pages/overview/backends/backends-columns.tsx b/ui/src/pages/overview/backends/backends-columns.tsx index 919b20e0d..932ae2d80 100644 --- a/ui/src/pages/overview/backends/backends-columns.tsx +++ b/ui/src/pages/overview/backends/backends-columns.tsx @@ -16,6 +16,12 @@ export const columns: (projectId: string) => TableColumn[] = () => [ name: translate(STRING.FIELD_LABEL_ID), renderCell: (item: Backend) => , }, + { + id: 'name', + sortField: 'name', + name: translate(STRING.FIELD_LABEL_NAME), + renderCell: (item: Backend) => , + }, { id: 'endpoint', name: translate(STRING.FIELD_LABEL_ENDPOINT), diff --git a/ui/src/pages/overview/entities/details-form/backend-details-form.tsx b/ui/src/pages/overview/entities/details-form/backend-details-form.tsx index 50ff86c37..e22635a76 100644 --- a/ui/src/pages/overview/entities/details-form/backend-details-form.tsx +++ b/ui/src/pages/overview/entities/details-form/backend-details-form.tsx @@ -16,14 +16,43 @@ import { useFormError } from 'utils/useFormError' import { DetailsFormProps, FormValues } from './types' type BackendFormValues = FormValues & { - endpoint_url: string | undefined + slug: string + endpoint_url: string + version_name: string | undefined + version: number } const config: FormConfig = { + name: { + label: translate(STRING.FIELD_LABEL_NAME), + description: 'A descriptive name for internal reference.', + rules: { + required: true, + }, + }, + slug: { + label: translate(STRING.FIELD_LABEL_SLUG), + description: 'A unique identifier for internal reference.', + rules: { + required: true, + }, + }, endpoint_url: { label: 'Endpoint URL', description: 'ML Backend Endpoint', }, + description: { + label: translate(STRING.FIELD_LABEL_DESCRIPTION), + }, + version_name: { + label: translate(STRING.FIELD_LABEL_VERSION_NAME), + }, + version: { + label: translate(STRING.FIELD_LABEL_VERSION), + rules: { + required: true, + }, + }, } export const BackendDetailsForm = ({ @@ -52,7 +81,11 @@ export const BackendDetailsForm = ({ onSubmit={handleSubmit((values) => onSubmit({ name: values.name, + description: values.description, customFields: { + slug: values.slug, + version: values.version, + version_name: values.version_name, endpoint_url: values.endpoint_url, }, }) @@ -66,6 +99,34 @@ export const BackendDetailsForm = ({ /> )} + + + + + + + + + {backend?.id && ( Date: Wed, 18 Dec 2024 00:40:54 -0500 Subject: [PATCH 23/56] Fix backend details displayed values --- ui/src/data-services/models/backend.ts | 4 ++++ .../pages/backend-details/backend-details-dialog.tsx | 2 +- ui/src/pages/overview/backends/backends-columns.tsx | 12 ++++++------ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/ui/src/data-services/models/backend.ts b/ui/src/data-services/models/backend.ts index 97e2d0927..8d5f4a7f0 100644 --- a/ui/src/data-services/models/backend.ts +++ b/ui/src/data-services/models/backend.ts @@ -33,6 +33,10 @@ export class Backend extends Entity { return `${this._backend.id}` } + get version(): number { + return this._backend.version + } + get endpointUrl(): string { return `${this._backend.endpoint_url}` } diff --git a/ui/src/pages/backend-details/backend-details-dialog.tsx b/ui/src/pages/backend-details/backend-details-dialog.tsx index af5f82755..1a739c968 100644 --- a/ui/src/pages/backend-details/backend-details-dialog.tsx +++ b/ui/src/pages/backend-details/backend-details-dialog.tsx @@ -68,7 +68,7 @@ const BackendDetailsContent = ({ /> diff --git a/ui/src/pages/overview/backends/backends-columns.tsx b/ui/src/pages/overview/backends/backends-columns.tsx index 932ae2d80..47bf0cf55 100644 --- a/ui/src/pages/overview/backends/backends-columns.tsx +++ b/ui/src/pages/overview/backends/backends-columns.tsx @@ -20,17 +20,17 @@ export const columns: (projectId: string) => TableColumn[] = () => [ id: 'name', sortField: 'name', name: translate(STRING.FIELD_LABEL_NAME), - renderCell: (item: Backend) => , + renderCell: (item: Backend) => ( + + + + ), }, { id: 'endpoint', name: translate(STRING.FIELD_LABEL_ENDPOINT), sortField: 'endpoint', - renderCell: (item: Backend) => ( - - - - ), + renderCell: (item: Backend) => , }, { id: 'created-at', From 08eb418e66b85475fd49501fac05cbabb7af33d7 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Wed, 18 Dec 2024 15:59:00 -0500 Subject: [PATCH 24/56] Select first backend associated with pipeline --- ami/ml/models/pipeline.py | 10 +++++++++- ami/ml/views.py | 4 +--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ami/ml/models/pipeline.py b/ami/ml/models/pipeline.py index dea768836..5656fbba7 100644 --- a/ami/ml/models/pipeline.py +++ b/ami/ml/models/pipeline.py @@ -447,7 +447,15 @@ def collect_images( skip_processed=skip_processed, ) - def process_images(self, images: typing.Iterable[SourceImage], backend_id: int, job_id: int | None = None): + def choose_backend_for_pipeline(self): + # @TODO: Create function to backend from the current project and most recently responded OK to a status check + backend_id = self.backends.first().pk + + return backend_id + + def process_images(self, images: typing.Iterable[SourceImage], job_id: int | None = None): + backend_id = self.choose_backend_for_pipeline() + if not self.backends.filter(pk=backend_id).first().endpoint_url: # @TODO: use a get backend function raise ValueError("No endpoint URL configured for this pipeline") return process_images( diff --git a/ami/ml/views.py b/ami/ml/views.py index 41dafa6d1..4a93bade1 100644 --- a/ami/ml/views.py +++ b/ami/ml/views.py @@ -55,12 +55,10 @@ def test_process(self, request: Request, pk=None) -> Response: Process images using the pipeline. """ pipeline = Pipeline.objects.get(pk=pk) - # @TODO: Create function to backend from the current project and most recently responded OK to a status check - backend_id = pipeline.backends.first().pk random_image = ( SourceImage.objects.all().order_by("?").first() ) # TODO: Filter images by projects user has access to - results = pipeline.process_images(images=[random_image], backend_id=backend_id, job_id=None) + results = pipeline.process_images(images=[random_image], job_id=None) # @TODO: Add error or info messages to the response if image already processed or no detections returned return Response(results.dict()) From 565e107c8fb7545340873ebb8c3e02cd936e096a Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Wed, 18 Dec 2024 16:17:17 -0500 Subject: [PATCH 25/56] Fix linting errors --- .../hooks/backends/useTestBackendConnection.ts | 2 +- ui/src/data-services/models/backend.ts | 12 ++++++------ ui/src/pages/overview/backends/backends-actions.tsx | 6 +----- ui/src/pages/overview/backends/connection-status.tsx | 10 ++++++++-- .../pages/overview/pipelines/pipelines-columns.tsx | 12 ++++++++---- 5 files changed, 24 insertions(+), 18 deletions(-) diff --git a/ui/src/data-services/hooks/backends/useTestBackendConnection.ts b/ui/src/data-services/hooks/backends/useTestBackendConnection.ts index 6ebded37f..fcd5708d6 100644 --- a/ui/src/data-services/hooks/backends/useTestBackendConnection.ts +++ b/ui/src/data-services/hooks/backends/useTestBackendConnection.ts @@ -18,7 +18,7 @@ export const useTestBackendConnection = () => { const { data, mutateAsync, isLoading, isSuccess, error } = useMutation({ mutationFn: (params: { id: string; subdir?: string; regex?: string }) => axios.get( - `${API_URL}/${API_ROUTES.BACKENDS}/${params.id}/status/`, + `${API_URL}/${API_ROUTES.BACKENDS}/${params.id}/status/` ), onSuccess: () => { queryClient.invalidateQueries([API_ROUTES.BACKENDS]) diff --git a/ui/src/data-services/models/backend.ts b/ui/src/data-services/models/backend.ts index 8d5f4a7f0..56da79da7 100644 --- a/ui/src/data-services/models/backend.ts +++ b/ui/src/data-services/models/backend.ts @@ -53,11 +53,11 @@ export class Backend extends Entity { get lastChecked(): string | undefined { if (!this._backend.last_checked) { - return undefined - } - - return getFormatedDateTimeString({ - date: new Date(this._backend.last_checked), - }) + return undefined + } + + return getFormatedDateTimeString({ + date: new Date(this._backend.last_checked), + }) } } diff --git a/ui/src/pages/overview/backends/backends-actions.tsx b/ui/src/pages/overview/backends/backends-actions.tsx index bf0118aff..e48837a3e 100644 --- a/ui/src/pages/overview/backends/backends-actions.tsx +++ b/ui/src/pages/overview/backends/backends-actions.tsx @@ -4,11 +4,7 @@ import { Button, ButtonTheme } from 'design-system/components/button/button' import { useState } from 'react' import { STRING, translate } from 'utils/language' -export const PopulateBackend = ({ - backend, -}: { - backend: Backend -}) => { +export const PopulateBackend = ({ backend }: { backend: Backend }) => { const [timestamp, setTimestamp] = useState() const { populateBackend, isLoading } = usePopulateBackend() diff --git a/ui/src/pages/overview/backends/connection-status.tsx b/ui/src/pages/overview/backends/connection-status.tsx index f34b546a5..77e4876f0 100644 --- a/ui/src/pages/overview/backends/connection-status.tsx +++ b/ui/src/pages/overview/backends/connection-status.tsx @@ -113,8 +113,14 @@ export const ConnectionStatus = ({ - - + + diff --git a/ui/src/pages/overview/pipelines/pipelines-columns.tsx b/ui/src/pages/overview/pipelines/pipelines-columns.tsx index d5d1b30ac..b0b80c4b7 100644 --- a/ui/src/pages/overview/pipelines/pipelines-columns.tsx +++ b/ui/src/pages/overview/pipelines/pipelines-columns.tsx @@ -35,14 +35,18 @@ export const columns: (projectId: string) => TableColumn[] = () => [ }, { id: 'backends-online', - name: "Backends Online", + name: 'Backends Online', sortField: 'backends_online', - renderCell: (item: Pipeline) => , + renderCell: (item: Pipeline) => ( + + ), }, { id: 'backends-online-last-checked', - name: "Backends Online Last Checked", + name: 'Backends Online Last Checked', sortField: 'backends_online_last_checked', - renderCell: (item: Pipeline) => , + renderCell: (item: Pipeline) => ( + + ), }, ] From 8f44493285acdbc61fbed623c6242a771f4d9637 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Wed, 18 Dec 2024 16:23:02 -0500 Subject: [PATCH 26/56] Remove backend_id --- ami/jobs/models.py | 2 +- ami/ml/tests.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ami/jobs/models.py b/ami/jobs/models.py index d2b9d5326..33d54f726 100644 --- a/ami/jobs/models.py +++ b/ami/jobs/models.py @@ -382,7 +382,7 @@ def run(cls, job: "Job"): try: results = job.pipeline.process_images( images=chunk, - job_id=job.pk, # @TODO: add backend_id + job_id=job.pk, ) except Exception as e: # Log error about image batch and continue diff --git a/ami/ml/tests.py b/ami/ml/tests.py index aff659e5e..5287dcf0f 100644 --- a/ami/ml/tests.py +++ b/ami/ml/tests.py @@ -25,12 +25,11 @@ def setUp(self): self.backend = self.backend_instance # @TODO: Create function to get most recent OK backend self.pipeline = self.backend_instance.pipelines.all().filter(slug="constant").first() - self.backend_id = self.pipeline.backends.first().pk # @TODO: Add error or info messages to the response if image already processed or no detections returned def test_run_pipeline(self): # Send images to ML backend to process and return detections - pipeline_response = self.pipeline.process_images(self.test_images, backend_id=self.backend_id, job_id=None) + pipeline_response = self.pipeline.process_images(self.test_images, job_id=None) assert pipeline_response.detections From b54e91f739d867734544a4b0f3f6c3a729bf4413 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Wed, 18 Dec 2024 20:22:51 -0500 Subject: [PATCH 27/56] Remove version/version name, fix adding project, make endpoint required --- ami/ml/admin.py | 2 - ...on_remove_backend_version_name_and_more.py | 26 +++++++++++ ami/ml/models/backend.py | 4 +- ami/ml/serializers.py | 23 +++++++--- ami/ml/tests.py | 45 ++++++++++++++++++- ui/src/data-services/models/backend.ts | 12 ++++- .../backend-details-dialog.tsx | 12 ++--- .../details-form/backend-details-form.tsx | 30 ++----------- 8 files changed, 107 insertions(+), 47 deletions(-) create mode 100644 ami/ml/migrations/0014_remove_backend_version_remove_backend_version_name_and_more.py diff --git a/ami/ml/admin.py b/ami/ml/admin.py index 427f8e87a..14cc529cf 100644 --- a/ami/ml/admin.py +++ b/ami/ml/admin.py @@ -66,7 +66,5 @@ class BackendAdmin(AdminBase): "id", "name", "endpoint_url", - "version", - "version_name", "created_at", ] diff --git a/ami/ml/migrations/0014_remove_backend_version_remove_backend_version_name_and_more.py b/ami/ml/migrations/0014_remove_backend_version_remove_backend_version_name_and_more.py new file mode 100644 index 000000000..98cf8cb26 --- /dev/null +++ b/ami/ml/migrations/0014_remove_backend_version_remove_backend_version_name_and_more.py @@ -0,0 +1,26 @@ +# Generated by Django 4.2.10 on 2024-12-18 18:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("ml", "0013_backend_description_backend_name_backend_slug_and_more"), + ] + + operations = [ + migrations.RemoveField( + model_name="backend", + name="version", + ), + migrations.RemoveField( + model_name="backend", + name="version_name", + ), + migrations.AlterField( + model_name="backend", + name="endpoint_url", + field=models.CharField(default="http://ml_backend:2000", max_length=1024), + preserve_default=False, + ), + ] diff --git a/ami/ml/models/backend.py b/ami/ml/models/backend.py index 02a9ca117..84a8d2fed 100644 --- a/ami/ml/models/backend.py +++ b/ami/ml/models/backend.py @@ -22,10 +22,8 @@ class Backend(BaseModel): name = models.CharField(max_length=255) slug = models.SlugField(max_length=255, unique=True) description = models.TextField(blank=True) - version = models.IntegerField(default=1) - version_name = models.CharField(max_length=255, blank=True) projects = models.ManyToManyField("main.Project", related_name="backends", blank=True) - endpoint_url = models.CharField(max_length=1024, null=True, blank=True) + endpoint_url = models.CharField(max_length=1024) pipelines = models.ManyToManyField("ml.Pipeline", related_name="backends", blank=True) last_checked = models.DateTimeField(null=True) last_checked_live = models.BooleanField(null=True) diff --git a/ami/ml/serializers.py b/ami/ml/serializers.py index 1d18e4432..c53c21a65 100644 --- a/ami/ml/serializers.py +++ b/ami/ml/serializers.py @@ -1,6 +1,8 @@ from django_pydantic_field.rest_framework import SchemaField +from rest_framework import serializers from ami.main.api.serializers import DefaultSerializer +from ami.main.models import Project from .models.algorithm import Algorithm from .models.backend import Backend @@ -45,8 +47,6 @@ class Meta: fields = [ "name", "slug", - "version", - "version_name", "id", "details", "endpoint_url", @@ -70,8 +70,6 @@ class Meta: "name", "slug", "description", - "version", - "version_name", "algorithms", "stages", "backends", @@ -98,6 +96,11 @@ class Meta: class BackendSerializer(DefaultSerializer): pipelines = PipelineNestedSerializer(many=True, read_only=True) + project = serializers.PrimaryKeyRelatedField( + write_only=True, + queryset=Project.objects.all(), + required=False, + ) class Meta: model = Backend @@ -106,9 +109,8 @@ class Meta: "name", "slug", "description", - "version", - "version_name", "projects", + "project", "endpoint_url", "pipelines", "created_at", @@ -116,3 +118,12 @@ class Meta: "last_checked", "last_checked_live", ] + + def create(self, validated_data): + project = validated_data.pop("project", None) + instance = super().create(validated_data) + + if project: + instance.projects.add(project) + + return instance diff --git a/ami/ml/tests.py b/ami/ml/tests.py index 5287dcf0f..5c24ea33a 100644 --- a/ami/ml/tests.py +++ b/ami/ml/tests.py @@ -1,10 +1,12 @@ import datetime from django.test import TestCase +from rest_framework.test import APIRequestFactory, APITestCase from rich import print +from ami.base.serializers import reverse_with_params from ami.main.models import Classification, Detection, Project, SourceImage, SourceImageCollection -from ami.ml.models import Algorithm, Pipeline +from ami.ml.models import Algorithm, Backend, Pipeline from ami.ml.models.pipeline import collect_images, save_results from ami.ml.schemas import ( BoundingBox, @@ -14,6 +16,47 @@ SourceImageResponse, ) from ami.tests.fixtures.main import create_captures_from_files, create_ml_backends, setup_test_project +from ami.users.models import User + + +class TestMLBackendAPI(APITestCase): + """ + Test the ML Backends API endpoints. + """ + + def setUp(self): + self.project = Project.objects.create(name="ML Backend Test Project") + + self.user = User.objects.create_user( # type: ignore + email="testuser@insectai.org", + is_staff=True, + ) + self.factory = APIRequestFactory() + + def _create_backend(self, name: str, slug: str, endpoint_url: str): + backends_create_url = reverse_with_params("api:backend-list") + self.client.force_authenticate(user=self.user) + backend_data = { + "project": self.project.pk, + "name": name, + "endpoint_url": endpoint_url, + "slug": slug, + } + resp = self.client.post(backends_create_url, backend_data) + self.client.force_authenticate(user=None) + self.assertEqual(resp.status_code, 201) + return resp.json() + + def test_create_backend(self): + self._create_backend(name="ML Backend Test", slug="ml_backend_test", endpoint_url="http://ml_backend:2000") + + def test_project_was_added(self): + response = self._create_backend( + name="ML Backend Test", slug="ml_backend_test", endpoint_url="http://ml_backend:2000" + ) + backend_id = response["id"] + backend = Backend.objects.get(pk=backend_id) + self.assertIn(self.project, backend.projects.all()) class TestPipelineWithMLBackend(TestCase): diff --git a/ui/src/data-services/models/backend.ts b/ui/src/data-services/models/backend.ts index 56da79da7..d564d1940 100644 --- a/ui/src/data-services/models/backend.ts +++ b/ui/src/data-services/models/backend.ts @@ -33,14 +33,22 @@ export class Backend extends Entity { return `${this._backend.id}` } - get version(): number { - return this._backend.version + get name(): string { + return `${this._backend.name}` + } + + get slug(): string { + return `${this._backend.slug}` } get endpointUrl(): string { return `${this._backend.endpoint_url}` } + get description(): string { + return `${this._backend.description}` + } + get updatedAt(): string | undefined { if (!this._backend.updated_at) { return undefined diff --git a/ui/src/pages/backend-details/backend-details-dialog.tsx b/ui/src/pages/backend-details/backend-details-dialog.tsx index 1a739c968..6e1a360ac 100644 --- a/ui/src/pages/backend-details/backend-details-dialog.tsx +++ b/ui/src/pages/backend-details/backend-details-dialog.tsx @@ -66,20 +66,20 @@ const BackendDetailsContent = ({ label={translate(STRING.FIELD_LABEL_ID)} value={backend.id} /> - - - + + + diff --git a/ui/src/pages/overview/entities/details-form/backend-details-form.tsx b/ui/src/pages/overview/entities/details-form/backend-details-form.tsx index e22635a76..cb462f8af 100644 --- a/ui/src/pages/overview/entities/details-form/backend-details-form.tsx +++ b/ui/src/pages/overview/entities/details-form/backend-details-form.tsx @@ -18,8 +18,6 @@ import { DetailsFormProps, FormValues } from './types' type BackendFormValues = FormValues & { slug: string endpoint_url: string - version_name: string | undefined - version: number } const config: FormConfig = { @@ -40,19 +38,13 @@ const config: FormConfig = { endpoint_url: { label: 'Endpoint URL', description: 'ML Backend Endpoint', - }, - description: { - label: translate(STRING.FIELD_LABEL_DESCRIPTION), - }, - version_name: { - label: translate(STRING.FIELD_LABEL_VERSION_NAME), - }, - version: { - label: translate(STRING.FIELD_LABEL_VERSION), rules: { required: true, }, }, + description: { + label: translate(STRING.FIELD_LABEL_DESCRIPTION), + }, } export const BackendDetailsForm = ({ @@ -84,8 +76,6 @@ export const BackendDetailsForm = ({ description: values.description, customFields: { slug: values.slug, - version: values.version, - version_name: values.version_name, endpoint_url: values.endpoint_url, }, }) @@ -113,20 +103,6 @@ export const BackendDetailsForm = ({ control={control} /> - - - - Date: Wed, 18 Dec 2024 21:30:34 -0500 Subject: [PATCH 28/56] Use ErrorState component --- ui/src/pages/backend-details/backend-details-dialog.tsx | 4 ++-- ui/src/pages/overview/backends/backends.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ui/src/pages/backend-details/backend-details-dialog.tsx b/ui/src/pages/backend-details/backend-details-dialog.tsx index 6e1a360ac..01d846eba 100644 --- a/ui/src/pages/backend-details/backend-details-dialog.tsx +++ b/ui/src/pages/backend-details/backend-details-dialog.tsx @@ -3,7 +3,7 @@ import { useBackendDetails } from 'data-services/hooks/backends/useBackendDetail import * as Dialog from 'design-system/components/dialog/dialog' import { InputValue } from 'design-system/components/input/input' import _ from 'lodash' -import { Error } from 'pages/error/error' +import { ErrorState } from 'components/error-state/error-state' import { useEffect, useState } from 'react' import { STRING, translate } from 'utils/language' import { BackendPipelines } from './backend-pipelines' @@ -103,7 +103,7 @@ const BackendDetailsContent = ({ ) : error ? (
- +
) : null} diff --git a/ui/src/pages/overview/backends/backends.tsx b/ui/src/pages/overview/backends/backends.tsx index 220cd3c0d..9a3bcf48e 100644 --- a/ui/src/pages/overview/backends/backends.tsx +++ b/ui/src/pages/overview/backends/backends.tsx @@ -4,7 +4,7 @@ import { PageHeader } from 'design-system/components/page-header/page-header' import { PaginationBar } from 'design-system/components/pagination-bar/pagination-bar' import { Table } from 'design-system/components/table/table/table' import { TableSortSettings } from 'design-system/components/table/types' -import { Error } from 'pages/error/error' +import { ErrorState } from 'components/error-state/error-state' import { NewEntityDialog } from 'pages/overview/entities/new-entity-dialog' import { useState } from 'react' import { useParams } from 'react-router-dom' @@ -29,7 +29,7 @@ export const Backends = () => { const canCreate = userPermissions?.includes(UserPermission.Create) if (!isLoading && error) { - return + return } return ( From bbc8b53f4b7a736fe9e485d4669ca34792b931dd Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Wed, 18 Dec 2024 21:37:31 -0500 Subject: [PATCH 29/56] Add serializer details --- ami/ml/serializers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ami/ml/serializers.py b/ami/ml/serializers.py index c53c21a65..8ddd18e93 100644 --- a/ami/ml/serializers.py +++ b/ami/ml/serializers.py @@ -106,6 +106,7 @@ class Meta: model = Backend fields = [ "id", + "details", "name", "slug", "description", From 661d6b112bdd171aea58d790f166914a5bb4b252 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Thu, 19 Dec 2024 01:08:19 -0500 Subject: [PATCH 30/56] API test to check that pipelines are created --- ami/ml/tests.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/ami/ml/tests.py b/ami/ml/tests.py index 5c24ea33a..4dbb511a2 100644 --- a/ami/ml/tests.py +++ b/ami/ml/tests.py @@ -47,6 +47,36 @@ def _create_backend(self, name: str, slug: str, endpoint_url: str): self.assertEqual(resp.status_code, 201) return resp.json() + def _get_backend_id_by_slug(self, slug: str) -> int: + backends_list_url = reverse_with_params("api:backend-list") + self.client.force_authenticate(user=self.user) + resp = self.client.get(backends_list_url) + self.client.force_authenticate(user=None) + self.assertEqual(resp.status_code, 200) + + # Find the backend ID by slug + resp = resp.json() + backends = resp["results"] + backend = next((b for b in backends if b["slug"] == slug), None) + self.assertIsNotNone(backend, f"No backend found with slug '{slug}'") + return backend["id"] + + def _delete_backend(self, backend_id: int): + backends_delete_url = reverse_with_params("api:backend-detail", kwargs={"pk": backend_id}) + self.client.force_authenticate(user=self.user) + resp = self.client.delete(backends_delete_url) + self.client.force_authenticate(user=None) + self.assertEqual(resp.status_code, 204) + return resp + + def _register_pipelines(self, backend_id): + backends_register_pipelines_url = reverse_with_params("api:backend-register-pipelines", args=[backend_id]) + self.client.force_authenticate(user=self.user) + resp = self.client.post(backends_register_pipelines_url) + data = resp.json() + self.assertEqual(data["success"], True) + return data + def test_create_backend(self): self._create_backend(name="ML Backend Test", slug="ml_backend_test", endpoint_url="http://ml_backend:2000") @@ -58,6 +88,20 @@ def test_project_was_added(self): backend = Backend.objects.get(pk=backend_id) self.assertIn(self.project, backend.projects.all()) + def test_backend_pipeline_registration(self): + # register a backend + response = self._create_backend( + name="ML Backend Test", slug="ml_backend_test", endpoint_url="http://ml_backend:2000" + ) + backend_id = response["id"] + + # sync the backend to create/add the associate pipelines + response = self._register_pipelines(backend_id) + backend = Backend.objects.get(pk=backend_id) + pipelines_queryset = backend.pipelines.all() + + self.assertEqual(pipelines_queryset.count(), len(response["pipelines"])) + class TestPipelineWithMLBackend(TestCase): def setUp(self): From 7375e3abfd91eb69506313d30bd148ee4fa1fd69 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Thu, 19 Dec 2024 13:01:07 -0500 Subject: [PATCH 31/56] Add edit backend default values --- .../overview/entities/details-form/backend-details-form.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ui/src/pages/overview/entities/details-form/backend-details-form.tsx b/ui/src/pages/overview/entities/details-form/backend-details-form.tsx index cb462f8af..ec260aadc 100644 --- a/ui/src/pages/overview/entities/details-form/backend-details-form.tsx +++ b/ui/src/pages/overview/entities/details-form/backend-details-form.tsx @@ -61,7 +61,10 @@ export const BackendDetailsForm = ({ setError: setFieldError, } = useForm({ defaultValues: { - endpoint_url: backend?.endpointUrl, + name: backend?.name ?? '', + slug: backend?.slug ?? '', + endpoint_url: backend?.endpointUrl ?? '', + description: backend?.description ?? '', }, mode: 'onChange', }) From c7591047f23e0fa33a2f0c09e472b524f8d3ada8 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Thu, 19 Dec 2024 15:01:15 -0500 Subject: [PATCH 32/56] Process images using backend with lowest latency --- ami/ml/models/backend.py | 6 +++++ ami/ml/models/pipeline.py | 55 ++++++++++++++++++++++++++++++++++----- ami/ml/schemas.py | 1 + 3 files changed, 55 insertions(+), 7 deletions(-) diff --git a/ami/ml/models/backend.py b/ami/ml/models/backend.py index 84a8d2fed..f399e095d 100644 --- a/ami/ml/models/backend.py +++ b/ami/ml/models/backend.py @@ -1,5 +1,6 @@ import datetime import logging +import time import typing from urllib.parse import urljoin @@ -95,6 +96,7 @@ def create_pipelines(self): def get_status(self): info_url = urljoin(self.endpoint_url, "info") + start_time = time.time() resp = requests.get(info_url) if not resp.ok: @@ -116,6 +118,9 @@ def get_status(self): self.last_checked_live = server_live self.save() + first_response_time = time.time() + latency = first_response_time - start_time + response = BackendStatusResponse( timestamp=timestamp, request_successful=resp.ok, @@ -124,6 +129,7 @@ def get_status(self): pipeline_configs=pipeline_configs, endpoint_url=self.endpoint_url, error=error, + latency=latency, ) return response diff --git a/ami/ml/models/pipeline.py b/ami/ml/models/pipeline.py index 5656fbba7..cb9496e97 100644 --- a/ami/ml/models/pipeline.py +++ b/ami/ml/models/pipeline.py @@ -194,7 +194,7 @@ def process_images( results = PipelineResponse( pipeline=pipeline.slug, - total_time=None, + total_time=0, source_images=source_images, detections=[], errors=msg, @@ -203,7 +203,6 @@ def process_images( results = resp.json() results = PipelineResponse(**results) - if job: job.logger.debug(f"Results: {results}") detections = results.detections @@ -447,14 +446,56 @@ def collect_images( skip_processed=skip_processed, ) - def choose_backend_for_pipeline(self): - # @TODO: Create function to backend from the current project and most recently responded OK to a status check - backend_id = self.backends.first().pk + def choose_backend_for_pipeline(self, job_id): + job = None + if job_id: + from ami.jobs.models import Job + + job = Job.objects.get(pk=job_id) + + backends = self.backends.all() + + # check the status of all backends + backend_id_lowest_latency = backends.first().id if backends.exists() else None + lowest_latency = 10000 + backends_online = False + + for backend in backends: + status_response = backend.get_status() + if status_response.server_live: + backends_online = True + if status_response.latency < lowest_latency: + lowest_latency = status_response.latency + # pick the backend that lowest latency + backend_id_lowest_latency = backend.id + + # if all offline then throw error + if not backends_online: + msg = "No backends are online." + + if job: + job.logger.error(msg) + logger.error(msg) + + results = PipelineResponse( + pipeline=self.slug, + total_time=0, + source_images=[], + detections=[], + errors=msg, + ) + return results + else: + if job: + job.logger.info(f"Using Backend with ID={backend_id_lowest_latency}") + logger.info(f"Using Backend with ID={backend_id_lowest_latency}") - return backend_id + return backend_id_lowest_latency def process_images(self, images: typing.Iterable[SourceImage], job_id: int | None = None): - backend_id = self.choose_backend_for_pipeline() + backend_id = self.choose_backend_for_pipeline(job_id) + if not isinstance(backend_id, int): + return backend_id if not self.backends.filter(pk=backend_id).first().endpoint_url: # @TODO: use a get backend function raise ValueError("No endpoint URL configured for this pipeline") diff --git a/ami/ml/schemas.py b/ami/ml/schemas.py index 97d348a5e..6710bac60 100644 --- a/ami/ml/schemas.py +++ b/ami/ml/schemas.py @@ -114,6 +114,7 @@ class BackendStatusResponse(pydantic.BaseModel): server_live: bool pipelines_online: list[str] | str endpoint_url: str + latency: float class PipelineRegistrationResponse(pydantic.BaseModel): From 5c2d90da58357f7b4452a764981d7b62b8e2345b Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Thu, 19 Dec 2024 15:57:02 -0500 Subject: [PATCH 33/56] Remove projects from ML schemas --- ami/ml/models/backend.py | 15 --------------- ami/ml/schemas.py | 6 ------ ml_backends/example/api/api.py | 3 --- ml_backends/example/api/schemas.py | 5 ----- 4 files changed, 29 deletions(-) diff --git a/ami/ml/models/backend.py b/ami/ml/models/backend.py index f399e095d..5fb2e2eb7 100644 --- a/ami/ml/models/backend.py +++ b/ami/ml/models/backend.py @@ -8,7 +8,6 @@ from django.db import models from ami.base.models import BaseModel -from ami.main.models import Project from ami.ml.models.algorithm import Algorithm from ami.ml.models.pipeline import Pipeline from ami.ml.schemas import BackendStatusResponse, PipelineRegistrationResponse @@ -43,7 +42,6 @@ def create_pipelines(self): pipelines = [] pipelines_created = [] algorithms_created = [] - projects_created = [] for pipeline_data in pipelines_to_add: pipeline, created = Pipeline.objects.get_or_create( @@ -70,18 +68,6 @@ def create_pipelines(self): else: logger.info(f"Using existing algorithm {algorithm.name}.") - for project_data in pipeline_data.projects: - project, created = Project.objects.get_or_create(name=project_data.name) - pipeline.projects.add(project) - - if created: - logger.info(f"Successfully created project {project.name}.") - projects_created.append(project.name) - else: - logger.info(f"Using existing project {project.name}.") - - # @TODO: Add the stages - pipeline.save() pipelines.append(pipeline) @@ -91,7 +77,6 @@ def create_pipelines(self): pipelines=pipelines_to_add, pipelines_created=pipelines_created, algorithms_created=algorithms_created, - projects_created=projects_created, ) def get_status(self): diff --git a/ami/ml/schemas.py b/ami/ml/schemas.py index 6710bac60..ca8d44cc3 100644 --- a/ami/ml/schemas.py +++ b/ami/ml/schemas.py @@ -85,10 +85,6 @@ class PipelineStage(pydantic.BaseModel): description: str | None = None -class ProjectConfig(pydantic.BaseModel): - name: str - - class AlgorithmConfig(pydantic.BaseModel): name: str key: str @@ -103,7 +99,6 @@ class PipelineConfig(pydantic.BaseModel): description: str | None = None algorithms: list[AlgorithmConfig] = [] stages: list[PipelineStage] = [] - projects: list[ProjectConfig] = [] class BackendStatusResponse(pydantic.BaseModel): @@ -124,4 +119,3 @@ class PipelineRegistrationResponse(pydantic.BaseModel): pipelines: list[PipelineConfig] = [] pipelines_created: list[str] = [] algorithms_created: list[str] = [] - projects_created: list[str] = [] diff --git a/ml_backends/example/api/api.py b/ml_backends/example/api/api.py index 1a50401ae..e7c0d27a8 100644 --- a/ml_backends/example/api/api.py +++ b/ml_backends/example/api/api.py @@ -13,7 +13,6 @@ PipelineConfig, PipelineRequest, PipelineResponse, - ProjectConfig, SourceImage, SourceImageResponse, ) @@ -31,7 +30,6 @@ AlgorithmConfig(name="Random Detector", key="2"), AlgorithmConfig(name="Always Moth Classifier", key="3"), ], - projects=[ProjectConfig(name="Test Project 1ed10463")], ) pipeline2 = PipelineConfig( @@ -43,7 +41,6 @@ AlgorithmConfig(name="Random Detector", key="2"), AlgorithmConfig(name="Always Moth Classifier", key="3"), ], - projects=[ProjectConfig(name="Test Project 1ed10463")], ) pipelines = [pipeline1, pipeline2] diff --git a/ml_backends/example/api/schemas.py b/ml_backends/example/api/schemas.py index 99a85c872..adb4a16ee 100644 --- a/ml_backends/example/api/schemas.py +++ b/ml_backends/example/api/schemas.py @@ -148,10 +148,6 @@ class PipelineStage(pydantic.BaseModel): description: str | None = None -class ProjectConfig(pydantic.BaseModel): - name: str - - class AlgorithmConfig(pydantic.BaseModel): name: str key: str @@ -166,4 +162,3 @@ class PipelineConfig(pydantic.BaseModel): description: str | None = None algorithms: list[AlgorithmConfig] = [] stages: list[PipelineStage] = [] - projects: list[ProjectConfig] = [] From 662fb1c6298e7d171db6bac91fe48883121c0c9f Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Thu, 19 Dec 2024 16:22:07 -0500 Subject: [PATCH 34/56] Resolve todos --- ami/ml/models/pipeline.py | 2 +- ami/ml/tests.py | 2 -- ami/ml/views.py | 1 - ami/tests/fixtures/main.py | 2 -- 4 files changed, 1 insertion(+), 6 deletions(-) diff --git a/ami/ml/models/pipeline.py b/ami/ml/models/pipeline.py index cb9496e97..d15c7a2e7 100644 --- a/ami/ml/models/pipeline.py +++ b/ami/ml/models/pipeline.py @@ -497,7 +497,7 @@ def process_images(self, images: typing.Iterable[SourceImage], job_id: int | Non if not isinstance(backend_id, int): return backend_id - if not self.backends.filter(pk=backend_id).first().endpoint_url: # @TODO: use a get backend function + if not self.backends.filter(pk=backend_id).first().endpoint_url: raise ValueError("No endpoint URL configured for this pipeline") return process_images( endpoint_url=urljoin(self.backends.filter(pk=backend_id).first().endpoint_url, "/process_images"), diff --git a/ami/ml/tests.py b/ami/ml/tests.py index 4dbb511a2..7e0140d14 100644 --- a/ami/ml/tests.py +++ b/ami/ml/tests.py @@ -110,9 +110,7 @@ def setUp(self): self.test_images = [image for image, frame in self.captures] self.backend_instance = create_ml_backends(self.project) self.backend = self.backend_instance - # @TODO: Create function to get most recent OK backend self.pipeline = self.backend_instance.pipelines.all().filter(slug="constant").first() - # @TODO: Add error or info messages to the response if image already processed or no detections returned def test_run_pipeline(self): # Send images to ML backend to process and return detections diff --git a/ami/ml/views.py b/ami/ml/views.py index 4a93bade1..8eacd4a56 100644 --- a/ami/ml/views.py +++ b/ami/ml/views.py @@ -59,7 +59,6 @@ def test_process(self, request: Request, pk=None) -> Response: SourceImage.objects.all().order_by("?").first() ) # TODO: Filter images by projects user has access to results = pipeline.process_images(images=[random_image], job_id=None) - # @TODO: Add error or info messages to the response if image already processed or no detections returned return Response(results.dict()) diff --git a/ami/tests/fixtures/main.py b/ami/tests/fixtures/main.py index 3b62083d7..7bf80b813 100644 --- a/ami/tests/fixtures/main.py +++ b/ami/tests/fixtures/main.py @@ -37,8 +37,6 @@ def update_site_settings(**kwargs): return site -# @TODO: To test this: delete project in admin, then run migrate -# (this will execute the signal in ami-platform/ami/tests/fixtures/signals.py) def create_ml_backends(project): backends_to_add = [ { From 681321941c8d53f9168571fa3f1483e55cd99433 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Thu, 19 Dec 2024 17:28:35 -0500 Subject: [PATCH 35/56] Raise exception if no backends online --- ami/ml/models/pipeline.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/ami/ml/models/pipeline.py b/ami/ml/models/pipeline.py index d15c7a2e7..ce34b6f75 100644 --- a/ami/ml/models/pipeline.py +++ b/ami/ml/models/pipeline.py @@ -477,14 +477,7 @@ def choose_backend_for_pipeline(self, job_id): job.logger.error(msg) logger.error(msg) - results = PipelineResponse( - pipeline=self.slug, - total_time=0, - source_images=[], - detections=[], - errors=msg, - ) - return results + raise Exception(msg) else: if job: job.logger.info(f"Using Backend with ID={backend_id_lowest_latency}") From 8f72fd333d6eeffb34b38e441dfcea7f6eb1698d Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Thu, 19 Dec 2024 17:35:05 -0500 Subject: [PATCH 36/56] Fail the job if no backends are online --- ami/ml/models/pipeline.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ami/ml/models/pipeline.py b/ami/ml/models/pipeline.py index ce34b6f75..b2feae17d 100644 --- a/ami/ml/models/pipeline.py +++ b/ami/ml/models/pipeline.py @@ -486,9 +486,10 @@ def choose_backend_for_pipeline(self, job_id): return backend_id_lowest_latency def process_images(self, images: typing.Iterable[SourceImage], job_id: int | None = None): - backend_id = self.choose_backend_for_pipeline(job_id) - if not isinstance(backend_id, int): - return backend_id + try: + backend_id = self.choose_backend_for_pipeline(job_id) + except Exception: + return if not self.backends.filter(pk=backend_id).first().endpoint_url: raise ValueError("No endpoint URL configured for this pipeline") From e65d210ee466d889c2cbb73a7598e91305937f1b Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Sat, 11 Jan 2025 21:27:51 -0500 Subject: [PATCH 37/56] Change MLBackend to ProcessingService --- ami/ml/tests.py | 16 +++++++++------- ami/tests/fixtures/main.py | 8 ++++---- docker-compose.ci.yml | 8 ++++---- docker-compose.yml | 8 ++++---- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/ami/ml/tests.py b/ami/ml/tests.py index 7e0140d14..3f07ad0fa 100644 --- a/ami/ml/tests.py +++ b/ami/ml/tests.py @@ -15,11 +15,11 @@ PipelineResponse, SourceImageResponse, ) -from ami.tests.fixtures.main import create_captures_from_files, create_ml_backends, setup_test_project +from ami.tests.fixtures.main import create_captures_from_files, create_processing_services, setup_test_project from ami.users.models import User -class TestMLBackendAPI(APITestCase): +class TestProcessingServiceAPI(APITestCase): """ Test the ML Backends API endpoints. """ @@ -78,11 +78,13 @@ def _register_pipelines(self, backend_id): return data def test_create_backend(self): - self._create_backend(name="ML Backend Test", slug="ml_backend_test", endpoint_url="http://ml_backend:2000") + self._create_backend( + name="ML Backend Test", slug="processing_service_test", endpoint_url="http://processing_service:2000" + ) def test_project_was_added(self): response = self._create_backend( - name="ML Backend Test", slug="ml_backend_test", endpoint_url="http://ml_backend:2000" + name="ML Backend Test", slug="processing_service_test", endpoint_url="http://processing_service:2000" ) backend_id = response["id"] backend = Backend.objects.get(pk=backend_id) @@ -91,7 +93,7 @@ def test_project_was_added(self): def test_backend_pipeline_registration(self): # register a backend response = self._create_backend( - name="ML Backend Test", slug="ml_backend_test", endpoint_url="http://ml_backend:2000" + name="ML Backend Test", slug="processing_service_test", endpoint_url="http://processing_service:2000" ) backend_id = response["id"] @@ -103,12 +105,12 @@ def test_backend_pipeline_registration(self): self.assertEqual(pipelines_queryset.count(), len(response["pipelines"])) -class TestPipelineWithMLBackend(TestCase): +class TestPipelineWithProcessingService(TestCase): def setUp(self): self.project, self.deployment = setup_test_project() self.captures = create_captures_from_files(self.deployment, skip_existing=False) self.test_images = [image for image, frame in self.captures] - self.backend_instance = create_ml_backends(self.project) + self.backend_instance = create_processing_services(self.project) self.backend = self.backend_instance self.pipeline = self.backend_instance.pipelines.all().filter(slug="constant").first() diff --git a/ami/tests/fixtures/main.py b/ami/tests/fixtures/main.py index 7bf80b813..b5ca0b841 100644 --- a/ami/tests/fixtures/main.py +++ b/ami/tests/fixtures/main.py @@ -37,11 +37,11 @@ def update_site_settings(**kwargs): return site -def create_ml_backends(project): +def create_processing_services(project): backends_to_add = [ { "projects": [{"name": project.name}], - "endpoint_url": "http://ml_backend:2000", + "endpoint_url": "http://processing_service:2000", }, ] @@ -77,7 +77,7 @@ def setup_test_project(reuse=True) -> tuple[Project, Deployment]: deployment, _ = Deployment.objects.get_or_create( project=project, name="Test Deployment", defaults=dict(data_source=data_source) ) - create_ml_backends(project) + create_processing_services(project) else: short_id = uuid.uuid4().hex[:8] project = Project.objects.create(name=f"Test Project {short_id}") @@ -85,7 +85,7 @@ def setup_test_project(reuse=True) -> tuple[Project, Deployment]: deployment = Deployment.objects.create( project=project, name=f"Test Deployment {short_id}", data_source=data_source ) - create_ml_backends(project) + create_processing_services(project) return project, deployment diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index 613a7cb5b..f3c6d53cc 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -8,7 +8,7 @@ services: - postgres - redis - minio-init - - ml_backend + - processing_service env_file: - ./.envs/.ci/.django - ./.envs/.ci/.postgres @@ -43,10 +43,10 @@ services: - ./compose/local/minio/init.sh:/etc/minio/init.sh entrypoint: /etc/minio/init.sh - ml_backend: + processing_service: build: - context: ./ml_backends/example + context: ./processing_services/example volumes: - - ./ml_backends/example/:/app:ml_backend + - ./processing_services/example/:/app:processing_service ports: - "2000:2000" diff --git a/docker-compose.yml b/docker-compose.yml index 4b8878fc4..347c39248 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,7 +23,7 @@ services: - postgres - redis - minio-init - - ml_backend + - processing_service volumes: - .:/app:z env_file: @@ -140,10 +140,10 @@ services: - ./compose/local/minio/init.sh:/etc/minio/init.sh entrypoint: /etc/minio/init.sh - ml_backend: + processing_service: build: - context: ./ml_backends/example + context: ./processing_services/example volumes: - - ./ml_backends/example/:/app:ml_backend + - ./processing_services/example/:/app:processing_service ports: - "2005:2000" From 325a7c7a8b707c2092f19d096a2346431b368dc7 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Sat, 11 Jan 2025 22:42:20 -0500 Subject: [PATCH 38/56] Change all instances of backend to processing service --- ami/ml/admin.py | 6 +- ami/ml/models/__init__.py | 4 +- ami/ml/models/pipeline.py | 46 ++++---- .../{backend.py => processing_service.py} | 14 +-- ami/ml/schemas.py | 2 +- ami/ml/serializers.py | 14 +-- ami/ml/tests.py | 100 ++++++++++-------- ami/ml/views.py | 22 ++-- ami/tests/fixtures/main.py | 24 ++--- config/api_router.py | 2 +- .../docker-compose.yml | 0 .../example/Dockerfile | 0 .../example/api/__init__.py | 0 .../example/api/api.py | 0 .../example/api/pipeline.py | 0 .../example/api/schemas.py | 0 .../example/api/test.py | 0 .../example/api/utils.py | 0 .../example/main.py | 0 .../example/requirements.txt | 0 ui/src/data-services/constants.ts | 2 +- .../hooks/backends/useBackendDetails.ts | 32 ------ .../usePopulateProcessingService.ts} | 8 +- .../useProcessingServiceDetails.ts | 37 +++++++ .../useProcessingServices.ts} | 21 ++-- .../useTestProcessingServiceConnection.ts} | 8 +- ui/src/data-services/models/backend.ts | 71 ------------- ui/src/data-services/models/pipeline.ts | 20 ++-- .../models/processing-service.ts | 71 +++++++++++++ .../overview/backends/backends-actions.tsx | 26 ----- .../entities/details-form/constants.ts | 6 +- ...sx => processing-service-details-form.tsx} | 28 ++--- ui/src/pages/overview/overview.tsx | 10 +- .../overview/pipelines/pipelines-columns.tsx | 16 +-- .../connection-status.tsx | 25 +++-- .../processing-services-actions.tsx | 32 ++++++ .../processing-services-columns.tsx} | 48 +++++---- .../processing-services.module.scss} | 0 .../processing-services.tsx} | 19 ++-- .../status-info/status-info.module.scss | 0 .../status-info/status-info.tsx | 0 .../status-info/types.ts | 0 .../processing-service-details-dialog.tsx} | 42 +++++--- .../processing-service-pipelines.tsx} | 10 +- .../styles.module.scss | 0 ui/src/utils/language.ts | 14 +-- 46 files changed, 423 insertions(+), 357 deletions(-) rename ami/ml/models/{backend.py => processing_service.py} (91%) rename {ml_backends => processing_services}/docker-compose.yml (100%) rename {ml_backends => processing_services}/example/Dockerfile (100%) rename {ml_backends => processing_services}/example/api/__init__.py (100%) rename {ml_backends => processing_services}/example/api/api.py (100%) rename {ml_backends => processing_services}/example/api/pipeline.py (100%) rename {ml_backends => processing_services}/example/api/schemas.py (100%) rename {ml_backends => processing_services}/example/api/test.py (100%) rename {ml_backends => processing_services}/example/api/utils.py (100%) rename {ml_backends => processing_services}/example/main.py (100%) rename {ml_backends => processing_services}/example/requirements.txt (100%) delete mode 100644 ui/src/data-services/hooks/backends/useBackendDetails.ts rename ui/src/data-services/hooks/{backends/usePopulateBackend.ts => processing-services/usePopulateProcessingService.ts} (67%) create mode 100644 ui/src/data-services/hooks/processing-services/useProcessingServiceDetails.ts rename ui/src/data-services/hooks/{backends/useBackends.ts => processing-services/useProcessingServices.ts} (64%) rename ui/src/data-services/hooks/{backends/useTestBackendConnection.ts => processing-services/useTestProcessingServiceConnection.ts} (79%) delete mode 100644 ui/src/data-services/models/backend.ts create mode 100644 ui/src/data-services/models/processing-service.ts delete mode 100644 ui/src/pages/overview/backends/backends-actions.tsx rename ui/src/pages/overview/entities/details-form/{backend-details-form.tsx => processing-service-details-form.tsx} (79%) rename ui/src/pages/overview/{backends => processing-services}/connection-status.tsx (84%) create mode 100644 ui/src/pages/overview/processing-services/processing-services-actions.tsx rename ui/src/pages/overview/{backends/backends-columns.tsx => processing-services/processing-services-columns.tsx} (56%) rename ui/src/pages/overview/{backends/backends.module.scss => processing-services/processing-services.module.scss} (100%) rename ui/src/pages/overview/{backends/backends.tsx => processing-services/processing-services.tsx} (78%) rename ui/src/pages/overview/{backends => processing-services}/status-info/status-info.module.scss (100%) rename ui/src/pages/overview/{backends => processing-services}/status-info/status-info.tsx (100%) rename ui/src/pages/overview/{backends => processing-services}/status-info/types.ts (100%) rename ui/src/pages/{backend-details/backend-details-dialog.tsx => processing-service-details/processing-service-details-dialog.tsx} (69%) rename ui/src/pages/{backend-details/backend-pipelines.tsx => processing-service-details/processing-service-pipelines.tsx} (84%) rename ui/src/pages/{backend-details => processing-service-details}/styles.module.scss (100%) diff --git a/ami/ml/admin.py b/ami/ml/admin.py index 14cc529cf..3f4784d1b 100644 --- a/ami/ml/admin.py +++ b/ami/ml/admin.py @@ -3,8 +3,8 @@ from ami.main.admin import AdminBase from .models.algorithm import Algorithm -from .models.backend import Backend from .models.pipeline import Pipeline +from .models.processing_service import ProcessingService @admin.register(Algorithm) @@ -60,8 +60,8 @@ class PipelineAdmin(AdminBase): } -@admin.register(Backend) -class BackendAdmin(AdminBase): +@admin.register(ProcessingService) +class ProcessingServiceAdmin(AdminBase): list_display = [ "id", "name", diff --git a/ami/ml/models/__init__.py b/ami/ml/models/__init__.py index fe1e7475e..a5e716372 100644 --- a/ami/ml/models/__init__.py +++ b/ami/ml/models/__init__.py @@ -1,9 +1,9 @@ from ami.ml.models.algorithm import Algorithm -from ami.ml.models.backend import Backend from ami.ml.models.pipeline import Pipeline +from ami.ml.models.processing_service import ProcessingService __all__ = [ "Algorithm", "Pipeline", - "Backend", + "ProcessingService", ] diff --git a/ami/ml/models/pipeline.py b/ami/ml/models/pipeline.py index b2feae17d..616926af7 100644 --- a/ami/ml/models/pipeline.py +++ b/ami/ml/models/pipeline.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: - from ami.ml.models import Backend + from ami.ml.models import ProcessingService import logging import typing @@ -164,7 +164,7 @@ def process_images( detections=[], total_time=0, ) - task_logger.info(f"Sending {len(images)} images to ML backend {pipeline.slug}") + task_logger.info(f"Sending {len(images)} images to Processing Service {pipeline.slug}") urls = [source_image.public_url() for source_image in images if source_image.public_url()] source_images = [ @@ -232,7 +232,7 @@ def save_results(results: PipelineResponse | None = None, results_json: str | No pipeline, _created = Pipeline.objects.get_or_create(slug=results.pipeline, defaults={"name": results.pipeline}) if _created: - logger.warning(f"Pipeline choice returned by the ML backend was not recognized! {pipeline}") + logger.warning(f"Pipeline choice returned by the Processing Service was not recognized! {pipeline}") created_objects.append(pipeline) algorithms_used = set() @@ -420,7 +420,7 @@ class Pipeline(BaseModel): ), ) projects = models.ManyToManyField("main.Project", related_name="pipelines", blank=True) - backends: models.QuerySet[Backend] + processing_services: models.QuerySet[ProcessingService] class Meta: ordering = ["name", "version"] @@ -446,32 +446,32 @@ def collect_images( skip_processed=skip_processed, ) - def choose_backend_for_pipeline(self, job_id): + def choose_processing_service_for_pipeline(self, job_id): job = None if job_id: from ami.jobs.models import Job job = Job.objects.get(pk=job_id) - backends = self.backends.all() + processing_services = self.processing_services.all() - # check the status of all backends - backend_id_lowest_latency = backends.first().id if backends.exists() else None + # check the status of all processing services + processing_service_id_lowest_latency = processing_services.first().id if processing_services.exists() else None lowest_latency = 10000 - backends_online = False + processing_services_online = False - for backend in backends: - status_response = backend.get_status() + for processing_service in processing_services: + status_response = processing_service.get_status() if status_response.server_live: - backends_online = True + processing_services_online = True if status_response.latency < lowest_latency: lowest_latency = status_response.latency - # pick the backend that lowest latency - backend_id_lowest_latency = backend.id + # pick the processing service that has lowest latency + processing_service_id_lowest_latency = processing_service.id # if all offline then throw error - if not backends_online: - msg = "No backends are online." + if not processing_services_online: + msg = "No processing services are online." if job: job.logger.error(msg) @@ -480,21 +480,23 @@ def choose_backend_for_pipeline(self, job_id): raise Exception(msg) else: if job: - job.logger.info(f"Using Backend with ID={backend_id_lowest_latency}") - logger.info(f"Using Backend with ID={backend_id_lowest_latency}") + job.logger.info(f"Using Processing Service with ID={processing_service_id_lowest_latency}") + logger.info(f"Using Processing Service with ID={processing_service_id_lowest_latency}") - return backend_id_lowest_latency + return processing_service_id_lowest_latency def process_images(self, images: typing.Iterable[SourceImage], job_id: int | None = None): try: - backend_id = self.choose_backend_for_pipeline(job_id) + processing_service_id = self.choose_processing_service_for_pipeline(job_id) except Exception: return - if not self.backends.filter(pk=backend_id).first().endpoint_url: + if not self.processing_services.filter(pk=processing_service_id).first().endpoint_url: raise ValueError("No endpoint URL configured for this pipeline") return process_images( - endpoint_url=urljoin(self.backends.filter(pk=backend_id).first().endpoint_url, "/process_images"), + endpoint_url=urljoin( + self.processing_services.filter(pk=processing_service_id).first().endpoint_url, "/process_images" + ), pipeline=self, images=images, job_id=job_id, diff --git a/ami/ml/models/backend.py b/ami/ml/models/processing_service.py similarity index 91% rename from ami/ml/models/backend.py rename to ami/ml/models/processing_service.py index 5fb2e2eb7..aae7868db 100644 --- a/ami/ml/models/backend.py +++ b/ami/ml/models/processing_service.py @@ -10,21 +10,21 @@ from ami.base.models import BaseModel from ami.ml.models.algorithm import Algorithm from ami.ml.models.pipeline import Pipeline -from ami.ml.schemas import BackendStatusResponse, PipelineRegistrationResponse +from ami.ml.schemas import PipelineRegistrationResponse, ProcessingServiceStatusResponse logger = logging.getLogger(__name__) @typing.final -class Backend(BaseModel): +class ProcessingService(BaseModel): """An ML processing backend""" name = models.CharField(max_length=255) slug = models.SlugField(max_length=255, unique=True) description = models.TextField(blank=True) - projects = models.ManyToManyField("main.Project", related_name="backends", blank=True) + projects = models.ManyToManyField("main.Project", related_name="processing_services", blank=True) endpoint_url = models.CharField(max_length=1024) - pipelines = models.ManyToManyField("ml.Pipeline", related_name="backends", blank=True) + pipelines = models.ManyToManyField("ml.Pipeline", related_name="processing_services", blank=True) last_checked = models.DateTimeField(null=True) last_checked_live = models.BooleanField(null=True) @@ -32,8 +32,8 @@ def __str__(self): return self.name class Meta: - verbose_name = "Backend" - verbose_name_plural = "Backends" + verbose_name = "ProcessingService" + verbose_name_plural = "ProcessingServices" def create_pipelines(self): # Call the status endpoint and get the pipelines/algorithms @@ -106,7 +106,7 @@ def get_status(self): first_response_time = time.time() latency = first_response_time - start_time - response = BackendStatusResponse( + response = ProcessingServiceStatusResponse( timestamp=timestamp, request_successful=resp.ok, server_live=server_live, diff --git a/ami/ml/schemas.py b/ami/ml/schemas.py index ca8d44cc3..fe28d90c6 100644 --- a/ami/ml/schemas.py +++ b/ami/ml/schemas.py @@ -101,7 +101,7 @@ class PipelineConfig(pydantic.BaseModel): stages: list[PipelineStage] = [] -class BackendStatusResponse(pydantic.BaseModel): +class ProcessingServiceStatusResponse(pydantic.BaseModel): timestamp: datetime.datetime request_successful: bool pipeline_configs: list[PipelineConfig] = [] diff --git a/ami/ml/serializers.py b/ami/ml/serializers.py index 8ddd18e93..02a1ce7ce 100644 --- a/ami/ml/serializers.py +++ b/ami/ml/serializers.py @@ -5,8 +5,8 @@ from ami.main.models import Project from .models.algorithm import Algorithm -from .models.backend import Backend from .models.pipeline import Pipeline, PipelineStage +from .models.processing_service import ProcessingService class AlgorithmSerializer(DefaultSerializer): @@ -41,9 +41,9 @@ class Meta: ] -class BackendNestedSerializer(DefaultSerializer): +class ProcessingServiceNestedSerializer(DefaultSerializer): class Meta: - model = Backend + model = ProcessingService fields = [ "name", "slug", @@ -60,7 +60,7 @@ class Meta: class PipelineSerializer(DefaultSerializer): algorithms = AlgorithmSerializer(many=True, read_only=True) stages = SchemaField(schema=list[PipelineStage], read_only=True) - backends = BackendNestedSerializer(many=True, read_only=True) + processing_services = ProcessingServiceNestedSerializer(many=True, read_only=True) class Meta: model = Pipeline @@ -72,7 +72,7 @@ class Meta: "description", "algorithms", "stages", - "backends", + "processing_services", "created_at", "updated_at", ] @@ -94,7 +94,7 @@ class Meta: ] -class BackendSerializer(DefaultSerializer): +class ProcessingServiceSerializer(DefaultSerializer): pipelines = PipelineNestedSerializer(many=True, read_only=True) project = serializers.PrimaryKeyRelatedField( write_only=True, @@ -103,7 +103,7 @@ class BackendSerializer(DefaultSerializer): ) class Meta: - model = Backend + model = ProcessingService fields = [ "id", "details", diff --git a/ami/ml/tests.py b/ami/ml/tests.py index 3f07ad0fa..fb0801f8d 100644 --- a/ami/ml/tests.py +++ b/ami/ml/tests.py @@ -6,7 +6,7 @@ from ami.base.serializers import reverse_with_params from ami.main.models import Classification, Detection, Project, SourceImage, SourceImageCollection -from ami.ml.models import Algorithm, Backend, Pipeline +from ami.ml.models import Algorithm, Pipeline, ProcessingService from ami.ml.models.pipeline import collect_images, save_results from ami.ml.schemas import ( BoundingBox, @@ -21,11 +21,11 @@ class TestProcessingServiceAPI(APITestCase): """ - Test the ML Backends API endpoints. + Test the Processing Services API endpoints. """ def setUp(self): - self.project = Project.objects.create(name="ML Backend Test Project") + self.project = Project.objects.create(name="Processing Service Test Project") self.user = User.objects.create_user( # type: ignore email="testuser@insectai.org", @@ -33,74 +33,84 @@ def setUp(self): ) self.factory = APIRequestFactory() - def _create_backend(self, name: str, slug: str, endpoint_url: str): - backends_create_url = reverse_with_params("api:backend-list") + def _create_processing_service(self, name: str, slug: str, endpoint_url: str): + processing_services_create_url = reverse_with_params("api:processing-service-list") self.client.force_authenticate(user=self.user) - backend_data = { + processing_service_data = { "project": self.project.pk, "name": name, "endpoint_url": endpoint_url, "slug": slug, } - resp = self.client.post(backends_create_url, backend_data) + resp = self.client.post(processing_services_create_url, processing_service_data) self.client.force_authenticate(user=None) self.assertEqual(resp.status_code, 201) return resp.json() - def _get_backend_id_by_slug(self, slug: str) -> int: - backends_list_url = reverse_with_params("api:backend-list") + def _get_processing_service_id_by_slug(self, slug: str) -> int: + processing_services_list_url = reverse_with_params("api:processing-service-list") self.client.force_authenticate(user=self.user) - resp = self.client.get(backends_list_url) + resp = self.client.get(processing_services_list_url) self.client.force_authenticate(user=None) self.assertEqual(resp.status_code, 200) - # Find the backend ID by slug + # Find the processing service ID by slug resp = resp.json() - backends = resp["results"] - backend = next((b for b in backends if b["slug"] == slug), None) - self.assertIsNotNone(backend, f"No backend found with slug '{slug}'") - return backend["id"] - - def _delete_backend(self, backend_id: int): - backends_delete_url = reverse_with_params("api:backend-detail", kwargs={"pk": backend_id}) + processing_services = resp["results"] + processing_service = next((b for b in processing_services if b["slug"] == slug), None) + self.assertIsNotNone(processing_service, f"No processing service found with slug '{slug}'") + return processing_service["id"] + + def _delete_processing_service(self, processing_service_id: int): + processing_services_delete_url = reverse_with_params( + "api:processing-service-detail", kwargs={"pk": processing_service_id} + ) self.client.force_authenticate(user=self.user) - resp = self.client.delete(backends_delete_url) + resp = self.client.delete(processing_services_delete_url) self.client.force_authenticate(user=None) self.assertEqual(resp.status_code, 204) return resp - def _register_pipelines(self, backend_id): - backends_register_pipelines_url = reverse_with_params("api:backend-register-pipelines", args=[backend_id]) + def _register_pipelines(self, processing_service_id): + processing_services_register_pipelines_url = reverse_with_params( + "api:processing-service-register-pipelines", args=[processing_service_id] + ) self.client.force_authenticate(user=self.user) - resp = self.client.post(backends_register_pipelines_url) + resp = self.client.post(processing_services_register_pipelines_url) data = resp.json() self.assertEqual(data["success"], True) return data - def test_create_backend(self): - self._create_backend( - name="ML Backend Test", slug="processing_service_test", endpoint_url="http://processing_service:2000" + def test_create_processing_service(self): + self._create_processing_service( + name="Processing Service Test", + slug="processing_service_test", + endpoint_url="http://processing_service:2000", ) def test_project_was_added(self): - response = self._create_backend( - name="ML Backend Test", slug="processing_service_test", endpoint_url="http://processing_service:2000" + response = self._create_processing_service( + name="Processing Service Test", + slug="processing_service_test", + endpoint_url="http://processing_service:2000", ) - backend_id = response["id"] - backend = Backend.objects.get(pk=backend_id) - self.assertIn(self.project, backend.projects.all()) - - def test_backend_pipeline_registration(self): - # register a backend - response = self._create_backend( - name="ML Backend Test", slug="processing_service_test", endpoint_url="http://processing_service:2000" + processing_service_id = response["id"] + processing_service = ProcessingService.objects.get(pk=processing_service_id) + self.assertIn(self.project, processing_service.projects.all()) + + def test_processing_service_pipeline_registration(self): + # register a processing service + response = self._create_processing_service( + name="Processing Service Test", + slug="processing_service_test", + endpoint_url="http://processing_service:2000", ) - backend_id = response["id"] + processing_service_id = response["id"] - # sync the backend to create/add the associate pipelines - response = self._register_pipelines(backend_id) - backend = Backend.objects.get(pk=backend_id) - pipelines_queryset = backend.pipelines.all() + # sync the processing service to create/add the associate pipelines + response = self._register_pipelines(processing_service_id) + processing_service = ProcessingService.objects.get(pk=processing_service_id) + pipelines_queryset = processing_service.pipelines.all() self.assertEqual(pipelines_queryset.count(), len(response["pipelines"])) @@ -110,12 +120,12 @@ def setUp(self): self.project, self.deployment = setup_test_project() self.captures = create_captures_from_files(self.deployment, skip_existing=False) self.test_images = [image for image, frame in self.captures] - self.backend_instance = create_processing_services(self.project) - self.backend = self.backend_instance - self.pipeline = self.backend_instance.pipelines.all().filter(slug="constant").first() + self.processing_service_instance = create_processing_services(self.project) + self.processing_service = self.processing_service_instance + self.pipeline = self.processing_service_instance.pipelines.all().filter(slug="constant").first() def test_run_pipeline(self): - # Send images to ML backend to process and return detections + # Send images to Processing Service to process and return detections pipeline_response = self.pipeline.process_images(self.test_images, job_id=None) assert pipeline_response.detections @@ -263,7 +273,7 @@ def _test_skip_existing_per_batch_during_processing(self): # @TODO enable test when a pipeline is added to the CI environment in PR #576 pass - def test_unknown_algorithm_returned_by_backend(self): + def test_unknown_algorithm_returned_by_processing_service(self): fake_results = self.fake_pipeline_results(self.test_images, self.pipeline) new_detector_name = "Unknown Detector 5.1b-mobile" diff --git a/ami/ml/views.py b/ami/ml/views.py index 8eacd4a56..a47cc25b5 100644 --- a/ami/ml/views.py +++ b/ami/ml/views.py @@ -8,9 +8,9 @@ from ami.main.models import SourceImage from .models.algorithm import Algorithm -from .models.backend import Backend from .models.pipeline import Pipeline -from .serializers import AlgorithmSerializer, BackendSerializer, PipelineSerializer +from .models.processing_service import ProcessingService +from .serializers import AlgorithmSerializer, PipelineSerializer, ProcessingServiceSerializer logger = logging.getLogger(__name__) @@ -62,27 +62,27 @@ def test_process(self, request: Request, pk=None) -> Response: return Response(results.dict()) -class BackendViewSet(DefaultViewSet): +class ProcessingServiceViewSet(DefaultViewSet): """ - API endpoint that allows ML processing backends to be viewed or edited. + API endpoint that allows processing services to be viewed or edited. """ - queryset = Backend.objects.all() - serializer_class = BackendSerializer + queryset = ProcessingService.objects.all() + serializer_class = ProcessingServiceSerializer filterset_fields = ["projects"] ordering_fields = ["id", "created_at", "updated_at"] @action(detail=True, methods=["get"]) def status(self, request: Request, pk=None) -> Response: """ - Test the connection to the processing backend. + Test the connection to the processing service. """ - backend = Backend.objects.get(pk=pk) - response = backend.get_status() + processing_service = ProcessingService.objects.get(pk=pk) + response = processing_service.get_status() return Response(response.dict()) @action(detail=True, methods=["post"]) def register_pipelines(self, request: Request, pk=None) -> Response: - backend = Backend.objects.get(pk=pk) - response = backend.create_pipelines() + processing_service = ProcessingService.objects.get(pk=pk) + response = processing_service.create_pipelines() return Response(response.dict()) diff --git a/ami/tests/fixtures/main.py b/ami/tests/fixtures/main.py index b5ca0b841..e9eb40869 100644 --- a/ami/tests/fixtures/main.py +++ b/ami/tests/fixtures/main.py @@ -20,7 +20,7 @@ TaxonRank, group_images_into_events, ) -from ami.ml.models.backend import Backend +from ami.ml.models.processing_service import ProcessingService from ami.ml.tasks import create_detection_images from ami.tests.fixtures.storage import GeneratedTestFrame, create_storage_source, populate_bucket @@ -38,35 +38,35 @@ def update_site_settings(**kwargs): def create_processing_services(project): - backends_to_add = [ + processing_services_to_add = [ { "projects": [{"name": project.name}], "endpoint_url": "http://processing_service:2000", }, ] - for backend_data in backends_to_add: - backend, created = Backend.objects.get_or_create( - endpoint_url=backend_data["endpoint_url"], + for processing_service_data in processing_services_to_add: + processing_service, created = ProcessingService.objects.get_or_create( + endpoint_url=processing_service_data["endpoint_url"], ) if created: - logger.info(f'Successfully created backend with {backend_data["endpoint_url"]}.') + logger.info(f'Successfully created processing service with {processing_service_data["endpoint_url"]}.') else: - logger.info(f'Using existing backend with {backend_data["endpoint_url"]}.') + logger.info(f'Using existing processing service with {processing_service_data["endpoint_url"]}.') - for project_data in backend_data["projects"]: + for project_data in processing_service_data["projects"]: try: project = Project.objects.get(name=project_data["name"]) - backend.projects.add(project) + processing_service.projects.add(project) except Exception: logger.error(f'Could not find project {project_data["name"]}.') - backend.save() + processing_service.save() - backend.create_pipelines() + processing_service.create_pipelines() - return backend + return processing_service def setup_test_project(reuse=True) -> tuple[Project, Deployment]: diff --git a/config/api_router.py b/config/api_router.py index cadaafd3a..0d45dcb50 100644 --- a/config/api_router.py +++ b/config/api_router.py @@ -29,7 +29,7 @@ router.register(r"taxa", views.TaxonViewSet) router.register(r"ml/algorithms", ml_views.AlgorithmViewSet) router.register(r"ml/pipelines", ml_views.PipelineViewSet) -router.register(r"ml/backends", ml_views.BackendViewSet) +router.register(r"ml/processing_services", ml_views.ProcessingServiceViewSet) router.register(r"classifications", views.ClassificationViewSet) router.register(r"identifications", views.IdentificationViewSet) router.register(r"jobs", job_views.JobViewSet) diff --git a/ml_backends/docker-compose.yml b/processing_services/docker-compose.yml similarity index 100% rename from ml_backends/docker-compose.yml rename to processing_services/docker-compose.yml diff --git a/ml_backends/example/Dockerfile b/processing_services/example/Dockerfile similarity index 100% rename from ml_backends/example/Dockerfile rename to processing_services/example/Dockerfile diff --git a/ml_backends/example/api/__init__.py b/processing_services/example/api/__init__.py similarity index 100% rename from ml_backends/example/api/__init__.py rename to processing_services/example/api/__init__.py diff --git a/ml_backends/example/api/api.py b/processing_services/example/api/api.py similarity index 100% rename from ml_backends/example/api/api.py rename to processing_services/example/api/api.py diff --git a/ml_backends/example/api/pipeline.py b/processing_services/example/api/pipeline.py similarity index 100% rename from ml_backends/example/api/pipeline.py rename to processing_services/example/api/pipeline.py diff --git a/ml_backends/example/api/schemas.py b/processing_services/example/api/schemas.py similarity index 100% rename from ml_backends/example/api/schemas.py rename to processing_services/example/api/schemas.py diff --git a/ml_backends/example/api/test.py b/processing_services/example/api/test.py similarity index 100% rename from ml_backends/example/api/test.py rename to processing_services/example/api/test.py diff --git a/ml_backends/example/api/utils.py b/processing_services/example/api/utils.py similarity index 100% rename from ml_backends/example/api/utils.py rename to processing_services/example/api/utils.py diff --git a/ml_backends/example/main.py b/processing_services/example/main.py similarity index 100% rename from ml_backends/example/main.py rename to processing_services/example/main.py diff --git a/ml_backends/example/requirements.txt b/processing_services/example/requirements.txt similarity index 100% rename from ml_backends/example/requirements.txt rename to processing_services/example/requirements.txt diff --git a/ui/src/data-services/constants.ts b/ui/src/data-services/constants.ts index 5a2e08854..3a7a3f723 100644 --- a/ui/src/data-services/constants.ts +++ b/ui/src/data-services/constants.ts @@ -1,7 +1,7 @@ export const API_URL = '/api/v2' export const API_ROUTES = { - BACKENDS: 'ml/backends', + PROCESSING_SERVICES: 'ml/processing_services', ALGORITHM: 'ml/algorithms', CAPTURES: 'captures', COLLECTIONS: 'captures/collections', diff --git a/ui/src/data-services/hooks/backends/useBackendDetails.ts b/ui/src/data-services/hooks/backends/useBackendDetails.ts deleted file mode 100644 index cad432d47..000000000 --- a/ui/src/data-services/hooks/backends/useBackendDetails.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { API_ROUTES, API_URL } from 'data-services/constants' -import { Backend, ServerBackend } from 'data-services/models/backend' -import { useMemo } from 'react' -import { useAuthorizedQuery } from '../auth/useAuthorizedQuery' - -const convertServerRecord = (record: ServerBackend) => new Backend(record) - -export const useBackendDetails = ( - backendId: string -): { - backend?: Backend - isLoading: boolean - isFetching: boolean - error?: unknown -} => { - const { data, isLoading, isFetching, error } = useAuthorizedQuery({ - queryKey: [API_ROUTES.BACKENDS, backendId], - url: `${API_URL}/${API_ROUTES.BACKENDS}/${backendId}/`, - }) - - const backend = useMemo( - () => (data ? convertServerRecord(data) : undefined), - [data] - ) - - return { - backend, - isLoading, - isFetching, - error, - } -} diff --git a/ui/src/data-services/hooks/backends/usePopulateBackend.ts b/ui/src/data-services/hooks/processing-services/usePopulateProcessingService.ts similarity index 67% rename from ui/src/data-services/hooks/backends/usePopulateBackend.ts rename to ui/src/data-services/hooks/processing-services/usePopulateProcessingService.ts index 9dc67efaf..4e87b9278 100644 --- a/ui/src/data-services/hooks/backends/usePopulateBackend.ts +++ b/ui/src/data-services/hooks/processing-services/usePopulateProcessingService.ts @@ -4,23 +4,23 @@ import { API_ROUTES, API_URL } from 'data-services/constants' import { getAuthHeader } from 'data-services/utils' import { useUser } from 'utils/user/userContext' -export const usePopulateBackend = () => { +export const usePopulateProcessingService = () => { const { user } = useUser() const queryClient = useQueryClient() const { mutateAsync, isLoading, isSuccess, error } = useMutation({ mutationFn: (id: string) => axios.post<{ id: number }>( - `${API_URL}/${API_ROUTES.BACKENDS}/${id}/register_pipelines/`, + `${API_URL}/${API_ROUTES.PROCESSING_SERVICES}/${id}/register_pipelines/`, undefined, { headers: getAuthHeader(user), } ), onSuccess: () => { - queryClient.invalidateQueries([API_ROUTES.BACKENDS]) + queryClient.invalidateQueries([API_ROUTES.PROCESSING_SERVICES]) }, }) - return { populateBackend: mutateAsync, isLoading, isSuccess, error } + return { populateProcessingService: mutateAsync, isLoading, isSuccess, error } } diff --git a/ui/src/data-services/hooks/processing-services/useProcessingServiceDetails.ts b/ui/src/data-services/hooks/processing-services/useProcessingServiceDetails.ts new file mode 100644 index 000000000..66aee8ab8 --- /dev/null +++ b/ui/src/data-services/hooks/processing-services/useProcessingServiceDetails.ts @@ -0,0 +1,37 @@ +import { API_ROUTES, API_URL } from 'data-services/constants' +import { + ProcessingService, + ServerProcessingService, +} from 'data-services/models/processing-service' +import { useMemo } from 'react' +import { useAuthorizedQuery } from '../auth/useAuthorizedQuery' + +const convertServerRecord = (record: ServerProcessingService) => + new ProcessingService(record) + +export const useProcessingServiceDetails = ( + processingServiceId: string +): { + processingService?: ProcessingService + isLoading: boolean + isFetching: boolean + error?: unknown +} => { + const { data, isLoading, isFetching, error } = + useAuthorizedQuery({ + queryKey: [API_ROUTES.PROCESSING_SERVICES, processingServiceId], + url: `${API_URL}/${API_ROUTES.PROCESSING_SERVICES}/${processingServiceId}/`, + }) + + const processingService = useMemo( + () => (data ? convertServerRecord(data) : undefined), + [data] + ) + + return { + processingService: processingService, + isLoading, + isFetching, + error, + } +} diff --git a/ui/src/data-services/hooks/backends/useBackends.ts b/ui/src/data-services/hooks/processing-services/useProcessingServices.ts similarity index 64% rename from ui/src/data-services/hooks/backends/useBackends.ts rename to ui/src/data-services/hooks/processing-services/useProcessingServices.ts index 016259004..d8ee93ab2 100644 --- a/ui/src/data-services/hooks/backends/useBackends.ts +++ b/ui/src/data-services/hooks/processing-services/useProcessingServices.ts @@ -1,31 +1,38 @@ import { API_ROUTES } from 'data-services/constants' -import { Backend, ServerBackend } from 'data-services/models/backend' +import { + ProcessingService, + ServerProcessingService, +} from 'data-services/models/processing-service' import { FetchParams } from 'data-services/types' import { getFetchUrl } from 'data-services/utils' import { useMemo } from 'react' import { UserPermission } from 'utils/user/types' import { useAuthorizedQuery } from '../auth/useAuthorizedQuery' -const convertServerRecord = (record: ServerBackend) => new Backend(record) +const convertServerRecord = (record: ServerProcessingService) => + new ProcessingService(record) -export const useBackends = ( +export const useProcessingServices = ( params?: FetchParams ): { - items?: Backend[] + items?: ProcessingService[] total: number userPermissions?: UserPermission[] isLoading: boolean isFetching: boolean error?: unknown } => { - const fetchUrl = getFetchUrl({ collection: API_ROUTES.BACKENDS, params }) + const fetchUrl = getFetchUrl({ + collection: API_ROUTES.PROCESSING_SERVICES, + params, + }) const { data, isLoading, isFetching, error } = useAuthorizedQuery<{ - results: Backend[] + results: ProcessingService[] user_permissions?: UserPermission[] count: number }>({ - queryKey: [API_ROUTES.BACKENDS, params], + queryKey: [API_ROUTES.PROCESSING_SERVICES, params], url: fetchUrl, }) diff --git a/ui/src/data-services/hooks/backends/useTestBackendConnection.ts b/ui/src/data-services/hooks/processing-services/useTestProcessingServiceConnection.ts similarity index 79% rename from ui/src/data-services/hooks/backends/useTestBackendConnection.ts rename to ui/src/data-services/hooks/processing-services/useTestProcessingServiceConnection.ts index fcd5708d6..dd7b9861a 100644 --- a/ui/src/data-services/hooks/backends/useTestBackendConnection.ts +++ b/ui/src/data-services/hooks/processing-services/useTestProcessingServiceConnection.ts @@ -12,16 +12,16 @@ interface ResponseData { prefix_exists: boolean } -export const useTestBackendConnection = () => { +export const useTestProcessingServiceConnection = () => { const queryClient = useQueryClient() const { data, mutateAsync, isLoading, isSuccess, error } = useMutation({ mutationFn: (params: { id: string; subdir?: string; regex?: string }) => axios.get( - `${API_URL}/${API_ROUTES.BACKENDS}/${params.id}/status/` + `${API_URL}/${API_ROUTES.PROCESSING_SERVICES}/${params.id}/status/` ), onSuccess: () => { - queryClient.invalidateQueries([API_ROUTES.BACKENDS]) + queryClient.invalidateQueries([API_ROUTES.PROCESSING_SERVICES]) }, onError: (error: AxiosError) => error, }) @@ -33,7 +33,7 @@ export const useTestBackendConnection = () => { return { data: data?.data, - testBackendConnection: mutateAsync, + testProcessingServiceConnection: mutateAsync, isLoading, isSuccess, error, diff --git a/ui/src/data-services/models/backend.ts b/ui/src/data-services/models/backend.ts deleted file mode 100644 index d564d1940..000000000 --- a/ui/src/data-services/models/backend.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { getFormatedDateTimeString } from 'utils/date/getFormatedDateTimeString/getFormatedDateTimeString' -import { Pipeline, ServerPipeline } from './pipeline' -import { Entity } from './entity' - -export type ServerBackend = any // TODO: Update this type - -export class Backend extends Entity { - protected readonly _backend: ServerBackend - protected readonly _pipelines: Pipeline[] = [] - - public constructor(backend: ServerBackend) { - super(backend) - this._backend = backend - - if (backend.pipelines) { - this._pipelines = backend.pipelines.map( - (pipeline: ServerPipeline) => new Pipeline(pipeline) - ) - } - } - - get pipelines(): Pipeline[] { - return this._pipelines - } - - get createdAt(): string { - return getFormatedDateTimeString({ - date: new Date(this._backend.created_at), - }) - } - - get id(): string { - return `${this._backend.id}` - } - - get name(): string { - return `${this._backend.name}` - } - - get slug(): string { - return `${this._backend.slug}` - } - - get endpointUrl(): string { - return `${this._backend.endpoint_url}` - } - - get description(): string { - return `${this._backend.description}` - } - - get updatedAt(): string | undefined { - if (!this._backend.updated_at) { - return undefined - } - - return getFormatedDateTimeString({ - date: new Date(this._backend.updated_at), - }) - } - - get lastChecked(): string | undefined { - if (!this._backend.last_checked) { - return undefined - } - - return getFormatedDateTimeString({ - date: new Date(this._backend.last_checked), - }) - } -} diff --git a/ui/src/data-services/models/pipeline.ts b/ui/src/data-services/models/pipeline.ts index 19d992de8..aa5f62701 100644 --- a/ui/src/data-services/models/pipeline.ts +++ b/ui/src/data-services/models/pipeline.ts @@ -82,23 +82,25 @@ export class Pipeline { }) } - get backendsOnline(): string { - const backends = this._pipeline.backends + get processingServicesOnline(): string { + const processingServices = this._pipeline.processing_services let total_online = 0 - for (const backend of backends) { - if (backend.last_checked_live) { + for (const processingService of processingServices) { + if (processingService.last_checked_live) { total_online += 1 } } - return total_online + '/' + backends.length + return total_online + '/' + processingServices.length } - get backendsOnlineLastChecked(): string | undefined { - const backends = this._pipeline.backends + get processingServicesOnlineLastChecked(): string | undefined { + const processingServices = this._pipeline.processing_services const last_checked_times = [] - for (const backend of backends) { - last_checked_times.push(new Date(backend.last_checked).getTime()) + for (const processingService of processingServices) { + last_checked_times.push( + new Date(processingService.last_checked).getTime() + ) } return getFormatedDateTimeString({ diff --git a/ui/src/data-services/models/processing-service.ts b/ui/src/data-services/models/processing-service.ts new file mode 100644 index 000000000..a5b5e59ac --- /dev/null +++ b/ui/src/data-services/models/processing-service.ts @@ -0,0 +1,71 @@ +import { getFormatedDateTimeString } from 'utils/date/getFormatedDateTimeString/getFormatedDateTimeString' +import { Entity } from './entity' +import { Pipeline, ServerPipeline } from './pipeline' + +export type ServerProcessingService = any // TODO: Update this type + +export class ProcessingService extends Entity { + protected readonly _processingService: ServerProcessingService + protected readonly _pipelines: Pipeline[] = [] + + public constructor(processingService: ServerProcessingService) { + super(processingService) + this._processingService = processingService + + if (processingService.pipelines) { + this._pipelines = processingService.pipelines.map( + (pipeline: ServerPipeline) => new Pipeline(pipeline) + ) + } + } + + get pipelines(): Pipeline[] { + return this._pipelines + } + + get createdAt(): string { + return getFormatedDateTimeString({ + date: new Date(this._processingService.created_at), + }) + } + + get id(): string { + return `${this._processingService.id}` + } + + get name(): string { + return `${this._processingService.name}` + } + + get slug(): string { + return `${this._processingService.slug}` + } + + get endpointUrl(): string { + return `${this._processingService.endpoint_url}` + } + + get description(): string { + return `${this._processingService.description}` + } + + get updatedAt(): string | undefined { + if (!this._processingService.updated_at) { + return undefined + } + + return getFormatedDateTimeString({ + date: new Date(this._processingService.updated_at), + }) + } + + get lastChecked(): string | undefined { + if (!this._processingService.last_checked) { + return undefined + } + + return getFormatedDateTimeString({ + date: new Date(this._processingService.last_checked), + }) + } +} diff --git a/ui/src/pages/overview/backends/backends-actions.tsx b/ui/src/pages/overview/backends/backends-actions.tsx deleted file mode 100644 index e48837a3e..000000000 --- a/ui/src/pages/overview/backends/backends-actions.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { usePopulateBackend } from 'data-services/hooks/backends/usePopulateBackend' -import { Backend } from 'data-services/models/backend' -import { Button, ButtonTheme } from 'design-system/components/button/button' -import { useState } from 'react' -import { STRING, translate } from 'utils/language' - -export const PopulateBackend = ({ backend }: { backend: Backend }) => { - const [timestamp, setTimestamp] = useState() - const { populateBackend, isLoading } = usePopulateBackend() - - // TODO: It would be better to inspect task status here, but we currently don't have this information. - const isPopulating = isLoading || timestamp === backend.updatedAtDetailed - - return ( -
) diff --git a/ui/src/pages/backend-details/styles.module.scss b/ui/src/pages/processing-service-details/styles.module.scss similarity index 100% rename from ui/src/pages/backend-details/styles.module.scss rename to ui/src/pages/processing-service-details/styles.module.scss diff --git a/ui/src/utils/language.ts b/ui/src/utils/language.ts index e5dd66c94..9d91d67c3 100644 --- a/ui/src/utils/language.ts +++ b/ui/src/utils/language.ts @@ -45,7 +45,7 @@ export enum STRING { ENTITY_DELETE, ENTITY_DETAILS, ENTITY_EDIT, - ENTITY_TYPE_BACKEND, + ENTITY_TYPE_PROCESSING_SERVICE, ENTITY_TYPE_CAPTURE, ENTITY_TYPE_DEPLOYMENT, ENTITY_TYPE_IDENTIFICATION, @@ -167,7 +167,7 @@ export enum STRING { NAV_ITEM_TAXA, /* TAB_ITEM */ - TAB_ITEM_BACKENDS, + TAB_ITEM_PROCESSING_SERVICES, TAB_ITEM_COLLECTIONS, TAB_ITEM_DEVICES, TAB_ITEM_FIELDS, @@ -189,7 +189,7 @@ export enum STRING { DONE, /* TOOLTIPS */ - TOOLTIP_BACKEND, + TOOLTIP_PROCESSING_SERVICE, TOOLTIP_COLLECTION, TOOLTIP_DEPLOYMENT, TOOLTIP_DEVICE_TYPE, @@ -360,7 +360,7 @@ const ENGLISH_STRINGS: { [key in STRING]: string } = { [STRING.ENTITY_DELETE]: 'Delete {{type}}', [STRING.ENTITY_DETAILS]: '{{type}} details', [STRING.ENTITY_EDIT]: 'Edit {{type}}', - [STRING.ENTITY_TYPE_BACKEND]: 'backend', + [STRING.ENTITY_TYPE_PROCESSING_SERVICE]: 'processing service', [STRING.ENTITY_TYPE_CAPTURE]: 'capture', [STRING.ENTITY_TYPE_DEPLOYMENT]: 'station', [STRING.ENTITY_TYPE_IDENTIFICATION]: 'identification', @@ -422,7 +422,7 @@ const ENGLISH_STRINGS: { [key in STRING]: string } = { [STRING.NAV_ITEM_TAXA]: 'Taxa', /* TAB_ITEM */ - [STRING.TAB_ITEM_BACKENDS]: 'Backends', + [STRING.TAB_ITEM_PROCESSING_SERVICES]: 'Processing Services', [STRING.TAB_ITEM_COLLECTIONS]: 'Collections', [STRING.TAB_ITEM_DEVICES]: 'Device types', [STRING.TAB_ITEM_FIELDS]: 'Fields', @@ -444,8 +444,8 @@ const ENGLISH_STRINGS: { [key in STRING]: string } = { [STRING.DONE]: 'Done', /* TOOLTIPS */ - [STRING.TOOLTIP_BACKEND]: - 'A backend is a group of pipelines used for processing images/collections.', + [STRING.TOOLTIP_PROCESSING_SERVICE]: + 'A processing service is a group of pipelines used for processing images/collections.', [STRING.TOOLTIP_COLLECTION]: 'A collection is a group of source images. A collection contains all or some images in a project. When a processing job is registered, a collection is picked. This list defines the collection options available.', [STRING.TOOLTIP_DEPLOYMENT]: From 78c9dec480e9c055ff1bb0fd2249a833898033b9 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Sun, 12 Jan 2025 00:12:24 -0500 Subject: [PATCH 39/56] Fix ui formatting, fix tests, and add migrations --- ami/main/models.py | 2 +- .../0015_processingservice_delete_backend.py | 42 +++++++++++++++ ami/ml/models/processing_service.py | 4 +- ami/ml/tests.py | 10 ++-- ami/tests/fixtures/main.py | 53 ++++++++++--------- config/settings/base.py | 2 + .../entities/details-form/constants.ts | 2 +- .../processing-service-details-form.tsx | 2 +- .../processing-services-columns.tsx | 4 +- .../processing-services.tsx | 2 +- 10 files changed, 84 insertions(+), 39 deletions(-) create mode 100644 ami/ml/migrations/0015_processingservice_delete_backend.py diff --git a/ami/main/models.py b/ami/main/models.py index fce015aab..2e83890a6 100644 --- a/ami/main/models.py +++ b/ami/main/models.py @@ -1816,7 +1816,7 @@ class Detection(BaseModel): null=True, blank=True, ) - # Time that the detection was created by the algorithm in the ML backend + # Time that the detection was created by the algorithm in the processing service detection_time = models.DateTimeField(null=True, blank=True) # @TODO not sure if this detection score is ever used # I think it was intended to be the score of the detection algorithm (bbox score) diff --git a/ami/ml/migrations/0015_processingservice_delete_backend.py b/ami/ml/migrations/0015_processingservice_delete_backend.py new file mode 100644 index 000000000..c4c54d39c --- /dev/null +++ b/ami/ml/migrations/0015_processingservice_delete_backend.py @@ -0,0 +1,42 @@ +# Generated by Django 4.2.10 on 2025-01-11 22:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("main", "0038_alter_detection_path_alter_sourceimage_event_and_more"), + ("ml", "0014_remove_backend_version_remove_backend_version_name_and_more"), + ] + + operations = [ + migrations.CreateModel( + name="ProcessingService", + fields=[ + ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ("name", models.CharField(max_length=255)), + ("slug", models.SlugField(max_length=255, unique=True)), + ("description", models.TextField(blank=True)), + ("endpoint_url", models.CharField(max_length=1024)), + ("last_checked", models.DateTimeField(null=True)), + ("last_checked_live", models.BooleanField(null=True)), + ( + "pipelines", + models.ManyToManyField(blank=True, related_name="processing_services", to="ml.pipeline"), + ), + ( + "projects", + models.ManyToManyField(blank=True, related_name="processing_services", to="main.project"), + ), + ], + options={ + "verbose_name": "ProcessingService", + "verbose_name_plural": "ProcessingServices", + }, + ), + migrations.DeleteModel( + name="Backend", + ), + ] diff --git a/ami/ml/models/processing_service.py b/ami/ml/models/processing_service.py index aae7868db..58bd15e60 100644 --- a/ami/ml/models/processing_service.py +++ b/ami/ml/models/processing_service.py @@ -32,8 +32,8 @@ def __str__(self): return self.name class Meta: - verbose_name = "ProcessingService" - verbose_name_plural = "ProcessingServices" + verbose_name = "Processing Service" + verbose_name_plural = "Processing Services" def create_pipelines(self): # Call the status endpoint and get the pipelines/algorithms diff --git a/ami/ml/tests.py b/ami/ml/tests.py index fb0801f8d..ea5bbb0a8 100644 --- a/ami/ml/tests.py +++ b/ami/ml/tests.py @@ -15,7 +15,7 @@ PipelineResponse, SourceImageResponse, ) -from ami.tests.fixtures.main import create_captures_from_files, create_processing_services, setup_test_project +from ami.tests.fixtures.main import create_captures_from_files, create_processing_service, setup_test_project from ami.users.models import User @@ -34,7 +34,7 @@ def setUp(self): self.factory = APIRequestFactory() def _create_processing_service(self, name: str, slug: str, endpoint_url: str): - processing_services_create_url = reverse_with_params("api:processing-service-list") + processing_services_create_url = reverse_with_params("api:processingservice-list") self.client.force_authenticate(user=self.user) processing_service_data = { "project": self.project.pk, @@ -48,7 +48,7 @@ def _create_processing_service(self, name: str, slug: str, endpoint_url: str): return resp.json() def _get_processing_service_id_by_slug(self, slug: str) -> int: - processing_services_list_url = reverse_with_params("api:processing-service-list") + processing_services_list_url = reverse_with_params("api:processingservice-list") self.client.force_authenticate(user=self.user) resp = self.client.get(processing_services_list_url) self.client.force_authenticate(user=None) @@ -73,7 +73,7 @@ def _delete_processing_service(self, processing_service_id: int): def _register_pipelines(self, processing_service_id): processing_services_register_pipelines_url = reverse_with_params( - "api:processing-service-register-pipelines", args=[processing_service_id] + "api:processingservice-register-pipelines", args=[processing_service_id] ) self.client.force_authenticate(user=self.user) resp = self.client.post(processing_services_register_pipelines_url) @@ -120,7 +120,7 @@ def setUp(self): self.project, self.deployment = setup_test_project() self.captures = create_captures_from_files(self.deployment, skip_existing=False) self.test_images = [image for image, frame in self.captures] - self.processing_service_instance = create_processing_services(self.project) + self.processing_service_instance = create_processing_service(self.project) self.processing_service = self.processing_service_instance self.pipeline = self.processing_service_instance.pipelines.all().filter(slug="constant").first() diff --git a/ami/tests/fixtures/main.py b/ami/tests/fixtures/main.py index e9eb40869..fb70a7652 100644 --- a/ami/tests/fixtures/main.py +++ b/ami/tests/fixtures/main.py @@ -37,32 +37,33 @@ def update_site_settings(**kwargs): return site -def create_processing_services(project): - processing_services_to_add = [ - { - "projects": [{"name": project.name}], - "endpoint_url": "http://processing_service:2000", - }, - ] - - for processing_service_data in processing_services_to_add: - processing_service, created = ProcessingService.objects.get_or_create( - endpoint_url=processing_service_data["endpoint_url"], - ) - - if created: - logger.info(f'Successfully created processing service with {processing_service_data["endpoint_url"]}.') - else: - logger.info(f'Using existing processing service with {processing_service_data["endpoint_url"]}.') +def create_processing_service(project): + processing_service_to_add = { + "slug": "test_processing_service", + "name": "Test Processing Service", + "projects": [{"name": project.name}], + "endpoint_url": "http://processing_service:2000", + } + + processing_service, created = ProcessingService.objects.get_or_create( + name=processing_service_to_add["name"], + slug=processing_service_to_add["slug"], + endpoint_url=processing_service_to_add["endpoint_url"], + ) + processing_service.save() - for project_data in processing_service_data["projects"]: - try: - project = Project.objects.get(name=project_data["name"]) - processing_service.projects.add(project) - except Exception: - logger.error(f'Could not find project {project_data["name"]}.') + if created: + logger.info(f'Successfully created processing service with {processing_service_to_add["endpoint_url"]}.') + else: + logger.info(f'Using existing processing service with {processing_service_to_add["endpoint_url"]}.') - processing_service.save() + for project_data in processing_service_to_add["projects"]: + try: + project = Project.objects.get(name=project_data["name"]) + processing_service.projects.add(project) + processing_service.save() + except Exception: + logger.error(f'Could not find project {project_data["name"]}.') processing_service.create_pipelines() @@ -77,7 +78,7 @@ def setup_test_project(reuse=True) -> tuple[Project, Deployment]: deployment, _ = Deployment.objects.get_or_create( project=project, name="Test Deployment", defaults=dict(data_source=data_source) ) - create_processing_services(project) + create_processing_service(project) else: short_id = uuid.uuid4().hex[:8] project = Project.objects.create(name=f"Test Project {short_id}") @@ -85,7 +86,7 @@ def setup_test_project(reuse=True) -> tuple[Project, Deployment]: deployment = Deployment.objects.create( project=project, name=f"Test Deployment {short_id}", data_source=data_source ) - create_processing_services(project) + create_processing_service(project) return project, deployment diff --git a/config/settings/base.py b/config/settings/base.py index ba061c10d..7ca82cb22 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -369,6 +369,8 @@ # Your stuff... # ------------------------------------------------------------------------------ +DEFAULT_CONFIDENCE_THRESHOLD = env.float("DEFAULT_CONFIDENCE_THRESHOLD", default=0.6) # type: ignore[no-untyped-call] + S3_TEST_ENDPOINT = env("MINIO_ENDPOINT", default="http://minio:9000") # type: ignore[no-untyped-call] S3_TEST_KEY = env("MINIO_ROOT_USER", default=None) # type: ignore[no-untyped-call] S3_TEST_SECRET = env("MINIO_ROOT_PASSWORD", default=None) # type: ignore[no-untyped-call] diff --git a/ui/src/pages/overview/entities/details-form/constants.ts b/ui/src/pages/overview/entities/details-form/constants.ts index 0b7b7f428..3784bf761 100644 --- a/ui/src/pages/overview/entities/details-form/constants.ts +++ b/ui/src/pages/overview/entities/details-form/constants.ts @@ -8,5 +8,5 @@ export const customFormMap: { } = { storage: StorageDetailsForm, collection: CollectionDetailsForm, - processingService: ProcessingServiceDetailsForm, + service: ProcessingServiceDetailsForm, } diff --git a/ui/src/pages/overview/entities/details-form/processing-service-details-form.tsx b/ui/src/pages/overview/entities/details-form/processing-service-details-form.tsx index 3de9553cd..3252a6691 100644 --- a/ui/src/pages/overview/entities/details-form/processing-service-details-form.tsx +++ b/ui/src/pages/overview/entities/details-form/processing-service-details-form.tsx @@ -37,7 +37,7 @@ const config: FormConfig = { }, endpoint_url: { label: 'Endpoint URL', - description: 'Processing Service Endpoint', + description: 'Processing service endpoint.', rules: { required: true, }, diff --git a/ui/src/pages/overview/processing-services/processing-services-columns.tsx b/ui/src/pages/overview/processing-services/processing-services-columns.tsx index 836c92efd..614094e31 100644 --- a/ui/src/pages/overview/processing-services/processing-services-columns.tsx +++ b/ui/src/pages/overview/processing-services/processing-services-columns.tsx @@ -86,14 +86,14 @@ export const columns: ( )} {item.canDelete && ( )} diff --git a/ui/src/pages/overview/processing-services/processing-services.tsx b/ui/src/pages/overview/processing-services/processing-services.tsx index 7e8be30ce..e818bf694 100644 --- a/ui/src/pages/overview/processing-services/processing-services.tsx +++ b/ui/src/pages/overview/processing-services/processing-services.tsx @@ -46,7 +46,7 @@ export const ProcessingServices = () => { {canCreate && ( )} From abe6ea78dc6984869922db735918076f0e9d31e8 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Sun, 12 Jan 2025 00:17:41 -0500 Subject: [PATCH 40/56] Update comment to processing service --- ami/ml/models/processing_service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ami/ml/models/processing_service.py b/ami/ml/models/processing_service.py index 58bd15e60..d97e62afb 100644 --- a/ami/ml/models/processing_service.py +++ b/ami/ml/models/processing_service.py @@ -17,7 +17,7 @@ @typing.final class ProcessingService(BaseModel): - """An ML processing backend""" + """An ML processing service""" name = models.CharField(max_length=255) slug = models.SlugField(max_length=255, unique=True) From f130bee5f35f40f7a9dcfcae1289a01397679209 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Mon, 13 Jan 2025 19:42:43 -0500 Subject: [PATCH 41/56] Update process_images error handling --- ami/ml/models/pipeline.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/ami/ml/models/pipeline.py b/ami/ml/models/pipeline.py index 616926af7..0cd336240 100644 --- a/ami/ml/models/pipeline.py +++ b/ami/ml/models/pipeline.py @@ -446,7 +446,7 @@ def collect_images( skip_processed=skip_processed, ) - def choose_processing_service_for_pipeline(self, job_id): + def choose_processing_service_for_pipeline(self, job_id, pipeline_name): job = None if job_id: from ami.jobs.models import Job @@ -471,7 +471,7 @@ def choose_processing_service_for_pipeline(self, job_id): # if all offline then throw error if not processing_services_online: - msg = "No processing services are online." + msg = f'No processing services are online for the pipeline "{pipeline_name}".' if job: job.logger.error(msg) @@ -486,10 +486,7 @@ def choose_processing_service_for_pipeline(self, job_id): return processing_service_id_lowest_latency def process_images(self, images: typing.Iterable[SourceImage], job_id: int | None = None): - try: - processing_service_id = self.choose_processing_service_for_pipeline(job_id) - except Exception: - return + processing_service_id = self.choose_processing_service_for_pipeline(job_id, self.name) if not self.processing_services.filter(pk=processing_service_id).first().endpoint_url: raise ValueError("No endpoint URL configured for this pipeline") From f9ec5b815149b3dad3a4c1f08baf95e0f1ac9f9a Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Tue, 14 Jan 2025 22:09:23 -0500 Subject: [PATCH 42/56] Fix last_checked_live and processing services online --- ami/ml/models/processing_service.py | 38 ++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/ami/ml/models/processing_service.py b/ami/ml/models/processing_service.py index d97e62afb..a0fc81887 100644 --- a/ami/ml/models/processing_service.py +++ b/ami/ml/models/processing_service.py @@ -82,22 +82,36 @@ def create_pipelines(self): def get_status(self): info_url = urljoin(self.endpoint_url, "info") start_time = time.time() - - resp = requests.get(info_url) - if not resp.ok: - try: - msg = resp.json()["detail"] - except Exception: - msg = resp.content - - logger.error(msg) - + error = None timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") self.last_checked = timestamp - pipeline_configs = resp.json() if resp.ok else [] - error = f"{resp.status_code} - {msg}" if not resp.ok else None + try: + resp = requests.get(info_url) + resp.raise_for_status() + except requests.exceptions.RequestException as e: + self.last_checked_live = False + self.save() + print(self) + print(self.last_checked_live) + error = f"Error connecting to {info_url}: {e}" + logger.error(error) + + first_response_time = time.time() + latency = first_response_time - start_time + + return ProcessingServiceStatusResponse( + timestamp=timestamp, + request_successful=False, + server_live=False, + pipelines_online=[], + pipeline_configs=[], + endpoint_url=self.endpoint_url, + error=error, + latency=latency, + ) + pipeline_configs = resp.json() server_live = requests.get(urljoin(self.endpoint_url, "livez")).json().get("status") pipelines_online = requests.get(urljoin(self.endpoint_url, "readyz")).json().get("status") self.last_checked_live = server_live From 56a27736b9d0e5974170cd7270dc4478a1d24739 Mon Sep 17 00:00:00 2001 From: Vanessa Mac Date: Tue, 14 Jan 2025 22:16:18 -0500 Subject: [PATCH 43/56] Change Sync to Add Pipelines --- .../processing-services/processing-services-actions.tsx | 2 +- ui/src/utils/language.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ui/src/pages/overview/processing-services/processing-services-actions.tsx b/ui/src/pages/overview/processing-services/processing-services-actions.tsx index 1707781c8..1075dcc0c 100644 --- a/ui/src/pages/overview/processing-services/processing-services-actions.tsx +++ b/ui/src/pages/overview/processing-services/processing-services-actions.tsx @@ -19,7 +19,7 @@ export const PopulateProcessingService = ({ return (