diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a22ded5..1cefa1a 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -19,9 +19,7 @@ "version": "2.39.1" }, "ghcr.io/devcontainers-contrib/features/typescript:2": {}, - "ghcr.io/devcontainers/features/kubectl-helm-minikube:1": { - "version": "1.1.8" - }, + "ghcr.io/devcontainers/features/kubectl-helm-minikube:1": {}, "docker-in-docker": { "version": "latest", "moby": true, diff --git a/.github/workflows/azure-dev.yaml b/.github/workflows/azure-dev.yaml index fdbb0fc..d3bc196 100644 --- a/.github/workflows/azure-dev.yaml +++ b/.github/workflows/azure-dev.yaml @@ -1,162 +1,162 @@ -name: Container Apps CI/CD pipeline - -on: - push: - branches: - - main - paths: - - "app/**" - tags: - - v*.*.* - workflow_dispatch: - -jobs: - changes-detection: - runs-on: ubuntu-latest - outputs: - env-name: ${{steps.set-deploy-env.outputs.DEPLOY_ENVIRONMENT}} - build-copilot: ${{ steps.changes.outputs.copilot }} - build-frontend: ${{ steps.changes.outputs.frontend }} - build-account-api: ${{ steps.changes.outputs.account-api }} - build-payment-api: ${{ steps.changes.outputs.payment-api }} - build-transaction-api: ${{ steps.changes.outputs.transaction-api }} - steps: - - uses: actions/checkout@v2 - - name: Filter Changes - uses: dorny/paths-filter@v2 - id: changes - with: - filters: | - copilot: - - 'app/copilot/**' - frontend: - - 'app/frontend/**' - account-api: - - 'app/business-api/account/**' - payment-api: - - 'app/business-api/payment/**' - transaction-api: - - 'app/business-api/transactions-history/**' - - - name: Set environment for branch - id: set-deploy-env - run: | - echo "checking branch name [${{github.ref_name}}]" - if [[ ${{github.ref_name}} == 'main' ]]; then - echo "main branch detected. Set Development environment" - echo "DEPLOY_ENVIRONMENT=Development" >> "$GITHUB_OUTPUT" - elif [[ ${{github.ref_name}} == *'release'* ]]; then - echo "release branch detected. Set Test environment" - echo "DEPLOY_ENVIRONMENT=Test" >> "$GITHUB_OUTPUT" - elif [[ ${{github.ref_name}} == *'v'* ]]; then - echo "tag detected. Set Production environment" - echo "DEPLOY_ENVIRONMENT=Production" >> "$GITHUB_OUTPUT" - else - echo "branch not detected. Set Development environment as default" - echo "DEPLOY_ENVIRONMENT=Development" >> "$GITHUB_OUTPUT" - fi - - build-account-app: - needs: changes-detection - if : ${{ needs.changes-detection.outputs.build-account-api == 'true' }} - uses: ./.github/workflows/acr-build-push.yaml - with: - env-name: ${{ needs.changes-detection.outputs.env-name}} - image-name: personal-finance-assistance-java/account-api - app-folder-path: ./app/business-api/account - secrets: inherit - - deploy-account-app: - needs: [changes-detection,build-account-app] - if: ${{ needs.changes-detection.outputs.build-account-api == 'true' }} - uses: ./.github/workflows/aca-deploy.yaml - with: - env-name: ${{ needs.changes-detection.outputs.env-name}} - image-name: personal-finance-assistance-java/account-api - container-app-env-name: ${{ vars.ACA_DEV_ENV_NAME}} - container-app-name: ${{ vars.ACCOUNTS_ACA_DEV_APP_NAME }} - secrets: inherit - - build-transaction-app: - needs: changes-detection - if : ${{ needs.changes-detection.outputs.build-transaction-api == 'true' }} - uses: ./.github/workflows/acr-build-push.yaml - with: - env-name: ${{ needs.changes-detection.outputs.env-name}} - image-name: personal-finance-assistance-java/transactions-history-api - app-folder-path: ./app/business-api/transactions-history - secrets: inherit - - deploy-transaction-app: - needs: [changes-detection,build-transaction-app] - if: ${{ needs.changes-detection.outputs.build-transaction-api == 'true' }} - uses: ./.github/workflows/aca-deploy.yaml - with: - env-name: ${{ needs.changes-detection.outputs.env-name}} - image-name: personal-finance-assistance-java/transactions-history-api - container-app-env-name: ${{ vars.ACA_DEV_ENV_NAME}} - container-app-name: ${{ vars.TRANSACTIONS_ACA_DEV_APP_NAME }} - secrets: inherit - build-payment-app: - needs: changes-detection - if : ${{ needs.changes-detection.outputs.build-payment-api == 'true' }} - uses: ./.github/workflows/acr-build-push.yaml - with: - env-name: ${{ needs.changes-detection.outputs.env-name}} - image-name: personal-finance-assistance-java/payment-api - app-folder-path: ./app/business-api/payment - secrets: inherit - - deploy-payment-app: - needs: [changes-detection,build-payment-app] - if: ${{ needs.changes-detection.outputs.build-payment-api == 'true' }} - uses: ./.github/workflows/aca-deploy.yaml - with: - env-name: ${{ needs.changes-detection.outputs.env-name}} - image-name: personal-finance-assistance-java/payment-api - container-app-env-name: ${{ vars.ACA_DEV_ENV_NAME}} - container-app-name: ${{ vars.PAYMENTS_ACA_DEV_APP_NAME }} - secrets: inherit - - build-frontend-app: - needs: changes-detection - if : ${{ needs.changes-detection.outputs.build-frontend == 'true' }} - uses: ./.github/workflows/acr-build-push.yaml - with: - env-name: ${{ needs.changes-detection.outputs.env-name}} - image-name: personal-finance-assistance-java/web - app-folder-path: ./app/frontend - secrets: inherit - - deploy-frontend-app: - needs: [changes-detection,build-frontend-app] - if: ${{ needs.changes-detection.outputs.build-frontend == 'true' }} - uses: ./.github/workflows/aca-deploy.yaml - with: - env-name: ${{ needs.changes-detection.outputs.env-name}} - image-name: personal-finance-assistance-java/web - container-app-env-name: ${{ vars.ACA_DEV_ENV_NAME}} - container-app-name: ${{ vars.WEB_ACA_DEV_APP_NAME }} - secrets: inherit - - build-copilot-app: - needs: changes-detection - if : ${{ needs.changes-detection.outputs.build-copilot == 'true' }} - uses: ./.github/workflows/acr-build-push.yaml - with: - env-name: ${{ needs.changes-detection.outputs.env-name}} - image-name: personal-finance-assistance-java/copilot - app-folder-path: ./app/copilot - secrets: inherit - - deploy-copilot-app: - needs: [changes-detection,build-copilot-app] - if: ${{ needs.changes-detection.outputs.build-copilot == 'true' }} - uses: ./.github/workflows/aca-deploy.yaml - with: - env-name: ${{ needs.changes-detection.outputs.env-name}} - image-name: personal-finance-assistance-java/copilot - container-app-env-name: ${{ vars.ACA_DEV_ENV_NAME}} - container-app-name: ${{ vars.COPILOT_ACA_DEV_APP_NAME }} - secrets: inherit +name: Container Apps CI/CD pipeline + +on: + push: + branches: + - main + paths: + - "app/**" + tags: + - v*.*.* + workflow_dispatch: + +jobs: + changes-detection: + runs-on: ubuntu-latest + outputs: + env-name: ${{steps.set-deploy-env.outputs.DEPLOY_ENVIRONMENT}} + build-copilot: ${{ steps.changes.outputs.copilot }} + build-frontend: ${{ steps.changes.outputs.frontend }} + build-account-api: ${{ steps.changes.outputs.account-api }} + build-payment-api: ${{ steps.changes.outputs.payment-api }} + build-transaction-api: ${{ steps.changes.outputs.transaction-api }} + steps: + - uses: actions/checkout@v2 + - name: Filter Changes + uses: dorny/paths-filter@v2 + id: changes + with: + filters: | + copilot: + - 'app/copilot/**' + frontend: + - 'app/frontend/**' + account-api: + - 'app/business-api/account/**' + payment-api: + - 'app/business-api/payment/**' + transaction-api: + - 'app/business-api/transactions-history/**' + + - name: Set environment for branch + id: set-deploy-env + run: | + echo "checking branch name [${{github.ref_name}}]" + if [[ ${{github.ref_name}} == 'main' ]]; then + echo "main branch detected. Set Development environment" + echo "DEPLOY_ENVIRONMENT=Development" >> "$GITHUB_OUTPUT" + elif [[ ${{github.ref_name}} == *'release'* ]]; then + echo "release branch detected. Set Test environment" + echo "DEPLOY_ENVIRONMENT=Test" >> "$GITHUB_OUTPUT" + elif [[ ${{github.ref_name}} == *'v'* ]]; then + echo "tag detected. Set Production environment" + echo "DEPLOY_ENVIRONMENT=Production" >> "$GITHUB_OUTPUT" + else + echo "branch not detected. Set Development environment as default" + echo "DEPLOY_ENVIRONMENT=Development" >> "$GITHUB_OUTPUT" + fi + + build-account-app: + needs: changes-detection + if : ${{ needs.changes-detection.outputs.build-account-api == 'true' }} + uses: ./.github/workflows/acr-build-push.yaml + with: + env-name: ${{ needs.changes-detection.outputs.env-name}} + image-name: personal-finance-assistance-java/account-api + app-folder-path: ./app/business-api/account + secrets: inherit + + deploy-account-app: + needs: [changes-detection,build-account-app] + if: ${{ needs.changes-detection.outputs.build-account-api == 'true' }} + uses: ./.github/workflows/aca-deploy.yaml + with: + env-name: ${{ needs.changes-detection.outputs.env-name}} + image-name: personal-finance-assistance-java/account-api + container-app-env-name: ${{ vars.ACA_DEV_ENV_NAME}} + container-app-name: ${{ vars.ACCOUNTS_ACA_DEV_APP_NAME }} + secrets: inherit + + build-transaction-app: + needs: changes-detection + if : ${{ needs.changes-detection.outputs.build-transaction-api == 'true' }} + uses: ./.github/workflows/acr-build-push.yaml + with: + env-name: ${{ needs.changes-detection.outputs.env-name}} + image-name: personal-finance-assistance-java/transactions-history-api + app-folder-path: ./app/business-api/transactions-history + secrets: inherit + + deploy-transaction-app: + needs: [changes-detection,build-transaction-app] + if: ${{ needs.changes-detection.outputs.build-transaction-api == 'true' }} + uses: ./.github/workflows/aca-deploy.yaml + with: + env-name: ${{ needs.changes-detection.outputs.env-name}} + image-name: personal-finance-assistance-java/transactions-history-api + container-app-env-name: ${{ vars.ACA_DEV_ENV_NAME}} + container-app-name: ${{ vars.TRANSACTIONS_ACA_DEV_APP_NAME }} + secrets: inherit + build-payment-app: + needs: changes-detection + if : ${{ needs.changes-detection.outputs.build-payment-api == 'true' }} + uses: ./.github/workflows/acr-build-push.yaml + with: + env-name: ${{ needs.changes-detection.outputs.env-name}} + image-name: personal-finance-assistance-java/payment-api + app-folder-path: ./app/business-api/payment + secrets: inherit + + deploy-payment-app: + needs: [changes-detection,build-payment-app] + if: ${{ needs.changes-detection.outputs.build-payment-api == 'true' }} + uses: ./.github/workflows/aca-deploy.yaml + with: + env-name: ${{ needs.changes-detection.outputs.env-name}} + image-name: personal-finance-assistance-java/payment-api + container-app-env-name: ${{ vars.ACA_DEV_ENV_NAME}} + container-app-name: ${{ vars.PAYMENTS_ACA_DEV_APP_NAME }} + secrets: inherit + + build-frontend-app: + needs: changes-detection + if : ${{ needs.changes-detection.outputs.build-frontend == 'true' }} + uses: ./.github/workflows/acr-build-push.yaml + with: + env-name: ${{ needs.changes-detection.outputs.env-name}} + image-name: personal-finance-assistance-java/web + app-folder-path: ./app/frontend + secrets: inherit + + deploy-frontend-app: + needs: [changes-detection,build-frontend-app] + if: ${{ needs.changes-detection.outputs.build-frontend == 'true' }} + uses: ./.github/workflows/aca-deploy.yaml + with: + env-name: ${{ needs.changes-detection.outputs.env-name}} + image-name: personal-finance-assistance-java/web + container-app-env-name: ${{ vars.ACA_DEV_ENV_NAME}} + container-app-name: ${{ vars.WEB_ACA_DEV_APP_NAME }} + secrets: inherit + + build-copilot-app: + needs: changes-detection + if : ${{ needs.changes-detection.outputs.build-copilot == 'true' }} + uses: ./.github/workflows/acr-build-push.yaml + with: + env-name: ${{ needs.changes-detection.outputs.env-name}} + image-name: personal-finance-assistance-java/copilot + app-folder-path: ./app/copilot + secrets: inherit + + deploy-copilot-app: + needs: [changes-detection,build-copilot-app] + if: ${{ needs.changes-detection.outputs.build-copilot == 'true' }} + uses: ./.github/workflows/aca-deploy.yaml + with: + env-name: ${{ needs.changes-detection.outputs.env-name}} + image-name: personal-finance-assistance-java/copilot + container-app-env-name: ${{ vars.ACA_DEV_ENV_NAME}} + container-app-name: ${{ vars.COPILOT_ACA_DEV_APP_NAME }} + secrets: inherit \ No newline at end of file diff --git a/app/compose.yaml b/app/compose.yaml new file mode 100644 index 0000000..b852207 --- /dev/null +++ b/app/compose.yaml @@ -0,0 +1,40 @@ +services: + frontend: + image: personal-finance-assistant-java/frontend + build: ../../app/frontend + environment: + REACT_APP_API_BASE_URL: "http://copilot:8080" + ports: + - "80:80" + copilot: + image: personal-finance-assistant-java/copilot-backend + build: ../../app/copilot + environment: + - AZURE_STORAGE_ACCOUNT=${AZURE_STORAGE_ACCOUNT} + - AZURE_STORAGE_CONTAINER=${AZURE_STORAGE_CONTAINER} + - AZURE_OPENAI_CHATGPT_MODEL=${AZURE_OPENAI_CHATGPT_MODEL} + - AZURE_OPENAI_SERVICE=${AZURE_OPENAI_SERVICE} + - AZURE_OPENAI_CHATGPT_DEPLOYMENT=${AZURE_OPENAI_CHATGPT_DEPLOYMENT} + - spring_profiles_active=docker + - ACCOUNTS_API_SERVER_URL=http://account:8080 + - PAYMENTS_API_SERVER_URL=http://payment:8080 + - TRANSACTIONS_API_SERVER_URL=http://transaction:8080 + - AZURE_CLIENT_ID=${servicePrincipal} + - AZURE_CLIENT_SECRET=${servicePrincipalPassword} + - AZURE_TENANT_ID=${servicePrincipalTenant} + account: + image: personal-finance-assistant-java/business-account + build: + context: ../../app/business-api/account + payment: + image: personal-finance-assistant-java/business-payment + build: + context: ../../app/business-api/payment + environment: + - TRANSACTIONS_API_SERVER_URL=http://transaction:8080 + transaction: + image: personal-finance-assistant-java/business-transaction-history + build: + context: ../../app/business-api/transactions-history + + diff --git a/app/copilot/copilot-backend/pom.xml b/app/copilot/copilot-backend/pom.xml index 4e95a2c..90131d8 100644 --- a/app/copilot/copilot-backend/pom.xml +++ b/app/copilot/copilot-backend/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.13 + 3.3.2 com.microsoft.openai.samples.assistant @@ -17,9 +17,8 @@ 17 - 4.9.0 - 11.6.0-beta.8 - 1.1.5 + 5.14.0 + 1.2.2 4.5.1 3.11.0 @@ -92,12 +91,6 @@ com.azure azure-identity - 1.11.2 - - - com.azure - azure-core - 1.45.1 @@ -111,19 +104,6 @@ 20240303 - - - com.azure - azure-search-documents - ${azure-search.version} - - - com.azure - azure-core-serializer-json-jackson - - - - com.azure azure-storage-blob diff --git a/app/copilot/copilot-backend/src/main/java/com/microsoft/openai/samples/assistant/agent/AgentRouter.java b/app/copilot/copilot-backend/src/main/java/com/microsoft/openai/samples/assistant/agent/AgentRouter.java index daba39e..86c64cd 100644 --- a/app/copilot/copilot-backend/src/main/java/com/microsoft/openai/samples/assistant/agent/AgentRouter.java +++ b/app/copilot/copilot-backend/src/main/java/com/microsoft/openai/samples/assistant/agent/AgentRouter.java @@ -61,7 +61,7 @@ private void routeToAgent(IntentResponse intentResponse, ChatHistory chatHistory chatHistory.addAssistantMessage(agentContext.getResult()); break; case None: - chatHistory.addAssistantMessage(agentContext.getResult()); + chatHistory.addAssistantMessage(intentResponse.getMessage()!= null ? intentResponse.getMessage() : "Sorry. Can't help with that."); break; default: break; diff --git a/app/copilot/copilot-backend/src/main/java/com/microsoft/openai/samples/assistant/agent/IntentAgent.java b/app/copilot/copilot-backend/src/main/java/com/microsoft/openai/samples/assistant/agent/IntentAgent.java index 0997c9f..4a7e8e3 100644 --- a/app/copilot/copilot-backend/src/main/java/com/microsoft/openai/samples/assistant/agent/IntentAgent.java +++ b/app/copilot/copilot-backend/src/main/java/com/microsoft/openai/samples/assistant/agent/IntentAgent.java @@ -3,6 +3,7 @@ import com.azure.ai.openai.OpenAIAsyncClient; import com.azure.ai.openai.OpenAIClientBuilder; +import com.azure.ai.openai.models.ChatRequestUserMessage; import com.azure.core.credential.AzureKeyCredential; import com.azure.core.http.policy.HttpLogDetailLevel; import com.azure.core.http.policy.HttpLogOptions; @@ -11,9 +12,13 @@ import com.microsoft.semantickernel.orchestration.*; import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService; import com.microsoft.semantickernel.services.chatcompletion.ChatHistory; +import com.microsoft.semantickernel.services.chatcompletion.ChatMessageContent; import org.json.JSONException; import org.json.JSONObject; +import java.util.ArrayList; +import java.util.List; + public class IntentAgent { private OpenAIAsyncClient client; @@ -37,7 +42,7 @@ public class IntentAgent { } If you don't understand or if an intent is not identified be polite with the user, ask clarifying question also using the list of the available intents. -Don't add any comments in the output or other characters, just the use a json format. +Don't add any comments in the output or other characters, just use json format. """; @@ -71,6 +76,7 @@ public IntentAgent(String azureClientKey, String clientEndpoint, String modelId) public IntentResponse run(ChatHistory userChatHistory,AgentContext agentContext){ var agentChatHistory = new ChatHistory(INTENT_SYSTEM_MESSAGE); + agentChatHistory.addAll(fewShotExamples()); agentChatHistory.addAll(userChatHistory); var messages = chat.getChatMessageContentsAsync( @@ -110,6 +116,14 @@ public IntentResponse run(ChatHistory userChatHistory,AgentContext agentContext) return new IntentResponse(intentType, clarifySentence != null ? clarifySentence.toString() : ""); } + ChatHistory fewShotExamples(){ + return new ChatHistory() + .addUserMessage("can you buy stocks for me?") + .addAssistantMessage("{\"intent\": \"None\", \"clarify_sentence\":\"I'm sorry can't help with that.I can review your account details, transactions and help you with your payments\"") + .addUserMessage("can you pay this bill for me?") + .addAssistantMessage("{\"intent\": \"BillPayment\" }"); + } + } diff --git a/app/frontend/package-lock.json b/app/frontend/package-lock.json index f7a19b7..4675a99 100644 --- a/app/frontend/package-lock.json +++ b/app/frontend/package-lock.json @@ -15,6 +15,7 @@ "@fluentui/react-icons": "^2.0.221", "@react-spring/web": "^9.7.3", "dompurify": "^3.0.6", + "frontend": "file:", "ndjson-readablestream": "^1.0.7", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -2742,6 +2743,10 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, + "node_modules/frontend": { + "resolved": "", + "link": true + }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -5230,6 +5235,2307 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, + "frontend": { + "version": "file:", + "requires": { + "@azure/msal-browser": "^3.1.0", + "@azure/msal-react": "^2.0.4", + "@fluentui/react": "^8.112.5", + "@fluentui/react-components": "^9.37.3", + "@fluentui/react-icons": "^2.0.221", + "@react-spring/web": "^9.7.3", + "@types/dompurify": "^3.0.3", + "@types/react": "^18.2.34", + "@types/react-dom": "^18.2.14", + "@vitejs/plugin-react": "^4.1.1", + "dompurify": "^3.0.6", + "frontend": "file:", + "ndjson-readablestream": "^1.0.7", + "prettier": "^3.0.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.18.0", + "scheduler": "^0.20.2", + "typescript": "^5.2.2", + "vite": "^4.5.3" + }, + "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", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@azure/msal-browser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.2.0.tgz", + "integrity": "sha512-le2qutddMiq0i3ErQaLKuwP1DpNgdd9iXPs3fSCsLuBrdGg9B4/j4ArCAHCwgxA82Ydj9BcqtMIL5BSWwU+P5A==", + "requires": { + "@azure/msal-common": "14.1.0" + } + }, + "@azure/msal-common": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.1.0.tgz", + "integrity": "sha512-xphmhcfl5VL+uq5//VKMwQn+wfEZLMKNpFCcMi8Ur8ej5UT166g6chBsxgMzc9xo9Y24R9FB3m/tjDiV03xMIA==" + }, + "@azure/msal-react": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@azure/msal-react/-/msal-react-2.0.4.tgz", + "integrity": "sha512-BujRm5FBDWYXyr3pnmubS4dIqZMlurYVtV2AyztoeAFUd+nh3XQZD9knHBqTyu53IDjhCCvUPUke/jSkv5WGlg==", + "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==", + "dev": true, + "requires": { + "@babel/highlight": "^7.23.4", + "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==", + "dev": true + }, + "@babel/core": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + } + }, + "@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "requires": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@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", + "@babel/types": "^7.23.0" + } + }, + "@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" + } + }, + "@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==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@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" + } + }, + "@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==", + "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==", + "dev": true + }, + "@babel/helpers": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" + } + }, + "@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==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "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==", + "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==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/runtime": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "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", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + } + }, + "@babel/traverse": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@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.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@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.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.11.tgz", + "integrity": "sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.11.tgz", + "integrity": "sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.11.tgz", + "integrity": "sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.11.tgz", + "integrity": "sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.11.tgz", + "integrity": "sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.11.tgz", + "integrity": "sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.11.tgz", + "integrity": "sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.11.tgz", + "integrity": "sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.11.tgz", + "integrity": "sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.11.tgz", + "integrity": "sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.11.tgz", + "integrity": "sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.11.tgz", + "integrity": "sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.11.tgz", + "integrity": "sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.11.tgz", + "integrity": "sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.11.tgz", + "integrity": "sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.11.tgz", + "integrity": "sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.11.tgz", + "integrity": "sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.11.tgz", + "integrity": "sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.11.tgz", + "integrity": "sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.11.tgz", + "integrity": "sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.11.tgz", + "integrity": "sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.11.tgz", + "integrity": "sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==", + "dev": true, + "optional": true + }, + "@floating-ui/core": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz", + "integrity": "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==", + "requires": { + "@floating-ui/utils": "^0.2.0" + } + }, + "@floating-ui/devtools": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/devtools/-/devtools-0.2.1.tgz", + "integrity": "sha512-8PHJLbD6VhBh+LJ1uty/Bz30qs02NXCE5u8WpOhSewlYXUWl03GNXknr9AS2yaAWJEQaY27x7eByJs44gODBcw==", + "requires": {} + }, + "@floating-ui/dom": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.4.tgz", + "integrity": "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==", + "requires": { + "@floating-ui/core": "^1.5.3", + "@floating-ui/utils": "^0.2.0" + } + }, + "@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, + "@fluentui/date-time-utilities": { + "version": "8.5.16", + "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-8.5.16.tgz", + "integrity": "sha512-l+mLfJ2VhdHjBpELLLPDaWgT7GMLynm2aqR7SttbEb6Jh7hc/7ck1MWm93RTb3gYVHYai8SENqimNcvIxHt/zg==", + "requires": { + "@fluentui/set-version": "^8.2.14", + "tslib": "^2.1.0" + } + }, + "@fluentui/dom-utilities": { + "version": "2.2.14", + "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-2.2.14.tgz", + "integrity": "sha512-+4DVm5sNfJh+l8fM+7ylpOkGNZkNr4X1z1uKQPzRJ1PRhlnvc6vLpWNNicGwpjTbgufSrVtGKXwP5sf++r81lg==", + "requires": { + "@fluentui/set-version": "^8.2.14", + "tslib": "^2.1.0" + } + }, + "@fluentui/font-icons-mdl2": { + "version": "8.5.31", + "resolved": "https://registry.npmjs.org/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.5.31.tgz", + "integrity": "sha512-jioHZ9XUfR9vUT5XnxdCrJ+hoC9TpYim+4YdtlUE/euI8kdW1tDZ5zqlSNk1GLDR34n03R09yWj5gVDCcMJbyQ==", + "requires": { + "@fluentui/set-version": "^8.2.14", + "@fluentui/style-utilities": "^8.10.2", + "@fluentui/utilities": "^8.13.24", + "tslib": "^2.1.0" + } + }, + "@fluentui/foundation-legacy": { + "version": "8.2.51", + "resolved": "https://registry.npmjs.org/@fluentui/foundation-legacy/-/foundation-legacy-8.2.51.tgz", + "integrity": "sha512-z/jrp1imV66/D2MGpN/55LGk/Istymk5tN+XUFHDENDi+9zyb2MgSxFshp774DJIrg3vVlyuS8oo+dBuTM3UbQ==", + "requires": { + "@fluentui/merge-styles": "^8.5.15", + "@fluentui/set-version": "^8.2.14", + "@fluentui/style-utilities": "^8.10.2", + "@fluentui/utilities": "^8.13.24", + "tslib": "^2.1.0" + } + }, + "@fluentui/keyboard-key": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@fluentui/keyboard-key/-/keyboard-key-0.4.14.tgz", + "integrity": "sha512-XzZHcyFEM20H23h3i15UpkHi2AhRBriXPGAHq0Jm98TKFppXehedjjEFuUsh+CyU5JKBhDalWp8TAQ1ArpNzow==", + "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.15", + "resolved": "https://registry.npmjs.org/@fluentui/merge-styles/-/merge-styles-8.5.15.tgz", + "integrity": "sha512-4CdKwo4k1Un2QLulpSVIz/KMgLNBMgin4NPyapmKDMVuO1OOxJUqfocubRGNO5x9mKgAMMYwBKGO9i0uxMMpJw==", + "requires": { + "@fluentui/set-version": "^8.2.14", + "tslib": "^2.1.0" + } + }, + "@fluentui/priority-overflow": { + "version": "9.1.11", + "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.1.11.tgz", + "integrity": "sha512-sdrpavvKX2kepQ1d6IaI3ObLq5SAQBPRHPGx2+wiMWL7cEx9vGGM0fmeicl3soqqmM5uwCmWnZk9QZv9XOY98w==", + "requires": { + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react": { + "version": "8.114.4", + "resolved": "https://registry.npmjs.org/@fluentui/react/-/react-8.114.4.tgz", + "integrity": "sha512-dVpfFSpWUxdyqWlCVSXX5d34S760h4MaQjGR2/TPavtcJRRpJDHbBN2Hn7s4riA6YX5N7bTdN372UvIVbBbzuw==", + "requires": { + "@fluentui/date-time-utilities": "^8.5.16", + "@fluentui/font-icons-mdl2": "^8.5.31", + "@fluentui/foundation-legacy": "^8.2.51", + "@fluentui/merge-styles": "^8.5.15", + "@fluentui/react-focus": "^8.8.38", + "@fluentui/react-hooks": "^8.6.36", + "@fluentui/react-portal-compat-context": "^9.0.11", + "@fluentui/react-window-provider": "^2.2.18", + "@fluentui/set-version": "^8.2.14", + "@fluentui/style-utilities": "^8.10.2", + "@fluentui/theme": "^2.6.41", + "@fluentui/utilities": "^8.13.24", + "@microsoft/load-themed-styles": "^1.10.26", + "tslib": "^2.1.0" + } + }, + "@fluentui/react-accordion": { + "version": "9.3.38", + "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.3.38.tgz", + "integrity": "sha512-BB8d9+Jr0v4SW58OJTIyvsxhA/iOBbvIkQZlVHKqt4tL8dHOIFPrApw5WqQqaSYJsEwt4HxmlNU4Dv8qRughbg==", + "requires": { + "@fluentui/react-aria": "^9.7.3", + "@fluentui/react-context-selector": "^9.1.49", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-alert": { + "version": "9.0.0-beta.104", + "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.104.tgz", + "integrity": "sha512-Z8BGSyzEKok5wlJF2cUc8GUj2q+c1D+119YF0WtHLiieh7pwOHjBcDJOHqnaVnQNbhetIA3NUht2z0e1wgOK5w==", + "requires": { + "@fluentui/react-avatar": "^9.6.9", + "@fluentui/react-button": "^9.3.65", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-aria": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.7.3.tgz", + "integrity": "sha512-YwyPNEcBDCdY6YzhrIrtlSrLs2Le7X1jLq9em8OnqHeiO22dBmg5xlBJoAMwJ8awCpI9xhu1PhU/2VJY4YqNuA==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-utilities": "^9.16.1", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-avatar": { + "version": "9.6.9", + "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.6.9.tgz", + "integrity": "sha512-3aZeUhGOg+UlHsp2x//G4VKRWKclcsZvX6L9UVnHsA/nQqRw7C5Bfo9iFNsEeJ3R5W5mFA6LyEFWedJ7QdAmdQ==", + "requires": { + "@fluentui/react-badge": "^9.2.22", + "@fluentui/react-context-selector": "^9.1.49", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-popover": "^9.8.33", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-tooltip": "^9.4.11", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-badge": { + "version": "9.2.22", + "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.2.22.tgz", + "integrity": "sha512-zzimP5mZiiCOm8expUTzD6yvvKbnKq22PK/L6+oNpifrvQnDwJF/0nwXQVjA3+icNoYTaHe/q0fFivpXV+Js6g==", + "requires": { + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-breadcrumb": { + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.0.11.tgz", + "integrity": "sha512-L+AQqZz1gqkScD8IW1CjZWGNrDaHDc/gSv+PrvgSZeGDPibGj6TnLygJ7BKM+rQ+Hc2SbCogKbERpQZCbrSFvA==", + "requires": { + "@fluentui/react-aria": "^9.7.3", + "@fluentui/react-button": "^9.3.65", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-link": "^9.2.7", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-button": { + "version": "9.3.65", + "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.3.65.tgz", + "integrity": "sha512-3VOt29AugkfR7VMnkKON449E7Sn/nvc6BBT4kJDGKQY+Nm5d2p9e4HmHp1UaM9zRPt47lagTY2WFJNrKKSe/BA==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.7.3", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-card": { + "version": "9.0.64", + "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.0.64.tgz", + "integrity": "sha512-TB/Zk+tLDUPNyAd2y8BvN0T2nroimtBOpB5GTK72E5sWPk0kaKIHwBEfXxNFGdGXcw0TAmVNqYi4ks37vh0Rgg==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-checkbox": { + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.2.8.tgz", + "integrity": "sha512-L4aWzeZdi98d0ZhgNPtxghfhasQv1qlxIRMaPxtwvk5TN6i9YmRF8vf5Pmf0PESjT+zp3VPcisHcIfcqG26SmQ==", + "requires": { + "@fluentui/react-field": "^9.1.50", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-label": "^9.1.58", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-combobox": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.7.0.tgz", + "integrity": "sha512-YmTdg04rvsg2+Dkw3ob+YLnS9rm3TLVMMNYTH0T64/FM3qirHntIXGbhMZXP5Cdo14gzQwr/e78NjBRKfYO4Wg==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-context-selector": "^9.1.49", + "@fluentui/react-field": "^9.1.50", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-portal": "^9.4.10", + "@fluentui/react-positioning": "^9.12.4", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-components": { + "version": "9.45.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.45.0.tgz", + "integrity": "sha512-Y+Laj1dvRcCp/nWT0DExRXoh7oKTX458g6oltrGjhIHikq4D6/kssK5tfhCyknPLwIlVSYi5J+G6L3NfvI8a8w==", + "requires": { + "@fluentui/react-accordion": "^9.3.38", + "@fluentui/react-alert": "9.0.0-beta.104", + "@fluentui/react-avatar": "^9.6.9", + "@fluentui/react-badge": "^9.2.22", + "@fluentui/react-breadcrumb": "^9.0.11", + "@fluentui/react-button": "^9.3.65", + "@fluentui/react-card": "^9.0.64", + "@fluentui/react-checkbox": "^9.2.8", + "@fluentui/react-combobox": "^9.7.0", + "@fluentui/react-dialog": "^9.9.7", + "@fluentui/react-divider": "^9.2.58", + "@fluentui/react-drawer": "^9.1.1", + "@fluentui/react-field": "^9.1.50", + "@fluentui/react-image": "^9.1.55", + "@fluentui/react-infobutton": "9.0.0-beta.88", + "@fluentui/react-infolabel": "^9.0.16", + "@fluentui/react-input": "^9.4.60", + "@fluentui/react-label": "^9.1.58", + "@fluentui/react-link": "^9.2.7", + "@fluentui/react-menu": "^9.12.45", + "@fluentui/react-message-bar": "^9.0.16", + "@fluentui/react-overflow": "^9.1.8", + "@fluentui/react-persona": "^9.2.68", + "@fluentui/react-popover": "^9.8.33", + "@fluentui/react-portal": "^9.4.10", + "@fluentui/react-positioning": "^9.12.4", + "@fluentui/react-progress": "^9.1.60", + "@fluentui/react-provider": "^9.13.8", + "@fluentui/react-radio": "^9.2.3", + "@fluentui/react-select": "^9.1.60", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-skeleton": "^9.0.48", + "@fluentui/react-slider": "^9.1.65", + "@fluentui/react-spinbutton": "^9.2.60", + "@fluentui/react-spinner": "^9.3.38", + "@fluentui/react-switch": "^9.1.65", + "@fluentui/react-table": "^9.11.5", + "@fluentui/react-tabs": "^9.4.6", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-tags": "^9.0.22", + "@fluentui/react-text": "^9.4.7", + "@fluentui/react-textarea": "^9.3.60", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-toast": "^9.3.27", + "@fluentui/react-toolbar": "^9.1.66", + "@fluentui/react-tooltip": "^9.4.11", + "@fluentui/react-tree": "^9.4.25", + "@fluentui/react-utilities": "^9.16.1", + "@fluentui/react-virtualizer": "9.0.0-alpha.66", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-context-selector": { + "version": "9.1.49", + "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.49.tgz", + "integrity": "sha512-u4wRNfnyfuZDalVEESBPFQ0Ue4yYu+ozkPQvuEV6kriQGnAQQyyVbIidOCuP7Sja0nBwgM8eAzK0uX/slmmj3Q==", + "requires": { + "@fluentui/react-utilities": "^9.16.1", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-dialog": { + "version": "9.9.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.9.7.tgz", + "integrity": "sha512-5/6MeaHOYpx8Vt0auMJGLCjn6O1IYtl6IhwdwRNXL6AS1o4F24IKXdWZPtiHWuvzbuZAQd3+5nRDUE5KC9We6A==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.7.3", + "@fluentui/react-context-selector": "^9.1.49", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-portal": "^9.4.10", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1", + "react-transition-group": "^4.4.1" + } + }, + "@fluentui/react-divider": { + "version": "9.2.58", + "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.2.58.tgz", + "integrity": "sha512-y1ECy1zM4imKhpyOyUGugB+J30tfySO5hhrsIcpaiUQxRjE4IhZf2ZG6EqAQYLinJ+hV06yLZoazekljlvk6yw==", + "requires": { + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-drawer": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.1.1.tgz", + "integrity": "sha512-3zvbbeaLLJZa4MXRpW8Ta4DFZ5457Tq9/4a0CqsIW/+8EuwtJwO+FB5a0DS6j0q6kN4mjkWF19OvzMkJsSTRVw==", + "requires": { + "@fluentui/react-dialog": "^9.9.7", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-motion-preview": "^0.5.10", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-field": { + "version": "9.1.50", + "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.1.50.tgz", + "integrity": "sha512-2mbx7YReMWvrgi3set9KepLLgMyNJ7StLu/HiHMM3jkcgPt3mGfwoJEsEKt+xd8eUAo4b82F7t+tHI4f9yzJaQ==", + "requires": { + "@fluentui/react-context-selector": "^9.1.49", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-label": "^9.1.58", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-focus": { + "version": "8.8.38", + "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-8.8.38.tgz", + "integrity": "sha512-vnsaY7hJSPIJBxm5Pj0FrcFDumV6kKgFVpsKsEKJzb1D88rDDLcmvz9jWUx68a3ru6idEbZYmyePGT1IiRsAug==", + "requires": { + "@fluentui/keyboard-key": "^0.4.14", + "@fluentui/merge-styles": "^8.5.15", + "@fluentui/set-version": "^8.2.14", + "@fluentui/style-utilities": "^8.10.2", + "@fluentui/utilities": "^8.13.24", + "tslib": "^2.1.0" + } + }, + "@fluentui/react-hooks": { + "version": "8.6.36", + "resolved": "https://registry.npmjs.org/@fluentui/react-hooks/-/react-hooks-8.6.36.tgz", + "integrity": "sha512-kI0Z4Q4xHUs4SOmmI5n5OH5fPckqMSCovTRpiuxzCO2TNzLmfC861+nqf4Ygw/ChqNm2gWNZZfUADfnNAEsq+Q==", + "requires": { + "@fluentui/react-window-provider": "^2.2.18", + "@fluentui/set-version": "^8.2.14", + "@fluentui/utilities": "^8.13.24", + "tslib": "^2.1.0" + } + }, + "@fluentui/react-icons": { + "version": "2.0.225", + "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.225.tgz", + "integrity": "sha512-L9phN3bAMlZCa5+/ObGjIO+5GI8M50ym766sraSq92jaJwgAXrCJDLWuDGWZRGrC63DcagtR2culptj3q7gMMg==", + "requires": { + "@griffel/react": "^1.0.0", + "tslib": "^2.1.0" + } + }, + "@fluentui/react-image": { + "version": "9.1.55", + "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.1.55.tgz", + "integrity": "sha512-hYP61OWLuGSJNPOGJXtphbiDESfLB+/vsODKQsJhrDRJ2CSNMAfNznPHucqGRRN6AWQOI/BynJDS5F22Y//7CQ==", + "requires": { + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-infobutton": { + "version": "9.0.0-beta.88", + "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.88.tgz", + "integrity": "sha512-NVZyfrLtoFNu7cGkp2ORWsxJiCk1JgN4CVBDj03QSIh14EsPMwphYgDwfQ8TZOF2Nub0DGtC7/tF8IUlb/aP6g==", + "requires": { + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-label": "^9.1.58", + "@fluentui/react-popover": "^9.8.33", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-infolabel": { + "version": "9.0.16", + "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.0.16.tgz", + "integrity": "sha512-UCY+2vB4vOn0LfVhbgkyNG0EiuKIe0PdxEAtLU2PqosHLkaLKnYDKJdiIS/oaFmyNtGHmMxRkigvZpZ7h74f9g==", + "requires": { + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-label": "^9.1.58", + "@fluentui/react-popover": "^9.8.33", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-input": { + "version": "9.4.60", + "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.4.60.tgz", + "integrity": "sha512-kuk24K0X0gckTCssXoiWvZsTFVpZJv+WPl2fkjxeffzmFfBZtJUFQkXeC4/hcAg+aScjZnEtqjHjwDEbjZqkeA==", + "requires": { + "@fluentui/react-field": "^9.1.50", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-jsx-runtime": { + "version": "9.0.27", + "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.0.27.tgz", + "integrity": "sha512-9wxsWxVI7RLXsdK+7lzp7TK0FJKnrrj+Igxn0prqAvXdBRiFcuycoCJaHzC4Ka+Hsiol8NQg6xaIR59a28lmyQ==", + "requires": { + "@fluentui/react-utilities": "^9.16.1", + "@swc/helpers": "^0.5.1", + "react-is": "^17.0.2" + } + }, + "@fluentui/react-label": { + "version": "9.1.58", + "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.1.58.tgz", + "integrity": "sha512-0ouSMop4vpXJzMvAyfmIr3TgDM/W1k+GFm8ZPD5fDQCopSJ+h3kvUZg5pqaXpBwamvZ16+qRARfTNITp2U7Rjw==", + "requires": { + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-link": { + "version": "9.2.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.2.7.tgz", + "integrity": "sha512-z4X9dcUc/7FlqDxbGKbOfWubru+QimtzgMtlVxZ30pkC959hfIbFpbBY6Me76UOuFiOZxUPdfyY/73ekhhhVxw==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-menu": { + "version": "9.12.45", + "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.12.45.tgz", + "integrity": "sha512-qhpmuvAB4DUmmC5lNMakVvZjTdj/GZnH6WctNGZp94iCZLhcnIQcM9l0PvRpUpU1v3irXRyE5QV+x+wXC0awTw==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.7.3", + "@fluentui/react-context-selector": "^9.1.49", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-portal": "^9.4.10", + "@fluentui/react-positioning": "^9.12.4", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-message-bar": { + "version": "9.0.16", + "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.0.16.tgz", + "integrity": "sha512-R1VnqcFwu0pM2Yk8rjkN48Lx/n44UFD13BuY8/JeEuU8XQ8hLnEBVtdHjzRPJk+iM5in2ScMMQj4Z0nWyCRM1Q==", + "requires": { + "@fluentui/react-button": "^9.3.65", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1", + "react-transition-group": "^4.4.1" + } + }, + "@fluentui/react-motion-preview": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@fluentui/react-motion-preview/-/react-motion-preview-0.5.10.tgz", + "integrity": "sha512-6iwF3N4hB6IxCoFVusgA2mp6mrTknwcsVGNYEQw1YF5WgGOMF3M0N1xNpN61/SYziT6HSUaI38NaA7LI3Dp3Sw==", + "requires": { + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-overflow": { + "version": "9.1.8", + "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.1.8.tgz", + "integrity": "sha512-W8L68+0bUtfGr72LRx+U05EZLO0E8VMfscDiNKiEjDrOqdBnqNAIDN86825wrN77HH2wvILN07EhPOauqzz8YQ==", + "requires": { + "@fluentui/priority-overflow": "^9.1.11", + "@fluentui/react-context-selector": "^9.1.49", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-persona": { + "version": "9.2.68", + "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.2.68.tgz", + "integrity": "sha512-CYtDiZ34GGaw7lZ85uHZOuYXzkY21VHN6cUlGY1TJn98+Xz+y7JoVLIG7KZHHp2JzmmjtwjvgnqAdOun5LrWig==", + "requires": { + "@fluentui/react-avatar": "^9.6.9", + "@fluentui/react-badge": "^9.2.22", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-popover": { + "version": "9.8.33", + "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.33.tgz", + "integrity": "sha512-0yPX6KCdMEGmrvJnQles5iTKN0OZ2vNSPVdkbyEKIUKj5DrNK1cMZEV/7Tgrtn922fx3/74FLMqEpEDTdrvQ/Q==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.7.3", + "@fluentui/react-context-selector": "^9.1.49", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-portal": "^9.4.10", + "@fluentui/react-positioning": "^9.12.4", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-portal": { + "version": "9.4.10", + "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.4.10.tgz", + "integrity": "sha512-k8fTRv9wTPSPCuNBFE2HxIhXsVYoG6Azb6Ib2xaDK+nczoW2WbsmNmwBJGEGi8UKjIoQzV+95KsYQ9me+uqKPA==", + "requires": { + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1", + "use-disposable": "^1.0.1" + } + }, + "@fluentui/react-portal-compat-context": { + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-portal-compat-context/-/react-portal-compat-context-9.0.11.tgz", + "integrity": "sha512-ubvW/ej0O+Pago9GH3mPaxzUgsNnBoqvghNamWjyKvZIViyaXUG6+sgcAl721R+qGAFac+A20akI5qDJz/xtdg==", + "requires": { + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-positioning": { + "version": "9.12.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.12.4.tgz", + "integrity": "sha512-qQAjHF/FJFs2TyK0x08t0iFtDQlGNGH0OFC3jrG1xIFEe3nFPoeYeNT3zxOmj+D7bvlcJTIITcoe++YQTnCf4w==", + "requires": { + "@floating-ui/devtools": "0.2.1", + "@floating-ui/dom": "^1.2.0", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-progress": { + "version": "9.1.60", + "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.1.60.tgz", + "integrity": "sha512-9wC7lWdo3S8rhxKWlIhcYAzsZNw+rL2HvNJTvEvFxXcOG7nJxP/3mGclV/jCCwDoPDnt9BT+40pGK84eD0BNIA==", + "requires": { + "@fluentui/react-field": "^9.1.50", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-provider": { + "version": "9.13.8", + "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.13.8.tgz", + "integrity": "sha512-FCvDMjs/BNAcqJuHU+kN/lqLB2RDQ/LQo29ltfLKFlTR1nTUNJvPMOVhjj6eEt+t81628LOYhbbaXOj9rYtfGg==", + "requires": { + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/core": "^1.14.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-radio": { + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.2.3.tgz", + "integrity": "sha512-8eKeUL0ZNr792Q6NGWPp7dpOV2IFcjAQ2oWR2/bruQVu8LMzYYKe2o6pQWdCag6UGPZuszkms9Xl7zPdDQBUdA==", + "requires": { + "@fluentui/react-field": "^9.1.50", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-label": "^9.1.58", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-select": { + "version": "9.1.60", + "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.1.60.tgz", + "integrity": "sha512-4HfRRTlGStOgtO00RY6jmOwz6MXnoa9gtjkV7StLmJZ2U5NTjVUrnp2dP1Vjb6hO13xaihWGEYyYKnsQ3R7kIw==", + "requires": { + "@fluentui/react-field": "^9.1.50", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-shared-contexts": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.14.0.tgz", + "integrity": "sha512-P9yhg31WYfB1W66/gD3+qVCLBsyIEcOzQvKVaIQvd9UhF67lNW4kMXUB6YVOk5PV0Og4hXnkH/vuHl7YMD9RHw==", + "requires": { + "@fluentui/react-theme": "^9.1.16", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-skeleton": { + "version": "9.0.48", + "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.0.48.tgz", + "integrity": "sha512-P0Rw5hIOn5CrZIWg7nVoK3gamxFhZI80KcRVaWap4O3gLo5C8nKHJWOtyBQZ5WKH+S6hoEGZ2USL6CoyXslxeQ==", + "requires": { + "@fluentui/react-field": "^9.1.50", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-slider": { + "version": "9.1.65", + "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.1.65.tgz", + "integrity": "sha512-7kuJMIojxCmNOuiRmQwh9iiXx8zwxkrgvsWmReRIBX0WB6w1VqMcuuikq2Z2ISgNPmepCX8W+qDfx8Ne4F/HtQ==", + "requires": { + "@fluentui/react-field": "^9.1.50", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-spinbutton": { + "version": "9.2.60", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.2.60.tgz", + "integrity": "sha512-0IIxEH0CTf4fNMoyvMa37bc63+0ZlznlsNy8lF3hujAT8Z9sUKVMH68e6tGUuXGJIkCUyDKU8HA+9FF2DyPvNA==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-field": "^9.1.50", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-spinner": { + "version": "9.3.38", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.3.38.tgz", + "integrity": "sha512-dPJr7/rgU2Qe/K2BciJTAEwEd0ytGpCw3VOVyK2T25w7Jw5RAHmgP+mbw+7se44Mr6sd1LH76mh5sfmQ3tODgw==", + "requires": { + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-label": "^9.1.58", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-switch": { + "version": "9.1.65", + "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.1.65.tgz", + "integrity": "sha512-P0DwogD6hZJ3O005zCFPDoFXuzkrpKMrAeQGh9X0fqFP5JyHXVCgAAZQOLcphbbT9QukoEF5irN2Z4L9gBn57A==", + "requires": { + "@fluentui/react-field": "^9.1.50", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-label": "^9.1.58", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-table": { + "version": "9.11.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.11.5.tgz", + "integrity": "sha512-roQRITOtl1aqXlachS2oTraVE45x3KdDrX0KyQGCdcQRxNprXJW6dIK9QjlbAL6yAsAMDafmFA4y9uRxl408dQ==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.7.3", + "@fluentui/react-avatar": "^9.6.9", + "@fluentui/react-checkbox": "^9.2.8", + "@fluentui/react-context-selector": "^9.1.49", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-radio": "^9.2.3", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-tabs": { + "version": "9.4.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.4.6.tgz", + "integrity": "sha512-LQvibLeJFyqKKiOjZUkRvbfLtsVosUhNUdh1SCQUPxQVpEPSK6XgwK0A1+jjoVhKn+PAJakxRINgnvqQD8pQBA==", + "requires": { + "@fluentui/react-context-selector": "^9.1.49", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-tabster": { + "version": "9.17.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.17.3.tgz", + "integrity": "sha512-cFcUYrkGW15w5yXzCPTTVG/7x5kNXxnhQXuh8SPyCc9JZeG7XI3+hy1T37PsXGxNS4KN9ePHkBHzgDfYO4gzYQ==", + "requires": { + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1", + "keyborg": "^2.3.0", + "tabster": "^5.0.1" + } + }, + "@fluentui/react-tags": { + "version": "9.0.22", + "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.0.22.tgz", + "integrity": "sha512-gQIOCVu3HIfGjtAmwOnwBEnTsNyRBU8Pvs6EugpUyyqkRjzbm5TnL3LtiUy4f6/+NuaRqcYAvhwpdUhrlciwcA==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.7.3", + "@fluentui/react-avatar": "^9.6.9", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-text": { + "version": "9.4.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.4.7.tgz", + "integrity": "sha512-c6uJ98B35L8sviYxhQj1i+LW+HVNDdco2ImS9VLv/Duo4HiYs1G2y1YhtBDDiGxLe2moIvfg9ajDzMZV29aXFw==", + "requires": { + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-textarea": { + "version": "9.3.60", + "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.3.60.tgz", + "integrity": "sha512-wH4MBWT4EOgNH9FXTjcgH34oANUaoduhmVjffnxaPl3R767Ak0fZPG7kky7yrLMjTDUSwILsEj/q+hsN6o+7Ag==", + "requires": { + "@fluentui/react-field": "^9.1.50", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.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.27", + "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.3.27.tgz", + "integrity": "sha512-DbRAYyL5Bd/pcFiGHPpK+rQMyc4LBll9YBy496l97dGDO2HmqFuiwP74V1KznxLcr4inCNWwThIJws5VLFsJLg==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.7.3", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-portal": "^9.4.10", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1", + "react-transition-group": "^4.4.1" + } + }, + "@fluentui/react-toolbar": { + "version": "9.1.66", + "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.1.66.tgz", + "integrity": "sha512-ooNTp1R5MBZwiVK8fiJu29gE48vUx4NbXdwB2yHcCprasG3asjuoKQfOYM4+1NfFA0DetVrbK8L46IBeZyeBvA==", + "requires": { + "@fluentui/react-button": "^9.3.65", + "@fluentui/react-context-selector": "^9.1.49", + "@fluentui/react-divider": "^9.2.58", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-radio": "^9.2.3", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-tooltip": { + "version": "9.4.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.4.11.tgz", + "integrity": "sha512-HXm8yYuAHJuczeFExco0WQSjO3DzDj5AJxqICHF8qtbtihUKfWpPnKM1qQWR+yJR2zc2jzvOEIzZXEkxSG+fSg==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-portal": "^9.4.10", + "@fluentui/react-positioning": "^9.12.4", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-tree": { + "version": "9.4.25", + "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.4.25.tgz", + "integrity": "sha512-7IMqnOiNFMRuPujnbxJUYD8AEh0z1OGXkdNkAeLyj3pkwuvQs9+TbaNtv5Z372YN+kwYF4EYalYcPuNsRlx7cQ==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.7.3", + "@fluentui/react-avatar": "^9.6.9", + "@fluentui/react-button": "^9.3.65", + "@fluentui/react-checkbox": "^9.2.8", + "@fluentui/react-context-selector": "^9.1.49", + "@fluentui/react-icons": "^2.0.224", + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-radio": "^9.2.3", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-tabster": "^9.17.3", + "@fluentui/react-theme": "^9.1.16", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-utilities": { + "version": "9.16.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.16.1.tgz", + "integrity": "sha512-2wdwmgTFcVy14ZLbRNJ8Q6dCCBLekkJ8Znnok68gKRLDcwpPT3UjSraoU+DGjOA5BMfPppZBU8Yb5GqdIfd48g==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-shared-contexts": "^9.14.0", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-virtualizer": { + "version": "9.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.66.tgz", + "integrity": "sha512-x/ZOAIAwctt7pvOBIzS4iZGU0ahiPhQFS7iAHksFkF9LimneaV92A/02dW0Cy4v7dv9wZNoosQwhS05Yx3DVDQ==", + "requires": { + "@fluentui/react-jsx-runtime": "^9.0.27", + "@fluentui/react-shared-contexts": "^9.14.0", + "@fluentui/react-utilities": "^9.16.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-window-provider": { + "version": "2.2.18", + "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-2.2.18.tgz", + "integrity": "sha512-nBKqxd0P8NmIR0qzFvka1urE2LVbUm6cse1I1T7TcOVNYa5jDf5BrO06+JRZfwbn00IJqOnIVoP0qONqceypWQ==", + "requires": { + "@fluentui/set-version": "^8.2.14", + "tslib": "^2.1.0" + } + }, + "@fluentui/set-version": { + "version": "8.2.14", + "resolved": "https://registry.npmjs.org/@fluentui/set-version/-/set-version-8.2.14.tgz", + "integrity": "sha512-f/QWJnSeyfAjGAqq57yjMb6a5ejPlwfzdExPmzFBuEOuupi8hHbV8Yno12XJcTW4I0KXEQGw+PUaM1aOf/j7jw==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@fluentui/style-utilities": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/@fluentui/style-utilities/-/style-utilities-8.10.2.tgz", + "integrity": "sha512-ocELtMb/85nBa3rSfiAIwYx6TydN+3rQqv1P0H/L7etYNNtxOfS86JSWfn8zAsHMejbwUKJ1ZsIKs47c598XGQ==", + "requires": { + "@fluentui/merge-styles": "^8.5.15", + "@fluentui/set-version": "^8.2.14", + "@fluentui/theme": "^2.6.41", + "@fluentui/utilities": "^8.13.24", + "@microsoft/load-themed-styles": "^1.10.26", + "tslib": "^2.1.0" + } + }, + "@fluentui/theme": { + "version": "2.6.41", + "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-2.6.41.tgz", + "integrity": "sha512-h9RguEzqzJ0+59ys5Kkp7JtsjhDUxBLmQunu5rpHp5Mp788OtEjI/n1a9FIcOAL/priPSQwXN7RbuDpeP7+aSw==", + "requires": { + "@fluentui/merge-styles": "^8.5.15", + "@fluentui/set-version": "^8.2.14", + "@fluentui/utilities": "^8.13.24", + "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.24", + "resolved": "https://registry.npmjs.org/@fluentui/utilities/-/utilities-8.13.24.tgz", + "integrity": "sha512-/jo6hWCzTGCx06l2baAMwsjjBZ/dyMouls53uNaQLUGUUhUwXh/DcDDXMqLRJB3MaH9zvgfvRw61iKmm2s9fIA==", + "requires": { + "@fluentui/dom-utilities": "^2.2.14", + "@fluentui/merge-styles": "^8.5.15", + "@fluentui/set-version": "^8.2.14", + "tslib": "^2.1.0" + } + }, + "@griffel/core": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.15.2.tgz", + "integrity": "sha512-RlsIXoSS3gaYykUgxFpwKAs/DV9cRUKp3CW1kt3iPAtsDTWn/o+8bT1jvBws/tMM2GBu/Uc0EkaIzUPqD7uA+Q==", + "requires": { + "@emotion/hash": "^0.9.0", + "@griffel/style-types": "^1.0.3", + "csstype": "^3.1.3", + "rtl-css-js": "^1.16.1", + "stylis": "^4.2.0", + "tslib": "^2.1.0" + } + }, + "@griffel/react": { + "version": "1.5.20", + "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.20.tgz", + "integrity": "sha512-1P2yaPctENFSCwyPIYXBmgpNH68c0lc/jwSzPij1QATHDK1AASKuSeq6hW108I67RKjhRyHCcALshdZ3GcQXSg==", + "requires": { + "@griffel/core": "^1.15.2", + "tslib": "^2.1.0" + } + }, + "@griffel/style-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@griffel/style-types/-/style-types-1.0.3.tgz", + "integrity": "sha512-AzbbYV/EobNIBtfMtyu2edFin895gjVxtu1nsRhTETUAIb0/LCZoue3Jd/kFLuPwe95rv5WRUBiQpVwJsrrFcw==", + "requires": { + "csstype": "^3.1.3" + } + }, + "@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", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@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==", + "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.21", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", + "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@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==" + }, + "@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" + } + }, + "@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", + "@react-spring/types": "~9.7.3" + } + }, + "@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==" + }, + "@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", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" + } + }, + "@remix-run/router": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.14.2.tgz", + "integrity": "sha512-ACXpdMM9hmKZww21yEqWwiLws/UPLhNKvimN8RrYSqPSvB3ov7sLvAcfvaxePeLvccTQKGdkDIhLYApZVDFuKg==" + }, + "@rollup/plugin-typescript": { + "version": "11.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.3.tgz", + "integrity": "sha512-8o6cNgN44kQBcpsUJTbTXMTtb87oR1O0zgP3Dxm71hrNgparap3VujgofEilTYJo+ivf2ke6uy3/E5QEaiRlDA==", + "requires": { + "@rollup/pluginutils": "^5.0.1", + "resolve": "^1.22.1" + } + }, + "@rollup/pluginutils": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.4.tgz", + "integrity": "sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==", + "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==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "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==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/dompurify": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.3.tgz", + "integrity": "sha512-odiGr/9/qMqjcBOe5UhcNLOFHSYmKFOyr+bJ/Xu3Qp4k1pNPAlNLUVNNLcLfjQI7+W7ObX58EdD3H+3p3voOvA==", + "dev": true, + "requires": { + "@types/trusted-types": "*" + } + }, + "@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" + }, + "@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==" + }, + "@types/react": { + "version": "18.2.48", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", + "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.2.18", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz", + "integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==", + "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==" + }, + "@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 + }, + "@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==", + "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", + "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==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + } + }, + "caniuse-lite": { + "version": "1.0.30001579", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", + "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", + "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", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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" + } + }, + "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 + }, + "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.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "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" + } + }, + "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==" + }, + "electron-to-chromium": { + "version": "1.4.639", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.639.tgz", + "integrity": "sha512-CkKf3ZUVZchr+zDpAlNLEEy2NJJ9T64ULWaDgy3THXXlPVPkLu3VOs9Bac44nebVtdwl2geSj6AxTtGDOxoXhg==", + "dev": true + }, + "esbuild": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.11.tgz", + "integrity": "sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==", + "dev": true, + "requires": { + "@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", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "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", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "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 + }, + "is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "requires": { + "has": "^1.0.3" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "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.4.1", + "resolved": "https://registry.npmjs.org/keyborg/-/keyborg-2.4.1.tgz", + "integrity": "sha512-B9EZwDd36WKlIq6JmimaTsTDx5E0aUqZcxtgTfK66ut1FbRXYhBmiB7Al2qKzB7CCX9C49sTBiiyVzsXCA6J4Q==" + }, + "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" + } + }, + "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" + } + }, + "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.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true + }, + "ndjson-readablestream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/ndjson-readablestream/-/ndjson-readablestream-1.0.7.tgz", + "integrity": "sha512-4DDTwYTV4yRnCoXparQTF3JeahTNkLVy7XlA0RHXzAqQ3uU8vcu97bNW8rXAQOKQVJGs2aZoX+7cbvfs0LENEA==" + }, + "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 + }, + "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==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "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", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true + }, + "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", + "react-is": "^16.13.1" + }, + "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==" + } + } + }, + "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" + }, + "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" + } + } + } + }, + "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==" + }, + "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.21.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.21.3.tgz", + "integrity": "sha512-a0H638ZXULv1OdkmiK6s6itNhoy33ywxmUFT/xtSoVyf9VnC7n7+VT4LjVzdIHSaF5TIh9ylUgxMXksHTgGrKg==", + "requires": { + "@remix-run/router": "1.14.2" + } + }, + "react-router-dom": { + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.21.3.tgz", + "integrity": "sha512-kNzubk7n4YHSrErzjLK72j0B5i969GsuCGazRl3G6j1zqZBLjuSlYBdVdkDOgzGdPIffUOc9nmgiadTEVoq91g==", + "requires": { + "@remix-run/router": "1.14.2", + "react-router": "6.21.3" + } + }, + "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", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "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==", + "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" + } + }, + "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 + }, + "stylis": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz", + "integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==" + }, + "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", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "tabster": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/tabster/-/tabster-5.2.0.tgz", + "integrity": "sha512-cSi3a0gGeM9Co/gTKHlhTFfiitwVjcA+kP9lJux0U7QaRrZox1yYrfbwZhJXM7N0fux7BgvCYaOxME5k0EQ0tA==", + "requires": { + "keyborg": "^2.2.0", + "tslib": "^2.3.1" + } + }, + "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==" + }, + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==" + }, + "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", + "picocolors": "^1.0.0" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", + "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", + "dev": true, + "requires": { + "esbuild": "^0.18.10", + "fsevents": "~2.3.2", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", diff --git a/app/frontend/package.json b/app/frontend/package.json index 5ee802e..3961282 100644 --- a/app/frontend/package.json +++ b/app/frontend/package.json @@ -12,17 +12,18 @@ "preview": "vite preview" }, "dependencies": { - "@azure/msal-react": "^2.0.4", "@azure/msal-browser": "^3.1.0", + "@azure/msal-react": "^2.0.4", "@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", + "frontend": "file:", + "ndjson-readablestream": "^1.0.7", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.18.0", - "ndjson-readablestream": "^1.0.7", "scheduler": "^0.20.2" }, "devDependencies": { @@ -33,6 +34,5 @@ "prettier": "^3.0.3", "typescript": "^5.2.2", "vite": "^4.5.3" - } } diff --git a/app/start-compose.ps1 b/app/start-compose.ps1 new file mode 100644 index 0000000..69fe8a0 --- /dev/null +++ b/app/start-compose.ps1 @@ -0,0 +1,51 @@ +$output = azd -C ..\ env get-values + +foreach ($line in $output) { + $name, $value = $line.Split("=") + $value = $value -replace '^\"|\"$' + [Environment]::SetEnvironmentVariable($name, $value) +} + +Write-Host "Environment variables set." +$roles = @( + "a97b65f3-24c7-4388-baec-2e87135dc908", + "5e0bd9bd-7b93-4f28-af87-19fc36ad61bd", + "ba92f5b4-2d11-453d-a403-e96b0029c9fe" +) + +# Check if service principal exists +$servicePrincipal = $(az ad sp list --display-name "virtual-ai-agent-java-spi" --query [].appId --output tsv) + +if ([string]::IsNullOrEmpty($servicePrincipal)) { + Write-Host "Service principal not found. Creating service principal" + $servicePrincipal = $(az ad sp create-for-rbac --name "virtual-ai-agent-java-spi" --role reader --scopes "/subscriptions/$($env:AZURE_SUBSCRIPTION_ID)/resourceGroups/$($env:AZURE_RESOURCE_GROUP)" --query appId --output tsv) + if ($LASTEXITCODE -ne 0) { + Write-Host "Failed to create service principal" + exit $LASTEXITCODE + } + $servicePrincipalObjectId = $(az ad sp show --id $servicePrincipal --query id --output tsv) + Write-Host "Assigning Roles to service principal virtual-ai-agent-java-spi with principal id: $servicePrincipal and object id[$servicePrincipalObjectId]" + foreach ($role in $roles) { + Write-Host "Assigning Role[$role] to principal id[$servicePrincipal] for resource[/subscriptions/$($env:AZURE_SUBSCRIPTION_ID)/resourceGroups/$($env:AZURE_RESOURCE_GROUP)]" + az role assignment create ` + --role $role ` + --assignee-object-id $servicePrincipalObjectId ` + --scope "/subscriptions/$($env:AZURE_SUBSCRIPTION_ID)/resourceGroups/$($env:AZURE_RESOURCE_GROUP)" ` + --assignee-principal-type ServicePrincipal + } +} + +$servicePrincipalPassword = $(az ad sp credential reset --id $servicePrincipal --query password --output tsv) +$servicePrincipalTenant = $(az ad sp show --id $servicePrincipal --query appOwnerOrganizationId --output tsv) + +# Set environment variables +[Environment]::SetEnvironmentVariable("servicePrincipal", $servicePrincipal) +[Environment]::SetEnvironmentVariable("servicePrincipalPassword", $servicePrincipalPassword) +[Environment]::SetEnvironmentVariable("servicePrincipalTenant", $servicePrincipalTenant) + + +Write-Host "" +Write-Host "Starting solution locally using docker compose." +Write-Host "" + +docker compose -f ./compose.yaml up \ No newline at end of file diff --git a/app/start-compose.sh b/app/start-compose.sh new file mode 100644 index 0000000..1848062 --- /dev/null +++ b/app/start-compose.sh @@ -0,0 +1,60 @@ +echo "" +echo "Loading azd .env file from current environment" +echo "" + +while IFS='=' read -r key value; do + value=$(echo "$value" | sed 's/^"//' | sed 's/"$//') + export "$key=$value" + echo "export $key=$value" +done <