From 36015895f14c8569e3a3989fcf5744a9b5bd4845 Mon Sep 17 00:00:00 2001 From: Srivatsan Balakrishnan <47609622+srbalakr@users.noreply.github.com> Date: Wed, 13 Dec 2023 12:57:56 -0800 Subject: [PATCH] Integrate GPT4-vision support (#1056) * Squash commit# This is a combination of 3 commits. add new files s remove * s * s * Add one more conditional to Bicep, and fix the mocks to use vector_queries --------- Co-authored-by: Pamela Fox --- .github/workflows/python-test.yaml | 2 +- .gitignore | 2 +- README.md | 4 + app/backend/app.py | 108 +- app/backend/approaches/approach.py | 189 +- app/backend/approaches/chatapproach.py | 203 + .../approaches/chatreadretrieveread.py | 269 +- .../approaches/chatreadretrievereadvision.py | 200 + app/backend/approaches/retrievethenread.py | 91 +- .../approaches/retrievethenreadvision.py | 162 + app/backend/core/imageshelper.py | 36 + app/backend/core/messagebuilder.py | 28 +- app/backend/core/modelhelper.py | 17 +- app/backend/requirements.in | 3 +- app/backend/requirements.txt | 21 +- app/frontend/package-lock.json | 3922 +++++++---------- app/frontend/package.json | 28 +- app/frontend/src/api/api.ts | 11 +- app/frontend/src/api/models.ts | 27 +- .../AnalysisPanel/AnalysisPanel.module.css | 56 + .../AnalysisPanel/AnalysisPanel.tsx | 17 +- .../AnalysisPanel/ThoughtProcess.tsx | 41 + app/frontend/src/components/Answer/Answer.tsx | 2 +- .../src/components/Example/Example.module.css | 2 +- .../src/components/Example/ExampleList.tsx | 27 +- .../GPT4VSettings/GPT4VSettings.module.css | 3 + .../GPT4VSettings/GPT4VSettings.tsx | 57 + .../src/components/GPT4VSettings/index.ts | 1 + .../QuestionInput/QuestionInput.tsx | 9 +- .../SupportingContent.module.css | 4 + .../SupportingContent/SupportingContent.tsx | 33 +- .../SupportingContentParser.ts | 4 +- .../VectorSettings/VectorSettings.module.css | 3 + .../VectorSettings/VectorSettings.tsx | 79 + .../src/components/VectorSettings/index.ts | 1 + app/frontend/src/pages/chat/Chat.tsx | 74 +- app/frontend/src/pages/oneshot/OneShot.tsx | 65 +- app/frontend/vite.config.ts | 3 +- .../Financial Market Analysis Report 2023.pdf | Bin 0 -> 206953 bytes docs/gpt4v.md | 47 + docs/gpt4v.png | Bin 0 -> 309487 bytes infra/abbreviations.json | 1 + infra/core/security/keyvault-access.bicep | 22 + infra/core/security/keyvault-secret.bicep | 31 + infra/core/security/keyvault.bicep | 26 + infra/main.bicep | 165 +- infra/main.parameters.json | 3 + infra/secrets.bicep | 13 + scripts/prepdocs.ps1 | 26 +- scripts/prepdocs.py | 62 +- scripts/prepdocs.sh | 25 + scripts/prepdocslib/blobmanager.py | 96 +- scripts/prepdocslib/embeddings.py | 50 +- scripts/prepdocslib/filestrategy.py | 21 +- scripts/prepdocslib/searchmanager.py | 27 +- scripts/prepdocslib/textsplitter.py | 8 +- scripts/requirements.in | 4 + scripts/requirements.txt | 20 +- tests/__init__.py | 0 tests/conftest.py | 129 +- tests/e2e.py | 80 +- tests/mocks.py | 174 + .../test_ask_rtr_hybrid/client0/result.json | 52 +- .../test_ask_rtr_hybrid/client1/result.json | 52 +- .../test_ask_rtr_text/client0/result.json | 52 +- .../test_ask_rtr_text/client1/result.json | 52 +- .../auth_client0/result.json | 50 +- .../client0/result.json | 52 +- .../client1/result.json | 52 +- .../client0/result.json | 52 +- .../client1/result.json | 52 +- .../test_ask_vision/client0/result.json | 71 + .../test_ask_vision/client0/result.jsonlines | 1 + .../test_ask_vision/client1/result.json | 73 + .../test_ask_vision/client1/result.jsonlines | 1 + .../test_chat_followup/client0/result.json | 56 +- .../test_chat_followup/client1/result.json | 56 +- .../test_chat_hybrid/client0/result.json | 56 +- .../test_chat_hybrid/client1/result.json | 56 +- .../client0/result.json | 56 +- .../client1/result.json | 56 +- .../client0/result.json | 56 +- .../client1/result.json | 56 +- .../client0/result.json | 56 +- .../client1/result.json | 56 +- .../client0/result.jsonlines | 2 +- .../client1/result.jsonlines | 2 +- .../client0/result.jsonlines | 2 +- .../client1/result.jsonlines | 2 +- .../client0/result.jsonlines | 2 +- .../client1/result.jsonlines | 2 +- .../auth_client0/result.jsonlines | 2 +- .../test_chat_text/client0/result.json | 56 +- .../test_chat_text/client1/result.json | 56 +- .../auth_client0/result.json | 54 +- .../client0/result.json | 56 +- .../client1/result.json | 56 +- .../client0/result.json | 56 +- .../client1/result.json | 56 +- .../test_chat_vector/client0/result.json | 56 +- .../test_chat_vector/client1/result.json | 56 +- .../test_chat_vision/client0/result.json | 69 + .../test_chat_vision/client0/result.jsonlines | 3 + .../test_chat_vision/client1/result.json | 78 + .../test_chat_vision/client1/result.jsonlines | 3 + .../client0/result.json | 75 + .../client0/result.jsonlines | 3 + .../client1/result.json | 78 + .../client1/result.jsonlines | 3 + .../client0/result.json | 58 +- .../client1/result.json | 58 +- .../client0/result.json | 56 +- .../client1/result.json | 56 +- tests/test_adlsgen2setup.py | 2 +- tests/test_app.py | 99 +- tests/test_blob_manager.py | 8 +- tests/test_chatvisionapproach.py | 67 + tests/test_content_file.py | 8 +- tests/test_listfilestrategy.py | 2 +- tests/test_manageacl.py | 2 +- tests/test_prepdocs.py | 2 +- 121 files changed, 6165 insertions(+), 3087 deletions(-) create mode 100644 app/backend/approaches/chatapproach.py create mode 100644 app/backend/approaches/chatreadretrievereadvision.py create mode 100644 app/backend/approaches/retrievethenreadvision.py create mode 100644 app/backend/core/imageshelper.py create mode 100644 app/frontend/src/components/AnalysisPanel/ThoughtProcess.tsx create mode 100644 app/frontend/src/components/GPT4VSettings/GPT4VSettings.module.css create mode 100644 app/frontend/src/components/GPT4VSettings/GPT4VSettings.tsx create mode 100644 app/frontend/src/components/GPT4VSettings/index.ts create mode 100644 app/frontend/src/components/VectorSettings/VectorSettings.module.css create mode 100644 app/frontend/src/components/VectorSettings/VectorSettings.tsx create mode 100644 app/frontend/src/components/VectorSettings/index.ts create mode 100644 data/GPT4V_Examples/Financial Market Analysis Report 2023.pdf create mode 100644 docs/gpt4v.md create mode 100644 docs/gpt4v.png create mode 100644 infra/core/security/keyvault-access.bicep create mode 100644 infra/core/security/keyvault-secret.bicep create mode 100644 infra/core/security/keyvault.bicep create mode 100644 infra/secrets.bicep create mode 100644 tests/__init__.py create mode 100644 tests/mocks.py create mode 100644 tests/snapshots/test_app/test_ask_vision/client0/result.json create mode 100644 tests/snapshots/test_app/test_ask_vision/client0/result.jsonlines create mode 100644 tests/snapshots/test_app/test_ask_vision/client1/result.json create mode 100644 tests/snapshots/test_app/test_ask_vision/client1/result.jsonlines create mode 100644 tests/snapshots/test_app/test_chat_vision/client0/result.json create mode 100644 tests/snapshots/test_app/test_chat_vision/client0/result.jsonlines create mode 100644 tests/snapshots/test_app/test_chat_vision/client1/result.json create mode 100644 tests/snapshots/test_app/test_chat_vision/client1/result.jsonlines create mode 100644 tests/snapshots/test_app/test_chat_vision_vectors/client0/result.json create mode 100644 tests/snapshots/test_app/test_chat_vision_vectors/client0/result.jsonlines create mode 100644 tests/snapshots/test_app/test_chat_vision_vectors/client1/result.json create mode 100644 tests/snapshots/test_app/test_chat_vision_vectors/client1/result.jsonlines create mode 100644 tests/test_chatvisionapproach.py diff --git a/.github/workflows/python-test.yaml b/.github/workflows/python-test.yaml index 13f3fa648a..eaadda1b68 100644 --- a/.github/workflows/python-test.yaml +++ b/.github/workflows/python-test.yaml @@ -48,7 +48,7 @@ jobs: run: black . --check --verbose - name: Run Python tests if: runner.os != 'Windows' - run: python3 -m pytest -s -vv --cov --cov-fail-under=87 + run: python3 -m pytest -s -vv --cov --cov-fail-under=86 - name: Run E2E tests with Playwright id: e2e if: runner.os != 'Windows' diff --git a/.gitignore b/.gitignore index 818ff1af9c..85fcae5ef7 100644 --- a/.gitignore +++ b/.gitignore @@ -146,4 +146,4 @@ npm-debug.log* node_modules static/ -data/*.md5 \ No newline at end of file +data/**/*.md5 \ No newline at end of file diff --git a/README.md b/README.md index 72acbddeef..686f3388fd 100644 --- a/README.md +++ b/README.md @@ -241,6 +241,10 @@ either you or they can follow these steps: ## Enabling optional features +### Enabling GPT-4 Turbo with Vision + +This section covers the integration of GPT-4 Vision with Azure AI Search. Learn how to enhance your search capabilities with the power of image and text indexing, enabling advanced search functionalities over diverse document types. For a detailed guide on setup and usage, visit our [Enabling GPT-4 Turbo with Vision](docs/gpt4v.md) page. + ### Enabling authentication By default, the deployed Azure web app will have no authentication or access restrictions enabled, meaning anyone with routable network access to the web app can chat with your indexed data. You can require authentication to your Azure Active Directory by following the [Add app authentication](https://learn.microsoft.com/azure/app-service/scenario-secure-app-authentication-app-service) tutorial and set it up against the deployed web app. diff --git a/app/backend/app.py b/app/backend/app.py index ab28ce4fad..a3ed9b5fa8 100644 --- a/app/backend/app.py +++ b/app/backend/app.py @@ -1,13 +1,15 @@ +import dataclasses import io import json import logging import mimetypes import os from pathlib import Path -from typing import AsyncGenerator +from typing import AsyncGenerator, cast from azure.core.exceptions import ResourceNotFoundError from azure.identity.aio import DefaultAzureCredential, get_bearer_token_provider +from azure.keyvault.secrets.aio import SecretClient from azure.monitor.opentelemetry import configure_azure_monitor from azure.search.documents.aio import SearchClient from azure.storage.blob.aio import BlobServiceClient @@ -28,14 +30,22 @@ ) from quart_cors import cors +from approaches.approach import Approach from approaches.chatreadretrieveread import ChatReadRetrieveReadApproach +from approaches.chatreadretrievereadvision import ChatReadRetrieveReadVisionApproach from approaches.retrievethenread import RetrieveThenReadApproach +from approaches.retrievethenreadvision import RetrieveThenReadVisionApproach from core.authentication import AuthenticationHelper +CONFIG_OPENAI_TOKEN = "openai_token" +CONFIG_CREDENTIAL = "azure_credential" CONFIG_ASK_APPROACH = "ask_approach" +CONFIG_ASK_VISION_APPROACH = "ask_vision_approach" +CONFIG_CHAT_VISION_APPROACH = "chat_vision_approach" CONFIG_CHAT_APPROACH = "chat_approach" CONFIG_BLOB_CONTAINER_CLIENT = "blob_container_client" CONFIG_AUTH_CLIENT = "auth_client" +CONFIG_GPT4V_DEPLOYED = "gpt4v_deployed" CONFIG_SEARCH_CLIENT = "search_client" CONFIG_OPENAI_CLIENT = "openai_client" ERROR_MESSAGE = """The app encountered an error processing your request. @@ -121,7 +131,12 @@ async def ask(): auth_helper = current_app.config[CONFIG_AUTH_CLIENT] context["auth_claims"] = await auth_helper.get_auth_claims_if_enabled(request.headers) try: - approach = current_app.config[CONFIG_ASK_APPROACH] + use_gpt4v = context.get("overrides", {}).get("use_gpt4v", False) + approach: Approach + if use_gpt4v and CONFIG_ASK_VISION_APPROACH in current_app.config: + approach = cast(Approach, current_app.config[CONFIG_ASK_VISION_APPROACH]) + else: + approach = cast(Approach, current_app.config[CONFIG_ASK_APPROACH]) r = await approach.run( request_json["messages"], context=context, session_state=request_json.get("session_state") ) @@ -130,13 +145,20 @@ async def ask(): return error_response(error, "/ask") +class JSONEncoder(json.JSONEncoder): + def default(self, o): + if dataclasses.is_dataclass(o): + return dataclasses.asdict(o) + return super().default(o) + + async def format_as_ndjson(r: AsyncGenerator[dict, None]) -> AsyncGenerator[str, None]: try: async for event in r: - yield json.dumps(event, ensure_ascii=False) + "\n" - except Exception as e: - logging.exception("Exception while generating response stream: %s", e) - yield json.dumps(error_dict(e)) + yield json.dumps(event, ensure_ascii=False, cls=JSONEncoder) + "\n" + except Exception as error: + logging.exception("Exception while generating response stream: %s", error) + yield json.dumps(error_dict(error)) @bp.route("/chat", methods=["POST"]) @@ -147,8 +169,15 @@ async def chat(): context = request_json.get("context", {}) auth_helper = current_app.config[CONFIG_AUTH_CLIENT] context["auth_claims"] = await auth_helper.get_auth_claims_if_enabled(request.headers) + try: - approach = current_app.config[CONFIG_CHAT_APPROACH] + use_gpt4v = context.get("overrides", {}).get("use_gpt4v", False) + approach: Approach + if use_gpt4v and CONFIG_CHAT_VISION_APPROACH in current_app.config: + approach = cast(Approach, current_app.config[CONFIG_CHAT_VISION_APPROACH]) + else: + approach = cast(Approach, current_app.config[CONFIG_CHAT_APPROACH]) + result = await approach.run( request_json["messages"], stream=request_json.get("stream", False), @@ -173,6 +202,11 @@ def auth_setup(): return jsonify(auth_helper.get_auth_setup_for_client()) +@bp.route("/config", methods=["GET"]) +def config(): + return jsonify({"showGPT4VOptions": current_app.config[CONFIG_GPT4V_DEPLOYED]}) + + @bp.before_app_serving async def setup_clients(): # Replace these with your own values, either in environment variables or directly here @@ -180,14 +214,19 @@ async def setup_clients(): AZURE_STORAGE_CONTAINER = os.environ["AZURE_STORAGE_CONTAINER"] AZURE_SEARCH_SERVICE = os.environ["AZURE_SEARCH_SERVICE"] AZURE_SEARCH_INDEX = os.environ["AZURE_SEARCH_INDEX"] + VISION_SECRET_NAME = os.getenv("VISION_SECRET_NAME") + AZURE_KEY_VAULT_NAME = os.getenv("AZURE_KEY_VAULT_NAME") # Shared by all OpenAI deployments OPENAI_HOST = os.getenv("OPENAI_HOST", "azure") OPENAI_CHATGPT_MODEL = os.environ["AZURE_OPENAI_CHATGPT_MODEL"] OPENAI_EMB_MODEL = os.getenv("AZURE_OPENAI_EMB_MODEL_NAME", "text-embedding-ada-002") # Used with Azure OpenAI deployments AZURE_OPENAI_SERVICE = os.getenv("AZURE_OPENAI_SERVICE") + AZURE_OPENAI_GPT4V_DEPLOYMENT = os.environ.get("AZURE_OPENAI_GPT4V_DEPLOYMENT") + AZURE_OPENAI_GPT4V_MODEL = os.environ.get("AZURE_OPENAI_GPT4V_MODEL") AZURE_OPENAI_CHATGPT_DEPLOYMENT = os.getenv("AZURE_OPENAI_CHATGPT_DEPLOYMENT") if OPENAI_HOST == "azure" else None AZURE_OPENAI_EMB_DEPLOYMENT = os.getenv("AZURE_OPENAI_EMB_DEPLOYMENT") if OPENAI_HOST == "azure" else None + AZURE_VISION_ENDPOINT = os.getenv("AZURE_VISION_ENDPOINT", "") # Used only with non-Azure OpenAI deployments OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") OPENAI_ORGANIZATION = os.getenv("OPENAI_ORGANIZATION") @@ -204,6 +243,8 @@ async def setup_clients(): AZURE_SEARCH_QUERY_LANGUAGE = os.getenv("AZURE_SEARCH_QUERY_LANGUAGE", "en-us") AZURE_SEARCH_QUERY_SPELLER = os.getenv("AZURE_SEARCH_QUERY_SPELLER", "lexicon") + USE_GPT4V = os.getenv("USE_GPT4V", "").lower() == "true" + # Use the current user identity to authenticate with Azure OpenAI, AI Search and Blob Storage (no secrets needed, # just use 'az login' locally, and managed identity when deployed on Azure). If you need to use keys, use separate AzureKeyCredential instances with the # keys for each service @@ -231,6 +272,15 @@ async def setup_clients(): ) blob_container_client = blob_client.get_container_client(AZURE_STORAGE_CONTAINER) + vision_key = None + if VISION_SECRET_NAME and AZURE_KEY_VAULT_NAME: # Cognitive vision keys are stored in keyvault + key_vault_client = SecretClient( + vault_url=f"https://{AZURE_KEY_VAULT_NAME}.vault.azure.net", credential=azure_credential + ) + vision_secret = await key_vault_client.get_secret(VISION_SECRET_NAME) + vision_key = vision_secret.value + await key_vault_client.close() + # Used by the OpenAI SDK openai_client: AsyncOpenAI @@ -253,6 +303,8 @@ async def setup_clients(): current_app.config[CONFIG_BLOB_CONTAINER_CLIENT] = blob_container_client current_app.config[CONFIG_AUTH_CLIENT] = auth_helper + current_app.config[CONFIG_GPT4V_DEPLOYED] = bool(USE_GPT4V) + # Various approaches to integrate GPT and external knowledge, most applications will use a single one of these patterns # or some derivative, here we include several for exploration purposes current_app.config[CONFIG_ASK_APPROACH] = RetrieveThenReadApproach( @@ -268,6 +320,42 @@ async def setup_clients(): query_speller=AZURE_SEARCH_QUERY_SPELLER, ) + if AZURE_OPENAI_GPT4V_MODEL: + if vision_key is None: + raise ValueError("Vision key must be set (in Key Vault) to use the vision approach.") + + current_app.config[CONFIG_ASK_VISION_APPROACH] = RetrieveThenReadVisionApproach( + search_client=search_client, + openai_client=openai_client, + blob_container_client=blob_container_client, + vision_endpoint=AZURE_VISION_ENDPOINT, + vision_key=vision_key, + gpt4v_deployment=AZURE_OPENAI_GPT4V_DEPLOYMENT, + gpt4v_model=AZURE_OPENAI_GPT4V_MODEL, + embedding_model=OPENAI_EMB_MODEL, + embedding_deployment=AZURE_OPENAI_EMB_DEPLOYMENT, + sourcepage_field=KB_FIELDS_SOURCEPAGE, + content_field=KB_FIELDS_CONTENT, + query_language=AZURE_SEARCH_QUERY_LANGUAGE, + query_speller=AZURE_SEARCH_QUERY_SPELLER, + ) + + current_app.config[CONFIG_CHAT_VISION_APPROACH] = ChatReadRetrieveReadVisionApproach( + search_client=search_client, + openai_client=openai_client, + blob_container_client=blob_container_client, + vision_endpoint=AZURE_VISION_ENDPOINT, + vision_key=vision_key, + gpt4v_deployment=AZURE_OPENAI_GPT4V_DEPLOYMENT, + gpt4v_model=AZURE_OPENAI_GPT4V_MODEL, + embedding_model=OPENAI_EMB_MODEL, + embedding_deployment=AZURE_OPENAI_EMB_DEPLOYMENT, + sourcepage_field=KB_FIELDS_SOURCEPAGE, + content_field=KB_FIELDS_CONTENT, + query_language=AZURE_SEARCH_QUERY_LANGUAGE, + query_speller=AZURE_SEARCH_QUERY_SPELLER, + ) + current_app.config[CONFIG_CHAT_APPROACH] = ChatReadRetrieveReadApproach( search_client=search_client, openai_client=openai_client, @@ -282,6 +370,12 @@ async def setup_clients(): ) +@bp.after_app_serving +async def close_clients(): + await current_app.config[CONFIG_SEARCH_CLIENT].close() + await current_app.config[CONFIG_BLOB_CONTAINER_CLIENT].close() + + def create_app(): app = Quart(__name__) app.register_blueprint(bp) diff --git a/app/backend/approaches/approach.py b/app/backend/approaches/approach.py index 32ae7d0143..f7951073e7 100644 --- a/app/backend/approaches/approach.py +++ b/app/backend/approaches/approach.py @@ -1,10 +1,96 @@ -from abc import ABC -from typing import Any, AsyncGenerator, Optional, Union +import os +from dataclasses import dataclass +from typing import Any, AsyncGenerator, List, Optional, Union, cast + +import aiohttp +from azure.search.documents.aio import SearchClient +from azure.search.documents.models import ( + CaptionResult, + QueryType, + RawVectorQuery, + VectorQuery, +) +from openai import AsyncOpenAI from core.authentication import AuthenticationHelper +from text import nonewlines + + +@dataclass +class Document: + id: Optional[str] + content: Optional[str] + embedding: Optional[List[float]] + image_embedding: Optional[List[float]] + category: Optional[str] + sourcepage: Optional[str] + sourcefile: Optional[str] + oids: Optional[List[str]] + groups: Optional[List[str]] + captions: List[CaptionResult] + + def serialize_for_results(self) -> dict[str, Any]: + return { + "id": self.id, + "content": self.content, + "embedding": Document.trim_embedding(self.embedding), + "imageEmbedding": Document.trim_embedding(self.image_embedding), + "category": self.category, + "sourcepage": self.sourcepage, + "sourcefile": self.sourcefile, + "oids": self.oids, + "groups": self.groups, + "captions": [ + { + "additional_properties": caption.additional_properties, + "text": caption.text, + "highlights": caption.highlights, + } + for caption in self.captions + ] + if self.captions + else [], + } + + @classmethod + def trim_embedding(cls, embedding: Optional[List[float]]) -> Optional[str]: + """Returns a trimmed list of floats from the vector embedding.""" + if embedding: + if len(embedding) > 2: + # Format the embedding list to show the first 2 items followed by the count of the remaining items.""" + return f"[{embedding[0]}, {embedding[1]} ...+{len(embedding) - 2} more]" + else: + return str(embedding) + + return None + + +@dataclass +class ThoughtStep: + title: str + description: Optional[Any] + props: Optional[dict[str, Any]] = None + +class Approach: + def __init__( + self, + search_client: SearchClient, + openai_client: AsyncOpenAI, + query_language: Optional[str], + query_speller: Optional[str], + embedding_deployment: Optional[str], # Not needed for non-Azure OpenAI or for retrieval_mode="text" + embedding_model: str, + openai_host: str, + ): + self.search_client = search_client + self.openai_client = openai_client + self.query_language = query_language + self.query_speller = query_speller + self.embedding_deployment = embedding_deployment + self.embedding_model = embedding_model + self.openai_host = openai_host -class Approach(ABC): def build_filter(self, overrides: dict[str, Any], auth_claims: dict[str, Any]) -> Optional[str]: exclude_category = overrides.get("exclude_category") or None security_filter = AuthenticationHelper.build_security_filters(overrides, auth_claims) @@ -15,6 +101,103 @@ def build_filter(self, overrides: dict[str, Any], auth_claims: dict[str, Any]) - filters.append(security_filter) return None if len(filters) == 0 else " and ".join(filters) + async def search( + self, + top: int, + query_text: Optional[str], + filter: Optional[str], + vectors: List[VectorQuery], + use_semantic_ranker: bool, + use_semantic_captions: bool, + ) -> List[Document]: + # Use semantic ranker if requested and if retrieval mode is text or hybrid (vectors + text) + if use_semantic_ranker and query_text: + results = await self.search_client.search( + search_text=query_text, + filter=filter, + query_type=QueryType.SEMANTIC, + query_language=self.query_language, + query_speller=self.query_speller, + semantic_configuration_name="default", + top=top, + query_caption="extractive|highlight-false" if use_semantic_captions else None, + vector_queries=vectors, + ) + else: + results = await self.search_client.search( + search_text=query_text or "", filter=filter, top=top, vector_queries=vectors + ) + + documents = [] + async for page in results.by_page(): + async for document in page: + documents.append( + Document( + id=document.get("id"), + content=document.get("content"), + embedding=document.get("embedding"), + image_embedding=document.get("imageEmbedding"), + category=document.get("category"), + sourcepage=document.get("sourcepage"), + sourcefile=document.get("sourcefile"), + oids=document.get("oids"), + groups=document.get("groups"), + captions=cast(List[CaptionResult], document.get("@search.captions")), + ) + ) + return documents + + def get_sources_content( + self, results: List[Document], use_semantic_captions: bool, use_image_citation: bool + ) -> list[str]: + if use_semantic_captions: + return [ + (self.get_citation((doc.sourcepage or ""), use_image_citation)) + + ": " + + nonewlines(" . ".join([cast(str, c.text) for c in (doc.captions or [])])) + for doc in results + ] + else: + return [ + (self.get_citation((doc.sourcepage or ""), use_image_citation)) + ": " + nonewlines(doc.content or "") + for doc in results + ] + + def get_citation(self, sourcepage: str, use_image_citation: bool) -> str: + if use_image_citation: + return sourcepage + else: + path, ext = os.path.splitext(sourcepage) + if ext.lower() == ".png": + page_idx = path.rfind("-") + page_number = int(path[page_idx + 1 :]) + return f"{path[:page_idx]}.pdf#page={page_number}" + + return sourcepage + + async def compute_text_embedding(self, q: str): + embedding = await self.openai_client.embeddings.create( + # Azure Open AI takes the deployment name as the model name + model=self.embedding_deployment if self.embedding_deployment else self.embedding_model, + input=q, + ) + query_vector = embedding.data[0].embedding + return RawVectorQuery(vector=query_vector, k=50, fields="embedding") + + async def compute_image_embedding(self, q: str, vision_endpoint: str, vision_key: str): + endpoint = f"{vision_endpoint}computervision/retrieval:vectorizeText" + params = {"api-version": "2023-02-01-preview", "modelVersion": "latest"} + headers = {"Content-Type": "application/json", "Ocp-Apim-Subscription-Key": vision_key} + data = {"text": q} + + async with aiohttp.ClientSession() as session: + async with session.post( + url=endpoint, params=params, headers=headers, json=data, raise_for_status=True + ) as response: + json = await response.json() + image_query_vector = json["vector"] + return RawVectorQuery(vector=image_query_vector, k=50, fields="imageEmbedding") + async def run( self, messages: list[dict], stream: bool = False, session_state: Any = None, context: dict[str, Any] = {} ) -> Union[dict[str, Any], AsyncGenerator[dict[str, Any], None]]: diff --git a/app/backend/approaches/chatapproach.py b/app/backend/approaches/chatapproach.py new file mode 100644 index 0000000000..0a0ccb56f9 --- /dev/null +++ b/app/backend/approaches/chatapproach.py @@ -0,0 +1,203 @@ +import json +import logging +import re +from abc import ABC, abstractmethod +from typing import Any, AsyncGenerator, Optional, Union + +from openai.types.chat import ( + ChatCompletion, + ChatCompletionContentPartParam, + ChatCompletionMessageParam, +) + +from approaches.approach import Approach +from core.messagebuilder import MessageBuilder + + +class ChatApproach(Approach, ABC): + # Chat roles + SYSTEM = "system" + USER = "user" + ASSISTANT = "assistant" + + query_prompt_few_shots = [ + {"role": USER, "content": "How did crypto do last year?"}, + {"role": ASSISTANT, "content": "Summarize Cryptocurrency Market Dynamics from last year"}, + {"role": USER, "content": "What are my health plans?"}, + {"role": ASSISTANT, "content": "Show available health plans"}, + ] + NO_RESPONSE = "0" + + follow_up_questions_prompt_content = """Generate 3 very brief follow-up questions that the user would likely ask next. + Enclose the follow-up questions in double angle brackets. Example: + <> + <> + <> + Do no repeat questions that have already been asked. + Make sure the last question ends with ">>". + """ + + query_prompt_template = """Below is a history of the conversation so far, and a new question asked by the user that needs to be answered by searching in a knowledge. + You have access to Azure AI Search index with 100's of documents. + Generate a search query based on the conversation and the new question. + Do not include cited source filenames and document names e.g info.txt or doc.pdf in the search query terms. + Do not include any text inside [] or <<>> in the search query terms. + Do not include any special characters like '+'. + If the question is not in English, translate the question to English before generating the search query. + If you cannot generate a search query, return just the number 0. + """ + + @property + @abstractmethod + def system_message_chat_conversation(self) -> str: + pass + + @abstractmethod + async def run_until_final_call(self, history, overrides, auth_claims, should_stream) -> tuple: + pass + + def get_system_prompt(self, override_prompt: Optional[str], follow_up_questions_prompt: str) -> str: + if override_prompt is None: + return self.system_message_chat_conversation.format( + injected_prompt="", follow_up_questions_prompt=follow_up_questions_prompt + ) + elif override_prompt.startswith(">>>"): + return self.system_message_chat_conversation.format( + injected_prompt=override_prompt[3:] + "\n", follow_up_questions_prompt=follow_up_questions_prompt + ) + else: + return override_prompt.format(follow_up_questions_prompt=follow_up_questions_prompt) + + def get_search_query(self, chat_completion: ChatCompletion, user_query: str): + response_message = chat_completion.choices[0].message + if function_call := response_message.function_call: + if function_call.name == "search_sources": + arg = json.loads(function_call.arguments) + search_query = arg.get("search_query", self.NO_RESPONSE) + if search_query != self.NO_RESPONSE: + return search_query + elif query_text := response_message.content: + if query_text.strip() != self.NO_RESPONSE: + return query_text + return user_query + + def extract_followup_questions(self, content: str): + return content.split("<<")[0], re.findall(r"<<([^>>]+)>>", content) + + def get_messages_from_history( + self, + system_prompt: str, + model_id: str, + history: list[dict[str, str]], + user_content: Union[str, list[ChatCompletionContentPartParam]], + max_tokens: int, + few_shots=[], + ) -> list[ChatCompletionMessageParam]: + message_builder = MessageBuilder(system_prompt, model_id) + + # Add examples to show the chat what responses we want. It will try to mimic any responses and make sure they match the rules laid out in the system message. + for shot in reversed(few_shots): + message_builder.insert_message(shot.get("role"), shot.get("content")) + + append_index = len(few_shots) + 1 + + message_builder.insert_message(self.USER, user_content, index=append_index) + total_token_count = message_builder.count_tokens_for_message(dict(message_builder.messages[-1])) # type: ignore + + newest_to_oldest = list(reversed(history[:-1])) + for message in newest_to_oldest: + potential_message_count = message_builder.count_tokens_for_message(message) + if (total_token_count + potential_message_count) > max_tokens: + logging.debug("Reached max tokens of %d, history will be truncated", max_tokens) + break + message_builder.insert_message(message["role"], message["content"], index=append_index) + total_token_count += potential_message_count + return message_builder.messages + + async def run_without_streaming( + self, + history: list[dict[str, str]], + overrides: dict[str, Any], + auth_claims: dict[str, Any], + session_state: Any = None, + ) -> dict[str, Any]: + extra_info, chat_coroutine = await self.run_until_final_call( + history, overrides, auth_claims, should_stream=False + ) + chat_completion_response: ChatCompletion = await chat_coroutine + chat_resp = chat_completion_response.model_dump() # Convert to dict to make it JSON serializable + chat_resp["choices"][0]["context"] = extra_info + if overrides.get("suggest_followup_questions"): + content, followup_questions = self.extract_followup_questions(chat_resp["choices"][0]["message"]["content"]) + chat_resp["choices"][0]["message"]["content"] = content + chat_resp["choices"][0]["context"]["followup_questions"] = followup_questions + chat_resp["choices"][0]["session_state"] = session_state + return chat_resp + + async def run_with_streaming( + self, + history: list[dict[str, str]], + overrides: dict[str, Any], + auth_claims: dict[str, Any], + session_state: Any = None, + ) -> AsyncGenerator[dict, None]: + extra_info, chat_coroutine = await self.run_until_final_call( + history, overrides, auth_claims, should_stream=True + ) + yield { + "choices": [ + { + "delta": {"role": self.ASSISTANT}, + "context": extra_info, + "session_state": session_state, + "finish_reason": None, + "index": 0, + } + ], + "object": "chat.completion.chunk", + } + + followup_questions_started = False + followup_content = "" + async for event_chunk in await chat_coroutine: + # "2023-07-01-preview" API version has a bug where first response has empty choices + event = event_chunk.model_dump() # Convert pydantic model to dict + if event["choices"]: + # if event contains << and not >>, it is start of follow-up question, truncate + content = event["choices"][0]["delta"].get("content") + content = content or "" # content may either not exist in delta, or explicitly be None + if overrides.get("suggest_followup_questions") and "<<" in content: + followup_questions_started = True + earlier_content = content[: content.index("<<")] + if earlier_content: + event["choices"][0]["delta"]["content"] = earlier_content + yield event + followup_content += content[content.index("<<") :] + elif followup_questions_started: + followup_content += content + else: + yield event + if followup_content: + _, followup_questions = self.extract_followup_questions(followup_content) + yield { + "choices": [ + { + "delta": {"role": self.ASSISTANT}, + "context": {"followup_questions": followup_questions}, + "finish_reason": None, + "index": 0, + } + ], + "object": "chat.completion.chunk", + } + + async def run( + self, messages: list[dict], stream: bool = False, session_state: Any = None, context: dict[str, Any] = {} + ) -> Union[dict[str, Any], AsyncGenerator[dict[str, Any], None]]: + overrides = context.get("overrides", {}) + auth_claims = context.get("auth_claims", {}) + + if stream is False: + return await self.run_without_streaming(messages, overrides, auth_claims, session_state) + else: + return self.run_with_streaming(messages, overrides, auth_claims, session_state) diff --git a/app/backend/approaches/chatreadretrieveread.py b/app/backend/approaches/chatreadretrieveread.py index 4d21acf296..addfd8a300 100644 --- a/app/backend/approaches/chatreadretrieveread.py +++ b/app/backend/approaches/chatreadretrieveread.py @@ -1,66 +1,25 @@ -import json -import logging -import re -from typing import Any, AsyncGenerator, Coroutine, Literal, Optional, Union, overload +from typing import Any, Coroutine, Literal, Optional, Union, overload from azure.search.documents.aio import SearchClient -from azure.search.documents.models import QueryType, RawVectorQuery, VectorQuery +from azure.search.documents.models import VectorQuery from openai import AsyncOpenAI, AsyncStream from openai.types.chat import ( ChatCompletion, ChatCompletionChunk, - ChatCompletionMessageParam, ) -from approaches.approach import Approach -from core.messagebuilder import MessageBuilder +from approaches.approach import ThoughtStep +from approaches.chatapproach import ChatApproach from core.modelhelper import get_token_limit -from text import nonewlines -class ChatReadRetrieveReadApproach(Approach): - # Chat roles - SYSTEM = "system" - USER = "user" - ASSISTANT = "assistant" - - NO_RESPONSE = "0" +class ChatReadRetrieveReadApproach(ChatApproach): """ A multi-step approach that first uses OpenAI to turn the user's question into a search query, then uses Azure AI Search to retrieve relevant documents, and then sends the conversation history, original user question, and search results to OpenAI to generate a response. """ - system_message_chat_conversation = """Assistant helps the company employees with their healthcare plan questions, and questions about the employee handbook. Be brief in your answers. -Answer ONLY with the facts listed in the list of sources below. If there isn't enough information below, say you don't know. Do not generate answers that don't use the sources below. If asking a clarifying question to the user would help, ask the question. -For tabular information return it as an html table. Do not return markdown format. If the question is not in English, answer in the language used in the question. -Each source has a name followed by colon and the actual information, always include the source name for each fact you use in the response. Use square brackets to reference the source, for example [info1.txt]. Don't combine sources, list each source separately, for example [info1.txt][info2.pdf]. -{follow_up_questions_prompt} -{injected_prompt} -""" - follow_up_questions_prompt_content = """Generate 3 very brief follow-up questions that the user would likely ask next. -Enclose the follow-up questions in double angle brackets. Example: -<> -<> -<> -Do no repeat questions that have already been asked. -Make sure the last question ends with ">>".""" - - query_prompt_template = """Below is a history of the conversation so far, and a new question asked by the user that needs to be answered by searching in a knowledge base about employee healthcare plans and the employee handbook. -You have access to an Azure AI Search index with 100's of documents. -Generate a search query based on the conversation and the new question. -Do not include cited source filenames and document names e.g info.txt or doc.pdf in the search query terms. -Do not include any text inside [] or <<>> in the search query terms. -Do not include any special characters like '+'. -If the question is not in English, translate the question to English before generating the search query. -If you cannot generate a search query, return just the number 0. -""" - query_prompt_few_shots = [ - {"role": USER, "content": "What are my health plans?"}, - {"role": ASSISTANT, "content": "Show available health plans"}, - {"role": USER, "content": "does my plan cover cardio?"}, - {"role": ASSISTANT, "content": "Health plan cardio coverage"}, - ] def __init__( self, @@ -88,6 +47,16 @@ def __init__( self.query_speller = query_speller self.chatgpt_token_limit = get_token_limit(chatgpt_model) + @property + def system_message_chat_conversation(self): + return """Assistant helps the company employees with their healthcare plan questions, and questions about the employee handbook. Be brief in your answers. + Answer ONLY with the facts listed in the list of sources below. If there isn't enough information below, say you don't know. Do not generate answers that don't use the sources below. If asking a clarifying question to the user would help, ask the question. + For tabular information return it as an html table. Do not return markdown format. If the question is not in English, answer in the language used in the question. + Each source has a name followed by colon and the actual information, always include the source name for each fact you use in the response. Use square brackets to reference the source, for example [info1.txt]. Don't combine sources, list each source separately, for example [info1.txt][info2.pdf]. + {follow_up_questions_prompt} + {injected_prompt} + """ + @overload async def run_until_final_call( self, @@ -120,6 +89,8 @@ async def run_until_final_call( use_semantic_captions = True if overrides.get("semantic_captions") and has_text else False top = overrides.get("top", 3) filter = self.build_filter(overrides, auth_claims) + use_semantic_ranker = True if overrides.get("semantic_ranker") and has_text else False + original_user_query = history[-1]["content"] user_query_request = "Generate search query for: " + original_user_query @@ -149,6 +120,7 @@ async def run_until_final_call( max_tokens=self.chatgpt_token_limit - len(user_query_request), few_shots=self.query_prompt_few_shots, ) + chat_completion: ChatCompletion = await self.openai_client.chat.completions.create( messages=messages, # type: ignore # Azure Open AI takes the deployment name as the model name @@ -167,60 +139,24 @@ async def run_until_final_call( # If retrieval mode includes vectors, compute an embedding for the query vectors: list[VectorQuery] = [] if has_vector: - embedding = await self.openai_client.embeddings.create( - # Azure Open AI takes the deployment name as the model name - model=self.embedding_deployment if self.embedding_deployment else self.embedding_model, - input=query_text, - ) - query_vector = embedding.data[0].embedding - vectors.append(RawVectorQuery(vector=query_vector, k=50, fields="embedding")) + vectors.append(await self.compute_text_embedding(query_text)) # Only keep the text query if the retrieval mode uses text, otherwise drop it if not has_text: query_text = None - # Use semantic L2 reranker if requested and if retrieval mode is text or hybrid (vectors + text) - if overrides.get("semantic_ranker") and has_text: - r = await self.search_client.search( - query_text, - filter=filter, - query_type=QueryType.SEMANTIC, - query_language=self.query_language, - query_speller=self.query_speller, - semantic_configuration_name="default", - top=top, - query_caption="extractive|highlight-false" if use_semantic_captions else None, - vector_queries=vectors, - ) - else: - r = await self.search_client.search(query_text, filter=filter, top=top, vector_queries=vectors) - if use_semantic_captions: - results = [ - doc[self.sourcepage_field] + ": " + nonewlines(" . ".join([c.text for c in doc["@search.captions"]])) - async for doc in r - ] - else: - results = [doc[self.sourcepage_field] + ": " + nonewlines(doc[self.content_field]) async for doc in r] - content = "\n".join(results) + results = await self.search(top, query_text, filter, vectors, use_semantic_ranker, use_semantic_captions) - follow_up_questions_prompt = ( - self.follow_up_questions_prompt_content if overrides.get("suggest_followup_questions") else "" - ) + sources_content = self.get_sources_content(results, use_semantic_captions, use_image_citation=False) + content = "\n".join(sources_content) # STEP 3: Generate a contextual and content specific answer using the search results and chat history # Allow client to replace the entire prompt, or to inject into the exiting prompt using >>> - prompt_override = overrides.get("prompt_template") - if prompt_override is None: - system_message = self.system_message_chat_conversation.format( - injected_prompt="", follow_up_questions_prompt=follow_up_questions_prompt - ) - elif prompt_override.startswith(">>>"): - system_message = self.system_message_chat_conversation.format( - injected_prompt=prompt_override[3:] + "\n", follow_up_questions_prompt=follow_up_questions_prompt - ) - else: - system_message = prompt_override.format(follow_up_questions_prompt=follow_up_questions_prompt) + system_message = self.get_system_prompt( + overrides.get("prompt_template"), + self.follow_up_questions_prompt_content if overrides.get("suggest_followup_questions") else "", + ) response_token_limit = 1024 messages_token_limit = self.chatgpt_token_limit - response_token_limit @@ -232,12 +168,24 @@ async def run_until_final_call( user_content=original_user_query + "\n\nSources:\n" + content, max_tokens=messages_token_limit, ) - msg_to_display = "\n\n".join([str(message) for message in messages]) + + data_points = {"text": sources_content} extra_info = { - "data_points": results, - "thoughts": f"Searched for:
{query_text}

Conversations:
" - + msg_to_display.replace("\n", "
"), + "data_points": data_points, + "thoughts": [ + ThoughtStep( + "Original user query", + original_user_query, + ), + ThoughtStep( + "Generated search query", + query_text, + {"use_semantic_captions": use_semantic_captions, "has_vector": has_vector}, + ), + ThoughtStep("Results", [result.serialize_for_results() for result in results]), + ThoughtStep("Prompt", [str(message) for message in messages]), + ], } chat_coroutine = self.openai_client.chat.completions.create( @@ -250,136 +198,3 @@ async def run_until_final_call( stream=should_stream, ) return (extra_info, chat_coroutine) - - async def run_without_streaming( - self, - history: list[dict[str, str]], - overrides: dict[str, Any], - auth_claims: dict[str, Any], - session_state: Any = None, - ) -> dict[str, Any]: - extra_info, chat_coroutine = await self.run_until_final_call( - history, overrides, auth_claims, should_stream=False - ) - chat_completion_response: ChatCompletion = await chat_coroutine - chat_resp = chat_completion_response.model_dump() # Convert to dict to make it JSON serializable - chat_resp["choices"][0]["context"] = extra_info - if overrides.get("suggest_followup_questions"): - content, followup_questions = self.extract_followup_questions(chat_resp["choices"][0]["message"]["content"]) - chat_resp["choices"][0]["message"]["content"] = content - chat_resp["choices"][0]["context"]["followup_questions"] = followup_questions - chat_resp["choices"][0]["session_state"] = session_state - return chat_resp - - async def run_with_streaming( - self, - history: list[dict[str, str]], - overrides: dict[str, Any], - auth_claims: dict[str, Any], - session_state: Any = None, - ) -> AsyncGenerator[dict, None]: - extra_info, chat_coroutine = await self.run_until_final_call( - history, overrides, auth_claims, should_stream=True - ) - yield { - "choices": [ - { - "delta": {"role": self.ASSISTANT}, - "context": extra_info, - "session_state": session_state, - "finish_reason": None, - "index": 0, - } - ], - "object": "chat.completion.chunk", - } - - followup_questions_started = False - followup_content = "" - async for event_chunk in await chat_coroutine: - # "2023-07-01-preview" API version has a bug where first response has empty choices - event = event_chunk.model_dump() # Convert pydantic model to dict - if event["choices"]: - # if event contains << and not >>, it is start of follow-up question, truncate - content = event["choices"][0]["delta"].get("content") - content = content or "" # content may either not exist in delta, or explicitly be None - if overrides.get("suggest_followup_questions") and "<<" in content: - followup_questions_started = True - earlier_content = content[: content.index("<<")] - if earlier_content: - event["choices"][0]["delta"]["content"] = earlier_content - yield event - followup_content += content[content.index("<<") :] - elif followup_questions_started: - followup_content += content - else: - yield event - if followup_content: - _, followup_questions = self.extract_followup_questions(followup_content) - yield { - "choices": [ - { - "delta": {"role": self.ASSISTANT}, - "context": {"followup_questions": followup_questions}, - "finish_reason": None, - "index": 0, - } - ], - "object": "chat.completion.chunk", - } - - async def run( - self, messages: list[dict], stream: bool = False, session_state: Any = None, context: dict[str, Any] = {} - ) -> Union[dict[str, Any], AsyncGenerator[dict[str, Any], None]]: - overrides = context.get("overrides", {}) - auth_claims = context.get("auth_claims", {}) - if stream is False: - return await self.run_without_streaming(messages, overrides, auth_claims, session_state) - else: - return self.run_with_streaming(messages, overrides, auth_claims, session_state) - - def get_messages_from_history( - self, - system_prompt: str, - model_id: str, - history: list[dict[str, str]], - user_content: str, - max_tokens: int, - few_shots=[], - ) -> list[ChatCompletionMessageParam]: - message_builder = MessageBuilder(system_prompt, model_id) - - # Add examples to show the chat what responses we want. It will try to mimic any responses and make sure they match the rules laid out in the system message. - for shot in reversed(few_shots): - message_builder.insert_message(shot.get("role"), shot.get("content")) - - append_index = len(few_shots) + 1 - - message_builder.insert_message(self.USER, user_content, index=append_index) - total_token_count = message_builder.count_tokens_for_message(dict(message_builder.messages[-1])) # type: ignore - - newest_to_oldest = list(reversed(history[:-1])) - for message in newest_to_oldest: - potential_message_count = message_builder.count_tokens_for_message(message) - if (total_token_count + potential_message_count) > max_tokens: - logging.debug("Reached max tokens of %d, history will be truncated", max_tokens) - break - message_builder.insert_message(message["role"], message["content"], index=append_index) - total_token_count += potential_message_count - return message_builder.messages - - def get_search_query(self, chat_completion: ChatCompletion, user_query: str): - response_message = chat_completion.choices[0].message - if function_call := response_message.function_call: - if function_call.name == "search_sources": - arg = json.loads(function_call.arguments) - search_query = arg.get("search_query", self.NO_RESPONSE) - if search_query != self.NO_RESPONSE: - return search_query - elif query_text := response_message.content: - if query_text.strip() != self.NO_RESPONSE: - return query_text - return user_query - - def extract_followup_questions(self, content: str): - return content.split("<<")[0], re.findall(r"<<([^>>]+)>>", content) diff --git a/app/backend/approaches/chatreadretrievereadvision.py b/app/backend/approaches/chatreadretrievereadvision.py new file mode 100644 index 0000000000..8059ec506f --- /dev/null +++ b/app/backend/approaches/chatreadretrievereadvision.py @@ -0,0 +1,200 @@ +from typing import Any, Coroutine, Optional, Union + +from azure.search.documents.aio import SearchClient +from azure.storage.blob.aio import ContainerClient +from openai import AsyncOpenAI, AsyncStream +from openai.types.chat import ( + ChatCompletion, + ChatCompletionChunk, + ChatCompletionContentPartImageParam, + ChatCompletionContentPartParam, +) + +from approaches.approach import ThoughtStep +from approaches.chatapproach import ChatApproach +from core.imageshelper import fetch_image +from core.modelhelper import get_token_limit + + +class ChatReadRetrieveReadVisionApproach(ChatApproach): + + """ + A multi-step approach that first uses OpenAI to turn the user's question into a search query, + then uses Azure AI Search to retrieve relevant documents, and then sends the conversation history, + original user question, and search results to OpenAI to generate a response. + """ + + def __init__( + self, + *, + search_client: SearchClient, + blob_container_client: ContainerClient, + openai_client: AsyncOpenAI, + gpt4v_deployment: Optional[str], # Not needed for non-Azure OpenAI + gpt4v_model: str, + embedding_deployment: Optional[str], # Not needed for non-Azure OpenAI or for retrieval_mode="text" + embedding_model: str, + sourcepage_field: str, + content_field: str, + query_language: str, + query_speller: str, + vision_endpoint: str, + vision_key: str, + ): + self.search_client = search_client + self.blob_container_client = blob_container_client + self.openai_client = openai_client + self.gpt4v_deployment = gpt4v_deployment + self.gpt4v_model = gpt4v_model + self.embedding_deployment = embedding_deployment + self.embedding_model = embedding_model + self.sourcepage_field = sourcepage_field + self.content_field = content_field + self.query_language = query_language + self.query_speller = query_speller + self.vision_endpoint = vision_endpoint + self.vision_key = vision_key + self.chatgpt_token_limit = get_token_limit(gpt4v_model) + + @property + def system_message_chat_conversation(self): + return """ + You are an intelligent assistant helping analyze the Annual Financial Report of Contoso Ltd., The documents contain text, graphs, tables and images. + Each image source has the file name in the top left corner of the image with coordinates (10,10) pixels and is in the format SourceFileName: + Each text source starts in a new line and has the file name followed by colon and the actual information + Always include the source name from the image or text for each fact you use in the response in the format: [filename] + Answer the following question using only the data provided in the sources below. + If asking a clarifying question to the user would help, ask the question. + Be brief in your answers. + For tabular information return it as an html table. Do not return markdown format. + The text and image source can be the same file name, don't use the image title when citing the image source, only use the file name as mentioned + If you cannot answer using the sources below, say you don't know. Return just the answer without any input texts. + {follow_up_questions_prompt} + {injected_prompt} + """ + + async def run_until_final_call( + self, + history: list[dict[str, str]], + overrides: dict[str, Any], + auth_claims: dict[str, Any], + should_stream: bool = False, + ) -> tuple[dict[str, Any], Coroutine[Any, Any, Union[ChatCompletion, AsyncStream[ChatCompletionChunk]]]]: + has_text = overrides.get("retrieval_mode") in ["text", "hybrid", None] + has_vector = overrides.get("retrieval_mode") in ["vectors", "hybrid", None] + vector_fields = overrides.get("vector_fields", ["embedding"]) + use_semantic_captions = True if overrides.get("semantic_captions") and has_text else False + top = overrides.get("top", 3) + filter = self.build_filter(overrides, auth_claims) + use_semantic_ranker = True if overrides.get("semantic_ranker") and has_text else False + + include_gtpV_text = overrides.get("gpt4v_input") in ["textAndImages", "texts", None] + include_gtpV_images = overrides.get("gpt4v_input") in ["textAndImages", "images", None] + + original_user_query = history[-1]["content"] + + # STEP 1: Generate an optimized keyword search query based on the chat history and the last question + user_query_request = "Generate search query for: " + original_user_query + + messages = self.get_messages_from_history( + system_prompt=self.query_prompt_template, + model_id=self.gpt4v_model, + history=history, + user_content=user_query_request, + max_tokens=self.chatgpt_token_limit - len(" ".join(user_query_request)), + few_shots=self.query_prompt_few_shots, + ) + + chat_completion: ChatCompletion = await self.openai_client.chat.completions.create( + model=self.gpt4v_deployment if self.gpt4v_deployment else self.gpt4v_model, + messages=messages, + temperature=overrides.get("temperature") or 0.0, + max_tokens=100, + n=1, + ) + + query_text = self.get_search_query(chat_completion, original_user_query) + + # STEP 2: Retrieve relevant documents from the search index with the GPT optimized query + + # If retrieval mode includes vectors, compute an embedding for the query + vectors = [] + if has_vector: + for field in vector_fields: + vector = ( + await self.compute_text_embedding(query_text) + if field == "embedding" + else await self.compute_image_embedding(query_text, self.vision_endpoint, self.vision_key) + ) + vectors.append(vector) + + # Only keep the text query if the retrieval mode uses text, otherwise drop it + if not has_text: + query_text = None + + results = await self.search(top, query_text, filter, vectors, use_semantic_ranker, use_semantic_captions) + sources_content = self.get_sources_content(results, use_semantic_captions, use_image_citation=True) + content = "\n".join(sources_content) + + # STEP 3: Generate a contextual and content specific answer using the search results and chat history + + # Allow client to replace the entire prompt, or to inject into the existing prompt using >>> + system_message = self.get_system_prompt( + overrides.get("prompt_template"), + self.follow_up_questions_prompt_content if overrides.get("suggest_followup_questions") else "", + ) + + response_token_limit = 1024 + messages_token_limit = self.chatgpt_token_limit - response_token_limit + + user_content: list[ChatCompletionContentPartParam] = [{"text": original_user_query, "type": "text"}] + image_list: list[ChatCompletionContentPartImageParam] = [] + + if include_gtpV_text: + user_content.append({"text": "\n\nSources:\n" + content, "type": "text"}) + if include_gtpV_images: + for result in results: + url = await fetch_image(self.blob_container_client, result) + if url: + image_list.append({"image_url": url, "type": "image_url"}) + user_content.extend(image_list) + + messages = self.get_messages_from_history( + system_prompt=system_message, + model_id=self.gpt4v_model, + history=history, + user_content=user_content, + max_tokens=messages_token_limit, + ) + + data_points = { + "text": sources_content, + "images": [d["image_url"] for d in image_list], + } + + extra_info = { + "data_points": data_points, + "thoughts": [ + ThoughtStep( + "Original user query", + original_user_query, + ), + ThoughtStep( + "Generated search query", + query_text, + {"use_semantic_captions": use_semantic_captions, "vector_fields": vector_fields}, + ), + ThoughtStep("Results", [result.serialize_for_results() for result in results]), + ThoughtStep("Prompt", [str(message) for message in messages]), + ], + } + + chat_coroutine = self.openai_client.chat.completions.create( + model=self.gpt4v_deployment if self.gpt4v_deployment else self.gpt4v_model, + messages=messages, + temperature=overrides.get("temperature") or 0.7, + max_tokens=response_token_limit, + n=1, + stream=should_stream, + ) + return (extra_info, chat_coroutine) diff --git a/app/backend/approaches/retrievethenread.py b/app/backend/approaches/retrievethenread.py index 01bea32bea..1deba36630 100644 --- a/app/backend/approaches/retrievethenread.py +++ b/app/backend/approaches/retrievethenread.py @@ -1,12 +1,16 @@ +import os from typing import Any, AsyncGenerator, Optional, Union from azure.search.documents.aio import SearchClient -from azure.search.documents.models import QueryType, RawVectorQuery, VectorQuery +from azure.search.documents.models import VectorQuery from openai import AsyncOpenAI -from approaches.approach import Approach +from approaches.approach import Approach, ThoughtStep from core.messagebuilder import MessageBuilder -from text import nonewlines + +# Replace these with your own values, either in environment variables or directly here +AZURE_STORAGE_ACCOUNT = os.getenv("AZURE_STORAGE_ACCOUNT") +AZURE_STORAGE_CONTAINER = os.getenv("AZURE_STORAGE_CONTAINER") class RetrieveThenReadApproach(Approach): @@ -52,6 +56,7 @@ def __init__( query_speller: str, ): self.search_client = search_client + self.chatgpt_deployment = chatgpt_deployment self.openai_client = openai_client self.chatgpt_model = chatgpt_model self.embedding_model = embedding_model @@ -74,61 +79,34 @@ async def run( auth_claims = context.get("auth_claims", {}) has_text = overrides.get("retrieval_mode") in ["text", "hybrid", None] has_vector = overrides.get("retrieval_mode") in ["vectors", "hybrid", None] + use_semantic_ranker = overrides.get("semantic_ranker") and has_text + use_semantic_captions = True if overrides.get("semantic_captions") and has_text else False top = overrides.get("top", 3) filter = self.build_filter(overrides, auth_claims) # If retrieval mode includes vectors, compute an embedding for the query vectors: list[VectorQuery] = [] if has_vector: - embedding = await self.openai_client.embeddings.create( - # Azure Open AI takes the deployment name as the model name - model=self.embedding_deployment if self.embedding_deployment else self.embedding_model, - input=q, - ) - query_vector = embedding.data[0].embedding - vectors.append(RawVectorQuery(vector=query_vector, k=50, fields="embedding")) + vectors.append(await self.compute_text_embedding(q)) # Only keep the text query if the retrieval mode uses text, otherwise drop it - query_text = q if has_text else "" - - # Use semantic ranker if requested and if retrieval mode is text or hybrid (vectors + text) - if overrides.get("semantic_ranker") and has_text: - r = await self.search_client.search( - query_text, - filter=filter, - query_type=QueryType.SEMANTIC, - query_language=self.query_language, - query_speller=self.query_speller, - semantic_configuration_name="default", - top=top, - query_caption="extractive|highlight-false" if use_semantic_captions else None, - vector_queries=vectors, - ) - else: - r = await self.search_client.search( - query_text, - filter=filter, - top=top, - vector_queries=vectors, - ) - if use_semantic_captions: - results = [ - doc[self.sourcepage_field] + ": " + nonewlines(" . ".join([c.text for c in doc["@search.captions"]])) - async for doc in r - ] - else: - results = [doc[self.sourcepage_field] + ": " + nonewlines(doc[self.content_field]) async for doc in r] - content = "\n".join(results) - - message_builder = MessageBuilder( - overrides.get("prompt_template") or self.system_chat_template, self.chatgpt_model - ) - - # add user question + query_text = q if has_text else None + + results = await self.search(top, query_text, filter, vectors, use_semantic_ranker, use_semantic_captions) + + user_content = [q] + + template = overrides.get("prompt_template") or self.system_chat_template + model = self.chatgpt_model + message_builder = MessageBuilder(template, model) + + # Process results + sources_content = self.get_sources_content(results, use_semantic_captions, use_image_citation=False) + + # Append user message + content = "\n".join(sources_content) user_content = q + "\n" + f"Sources:\n {content}" message_builder.insert_message("user", user_content) - - # Add shots/samples. This helps model to mimic response and make sure they match rules laid out in system message. message_builder.insert_message("assistant", self.answer) message_builder.insert_message("user", self.question) @@ -143,11 +121,22 @@ async def run( ) ).model_dump() + data_points = {"text": sources_content} extra_info = { - "data_points": results, - "thoughts": f"Question:
{query_text}

Prompt:
" - + "\n\n".join([str(message) for message in message_builder.messages]), + "data_points": data_points, + "thoughts": [ + ThoughtStep( + "Search Query", + query_text, + { + "use_semantic_captions": use_semantic_captions, + }, + ), + ThoughtStep("Results", [result.serialize_for_results() for result in results]), + ThoughtStep("Prompt", [str(message) for message in message_builder.messages]), + ], } + chat_completion["choices"][0]["context"] = extra_info chat_completion["choices"][0]["session_state"] = session_state return chat_completion diff --git a/app/backend/approaches/retrievethenreadvision.py b/app/backend/approaches/retrievethenreadvision.py new file mode 100644 index 0000000000..b19e82b9e8 --- /dev/null +++ b/app/backend/approaches/retrievethenreadvision.py @@ -0,0 +1,162 @@ +import os +from typing import Any, AsyncGenerator, Optional, Union + +from azure.search.documents.aio import SearchClient +from azure.storage.blob.aio import ContainerClient +from openai import AsyncOpenAI +from openai.types.chat import ( + ChatCompletionContentPartImageParam, + ChatCompletionContentPartParam, +) + +from approaches.approach import Approach, ThoughtStep +from core.imageshelper import fetch_image +from core.messagebuilder import MessageBuilder + +# Replace these with your own values, either in environment variables or directly here +AZURE_STORAGE_ACCOUNT = os.getenv("AZURE_STORAGE_ACCOUNT") +AZURE_STORAGE_CONTAINER = os.getenv("AZURE_STORAGE_CONTAINER") + + +class RetrieveThenReadVisionApproach(Approach): + """ + Simple retrieve-then-read implementation, using the AI Search and OpenAI APIs directly. It first retrieves + top documents including images from search, then constructs a prompt with them, and then uses OpenAI to generate an completion + (answer) with that prompt. + """ + + system_chat_template_gpt4v = ( + "You are an intelligent assistant helping analyze the Annual Financial Report of Contoso Ltd., The documents contain text, graphs, tables and images. " + + "Each image source has the file name in the top left corner of the image with coordinates (10,10) pixels and is in the format SourceFileName: " + + "Each text source starts in a new line and has the file name followed by colon and the actual information " + + "Always include the source name from the image or text for each fact you use in the response in the format: [filename] " + + "Answer the following question using only the data provided in the sources below. " + + "For tabular information return it as an html table. Do not return markdown format. " + + "The text and image source can be the same file name, don't use the image title when citing the image source, only use the file name as mentioned " + + "If you cannot answer using the sources below, say you don't know. Return just the answer without any input texts " + ) + + def __init__( + self, + *, + search_client: SearchClient, + blob_container_client: ContainerClient, + openai_client: AsyncOpenAI, + gpt4v_deployment: Optional[str], + gpt4v_model: str, + embedding_deployment: Optional[str], # Not needed for non-Azure OpenAI or for retrieval_mode="text" + embedding_model: str, + sourcepage_field: str, + content_field: str, + query_language: str, + query_speller: str, + vision_endpoint: str, + vision_key: str, + ): + self.search_client = search_client + self.blob_container_client = blob_container_client + self.openai_client = openai_client + self.embedding_model = embedding_model + self.embedding_deployment = embedding_deployment + self.sourcepage_field = sourcepage_field + self.content_field = content_field + self.gpt4v_deployment = gpt4v_deployment + self.gpt4v_model = gpt4v_model + self.query_language = query_language + self.query_speller = query_speller + self.vision_endpoint = vision_endpoint + self.vision_key = vision_key + + async def run( + self, + messages: list[dict], + stream: bool = False, # Stream is not used in this approach + session_state: Any = None, + context: dict[str, Any] = {}, + ) -> Union[dict[str, Any], AsyncGenerator[dict[str, Any], None]]: + q = messages[-1]["content"] + overrides = context.get("overrides", {}) + auth_claims = context.get("auth_claims", {}) + has_text = overrides.get("retrieval_mode") in ["text", "hybrid", None] + has_vector = overrides.get("retrieval_mode") in ["vectors", "hybrid", None] + vector_fields = overrides.get("vector_fields", ["embedding"]) + + include_gtpV_text = overrides.get("gpt4v_input") in ["textAndImages", "texts", None] + include_gtpV_images = overrides.get("gpt4v_input") in ["textAndImages", "images", None] + + use_semantic_captions = True if overrides.get("semantic_captions") and has_text else False + top = overrides.get("top", 3) + filter = self.build_filter(overrides, auth_claims) + use_semantic_ranker = overrides.get("semantic_ranker") and has_text + + # If retrieval mode includes vectors, compute an embedding for the query + + vectors = [] + if has_vector: + for field in vector_fields: + vector = ( + await self.compute_text_embedding(q) + if field == "embedding" + else await self.compute_image_embedding(q, self.vision_endpoint, self.vision_key) + ) + vectors.append(vector) + + # Only keep the text query if the retrieval mode uses text, otherwise drop it + query_text = q if has_text else None + + results = await self.search(top, query_text, filter, vectors, use_semantic_ranker, use_semantic_captions) + + image_list: list[ChatCompletionContentPartImageParam] = [] + user_content: list[ChatCompletionContentPartParam] = [{"text": q, "type": "text"}] + + template = overrides.get("prompt_template") or (self.system_chat_template_gpt4v) + model = self.gpt4v_model + message_builder = MessageBuilder(template, model) + + # Process results + + sources_content = self.get_sources_content(results, use_semantic_captions, use_image_citation=True) + + if include_gtpV_text: + content = "\n".join(sources_content) + user_content.append({"text": content, "type": "text"}) + if include_gtpV_images: + for result in results: + url = await fetch_image(self.blob_container_client, result) + if url: + image_list.append({"image_url": url, "type": "image_url"}) + user_content.extend(image_list) + + # Append user message + message_builder.insert_message("user", user_content) + + chat_completion = ( + await self.openai_client.chat.completions.create( + model=self.gpt4v_deployment if self.gpt4v_deployment else self.gpt4v_model, + messages=message_builder.messages, + temperature=overrides.get("temperature") or 0.3, + max_tokens=1024, + n=1, + ) + ).model_dump() + + data_points = { + "text": sources_content, + "images": [d["image_url"] for d in image_list], + } + + extra_info = { + "data_points": data_points, + "thoughts": [ + ThoughtStep( + "Search Query", + query_text, + {"use_semantic_captions": use_semantic_captions, "vector_fields": vector_fields}, + ), + ThoughtStep("Results", [result.serialize_for_results() for result in results]), + ThoughtStep("Prompt", [str(message) for message in message_builder.messages]), + ], + } + chat_completion["choices"][0]["context"] = extra_info + chat_completion["choices"][0]["session_state"] = session_state + return chat_completion diff --git a/app/backend/core/imageshelper.py b/app/backend/core/imageshelper.py new file mode 100644 index 0000000000..165bb42d2a --- /dev/null +++ b/app/backend/core/imageshelper.py @@ -0,0 +1,36 @@ +import base64 +import os +from typing import Optional + +from azure.storage.blob.aio import ContainerClient +from typing_extensions import Literal, Required, TypedDict + +from approaches.approach import Document + + +class ImageURL(TypedDict, total=False): + url: Required[str] + """Either a URL of the image or the base64 encoded image data.""" + + detail: Literal["auto", "low", "high"] + """Specifies the detail level of the image.""" + + +async def download_blob_as_base64(blob_container_client: ContainerClient, file_path: str) -> Optional[str]: + base_name, _ = os.path.splitext(file_path) + blob = await blob_container_client.get_blob_client(base_name + ".png").download_blob() + + if not blob.properties: + return None + img = base64.b64encode(await blob.readall()).decode("utf-8") + return f"data:image/png;base64,{img}" + + +async def fetch_image(blob_container_client: ContainerClient, result: Document) -> Optional[ImageURL]: + if result.sourcepage: + img = await download_blob_as_base64(blob_container_client, result.sourcepage) + if img: + return {"url": img, "detail": "auto"} + else: + return None + return None diff --git a/app/backend/core/messagebuilder.py b/app/backend/core/messagebuilder.py index 233b51cd3e..ba86c1ae1b 100644 --- a/app/backend/core/messagebuilder.py +++ b/app/backend/core/messagebuilder.py @@ -1,7 +1,9 @@ import unicodedata +from typing import List, Union from openai.types.chat import ( ChatCompletionAssistantMessageParam, + ChatCompletionContentPartParam, ChatCompletionMessageParam, ChatCompletionSystemMessageParam, ChatCompletionUserMessageParam, @@ -24,26 +26,28 @@ class MessageBuilder: def __init__(self, system_content: str, chatgpt_model: str): self.messages: list[ChatCompletionMessageParam] = [ - ChatCompletionSystemMessageParam(role="system", content=self.normalize_content(system_content)) + ChatCompletionSystemMessageParam(role="system", content=unicodedata.normalize("NFC", system_content)) ] self.model = chatgpt_model - def insert_message(self, role: str, content: str, index: int = 1): + def insert_message(self, role: str, content: Union[str, List[ChatCompletionContentPartParam]], index: int = 1): """ Inserts a message into the conversation at the specified index, or at index 1 (after system message) if no index is specified. Args: role (str): The role of the message sender (either "user", "system", or "assistant"). - content (str): The content of the message. + content (str | List[ChatCompletionContentPartParam]): The content of the message. index (int): The index at which to insert the message. """ message: ChatCompletionMessageParam if role == "user": message = ChatCompletionUserMessageParam(role="user", content=self.normalize_content(content)) - elif role == "system": - message = ChatCompletionSystemMessageParam(role="system", content=self.normalize_content(content)) - elif role == "assistant": - message = ChatCompletionAssistantMessageParam(role="assistant", content=self.normalize_content(content)) + elif role == "system" and isinstance(content, str): + message = ChatCompletionSystemMessageParam(role="system", content=unicodedata.normalize("NFC", content)) + elif role == "assistant" and isinstance(content, str): + message = ChatCompletionAssistantMessageParam( + role="assistant", content=unicodedata.normalize("NFC", content) + ) else: raise ValueError(f"Invalid role: {role}") self.messages.insert(index, message) @@ -51,5 +55,11 @@ def insert_message(self, role: str, content: str, index: int = 1): def count_tokens_for_message(self, message: dict[str, str]): return num_tokens_from_messages(message, self.model) - def normalize_content(self, content: str): - return unicodedata.normalize("NFC", content) + def normalize_content(self, content: Union[str, List[ChatCompletionContentPartParam]]): + if isinstance(content, str): + return unicodedata.normalize("NFC", content) + elif isinstance(content, list): + for part in content: + if "image_url" not in part: + part["text"] = unicodedata.normalize("NFC", part["text"]) + return content diff --git a/app/backend/core/modelhelper.py b/app/backend/core/modelhelper.py index 178cc0ab5f..5d0d5b1de1 100644 --- a/app/backend/core/modelhelper.py +++ b/app/backend/core/modelhelper.py @@ -9,14 +9,16 @@ "gpt-3.5-turbo-16k": 16000, "gpt-4": 8100, "gpt-4-32k": 32000, + "gpt-4v": 128000, } -AOAI_2_OAI = {"gpt-35-turbo": "gpt-3.5-turbo", "gpt-35-turbo-16k": "gpt-3.5-turbo-16k"} + +AOAI_2_OAI = {"gpt-35-turbo": "gpt-3.5-turbo", "gpt-35-turbo-16k": "gpt-3.5-turbo-16k", "gpt-4v": "gpt-4-turbo-vision"} def get_token_limit(model_id: str) -> int: if model_id not in MODELS_2_TOKEN_LIMITS: - raise ValueError("Expected model gpt-35-turbo and above") + raise ValueError(f"Expected model gpt-35-turbo and above. Received: {model_id}") return MODELS_2_TOKEN_LIMITS[model_id] @@ -34,10 +36,17 @@ def num_tokens_from_messages(message: dict[str, str], model: str) -> int: num_tokens_from_messages(message, model) output: 11 """ + encoding = tiktoken.encoding_for_model(get_oai_chatmodel_tiktok(model)) num_tokens = 2 # For "role" and "content" keys - for value in message.values(): - num_tokens += len(encoding.encode(str(value))) + for key, value in message.items(): + if isinstance(value, list): + for v in value: + # TODO: Update token count for images https://github.com/openai/openai-cookbook/pull/881/files + if isinstance(v, str): + num_tokens += len(encoding.encode(v)) + else: + num_tokens += len(encoding.encode(value)) return num_tokens diff --git a/app/backend/requirements.in b/app/backend/requirements.in index 4316782038..8f41e05196 100644 --- a/app/backend/requirements.in +++ b/app/backend/requirements.in @@ -1,7 +1,7 @@ azure-identity quart quart-cors -openai[datalib]>=1.3.6 +openai[datalib]>=1.3.7 tiktoken azure-search-documents==11.4.0b11 azure-storage-blob @@ -14,3 +14,4 @@ opentelemetry-instrumentation-requests opentelemetry-instrumentation-aiohttp-client msal msal-extensions +azure-keyvault-secrets diff --git a/app/backend/requirements.txt b/app/backend/requirements.txt index f36ebb4ed1..8bf47c44d5 100644 --- a/app/backend/requirements.txt +++ b/app/backend/requirements.txt @@ -21,11 +21,14 @@ asgiref==3.7.2 attrs==23.1.0 # via aiohttp azure-common==1.1.28 - # via azure-search-documents + # via + # azure-keyvault-secrets + # azure-search-documents azure-core==1.29.5 # via # azure-core-tracing-opentelemetry # azure-identity + # azure-keyvault-secrets # azure-monitor-opentelemetry # azure-monitor-opentelemetry-exporter # azure-search-documents @@ -35,7 +38,9 @@ azure-core-tracing-opentelemetry==1.0.0b11 # via azure-monitor-opentelemetry azure-identity==1.15.0 # via -r requirements.in -azure-monitor-opentelemetry==1.1.1 +azure-keyvault-secrets==4.7.0 + # via -r requirements.in +azure-monitor-opentelemetry==1.1.0 # via -r requirements.in azure-monitor-opentelemetry-exporter==1.0.0b19 # via azure-monitor-opentelemetry @@ -62,6 +67,10 @@ click==8.1.7 # flask # quart # uvicorn +colorama==0.4.6 + # via + # click + # tqdm cryptography==41.0.7 # via # azure-identity @@ -104,10 +113,11 @@ idna==3.6 # httpx # requests # yarl -importlib-metadata==6.11.0 +importlib-metadata==6.8.0 # via opentelemetry-api isodate==0.6.1 # via + # azure-keyvault-secrets # azure-search-documents # azure-storage-blob # msrest @@ -124,7 +134,7 @@ markupsafe==2.1.3 # jinja2 # quart # werkzeug -msal==1.26.0 +msal==1.25.0 # via # -r requirements.in # azure-identity @@ -299,6 +309,7 @@ types-pytz==2023.3.1.1 typing-extensions==4.8.0 # via # azure-core + # azure-keyvault-secrets # azure-storage-blob # openai # opentelemetry-sdk @@ -323,7 +334,7 @@ wrapt==1.16.0 # opentelemetry-instrumentation-urllib3 wsproto==1.2.0 # via hypercorn -yarl==1.9.4 +yarl==1.9.3 # via aiohttp zipp==3.17.0 # via importlib-metadata diff --git a/app/frontend/package-lock.json b/app/frontend/package-lock.json index 70a668bc13..3dd4155c25 100644 --- a/app/frontend/package-lock.json +++ b/app/frontend/package-lock.json @@ -9,26 +9,28 @@ "version": "0.0.0", "dependencies": { "@azure/msal-browser": "^3.1.0", - "@azure/msal-react": "^2.0.8", - "@fluentui/react": "^8.112.9", - "@fluentui/react-components": "^9.42.0", - "@fluentui/react-icons": "^2.0.223", + "@azure/msal-react": "^2.0.6", + "@fluentui/react": "^8.112.5", + "@fluentui/react-components": "^9.37.3", + "@fluentui/react-icons": "^2.0.221", "@react-spring/web": "^9.7.3", "dompurify": "^3.0.6", - "ndjson-readablestream": "^1.0.9", + "ndjson-readablestream": "^1.0.7", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.20.1", + "react-router-dom": "^6.18.0", + "react-syntax-highlighter": "^15.5.0", "scheduler": "^0.20.2" }, "devDependencies": { - "@types/dompurify": "^3.0.5", - "@types/react": "^18.2.42", - "@types/react-dom": "^18.2.17", - "@vitejs/plugin-react": "^4.2.1", - "prettier": "^3.1.0", - "typescript": "^5.3.2", - "vite": "^4.4.12" + "@types/dompurify": "^3.0.4", + "@types/react": "^18.2.34", + "@types/react-dom": "^18.2.14", + "@types/react-syntax-highlighter": "^15.5.7", + "@vitejs/plugin-react": "^4.1.1", + "prettier": "^3.0.3", + "typescript": "^5.2.2", + "vite": "^4.5.0" }, "engines": { "node": ">=14.0.0" @@ -36,9 +38,8 @@ }, "node_modules/@ampproject/remapping": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -48,43 +49,43 @@ } }, "node_modules/@azure/msal-browser": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.6.0.tgz", - "integrity": "sha512-FrFBJXRJMyWXjAjg4cUNZwEKktzfzD/YD9+S1kj2ors67hKoveam4aL0bZuCZU/jTiHTn0xDQGQh2ksCMXTXtA==", + "version": "3.4.0", + "license": "MIT", "dependencies": { - "@azure/msal-common": "14.5.0" + "@azure/msal-common": "14.3.0" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "14.5.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.5.0.tgz", - "integrity": "sha512-Gx5rZbiZV/HiZ2nEKfjfAF/qDdZ4/QWxMvMo2jhIFVz528dVKtaZyFAOtsX2Ak8+TQvRsGCaEfuwJFuXB6tu1A==", + "version": "14.3.0", + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-react": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@azure/msal-react/-/msal-react-2.0.8.tgz", - "integrity": "sha512-Kmbq2Mm6vrXfemxf8+q1PWU7dhx8Ck4lB6gXFFDR+Bn1odoLzxksOqm8CKEk+y9Bq1iR54H0raTQ3Avan43oMw==", + "version": "2.0.6", + "license": "MIT", + "dependencies": { + "@rollup/plugin-typescript": "^11.1.0", + "rollup": "^3.20.2" + }, "engines": { "node": ">=10" }, "peerDependencies": { - "@azure/msal-browser": "^3.6.0", + "@azure/msal-browser": "^3.4.0", "react": "^16.8.0 || ^17 || ^18" } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.22.13", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.23.4", + "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" }, "engines": { @@ -92,30 +93,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.22.20", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz", - "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==", + "version": "7.23.2", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.5", - "@babel/parser": "^7.23.5", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.5", - "@babel/types": "^7.23.5", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -131,12 +130,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz", - "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.5", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -147,9 +145,8 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.9", "@babel/helper-validator-option": "^7.22.15", @@ -163,18 +160,16 @@ }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" @@ -185,9 +180,8 @@ }, "node_modules/@babel/helper-hoist-variables": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -197,9 +191,8 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.15" }, @@ -208,10 +201,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -228,18 +220,16 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -249,9 +239,8 @@ }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -260,51 +249,46 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.22.5", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.22.15", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz", - "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==", + "version": "7.23.2", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.5", - "@babel/types": "^7.23.5" + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.22.20", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -315,10 +299,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", - "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", + "version": "7.23.0", "dev": true, + "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -327,10 +310,9 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz", - "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==", + "version": "7.22.5", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -342,10 +324,9 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz", - "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==", + "version": "7.22.5", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -358,8 +339,7 @@ }, "node_modules/@babel/runtime": { "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -369,9 +349,8 @@ }, "node_modules/@babel/template": { "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/parser": "^7.22.15", @@ -382,19 +361,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz", - "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==", + "version": "7.23.2", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.5", - "@babel/types": "^7.23.5", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -403,12 +381,11 @@ } }, "node_modules/@babel/types": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", - "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, @@ -418,373 +395,18 @@ }, "node_modules/@emotion/hash": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", - "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" - }, - "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, "node_modules/@floating-ui/core": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.2.tgz", - "integrity": "sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==", + "version": "1.5.0", + "license": "MIT", "dependencies": { "@floating-ui/utils": "^0.1.3" } }, "node_modules/@floating-ui/dom": { "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", - "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "license": "MIT", "dependencies": { "@floating-ui/core": "^1.4.2", "@floating-ui/utils": "^0.1.3" @@ -792,13 +414,11 @@ }, "node_modules/@floating-ui/utils": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", - "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" + "license": "MIT" }, "node_modules/@fluentui/date-time-utilities": { "version": "8.5.14", - "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-8.5.14.tgz", - "integrity": "sha512-Kc64ZBj0WiaSW/Bsh4fMy9oM2FIk1TgIqBV6+OgOtdKx9cXwLdmgGk8zuQTcuRnwv5WCk2M6wvW1M+eK3sNRGA==", + "license": "MIT", "dependencies": { "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" @@ -806,33 +426,30 @@ }, "node_modules/@fluentui/dom-utilities": { "version": "2.2.12", - "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-2.2.12.tgz", - "integrity": "sha512-safCKQPJTnshYG13/U2Zx1KWhOhU4vl5RAKqW7HEBfLOHds/fAR+EzTvKgO6OgxJq59JAKJvpH2QujkLXZZQ3A==", + "license": "MIT", "dependencies": { "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" } }, "node_modules/@fluentui/font-icons-mdl2": { - "version": "8.5.27", - "resolved": "https://registry.npmjs.org/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.5.27.tgz", - "integrity": "sha512-u6J9SmdWsr3WjC7zog930IWWySA+mxLfIqfyux9oATJQPUs+76juYYbolDTJTvndVEmb+piA7qBhEubUoaXJjQ==", + "version": "8.5.26", + "license": "MIT", "dependencies": { "@fluentui/set-version": "^8.2.12", - "@fluentui/style-utilities": "^8.9.20", - "@fluentui/utilities": "^8.13.21", + "@fluentui/style-utilities": "^8.9.19", + "@fluentui/utilities": "^8.13.20", "tslib": "^2.1.0" } }, "node_modules/@fluentui/foundation-legacy": { - "version": "8.2.47", - "resolved": "https://registry.npmjs.org/@fluentui/foundation-legacy/-/foundation-legacy-8.2.47.tgz", - "integrity": "sha512-El/8/makZh2fqd2YdLSTy3T2oJ3N6WCsPzkud9CdMF98Oby0jny4EAtzjBNRbAwL4/gppOYIIchVuzRL4V2rcw==", + "version": "8.2.46", + "license": "MIT", "dependencies": { "@fluentui/merge-styles": "^8.5.13", "@fluentui/set-version": "^8.2.12", - "@fluentui/style-utilities": "^8.9.20", - "@fluentui/utilities": "^8.13.21", + "@fluentui/style-utilities": "^8.9.19", + "@fluentui/utilities": "^8.13.20", "tslib": "^2.1.0" }, "peerDependencies": { @@ -842,24 +459,21 @@ }, "node_modules/@fluentui/keyboard-key": { "version": "0.4.12", - "resolved": "https://registry.npmjs.org/@fluentui/keyboard-key/-/keyboard-key-0.4.12.tgz", - "integrity": "sha512-9nPglM58ThbOEQ88KijdYl64hiTAQQ0o60HRc0vboibmr41mJ322FoBz5Q5S5QLIEbBZajrAkrDMs3PKW4CCSw==", + "license": "MIT", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@fluentui/keyboard-keys": { "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@fluentui/keyboard-keys/-/keyboard-keys-9.0.7.tgz", - "integrity": "sha512-vaQ+lOveQTdoXJYqDQXWb30udSfTVcIuKk1rV0X0eGAgcHeSDeP1HxMy+OgHOQZH3OiBH4ZYeWxb+tmfiDiygQ==", + "license": "MIT", "dependencies": { "@swc/helpers": "^0.5.1" } }, "node_modules/@fluentui/merge-styles": { "version": "8.5.13", - "resolved": "https://registry.npmjs.org/@fluentui/merge-styles/-/merge-styles-8.5.13.tgz", - "integrity": "sha512-ocgwNlQcQwn5mNlZKFazrFVbYDEQ6BptoW4GyEv6U5TEHE8HKKYuPRf340NXCRGiacSpz3vLkyDjp+L431qUXg==", + "license": "MIT", "dependencies": { "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" @@ -867,29 +481,27 @@ }, "node_modules/@fluentui/priority-overflow": { "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.1.10.tgz", - "integrity": "sha512-EaZrYXqFT15U7scpPw1x9PkKMZP0j2ElR9uwH6ZTrdKWfbUNZ62jEHNy4hLhdj86Pu7MwnXspkExZjBrKcjFbg==", + "license": "MIT", "dependencies": { "@swc/helpers": "^0.5.1" } }, "node_modules/@fluentui/react": { - "version": "8.112.9", - "resolved": "https://registry.npmjs.org/@fluentui/react/-/react-8.112.9.tgz", - "integrity": "sha512-mSu++f/TA+en+pIiWJE8s2+L6TtIdUpULkh4/knsQ+4NTBjvFnve0bK936VBHK8ff6ypLa0HqiQKFIMlQyH/iw==", + "version": "8.112.5", + "license": "MIT", "dependencies": { "@fluentui/date-time-utilities": "^8.5.14", - "@fluentui/font-icons-mdl2": "^8.5.27", - "@fluentui/foundation-legacy": "^8.2.47", + "@fluentui/font-icons-mdl2": "^8.5.26", + "@fluentui/foundation-legacy": "^8.2.46", "@fluentui/merge-styles": "^8.5.13", - "@fluentui/react-focus": "^8.8.34", - "@fluentui/react-hooks": "^8.6.33", - "@fluentui/react-portal-compat-context": "^9.0.10", + "@fluentui/react-focus": "^8.8.33", + "@fluentui/react-hooks": "^8.6.32", + "@fluentui/react-portal-compat-context": "^9.0.9", "@fluentui/react-window-provider": "^2.2.16", "@fluentui/set-version": "^8.2.12", - "@fluentui/style-utilities": "^8.9.20", - "@fluentui/theme": "^2.6.38", - "@fluentui/utilities": "^8.13.21", + "@fluentui/style-utilities": "^8.9.19", + "@fluentui/theme": "^2.6.37", + "@fluentui/utilities": "^8.13.20", "@microsoft/load-themed-styles": "^1.10.26", "tslib": "^2.1.0" }, @@ -901,17 +513,16 @@ } }, "node_modules/@fluentui/react-alert": { - "version": "9.0.0-beta.94", - "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.94.tgz", - "integrity": "sha512-Oae0CqgmvhvepaIKXWFfitt5tnaVzHnsnlk8+YSN6enM23NYaPqyiVQ+r2HMqKfgkJim14SY47A2XYIBS+LGAA==", + "version": "9.0.0-beta.90", + "license": "MIT", "dependencies": { - "@fluentui/react-avatar": "^9.5.48", - "@fluentui/react-button": "^9.3.57", + "@fluentui/react-avatar": "^9.5.44", + "@fluentui/react-button": "^9.3.53", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -924,8 +535,7 @@ }, "node_modules/@fluentui/react-alert/node_modules/@fluentui/react-avatar": { "version": "9.5.48", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.48.tgz", - "integrity": "sha512-qhefSxIRxCHIzJEotbTLmkAERMk1sKN1EZfF25dnMvWzyYPaF4CjizYwtlf0G1eoHTCmyaw88sjzleAmXWar4w==", + "license": "MIT", "dependencies": { "@fluentui/react-badge": "^9.2.15", "@fluentui/react-context-selector": "^9.1.42", @@ -950,8 +560,7 @@ }, "node_modules/@fluentui/react-alert/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -966,8 +575,7 @@ }, "node_modules/@fluentui/react-alert/node_modules/@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", + "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -992,8 +600,7 @@ }, "node_modules/@fluentui/react-aria": { "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.4.0.tgz", - "integrity": "sha512-1tuRswKp1G5WH627ablQDBjrY5gfahZ2uMaPakO01wYazsCb2VGz2hFCUBMhMy+Djh1dmi4AZazAYcJvuQoBSA==", + "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-shared-contexts": "^9.13.0", @@ -1009,36 +616,11 @@ }, "node_modules/@fluentui/react-badge": { "version": "9.2.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.2.15.tgz", - "integrity": "sha512-FdLXZL6NcevqtcvWfX4qfn+X1z6n4UUkNM5iIVo9Y5UQ61dis9W7i6u13Kb8DH2VJOsgmsy0IgDispO1Zh/V3w==", - "dependencies": { - "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", - "@griffel/react": "^1.5.14", - "@swc/helpers": "^0.5.1" - }, - "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.14.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" - } - }, - "node_modules/@fluentui/react-breadcrumb": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.0.2.tgz", - "integrity": "sha512-345t3Hk9Bdr45w0whD574oHBQXdgQFdCc4iopNe+kg7jb51R6JN4SiHu0fWSEPW8vQuvrjNYsjon+UeG1enynA==", + "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.4.0", - "@fluentui/react-button": "^9.3.57", "@fluentui/react-icons": "^2.0.217", "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-link": "^9.2.0", "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", "@fluentui/react-theme": "^9.1.16", "@fluentui/react-utilities": "^9.15.2", "@griffel/react": "^1.5.14", @@ -1052,18 +634,17 @@ } }, "node_modules/@fluentui/react-button": { - "version": "9.3.57", - "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.3.57.tgz", - "integrity": "sha512-HGvmNDgtYfvjBBrbaluwkgOywxYHyhU9X3MzaBTJ9tj/ObS4OIbVGnjpXLKDVPeXAA7Fyxbg6qgAgmiQYKaoJQ==", + "version": "9.3.53", + "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-aria": "^9.4.0", + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -1075,15 +656,14 @@ } }, "node_modules/@fluentui/react-card": { - "version": "9.0.56", - "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.0.56.tgz", - "integrity": "sha512-7ux/zs+ptdYqINDb3vhcVXUm5y3qc7GK0r9uAeywpdU/YRaUBZ+7QSbIAvHCKyO43xfdD3j9GWZFbrcog/AuWg==", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "version": "9.0.52", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -1095,18 +675,17 @@ } }, "node_modules/@fluentui/react-checkbox": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.2.1.tgz", - "integrity": "sha512-fPe2AFe6JSJCAT1qCCNQoLzfy0o6u9cirCuQJLNB8t5+C89FV3XBETB/UCOpIPL1qo5B4zIlKlheldaPrad5TQ==", + "version": "9.1.54", + "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.1.43", + "@fluentui/react-field": "^9.1.40", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-label": "^9.1.51", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.48", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -1118,59 +697,57 @@ } }, "node_modules/@fluentui/react-components": { - "version": "9.42.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.42.0.tgz", - "integrity": "sha512-b8xASrp9ljm0nC0L5ZT4MR1JDSxzjqW1T2IDYcmF3pW9r4qj6NWTScPPlIoxlFxKD/ol8jJZkHvXtADs5zprxQ==", - "dependencies": { - "@fluentui/react-accordion": "^9.3.30", - "@fluentui/react-alert": "9.0.0-beta.94", - "@fluentui/react-avatar": "^9.5.48", - "@fluentui/react-badge": "^9.2.15", - "@fluentui/react-breadcrumb": "^9.0.2", - "@fluentui/react-button": "^9.3.57", - "@fluentui/react-card": "^9.0.56", - "@fluentui/react-checkbox": "^9.2.1", - "@fluentui/react-combobox": "^9.5.32", - "@fluentui/react-dialog": "^9.8.7", - "@fluentui/react-divider": "^9.2.51", - "@fluentui/react-drawer": "^9.0.3", - "@fluentui/react-field": "^9.1.43", - "@fluentui/react-image": "^9.1.48", - "@fluentui/react-infobutton": "9.0.0-beta.78", - "@fluentui/react-infolabel": "^9.0.6", - "@fluentui/react-input": "^9.4.53", - "@fluentui/react-label": "^9.1.51", - "@fluentui/react-link": "^9.2.0", - "@fluentui/react-menu": "^9.12.35", - "@fluentui/react-message-bar": "^9.0.8", - "@fluentui/react-overflow": "^9.1.1", - "@fluentui/react-persona": "^9.2.58", - "@fluentui/react-popover": "^9.8.23", - "@fluentui/react-portal": "^9.4.3", - "@fluentui/react-positioning": "^9.10.2", - "@fluentui/react-progress": "^9.1.53", - "@fluentui/react-provider": "^9.13.1", - "@fluentui/react-radio": "^9.1.58", - "@fluentui/react-select": "^9.1.53", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-skeleton": "^9.0.41", - "@fluentui/react-slider": "^9.1.58", - "@fluentui/react-spinbutton": "^9.2.53", - "@fluentui/react-spinner": "^9.3.31", - "@fluentui/react-switch": "^9.1.58", - "@fluentui/react-table": "^9.10.13", - "@fluentui/react-tabs": "^9.3.59", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-tags": "^9.0.12", - "@fluentui/react-text": "^9.4.0", - "@fluentui/react-textarea": "^9.3.53", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-toast": "^9.3.19", - "@fluentui/react-toolbar": "^9.1.58", - "@fluentui/react-tooltip": "^9.4.1", - "@fluentui/react-tree": "^9.4.15", - "@fluentui/react-utilities": "^9.15.2", - "@fluentui/react-virtualizer": "9.0.0-alpha.59", + "version": "9.37.3", + "license": "MIT", + "dependencies": { + "@fluentui/react-accordion": "^9.3.26", + "@fluentui/react-alert": "9.0.0-beta.90", + "@fluentui/react-avatar": "^9.5.44", + "@fluentui/react-badge": "^9.2.12", + "@fluentui/react-button": "^9.3.53", + "@fluentui/react-card": "^9.0.52", + "@fluentui/react-checkbox": "^9.1.54", + "@fluentui/react-combobox": "^9.5.28", + "@fluentui/react-dialog": "^9.8.2", + "@fluentui/react-divider": "^9.2.48", + "@fluentui/react-drawer": "9.0.0-beta.40", + "@fluentui/react-field": "^9.1.40", + "@fluentui/react-image": "^9.1.45", + "@fluentui/react-infobutton": "9.0.0-beta.74", + "@fluentui/react-infolabel": "^9.0.2", + "@fluentui/react-input": "^9.4.50", + "@fluentui/react-label": "^9.1.48", + "@fluentui/react-link": "^9.1.32", + "@fluentui/react-menu": "^9.12.30", + "@fluentui/react-message-bar": "^9.0.4", + "@fluentui/react-overflow": "^9.0.42", + "@fluentui/react-persona": "^9.2.54", + "@fluentui/react-popover": "^9.8.19", + "@fluentui/react-portal": "^9.3.27", + "@fluentui/react-positioning": "^9.9.23", + "@fluentui/react-progress": "^9.1.50", + "@fluentui/react-provider": "^9.11.1", + "@fluentui/react-radio": "^9.1.54", + "@fluentui/react-select": "^9.1.50", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-skeleton": "^9.0.38", + "@fluentui/react-slider": "^9.1.54", + "@fluentui/react-spinbutton": "^9.2.50", + "@fluentui/react-spinner": "^9.3.28", + "@fluentui/react-switch": "^9.1.54", + "@fluentui/react-table": "^9.10.9", + "@fluentui/react-tabs": "^9.3.55", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-tags": "^9.0.8", + "@fluentui/react-text": "^9.3.45", + "@fluentui/react-textarea": "^9.3.50", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-toast": "^9.3.15", + "@fluentui/react-toolbar": "^9.1.54", + "@fluentui/react-tooltip": "^9.3.20", + "@fluentui/react-tree": "^9.4.11", + "@fluentui/react-utilities": "^9.15.1", + "@fluentui/react-virtualizer": "9.0.0-alpha.55", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -1184,8 +761,7 @@ }, "node_modules/@fluentui/react-components/node_modules/@fluentui/react-accordion": { "version": "9.3.30", - "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.3.30.tgz", - "integrity": "sha512-NLJX/fj/FcrvsMPqmI+2epTvyieR8hfWWEg4pR8JqeSPMDForf/VP285Bn5DZRY8QdIPU+DFpTjGg3mDCMBryw==", + "license": "MIT", "dependencies": { "@fluentui/react-aria": "^9.4.0", "@fluentui/react-context-selector": "^9.1.42", @@ -1208,8 +784,7 @@ }, "node_modules/@fluentui/react-components/node_modules/@fluentui/react-accordion/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -1224,8 +799,7 @@ }, "node_modules/@fluentui/react-components/node_modules/@fluentui/react-avatar": { "version": "9.5.48", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.48.tgz", - "integrity": "sha512-qhefSxIRxCHIzJEotbTLmkAERMk1sKN1EZfF25dnMvWzyYPaF4CjizYwtlf0G1eoHTCmyaw88sjzleAmXWar4w==", + "license": "MIT", "dependencies": { "@fluentui/react-badge": "^9.2.15", "@fluentui/react-context-selector": "^9.1.42", @@ -1250,8 +824,7 @@ }, "node_modules/@fluentui/react-components/node_modules/@fluentui/react-avatar/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -1266,8 +839,7 @@ }, "node_modules/@fluentui/react-components/node_modules/@fluentui/react-combobox": { "version": "9.5.32", - "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.5.32.tgz", - "integrity": "sha512-Gpoa5ZaQCcWe1pfEaFeABw8pLY8Lz6F+BhwrWzgnSqr7NtYBRNvXrvH+t2amCEhEKeukXeDN4cicyR6lVUtF4Q==", + "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-context-selector": "^9.1.42", @@ -1292,8 +864,7 @@ }, "node_modules/@fluentui/react-components/node_modules/@fluentui/react-combobox/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -1308,8 +879,7 @@ }, "node_modules/@fluentui/react-components/node_modules/@fluentui/react-menu": { "version": "9.12.35", - "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.12.35.tgz", - "integrity": "sha512-QjgyTwdo5zx3KZckLnYlI6zo8/xSKBtL0TKQ9/yaQ58v6pSrws8nuJ0bCPUtZmDTrCfYK6tyr3zZNJIjKpLHVA==", + "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -1335,8 +905,7 @@ }, "node_modules/@fluentui/react-components/node_modules/@fluentui/react-menu/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -1351,8 +920,7 @@ }, "node_modules/@fluentui/react-components/node_modules/@fluentui/react-overflow": { "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.1.1.tgz", - "integrity": "sha512-jTvhd10iaNHluzvAg2FTHUtx/fGd/nAwGegO1VxxKNX9ciCpRqgwlbg4fvZ0Em2h+4VBEqRPALkWad/7t9wVnQ==", + "license": "MIT", "dependencies": { "@fluentui/priority-overflow": "^9.1.10", "@fluentui/react-context-selector": "^9.1.42", @@ -1371,8 +939,7 @@ }, "node_modules/@fluentui/react-components/node_modules/@fluentui/react-overflow/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -1387,8 +954,7 @@ }, "node_modules/@fluentui/react-components/node_modules/@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", + "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -1413,8 +979,7 @@ }, "node_modules/@fluentui/react-components/node_modules/@fluentui/react-popover/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -1429,8 +994,7 @@ }, "node_modules/@fluentui/react-components/node_modules/@fluentui/react-radio": { "version": "9.1.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.1.58.tgz", - "integrity": "sha512-sVCfIS3WnGElvpBWKbA5/5yBjtZ5PIOgb/RLlJ2EsYVVumSYlKqqxljF/pLjoXj0lHOUE73c7KLkPI3Gv7vqSw==", + "license": "MIT", "dependencies": { "@fluentui/react-field": "^9.1.43", "@fluentui/react-icons": "^2.0.217", @@ -1453,8 +1017,7 @@ }, "node_modules/@fluentui/react-components/node_modules/@fluentui/react-tabs": { "version": "9.3.59", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.3.59.tgz", - "integrity": "sha512-j621NhgOWBkrhZ8rKkqM4WQxCBtkqk00ckGNkPQGoSOw0kEGjTs8m/1Oai9H4cwJ+CB7CmPYtYdNg8pw5AtEBQ==", + "license": "MIT", "dependencies": { "@fluentui/react-context-selector": "^9.1.42", "@fluentui/react-jsx-runtime": "^9.0.20", @@ -1475,8 +1038,7 @@ }, "node_modules/@fluentui/react-components/node_modules/@fluentui/react-tabs/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -1490,20 +1052,19 @@ } }, "node_modules/@fluentui/react-dialog": { - "version": "9.8.7", - "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.8.7.tgz", - "integrity": "sha512-j6UhUS8nSm4C1FiUYPtdiSFBpClxHlSZODYBTIIPRMUaviAiAAfi7prSRnWPhOgXr8uiXvyxRKOcc77r/DAtPQ==", + "version": "9.8.2", + "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-aria": "^9.4.0", - "@fluentui/react-context-selector": "^9.1.42", + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-context-selector": "^9.1.41", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-portal": "^9.4.3", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.27", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1", "react-transition-group": "^4.4.1" @@ -1517,8 +1078,7 @@ }, "node_modules/@fluentui/react-dialog/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -1532,14 +1092,13 @@ } }, "node_modules/@fluentui/react-divider": { - "version": "9.2.51", - "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.2.51.tgz", - "integrity": "sha512-uJajHl/QIOuzLl/Xb9Q1vMO8CjvPOYx6XmBdNYakowxc7E0pPfJnnbWETVIp6gl6gbrY/GQN7OWQ90yYebvZow==", + "version": "9.2.48", + "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -1551,17 +1110,16 @@ } }, "node_modules/@fluentui/react-drawer": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.0.3.tgz", - "integrity": "sha512-NuB79EJ+/nHtm9DO2Xc4e84/r/trt06ADZHR+a3/TMAfl2zwvz8PuGiFLIxvpqHL8s34DjblbZHu0GyQSu/GcA==", - "dependencies": { - "@fluentui/react-dialog": "^9.8.7", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-motion-preview": "^0.5.3", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "version": "9.0.0-beta.40", + "license": "MIT", + "dependencies": { + "@fluentui/react-dialog": "^9.8.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-motion-preview": "^0.5.0", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -1574,8 +1132,7 @@ }, "node_modules/@fluentui/react-field": { "version": "9.1.43", - "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.1.43.tgz", - "integrity": "sha512-6LtwctiJsITgPotp+ztXNUAFbLh93Nk/SSy8RYFOjj3qAyliSjrqBEv5qJjo0cAunKFguyZKDWlVZSuYGBne3w==", + "license": "MIT", "dependencies": { "@fluentui/react-context-selector": "^9.1.42", "@fluentui/react-icons": "^2.0.217", @@ -1595,8 +1152,7 @@ }, "node_modules/@fluentui/react-field/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -1610,15 +1166,14 @@ } }, "node_modules/@fluentui/react-focus": { - "version": "8.8.34", - "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-8.8.34.tgz", - "integrity": "sha512-GNi8MqQRdoIaYpiz5kWIQaX1mNzFz3X+UShezA3gohrXnkONUvrPBuFDyYgQXoqk67juEZ+oGxl2PpKjz08HCA==", + "version": "8.8.33", + "license": "MIT", "dependencies": { "@fluentui/keyboard-key": "^0.4.12", "@fluentui/merge-styles": "^8.5.13", "@fluentui/set-version": "^8.2.12", - "@fluentui/style-utilities": "^8.9.20", - "@fluentui/utilities": "^8.13.21", + "@fluentui/style-utilities": "^8.9.19", + "@fluentui/utilities": "^8.13.20", "tslib": "^2.1.0" }, "peerDependencies": { @@ -1627,13 +1182,12 @@ } }, "node_modules/@fluentui/react-hooks": { - "version": "8.6.33", - "resolved": "https://registry.npmjs.org/@fluentui/react-hooks/-/react-hooks-8.6.33.tgz", - "integrity": "sha512-3P9RA34QhhjFwHwCvfOqMDgCwvks4hgMsEGvQVTdrcya4uskxBx4FqCLzoMxkXcAJjJCiTJmPx/mZQqQpgoyoA==", + "version": "8.6.32", + "license": "MIT", "dependencies": { "@fluentui/react-window-provider": "^2.2.16", "@fluentui/set-version": "^8.2.12", - "@fluentui/utilities": "^8.13.21", + "@fluentui/utilities": "^8.13.20", "tslib": "^2.1.0" }, "peerDependencies": { @@ -1642,9 +1196,8 @@ } }, "node_modules/@fluentui/react-icons": { - "version": "2.0.223", - "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.223.tgz", - "integrity": "sha512-nKE4y2e9DilNfly2Z5CSMBG2aOFZlGG9SJsw7UZmZu00acqWKEO09YAuHIDXlp6moYgCHF96MpZFDPU9sjbrwg==", + "version": "2.0.221", + "license": "MIT", "dependencies": { "@griffel/react": "^1.0.0", "tslib": "^2.1.0" @@ -1654,14 +1207,13 @@ } }, "node_modules/@fluentui/react-image": { - "version": "9.1.48", - "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.1.48.tgz", - "integrity": "sha512-Hi+73hWoB4YtS95vP9BU9PJ3Z91TKTFS9CwMjliSy5qyjvsy62zIlfYL9wbwUzjUhKHjpaoXF7DExSYn1eyjGQ==", + "version": "9.1.45", + "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -1673,17 +1225,16 @@ } }, "node_modules/@fluentui/react-infobutton": { - "version": "9.0.0-beta.78", - "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.78.tgz", - "integrity": "sha512-XBOn8xyypSHB+m+SP2Xxj+aX9vh+EII0mHbAwmNVVQTOqNHfP0QircEhU/4KhEIS7B32aNOpX0LJXsh7TYcuhw==", + "version": "9.0.0-beta.74", + "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-label": "^9.1.51", - "@fluentui/react-popover": "^9.8.23", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.48", + "@fluentui/react-popover": "^9.8.19", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -1696,8 +1247,7 @@ }, "node_modules/@fluentui/react-infobutton/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -1712,8 +1262,7 @@ }, "node_modules/@fluentui/react-infobutton/node_modules/@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", + "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -1737,17 +1286,16 @@ } }, "node_modules/@fluentui/react-infolabel": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.0.6.tgz", - "integrity": "sha512-KAkd3Q4jkt58i3aTs9KXmCRaN+ML/OcXxD1E1aoX9+MIDFA3aBa+qRLH8x4iAAvm/x8xf7MP2ePE/lcDQM9vQQ==", + "version": "9.0.2", + "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-label": "^9.1.51", - "@fluentui/react-popover": "^9.8.23", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.48", + "@fluentui/react-popover": "^9.8.19", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -1760,8 +1308,7 @@ }, "node_modules/@fluentui/react-infolabel/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -1776,8 +1323,7 @@ }, "node_modules/@fluentui/react-infolabel/node_modules/@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", + "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -1801,15 +1347,14 @@ } }, "node_modules/@fluentui/react-input": { - "version": "9.4.53", - "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.4.53.tgz", - "integrity": "sha512-+I7qReeCRPFRhe1Kmfy53bmmkvoFviwIACziOEKqDkMz7Jy0DiIBzrDgCcSRd4PoAc+6GZcwBL/OAzDqukdjWQ==", - "dependencies": { - "@fluentui/react-field": "^9.1.43", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "version": "9.4.50", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.1.40", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -1822,8 +1367,7 @@ }, "node_modules/@fluentui/react-jsx-runtime": { "version": "9.0.20", - "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.0.20.tgz", - "integrity": "sha512-wFRi78pTun8yy8ufYS5BqY4OKWYB9RPEcSHLMJDbD+CDxqflff3Hvq9VCjB3iRImpYuxwFvJF8XH4mDD1WV5Zw==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1", @@ -1836,8 +1380,7 @@ }, "node_modules/@fluentui/react-label": { "version": "9.1.51", - "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.1.51.tgz", - "integrity": "sha512-kwRHUu5h7kQ4jqXkZ29u2xr8ScEAzZL3ERvlm5zmPMPfnzoU9Gbez8jRxzVKLsfoWDvqJw1PVpY6shBWDJYnfw==", + "license": "MIT", "dependencies": { "@fluentui/react-jsx-runtime": "^9.0.20", "@fluentui/react-shared-contexts": "^9.13.0", @@ -1854,16 +1397,15 @@ } }, "node_modules/@fluentui/react-link": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.2.0.tgz", - "integrity": "sha512-iFHIE4MxdTZRIA2pPr792EKAuBh6RD9M6OaLr6x92IooErXU5bh9mkkXWHZ8Rpw37mp90XjBljCkzAJKuZDxdQ==", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "version": "9.1.32", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -1875,16 +1417,15 @@ } }, "node_modules/@fluentui/react-message-bar": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.0.8.tgz", - "integrity": "sha512-VT/+MstwqdGAdw7WqvJlx+r0PmC0CDYikqdXQBhhTH7iRD2ZmcoTn8wkyJs9OqXyyghW6Y94kT9cB5rZmRaroQ==", + "version": "9.0.4", + "license": "MIT", "dependencies": { - "@fluentui/react-button": "^9.3.57", + "@fluentui/react-button": "^9.3.53", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1", "react-transition-group": "^4.4.1" @@ -1897,14 +1438,13 @@ } }, "node_modules/@fluentui/react-motion-preview": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@fluentui/react-motion-preview/-/react-motion-preview-0.5.3.tgz", - "integrity": "sha512-/lyYg5TtUZev3H3Gu1OtVNr6iucLuKuT/mszAWSAqxwMBRVgs7Z1wjUiQzUgn8+B7iGCg8EdaBuIbgI15FvLNg==", + "version": "0.5.0", + "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -1916,16 +1456,15 @@ } }, "node_modules/@fluentui/react-persona": { - "version": "9.2.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.2.58.tgz", - "integrity": "sha512-hrzih0MgldvG7SZF609SkBYxvY2eMFJLtk0DXLbryHseB/47dY4VrM3/RiTAXkQeMv6ljtPmNBrsbLqUwmxomg==", - "dependencies": { - "@fluentui/react-avatar": "^9.5.48", - "@fluentui/react-badge": "^9.2.15", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "version": "9.2.54", + "license": "MIT", + "dependencies": { + "@fluentui/react-avatar": "^9.5.44", + "@fluentui/react-badge": "^9.2.12", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -1938,8 +1477,7 @@ }, "node_modules/@fluentui/react-persona/node_modules/@fluentui/react-avatar": { "version": "9.5.48", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.48.tgz", - "integrity": "sha512-qhefSxIRxCHIzJEotbTLmkAERMk1sKN1EZfF25dnMvWzyYPaF4CjizYwtlf0G1eoHTCmyaw88sjzleAmXWar4w==", + "license": "MIT", "dependencies": { "@fluentui/react-badge": "^9.2.15", "@fluentui/react-context-selector": "^9.1.42", @@ -1964,8 +1502,7 @@ }, "node_modules/@fluentui/react-persona/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -1980,8 +1517,7 @@ }, "node_modules/@fluentui/react-persona/node_modules/@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", + "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -2006,8 +1542,7 @@ }, "node_modules/@fluentui/react-portal": { "version": "9.4.3", - "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.4.3.tgz", - "integrity": "sha512-VR/vXUxHwWXDx/u7SbxFspikLR7LBRG5BEfQvyrQVnlYQ/GHRY/izia6ncdsIRBhg049xSaeIFQSYY0ng9mQ8g==", + "license": "MIT", "dependencies": { "@fluentui/react-shared-contexts": "^9.13.0", "@fluentui/react-tabster": "^9.15.0", @@ -2024,9 +1559,8 @@ } }, "node_modules/@fluentui/react-portal-compat-context": { - "version": "9.0.10", - "resolved": "https://registry.npmjs.org/@fluentui/react-portal-compat-context/-/react-portal-compat-context-9.0.10.tgz", - "integrity": "sha512-l38C+tGb76yyFQ9sxUrY8DDyp2hoYru3pISFivPitFgkP6nqlnZPNd8yPE48RuVWjMhTKQ/1uCdE6ymBH9wBZQ==", + "version": "9.0.9", + "license": "MIT", "dependencies": { "@swc/helpers": "^0.5.1" }, @@ -2037,8 +1571,7 @@ }, "node_modules/@fluentui/react-positioning": { "version": "9.10.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.10.2.tgz", - "integrity": "sha512-EP9ZgKTYw8BkiqgwxRoGLH3T7H/5ig+fcJ5l9rAX8XGelsV/HEo+28GXE529NapdFZSqtxM7v4fczcP0lrFkgA==", + "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.2.0", "@fluentui/react-shared-contexts": "^9.13.0", @@ -2056,15 +1589,14 @@ } }, "node_modules/@fluentui/react-progress": { - "version": "9.1.53", - "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.1.53.tgz", - "integrity": "sha512-h3eKrAWryz1dlY8Kr2PXrNUeX02nwpINt7LzuE2nq544Nj1aHXIjnuhgZbtuxItWweqCCuO1PGHLXDRugmWs9g==", - "dependencies": { - "@fluentui/react-field": "^9.1.43", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "version": "9.1.50", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.1.40", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -2076,16 +1608,15 @@ } }, "node_modules/@fluentui/react-provider": { - "version": "9.13.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.13.1.tgz", - "integrity": "sha512-sl6ztjJ3bdzb6cvlTKoUsw7AErijrTNgVY/KWO8StkRQShozWNnbklF6U0340xEh9KezRChG0ugGrajyDYq6Uw==", + "version": "9.11.1", + "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/core": "^1.14.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" @@ -2098,16 +1629,15 @@ } }, "node_modules/@fluentui/react-select": { - "version": "9.1.53", - "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.1.53.tgz", - "integrity": "sha512-yRUMz+eD9GKI9jjga09sA/brn09V0+Vzb8vzc01DE3ibUsuQeXoY6MrPUhD17EMQ7U2Ka3XEgTAn5BkUqn45KA==", + "version": "9.1.50", + "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.1.43", + "@fluentui/react-field": "^9.1.40", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -2120,8 +1650,7 @@ }, "node_modules/@fluentui/react-shared-contexts": { "version": "9.13.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.13.0.tgz", - "integrity": "sha512-1KeSxrIW9kYPA7Ug0p4Tym/oqWANkuQS7GfGY7BiibrtB10/ViDs9ZwVw2A9D0JgiPLJU9MZY2Jl7TH5aiC0Vw==", + "license": "MIT", "dependencies": { "@fluentui/react-theme": "^9.1.16", "@swc/helpers": "^0.5.1" @@ -2132,15 +1661,14 @@ } }, "node_modules/@fluentui/react-skeleton": { - "version": "9.0.41", - "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.0.41.tgz", - "integrity": "sha512-NXic/FmmO3eutQRECT9n88nGFYbSzMCrdLFmEpGR1YLLP+Pz4RXrLPy1GnsSLjiNTkteKSdVHZu9Ow8zVm3Tjw==", - "dependencies": { - "@fluentui/react-field": "^9.1.43", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "version": "9.0.38", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.1.40", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -2152,16 +1680,15 @@ } }, "node_modules/@fluentui/react-slider": { - "version": "9.1.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.1.58.tgz", - "integrity": "sha512-LblD67Fgxdu3CIarIHutIsvXAXZnJVZyj6P3gAn+Af0GU/XTA7Lk2fiGfd9/rBgyqdj6A+8XpkYtcS52NHyFWg==", - "dependencies": { - "@fluentui/react-field": "^9.1.43", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "version": "9.1.54", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.1.40", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -2173,17 +1700,16 @@ } }, "node_modules/@fluentui/react-spinbutton": { - "version": "9.2.53", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.2.53.tgz", - "integrity": "sha512-fJ/8ZMFsH3M0kWqPYm7uO+EARyV6vU1lQyj/riSzkKUOFBsRE8TBegyftvy+62dWP+iz+xY3LneuaC/T2aFGZg==", + "version": "9.2.50", + "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-field": "^9.1.43", + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-field": "^9.1.40", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -2195,15 +1721,14 @@ } }, "node_modules/@fluentui/react-spinner": { - "version": "9.3.31", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.3.31.tgz", - "integrity": "sha512-Bh8n3jv/jhHRReA2wiIa1ojkMwUSdDKOgE9Su4MiyTER86RTTh3kVkfwA7pe6FcvyHjuu8HI+OzaQ+9WkyOMjA==", - "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-label": "^9.1.51", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "version": "9.3.28", + "license": "MIT", + "dependencies": { + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.48", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -2215,18 +1740,17 @@ } }, "node_modules/@fluentui/react-switch": { - "version": "9.1.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.1.58.tgz", - "integrity": "sha512-8b9ZFt4FQ/GAbx5xg5ZtgofkMMU9gDPB+5F/jchM/PCz00N3OtLIu9kzQvR+FbuzZkMHxSSnHd9fDzrH9mEL3g==", + "version": "9.1.54", + "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.1.43", + "@fluentui/react-field": "^9.1.40", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-label": "^9.1.51", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.48", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -2238,22 +1762,21 @@ } }, "node_modules/@fluentui/react-table": { - "version": "9.10.13", - "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.10.13.tgz", - "integrity": "sha512-XYWG4TGkhQn2F4/J+p4QqxFX6S5K/g+9LdgQ+r/RWwQZw0l8apSNQ94rKFJc2M4TVbmnx1tOLtTylFP6wItgqA==", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-aria": "^9.4.0", - "@fluentui/react-avatar": "^9.5.48", - "@fluentui/react-checkbox": "^9.2.1", - "@fluentui/react-context-selector": "^9.1.42", + "version": "9.10.9", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-avatar": "^9.5.44", + "@fluentui/react-checkbox": "^9.1.54", + "@fluentui/react-context-selector": "^9.1.41", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-radio": "^9.1.58", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-radio": "^9.1.54", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -2266,8 +1789,7 @@ }, "node_modules/@fluentui/react-table/node_modules/@fluentui/react-avatar": { "version": "9.5.48", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.48.tgz", - "integrity": "sha512-qhefSxIRxCHIzJEotbTLmkAERMk1sKN1EZfF25dnMvWzyYPaF4CjizYwtlf0G1eoHTCmyaw88sjzleAmXWar4w==", + "license": "MIT", "dependencies": { "@fluentui/react-badge": "^9.2.15", "@fluentui/react-context-selector": "^9.1.42", @@ -2292,8 +1814,7 @@ }, "node_modules/@fluentui/react-table/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -2308,8 +1829,7 @@ }, "node_modules/@fluentui/react-table/node_modules/@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", + "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -2334,8 +1854,7 @@ }, "node_modules/@fluentui/react-table/node_modules/@fluentui/react-radio": { "version": "9.1.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.1.58.tgz", - "integrity": "sha512-sVCfIS3WnGElvpBWKbA5/5yBjtZ5PIOgb/RLlJ2EsYVVumSYlKqqxljF/pLjoXj0lHOUE73c7KLkPI3Gv7vqSw==", + "license": "MIT", "dependencies": { "@fluentui/react-field": "^9.1.43", "@fluentui/react-icons": "^2.0.217", @@ -2358,8 +1877,7 @@ }, "node_modules/@fluentui/react-tabster": { "version": "9.15.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.15.0.tgz", - "integrity": "sha512-MS7M/eEoXalw3kQIjErbJHinnhCXWNC5NS2gU54zFvoHUX1Q4dckG7SOgJsChd1xLmruKxsmitJaaY2DmXY+zw==", + "license": "MIT", "dependencies": { "@fluentui/react-shared-contexts": "^9.13.0", "@fluentui/react-theme": "^9.1.16", @@ -2377,19 +1895,18 @@ } }, "node_modules/@fluentui/react-tags": { - "version": "9.0.12", - "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.0.12.tgz", - "integrity": "sha512-Br3I0yQ4FPSNT3cMOkTdRdjSlrMk2yXRE7h12fWXmO710sT2Klvu8SsGXrRgsWV/Uo/eFwkKV+k3w8Mn/rd7Aw==", + "version": "9.0.8", + "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-aria": "^9.4.0", - "@fluentui/react-avatar": "^9.5.48", + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-avatar": "^9.5.44", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -2402,8 +1919,7 @@ }, "node_modules/@fluentui/react-tags/node_modules/@fluentui/react-avatar": { "version": "9.5.48", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.48.tgz", - "integrity": "sha512-qhefSxIRxCHIzJEotbTLmkAERMk1sKN1EZfF25dnMvWzyYPaF4CjizYwtlf0G1eoHTCmyaw88sjzleAmXWar4w==", + "license": "MIT", "dependencies": { "@fluentui/react-badge": "^9.2.15", "@fluentui/react-context-selector": "^9.1.42", @@ -2428,8 +1944,7 @@ }, "node_modules/@fluentui/react-tags/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -2444,8 +1959,7 @@ }, "node_modules/@fluentui/react-tags/node_modules/@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", + "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -2469,14 +1983,13 @@ } }, "node_modules/@fluentui/react-text": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.4.0.tgz", - "integrity": "sha512-cGV369NOmzYMmuutRASX4ALmlVmr3yMv5yZB+s6IrWuZUNCwlVeUalqgqmj7ek9sprUPOd32lUoJu9M/sm7TYw==", + "version": "9.3.45", + "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -2488,15 +2001,14 @@ } }, "node_modules/@fluentui/react-textarea": { - "version": "9.3.53", - "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.3.53.tgz", - "integrity": "sha512-S36cLUmitzDCy83PLnlgWlrPzeWJqnbvP0Tn4ld1si39xXMPEp9F9wLitgOAhFTsLZPcj0gZ2vS5EYrR24YvtA==", - "dependencies": { - "@fluentui/react-field": "^9.1.43", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "version": "9.3.50", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.1.40", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -2509,27 +2021,25 @@ }, "node_modules/@fluentui/react-theme": { "version": "9.1.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.1.16.tgz", - "integrity": "sha512-QK2dGE5aQXN1UGdiEmGKpYGP3tHXIchLvFf8DEEOWnF4XBc9SiEPNFYkvLMJjHxZmDz4D670rsOPe0r5jFDEKQ==", + "license": "MIT", "dependencies": { "@fluentui/tokens": "1.0.0-alpha.13", "@swc/helpers": "^0.5.1" } }, "node_modules/@fluentui/react-toast": { - "version": "9.3.19", - "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.3.19.tgz", - "integrity": "sha512-usWAX7sRwJ2OV+oUfWbveKFg1nf0HDdTNMSFkxcUrtE2FNrIgPTOYKF9JHXhyFcTtu55Hu/9CrkL3Sqr422PYw==", + "version": "9.3.15", + "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-aria": "^9.4.0", + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-portal": "^9.4.3", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.27", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1", "react-transition-group": "^4.4.1" @@ -2542,19 +2052,18 @@ } }, "node_modules/@fluentui/react-toolbar": { - "version": "9.1.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.1.58.tgz", - "integrity": "sha512-0vtwxM1se2BBmLNSYSF/fBOjZaQW7rXv1La3TKbAtXVtoT3iu5Kx0SAlyPEjFNLuHMTtLiJCETdfjrs0EhwDlw==", - "dependencies": { - "@fluentui/react-button": "^9.3.57", - "@fluentui/react-context-selector": "^9.1.42", - "@fluentui/react-divider": "^9.2.51", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-radio": "^9.1.58", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "version": "9.1.54", + "license": "MIT", + "dependencies": { + "@fluentui/react-button": "^9.3.53", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-divider": "^9.2.48", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-radio": "^9.1.54", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -2567,8 +2076,7 @@ }, "node_modules/@fluentui/react-toolbar/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -2583,8 +2091,7 @@ }, "node_modules/@fluentui/react-toolbar/node_modules/@fluentui/react-radio": { "version": "9.1.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.1.58.tgz", - "integrity": "sha512-sVCfIS3WnGElvpBWKbA5/5yBjtZ5PIOgb/RLlJ2EsYVVumSYlKqqxljF/pLjoXj0lHOUE73c7KLkPI3Gv7vqSw==", + "license": "MIT", "dependencies": { "@fluentui/react-field": "^9.1.43", "@fluentui/react-icons": "^2.0.217", @@ -2607,8 +2114,7 @@ }, "node_modules/@fluentui/react-tooltip": { "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.4.1.tgz", - "integrity": "sha512-0BlpBHZpPsfBsujLBKOBAP26Vh0NnTbWd2QKnxUDGCeFq69KxXuRdchyXOJRP3qwEyKP3gRS13IYFKibNKp2sw==", + "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-jsx-runtime": "^9.0.20", @@ -2629,23 +2135,22 @@ } }, "node_modules/@fluentui/react-tree": { - "version": "9.4.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.4.15.tgz", - "integrity": "sha512-xZ49CjPB4HuTi0sNBP1qVcaaFYF5T7ZNSES+oC2li8HuaqwVH/4mSfn2ccoAkgaFxoG8U39EkH5NiaCZXab4yg==", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-aria": "^9.4.0", - "@fluentui/react-avatar": "^9.5.48", - "@fluentui/react-button": "^9.3.57", - "@fluentui/react-checkbox": "^9.2.1", - "@fluentui/react-context-selector": "^9.1.42", + "version": "9.4.11", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-avatar": "^9.5.44", + "@fluentui/react-button": "^9.3.53", + "@fluentui/react-checkbox": "^9.1.54", + "@fluentui/react-context-selector": "^9.1.41", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-radio": "^9.1.58", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-radio": "^9.1.54", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -2658,8 +2163,7 @@ }, "node_modules/@fluentui/react-tree/node_modules/@fluentui/react-avatar": { "version": "9.5.48", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.48.tgz", - "integrity": "sha512-qhefSxIRxCHIzJEotbTLmkAERMk1sKN1EZfF25dnMvWzyYPaF4CjizYwtlf0G1eoHTCmyaw88sjzleAmXWar4w==", + "license": "MIT", "dependencies": { "@fluentui/react-badge": "^9.2.15", "@fluentui/react-context-selector": "^9.1.42", @@ -2684,8 +2188,7 @@ }, "node_modules/@fluentui/react-tree/node_modules/@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", + "license": "MIT", "dependencies": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -2700,8 +2203,7 @@ }, "node_modules/@fluentui/react-tree/node_modules/@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", + "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -2726,8 +2228,7 @@ }, "node_modules/@fluentui/react-tree/node_modules/@fluentui/react-radio": { "version": "9.1.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.1.58.tgz", - "integrity": "sha512-sVCfIS3WnGElvpBWKbA5/5yBjtZ5PIOgb/RLlJ2EsYVVumSYlKqqxljF/pLjoXj0lHOUE73c7KLkPI3Gv7vqSw==", + "license": "MIT", "dependencies": { "@fluentui/react-field": "^9.1.43", "@fluentui/react-icons": "^2.0.217", @@ -2750,8 +2251,7 @@ }, "node_modules/@fluentui/react-utilities": { "version": "9.15.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.15.2.tgz", - "integrity": "sha512-Oq016/dHu7PXW5x/2RtLts1ULiyd7JctXFdvi9IacLs/J1nLfg2KSBzzLqKxtdyVvgbZ9Mlu6kPITbFtF9dsIA==", + "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.7", "@swc/helpers": "^0.5.1" @@ -2762,13 +2262,12 @@ } }, "node_modules/@fluentui/react-virtualizer": { - "version": "9.0.0-alpha.59", - "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.59.tgz", - "integrity": "sha512-LVBYuPe+5Dmrk9fUBaRPxSZBfs3RgMFTaioaMWNMt6eHmTPqoOOcajfCb3ZHN79mP9oZq9d5m9GnaRQcOSNNwg==", + "version": "9.0.0-alpha.55", + "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, @@ -2781,8 +2280,7 @@ }, "node_modules/@fluentui/react-window-provider": { "version": "2.2.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-2.2.16.tgz", - "integrity": "sha512-4gkUMSAUjo3cgCGt+0VvTbMy9qbF6zo/cmmfYtfqbSFtXz16lKixSCMIf66gXdKjovqRGVFC/XibqfrXM2QLuw==", + "license": "MIT", "dependencies": { "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" @@ -2794,33 +2292,30 @@ }, "node_modules/@fluentui/set-version": { "version": "8.2.12", - "resolved": "https://registry.npmjs.org/@fluentui/set-version/-/set-version-8.2.12.tgz", - "integrity": "sha512-I4uXIg9xkL2Heotf1+7CyGcHQskdtMSH0B5mSV0TL3w7WI2qpnzrpKuP2Kq6DHZN6Xrsg4ORFNJSjLxq/s9cUQ==", + "license": "MIT", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@fluentui/style-utilities": { - "version": "8.9.20", - "resolved": "https://registry.npmjs.org/@fluentui/style-utilities/-/style-utilities-8.9.20.tgz", - "integrity": "sha512-oj0ghn21DnqCardlcEp+zob3IEAfA/Z7ZjzuYqlHuPUItwRqGmpr1wErssRC4R1kHsH6gq9ALxVgMa4/FvdzGg==", + "version": "8.9.19", + "license": "MIT", "dependencies": { "@fluentui/merge-styles": "^8.5.13", "@fluentui/set-version": "^8.2.12", - "@fluentui/theme": "^2.6.38", - "@fluentui/utilities": "^8.13.21", + "@fluentui/theme": "^2.6.37", + "@fluentui/utilities": "^8.13.20", "@microsoft/load-themed-styles": "^1.10.26", "tslib": "^2.1.0" } }, "node_modules/@fluentui/theme": { - "version": "2.6.38", - "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-2.6.38.tgz", - "integrity": "sha512-LObK/mZOQFb3aTcDlKBSLpPV0BOp5BOuNqg0Wps51b1RlisI6oS3STmw3BkcAe6jOi/p4cgLpwHMkYHh2o8PmQ==", + "version": "2.6.37", + "license": "MIT", "dependencies": { "@fluentui/merge-styles": "^8.5.13", "@fluentui/set-version": "^8.2.12", - "@fluentui/utilities": "^8.13.21", + "@fluentui/utilities": "^8.13.20", "tslib": "^2.1.0" }, "peerDependencies": { @@ -2830,16 +2325,14 @@ }, "node_modules/@fluentui/tokens": { "version": "1.0.0-alpha.13", - "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.13.tgz", - "integrity": "sha512-IzYysTTBkAH7tQZxYKpzhxYnTJkvwXhjhTOpmERgnqTFifHTP8/vaQjJAAm7dI/9zlDx1oN+y/I+KzL9bDLHZQ==", + "license": "MIT", "dependencies": { "@swc/helpers": "^0.5.1" } }, "node_modules/@fluentui/utilities": { - "version": "8.13.21", - "resolved": "https://registry.npmjs.org/@fluentui/utilities/-/utilities-8.13.21.tgz", - "integrity": "sha512-YPWsRAL1jgbPxf+wAY8p6LjIG4em0NReqgU8ZCFnQx9wpQbe/ZRjQcaU06pD1tYtRGvyCutwhnWDaQHDw843Xg==", + "version": "8.13.20", + "license": "MIT", "dependencies": { "@fluentui/dom-utilities": "^2.2.12", "@fluentui/merge-styles": "^8.5.13", @@ -2852,12 +2345,11 @@ } }, "node_modules/@griffel/core": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.14.1.tgz", - "integrity": "sha512-KQ6yueap1zff9TJrn7MdfSAHDMDVP6Ec97gnpCi4NOeKiyCyT13MwPCmkkK0o/poaV1f9MdHhUTQZCpK0QtxzQ==", + "version": "1.14.4", + "license": "MIT", "dependencies": { "@emotion/hash": "^0.9.0", - "@griffel/style-types": "^1.0.1", + "@griffel/style-types": "^1.0.2", "csstype": "^3.1.2", "rtl-css-js": "^1.16.1", "stylis": "^4.2.0", @@ -2865,11 +2357,10 @@ } }, "node_modules/@griffel/react": { - "version": "1.5.14", - "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.14.tgz", - "integrity": "sha512-/x6cy6xMtpow1r+Zrw/hMKHwo+imFAgKaZ3A/+M8GyT3L9AFxK1Kyg4JvARPjLBAn9Q2q5dkCr78jOguuVSScg==", + "version": "1.5.17", + "license": "MIT", "dependencies": { - "@griffel/core": "^1.14.1", + "@griffel/core": "^1.14.4", "tslib": "^2.1.0" }, "peerDependencies": { @@ -2877,18 +2368,16 @@ } }, "node_modules/@griffel/style-types": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@griffel/style-types/-/style-types-1.0.1.tgz", - "integrity": "sha512-nhVryiNHhoBt5L93tfDYGoE4KtWvhBvY7y1yR1n6WKpRjasgw3GI2pBwiMiVt68bycnyvXIvcJjJTr0QM22VLQ==", + "version": "1.0.2", + "license": "MIT", "dependencies": { "csstype": "^3.1.2" } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -2899,48 +2388,47 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.0", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.18", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true, + "license": "MIT" + }, "node_modules/@microsoft/load-themed-styles": { "version": "1.10.295", - "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.295.tgz", - "integrity": "sha512-W+IzEBw8a6LOOfRJM02dTT7BDZijxm+Z7lhtOAz1+y9vQm1Kdz9jlAO+qCEKsfxtUOmKilW8DIRqFw2aUgKeGg==" + "license": "MIT" }, "node_modules/@react-spring/animated": { "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.3.tgz", - "integrity": "sha512-5CWeNJt9pNgyvuSzQH+uy2pvTg8Y4/OisoscZIR8/ZNLIOI+CatFBhGZpDGTF/OzdNFsAoGk3wiUYTwoJ0YIvw==", + "license": "MIT", "dependencies": { "@react-spring/shared": "~9.7.3", "@react-spring/types": "~9.7.3" @@ -2951,8 +2439,7 @@ }, "node_modules/@react-spring/core": { "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.3.tgz", - "integrity": "sha512-IqFdPVf3ZOC1Cx7+M0cXf4odNLxDC+n7IN3MDcVCTIOSBfqEcBebSv+vlY5AhM0zw05PDbjKrNmBpzv/AqpjnQ==", + "license": "MIT", "dependencies": { "@react-spring/animated": "~9.7.3", "@react-spring/shared": "~9.7.3", @@ -2968,8 +2455,7 @@ }, "node_modules/@react-spring/shared": { "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.3.tgz", - "integrity": "sha512-NEopD+9S5xYyQ0pGtioacLhL2luflh6HACSSDUZOwLHoxA5eku1UPuqcJqjwSD6luKjjLfiLOspxo43FUHKKSA==", + "license": "MIT", "dependencies": { "@react-spring/types": "~9.7.3" }, @@ -2979,13 +2465,11 @@ }, "node_modules/@react-spring/types": { "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.3.tgz", - "integrity": "sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw==" + "license": "MIT" }, "node_modules/@react-spring/web": { "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.3.tgz", - "integrity": "sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg==", + "license": "MIT", "dependencies": { "@react-spring/animated": "~9.7.3", "@react-spring/core": "~9.7.3", @@ -2998,26 +2482,67 @@ } }, "node_modules/@remix-run/router": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.13.1.tgz", - "integrity": "sha512-so+DHzZKsoOcoXrILB4rqDkMDy7NLMErRdOxvzvOKb507YINKUP4Di+shbTZDhSE/pBZ+vr7XGIpcOO0VLSA+Q==", + "version": "1.11.0", + "license": "MIT", "engines": { "node": ">=14.0.0" } }, + "node_modules/@rollup/plugin-typescript": { + "version": "11.1.3", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.4", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, "node_modules/@swc/helpers": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz", - "integrity": "sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "version": "7.20.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -3027,51 +2552,56 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.7", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", - "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "version": "7.6.6", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "version": "7.4.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", - "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "version": "7.20.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" } }, "node_modules/@types/dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==", + "version": "3.0.4", "dev": true, + "license": "MIT", "dependencies": { "@types/trusted-types": "*" } }, + "node_modules/@types/estree": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, "node_modules/@types/prop-types": { "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "license": "MIT" }, "node_modules/@types/react": { - "version": "18.2.42", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.42.tgz", - "integrity": "sha512-c1zEr96MjakLYus/wPnuWDo1/zErfdU9rNsIGmE+NV71nx88FG9Ttgo5dqorXTu/LImX2f63WBP986gJkMPNbA==", + "version": "18.2.34", + "license": "MIT", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -3079,48 +2609,55 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.17", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.17.tgz", - "integrity": "sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==", + "version": "18.2.14", + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-syntax-highlighter": { + "version": "15.5.9", + "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*" } }, "node_modules/@types/scheduler": { "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + "license": "MIT" }, "node_modules/@types/trusted-types": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", - "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "2.0.7", + "license": "MIT" }, "node_modules/@vitejs/plugin-react": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", - "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "version": "4.1.1", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.23.5", - "@babel/plugin-transform-react-jsx-self": "^7.23.3", - "@babel/plugin-transform-react-jsx-source": "^7.23.3", - "@types/babel__core": "^7.20.5", + "@babel/core": "^7.23.2", + "@babel/plugin-transform-react-jsx-self": "^7.22.5", + "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "@types/babel__core": "^7.20.3", "react-refresh": "^0.14.0" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0" + "vite": "^4.2.0" } }, "node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -3129,9 +2666,7 @@ } }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.22.1", "dev": true, "funding": [ { @@ -3147,10 +2682,11 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", - "node-releases": "^2.0.14", + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.13" }, "bin": { @@ -3161,9 +2697,7 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001566", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", - "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", + "version": "1.0.30001547", "dev": true, "funding": [ { @@ -3178,13 +2712,13 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -3194,37 +2728,64 @@ "node": ">=4" } }, + "node_modules/character-entities": { + "version": "1.2.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/csstype": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "license": "MIT" }, "node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -3239,8 +2800,7 @@ }, "node_modules/dom-helpers": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" @@ -3248,21 +2808,18 @@ }, "node_modules/dompurify": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.6.tgz", - "integrity": "sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==" + "license": "(MPL-2.0 OR Apache-2.0)" }, "node_modules/electron-to-chromium": { - "version": "1.4.605", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.605.tgz", - "integrity": "sha512-V52j+P5z6cdRqTjPR/bYNxx7ETCHIkm5VIGuyCy3CMrfSnbEpIlLnk5oHmZo7gYvDfh2TfHeanB6rawyQ23ktg==", - "dev": true + "version": "1.4.549", + "dev": true, + "license": "ISC" }, "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "version": "0.18.11", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -3270,107 +2827,195 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/android-arm": "0.18.11", + "@esbuild/android-arm64": "0.18.11", + "@esbuild/android-x64": "0.18.11", + "@esbuild/darwin-arm64": "0.18.11", + "@esbuild/darwin-x64": "0.18.11", + "@esbuild/freebsd-arm64": "0.18.11", + "@esbuild/freebsd-x64": "0.18.11", + "@esbuild/linux-arm": "0.18.11", + "@esbuild/linux-arm64": "0.18.11", + "@esbuild/linux-ia32": "0.18.11", + "@esbuild/linux-loong64": "0.18.11", + "@esbuild/linux-mips64el": "0.18.11", + "@esbuild/linux-ppc64": "0.18.11", + "@esbuild/linux-riscv64": "0.18.11", + "@esbuild/linux-s390x": "0.18.11", + "@esbuild/linux-x64": "0.18.11", + "@esbuild/netbsd-x64": "0.18.11", + "@esbuild/openbsd-x64": "0.18.11", + "@esbuild/sunos-x64": "0.18.11", + "@esbuild/win32-arm64": "0.18.11", + "@esbuild/win32-ia32": "0.18.11", + "@esbuild/win32-x64": "0.18.11" } }, "node_modules/escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/fault": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/floating-ui-devtools": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/floating-ui-devtools/-/floating-ui-devtools-0.1.2.tgz", - "integrity": "sha512-6QZH99AdZx9by0fJt2AI0axAeOxLpcHgpmaJXYxJWLCblv9iKz7i4lcLKwYvPA9B5brkLwehgjlbi2kI6uq/Eg==", "peerDependencies": { "@floating-ui/dom": ">=1.0.0 <2.0.0" } }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/format": { + "version": "0.2.2", "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=0.4.x" } }, + "node_modules/function-bind": { + "version": "1.1.1", + "license": "MIT" + }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/has": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "license": "MIT" }, "node_modules/jsesc": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -3380,9 +3025,8 @@ }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -3392,13 +3036,11 @@ }, "node_modules/keyborg": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/keyborg/-/keyborg-2.2.0.tgz", - "integrity": "sha512-yQa1dz+FilQ+w3JM6GH2V/wnFeQhfbkK9stvs3UiraW3GOEO7zrOBBh0ZuHsrzeN1xx6v7P5EpA2JtOUUnfN/w==" + "license": "MIT" }, "node_modules/loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -3406,25 +3048,33 @@ "loose-envify": "cli.js" } }, + "node_modules/lowlight": { + "version": "1.20.0", + "license": "MIT", + "dependencies": { + "fault": "^1.0.0", + "highlight.js": "~10.7.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, "node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.6", "dev": true, "funding": [ { @@ -3432,6 +3082,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -3440,34 +3091,58 @@ } }, "node_modules/ndjson-readablestream": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/ndjson-readablestream/-/ndjson-readablestream-1.0.9.tgz", - "integrity": "sha512-D1BWU6lgZzLpF7wd55B5Q4+2iupGo9Y/jEtWX9FJIWgZ7ceWwfFFddJ+qEuuABx4nqUF94tQmusO0By4AyetPg==" + "version": "1.0.7", + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true + "version": "2.0.13", + "dev": true, + "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/parse-entities": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.31", "dev": true, "funding": [ { @@ -3483,8 +3158,9 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -3493,10 +3169,9 @@ } }, "node_modules/prettier": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", - "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", + "version": "3.0.3", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -3507,10 +3182,16 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/prismjs": { + "version": "1.29.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/prop-types": { "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -3519,13 +3200,22 @@ }, "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "license": "MIT" + }, + "node_modules/property-information": { + "version": "5.6.0", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/react": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -3535,8 +3225,7 @@ }, "node_modules/react-dom": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -3547,32 +3236,28 @@ }, "node_modules/react-dom/node_modules/scheduler": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } }, "node_modules/react-is": { "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "license": "MIT" }, "node_modules/react-refresh": { "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-router": { - "version": "6.20.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.20.1.tgz", - "integrity": "sha512-ccvLrB4QeT5DlaxSFFYi/KR8UMQ4fcD8zBcR71Zp1kaYTC5oJKYAp1cbavzGrogwxca+ubjkd7XjFZKBW8CxPA==", + "version": "6.18.0", + "license": "MIT", "dependencies": { - "@remix-run/router": "1.13.1" + "@remix-run/router": "1.11.0" }, "engines": { "node": ">=14.0.0" @@ -3582,12 +3267,11 @@ } }, "node_modules/react-router-dom": { - "version": "6.20.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.20.1.tgz", - "integrity": "sha512-npzfPWcxfQN35psS7rJgi/EW0Gx6EsNjfdJSAk73U/HqMEJZ2k/8puxfwHFgDQhBGmS3+sjnGbMdMSV45axPQw==", + "version": "6.18.0", + "license": "MIT", "dependencies": { - "@remix-run/router": "1.13.1", - "react-router": "6.20.1" + "@remix-run/router": "1.11.0", + "react-router": "6.18.0" }, "engines": { "node": ">=14.0.0" @@ -3597,10 +3281,23 @@ "react-dom": ">=16.8" } }, + "node_modules/react-syntax-highlighter": { + "version": "15.5.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.3.1", + "highlight.js": "^10.4.1", + "lowlight": "^1.17.0", + "prismjs": "^1.27.0", + "refractor": "^3.6.0" + }, + "peerDependencies": { + "react": ">= 0.14.0" + } + }, "node_modules/react-transition-group": { "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -3612,16 +3309,48 @@ "react-dom": ">=16.6.0" } }, + "node_modules/refractor": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "hastscript": "^6.0.0", + "parse-entities": "^2.0.0", + "prismjs": "~1.27.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/refractor/node_modules/prismjs": { + "version": "1.27.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/regenerator-runtime": { "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.4", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/rollup": { "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", - "dev": true, + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -3635,16 +3364,14 @@ }, "node_modules/rtl-css-js": { "version": "1.16.1", - "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", - "integrity": "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.1.2" } }, "node_modules/scheduler": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -3652,32 +3379,36 @@ }, "node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/source-map-js": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/stylis": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", - "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + "license": "MIT" }, "node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -3685,10 +3416,19 @@ "node": ">=4" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/tabster": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/tabster/-/tabster-5.1.0.tgz", - "integrity": "sha512-1wYn3gL9GCa+9p+oyRF3gjVVi83Q51mAXhgugoQ9RT/h/Ci1i4455Zc/hO268b9w37Na7MOETTytPawi8XC98w==", + "license": "MIT", "dependencies": { "keyborg": "^2.2.0", "tslib": "^2.3.1" @@ -3696,23 +3436,19 @@ }, "node_modules/to-fast-properties": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tslib": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "license": "0BSD" }, "node_modules/typescript": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz", - "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==", - "dev": true, + "version": "5.2.2", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3723,8 +3459,6 @@ }, "node_modules/update-browserslist-db": { "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -3740,6 +3474,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -3753,8 +3488,7 @@ }, "node_modules/use-disposable": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/use-disposable/-/use-disposable-1.0.2.tgz", - "integrity": "sha512-UMaXVlV77dWOu4GqAFNjRzHzowYKUKbJBQfCexvahrYeIz4OkUYUjna4Tjjdf92NH8Nm8J7wEfFRgTIwYjO5jg==", + "license": "MIT", "peerDependencies": { "@types/react": ">=16.8.0 <19.0.0", "@types/react-dom": ">=16.8.0 <19.0.0", @@ -3764,9 +3498,8 @@ }, "node_modules/vite": { "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", - "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.18.10", "postcss": "^8.4.27", @@ -3817,18 +3550,22 @@ } } }, + "node_modules/xtend": { + "version": "4.0.2", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" } }, "dependencies": { "@ampproject/remapping": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.3.0", @@ -3836,56 +3573,47 @@ } }, "@azure/msal-browser": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.6.0.tgz", - "integrity": "sha512-FrFBJXRJMyWXjAjg4cUNZwEKktzfzD/YD9+S1kj2ors67hKoveam4aL0bZuCZU/jTiHTn0xDQGQh2ksCMXTXtA==", + "version": "3.4.0", "requires": { - "@azure/msal-common": "14.5.0" + "@azure/msal-common": "14.3.0" } }, "@azure/msal-common": { - "version": "14.5.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.5.0.tgz", - "integrity": "sha512-Gx5rZbiZV/HiZ2nEKfjfAF/qDdZ4/QWxMvMo2jhIFVz528dVKtaZyFAOtsX2Ak8+TQvRsGCaEfuwJFuXB6tu1A==" + "version": "14.3.0" }, "@azure/msal-react": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@azure/msal-react/-/msal-react-2.0.8.tgz", - "integrity": "sha512-Kmbq2Mm6vrXfemxf8+q1PWU7dhx8Ck4lB6gXFFDR+Bn1odoLzxksOqm8CKEk+y9Bq1iR54H0raTQ3Avan43oMw==", - "requires": {} + "version": "2.0.6", + "requires": { + "@rollup/plugin-typescript": "^11.1.0", + "rollup": "^3.20.2" + } }, "@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.22.13", "dev": true, "requires": { - "@babel/highlight": "^7.23.4", + "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" } }, "@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.22.20", "dev": true }, "@babel/core": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz", - "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==", + "version": "7.23.2", "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.5", - "@babel/parser": "^7.23.5", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.5", - "@babel/types": "^7.23.5", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -3894,12 +3622,10 @@ } }, "@babel/generator": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz", - "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==", + "version": "7.23.0", "dev": true, "requires": { - "@babel/types": "^7.23.5", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -3907,8 +3633,6 @@ }, "@babel/helper-compilation-targets": { "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "requires": { "@babel/compat-data": "^7.22.9", @@ -3920,14 +3644,10 @@ }, "@babel/helper-environment-visitor": { "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true }, "@babel/helper-function-name": { "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "requires": { "@babel/template": "^7.22.15", @@ -3936,8 +3656,6 @@ }, "@babel/helper-hoist-variables": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "requires": { "@babel/types": "^7.22.5" @@ -3945,17 +3663,13 @@ }, "@babel/helper-module-imports": { "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "requires": { "@babel/types": "^7.22.15" } }, "@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.23.0", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.22.20", @@ -3967,14 +3681,10 @@ }, "@babel/helper-plugin-utils": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true }, "@babel/helper-simple-access": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "requires": { "@babel/types": "^7.22.5" @@ -3982,46 +3692,34 @@ }, "@babel/helper-split-export-declaration": { "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "requires": { "@babel/types": "^7.22.5" } }, "@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.22.5", "dev": true }, "@babel/helper-validator-identifier": { "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.22.15", "dev": true }, "@babel/helpers": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz", - "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==", + "version": "7.23.2", "dev": true, "requires": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.5", - "@babel/types": "^7.23.5" + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" } }, "@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.22.20", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.22.20", @@ -4030,24 +3728,18 @@ } }, "@babel/parser": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", - "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", + "version": "7.23.0", "dev": true }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz", - "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==", + "version": "7.22.5", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz", - "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==", + "version": "7.22.5", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -4055,16 +3747,12 @@ }, "@babel/runtime": { "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", "requires": { "regenerator-runtime": "^0.14.0" } }, "@babel/template": { "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "requires": { "@babel/code-frame": "^7.22.13", @@ -4073,219 +3761,51 @@ } }, "@babel/traverse": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz", - "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==", + "version": "7.23.2", "dev": true, "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.5", - "@babel/types": "^7.23.5", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", - "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", + "version": "7.23.0", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, "@emotion/hash": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", - "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" - }, - "@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "dev": true, - "optional": true + "version": "0.9.1" }, "@floating-ui/core": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.2.tgz", - "integrity": "sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==", + "version": "1.5.0", "requires": { "@floating-ui/utils": "^0.1.3" } }, "@floating-ui/dom": { "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", - "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", "requires": { "@floating-ui/core": "^1.4.2", "@floating-ui/utils": "^0.1.3" } }, "@floating-ui/utils": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", - "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" + "version": "0.1.6" }, "@fluentui/date-time-utilities": { "version": "8.5.14", - "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-8.5.14.tgz", - "integrity": "sha512-Kc64ZBj0WiaSW/Bsh4fMy9oM2FIk1TgIqBV6+OgOtdKx9cXwLdmgGk8zuQTcuRnwv5WCk2M6wvW1M+eK3sNRGA==", "requires": { "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" @@ -4293,56 +3813,44 @@ }, "@fluentui/dom-utilities": { "version": "2.2.12", - "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-2.2.12.tgz", - "integrity": "sha512-safCKQPJTnshYG13/U2Zx1KWhOhU4vl5RAKqW7HEBfLOHds/fAR+EzTvKgO6OgxJq59JAKJvpH2QujkLXZZQ3A==", "requires": { "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" } }, "@fluentui/font-icons-mdl2": { - "version": "8.5.27", - "resolved": "https://registry.npmjs.org/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.5.27.tgz", - "integrity": "sha512-u6J9SmdWsr3WjC7zog930IWWySA+mxLfIqfyux9oATJQPUs+76juYYbolDTJTvndVEmb+piA7qBhEubUoaXJjQ==", + "version": "8.5.26", "requires": { "@fluentui/set-version": "^8.2.12", - "@fluentui/style-utilities": "^8.9.20", - "@fluentui/utilities": "^8.13.21", + "@fluentui/style-utilities": "^8.9.19", + "@fluentui/utilities": "^8.13.20", "tslib": "^2.1.0" } }, "@fluentui/foundation-legacy": { - "version": "8.2.47", - "resolved": "https://registry.npmjs.org/@fluentui/foundation-legacy/-/foundation-legacy-8.2.47.tgz", - "integrity": "sha512-El/8/makZh2fqd2YdLSTy3T2oJ3N6WCsPzkud9CdMF98Oby0jny4EAtzjBNRbAwL4/gppOYIIchVuzRL4V2rcw==", + "version": "8.2.46", "requires": { "@fluentui/merge-styles": "^8.5.13", "@fluentui/set-version": "^8.2.12", - "@fluentui/style-utilities": "^8.9.20", - "@fluentui/utilities": "^8.13.21", + "@fluentui/style-utilities": "^8.9.19", + "@fluentui/utilities": "^8.13.20", "tslib": "^2.1.0" } }, "@fluentui/keyboard-key": { "version": "0.4.12", - "resolved": "https://registry.npmjs.org/@fluentui/keyboard-key/-/keyboard-key-0.4.12.tgz", - "integrity": "sha512-9nPglM58ThbOEQ88KijdYl64hiTAQQ0o60HRc0vboibmr41mJ322FoBz5Q5S5QLIEbBZajrAkrDMs3PKW4CCSw==", "requires": { "tslib": "^2.1.0" } }, "@fluentui/keyboard-keys": { "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@fluentui/keyboard-keys/-/keyboard-keys-9.0.7.tgz", - "integrity": "sha512-vaQ+lOveQTdoXJYqDQXWb30udSfTVcIuKk1rV0X0eGAgcHeSDeP1HxMy+OgHOQZH3OiBH4ZYeWxb+tmfiDiygQ==", "requires": { "@swc/helpers": "^0.5.1" } }, "@fluentui/merge-styles": { "version": "8.5.13", - "resolved": "https://registry.npmjs.org/@fluentui/merge-styles/-/merge-styles-8.5.13.tgz", - "integrity": "sha512-ocgwNlQcQwn5mNlZKFazrFVbYDEQ6BptoW4GyEv6U5TEHE8HKKYuPRf340NXCRGiacSpz3vLkyDjp+L431qUXg==", "requires": { "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" @@ -4350,53 +3858,45 @@ }, "@fluentui/priority-overflow": { "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.1.10.tgz", - "integrity": "sha512-EaZrYXqFT15U7scpPw1x9PkKMZP0j2ElR9uwH6ZTrdKWfbUNZ62jEHNy4hLhdj86Pu7MwnXspkExZjBrKcjFbg==", "requires": { "@swc/helpers": "^0.5.1" } }, "@fluentui/react": { - "version": "8.112.9", - "resolved": "https://registry.npmjs.org/@fluentui/react/-/react-8.112.9.tgz", - "integrity": "sha512-mSu++f/TA+en+pIiWJE8s2+L6TtIdUpULkh4/knsQ+4NTBjvFnve0bK936VBHK8ff6ypLa0HqiQKFIMlQyH/iw==", + "version": "8.112.5", "requires": { "@fluentui/date-time-utilities": "^8.5.14", - "@fluentui/font-icons-mdl2": "^8.5.27", - "@fluentui/foundation-legacy": "^8.2.47", + "@fluentui/font-icons-mdl2": "^8.5.26", + "@fluentui/foundation-legacy": "^8.2.46", "@fluentui/merge-styles": "^8.5.13", - "@fluentui/react-focus": "^8.8.34", - "@fluentui/react-hooks": "^8.6.33", - "@fluentui/react-portal-compat-context": "^9.0.10", + "@fluentui/react-focus": "^8.8.33", + "@fluentui/react-hooks": "^8.6.32", + "@fluentui/react-portal-compat-context": "^9.0.9", "@fluentui/react-window-provider": "^2.2.16", "@fluentui/set-version": "^8.2.12", - "@fluentui/style-utilities": "^8.9.20", - "@fluentui/theme": "^2.6.38", - "@fluentui/utilities": "^8.13.21", + "@fluentui/style-utilities": "^8.9.19", + "@fluentui/theme": "^2.6.37", + "@fluentui/utilities": "^8.13.20", "@microsoft/load-themed-styles": "^1.10.26", "tslib": "^2.1.0" } }, "@fluentui/react-alert": { - "version": "9.0.0-beta.94", - "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.94.tgz", - "integrity": "sha512-Oae0CqgmvhvepaIKXWFfitt5tnaVzHnsnlk8+YSN6enM23NYaPqyiVQ+r2HMqKfgkJim14SY47A2XYIBS+LGAA==", + "version": "9.0.0-beta.90", "requires": { - "@fluentui/react-avatar": "^9.5.48", - "@fluentui/react-button": "^9.3.57", + "@fluentui/react-avatar": "^9.5.44", + "@fluentui/react-button": "^9.3.53", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, "dependencies": { "@fluentui/react-avatar": { "version": "9.5.48", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.48.tgz", - "integrity": "sha512-qhefSxIRxCHIzJEotbTLmkAERMk1sKN1EZfF25dnMvWzyYPaF4CjizYwtlf0G1eoHTCmyaw88sjzleAmXWar4w==", "requires": { "@fluentui/react-badge": "^9.2.15", "@fluentui/react-context-selector": "^9.1.42", @@ -4414,8 +3914,6 @@ }, "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -4423,8 +3921,6 @@ }, "@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", "requires": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -4444,8 +3940,6 @@ }, "@fluentui/react-aria": { "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.4.0.tgz", - "integrity": "sha512-1tuRswKp1G5WH627ablQDBjrY5gfahZ2uMaPakO01wYazsCb2VGz2hFCUBMhMy+Djh1dmi4AZazAYcJvuQoBSA==", "requires": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-shared-contexts": "^9.13.0", @@ -4455,30 +3949,10 @@ }, "@fluentui/react-badge": { "version": "9.2.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.2.15.tgz", - "integrity": "sha512-FdLXZL6NcevqtcvWfX4qfn+X1z6n4UUkNM5iIVo9Y5UQ61dis9W7i6u13Kb8DH2VJOsgmsy0IgDispO1Zh/V3w==", - "requires": { - "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", - "@griffel/react": "^1.5.14", - "@swc/helpers": "^0.5.1" - } - }, - "@fluentui/react-breadcrumb": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.0.2.tgz", - "integrity": "sha512-345t3Hk9Bdr45w0whD574oHBQXdgQFdCc4iopNe+kg7jb51R6JN4SiHu0fWSEPW8vQuvrjNYsjon+UeG1enynA==", "requires": { - "@fluentui/react-aria": "^9.4.0", - "@fluentui/react-button": "^9.3.57", "@fluentui/react-icons": "^2.0.217", "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-link": "^9.2.0", "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", "@fluentui/react-theme": "^9.1.16", "@fluentui/react-utilities": "^9.15.2", "@griffel/react": "^1.5.14", @@ -4486,115 +3960,104 @@ } }, "@fluentui/react-button": { - "version": "9.3.57", - "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.3.57.tgz", - "integrity": "sha512-HGvmNDgtYfvjBBrbaluwkgOywxYHyhU9X3MzaBTJ9tj/ObS4OIbVGnjpXLKDVPeXAA7Fyxbg6qgAgmiQYKaoJQ==", + "version": "9.3.53", "requires": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-aria": "^9.4.0", + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-card": { - "version": "9.0.56", - "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.0.56.tgz", - "integrity": "sha512-7ux/zs+ptdYqINDb3vhcVXUm5y3qc7GK0r9uAeywpdU/YRaUBZ+7QSbIAvHCKyO43xfdD3j9GWZFbrcog/AuWg==", + "version": "9.0.52", "requires": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-checkbox": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.2.1.tgz", - "integrity": "sha512-fPe2AFe6JSJCAT1qCCNQoLzfy0o6u9cirCuQJLNB8t5+C89FV3XBETB/UCOpIPL1qo5B4zIlKlheldaPrad5TQ==", + "version": "9.1.54", "requires": { - "@fluentui/react-field": "^9.1.43", + "@fluentui/react-field": "^9.1.40", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-label": "^9.1.51", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.48", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-components": { - "version": "9.42.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.42.0.tgz", - "integrity": "sha512-b8xASrp9ljm0nC0L5ZT4MR1JDSxzjqW1T2IDYcmF3pW9r4qj6NWTScPPlIoxlFxKD/ol8jJZkHvXtADs5zprxQ==", + "version": "9.37.3", "requires": { - "@fluentui/react-accordion": "^9.3.30", - "@fluentui/react-alert": "9.0.0-beta.94", - "@fluentui/react-avatar": "^9.5.48", - "@fluentui/react-badge": "^9.2.15", - "@fluentui/react-breadcrumb": "^9.0.2", - "@fluentui/react-button": "^9.3.57", - "@fluentui/react-card": "^9.0.56", - "@fluentui/react-checkbox": "^9.2.1", - "@fluentui/react-combobox": "^9.5.32", - "@fluentui/react-dialog": "^9.8.7", - "@fluentui/react-divider": "^9.2.51", - "@fluentui/react-drawer": "^9.0.3", - "@fluentui/react-field": "^9.1.43", - "@fluentui/react-image": "^9.1.48", - "@fluentui/react-infobutton": "9.0.0-beta.78", - "@fluentui/react-infolabel": "^9.0.6", - "@fluentui/react-input": "^9.4.53", - "@fluentui/react-label": "^9.1.51", - "@fluentui/react-link": "^9.2.0", - "@fluentui/react-menu": "^9.12.35", - "@fluentui/react-message-bar": "^9.0.8", - "@fluentui/react-overflow": "^9.1.1", - "@fluentui/react-persona": "^9.2.58", - "@fluentui/react-popover": "^9.8.23", - "@fluentui/react-portal": "^9.4.3", - "@fluentui/react-positioning": "^9.10.2", - "@fluentui/react-progress": "^9.1.53", - "@fluentui/react-provider": "^9.13.1", - "@fluentui/react-radio": "^9.1.58", - "@fluentui/react-select": "^9.1.53", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-skeleton": "^9.0.41", - "@fluentui/react-slider": "^9.1.58", - "@fluentui/react-spinbutton": "^9.2.53", - "@fluentui/react-spinner": "^9.3.31", - "@fluentui/react-switch": "^9.1.58", - "@fluentui/react-table": "^9.10.13", - "@fluentui/react-tabs": "^9.3.59", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-tags": "^9.0.12", - "@fluentui/react-text": "^9.4.0", - "@fluentui/react-textarea": "^9.3.53", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-toast": "^9.3.19", - "@fluentui/react-toolbar": "^9.1.58", - "@fluentui/react-tooltip": "^9.4.1", - "@fluentui/react-tree": "^9.4.15", - "@fluentui/react-utilities": "^9.15.2", - "@fluentui/react-virtualizer": "9.0.0-alpha.59", + "@fluentui/react-accordion": "^9.3.26", + "@fluentui/react-alert": "9.0.0-beta.90", + "@fluentui/react-avatar": "^9.5.44", + "@fluentui/react-badge": "^9.2.12", + "@fluentui/react-button": "^9.3.53", + "@fluentui/react-card": "^9.0.52", + "@fluentui/react-checkbox": "^9.1.54", + "@fluentui/react-combobox": "^9.5.28", + "@fluentui/react-dialog": "^9.8.2", + "@fluentui/react-divider": "^9.2.48", + "@fluentui/react-drawer": "9.0.0-beta.40", + "@fluentui/react-field": "^9.1.40", + "@fluentui/react-image": "^9.1.45", + "@fluentui/react-infobutton": "9.0.0-beta.74", + "@fluentui/react-infolabel": "^9.0.2", + "@fluentui/react-input": "^9.4.50", + "@fluentui/react-label": "^9.1.48", + "@fluentui/react-link": "^9.1.32", + "@fluentui/react-menu": "^9.12.30", + "@fluentui/react-message-bar": "^9.0.4", + "@fluentui/react-overflow": "^9.0.42", + "@fluentui/react-persona": "^9.2.54", + "@fluentui/react-popover": "^9.8.19", + "@fluentui/react-portal": "^9.3.27", + "@fluentui/react-positioning": "^9.9.23", + "@fluentui/react-progress": "^9.1.50", + "@fluentui/react-provider": "^9.11.1", + "@fluentui/react-radio": "^9.1.54", + "@fluentui/react-select": "^9.1.50", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-skeleton": "^9.0.38", + "@fluentui/react-slider": "^9.1.54", + "@fluentui/react-spinbutton": "^9.2.50", + "@fluentui/react-spinner": "^9.3.28", + "@fluentui/react-switch": "^9.1.54", + "@fluentui/react-table": "^9.10.9", + "@fluentui/react-tabs": "^9.3.55", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-tags": "^9.0.8", + "@fluentui/react-text": "^9.3.45", + "@fluentui/react-textarea": "^9.3.50", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-toast": "^9.3.15", + "@fluentui/react-toolbar": "^9.1.54", + "@fluentui/react-tooltip": "^9.3.20", + "@fluentui/react-tree": "^9.4.11", + "@fluentui/react-utilities": "^9.15.1", + "@fluentui/react-virtualizer": "9.0.0-alpha.55", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, "dependencies": { "@fluentui/react-accordion": { "version": "9.3.30", - "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.3.30.tgz", - "integrity": "sha512-NLJX/fj/FcrvsMPqmI+2epTvyieR8hfWWEg4pR8JqeSPMDForf/VP285Bn5DZRY8QdIPU+DFpTjGg3mDCMBryw==", "requires": { "@fluentui/react-aria": "^9.4.0", "@fluentui/react-context-selector": "^9.1.42", @@ -4610,8 +4073,6 @@ "dependencies": { "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -4621,8 +4082,6 @@ }, "@fluentui/react-avatar": { "version": "9.5.48", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.48.tgz", - "integrity": "sha512-qhefSxIRxCHIzJEotbTLmkAERMk1sKN1EZfF25dnMvWzyYPaF4CjizYwtlf0G1eoHTCmyaw88sjzleAmXWar4w==", "requires": { "@fluentui/react-badge": "^9.2.15", "@fluentui/react-context-selector": "^9.1.42", @@ -4640,8 +4099,6 @@ "dependencies": { "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -4651,8 +4108,6 @@ }, "@fluentui/react-combobox": { "version": "9.5.32", - "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.5.32.tgz", - "integrity": "sha512-Gpoa5ZaQCcWe1pfEaFeABw8pLY8Lz6F+BhwrWzgnSqr7NtYBRNvXrvH+t2amCEhEKeukXeDN4cicyR6lVUtF4Q==", "requires": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-context-selector": "^9.1.42", @@ -4670,8 +4125,6 @@ "dependencies": { "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -4681,8 +4134,6 @@ }, "@fluentui/react-menu": { "version": "9.12.35", - "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.12.35.tgz", - "integrity": "sha512-QjgyTwdo5zx3KZckLnYlI6zo8/xSKBtL0TKQ9/yaQ58v6pSrws8nuJ0bCPUtZmDTrCfYK6tyr3zZNJIjKpLHVA==", "requires": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -4701,8 +4152,6 @@ "dependencies": { "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -4712,8 +4161,6 @@ }, "@fluentui/react-overflow": { "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.1.1.tgz", - "integrity": "sha512-jTvhd10iaNHluzvAg2FTHUtx/fGd/nAwGegO1VxxKNX9ciCpRqgwlbg4fvZ0Em2h+4VBEqRPALkWad/7t9wVnQ==", "requires": { "@fluentui/priority-overflow": "^9.1.10", "@fluentui/react-context-selector": "^9.1.42", @@ -4725,8 +4172,6 @@ "dependencies": { "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -4736,8 +4181,6 @@ }, "@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", "requires": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -4755,8 +4198,6 @@ "dependencies": { "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -4766,8 +4207,6 @@ }, "@fluentui/react-radio": { "version": "9.1.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.1.58.tgz", - "integrity": "sha512-sVCfIS3WnGElvpBWKbA5/5yBjtZ5PIOgb/RLlJ2EsYVVumSYlKqqxljF/pLjoXj0lHOUE73c7KLkPI3Gv7vqSw==", "requires": { "@fluentui/react-field": "^9.1.43", "@fluentui/react-icons": "^2.0.217", @@ -4783,8 +4222,6 @@ }, "@fluentui/react-tabs": { "version": "9.3.59", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.3.59.tgz", - "integrity": "sha512-j621NhgOWBkrhZ8rKkqM4WQxCBtkqk00ckGNkPQGoSOw0kEGjTs8m/1Oai9H4cwJ+CB7CmPYtYdNg8pw5AtEBQ==", "requires": { "@fluentui/react-context-selector": "^9.1.42", "@fluentui/react-jsx-runtime": "^9.0.20", @@ -4798,8 +4235,6 @@ "dependencies": { "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -4809,21 +4244,19 @@ } } }, - "@fluentui/react-dialog": { - "version": "9.8.7", - "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.8.7.tgz", - "integrity": "sha512-j6UhUS8nSm4C1FiUYPtdiSFBpClxHlSZODYBTIIPRMUaviAiAAfi7prSRnWPhOgXr8uiXvyxRKOcc77r/DAtPQ==", - "requires": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-aria": "^9.4.0", - "@fluentui/react-context-selector": "^9.1.42", + "@fluentui/react-dialog": { + "version": "9.8.2", + "requires": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-context-selector": "^9.1.41", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-portal": "^9.4.3", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.27", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1", "react-transition-group": "^4.4.1" @@ -4831,8 +4264,6 @@ "dependencies": { "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -4841,38 +4272,32 @@ } }, "@fluentui/react-divider": { - "version": "9.2.51", - "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.2.51.tgz", - "integrity": "sha512-uJajHl/QIOuzLl/Xb9Q1vMO8CjvPOYx6XmBdNYakowxc7E0pPfJnnbWETVIp6gl6gbrY/GQN7OWQ90yYebvZow==", + "version": "9.2.48", "requires": { - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-drawer": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.0.3.tgz", - "integrity": "sha512-NuB79EJ+/nHtm9DO2Xc4e84/r/trt06ADZHR+a3/TMAfl2zwvz8PuGiFLIxvpqHL8s34DjblbZHu0GyQSu/GcA==", + "version": "9.0.0-beta.40", "requires": { - "@fluentui/react-dialog": "^9.8.7", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-motion-preview": "^0.5.3", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-dialog": "^9.8.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-motion-preview": "^0.5.0", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-field": { "version": "9.1.43", - "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.1.43.tgz", - "integrity": "sha512-6LtwctiJsITgPotp+ztXNUAFbLh93Nk/SSy8RYFOjj3qAyliSjrqBEv5qJjo0cAunKFguyZKDWlVZSuYGBne3w==", "requires": { "@fluentui/react-context-selector": "^9.1.42", "@fluentui/react-icons": "^2.0.217", @@ -4886,8 +4311,6 @@ "dependencies": { "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -4896,71 +4319,59 @@ } }, "@fluentui/react-focus": { - "version": "8.8.34", - "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-8.8.34.tgz", - "integrity": "sha512-GNi8MqQRdoIaYpiz5kWIQaX1mNzFz3X+UShezA3gohrXnkONUvrPBuFDyYgQXoqk67juEZ+oGxl2PpKjz08HCA==", + "version": "8.8.33", "requires": { "@fluentui/keyboard-key": "^0.4.12", "@fluentui/merge-styles": "^8.5.13", "@fluentui/set-version": "^8.2.12", - "@fluentui/style-utilities": "^8.9.20", - "@fluentui/utilities": "^8.13.21", + "@fluentui/style-utilities": "^8.9.19", + "@fluentui/utilities": "^8.13.20", "tslib": "^2.1.0" } }, "@fluentui/react-hooks": { - "version": "8.6.33", - "resolved": "https://registry.npmjs.org/@fluentui/react-hooks/-/react-hooks-8.6.33.tgz", - "integrity": "sha512-3P9RA34QhhjFwHwCvfOqMDgCwvks4hgMsEGvQVTdrcya4uskxBx4FqCLzoMxkXcAJjJCiTJmPx/mZQqQpgoyoA==", + "version": "8.6.32", "requires": { "@fluentui/react-window-provider": "^2.2.16", "@fluentui/set-version": "^8.2.12", - "@fluentui/utilities": "^8.13.21", + "@fluentui/utilities": "^8.13.20", "tslib": "^2.1.0" } }, "@fluentui/react-icons": { - "version": "2.0.223", - "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.223.tgz", - "integrity": "sha512-nKE4y2e9DilNfly2Z5CSMBG2aOFZlGG9SJsw7UZmZu00acqWKEO09YAuHIDXlp6moYgCHF96MpZFDPU9sjbrwg==", + "version": "2.0.221", "requires": { "@griffel/react": "^1.0.0", "tslib": "^2.1.0" } }, "@fluentui/react-image": { - "version": "9.1.48", - "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.1.48.tgz", - "integrity": "sha512-Hi+73hWoB4YtS95vP9BU9PJ3Z91TKTFS9CwMjliSy5qyjvsy62zIlfYL9wbwUzjUhKHjpaoXF7DExSYn1eyjGQ==", + "version": "9.1.45", "requires": { - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-infobutton": { - "version": "9.0.0-beta.78", - "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.78.tgz", - "integrity": "sha512-XBOn8xyypSHB+m+SP2Xxj+aX9vh+EII0mHbAwmNVVQTOqNHfP0QircEhU/4KhEIS7B32aNOpX0LJXsh7TYcuhw==", + "version": "9.0.0-beta.74", "requires": { "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-label": "^9.1.51", - "@fluentui/react-popover": "^9.8.23", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.48", + "@fluentui/react-popover": "^9.8.19", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, "dependencies": { "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -4968,8 +4379,6 @@ }, "@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", "requires": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -4988,25 +4397,21 @@ } }, "@fluentui/react-infolabel": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.0.6.tgz", - "integrity": "sha512-KAkd3Q4jkt58i3aTs9KXmCRaN+ML/OcXxD1E1aoX9+MIDFA3aBa+qRLH8x4iAAvm/x8xf7MP2ePE/lcDQM9vQQ==", + "version": "9.0.2", "requires": { "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-label": "^9.1.51", - "@fluentui/react-popover": "^9.8.23", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.48", + "@fluentui/react-popover": "^9.8.19", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, "dependencies": { "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -5014,8 +4419,6 @@ }, "@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", "requires": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -5034,23 +4437,19 @@ } }, "@fluentui/react-input": { - "version": "9.4.53", - "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.4.53.tgz", - "integrity": "sha512-+I7qReeCRPFRhe1Kmfy53bmmkvoFviwIACziOEKqDkMz7Jy0DiIBzrDgCcSRd4PoAc+6GZcwBL/OAzDqukdjWQ==", + "version": "9.4.50", "requires": { - "@fluentui/react-field": "^9.1.43", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-field": "^9.1.40", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-jsx-runtime": { "version": "9.0.20", - "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.0.20.tgz", - "integrity": "sha512-wFRi78pTun8yy8ufYS5BqY4OKWYB9RPEcSHLMJDbD+CDxqflff3Hvq9VCjB3iRImpYuxwFvJF8XH4mDD1WV5Zw==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1", @@ -5059,8 +4458,6 @@ }, "@fluentui/react-label": { "version": "9.1.51", - "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.1.51.tgz", - "integrity": "sha512-kwRHUu5h7kQ4jqXkZ29u2xr8ScEAzZL3ERvlm5zmPMPfnzoU9Gbez8jRxzVKLsfoWDvqJw1PVpY6shBWDJYnfw==", "requires": { "@fluentui/react-jsx-runtime": "^9.0.20", "@fluentui/react-shared-contexts": "^9.13.0", @@ -5071,68 +4468,58 @@ } }, "@fluentui/react-link": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.2.0.tgz", - "integrity": "sha512-iFHIE4MxdTZRIA2pPr792EKAuBh6RD9M6OaLr6x92IooErXU5bh9mkkXWHZ8Rpw37mp90XjBljCkzAJKuZDxdQ==", + "version": "9.1.32", "requires": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-message-bar": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.0.8.tgz", - "integrity": "sha512-VT/+MstwqdGAdw7WqvJlx+r0PmC0CDYikqdXQBhhTH7iRD2ZmcoTn8wkyJs9OqXyyghW6Y94kT9cB5rZmRaroQ==", + "version": "9.0.4", "requires": { - "@fluentui/react-button": "^9.3.57", + "@fluentui/react-button": "^9.3.53", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1", "react-transition-group": "^4.4.1" } }, "@fluentui/react-motion-preview": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@fluentui/react-motion-preview/-/react-motion-preview-0.5.3.tgz", - "integrity": "sha512-/lyYg5TtUZev3H3Gu1OtVNr6iucLuKuT/mszAWSAqxwMBRVgs7Z1wjUiQzUgn8+B7iGCg8EdaBuIbgI15FvLNg==", + "version": "0.5.0", "requires": { - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-persona": { - "version": "9.2.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.2.58.tgz", - "integrity": "sha512-hrzih0MgldvG7SZF609SkBYxvY2eMFJLtk0DXLbryHseB/47dY4VrM3/RiTAXkQeMv6ljtPmNBrsbLqUwmxomg==", + "version": "9.2.54", "requires": { - "@fluentui/react-avatar": "^9.5.48", - "@fluentui/react-badge": "^9.2.15", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-avatar": "^9.5.44", + "@fluentui/react-badge": "^9.2.12", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, "dependencies": { "@fluentui/react-avatar": { "version": "9.5.48", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.48.tgz", - "integrity": "sha512-qhefSxIRxCHIzJEotbTLmkAERMk1sKN1EZfF25dnMvWzyYPaF4CjizYwtlf0G1eoHTCmyaw88sjzleAmXWar4w==", "requires": { "@fluentui/react-badge": "^9.2.15", "@fluentui/react-context-selector": "^9.1.42", @@ -5150,8 +4537,6 @@ }, "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -5159,8 +4544,6 @@ }, "@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", "requires": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -5180,8 +4563,6 @@ }, "@fluentui/react-portal": { "version": "9.4.3", - "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.4.3.tgz", - "integrity": "sha512-VR/vXUxHwWXDx/u7SbxFspikLR7LBRG5BEfQvyrQVnlYQ/GHRY/izia6ncdsIRBhg049xSaeIFQSYY0ng9mQ8g==", "requires": { "@fluentui/react-shared-contexts": "^9.13.0", "@fluentui/react-tabster": "^9.15.0", @@ -5192,17 +4573,13 @@ } }, "@fluentui/react-portal-compat-context": { - "version": "9.0.10", - "resolved": "https://registry.npmjs.org/@fluentui/react-portal-compat-context/-/react-portal-compat-context-9.0.10.tgz", - "integrity": "sha512-l38C+tGb76yyFQ9sxUrY8DDyp2hoYru3pISFivPitFgkP6nqlnZPNd8yPE48RuVWjMhTKQ/1uCdE6ymBH9wBZQ==", + "version": "9.0.9", "requires": { "@swc/helpers": "^0.5.1" } }, "@fluentui/react-positioning": { "version": "9.10.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.10.2.tgz", - "integrity": "sha512-EP9ZgKTYw8BkiqgwxRoGLH3T7H/5ig+fcJ5l9rAX8XGelsV/HEo+28GXE529NapdFZSqtxM7v4fczcP0lrFkgA==", "requires": { "@floating-ui/dom": "^1.2.0", "@fluentui/react-shared-contexts": "^9.13.0", @@ -5214,160 +4591,138 @@ } }, "@fluentui/react-progress": { - "version": "9.1.53", - "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.1.53.tgz", - "integrity": "sha512-h3eKrAWryz1dlY8Kr2PXrNUeX02nwpINt7LzuE2nq544Nj1aHXIjnuhgZbtuxItWweqCCuO1PGHLXDRugmWs9g==", + "version": "9.1.50", "requires": { - "@fluentui/react-field": "^9.1.43", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-field": "^9.1.40", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-provider": { - "version": "9.13.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.13.1.tgz", - "integrity": "sha512-sl6ztjJ3bdzb6cvlTKoUsw7AErijrTNgVY/KWO8StkRQShozWNnbklF6U0340xEh9KezRChG0ugGrajyDYq6Uw==", + "version": "9.11.1", "requires": { "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/core": "^1.14.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-select": { - "version": "9.1.53", - "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.1.53.tgz", - "integrity": "sha512-yRUMz+eD9GKI9jjga09sA/brn09V0+Vzb8vzc01DE3ibUsuQeXoY6MrPUhD17EMQ7U2Ka3XEgTAn5BkUqn45KA==", + "version": "9.1.50", "requires": { - "@fluentui/react-field": "^9.1.43", + "@fluentui/react-field": "^9.1.40", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-shared-contexts": { "version": "9.13.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.13.0.tgz", - "integrity": "sha512-1KeSxrIW9kYPA7Ug0p4Tym/oqWANkuQS7GfGY7BiibrtB10/ViDs9ZwVw2A9D0JgiPLJU9MZY2Jl7TH5aiC0Vw==", "requires": { "@fluentui/react-theme": "^9.1.16", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-skeleton": { - "version": "9.0.41", - "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.0.41.tgz", - "integrity": "sha512-NXic/FmmO3eutQRECT9n88nGFYbSzMCrdLFmEpGR1YLLP+Pz4RXrLPy1GnsSLjiNTkteKSdVHZu9Ow8zVm3Tjw==", + "version": "9.0.38", "requires": { - "@fluentui/react-field": "^9.1.43", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-field": "^9.1.40", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-slider": { - "version": "9.1.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.1.58.tgz", - "integrity": "sha512-LblD67Fgxdu3CIarIHutIsvXAXZnJVZyj6P3gAn+Af0GU/XTA7Lk2fiGfd9/rBgyqdj6A+8XpkYtcS52NHyFWg==", + "version": "9.1.54", "requires": { - "@fluentui/react-field": "^9.1.43", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-field": "^9.1.40", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-spinbutton": { - "version": "9.2.53", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.2.53.tgz", - "integrity": "sha512-fJ/8ZMFsH3M0kWqPYm7uO+EARyV6vU1lQyj/riSzkKUOFBsRE8TBegyftvy+62dWP+iz+xY3LneuaC/T2aFGZg==", + "version": "9.2.50", "requires": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-field": "^9.1.43", + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-field": "^9.1.40", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-spinner": { - "version": "9.3.31", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.3.31.tgz", - "integrity": "sha512-Bh8n3jv/jhHRReA2wiIa1ojkMwUSdDKOgE9Su4MiyTER86RTTh3kVkfwA7pe6FcvyHjuu8HI+OzaQ+9WkyOMjA==", + "version": "9.3.28", "requires": { - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-label": "^9.1.51", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.48", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-switch": { - "version": "9.1.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.1.58.tgz", - "integrity": "sha512-8b9ZFt4FQ/GAbx5xg5ZtgofkMMU9gDPB+5F/jchM/PCz00N3OtLIu9kzQvR+FbuzZkMHxSSnHd9fDzrH9mEL3g==", + "version": "9.1.54", "requires": { - "@fluentui/react-field": "^9.1.43", + "@fluentui/react-field": "^9.1.40", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-label": "^9.1.51", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.48", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-table": { - "version": "9.10.13", - "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.10.13.tgz", - "integrity": "sha512-XYWG4TGkhQn2F4/J+p4QqxFX6S5K/g+9LdgQ+r/RWwQZw0l8apSNQ94rKFJc2M4TVbmnx1tOLtTylFP6wItgqA==", + "version": "9.10.9", "requires": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-aria": "^9.4.0", - "@fluentui/react-avatar": "^9.5.48", - "@fluentui/react-checkbox": "^9.2.1", - "@fluentui/react-context-selector": "^9.1.42", + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-avatar": "^9.5.44", + "@fluentui/react-checkbox": "^9.1.54", + "@fluentui/react-context-selector": "^9.1.41", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-radio": "^9.1.58", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-radio": "^9.1.54", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, "dependencies": { "@fluentui/react-avatar": { "version": "9.5.48", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.48.tgz", - "integrity": "sha512-qhefSxIRxCHIzJEotbTLmkAERMk1sKN1EZfF25dnMvWzyYPaF4CjizYwtlf0G1eoHTCmyaw88sjzleAmXWar4w==", "requires": { "@fluentui/react-badge": "^9.2.15", "@fluentui/react-context-selector": "^9.1.42", @@ -5385,8 +4740,6 @@ }, "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -5394,8 +4747,6 @@ }, "@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", "requires": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -5413,8 +4764,6 @@ }, "@fluentui/react-radio": { "version": "9.1.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.1.58.tgz", - "integrity": "sha512-sVCfIS3WnGElvpBWKbA5/5yBjtZ5PIOgb/RLlJ2EsYVVumSYlKqqxljF/pLjoXj0lHOUE73c7KLkPI3Gv7vqSw==", "requires": { "@fluentui/react-field": "^9.1.43", "@fluentui/react-icons": "^2.0.217", @@ -5432,8 +4781,6 @@ }, "@fluentui/react-tabster": { "version": "9.15.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.15.0.tgz", - "integrity": "sha512-MS7M/eEoXalw3kQIjErbJHinnhCXWNC5NS2gU54zFvoHUX1Q4dckG7SOgJsChd1xLmruKxsmitJaaY2DmXY+zw==", "requires": { "@fluentui/react-shared-contexts": "^9.13.0", "@fluentui/react-theme": "^9.1.16", @@ -5445,27 +4792,23 @@ } }, "@fluentui/react-tags": { - "version": "9.0.12", - "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.0.12.tgz", - "integrity": "sha512-Br3I0yQ4FPSNT3cMOkTdRdjSlrMk2yXRE7h12fWXmO710sT2Klvu8SsGXrRgsWV/Uo/eFwkKV+k3w8Mn/rd7Aw==", + "version": "9.0.8", "requires": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-aria": "^9.4.0", - "@fluentui/react-avatar": "^9.5.48", + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-avatar": "^9.5.44", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, "dependencies": { "@fluentui/react-avatar": { "version": "9.5.48", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.48.tgz", - "integrity": "sha512-qhefSxIRxCHIzJEotbTLmkAERMk1sKN1EZfF25dnMvWzyYPaF4CjizYwtlf0G1eoHTCmyaw88sjzleAmXWar4w==", "requires": { "@fluentui/react-badge": "^9.2.15", "@fluentui/react-context-selector": "^9.1.42", @@ -5483,8 +4826,6 @@ }, "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -5492,8 +4833,6 @@ }, "@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", "requires": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -5512,82 +4851,70 @@ } }, "@fluentui/react-text": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.4.0.tgz", - "integrity": "sha512-cGV369NOmzYMmuutRASX4ALmlVmr3yMv5yZB+s6IrWuZUNCwlVeUalqgqmj7ek9sprUPOd32lUoJu9M/sm7TYw==", + "version": "9.3.45", "requires": { - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-textarea": { - "version": "9.3.53", - "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.3.53.tgz", - "integrity": "sha512-S36cLUmitzDCy83PLnlgWlrPzeWJqnbvP0Tn4ld1si39xXMPEp9F9wLitgOAhFTsLZPcj0gZ2vS5EYrR24YvtA==", + "version": "9.3.50", "requires": { - "@fluentui/react-field": "^9.1.43", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-field": "^9.1.40", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-theme": { "version": "9.1.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.1.16.tgz", - "integrity": "sha512-QK2dGE5aQXN1UGdiEmGKpYGP3tHXIchLvFf8DEEOWnF4XBc9SiEPNFYkvLMJjHxZmDz4D670rsOPe0r5jFDEKQ==", "requires": { "@fluentui/tokens": "1.0.0-alpha.13", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-toast": { - "version": "9.3.19", - "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.3.19.tgz", - "integrity": "sha512-usWAX7sRwJ2OV+oUfWbveKFg1nf0HDdTNMSFkxcUrtE2FNrIgPTOYKF9JHXhyFcTtu55Hu/9CrkL3Sqr422PYw==", + "version": "9.3.15", "requires": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-aria": "^9.4.0", + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-portal": "^9.4.3", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.27", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1", "react-transition-group": "^4.4.1" } }, "@fluentui/react-toolbar": { - "version": "9.1.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.1.58.tgz", - "integrity": "sha512-0vtwxM1se2BBmLNSYSF/fBOjZaQW7rXv1La3TKbAtXVtoT3iu5Kx0SAlyPEjFNLuHMTtLiJCETdfjrs0EhwDlw==", + "version": "9.1.54", "requires": { - "@fluentui/react-button": "^9.3.57", - "@fluentui/react-context-selector": "^9.1.42", - "@fluentui/react-divider": "^9.2.51", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-radio": "^9.1.58", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-button": "^9.3.53", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-divider": "^9.2.48", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-radio": "^9.1.54", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, "dependencies": { "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -5595,8 +4922,6 @@ }, "@fluentui/react-radio": { "version": "9.1.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.1.58.tgz", - "integrity": "sha512-sVCfIS3WnGElvpBWKbA5/5yBjtZ5PIOgb/RLlJ2EsYVVumSYlKqqxljF/pLjoXj0lHOUE73c7KLkPI3Gv7vqSw==", "requires": { "@fluentui/react-field": "^9.1.43", "@fluentui/react-icons": "^2.0.217", @@ -5614,8 +4939,6 @@ }, "@fluentui/react-tooltip": { "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.4.1.tgz", - "integrity": "sha512-0BlpBHZpPsfBsujLBKOBAP26Vh0NnTbWd2QKnxUDGCeFq69KxXuRdchyXOJRP3qwEyKP3gRS13IYFKibNKp2sw==", "requires": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-jsx-runtime": "^9.0.20", @@ -5630,31 +4953,27 @@ } }, "@fluentui/react-tree": { - "version": "9.4.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.4.15.tgz", - "integrity": "sha512-xZ49CjPB4HuTi0sNBP1qVcaaFYF5T7ZNSES+oC2li8HuaqwVH/4mSfn2ccoAkgaFxoG8U39EkH5NiaCZXab4yg==", + "version": "9.4.11", "requires": { - "@fluentui/keyboard-keys": "^9.0.7", - "@fluentui/react-aria": "^9.4.0", - "@fluentui/react-avatar": "^9.5.48", - "@fluentui/react-button": "^9.3.57", - "@fluentui/react-checkbox": "^9.2.1", - "@fluentui/react-context-selector": "^9.1.42", + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-avatar": "^9.5.44", + "@fluentui/react-button": "^9.3.53", + "@fluentui/react-checkbox": "^9.1.54", + "@fluentui/react-context-selector": "^9.1.41", "@fluentui/react-icons": "^2.0.217", - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-radio": "^9.1.58", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-tabster": "^9.15.0", - "@fluentui/react-theme": "^9.1.16", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-radio": "^9.1.54", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-tabster": "^9.14.3", + "@fluentui/react-theme": "^9.1.15", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" }, "dependencies": { "@fluentui/react-avatar": { "version": "9.5.48", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.48.tgz", - "integrity": "sha512-qhefSxIRxCHIzJEotbTLmkAERMk1sKN1EZfF25dnMvWzyYPaF4CjizYwtlf0G1eoHTCmyaw88sjzleAmXWar4w==", "requires": { "@fluentui/react-badge": "^9.2.15", "@fluentui/react-context-selector": "^9.1.42", @@ -5672,8 +4991,6 @@ }, "@fluentui/react-context-selector": { "version": "9.1.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.42.tgz", - "integrity": "sha512-Xq9JcPBCRLkCnrUd83qSFgEYZc1BYyxFXLamtev5Ok1SSF53XI4yqN7Y34A13fSu/Q2wGeZibHcCTHJIXad2sQ==", "requires": { "@fluentui/react-utilities": "^9.15.2", "@swc/helpers": "^0.5.1" @@ -5681,8 +4998,6 @@ }, "@fluentui/react-popover": { "version": "9.8.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.23.tgz", - "integrity": "sha512-rmR9pxfmNBgXh2f43hCI2mBcuKmJoKLFPOounbaB8AIrVD5lCFqFiG1+p5vnJDsuBxLvyzVROnGSt8dp/G9m/Q==", "requires": { "@fluentui/keyboard-keys": "^9.0.7", "@fluentui/react-aria": "^9.4.0", @@ -5700,8 +5015,6 @@ }, "@fluentui/react-radio": { "version": "9.1.58", - "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.1.58.tgz", - "integrity": "sha512-sVCfIS3WnGElvpBWKbA5/5yBjtZ5PIOgb/RLlJ2EsYVVumSYlKqqxljF/pLjoXj0lHOUE73c7KLkPI3Gv7vqSw==", "requires": { "@fluentui/react-field": "^9.1.43", "@fluentui/react-icons": "^2.0.217", @@ -5719,29 +5032,23 @@ }, "@fluentui/react-utilities": { "version": "9.15.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.15.2.tgz", - "integrity": "sha512-Oq016/dHu7PXW5x/2RtLts1ULiyd7JctXFdvi9IacLs/J1nLfg2KSBzzLqKxtdyVvgbZ9Mlu6kPITbFtF9dsIA==", "requires": { "@fluentui/keyboard-keys": "^9.0.7", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-virtualizer": { - "version": "9.0.0-alpha.59", - "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.59.tgz", - "integrity": "sha512-LVBYuPe+5Dmrk9fUBaRPxSZBfs3RgMFTaioaMWNMt6eHmTPqoOOcajfCb3ZHN79mP9oZq9d5m9GnaRQcOSNNwg==", + "version": "9.0.0-alpha.55", "requires": { - "@fluentui/react-jsx-runtime": "^9.0.20", - "@fluentui/react-shared-contexts": "^9.13.0", - "@fluentui/react-utilities": "^9.15.2", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.11.1", + "@fluentui/react-utilities": "^9.15.1", "@griffel/react": "^1.5.14", "@swc/helpers": "^0.5.1" } }, "@fluentui/react-window-provider": { "version": "2.2.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-2.2.16.tgz", - "integrity": "sha512-4gkUMSAUjo3cgCGt+0VvTbMy9qbF6zo/cmmfYtfqbSFtXz16lKixSCMIf66gXdKjovqRGVFC/XibqfrXM2QLuw==", "requires": { "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" @@ -5749,48 +5056,38 @@ }, "@fluentui/set-version": { "version": "8.2.12", - "resolved": "https://registry.npmjs.org/@fluentui/set-version/-/set-version-8.2.12.tgz", - "integrity": "sha512-I4uXIg9xkL2Heotf1+7CyGcHQskdtMSH0B5mSV0TL3w7WI2qpnzrpKuP2Kq6DHZN6Xrsg4ORFNJSjLxq/s9cUQ==", "requires": { "tslib": "^2.1.0" } }, "@fluentui/style-utilities": { - "version": "8.9.20", - "resolved": "https://registry.npmjs.org/@fluentui/style-utilities/-/style-utilities-8.9.20.tgz", - "integrity": "sha512-oj0ghn21DnqCardlcEp+zob3IEAfA/Z7ZjzuYqlHuPUItwRqGmpr1wErssRC4R1kHsH6gq9ALxVgMa4/FvdzGg==", + "version": "8.9.19", "requires": { "@fluentui/merge-styles": "^8.5.13", "@fluentui/set-version": "^8.2.12", - "@fluentui/theme": "^2.6.38", - "@fluentui/utilities": "^8.13.21", + "@fluentui/theme": "^2.6.37", + "@fluentui/utilities": "^8.13.20", "@microsoft/load-themed-styles": "^1.10.26", "tslib": "^2.1.0" } }, "@fluentui/theme": { - "version": "2.6.38", - "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-2.6.38.tgz", - "integrity": "sha512-LObK/mZOQFb3aTcDlKBSLpPV0BOp5BOuNqg0Wps51b1RlisI6oS3STmw3BkcAe6jOi/p4cgLpwHMkYHh2o8PmQ==", + "version": "2.6.37", "requires": { "@fluentui/merge-styles": "^8.5.13", "@fluentui/set-version": "^8.2.12", - "@fluentui/utilities": "^8.13.21", + "@fluentui/utilities": "^8.13.20", "tslib": "^2.1.0" } }, "@fluentui/tokens": { "version": "1.0.0-alpha.13", - "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.13.tgz", - "integrity": "sha512-IzYysTTBkAH7tQZxYKpzhxYnTJkvwXhjhTOpmERgnqTFifHTP8/vaQjJAAm7dI/9zlDx1oN+y/I+KzL9bDLHZQ==", "requires": { "@swc/helpers": "^0.5.1" } }, "@fluentui/utilities": { - "version": "8.13.21", - "resolved": "https://registry.npmjs.org/@fluentui/utilities/-/utilities-8.13.21.tgz", - "integrity": "sha512-YPWsRAL1jgbPxf+wAY8p6LjIG4em0NReqgU8ZCFnQx9wpQbe/ZRjQcaU06pD1tYtRGvyCutwhnWDaQHDw843Xg==", + "version": "8.13.20", "requires": { "@fluentui/dom-utilities": "^2.2.12", "@fluentui/merge-styles": "^8.5.13", @@ -5799,12 +5096,10 @@ } }, "@griffel/core": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.14.1.tgz", - "integrity": "sha512-KQ6yueap1zff9TJrn7MdfSAHDMDVP6Ec97gnpCi4NOeKiyCyT13MwPCmkkK0o/poaV1f9MdHhUTQZCpK0QtxzQ==", + "version": "1.14.4", "requires": { "@emotion/hash": "^0.9.0", - "@griffel/style-types": "^1.0.1", + "@griffel/style-types": "^1.0.2", "csstype": "^3.1.2", "rtl-css-js": "^1.16.1", "stylis": "^4.2.0", @@ -5812,26 +5107,20 @@ } }, "@griffel/react": { - "version": "1.5.14", - "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.14.tgz", - "integrity": "sha512-/x6cy6xMtpow1r+Zrw/hMKHwo+imFAgKaZ3A/+M8GyT3L9AFxK1Kyg4JvARPjLBAn9Q2q5dkCr78jOguuVSScg==", + "version": "1.5.17", "requires": { - "@griffel/core": "^1.14.1", + "@griffel/core": "^1.14.4", "tslib": "^2.1.0" } }, "@griffel/style-types": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@griffel/style-types/-/style-types-1.0.1.tgz", - "integrity": "sha512-nhVryiNHhoBt5L93tfDYGoE4KtWvhBvY7y1yR1n6WKpRjasgw3GI2pBwiMiVt68bycnyvXIvcJjJTr0QM22VLQ==", + "version": "1.0.2", "requires": { "csstype": "^3.1.2" } }, "@jridgewell/gen-mapping": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", @@ -5840,42 +5129,36 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.0", "dev": true }, "@jridgewell/set-array": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true }, "@jridgewell/sourcemap-codec": { "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.18", "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true + } } }, "@microsoft/load-themed-styles": { - "version": "1.10.295", - "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.295.tgz", - "integrity": "sha512-W+IzEBw8a6LOOfRJM02dTT7BDZijxm+Z7lhtOAz1+y9vQm1Kdz9jlAO+qCEKsfxtUOmKilW8DIRqFw2aUgKeGg==" + "version": "1.10.295" }, "@react-spring/animated": { "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.3.tgz", - "integrity": "sha512-5CWeNJt9pNgyvuSzQH+uy2pvTg8Y4/OisoscZIR8/ZNLIOI+CatFBhGZpDGTF/OzdNFsAoGk3wiUYTwoJ0YIvw==", "requires": { "@react-spring/shared": "~9.7.3", "@react-spring/types": "~9.7.3" @@ -5883,8 +5166,6 @@ }, "@react-spring/core": { "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.3.tgz", - "integrity": "sha512-IqFdPVf3ZOC1Cx7+M0cXf4odNLxDC+n7IN3MDcVCTIOSBfqEcBebSv+vlY5AhM0zw05PDbjKrNmBpzv/AqpjnQ==", "requires": { "@react-spring/animated": "~9.7.3", "@react-spring/shared": "~9.7.3", @@ -5893,21 +5174,15 @@ }, "@react-spring/shared": { "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.3.tgz", - "integrity": "sha512-NEopD+9S5xYyQ0pGtioacLhL2luflh6HACSSDUZOwLHoxA5eku1UPuqcJqjwSD6luKjjLfiLOspxo43FUHKKSA==", "requires": { "@react-spring/types": "~9.7.3" } }, "@react-spring/types": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.3.tgz", - "integrity": "sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw==" + "version": "9.7.3" }, "@react-spring/web": { "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.3.tgz", - "integrity": "sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg==", "requires": { "@react-spring/animated": "~9.7.3", "@react-spring/core": "~9.7.3", @@ -5916,22 +5191,31 @@ } }, "@remix-run/router": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.13.1.tgz", - "integrity": "sha512-so+DHzZKsoOcoXrILB4rqDkMDy7NLMErRdOxvzvOKb507YINKUP4Di+shbTZDhSE/pBZ+vr7XGIpcOO0VLSA+Q==" + "version": "1.11.0" + }, + "@rollup/plugin-typescript": { + "version": "11.1.3", + "requires": { + "@rollup/pluginutils": "^5.0.1", + "resolve": "^1.22.1" + } + }, + "@rollup/pluginutils": { + "version": "5.0.4", + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } }, "@swc/helpers": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz", - "integrity": "sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==", "requires": { "tslib": "^2.4.0" } }, "@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "version": "7.20.3", "dev": true, "requires": { "@babel/parser": "^7.20.7", @@ -5942,18 +5226,14 @@ } }, "@types/babel__generator": { - "version": "7.6.7", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", - "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "version": "7.6.6", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "version": "7.4.3", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -5961,32 +5241,33 @@ } }, "@types/babel__traverse": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", - "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "version": "7.20.3", "dev": true, "requires": { "@babel/types": "^7.20.7" } }, "@types/dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==", + "version": "3.0.4", "dev": true, "requires": { "@types/trusted-types": "*" } }, + "@types/estree": { + "version": "1.0.1" + }, + "@types/hast": { + "version": "2.3.7", + "requires": { + "@types/unist": "^2" + } + }, "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "version": "15.7.5" }, "@types/react": { - "version": "18.2.42", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.42.tgz", - "integrity": "sha512-c1zEr96MjakLYus/wPnuWDo1/zErfdU9rNsIGmE+NV71nx88FG9Ttgo5dqorXTu/LImX2f63WBP986gJkMPNbA==", + "version": "18.2.34", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -5994,68 +5275,62 @@ } }, "@types/react-dom": { - "version": "18.2.17", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.17.tgz", - "integrity": "sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==", + "version": "18.2.14", + "requires": { + "@types/react": "*" + } + }, + "@types/react-syntax-highlighter": { + "version": "15.5.9", + "dev": true, "requires": { "@types/react": "*" } }, "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + "version": "0.16.2" }, "@types/trusted-types": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", - "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", "dev": true }, + "@types/unist": { + "version": "2.0.7" + }, "@vitejs/plugin-react": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", - "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "version": "4.1.1", "dev": true, "requires": { - "@babel/core": "^7.23.5", - "@babel/plugin-transform-react-jsx-self": "^7.23.3", - "@babel/plugin-transform-react-jsx-source": "^7.23.3", - "@types/babel__core": "^7.20.5", + "@babel/core": "^7.23.2", + "@babel/plugin-transform-react-jsx-self": "^7.22.5", + "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "@types/babel__core": "^7.20.3", "react-refresh": "^0.14.0" } }, "ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.22.1", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", - "node-releases": "^2.0.14", + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.13" } }, "caniuse-lite": { - "version": "1.0.30001566", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", - "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", + "version": "1.0.30001547", "dev": true }, "chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -6063,10 +5338,17 @@ "supports-color": "^5.3.0" } }, + "character-entities": { + "version": "1.2.4" + }, + "character-entities-legacy": { + "version": "1.1.4" + }, + "character-reference-invalid": { + "version": "1.1.4" + }, "color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" @@ -6074,25 +5356,20 @@ }, "color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "comma-separated-tokens": { + "version": "1.0.8" + }, "convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "version": "3.1.2" }, "debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -6100,131 +5377,158 @@ }, "dom-helpers": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", "requires": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" } }, "dompurify": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.6.tgz", - "integrity": "sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==" + "version": "3.0.6" }, "electron-to-chromium": { - "version": "1.4.605", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.605.tgz", - "integrity": "sha512-V52j+P5z6cdRqTjPR/bYNxx7ETCHIkm5VIGuyCy3CMrfSnbEpIlLnk5oHmZo7gYvDfh2TfHeanB6rawyQ23ktg==", + "version": "1.4.549", "dev": true }, "esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "version": "0.18.11", "dev": true, "requires": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/android-arm": "0.18.11", + "@esbuild/android-arm64": "0.18.11", + "@esbuild/android-x64": "0.18.11", + "@esbuild/darwin-arm64": "0.18.11", + "@esbuild/darwin-x64": "0.18.11", + "@esbuild/freebsd-arm64": "0.18.11", + "@esbuild/freebsd-x64": "0.18.11", + "@esbuild/linux-arm": "0.18.11", + "@esbuild/linux-arm64": "0.18.11", + "@esbuild/linux-ia32": "0.18.11", + "@esbuild/linux-loong64": "0.18.11", + "@esbuild/linux-mips64el": "0.18.11", + "@esbuild/linux-ppc64": "0.18.11", + "@esbuild/linux-riscv64": "0.18.11", + "@esbuild/linux-s390x": "0.18.11", + "@esbuild/linux-x64": "0.18.11", + "@esbuild/netbsd-x64": "0.18.11", + "@esbuild/openbsd-x64": "0.18.11", + "@esbuild/sunos-x64": "0.18.11", + "@esbuild/win32-arm64": "0.18.11", + "@esbuild/win32-ia32": "0.18.11", + "@esbuild/win32-x64": "0.18.11" } }, "escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, + "estree-walker": { + "version": "2.0.2" + }, + "fault": { + "version": "1.0.4", + "requires": { + "format": "^0.2.0" + } + }, "floating-ui-devtools": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/floating-ui-devtools/-/floating-ui-devtools-0.1.2.tgz", - "integrity": "sha512-6QZH99AdZx9by0fJt2AI0axAeOxLpcHgpmaJXYxJWLCblv9iKz7i4lcLKwYvPA9B5brkLwehgjlbi2kI6uq/Eg==", "requires": {} }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "optional": true + "format": { + "version": "0.2.2" + }, + "function-bind": { + "version": "1.1.1" }, "gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "has": { + "version": "1.0.3", + "requires": { + "function-bind": "^1.1.1" + } + }, "has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, + "hast-util-parse-selector": { + "version": "2.2.5" + }, + "hastscript": { + "version": "6.0.0", + "requires": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "highlight.js": { + "version": "10.7.3" + }, + "is-alphabetical": { + "version": "1.0.4" + }, + "is-alphanumerical": { + "version": "1.0.4", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.13.0", + "requires": { + "has": "^1.0.3" + } + }, + "is-decimal": { + "version": "1.0.4" + }, + "is-hexadecimal": { + "version": "1.0.4" + }, "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "version": "4.0.0" }, "jsesc": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "keyborg": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/keyborg/-/keyborg-2.2.0.tgz", - "integrity": "sha512-yQa1dz+FilQ+w3JM6GH2V/wnFeQhfbkK9stvs3UiraW3GOEO7zrOBBh0ZuHsrzeN1xx6v7P5EpA2JtOUUnfN/w==" + "version": "2.2.0" }, "loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, + "lowlight": { + "version": "1.20.0", + "requires": { + "fault": "^1.0.0", + "highlight.js": "~10.7.0" + } + }, "lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { "yallist": "^3.0.2" @@ -6232,59 +5536,61 @@ }, "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.6", "dev": true }, "ndjson-readablestream": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/ndjson-readablestream/-/ndjson-readablestream-1.0.9.tgz", - "integrity": "sha512-D1BWU6lgZzLpF7wd55B5Q4+2iupGo9Y/jEtWX9FJIWgZ7ceWwfFFddJ+qEuuABx4nqUF94tQmusO0By4AyetPg==" + "version": "1.0.7" }, "node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "version": "2.0.13", "dev": true }, "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "version": "4.1.1" + }, + "parse-entities": { + "version": "2.0.0", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "path-parse": { + "version": "1.0.7" }, "picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, + "picomatch": { + "version": "2.3.1" + }, "postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.31", "dev": true, "requires": { - "nanoid": "^3.3.7", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "prettier": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", - "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", + "version": "3.0.3", "dev": true }, + "prismjs": { + "version": "1.29.0" + }, "prop-types": { "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -6292,24 +5598,24 @@ }, "dependencies": { "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "version": "16.13.1" } } }, + "property-information": { + "version": "5.6.0", + "requires": { + "xtend": "^4.0.0" + } + }, "react": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "requires": { "loose-envify": "^1.1.0" } }, "react-dom": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "requires": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -6317,8 +5623,6 @@ "dependencies": { "scheduler": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "requires": { "loose-envify": "^1.1.0" } @@ -6326,37 +5630,37 @@ } }, "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "version": "17.0.2" }, "react-refresh": { "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", "dev": true }, "react-router": { - "version": "6.20.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.20.1.tgz", - "integrity": "sha512-ccvLrB4QeT5DlaxSFFYi/KR8UMQ4fcD8zBcR71Zp1kaYTC5oJKYAp1cbavzGrogwxca+ubjkd7XjFZKBW8CxPA==", + "version": "6.18.0", "requires": { - "@remix-run/router": "1.13.1" + "@remix-run/router": "1.11.0" } }, "react-router-dom": { - "version": "6.20.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.20.1.tgz", - "integrity": "sha512-npzfPWcxfQN35psS7rJgi/EW0Gx6EsNjfdJSAk73U/HqMEJZ2k/8puxfwHFgDQhBGmS3+sjnGbMdMSV45axPQw==", + "version": "6.18.0", + "requires": { + "@remix-run/router": "1.11.0", + "react-router": "6.18.0" + } + }, + "react-syntax-highlighter": { + "version": "15.5.0", "requires": { - "@remix-run/router": "1.13.1", - "react-router": "6.20.1" + "@babel/runtime": "^7.3.1", + "highlight.js": "^10.4.1", + "lowlight": "^1.17.0", + "prismjs": "^1.27.0", + "refractor": "^3.6.0" } }, "react-transition-group": { "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "requires": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -6364,32 +5668,44 @@ "prop-types": "^15.6.2" } }, + "refractor": { + "version": "3.6.0", + "requires": { + "hastscript": "^6.0.0", + "parse-entities": "^2.0.0", + "prismjs": "~1.27.0" + }, + "dependencies": { + "prismjs": { + "version": "1.27.0" + } + } + }, "regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "version": "0.14.0" + }, + "resolve": { + "version": "1.22.4", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } }, "rollup": { "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", - "dev": true, "requires": { "fsevents": "~2.3.2" } }, "rtl-css-js": { "version": "1.16.1", - "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", - "integrity": "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==", "requires": { "@babel/runtime": "^7.1.2" } }, "scheduler": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -6397,34 +5713,30 @@ }, "semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true }, "source-map-js": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, + "space-separated-tokens": { + "version": "1.1.5" + }, "stylis": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", - "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + "version": "4.3.0" }, "supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0" + }, "tabster": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/tabster/-/tabster-5.1.0.tgz", - "integrity": "sha512-1wYn3gL9GCa+9p+oyRF3gjVVi83Q51mAXhgugoQ9RT/h/Ci1i4455Zc/hO268b9w37Na7MOETTytPawi8XC98w==", "requires": { "keyborg": "^2.2.0", "tslib": "^2.3.1" @@ -6432,25 +5744,16 @@ }, "to-fast-properties": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true }, "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "version": "2.5.0" }, "typescript": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz", - "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==", - "dev": true + "version": "5.2.2" }, "update-browserslist-db": { "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "requires": { "escalade": "^3.1.1", @@ -6459,14 +5762,10 @@ }, "use-disposable": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/use-disposable/-/use-disposable-1.0.2.tgz", - "integrity": "sha512-UMaXVlV77dWOu4GqAFNjRzHzowYKUKbJBQfCexvahrYeIz4OkUYUjna4Tjjdf92NH8Nm8J7wEfFRgTIwYjO5jg==", "requires": {} }, "vite": { "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", - "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", "dev": true, "requires": { "esbuild": "^0.18.10", @@ -6475,10 +5774,11 @@ "rollup": "^3.27.1" } }, + "xtend": { + "version": "4.0.2" + }, "yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } diff --git a/app/frontend/package.json b/app/frontend/package.json index 530e6b389f..6d43f2e937 100644 --- a/app/frontend/package.json +++ b/app/frontend/package.json @@ -12,26 +12,28 @@ "preview": "vite preview" }, "dependencies": { - "@azure/msal-react": "^2.0.8", + "@azure/msal-react": "^2.0.6", "@azure/msal-browser": "^3.1.0", - "@fluentui/react": "^8.112.9", - "@fluentui/react-components": "^9.42.0", - "@fluentui/react-icons": "^2.0.223", + "@fluentui/react": "^8.112.5", + "@fluentui/react-components": "^9.37.3", + "@fluentui/react-icons": "^2.0.221", "@react-spring/web": "^9.7.3", "dompurify": "^3.0.6", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.20.1", - "ndjson-readablestream": "^1.0.9", + "react-router-dom": "^6.18.0", + "ndjson-readablestream": "^1.0.7", + "react-syntax-highlighter": "^15.5.0", "scheduler": "^0.20.2" }, "devDependencies": { - "@types/dompurify": "^3.0.5", - "@types/react": "^18.2.42", - "@types/react-dom": "^18.2.17", - "@vitejs/plugin-react": "^4.2.1", - "prettier": "^3.1.0", - "typescript": "^5.3.2", - "vite": "^4.4.12" + "@types/dompurify": "^3.0.4", + "@types/react": "^18.2.34", + "@types/react-dom": "^18.2.14", + "@vitejs/plugin-react": "^4.1.1", + "prettier": "^3.0.3", + "typescript": "^5.2.2", + "@types/react-syntax-highlighter": "^15.5.7", + "vite": "^4.5.0" } } diff --git a/app/frontend/src/api/api.ts b/app/frontend/src/api/api.ts index f2fe0480ea..92a158cd19 100644 --- a/app/frontend/src/api/api.ts +++ b/app/frontend/src/api/api.ts @@ -1,6 +1,6 @@ const BACKEND_URI = ""; -import { ChatAppResponse, ChatAppResponseOrError, ChatAppRequest } from "./models"; +import { ChatAppResponse, ChatAppResponseOrError, ChatAppRequest, Config } from "./models"; import { useLogin } from "../authConfig"; function getHeaders(idToken: string | undefined): Record { @@ -32,6 +32,15 @@ export async function askApi(request: ChatAppRequest, idToken: string | undefine return parsedResponse as ChatAppResponse; } +export async function configApi(idToken: string | undefined): Promise { + const response = await fetch(`${BACKEND_URI}/config`, { + method: "GET", + headers: getHeaders(idToken) + }); + + return (await response.json()) as Config; +} + export async function chatApi(request: ChatAppRequest, idToken: string | undefined): Promise { return await fetch(`${BACKEND_URI}/chat`, { method: "POST", diff --git a/app/frontend/src/api/models.ts b/app/frontend/src/api/models.ts index 6ccaf8ee0e..2301c9ea47 100644 --- a/app/frontend/src/api/models.ts +++ b/app/frontend/src/api/models.ts @@ -4,6 +4,18 @@ export const enum RetrievalMode { Text = "text" } +export const enum GPT4VInput { + TextAndImages = "textAndImages", + Images = "images", + Texts = "texts" +} + +export const enum VectorFieldOptions { + Embedding = "embedding", + ImageEmbedding = "imageEmbedding", + Both = "both" +} + export type ChatAppRequestOverrides = { retrieval_mode?: RetrievalMode; semantic_ranker?: boolean; @@ -17,6 +29,9 @@ export type ChatAppRequestOverrides = { suggest_followup_questions?: boolean; use_oid_security_filter?: boolean; use_groups_security_filter?: boolean; + use_gpt4v?: boolean; + gpt4v_input?: GPT4VInput; + vector_fields: VectorFieldOptions[]; }; export type ResponseMessage = { @@ -24,10 +39,16 @@ export type ResponseMessage = { role: string; }; +export type Thoughts = { + title: string; + description: any; // It can be any output from the api + props?: { [key: string]: string }; +}; + export type ResponseContext = { - thoughts: string | null; data_points: string[]; followup_questions: string[] | null; + thoughts: Thoughts[]; }; export type ResponseChoice = { @@ -56,3 +77,7 @@ export type ChatAppRequest = { stream?: boolean; session_state: any; }; + +export type Config = { + showGPT4VOptions: boolean; +}; diff --git a/app/frontend/src/components/AnalysisPanel/AnalysisPanel.module.css b/app/frontend/src/components/AnalysisPanel/AnalysisPanel.module.css index 909ac03d44..c737e389b9 100644 --- a/app/frontend/src/components/AnalysisPanel/AnalysisPanel.module.css +++ b/app/frontend/src/components/AnalysisPanel/AnalysisPanel.module.css @@ -4,3 +4,59 @@ padding-top: 12px; padding-bottom: 12px; } + +.tList { + padding: 20px 20px 0 20px; + display: inline-block; + background: #e9e9e9; +} + +.tListItem { + list-style: none; + margin: auto; + margin-left: 20px; + min-height: 50px; + border-left: 1px dashed #123bb6; + padding: 0 0 30px 30px; + position: relative; +} + +.tListItem:last-child { + border-left: 0; +} + +.tListItem::before { + position: absolute; + left: -18px; + top: -5px; + content: " "; + border: 8px solid #d1dbfa; + border-radius: 500%; + background: #123bb6; + height: 20px; + width: 20px; +} + +.tStep { + color: #123bb6; + position: relative; + font-size: 12px; +} + +.tCodeBlock { + max-height: 300px; +} + +.tProp { + background-color: #d7d7d7; + color: #333232; + font-size: 12px; + padding: 3px 10px; + border-radius: 10px; +} + +.citationImg { + height: 450px; + max-width: 100%; + object-fit: contain; +} diff --git a/app/frontend/src/components/AnalysisPanel/AnalysisPanel.tsx b/app/frontend/src/components/AnalysisPanel/AnalysisPanel.tsx index 4b99a41d20..69a49d060d 100644 --- a/app/frontend/src/components/AnalysisPanel/AnalysisPanel.tsx +++ b/app/frontend/src/components/AnalysisPanel/AnalysisPanel.tsx @@ -1,11 +1,12 @@ -import { Pivot, PivotItem } from "@fluentui/react"; -import DOMPurify from "dompurify"; +import { Stack, Pivot, PivotItem } from "@fluentui/react"; +import SyntaxHighlighter from "react-syntax-highlighter"; import styles from "./AnalysisPanel.module.css"; import { SupportingContent } from "../SupportingContent"; import { ChatAppResponse } from "../../api"; import { AnalysisPanelTabs } from "./AnalysisPanelTabs"; +import { ThoughtProcess } from "./ThoughtProcess"; interface Props { className: string; @@ -20,11 +21,9 @@ const pivotItemDisabledStyle = { disabled: true, style: { color: "grey" } }; export const AnalysisPanel = ({ answer, activeTab, activeCitation, citationHeight, className, onActiveTabChanged }: Props) => { const isDisabledThoughtProcessTab: boolean = !answer.choices[0].context.thoughts; - const isDisabledSupportingContentTab: boolean = !answer.choices[0].context.data_points.length; + const isDisabledSupportingContentTab: boolean = !answer.choices[0].context.data_points; const isDisabledCitationTab: boolean = !activeCitation; - const sanitizedThoughts = DOMPurify.sanitize(answer.choices[0].context.thoughts!); - return ( -
+ -