diff --git a/infra/main.bicep b/infra/main.bicep index 97651534b..683fce821 100644 --- a/infra/main.bicep +++ b/infra/main.bicep @@ -220,6 +220,10 @@ resource resourceGroupTags 'Microsoft.Resources/tags@2025-04-01' = { } } +// ========== AVM Telemetry ========== // +// This is a standard Azure Verified Modules (AVM) pattern for collecting anonymous usage telemetry. +// It deploys a no-op nested deployment that tracks module usage without collecting any customer data. +// For more information, see https://aka.ms/avm/TelemetryInfo #disable-next-line no-deployments-resources resource avmTelemetry 'Microsoft.Resources/deployments@2024-03-01' = if (enableTelemetry) { name: '46d3xbcp.ptn.sa-convknowledgemining.${replace('-..--..-', '.', '-')}.${substring(uniqueString(deployment().name, location), 0, 4)}' @@ -336,7 +340,11 @@ module virtualNetwork 'modules/virtualNetwork.bicep' = if (enablePrivateNetworki enableTelemetry: enableTelemetry } } -// Azure Bastion Host + +// ========== Azure Bastion Host ========== // +// Bastion Host provides secure RDP/SSH connectivity to VMs without exposing them via public IP addresses. +// This is deployed when enablePrivateNetworking=true for WAF compliance and operational access to the jumpbox VM. +// Purpose: Secure administrative access to private networking resources for troubleshooting and maintenance. var bastionHostName = 'bas-${solutionSuffix}' module bastionHost 'br/public:avm/res/network/bastion-host:0.8.2' = if (enablePrivateNetworking) { name: take('avm.res.network.bastion-host.${bastionHostName}', 64) @@ -365,7 +373,12 @@ module bastionHost 'br/public:avm/res/network/bastion-host:0.8.2' = if (enablePr } } -// Jumpbox Virtual Machine +// ========== Jumpbox Virtual Machine ========== // +// Jumpbox VM serves as a secure access point for managing resources in a private virtual network. +// This is deployed when enablePrivateNetworking=true for WAF compliance. +// Purpose: Provides administrative access to private endpoints, AI services, and other resources +// that are not accessible from the public internet. Accessed via Azure Bastion for enhanced security. +// Configuration: vmAdminUsername, vmAdminPassword, and vmSize parameters control the VM setup. var jumpboxVmName = take('vm-jumpbox-${solutionSuffix}', 15) module jumpboxVM 'br/public:avm/res/compute/virtual-machine:0.21.0' = if (enablePrivateNetworking) { name: take('avm.res.compute.virtual-machine.${jumpboxVmName}', 64) @@ -509,8 +522,7 @@ module backendUserAssignedIdentity 'br/public:avm/res/managed-identity/user-assi // ========== AI Foundry: AI Services ========== // // WAF best practices for Open AI: https://learn.microsoft.com/en-us/azure/well-architected/service-guides/azure-openai -var existingOpenAIEndpoint = !empty(existingAiFoundryAiProjectResourceId) ? format('https://{0}.openai.azure.com/', split(existingAiFoundryAiProjectResourceId, '/')[8]) : '' -var existingProjEndpoint = !empty(existingAiFoundryAiProjectResourceId) ? format('https://{0}.services.ai.azure.com/api/projects/{1}', split(existingAiFoundryAiProjectResourceId, '/')[8], split(existingAiFoundryAiProjectResourceId, '/')[10]) : '' +var existingProjEndpoint= !empty(existingAiFoundryAiProjectResourceId) ? format('https://{0}.services.ai.azure.com/api/projects/{1}', split(existingAiFoundryAiProjectResourceId, '/')[8], split(existingAiFoundryAiProjectResourceId, '/')[10]) : '' var existingAIServicesName = !empty(existingAiFoundryAiProjectResourceId) ? split(existingAiFoundryAiProjectResourceId, '/')[8] : '' var existingAIProjectName = !empty(existingAiFoundryAiProjectResourceId) ? split(existingAiFoundryAiProjectResourceId, '/')[10] : '' @@ -528,10 +540,7 @@ var aiFoundryAiProjectResourceName = useExistingAiFoundryAiProject ? split(existingAiFoundryAiProjectResourceId, '/')[10] : 'proj-${solutionSuffix}' -// NOTE: Required version 'Microsoft.CognitiveServices/accounts@2024-04-01-preview' not available in AVM -// var aiFoundryAiServicesResourceName = 'aif-${solutionSuffix}' var aiFoundryAiServicesAiProjectResourceName = 'proj-${solutionSuffix}' -var aiFoundryAIservicesEnabled = true var aiModelDeployments = [ { name: gptModelName @@ -567,7 +576,7 @@ resource existingAiFoundryAiServicesProject 'Microsoft.CognitiveServices/account parent: existingAiFoundryAiServices } -module aiFoundryAiServices 'modules/ai-services.bicep' = if (aiFoundryAIservicesEnabled) { +module aiFoundryAiServices 'modules/ai-services.bicep' = { name: take('avm.res.cognitive-services.account.${aiFoundryAiServicesResourceName}', 64) params: { name: aiFoundryAiServicesResourceName @@ -580,9 +589,7 @@ module aiFoundryAiServices 'modules/ai-services.bicep' = if (aiFoundryAIservices kind: 'AIServices' disableLocalAuth: true customSubDomainName: aiFoundryAiServicesResourceName - apiProperties: { - //staticsEnabled: false - } + apiProperties: {} networkAcls: { defaultAction: 'Allow' virtualNetworkRules: [] @@ -759,22 +766,24 @@ module searchServiceUpdate 'br/public:avm/res/search/search-service:0.12.0' = { semanticSearch: 'free' // Use the deployment tags provided to the template tags: tags - publicNetworkAccess: 'Enabled' //enablePrivateNetworking ? 'Disabled' : 'Enabled' - privateEndpoints: false //enablePrivateNetworking - ? [ - { - name: 'pep-${aiSearchName}' - customNetworkInterfaceName: 'nic-${aiSearchName}' - privateDnsZoneGroup: { - privateDnsZoneGroupConfigs: [ - { privateDnsZoneResourceId: avmPrivateDnsZones[dnsZoneIndex.search]!.outputs.resourceId } - ] + // Respect the deployment-wide private networking setting for Search as well. + publicNetworkAccess: enablePrivateNetworking ? 'Disabled' : 'Enabled' + privateEndpoints: enablePrivateNetworking + ? [ + { + name: 'pep-search-${solutionSuffix}' + subnetResourceId: virtualNetwork!.outputs.pepsSubnetResourceId + privateDnsZoneGroup: { + privateDnsZoneGroupConfigs: [ + { + name: 'search-dns-zone-group' + privateDnsZoneResourceId: avmPrivateDnsZones[dnsZoneIndex.search]!.outputs.resourceId + } + ] + } } - service: 'searchService' - subnetResourceId: virtualNetwork!.outputs.pepsSubnetResourceId - } - ] - : [] + ] + : [] } dependsOn: [ searchService @@ -1148,7 +1157,7 @@ module webServerFarm 'br/public:avm/res/web/serverfarm:0.5.0' = { diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null // WAF aligned configuration for Scalability skuName: enableScalability || enableRedundancy ? 'P1v3' : 'B3' - skuCapacity: enableScalability ? 1 : 1 + skuCapacity: 1 // WAF aligned configuration for Redundancy zoneRedundant: enableRedundancy ? true : false } diff --git a/infra/main.json b/infra/main.json index 67fd4c7eb..71b92addf 100644 --- a/infra/main.json +++ b/infra/main.json @@ -6,7 +6,7 @@ "_generator": { "name": "bicep", "version": "0.42.1.51946", - "templateHash": "2050321244821343355" + "templateHash": "7971547352074507493" } }, "parameters": { @@ -350,7 +350,6 @@ }, "userAssignedIdentityResourceName": "[format('id-{0}', variables('solutionSuffix'))]", "backendUserAssignedIdentityResourceName": "[format('id-backend-{0}', variables('solutionSuffix'))]", - "existingOpenAIEndpoint": "[if(not(empty(parameters('existingAiFoundryAiProjectResourceId'))), format('https://{0}.openai.azure.com/', split(parameters('existingAiFoundryAiProjectResourceId'), '/')[8]), '')]", "existingProjEndpoint": "[if(not(empty(parameters('existingAiFoundryAiProjectResourceId'))), format('https://{0}.services.ai.azure.com/api/projects/{1}', split(parameters('existingAiFoundryAiProjectResourceId'), '/')[8], split(parameters('existingAiFoundryAiProjectResourceId'), '/')[10]), '')]", "existingAIServicesName": "[if(not(empty(parameters('existingAiFoundryAiProjectResourceId'))), split(parameters('existingAiFoundryAiProjectResourceId'), '/')[8], '')]", "existingAIProjectName": "[if(not(empty(parameters('existingAiFoundryAiProjectResourceId'))), split(parameters('existingAiFoundryAiProjectResourceId'), '/')[10], '')]", @@ -360,7 +359,6 @@ "aiFoundryAiServicesResourceName": "[if(variables('useExistingAiFoundryAiProject'), split(parameters('existingAiFoundryAiProjectResourceId'), '/')[8], format('aif-{0}', variables('solutionSuffix')))]", "aiFoundryAiProjectResourceName": "[if(variables('useExistingAiFoundryAiProject'), split(parameters('existingAiFoundryAiProjectResourceId'), '/')[10], format('proj-{0}', variables('solutionSuffix')))]", "aiFoundryAiServicesAiProjectResourceName": "[format('proj-{0}', variables('solutionSuffix'))]", - "aiFoundryAIservicesEnabled": true, "aiModelDeployments": [ { "name": "[parameters('gptModelName')]", @@ -394,7 +392,7 @@ "sqlServerResourceName": "[format('sql-{0}', variables('solutionSuffix'))]", "sqlDbModuleName": "[format('sqldb-{0}', variables('solutionSuffix'))]", "webServerFarmResourceName": "[format('asp-{0}', variables('solutionSuffix'))]", - "reactAppLayoutConfig": "{\n \"appConfig\": {\n \"THREE_COLUMN\": {\n \"DASHBOARD\": 50,\n \"CHAT\": 33,\n \"CHATHISTORY\": 17\n },\n \"TWO_COLUMN\": {\n \"DASHBOARD_CHAT\": {\n \"DASHBOARD\": 65,\n \"CHAT\": 35\n },\n \"CHAT_CHATHISTORY\": {\n \"CHAT\": 80,\n \"CHATHISTORY\": 20\n }\n }\n },\n \"charts\": [\n {\n \"id\": \"SATISFIED\",\n \"name\": \"Satisfied\",\n \"type\": \"card\",\n \"layout\": { \"row\": 1, \"column\": 1, \"height\": 11 }\n },\n {\n \"id\": \"TOTAL_CALLS\",\n \"name\": \"Total Calls\",\n \"type\": \"card\",\n \"layout\": { \"row\": 1, \"column\": 2, \"span\": 1 }\n },\n {\n \"id\": \"AVG_HANDLING_TIME\",\n \"name\": \"Average Handling Time\",\n \"type\": \"card\",\n \"layout\": { \"row\": 1, \"column\": 3, \"span\": 1 }\n },\n {\n \"id\": \"SENTIMENT\",\n \"name\": \"Topics Overview\",\n \"type\": \"donutchart\",\n \"layout\": { \"row\": 2, \"column\": 1, \"width\": 40, \"height\": 44.5 }\n },\n {\n \"id\": \"AVG_HANDLING_TIME_BY_TOPIC\",\n \"name\": \"Average Handling Time By Topic\",\n \"type\": \"bar\",\n \"layout\": { \"row\": 2, \"column\": 2, \"row-span\": 2, \"width\": 60 }\n },\n {\n \"id\": \"TOPICS\",\n \"name\": \"Trending Topics\",\n \"type\": \"table\",\n \"layout\": { \"row\": 3, \"column\": 1, \"span\": 2 }\n },\n {\n \"id\": \"KEY_PHRASES\",\n \"name\": \"Key Phrases\",\n \"type\": \"wordcloud\",\n \"layout\": { \"row\": 3, \"column\": 2, \"height\": 44.5 }\n }\n ]\n}", + "reactAppLayoutConfig": "{\r\n \"appConfig\": {\r\n \"THREE_COLUMN\": {\r\n \"DASHBOARD\": 50,\r\n \"CHAT\": 33,\r\n \"CHATHISTORY\": 17\r\n },\r\n \"TWO_COLUMN\": {\r\n \"DASHBOARD_CHAT\": {\r\n \"DASHBOARD\": 65,\r\n \"CHAT\": 35\r\n },\r\n \"CHAT_CHATHISTORY\": {\r\n \"CHAT\": 80,\r\n \"CHATHISTORY\": 20\r\n }\r\n }\r\n },\r\n \"charts\": [\r\n {\r\n \"id\": \"SATISFIED\",\r\n \"name\": \"Satisfied\",\r\n \"type\": \"card\",\r\n \"layout\": { \"row\": 1, \"column\": 1, \"height\": 11 }\r\n },\r\n {\r\n \"id\": \"TOTAL_CALLS\",\r\n \"name\": \"Total Calls\",\r\n \"type\": \"card\",\r\n \"layout\": { \"row\": 1, \"column\": 2, \"span\": 1 }\r\n },\r\n {\r\n \"id\": \"AVG_HANDLING_TIME\",\r\n \"name\": \"Average Handling Time\",\r\n \"type\": \"card\",\r\n \"layout\": { \"row\": 1, \"column\": 3, \"span\": 1 }\r\n },\r\n {\r\n \"id\": \"SENTIMENT\",\r\n \"name\": \"Topics Overview\",\r\n \"type\": \"donutchart\",\r\n \"layout\": { \"row\": 2, \"column\": 1, \"width\": 40, \"height\": 44.5 }\r\n },\r\n {\r\n \"id\": \"AVG_HANDLING_TIME_BY_TOPIC\",\r\n \"name\": \"Average Handling Time By Topic\",\r\n \"type\": \"bar\",\r\n \"layout\": { \"row\": 2, \"column\": 2, \"row-span\": 2, \"width\": 60 }\r\n },\r\n {\r\n \"id\": \"TOPICS\",\r\n \"name\": \"Trending Topics\",\r\n \"type\": \"table\",\r\n \"layout\": { \"row\": 3, \"column\": 1, \"span\": 2 }\r\n },\r\n {\r\n \"id\": \"KEY_PHRASES\",\r\n \"name\": \"Key Phrases\",\r\n \"type\": \"wordcloud\",\r\n \"layout\": { \"row\": 3, \"column\": 2, \"height\": 44.5 }\r\n }\r\n ]\r\n}", "backendWebSiteResourceName": "[format('api-{0}', variables('solutionSuffix'))]", "webSiteResourceName": "[format('app-{0}', variables('solutionSuffix'))]" }, @@ -4418,7 +4416,7 @@ "_generator": { "name": "bicep", "version": "0.42.1.51946", - "templateHash": "11913031206393910066" + "templateHash": "4804697174510607162" } }, "definitions": { @@ -7186,21 +7184,6 @@ "type": "string", "value": "[reference('virtualNetwork').outputs.resourceId.value]" }, - "subnets": { - "type": "array", - "items": { - "$ref": "#/definitions/subnetOutputType" - }, - "copy": { - "count": "[length(parameters('subnets'))]", - "input": { - "name": "[parameters('subnets')[copyIndex()].name]", - "resourceId": "[reference('virtualNetwork').outputs.subnetResourceIds.value[copyIndex()]]", - "nsgName": "[if(not(empty(tryGet(parameters('subnets')[copyIndex()], 'networkSecurityGroup'))), tryGet(parameters('subnets')[copyIndex()], 'networkSecurityGroup', 'name'), null())]", - "nsgResourceId": "[if(not(empty(tryGet(parameters('subnets')[copyIndex()], 'networkSecurityGroup'))), reference(format('nsgs[{0}]', copyIndex())).outputs.resourceId.value, null())]" - } - } - }, "webSubnetResourceId": { "type": "string", "value": "[if(contains(map(parameters('subnets'), lambda('subnet', lambdaVariables('subnet').name)), 'web'), reference('virtualNetwork').outputs.subnetResourceIds.value[indexOf(map(parameters('subnets'), lambda('subnet', lambdaVariables('subnet').name)), 'web')], '')]" @@ -7209,17 +7192,9 @@ "type": "string", "value": "[if(contains(map(parameters('subnets'), lambda('subnet', lambdaVariables('subnet').name)), 'peps'), reference('virtualNetwork').outputs.subnetResourceIds.value[indexOf(map(parameters('subnets'), lambda('subnet', lambdaVariables('subnet').name)), 'peps')], '')]" }, - "bastionSubnetResourceId": { - "type": "string", - "value": "[if(contains(map(parameters('subnets'), lambda('subnet', lambdaVariables('subnet').name)), 'AzureBastionSubnet'), reference('virtualNetwork').outputs.subnetResourceIds.value[indexOf(map(parameters('subnets'), lambda('subnet', lambdaVariables('subnet').name)), 'AzureBastionSubnet')], '')]" - }, "jumpboxSubnetResourceId": { "type": "string", "value": "[if(contains(map(parameters('subnets'), lambda('subnet', lambdaVariables('subnet').name)), 'jumpbox'), reference('virtualNetwork').outputs.subnetResourceIds.value[indexOf(map(parameters('subnets'), lambda('subnet', lambdaVariables('subnet').name)), 'jumpbox')], '')]" - }, - "deploymentScriptsSubnetResourceId": { - "type": "string", - "value": "[if(contains(map(parameters('subnets'), lambda('subnet', lambdaVariables('subnet').name)), 'deployment-scripts'), reference('virtualNetwork').outputs.subnetResourceIds.value[indexOf(map(parameters('subnets'), lambda('subnet', lambdaVariables('subnet').name)), 'deployment-scripts')], '')]" } } } @@ -22469,7 +22444,6 @@ } }, "aiFoundryAiServices": { - "condition": "[variables('aiFoundryAIservicesEnabled')]", "type": "Microsoft.Resources/deployments", "apiVersion": "2025-04-01", "name": "[take(format('avm.res.cognitive-services.account.{0}', variables('aiFoundryAiServicesResourceName')), 64)]", @@ -22582,7 +22556,7 @@ "_generator": { "name": "bicep", "version": "0.42.1.51946", - "templateHash": "440495301690535829" + "templateHash": "18203992824250297061" }, "name": "Cognitive Services", "description": "This module deploys a Cognitive Service." @@ -27446,20 +27420,6 @@ }, "value": "[if(variables('useExistingService'), extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', variables('existingCognitiveServiceDetails')[2], variables('existingCognitiveServiceDetails')[4]), 'Microsoft.CognitiveServices/accounts', variables('existingCognitiveServiceDetails')[8]), resourceId('Microsoft.CognitiveServices/accounts', parameters('name')))]" }, - "subscriptionId": { - "type": "string", - "metadata": { - "description": "The resource group the cognitive services account was deployed into." - }, - "value": "[if(variables('useExistingService'), variables('existingCognitiveServiceDetails')[2], subscription().subscriptionId)]" - }, - "resourceGroupName": { - "type": "string", - "metadata": { - "description": "The resource group the cognitive services account was deployed into." - }, - "value": "[if(variables('useExistingService'), variables('existingCognitiveServiceDetails')[4], resourceGroup().name)]" - }, "endpoint": { "type": "string", "metadata": { @@ -27468,37 +27428,12 @@ "value": "[if(variables('useExistingService'), reference('cognitiveServiceExisting').endpoint, if(variables('useExistingService'), reference('cognitiveServiceExisting', '2025-09-01', 'full'), reference('cognitiveServiceNew', '2025-06-01', 'full')).properties.endpoint)]" }, "endpoints": { - "$ref": "#/definitions/endpointType", + "type": "object", "metadata": { "description": "All endpoints available for the cognitive services account, types depends on the cognitive service kind." }, "value": "[if(variables('useExistingService'), reference('cognitiveServiceExisting').endpoints, if(variables('useExistingService'), reference('cognitiveServiceExisting', '2025-09-01', 'full'), reference('cognitiveServiceNew', '2025-06-01', 'full')).properties.endpoints)]" }, - "systemAssignedMIPrincipalId": { - "type": "string", - "nullable": true, - "metadata": { - "description": "The principal ID of the system assigned identity." - }, - "value": "[if(variables('useExistingService'), reference('cognitiveServiceExisting', '2025-09-01', 'full').identity.principalId, tryGet(tryGet(if(variables('useExistingService'), reference('cognitiveServiceExisting', '2025-09-01', 'full'), reference('cognitiveServiceNew', '2025-06-01', 'full')), 'identity'), 'principalId'))]" - }, - "location": { - "type": "string", - "metadata": { - "description": "The location the resource was deployed into." - }, - "value": "[if(variables('useExistingService'), reference('cognitiveServiceExisting', '2025-09-01', 'full').location, if(variables('useExistingService'), reference('cognitiveServiceExisting', '2025-09-01', 'full'), reference('cognitiveServiceNew', '2025-06-01', 'full')).location)]" - }, - "privateEndpoints": { - "type": "array", - "items": { - "$ref": "#/definitions/privateEndpointOutputType" - }, - "metadata": { - "description": "The private endpoints of the congitive services account." - }, - "value": "[if(variables('useExistingService'), reference('existing_cognitive_service_dependencies').outputs.privateEndpoints.value, reference('cognitive_service_dependencies').outputs.privateEndpoints.value)]" - }, "aiProjectInfo": { "$ref": "#/definitions/aiProjectOutputType", "value": "[if(variables('useExistingService'), reference('existing_cognitive_service_dependencies').outputs.aiProjectInfo.value, reference('cognitive_service_dependencies').outputs.aiProjectInfo.value)]" @@ -28282,9 +28217,9 @@ }, "dependsOn": [ "aiFoundryAiServices", - "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').cognitiveServices)]", "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').openAI)]", "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').aiServices)]", + "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').cognitiveServices)]", "virtualNetwork" ] }, @@ -28379,10 +28314,8 @@ "tags": { "value": "[parameters('tags')]" }, - "publicNetworkAccess": { - "value": "Enabled" - }, - "privateEndpoints": "[if(false(), createObject('value', createArray(createObject('name', format('pep-{0}', variables('aiSearchName')), 'customNetworkInterfaceName', format('nic-{0}', variables('aiSearchName')), 'privateDnsZoneGroup', createObject('privateDnsZoneGroupConfigs', createArray(createObject('privateDnsZoneResourceId', reference(format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').search)).outputs.resourceId.value))), 'service', 'searchService', 'subnetResourceId', reference('virtualNetwork').outputs.pepsSubnetResourceId.value))), createObject('value', createArray()))]" + "publicNetworkAccess": "[if(parameters('enablePrivateNetworking'), createObject('value', 'Disabled'), createObject('value', 'Enabled'))]", + "privateEndpoints": "[if(parameters('enablePrivateNetworking'), createObject('value', createArray(createObject('name', format('pep-search-{0}', variables('solutionSuffix')), 'subnetResourceId', reference('virtualNetwork').outputs.pepsSubnetResourceId.value, 'privateDnsZoneGroup', createObject('privateDnsZoneGroupConfigs', createArray(createObject('name', 'search-dns-zone-group', 'privateDnsZoneResourceId', reference(format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').search)).outputs.resourceId.value)))))), createObject('value', createArray()))]" }, "template": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", @@ -30561,7 +30494,7 @@ "_generator": { "name": "bicep", "version": "0.42.1.51946", - "templateHash": "16034492197511599742" + "templateHash": "3171423857861763521" } }, "parameters": { @@ -30595,13 +30528,7 @@ "principalType": "ServicePrincipal" } } - ], - "outputs": { - "roleAssignmentId": { - "type": "string", - "value": "[resourceId('Microsoft.Authorization/roleAssignments', guid(parameters('principalId'), parameters('roleDefinitionId'), parameters('targetResourceName')))]" - } - } + ] } }, "dependsOn": [ @@ -38595,9 +38522,9 @@ } }, "dependsOn": [ - "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageDfs)]", - "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageBlob)]", "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageQueue)]", + "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageBlob)]", + "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageDfs)]", "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageFile)]", "userAssignedIdentity", "virtualNetwork" @@ -51781,7 +51708,9 @@ }, "diagnosticSettings": "[if(parameters('enableMonitoring'), createObject('value', createArray(createObject('workspaceResourceId', if(variables('useExistingLogAnalytics'), parameters('existingLogAnalyticsWorkspaceId'), reference('logAnalyticsWorkspace').outputs.resourceId.value)))), createObject('value', null()))]", "skuName": "[if(or(parameters('enableScalability'), parameters('enableRedundancy')), createObject('value', 'P1v3'), createObject('value', 'B3'))]", - "skuCapacity": "[if(parameters('enableScalability'), createObject('value', 1), createObject('value', 1))]", + "skuCapacity": { + "value": 1 + }, "zoneRedundant": "[if(parameters('enableRedundancy'), createObject('value', true()), createObject('value', false()))]" }, "template": { @@ -52415,7 +52344,7 @@ "_generator": { "name": "bicep", "version": "0.42.1.51946", - "templateHash": "2986806403289762320" + "templateHash": "71820933064712862" } }, "definitions": { @@ -53428,7 +53357,7 @@ "_generator": { "name": "bicep", "version": "0.42.1.51946", - "templateHash": "7209561163082212668" + "templateHash": "11321300104480927368" }, "name": "Site App Settings", "description": "This module deploys a Site App Setting." @@ -53537,29 +53466,6 @@ "storageAccount" ] } - }, - "outputs": { - "name": { - "type": "string", - "metadata": { - "description": "The name of the site config." - }, - "value": "[parameters('name')]" - }, - "resourceId": { - "type": "string", - "metadata": { - "description": "The resource ID of the site config." - }, - "value": "[resourceId('Microsoft.Web/sites/config', parameters('appName'), parameters('name'))]" - }, - "resourceGroupName": { - "type": "string", - "metadata": { - "description": "The resource group the site config was deployed into." - }, - "value": "[resourceGroup().name]" - } } } }, @@ -54227,65 +54133,6 @@ "app" ] } - }, - "outputs": { - "name": { - "type": "string", - "metadata": { - "description": "The name of the site." - }, - "value": "[parameters('name')]" - }, - "resourceId": { - "type": "string", - "metadata": { - "description": "The resource ID of the site." - }, - "value": "[resourceId('Microsoft.Web/sites', parameters('name'))]" - }, - "resourceGroupName": { - "type": "string", - "metadata": { - "description": "The resource group the site was deployed into." - }, - "value": "[resourceGroup().name]" - }, - "systemAssignedMIPrincipalId": { - "type": "string", - "nullable": true, - "metadata": { - "description": "The principal ID of the system assigned identity." - }, - "value": "[tryGet(tryGet(reference('app', '2024-04-01', 'full'), 'identity'), 'principalId')]" - }, - "location": { - "type": "string", - "metadata": { - "description": "The location the resource was deployed into." - }, - "value": "[reference('app', '2024-04-01', 'full').location]" - }, - "defaultHostname": { - "type": "string", - "metadata": { - "description": "Default hostname of the app." - }, - "value": "[reference('app').defaultHostName]" - }, - "customDomainVerificationId": { - "type": "string", - "metadata": { - "description": "Unique identifier that verifies the custom domains assigned to the app. Customer will add this ID to a txt record for verification." - }, - "value": "[reference('app').customDomainVerificationId]" - }, - "outboundIpAddresses": { - "type": "string", - "metadata": { - "description": "The outbound IP addresses of the app." - }, - "value": "[reference('app').outboundIpAddresses]" - } } } }, @@ -54365,7 +54212,7 @@ "_generator": { "name": "bicep", "version": "0.42.1.51946", - "templateHash": "2986806403289762320" + "templateHash": "71820933064712862" } }, "definitions": { @@ -55378,7 +55225,7 @@ "_generator": { "name": "bicep", "version": "0.42.1.51946", - "templateHash": "7209561163082212668" + "templateHash": "11321300104480927368" }, "name": "Site App Settings", "description": "This module deploys a Site App Setting." @@ -55487,29 +55334,6 @@ "storageAccount" ] } - }, - "outputs": { - "name": { - "type": "string", - "metadata": { - "description": "The name of the site config." - }, - "value": "[parameters('name')]" - }, - "resourceId": { - "type": "string", - "metadata": { - "description": "The resource ID of the site config." - }, - "value": "[resourceId('Microsoft.Web/sites/config', parameters('appName'), parameters('name'))]" - }, - "resourceGroupName": { - "type": "string", - "metadata": { - "description": "The resource group the site config was deployed into." - }, - "value": "[resourceGroup().name]" - } } } }, @@ -56177,65 +56001,6 @@ "app" ] } - }, - "outputs": { - "name": { - "type": "string", - "metadata": { - "description": "The name of the site." - }, - "value": "[parameters('name')]" - }, - "resourceId": { - "type": "string", - "metadata": { - "description": "The resource ID of the site." - }, - "value": "[resourceId('Microsoft.Web/sites', parameters('name'))]" - }, - "resourceGroupName": { - "type": "string", - "metadata": { - "description": "The resource group the site was deployed into." - }, - "value": "[resourceGroup().name]" - }, - "systemAssignedMIPrincipalId": { - "type": "string", - "nullable": true, - "metadata": { - "description": "The principal ID of the system assigned identity." - }, - "value": "[tryGet(tryGet(reference('app', '2024-04-01', 'full'), 'identity'), 'principalId')]" - }, - "location": { - "type": "string", - "metadata": { - "description": "The location the resource was deployed into." - }, - "value": "[reference('app', '2024-04-01', 'full').location]" - }, - "defaultHostname": { - "type": "string", - "metadata": { - "description": "Default hostname of the app." - }, - "value": "[reference('app').defaultHostName]" - }, - "customDomainVerificationId": { - "type": "string", - "metadata": { - "description": "Unique identifier that verifies the custom domains assigned to the app. Customer will add this ID to a txt record for verification." - }, - "value": "[reference('app').customDomainVerificationId]" - }, - "outboundIpAddresses": { - "type": "string", - "metadata": { - "description": "The outbound IP addresses of the app." - }, - "value": "[reference('app').outboundIpAddresses]" - } } } }, diff --git a/infra/main_custom.bicep b/infra/main_custom.bicep index bf6ac9831..181b8c322 100644 --- a/infra/main_custom.bicep +++ b/infra/main_custom.bicep @@ -93,24 +93,6 @@ param embeddingModel string = 'text-embedding-3-small' @description('Optional. Capacity of the Embedding Model deployment.') param embeddingDeploymentCapacity int = 80 -@description('Optional. The Container Registry hostname where the docker images for the backend are located.') -param backendContainerRegistryHostname string = 'kmcontainerreg.azurecr.io' - -@description('Optional. The Container Image Name to deploy on the backend.') -param backendContainerImageName string = 'km-api' - -@description('Optional. The Container Image Tag to deploy on the backend.') -param backendContainerImageTag string = 'latest_waf_2025-12-02_1084' - -@description('Optional. The Container Registry hostname where the docker images for the frontend are located.') -param frontendContainerRegistryHostname string = 'kmcontainerreg.azurecr.io' - -@description('Optional. The Container Image Name to deploy on the frontend.') -param frontendContainerImageName string = 'km-app' - -@description('Optional. The Container Image Tag to deploy on the frontend.') -param frontendContainerImageTag string = 'latest_waf_2025-12-02_1084' - @description('Optional. The tags to apply to all deployed Azure resources.') param tags resourceInput<'Microsoft.Resources/resourceGroups@2025-04-01'>.tags = {} @@ -220,6 +202,10 @@ resource resourceGroupTags 'Microsoft.Resources/tags@2025-04-01' = { } } +// ========== AVM Telemetry ========== // +// This is a standard Azure Verified Modules (AVM) pattern for collecting anonymous usage telemetry. +// It deploys a no-op nested deployment that tracks module usage without collecting any customer data. +// For more information, see https://aka.ms/avm/TelemetryInfo #disable-next-line no-deployments-resources resource avmTelemetry 'Microsoft.Resources/deployments@2024-03-01' = if (enableTelemetry) { name: '46d3xbcp.ptn.sa-convknowledgemining.${replace('-..--..-', '.', '-')}.${substring(uniqueString(deployment().name, location), 0, 4)}' @@ -337,7 +323,11 @@ module virtualNetwork 'modules/virtualNetwork.bicep' = if (enablePrivateNetworki enableTelemetry: enableTelemetry } } -// Azure Bastion Host + +// ========== Azure Bastion Host ========== // +// Bastion Host provides secure RDP/SSH connectivity to VMs without exposing them via public IP addresses. +// This is deployed when enablePrivateNetworking=true for WAF compliance and operational access to the jumpbox VM. +// Purpose: Secure administrative access to private networking resources for troubleshooting and maintenance. var bastionHostName = 'bas-${solutionSuffix}' module bastionHost 'br/public:avm/res/network/bastion-host:0.8.2' = if (enablePrivateNetworking) { name: take('avm.res.network.bastion-host.${bastionHostName}', 64) @@ -366,7 +356,12 @@ module bastionHost 'br/public:avm/res/network/bastion-host:0.8.2' = if (enablePr } } -// Jumpbox Virtual Machine +// ========== Jumpbox Virtual Machine ========== // +// Jumpbox VM serves as a secure access point for managing resources in a private virtual network. +// This is deployed when enablePrivateNetworking=true for WAF compliance. +// Purpose: Provides administrative access to private endpoints, AI services, and other resources +// that are not accessible from the public internet. Accessed via Azure Bastion for enhanced security. +// Configuration: vmAdminUsername, vmAdminPassword, and vmSize parameters control the VM setup. var jumpboxVmName = take('vm-jumpbox-${solutionSuffix}', 15) module jumpboxVM 'br/public:avm/res/compute/virtual-machine:0.21.0' = if (enablePrivateNetworking) { name: take('avm.res.compute.virtual-machine.${jumpboxVmName}', 64) @@ -510,8 +505,7 @@ module backendUserAssignedIdentity 'br/public:avm/res/managed-identity/user-assi // ========== AI Foundry: AI Services ========== // // WAF best practices for Open AI: https://learn.microsoft.com/en-us/azure/well-architected/service-guides/azure-openai -var existingOpenAIEndpoint = !empty(existingAiFoundryAiProjectResourceId) ? format('https://{0}.openai.azure.com/', split(existingAiFoundryAiProjectResourceId, '/')[8]) : '' -var existingProjEndpoint = !empty(existingAiFoundryAiProjectResourceId) ? format('https://{0}.services.ai.azure.com/api/projects/{1}', split(existingAiFoundryAiProjectResourceId, '/')[8], split(existingAiFoundryAiProjectResourceId, '/')[10]) : '' +var existingProjEndpoint= !empty(existingAiFoundryAiProjectResourceId) ? format('https://{0}.services.ai.azure.com/api/projects/{1}', split(existingAiFoundryAiProjectResourceId, '/')[8], split(existingAiFoundryAiProjectResourceId, '/')[10]) : '' var existingAIServicesName = !empty(existingAiFoundryAiProjectResourceId) ? split(existingAiFoundryAiProjectResourceId, '/')[8] : '' var existingAIProjectName = !empty(existingAiFoundryAiProjectResourceId) ? split(existingAiFoundryAiProjectResourceId, '/')[10] : '' @@ -529,10 +523,7 @@ var aiFoundryAiProjectResourceName = useExistingAiFoundryAiProject ? split(existingAiFoundryAiProjectResourceId, '/')[10] : 'proj-${solutionSuffix}' -// NOTE: Required version 'Microsoft.CognitiveServices/accounts@2024-04-01-preview' not available in AVM -// var aiFoundryAiServicesResourceName = 'aif-${solutionSuffix}' var aiFoundryAiServicesAiProjectResourceName = 'proj-${solutionSuffix}' -var aiFoundryAIservicesEnabled = true var aiModelDeployments = [ { name: gptModelName @@ -568,7 +559,7 @@ resource existingAiFoundryAiServicesProject 'Microsoft.CognitiveServices/account parent: existingAiFoundryAiServices } -module aiFoundryAiServices 'modules/ai-services.bicep' = if (aiFoundryAIservicesEnabled) { +module aiFoundryAiServices 'modules/ai-services.bicep' = { name: take('avm.res.cognitive-services.account.${aiFoundryAiServicesResourceName}', 64) params: { name: aiFoundryAiServicesResourceName @@ -581,9 +572,7 @@ module aiFoundryAiServices 'modules/ai-services.bicep' = if (aiFoundryAIservices kind: 'AIServices' disableLocalAuth: true customSubDomainName: aiFoundryAiServicesResourceName - apiProperties: { - //staticsEnabled: false - } + apiProperties: {} networkAcls: { defaultAction: 'Allow' virtualNetworkRules: [] @@ -760,22 +749,24 @@ module searchServiceUpdate 'br/public:avm/res/search/search-service:0.12.0' = { semanticSearch: 'free' // Use the deployment tags provided to the template tags: tags - publicNetworkAccess: 'Enabled' //enablePrivateNetworking ? 'Disabled' : 'Enabled' - privateEndpoints: false //enablePrivateNetworking - ? [ - { - name: 'pep-${aiSearchName}' - customNetworkInterfaceName: 'nic-${aiSearchName}' - privateDnsZoneGroup: { - privateDnsZoneGroupConfigs: [ - { privateDnsZoneResourceId: avmPrivateDnsZones[dnsZoneIndex.search]!.outputs.resourceId } - ] + // Respect the deployment-wide private networking setting for Search as well. + publicNetworkAccess: enablePrivateNetworking ? 'Disabled' : 'Enabled' + privateEndpoints: enablePrivateNetworking + ? [ + { + name: 'pep-search-${solutionSuffix}' + subnetResourceId: virtualNetwork!.outputs.pepsSubnetResourceId + privateDnsZoneGroup: { + privateDnsZoneGroupConfigs: [ + { + name: 'search-dns-zone-group' + privateDnsZoneResourceId: avmPrivateDnsZones[dnsZoneIndex.search]!.outputs.resourceId + } + ] + } } - service: 'searchService' - subnetResourceId: virtualNetwork!.outputs.pepsSubnetResourceId - } - ] - : [] + ] + : [] } dependsOn: [ searchService @@ -1149,7 +1140,7 @@ module webServerFarm 'br/public:avm/res/web/serverfarm:0.5.0' = { diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null // WAF aligned configuration for Scalability skuName: enableScalability || enableRedundancy ? 'P1v3' : 'B3' - skuCapacity: enableScalability ? 1 : 1 + skuCapacity: 1 // WAF aligned configuration for Redundancy zoneRedundant: enableRedundancy ? true : false } @@ -1454,9 +1445,6 @@ output AZURE_AI_AGENT_MODEL_DEPLOYMENT_NAME string = gptModelName @description('Contains Azure Container Registry name.') output ACR_NAME string = acrName -@description('Contains Azure environment image tag.') -output AZURE_ENV_IMAGE_TAG string = backendContainerImageTag - @description('Contains existing AI project resource ID.') output AZURE_EXISTING_AIPROJECT_RESOURCE_ID string = existingAiFoundryAiProjectResourceId diff --git a/infra/modules/ai-services.bicep b/infra/modules/ai-services.bicep index ee89bdbd0..1c7295144 100644 --- a/infra/modules/ai-services.bicep +++ b/infra/modules/ai-services.bicep @@ -283,26 +283,11 @@ output name string = useExistingService ? cognitiveServiceExisting.name : cognit @description('The resource ID of the cognitive services account.') output resourceId string = useExistingService ? cognitiveServiceExisting.id : cognitiveServiceNew.id -@description('The resource group the cognitive services account was deployed into.') -output subscriptionId string = useExistingService ? existingCognitiveServiceDetails[2] : subscription().subscriptionId - -@description('The resource group the cognitive services account was deployed into.') -output resourceGroupName string = useExistingService ? existingCognitiveServiceDetails[4] : resourceGroup().name - @description('The service endpoint of the cognitive services account.') output endpoint string = useExistingService ? cognitiveServiceExisting!.properties.endpoint : cognitiveService.properties.endpoint @description('All endpoints available for the cognitive services account, types depends on the cognitive service kind.') -output endpoints endpointType = useExistingService ? cognitiveServiceExisting!.properties.endpoints : cognitiveService.properties.endpoints - -@description('The principal ID of the system assigned identity.') -output systemAssignedMIPrincipalId string? = useExistingService ? cognitiveServiceExisting!.identity.principalId : cognitiveService.?identity.?principalId - -@description('The location the resource was deployed into.') -output location string = useExistingService ? cognitiveServiceExisting!.location : cognitiveService.location - -@description('The private endpoints of the congitive services account.') -output privateEndpoints privateEndpointOutputType[] = useExistingService ? existing_cognitive_service_dependencies!.outputs.privateEndpoints : cognitive_service_dependencies!.outputs.privateEndpoints +output endpoints object = useExistingService ? cognitiveServiceExisting!.properties.endpoints : cognitiveService.properties.endpoints import { aiProjectOutputType } from './project.bicep' output aiProjectInfo aiProjectOutputType = useExistingService ? existing_cognitive_service_dependencies!.outputs.aiProjectInfo : cognitive_service_dependencies!.outputs.aiProjectInfo diff --git a/infra/modules/role-assignment.bicep b/infra/modules/role-assignment.bicep index e0fd98e8a..cff8ff824 100644 --- a/infra/modules/role-assignment.bicep +++ b/infra/modules/role-assignment.bicep @@ -16,4 +16,3 @@ resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = { } } -output roleAssignmentId string = roleAssignment.id diff --git a/infra/modules/virtualNetwork.bicep b/infra/modules/virtualNetwork.bicep index e981beb7c..23f8570de 100644 --- a/infra/modules/virtualNetwork.bicep +++ b/infra/modules/virtualNetwork.bicep @@ -279,16 +279,6 @@ module virtualNetwork 'br/public:avm/res/network/virtual-network:0.7.1' = { output name string = virtualNetwork.outputs.name output resourceId string = virtualNetwork.outputs.resourceId -// combined output array that holds subnet details along with NSG information -output subnets subnetOutputType[] = [ - for (subnet, i) in subnets: { - name: subnet.name - resourceId: virtualNetwork.outputs.subnetResourceIds[i] - nsgName: !empty(subnet.?networkSecurityGroup) ? subnet.?networkSecurityGroup.name : null - nsgResourceId: !empty(subnet.?networkSecurityGroup) ? nsgs[i]!.outputs.resourceId : null - } -] - // Dynamic outputs for individual subnets for backward compatibility output webSubnetResourceId string = contains(map(subnets, subnet => subnet.name), 'web') ? virtualNetwork.outputs.subnetResourceIds[indexOf(map(subnets, subnet => subnet.name), 'web')] @@ -296,15 +286,9 @@ output webSubnetResourceId string = contains(map(subnets, subnet => subnet.name) output pepsSubnetResourceId string = contains(map(subnets, subnet => subnet.name), 'peps') ? virtualNetwork.outputs.subnetResourceIds[indexOf(map(subnets, subnet => subnet.name), 'peps')] : '' -output bastionSubnetResourceId string = contains(map(subnets, subnet => subnet.name), 'AzureBastionSubnet') - ? virtualNetwork.outputs.subnetResourceIds[indexOf(map(subnets, subnet => subnet.name), 'AzureBastionSubnet')] - : '' output jumpboxSubnetResourceId string = contains(map(subnets, subnet => subnet.name), 'jumpbox') ? virtualNetwork.outputs.subnetResourceIds[indexOf(map(subnets, subnet => subnet.name), 'jumpbox')] : '' -output deploymentScriptsSubnetResourceId string = contains(map(subnets, subnet => subnet.name), 'deployment-scripts') - ? virtualNetwork.outputs.subnetResourceIds[indexOf(map(subnets, subnet => subnet.name), 'deployment-scripts')] - : '' @export() @description('Custom type definition for subnet resource information as output') diff --git a/infra/modules/web-sites.bicep b/infra/modules/web-sites.bicep index 785f1fc49..61a5f2e15 100644 --- a/infra/modules/web-sites.bicep +++ b/infra/modules/web-sites.bicep @@ -315,29 +315,6 @@ module app_privateEndpoints 'br/public:avm/res/network/private-endpoint:0.11.1' } ] -@description('The name of the site.') -output name string = app.name - -@description('The resource ID of the site.') -output resourceId string = app.id - -@description('The resource group the site was deployed into.') -output resourceGroupName string = resourceGroup().name - -@description('The principal ID of the system assigned identity.') -output systemAssignedMIPrincipalId string? = app.?identity.?principalId - -@description('The location the resource was deployed into.') -output location string = app.location - -@description('Default hostname of the app.') -output defaultHostname string = app.properties.defaultHostName - -@description('Unique identifier that verifies the custom domains assigned to the app. Customer will add this ID to a txt record for verification.') -output customDomainVerificationId string = app.properties.customDomainVerificationId - -@description('The outbound IP addresses of the app.') -output outboundIpAddresses string = app.properties.outboundIpAddresses // ================ // // Definitions // diff --git a/infra/modules/web-sites.config.bicep b/infra/modules/web-sites.config.bicep index 130a9806b..096408d26 100644 --- a/infra/modules/web-sites.config.bicep +++ b/infra/modules/web-sites.config.bicep @@ -81,11 +81,3 @@ resource config 'Microsoft.Web/sites/config@2024-04-01' = { properties: expandedProperties } -@description('The name of the site config.') -output name string = config.name - -@description('The resource ID of the site config.') -output resourceId string = config.id - -@description('The resource group the site config was deployed into.') -output resourceGroupName string = resourceGroup().name diff --git a/infra/resources.bicep b/infra/resources.bicep deleted file mode 100644 index b327c4f3c..000000000 --- a/infra/resources.bicep +++ /dev/null @@ -1,685 +0,0 @@ -@description('The location used for all deployed resources') -param location string = resourceGroup().location - -@description('Tags that will be applied to all resources') -param tags object = {} - - -param appExists bool -@secure() -param appDefinition object -param kmChartsFunctionExists bool -@secure() -param kmChartsFunctionDefinition object -param kmRagFunctionExists bool -@secure() -param kmRagFunctionDefinition object -param addUserScriptsExists bool -@secure() -param addUserScriptsDefinition object -param fabricScriptsExists bool -@secure() -param fabricScriptsDefinition object -param indexScriptsExists bool -@secure() -param indexScriptsDefinition object - -@description('Id of the user or app to assign application roles') -param principalId string - -var abbrs = loadJsonContent('./abbreviations.json') -var resourceToken = uniqueString(subscription().id, resourceGroup().id, location) - -// Monitor application with Azure Monitor -module monitoring 'br/public:avm/ptn/azd/monitoring:0.1.0' = { - name: 'monitoring' - params: { - logAnalyticsName: '${abbrs.operationalInsightsWorkspaces}${resourceToken}' - applicationInsightsName: '${abbrs.insightsComponents}${resourceToken}' - applicationInsightsDashboardName: '${abbrs.portalDashboards}${resourceToken}' - location: location - tags: tags - } -} - -// Container registry -module containerRegistry 'br/public:avm/res/container-registry/registry:0.1.1' = { - name: 'registry' - params: { - name: '${abbrs.containerRegistryRegistries}${resourceToken}' - location: location - acrAdminUserEnabled: true - tags: tags - publicNetworkAccess: 'Enabled' - roleAssignments:[ - { - principalId: appIdentity.outputs.principalId - principalType: 'ServicePrincipal' - roleDefinitionIdOrName: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d') - } - { - principalId: kmChartsFunctionIdentity.outputs.principalId - principalType: 'ServicePrincipal' - roleDefinitionIdOrName: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d') - } - { - principalId: kmRagFunctionIdentity.outputs.principalId - principalType: 'ServicePrincipal' - roleDefinitionIdOrName: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d') - } - { - principalId: addUserScriptsIdentity.outputs.principalId - principalType: 'ServicePrincipal' - roleDefinitionIdOrName: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d') - } - { - principalId: fabricScriptsIdentity.outputs.principalId - principalType: 'ServicePrincipal' - roleDefinitionIdOrName: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d') - } - { - principalId: indexScriptsIdentity.outputs.principalId - principalType: 'ServicePrincipal' - roleDefinitionIdOrName: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d') - } - ] - } -} - -// Container apps environment -module containerAppsEnvironment 'br/public:avm/res/app/managed-environment:0.4.5' = { - name: 'container-apps-environment' - params: { - logAnalyticsWorkspaceResourceId: monitoring.outputs.logAnalyticsWorkspaceResourceId - name: '${abbrs.appManagedEnvironments}${resourceToken}' - location: location - zoneRedundant: false - } -} - -module appIdentity 'br/public:avm/res/managed-identity/user-assigned-identity:0.2.1' = { - name: 'appidentity' - params: { - name: '${abbrs.managedIdentityUserAssignedIdentities}app-${resourceToken}' - location: location - } -} - -module appFetchLatestImage './modules/fetch-container-image.bicep' = { - name: 'app-fetch-image' - params: { - exists: appExists - name: 'app' - } -} - -var appAppSettingsArray = filter(array(appDefinition.settings), i => i.name != '') -var appSecrets = map(filter(appAppSettingsArray, i => i.?secret != null), i => { - name: i.name - value: i.value - secretRef: i.?secretRef ?? take(replace(replace(toLower(i.name), '_', '-'), '.', '-'), 32) -}) -var appEnv = map(filter(appAppSettingsArray, i => i.?secret == null), i => { - name: i.name - value: i.value -}) - -module app 'br/public:avm/res/app/container-app:0.8.0' = { - name: 'app' - params: { - name: 'app' - ingressTargetPort: 80 - scaleMinReplicas: 1 - scaleMaxReplicas: 10 - secrets: { - secureList: union([ - ], - map(appSecrets, secret => { - name: secret.secretRef - value: secret.value - })) - } - containers: [ - { - image: appFetchLatestImage.outputs.?containers[?0].?image ?? 'mcr.microsoft.com/azuredocs/containerapps-helloworld:latest' - name: 'main' - resources: { - cpu: json('0.5') - memory: '1.0Gi' - } - env: union([ - { - name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' - value: monitoring.outputs.applicationInsightsConnectionString - } - { - name: 'AZURE_CLIENT_ID' - value: appIdentity.outputs.clientId - } - { - name: 'PORT' - value: '80' - } - ], - appEnv, - map(appSecrets, secret => { - name: secret.name - secretRef: secret.secretRef - })) - } - ] - managedIdentities:{ - systemAssigned: false - userAssignedResourceIds: [appIdentity.outputs.resourceId] - } - registries:[ - { - server: containerRegistry.outputs.loginServer - identity: appIdentity.outputs.resourceId - } - ] - environmentResourceId: containerAppsEnvironment.outputs.resourceId - location: location - tags: union(tags, { 'azd-service-name': 'app' }) - } -} - -module kmChartsFunctionIdentity 'br/public:avm/res/managed-identity/user-assigned-identity:0.2.1' = { - name: 'kmChartsFunctionidentity' - params: { - name: '${abbrs.managedIdentityUserAssignedIdentities}kmChartsFunction-${resourceToken}' - location: location - } -} - -module kmChartsFunctionFetchLatestImage './modules/fetch-container-image.bicep' = { - name: 'kmChartsFunction-fetch-image' - params: { - exists: kmChartsFunctionExists - name: 'km-charts-function' - } -} - -var kmChartsFunctionAppSettingsArray = filter(array(kmChartsFunctionDefinition.settings), i => i.name != '') -var kmChartsFunctionSecrets = map(filter(kmChartsFunctionAppSettingsArray, i => i.?secret != null), i => { - name: i.name - value: i.value - secretRef: i.?secretRef ?? take(replace(replace(toLower(i.name), '_', '-'), '.', '-'), 32) -}) -var kmChartsFunctionEnv = map(filter(kmChartsFunctionAppSettingsArray, i => i.?secret == null), i => { - name: i.name - value: i.value -}) - -module kmChartsFunction 'br/public:avm/res/app/container-app:0.8.0' = { - name: 'kmChartsFunction' - params: { - name: 'km-charts-function' - ingressTargetPort: 5000 - scaleMinReplicas: 1 - scaleMaxReplicas: 10 - secrets: { - secureList: union([ - ], - map(kmChartsFunctionSecrets, secret => { - name: secret.secretRef - value: secret.value - })) - } - containers: [ - { - image: kmChartsFunctionFetchLatestImage.outputs.?containers[?0].?image ?? 'mcr.microsoft.com/azuredocs/containerapps-helloworld:latest' - name: 'main' - resources: { - cpu: json('0.5') - memory: '1.0Gi' - } - env: union([ - { - name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' - value: monitoring.outputs.applicationInsightsConnectionString - } - { - name: 'AZURE_CLIENT_ID' - value: kmChartsFunctionIdentity.outputs.clientId - } - { - name: 'PORT' - value: '5000' - } - ], - kmChartsFunctionEnv, - map(kmChartsFunctionSecrets, secret => { - name: secret.name - secretRef: secret.secretRef - })) - } - ] - managedIdentities:{ - systemAssigned: false - userAssignedResourceIds: [kmChartsFunctionIdentity.outputs.resourceId] - } - registries:[ - { - server: containerRegistry.outputs.loginServer - identity: kmChartsFunctionIdentity.outputs.resourceId - } - ] - environmentResourceId: containerAppsEnvironment.outputs.resourceId - location: location - tags: union(tags, { 'azd-service-name': 'km-charts-function' }) - } -} - -module kmRagFunctionIdentity 'br/public:avm/res/managed-identity/user-assigned-identity:0.2.1' = { - name: 'kmRagFunctionidentity' - params: { - name: '${abbrs.managedIdentityUserAssignedIdentities}kmRagFunction-${resourceToken}' - location: location - } -} - -module kmRagFunctionFetchLatestImage './modules/fetch-container-image.bicep' = { - name: 'kmRagFunction-fetch-image' - params: { - exists: kmRagFunctionExists - name: 'km-rag-function' - } -} - -var kmRagFunctionAppSettingsArray = filter(array(kmRagFunctionDefinition.settings), i => i.name != '') -var kmRagFunctionSecrets = map(filter(kmRagFunctionAppSettingsArray, i => i.?secret != null), i => { - name: i.name - value: i.value - secretRef: i.?secretRef ?? take(replace(replace(toLower(i.name), '_', '-'), '.', '-'), 32) -}) -var kmRagFunctionEnv = map(filter(kmRagFunctionAppSettingsArray, i => i.?secret == null), i => { - name: i.name - value: i.value -}) - -module kmRagFunction 'br/public:avm/res/app/container-app:0.8.0' = { - name: 'kmRagFunction' - params: { - name: 'km-rag-function' - ingressTargetPort: 5000 - scaleMinReplicas: 1 - scaleMaxReplicas: 10 - secrets: { - secureList: union([ - ], - map(kmRagFunctionSecrets, secret => { - name: secret.secretRef - value: secret.value - })) - } - containers: [ - { - image: kmRagFunctionFetchLatestImage.outputs.?containers[?0].?image ?? 'mcr.microsoft.com/azuredocs/containerapps-helloworld:latest' - name: 'main' - resources: { - cpu: json('0.5') - memory: '1.0Gi' - } - env: union([ - { - name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' - value: monitoring.outputs.applicationInsightsConnectionString - } - { - name: 'AZURE_CLIENT_ID' - value: kmRagFunctionIdentity.outputs.clientId - } - { - name: 'PORT' - value: '5000' - } - ], - kmRagFunctionEnv, - map(kmRagFunctionSecrets, secret => { - name: secret.name - secretRef: secret.secretRef - })) - } - ] - managedIdentities:{ - systemAssigned: false - userAssignedResourceIds: [kmRagFunctionIdentity.outputs.resourceId] - } - registries:[ - { - server: containerRegistry.outputs.loginServer - identity: kmRagFunctionIdentity.outputs.resourceId - } - ] - environmentResourceId: containerAppsEnvironment.outputs.resourceId - location: location - tags: union(tags, { 'azd-service-name': 'km-rag-function' }) - } -} - -module addUserScriptsIdentity 'br/public:avm/res/managed-identity/user-assigned-identity:0.2.1' = { - name: 'addUserScriptsidentity' - params: { - name: '${abbrs.managedIdentityUserAssignedIdentities}addUserScripts-${resourceToken}' - location: location - } -} - -module addUserScriptsFetchLatestImage './modules/fetch-container-image.bicep' = { - name: 'addUserScripts-fetch-image' - params: { - exists: addUserScriptsExists - name: 'add-user-scripts' - } -} - -var addUserScriptsAppSettingsArray = filter(array(addUserScriptsDefinition.settings), i => i.name != '') -var addUserScriptsSecrets = map(filter(addUserScriptsAppSettingsArray, i => i.?secret != null), i => { - name: i.name - value: i.value - secretRef: i.?secretRef ?? take(replace(replace(toLower(i.name), '_', '-'), '.', '-'), 32) -}) -var addUserScriptsEnv = map(filter(addUserScriptsAppSettingsArray, i => i.?secret == null), i => { - name: i.name - value: i.value -}) - -module addUserScripts 'br/public:avm/res/app/container-app:0.8.0' = { - name: 'addUserScripts' - params: { - name: 'add-user-scripts' - ingressTargetPort: 80 - scaleMinReplicas: 1 - scaleMaxReplicas: 10 - secrets: { - secureList: union([ - ], - map(addUserScriptsSecrets, secret => { - name: secret.secretRef - value: secret.value - })) - } - containers: [ - { - image: addUserScriptsFetchLatestImage.outputs.?containers[?0].?image ?? 'mcr.microsoft.com/azuredocs/containerapps-helloworld:latest' - name: 'main' - resources: { - cpu: json('0.5') - memory: '1.0Gi' - } - env: union([ - { - name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' - value: monitoring.outputs.applicationInsightsConnectionString - } - { - name: 'AZURE_CLIENT_ID' - value: addUserScriptsIdentity.outputs.clientId - } - { - name: 'PORT' - value: '80' - } - ], - addUserScriptsEnv, - map(addUserScriptsSecrets, secret => { - name: secret.name - secretRef: secret.secretRef - })) - } - ] - managedIdentities:{ - systemAssigned: false - userAssignedResourceIds: [addUserScriptsIdentity.outputs.resourceId] - } - registries:[ - { - server: containerRegistry.outputs.loginServer - identity: addUserScriptsIdentity.outputs.resourceId - } - ] - environmentResourceId: containerAppsEnvironment.outputs.resourceId - location: location - tags: union(tags, { 'azd-service-name': 'add-user-scripts' }) - } -} - -module fabricScriptsIdentity 'br/public:avm/res/managed-identity/user-assigned-identity:0.2.1' = { - name: 'fabricScriptsidentity' - params: { - name: '${abbrs.managedIdentityUserAssignedIdentities}fabricScripts-${resourceToken}' - location: location - } -} - -module fabricScriptsFetchLatestImage './modules/fetch-container-image.bicep' = { - name: 'fabricScripts-fetch-image' - params: { - exists: fabricScriptsExists - name: 'fabric-scripts' - } -} - -var fabricScriptsAppSettingsArray = filter(array(fabricScriptsDefinition.settings), i => i.name != '') -var fabricScriptsSecrets = map(filter(fabricScriptsAppSettingsArray, i => i.?secret != null), i => { - name: i.name - value: i.value - secretRef: i.?secretRef ?? take(replace(replace(toLower(i.name), '_', '-'), '.', '-'), 32) -}) -var fabricScriptsEnv = map(filter(fabricScriptsAppSettingsArray, i => i.?secret == null), i => { - name: i.name - value: i.value -}) - -module fabricScripts 'br/public:avm/res/app/container-app:0.8.0' = { - name: 'fabricScripts' - params: { - name: 'fabric-scripts' - ingressTargetPort: 80 - scaleMinReplicas: 1 - scaleMaxReplicas: 10 - secrets: { - secureList: union([ - ], - map(fabricScriptsSecrets, secret => { - name: secret.secretRef - value: secret.value - })) - } - containers: [ - { - image: fabricScriptsFetchLatestImage.outputs.?containers[?0].?image ?? 'mcr.microsoft.com/azuredocs/containerapps-helloworld:latest' - name: 'main' - resources: { - cpu: json('0.5') - memory: '1.0Gi' - } - env: union([ - { - name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' - value: monitoring.outputs.applicationInsightsConnectionString - } - { - name: 'AZURE_CLIENT_ID' - value: fabricScriptsIdentity.outputs.clientId - } - { - name: 'PORT' - value: '80' - } - ], - fabricScriptsEnv, - map(fabricScriptsSecrets, secret => { - name: secret.name - secretRef: secret.secretRef - })) - } - ] - managedIdentities:{ - systemAssigned: false - userAssignedResourceIds: [fabricScriptsIdentity.outputs.resourceId] - } - registries:[ - { - server: containerRegistry.outputs.loginServer - identity: fabricScriptsIdentity.outputs.resourceId - } - ] - environmentResourceId: containerAppsEnvironment.outputs.resourceId - location: location - tags: union(tags, { 'azd-service-name': 'fabric-scripts' }) - } -} - -module indexScriptsIdentity 'br/public:avm/res/managed-identity/user-assigned-identity:0.2.1' = { - name: 'indexScriptsidentity' - params: { - name: '${abbrs.managedIdentityUserAssignedIdentities}indexScripts-${resourceToken}' - location: location - } -} - -module indexScriptsFetchLatestImage './modules/fetch-container-image.bicep' = { - name: 'indexScripts-fetch-image' - params: { - exists: indexScriptsExists - name: 'index-scripts' - } -} - -var indexScriptsAppSettingsArray = filter(array(indexScriptsDefinition.settings), i => i.name != '') -var indexScriptsSecrets = map(filter(indexScriptsAppSettingsArray, i => i.?secret != null), i => { - name: i.name - value: i.value - secretRef: i.?secretRef ?? take(replace(replace(toLower(i.name), '_', '-'), '.', '-'), 32) -}) -var indexScriptsEnv = map(filter(indexScriptsAppSettingsArray, i => i.?secret == null), i => { - name: i.name - value: i.value -}) - -module indexScripts 'br/public:avm/res/app/container-app:0.8.0' = { - name: 'indexScripts' - params: { - name: 'index-scripts' - ingressTargetPort: 80 - scaleMinReplicas: 1 - scaleMaxReplicas: 10 - secrets: { - secureList: union([ - ], - map(indexScriptsSecrets, secret => { - name: secret.secretRef - value: secret.value - })) - } - containers: [ - { - image: indexScriptsFetchLatestImage.outputs.?containers[?0].?image ?? 'mcr.microsoft.com/azuredocs/containerapps-helloworld:latest' - name: 'main' - resources: { - cpu: json('0.5') - memory: '1.0Gi' - } - env: union([ - { - name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' - value: monitoring.outputs.applicationInsightsConnectionString - } - { - name: 'AZURE_CLIENT_ID' - value: indexScriptsIdentity.outputs.clientId - } - { - name: 'PORT' - value: '80' - } - ], - indexScriptsEnv, - map(indexScriptsSecrets, secret => { - name: secret.name - secretRef: secret.secretRef - })) - } - ] - managedIdentities:{ - systemAssigned: false - userAssignedResourceIds: [indexScriptsIdentity.outputs.resourceId] - } - registries:[ - { - server: containerRegistry.outputs.loginServer - identity: indexScriptsIdentity.outputs.resourceId - } - ] - environmentResourceId: containerAppsEnvironment.outputs.resourceId - location: location - tags: union(tags, { 'azd-service-name': 'index-scripts' }) - } -} -// Create a keyvault to store secrets -module keyVault 'br/public:avm/res/key-vault/vault:0.6.1' = { - name: 'keyvault' - params: { - name: '${abbrs.keyVaultVaults}${resourceToken}' - location: location - tags: tags - enableRbacAuthorization: false - accessPolicies: [ - { - objectId: principalId - permissions: { - secrets: [ 'get', 'list' ] - } - } - { - objectId: appIdentity.outputs.principalId - permissions: { - secrets: [ 'get', 'list' ] - } - } - { - objectId: kmChartsFunctionIdentity.outputs.principalId - permissions: { - secrets: [ 'get', 'list' ] - } - } - { - objectId: kmRagFunctionIdentity.outputs.principalId - permissions: { - secrets: [ 'get', 'list' ] - } - } - { - objectId: addUserScriptsIdentity.outputs.principalId - permissions: { - secrets: [ 'get', 'list' ] - } - } - { - objectId: fabricScriptsIdentity.outputs.principalId - permissions: { - secrets: [ 'get', 'list' ] - } - } - { - objectId: indexScriptsIdentity.outputs.principalId - permissions: { - secrets: [ 'get', 'list' ] - } - } - ] - secrets: [ - ] - } -} -output AZURE_CONTAINER_REGISTRY_ENDPOINT string = containerRegistry.outputs.loginServer -output AZURE_KEY_VAULT_ENDPOINT string = keyVault.outputs.uri -output AZURE_KEY_VAULT_NAME string = keyVault.outputs.name -output AZURE_RESOURCE_APP_ID string = app.outputs.resourceId -output AZURE_RESOURCE_KM_CHARTS_FUNCTION_ID string = kmChartsFunction.outputs.resourceId -output AZURE_RESOURCE_KM_RAG_FUNCTION_ID string = kmRagFunction.outputs.resourceId -output AZURE_RESOURCE_ADD_USER_SCRIPTS_ID string = addUserScripts.outputs.resourceId -output AZURE_RESOURCE_FABRIC_SCRIPTS_ID string = fabricScripts.outputs.resourceId -output AZURE_RESOURCE_INDEX_SCRIPTS_ID string = indexScripts.outputs.resourceId diff --git a/infra/scripts/index_scripts/00_create_sample_data_files.py b/infra/scripts/index_scripts/00_create_sample_data_files.py deleted file mode 100644 index a8b862e42..000000000 --- a/infra/scripts/index_scripts/00_create_sample_data_files.py +++ /dev/null @@ -1,297 +0,0 @@ -import csv -import json -import os -import struct - -import pyodbc -from azure.identity import AzureCliCredential -from azure.search.documents import SearchClient -from azure.search.documents.indexes import SearchIndexClient -# SQL Server setup - -SQL_SERVER = '.database.windows.net' -SQL_DATABASE = '' - -credential = AzureCliCredential(process_timeout=30) - -try: - driver = "{ODBC Driver 18 for SQL Server}" - token_bytes = credential.get_token("https://database.windows.net/.default").token.encode("utf-16-LE") - token_struct = struct.pack(f"=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, "node_modules/@azure/msal-browser": { "version": "4.30.0", "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.30.0.tgz", @@ -118,9 +134,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -255,9 +271,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", - "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.3.tgz", + "integrity": "sha512-RpLYy2sb51oNLjuu1iD3bwBqCBWUzjO0ocp+iaCP/lJtb2CPLcnC2Fftw+4sAzaMELGeWTgExSKADbdo0GFVzA==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -265,7 +281,7 @@ "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.6", + "@babel/traverse": "^7.29.0", "semver": "^6.3.1" }, "engines": { @@ -501,9 +517,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", + "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", "license": "MIT", "dependencies": { "@babel/types": "^7.29.0" @@ -561,6 +577,22 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.3.tgz", + "integrity": "sha512-SRS46DFR4HqzUzCVgi90/xMoL+zeBDBvWdKYXSEzh79kXswNFEglUpMKxR04//dPqwYXWUBJ3mpUd933ru9Kmg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", @@ -1405,9 +1437,9 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", - "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", + "version": "7.29.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.4.tgz", + "integrity": "sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w==", "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.28.6", @@ -1955,18 +1987,19 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.2.tgz", - "integrity": "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==", + "version": "7.29.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.5.tgz", + "integrity": "sha512-/69t2aEzGKHD76DyLbHysF/QH2LJOB8iFnYO37unDTKBTubzcMRv0f3H5EiN1Q6ajOd/eB7dAInF0qdFVS06kA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.29.0", + "@babel/compat-data": "^7.29.3", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.3", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", @@ -1998,7 +2031,7 @@ "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.28.6", - "@babel/plugin-transform-modules-systemjs": "^7.29.0", + "@babel/plugin-transform-modules-systemjs": "^7.29.4", "@babel/plugin-transform-modules-umd": "^7.27.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", @@ -2511,6 +2544,22 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -2529,6 +2578,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, "node_modules/@eslint/js": { "version": "8.57.1", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", @@ -2687,21 +2742,21 @@ } }, "node_modules/@fluentui/react-accordion": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.10.0.tgz", - "integrity": "sha512-EwjRfBdC3esMEP++PddyF7bVMSv9+t2W8AY5GkNcwDsqAW3D4zhlvxXBAb3qmpgXy4qMxRWGL8cEaiWgMpH1sg==", + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.11.0.tgz", + "integrity": "sha512-mEy73hbJM53tMj3MWqm3ajbBxj48uubnJjumVKI8Z/eXHS8L3GzUy5rf/gUH26xSR2Tl+edpFhYB8PFbJDIKKw==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-aria": "^9.17.11", + "@fluentui/react-context-selector": "^9.2.16", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.14.0", - "@fluentui/react-motion-components-preview": "^0.15.3", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-motion": "^9.15.0", + "@fluentui/react-motion-components-preview": "^0.15.4", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2713,18 +2768,18 @@ } }, "node_modules/@fluentui/react-alert": { - "version": "9.0.0-beta.138", - "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.138.tgz", - "integrity": "sha512-mE3nMx1ngevvmFcp/2sePyJrdE8nme7eqCv1ppUT+mTIA1RYkR8hzBld1+DV1qJYc+F6DCeg4gImuQuu1OXiGA==", + "version": "9.0.0-beta.139", + "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.139.tgz", + "integrity": "sha512-R9r4dwwpWpgFmB8wVeWqipjUh/e6lyacnerX39HtVdgcG/PE+kpdHjKGiy8MAD+BGYCzrUxKNhXTQDlpXasJ1Q==", "license": "MIT", "dependencies": { - "@fluentui/react-avatar": "^9.11.0", - "@fluentui/react-button": "^9.9.0", + "@fluentui/react-avatar": "^9.11.1", + "@fluentui/react-button": "^9.9.1", "@fluentui/react-icons": "^2.0.239", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2736,16 +2791,16 @@ } }, "node_modules/@fluentui/react-aria": { - "version": "9.17.10", - "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.17.10.tgz", - "integrity": "sha512-KqS2XcdN84XsgVG4fAESyOBfixN7zbObWfQVLNZ2gZrp2b1hPGVYfQ6J4WOO0vXMKYp0rre/QMOgDm6/srL0XQ==", + "version": "9.17.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.17.11.tgz", + "integrity": "sha512-K9nz+Wn5JliCpG6bIYYPXvKmpOql+w9uyzmYNYkYQ6QHgoCpph7XUFx1HCtsJm2PPNi8WO8g0ZV9jojdGKl1Tg==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-tabster": "^9.26.14", + "@fluentui/react-utilities": "^9.26.3", "@swc/helpers": "^0.5.1" }, "peerDependencies": { @@ -2756,21 +2811,21 @@ } }, "node_modules/@fluentui/react-avatar": { - "version": "9.11.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.11.0.tgz", - "integrity": "sha512-3MogJIiOGilKh9y/sWy0Cali1tpvWQNwcs2ryL7EVXi5xwTfKQM/WEgEnW2z+KtumDQUsRqlCHCSoi+x+BF8Qg==", + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.11.1.tgz", + "integrity": "sha512-y1T67rVQQ/D4FAod8F4crXo9funaptscRIiW81LAsbN82fFVexMPQ9GmXooQQvn6ILvjJtf9IyvSJ195qDsyag==", "license": "MIT", "dependencies": { - "@fluentui/react-badge": "^9.5.1", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-badge": "^9.5.2", + "@fluentui/react-context-selector": "^9.2.16", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-popover": "^9.14.1", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-popover": "^9.14.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-tooltip": "^9.10.0", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-tooltip": "^9.10.1", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2782,16 +2837,16 @@ } }, "node_modules/@fluentui/react-badge": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.5.1.tgz", - "integrity": "sha512-OHS15ovGFPShrAA9U+hCyloJEyffC9gdif0a27AOIB9aVlF/hTzG7toxxulcg4ar4F9X3xXk/uccCCa2kzK0Gw==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.5.2.tgz", + "integrity": "sha512-+UPAK9dCD6Gx+LWr6vqKMIbYOPf7oXX+GXRtCJ5fekCTHD0VgIWuIMuEtxVrHpJQdb2VNaZadY8/dMomk2JaXw==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2803,20 +2858,20 @@ } }, "node_modules/@fluentui/react-breadcrumb": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.4.0.tgz", - "integrity": "sha512-QpCjYlM3JTMnNwh/sDehDbuAVjTcgSfjkPdSmFaPk2lPHpER32CBcJVhheP9en2U5NbW1e+Gtvq8y06RN8FCWw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.4.1.tgz", + "integrity": "sha512-XgUB1yv04GdcL/6kUo6kh+BaN4df1A/Ds/fL1QxNrm5E26Vmvvlc0LN0WV/qb5qhKx0NwhtIXgOZHjfzyt7iCA==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-button": "^9.9.0", + "@fluentui/react-aria": "^9.17.11", + "@fluentui/react-button": "^9.9.1", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-link": "^9.8.0", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-link": "^9.8.1", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2828,19 +2883,19 @@ } }, "node_modules/@fluentui/react-button": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.9.0.tgz", - "integrity": "sha512-aH3aSjKyxIiNb9jJOUaaIq47w7jP5ESFSRzvMjcWOETvlWo4QgNqEOOsYqpcltM1OrQZ0sTy/isxppRcyMDlcQ==", + "version": "9.9.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.9.1.tgz", + "integrity": "sha512-WNzpseiVbqEKKevTkAnyHNoK/8ktYPE6rvf31gGvSDnBBclqfrn4PSYG2ppi+Z7abmClnaNFxpp1OHuOoVQ8Bg==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-aria": "^9.17.11", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2852,18 +2907,18 @@ } }, "node_modules/@fluentui/react-card": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.6.0.tgz", - "integrity": "sha512-vgBvhtSzQDa01aOP9zdhJXFLsZAiDVslRfX3HmlIo1pAMt8w+PBq+ypDp1wxM7HPFpj9+RYcERRKtf4MSNP9Nw==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.6.1.tgz", + "integrity": "sha512-KBijjAxi0mBDSgnA1OCglqAVWc+Q0L7A2wCokszX/53oqfJPSvWxWFma7esz9b5MF/kdRrAR0vmy7MiosepNLQ==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-text": "^9.6.15", + "@fluentui/react-tabster": "^9.26.14", + "@fluentui/react-text": "^9.6.16", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2875,21 +2930,21 @@ } }, "node_modules/@fluentui/react-carousel": { - "version": "9.9.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-carousel/-/react-carousel-9.9.6.tgz", - "integrity": "sha512-Ae7DKwQsidRBjUQeiXffRUi8i/26jMgJd24rDVLeQUvoUhs+z/SA9iZN/QMuNl02E291MAEruENKzzkshvfYfg==", + "version": "9.9.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-carousel/-/react-carousel-9.9.7.tgz", + "integrity": "sha512-lummYk+tASL/rM/SXWruoqhUAyJjTiOMgiCz55ncE3q2pSZe/EbsV5WfRw5B3y7pHX8xLusN831TBgUthj/sUw==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-button": "^9.9.0", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-aria": "^9.17.11", + "@fluentui/react-button": "^9.9.1", + "@fluentui/react-context-selector": "^9.2.16", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-tooltip": "^9.10.0", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-tooltip": "^9.10.1", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1", "embla-carousel": "^8.5.1", @@ -2904,19 +2959,19 @@ } }, "node_modules/@fluentui/react-checkbox": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.6.0.tgz", - "integrity": "sha512-GMgB1Yx2WP6cISIZoRTyXp2VkJBR8t1+wRyY63RRcofL/ziqqBhz++kl317lbVv7QxnXZh6KlVuoPROWFDQuaw==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.6.1.tgz", + "integrity": "sha512-Rsf3TmcNrzLuHan9lyUFUmMZnNyvS7DV8C4Vc9lZnZTFRBo94GRMGzu0BcWKFbr3cCDT/r5RmIyQYz0kc7Jd2w==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.5.0", + "@fluentui/react-field": "^9.5.1", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-label": "^9.4.0", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-label": "^9.4.1", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2928,18 +2983,18 @@ } }, "node_modules/@fluentui/react-color-picker": { - "version": "9.2.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-color-picker/-/react-color-picker-9.2.15.tgz", - "integrity": "sha512-RMmawl7g4gUYLuTQG2QwCcR9fGC+vDD+snsBlXtObpj/cKpeDmYif46g88pYv86jeIXY1zsjINmLpELmz+uFmw==", + "version": "9.2.16", + "resolved": "https://registry.npmjs.org/@fluentui/react-color-picker/-/react-color-picker-9.2.16.tgz", + "integrity": "sha512-+H8Ea8dwoSeUCTLRpUiGLrRsNvBnlHplnwJPU0isp8jdAfrIM/savZTLj6o4rqNFpNHQqAXxGwNuUV9YfHoJuQ==", "license": "MIT", "dependencies": { "@ctrl/tinycolor": "^3.3.4", - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-context-selector": "^9.2.16", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2951,23 +3006,23 @@ } }, "node_modules/@fluentui/react-combobox": { - "version": "9.17.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.17.0.tgz", - "integrity": "sha512-04JTIrXCAbG8HnczFVzJsUJO+NJQ2d/JPynXlmTq7KCMw0BssiF//7IAPFnTiMYmS7jcwc9Uh4ZeFrw+czA79g==", + "version": "9.17.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.17.1.tgz", + "integrity": "sha512-ezgt6tfOKd3wlG6IHvWl0TPNPpfHRtnEwC2kuqHYH/r1nMNp9edFi8Ya3+1eM7oxai19XW0swt69GPwRu51FVQ==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-field": "^9.5.0", + "@fluentui/react-aria": "^9.17.11", + "@fluentui/react-context-selector": "^9.2.16", + "@fluentui/react-field": "^9.5.1", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-portal": "^9.8.11", - "@fluentui/react-positioning": "^9.22.0", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-portal": "^9.8.12", + "@fluentui/react-positioning": "^9.22.1", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -2979,71 +3034,71 @@ } }, "node_modules/@fluentui/react-components": { - "version": "9.73.7", - "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.73.7.tgz", - "integrity": "sha512-hLxXEAiiMEMmFR3jEYgFPOV5lnNzu6SJU0NtyMCn1Tf4HXgCfy4h700e+GzuAsL1RlQAYC35HplcZHcEffwTIQ==", - "license": "MIT", - "dependencies": { - "@fluentui/react-accordion": "^9.10.0", - "@fluentui/react-alert": "9.0.0-beta.138", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-avatar": "^9.11.0", - "@fluentui/react-badge": "^9.5.1", - "@fluentui/react-breadcrumb": "^9.4.0", - "@fluentui/react-button": "^9.9.0", - "@fluentui/react-card": "^9.6.0", - "@fluentui/react-carousel": "^9.9.6", - "@fluentui/react-checkbox": "^9.6.0", - "@fluentui/react-color-picker": "^9.2.15", - "@fluentui/react-combobox": "^9.17.0", - "@fluentui/react-dialog": "^9.17.3", - "@fluentui/react-divider": "^9.7.0", - "@fluentui/react-drawer": "^9.11.6", - "@fluentui/react-field": "^9.5.0", - "@fluentui/react-image": "^9.4.0", - "@fluentui/react-infobutton": "9.0.0-beta.114", - "@fluentui/react-infolabel": "^9.4.19", - "@fluentui/react-input": "^9.8.1", - "@fluentui/react-label": "^9.4.0", - "@fluentui/react-link": "^9.8.0", - "@fluentui/react-list": "^9.6.13", - "@fluentui/react-menu": "^9.24.0", - "@fluentui/react-message-bar": "^9.6.23", - "@fluentui/react-motion": "^9.14.0", - "@fluentui/react-nav": "^9.3.23", - "@fluentui/react-overflow": "^9.7.1", - "@fluentui/react-persona": "^9.7.2", - "@fluentui/react-popover": "^9.14.1", - "@fluentui/react-portal": "^9.8.11", - "@fluentui/react-positioning": "^9.22.0", - "@fluentui/react-progress": "^9.5.0", - "@fluentui/react-provider": "^9.22.15", - "@fluentui/react-radio": "^9.6.1", - "@fluentui/react-rating": "^9.4.0", - "@fluentui/react-search": "^9.4.1", - "@fluentui/react-select": "^9.5.0", + "version": "9.73.8", + "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.73.8.tgz", + "integrity": "sha512-JG4KQjEvRRfPlh4yt6Rv1/k87ydM2y49r5XPNCnuYHahA7kEM+dY8JdOI7n7FW8bdcvZ7qt4smDrQ2XcPfmxlA==", + "license": "MIT", + "dependencies": { + "@fluentui/react-accordion": "^9.11.0", + "@fluentui/react-alert": "9.0.0-beta.139", + "@fluentui/react-aria": "^9.17.11", + "@fluentui/react-avatar": "^9.11.1", + "@fluentui/react-badge": "^9.5.2", + "@fluentui/react-breadcrumb": "^9.4.1", + "@fluentui/react-button": "^9.9.1", + "@fluentui/react-card": "^9.6.1", + "@fluentui/react-carousel": "^9.9.7", + "@fluentui/react-checkbox": "^9.6.1", + "@fluentui/react-color-picker": "^9.2.16", + "@fluentui/react-combobox": "^9.17.1", + "@fluentui/react-dialog": "^9.18.0", + "@fluentui/react-divider": "^9.7.1", + "@fluentui/react-drawer": "^9.12.0", + "@fluentui/react-field": "^9.5.1", + "@fluentui/react-image": "^9.4.1", + "@fluentui/react-infobutton": "9.0.0-beta.115", + "@fluentui/react-infolabel": "^9.4.20", + "@fluentui/react-input": "^9.8.2", + "@fluentui/react-label": "^9.4.1", + "@fluentui/react-link": "^9.8.1", + "@fluentui/react-list": "^9.6.14", + "@fluentui/react-menu": "^9.24.1", + "@fluentui/react-message-bar": "^9.7.0", + "@fluentui/react-motion": "^9.15.0", + "@fluentui/react-nav": "^9.3.24", + "@fluentui/react-overflow": "^9.7.2", + "@fluentui/react-persona": "^9.7.3", + "@fluentui/react-popover": "^9.14.2", + "@fluentui/react-portal": "^9.8.12", + "@fluentui/react-positioning": "^9.22.1", + "@fluentui/react-progress": "^9.5.1", + "@fluentui/react-provider": "^9.22.16", + "@fluentui/react-radio": "^9.6.2", + "@fluentui/react-rating": "^9.4.1", + "@fluentui/react-search": "^9.4.2", + "@fluentui/react-select": "^9.5.1", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-skeleton": "^9.7.1", - "@fluentui/react-slider": "^9.6.1", - "@fluentui/react-spinbutton": "^9.6.1", - "@fluentui/react-spinner": "^9.8.1", - "@fluentui/react-swatch-picker": "^9.5.1", - "@fluentui/react-switch": "^9.7.1", - "@fluentui/react-table": "^9.19.14", - "@fluentui/react-tabs": "^9.12.0", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-tag-picker": "^9.8.5", - "@fluentui/react-tags": "^9.8.0", - "@fluentui/react-teaching-popover": "^9.6.20", - "@fluentui/react-text": "^9.6.15", - "@fluentui/react-textarea": "^9.7.1", + "@fluentui/react-skeleton": "^9.7.2", + "@fluentui/react-slider": "^9.6.2", + "@fluentui/react-spinbutton": "^9.6.2", + "@fluentui/react-spinner": "^9.8.2", + "@fluentui/react-swatch-picker": "^9.5.2", + "@fluentui/react-switch": "^9.7.2", + "@fluentui/react-table": "^9.19.15", + "@fluentui/react-tabs": "^9.12.1", + "@fluentui/react-tabster": "^9.26.14", + "@fluentui/react-tag-picker": "^9.8.6", + "@fluentui/react-tags": "^9.8.1", + "@fluentui/react-teaching-popover": "^9.6.21", + "@fluentui/react-text": "^9.6.16", + "@fluentui/react-textarea": "^9.7.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-toast": "^9.7.16", - "@fluentui/react-toolbar": "^9.7.7", - "@fluentui/react-tooltip": "^9.10.0", - "@fluentui/react-tree": "^9.15.16", - "@fluentui/react-utilities": "^9.26.2", - "@fluentui/react-virtualizer": "9.0.0-alpha.111", + "@fluentui/react-toast": "^9.7.17", + "@fluentui/react-toolbar": "^9.8.0", + "@fluentui/react-tooltip": "^9.10.1", + "@fluentui/react-tree": "^9.16.0", + "@fluentui/react-utilities": "^9.26.3", + "@fluentui/react-virtualizer": "9.0.0-alpha.112", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3055,12 +3110,12 @@ } }, "node_modules/@fluentui/react-context-selector": { - "version": "9.2.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.2.15.tgz", - "integrity": "sha512-QymBntFLJNZ9VfTOaBn2ApUSSSC5UuDW8ZcgPJPA+06XEFH+U9Zny2d9QAg1xYNYwIGWahWGQ+7ATOuLxtB8Jw==", + "version": "9.2.16", + "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.2.16.tgz", + "integrity": "sha512-D+/X2liT+eZe0rzXbwddPH333ml2SXz71biR13aeyGJQr8+W+icMAIsYhpwk0CC3KtJ3f1/CLTm7vcIrvqsJ4g==", "license": "MIT", "dependencies": { - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@swc/helpers": "^0.5.1" }, "peerDependencies": { @@ -3072,23 +3127,23 @@ } }, "node_modules/@fluentui/react-dialog": { - "version": "9.17.3", - "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.17.3.tgz", - "integrity": "sha512-rF5l8n5yhaB//ZHns0my3Tviir7R8NVyRgTtvV2gLhG58YM7qpm54oraG83uwlXCcZp0wlg2LuIe1cZ559ex1A==", + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.18.0.tgz", + "integrity": "sha512-i+V2o0NJ1itjVADJFov5AR/JetpD2hCMiLye0vfi3/XsFMgEPZnGzILVxPCO/ovULTiCyThcL1UvY0d/PYrZfA==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-aria": "^9.17.11", + "@fluentui/react-context-selector": "^9.2.16", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.14.0", - "@fluentui/react-motion-components-preview": "^0.15.3", - "@fluentui/react-portal": "^9.8.11", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-motion": "^9.15.0", + "@fluentui/react-motion-components-preview": "^0.15.4", + "@fluentui/react-portal": "^9.8.12", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3100,15 +3155,15 @@ } }, "node_modules/@fluentui/react-divider": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.7.0.tgz", - "integrity": "sha512-U8Nhrghjeh+XCGM4B7aHYosd6fXaxHC3MpZi7DB0xQ20ljn5cSTpBt4Yvl+tB9ld2+/eM8wekx1GVKyI4yWa3g==", + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.7.1.tgz", + "integrity": "sha512-ptymE6iADb/ugezulaMeoAfGxKSwOjHEHBh8N1ydOR3AoOxsSUPkvoPC0mReO/yV5Nas7pz5s5VuJTspmFz0hA==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3120,20 +3175,20 @@ } }, "node_modules/@fluentui/react-drawer": { - "version": "9.11.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.11.6.tgz", - "integrity": "sha512-E+k3eKVb/xKPm2RH5Q1xBjL89NeB1GXtYHO6qRlhQ9auYVTlaBCR7f/ZfIIJJ2x8MzfntQljyl94VARtmZYnyA==", + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.12.0.tgz", + "integrity": "sha512-PUXeXUH6JqwpjqYphHesHl75UAFSvxQJQqrevMFHE78ZF0Cqn59Xpa+8hGwRSuoRcYa90jjfHzJOOjN0iNM2iA==", "license": "MIT", "dependencies": { - "@fluentui/react-dialog": "^9.17.3", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.14.0", - "@fluentui/react-motion-components-preview": "^0.15.3", - "@fluentui/react-portal": "^9.8.11", + "@fluentui/react-dialog": "^9.18.0", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-motion": "^9.15.0", + "@fluentui/react-motion-components-preview": "^0.15.4", + "@fluentui/react-portal": "^9.8.12", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3145,18 +3200,18 @@ } }, "node_modules/@fluentui/react-field": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.5.0.tgz", - "integrity": "sha512-yGjB9RXqKrolkkjyAsKVdrH2Xeinj+vromrSCJelgMJ3Q3D6YkExHQzgtdzqo0fVPppnEA4oDKL3Vqqnz/G5Ug==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.5.1.tgz", + "integrity": "sha512-u8J2d3AWb4yZXvy/mQd95y2lTon890RfybBTCbeBUzApGMI/77WqT5pRJ+zTM3lOMToPHVKylchNFusMpJaX9w==", "license": "MIT", "dependencies": { - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-context-selector": "^9.2.16", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-label": "^9.4.0", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-label": "^9.4.1", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3202,9 +3257,9 @@ } }, "node_modules/@fluentui/react-icons": { - "version": "2.0.324", - "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.324.tgz", - "integrity": "sha512-wbtIQWwoTWNU6KyuF59zZ1viFv1i68iwVa1+so/QnfNKNHIXa2MEZ375Vg/pcubFBqlTxsKMrCBFtHEIzBHG/Q==", + "version": "2.0.325", + "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.325.tgz", + "integrity": "sha512-dbmpGMwyCFfkFdMSTEFnbNMXKDomPpqbzXVKRKM0EEQrcwOoQvm08d+SV+WWH11kni26SrgEtB9ycldD+fr92w==", "license": "MIT", "dependencies": { "@griffel/react": "^1.6.1", @@ -3215,15 +3270,15 @@ } }, "node_modules/@fluentui/react-image": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.4.0.tgz", - "integrity": "sha512-BpcBlmkukm7YYf6PTCbAIMkeCXc8+7aq2eMADsxF5gFD8j3d5lBY3cKByOWRM1NvXcMXmqXr/hQP+ovqNAHzEA==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.4.1.tgz", + "integrity": "sha512-yNd2Wq2xq952UUEVBkWeEmM7bTKdWx6BnsHPYRf0kdTADox2PquApYXsI1xw2pnAh3GSjARrGi9Eto0qxouLqA==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3235,18 +3290,18 @@ } }, "node_modules/@fluentui/react-infobutton": { - "version": "9.0.0-beta.114", - "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.114.tgz", - "integrity": "sha512-3mqnlIcRc0PuW7rsxLFjzqnI/IITZIrHRt8Zwcm8NX7XZIK3wfODb9ytmQDYU/5IfwiSXC+xozqhI6kttaE3iw==", + "version": "9.0.0-beta.115", + "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.115.tgz", + "integrity": "sha512-b+4B0ODzPEb4jNaW9HdT6VVt3CL5FgPL2yuKzALBsYVl3udJdFpyxHsZEPf3JrVTBL/rgF2fRI1iAioX6Fl7DA==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.237", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-label": "^9.4.0", - "@fluentui/react-popover": "^9.14.1", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-label": "^9.4.1", + "@fluentui/react-popover": "^9.14.2", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3258,19 +3313,19 @@ } }, "node_modules/@fluentui/react-infolabel": { - "version": "9.4.19", - "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.4.19.tgz", - "integrity": "sha512-b/3ETF5DPgHcRUcj85iGyiEXUFozFq+IY6tPcyCiUcmIoKScD8McFaHozjpaVqngLbCz0uKNNA0JDy1x/T2ItQ==", + "version": "9.4.20", + "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.4.20.tgz", + "integrity": "sha512-w4FOnNP+CtbVdKBEO6wXAcmOuPZWvmB/BJj+7J/8cLAQm7+4kQgitFHncU6rtFhPdGbikVoBf707/0R1mA4aIg==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-label": "^9.4.0", - "@fluentui/react-popover": "^9.14.1", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-label": "^9.4.1", + "@fluentui/react-popover": "^9.14.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3282,16 +3337,16 @@ } }, "node_modules/@fluentui/react-input": { - "version": "9.8.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.8.1.tgz", - "integrity": "sha512-ZlMeYBf1EQg4alI5+9gfx3Icmq3xibPiIYeARtFzOKJ2XzpnD4d/yswx3IDkzXCbqw9rSHtHV03vEeYLUPPTGw==", + "version": "9.8.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.8.2.tgz", + "integrity": "sha512-t9zmqZR4bqeRjpWuCGfI4yrtPoCXFiK2XO4BoV5nNwAesglgz4+Vtso4YXst9QYEAazHtKI73YFJf1mn55hCuA==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.5.0", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-field": "^9.5.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3303,12 +3358,12 @@ } }, "node_modules/@fluentui/react-jsx-runtime": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.4.1.tgz", - "integrity": "sha512-ZodSm7jRa4kaLKDi+emfHFMP/IDnYwFQQAI2BdtKbVrvfwvzPRprGcnTgivnqKBT1ROvKOCY2ddz7+yZzesnNw==", + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.4.2.tgz", + "integrity": "sha512-y3o0PBg2qzSdvgxDm7rH9BWq7E1h/eUWS+IhjQhd9dRpme6Py01+OLOglHojM5Tc9QjIp2Rjy2mFWBHXOR+8mw==", "license": "MIT", "dependencies": { - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@swc/helpers": "^0.5.1" }, "peerDependencies": { @@ -3317,15 +3372,15 @@ } }, "node_modules/@fluentui/react-label": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.4.0.tgz", - "integrity": "sha512-joQ7YNz2dgwDd134sc7e8/vxfFKBUT5AdWx0apT0ohWKgh7RBjB3AdXsaJ8FaMKMNZIGTxZVsP4hHcGsWMTAFw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.4.1.tgz", + "integrity": "sha512-4O3cPX6dSJVBKlIEbznjJ08utEc98lKbZz/6MZTTQfFgYl0TxAhxEDsIIIyNjj0Xy9eJpqubJsaswucWXTG/qg==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3337,17 +3392,17 @@ } }, "node_modules/@fluentui/react-link": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.8.0.tgz", - "integrity": "sha512-TH5LS4iuQ4jYzlR84A4n7lQTKaJuiuuGFHMIxoEqtKeMoL9F5AiabuBs6m7Q7clSdTrrcRMNzXLuEFarQrzGTQ==", + "version": "9.8.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.8.1.tgz", + "integrity": "sha512-ZxrCeX4pMWHujdmYV8b0QW0ztLtu0rHHvRNx67Y3WqSijVyij8QtNNiZ/nab+UDNlz9t8QIXKdWQgYj1uKDpMg==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3359,19 +3414,19 @@ } }, "node_modules/@fluentui/react-list": { - "version": "9.6.13", - "resolved": "https://registry.npmjs.org/@fluentui/react-list/-/react-list-9.6.13.tgz", - "integrity": "sha512-MIP0XKxU68m8VsBCyNBame46nnZ94FCNUArw9T2JuumyKMgV07C+sNhXCe9BCVpUr8e2Hfofo7CZjAsXWDZ0nw==", + "version": "9.6.14", + "resolved": "https://registry.npmjs.org/@fluentui/react-list/-/react-list-9.6.14.tgz", + "integrity": "sha512-B1mUQFvJOUlZysSduVnATNZggrGpgEWnW9ZSJAZ17LM0+9nWEQRi40jpUGI/d3PGKHt5O2df78s+1nEPAk0L6A==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-checkbox": "^9.6.0", - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-checkbox": "^9.6.1", + "@fluentui/react-context-selector": "^9.2.16", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3383,24 +3438,24 @@ } }, "node_modules/@fluentui/react-menu": { - "version": "9.24.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.24.0.tgz", - "integrity": "sha512-HqIwEM6lPropSHUnbPFufLYdkAIVca87XbNQHCTes4QSLeaF4oEjlBH60rIqQ52k78FwZuUFIciWkSChxJ9ekg==", + "version": "9.24.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.24.1.tgz", + "integrity": "sha512-NLB5EhzKFiwax3O5JTRTtsqdEFDGEXzEuP/suyxNAaaQsIuXygo//Rmdq6dSn7GybTpEOZHKxYDyyG7dj+a4YA==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-aria": "^9.17.11", + "@fluentui/react-context-selector": "^9.2.16", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.14.0", - "@fluentui/react-motion-components-preview": "^0.15.3", - "@fluentui/react-portal": "^9.8.11", - "@fluentui/react-positioning": "^9.22.0", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-motion": "^9.15.0", + "@fluentui/react-motion-components-preview": "^0.15.4", + "@fluentui/react-portal": "^9.8.12", + "@fluentui/react-positioning": "^9.22.1", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3412,20 +3467,20 @@ } }, "node_modules/@fluentui/react-message-bar": { - "version": "9.6.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.6.23.tgz", - "integrity": "sha512-mGnFmYWx6tq36OMTdVtJmxyn3j0p+Shll3+w4W2fW8fcOVSeyrnZ++HLmpurUkVzwI2xR2lL842kxC3GtbwmNw==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.7.0.tgz", + "integrity": "sha512-ICFDxZ62r5OG97/FcfK1EfJPxGlyDNyFixLD/a3gOREvEcT/hyZgnlUM9Y30u92HjxChx2SwGWnv3iaQPsvToQ==", "license": "MIT", "dependencies": { - "@fluentui/react-button": "^9.9.0", + "@fluentui/react-button": "^9.9.1", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-link": "^9.8.0", - "@fluentui/react-motion": "^9.14.0", - "@fluentui/react-motion-components-preview": "^0.15.3", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-link": "^9.8.1", + "@fluentui/react-motion": "^9.15.0", + "@fluentui/react-motion-components-preview": "^0.15.4", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3437,13 +3492,13 @@ } }, "node_modules/@fluentui/react-motion": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-motion/-/react-motion-9.14.0.tgz", - "integrity": "sha512-gOy8+fUP1KQRM/J6mRhioCMmUrHW9jbLF0DZ9T8nKPQsLrLaSXHxnnI8DcKZjlYc2fKuZitBnbpximgff6HajQ==", + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-motion/-/react-motion-9.15.0.tgz", + "integrity": "sha512-ZNQHYzE6MRbLQFT08/mrcqQ9k7F5niktRP93X1v/kmwKfPjvdDofySfbhQXQs3zQw600690C9rfJTKUd3h+zlg==", "license": "MIT", "dependencies": { "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@swc/helpers": "^0.5.1" }, "peerDependencies": { @@ -3454,9 +3509,9 @@ } }, "node_modules/@fluentui/react-motion-components-preview": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/@fluentui/react-motion-components-preview/-/react-motion-components-preview-0.15.3.tgz", - "integrity": "sha512-dUH2+GmEWX9q2ojx70VfFLRqzA9fR4YISC6daXkz3iPx4PtesTDn7jwsuXXquaAhltJeBptJ8+K4jbtBrwCMYQ==", + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-motion-components-preview/-/react-motion-components-preview-0.15.4.tgz", + "integrity": "sha512-gAHPlyEYylZzUSGwc68VaB+vO8CTX6tgIA3d2+jFrpcwvXZjsdCpF1w1zK1+hTuiipmEaZLZyBz0e0CKH2+3XQ==", "license": "MIT", "dependencies": { "@fluentui/react-motion": "*", @@ -3471,25 +3526,25 @@ } }, "node_modules/@fluentui/react-nav": { - "version": "9.3.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-nav/-/react-nav-9.3.23.tgz", - "integrity": "sha512-Z9hA70n5i62sO9IJItkX5+v1F7Lo/539joPaHCLHHca+rySQQZKqy8zLRIfLbh/qF8Nm04ywY19Qt14XjI59cQ==", + "version": "9.3.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-nav/-/react-nav-9.3.24.tgz", + "integrity": "sha512-OlB5k5Zev5VNjSRfJvJLO09Hjcv2UHAjLpSVa6gKHx+1NqqSJWZeDLSF7r+/nyZ4CWP5jWZYq7whEu3WvzdVZw==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-button": "^9.9.0", - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-divider": "^9.7.0", - "@fluentui/react-drawer": "^9.11.6", + "@fluentui/react-aria": "^9.17.11", + "@fluentui/react-button": "^9.9.1", + "@fluentui/react-context-selector": "^9.2.16", + "@fluentui/react-divider": "^9.7.1", + "@fluentui/react-drawer": "^9.12.0", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.14.0", - "@fluentui/react-motion-components-preview": "^0.15.3", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-motion": "^9.15.0", + "@fluentui/react-motion-components-preview": "^0.15.4", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-tooltip": "^9.10.0", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-tooltip": "^9.10.1", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3501,15 +3556,15 @@ } }, "node_modules/@fluentui/react-overflow": { - "version": "9.7.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.7.1.tgz", - "integrity": "sha512-Ml1GlcLrAUv31d9WN15WGOZv32gzDtZD5Mp1MOQ3ichDfTtxrswIch7MDzZ8hLMGf/7Y2IzBpV8iFR1XdSrGBA==", + "version": "9.7.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.7.2.tgz", + "integrity": "sha512-5PA67LgnVmbbOzBN2H5gH3OvSVy1373VJfsHq2+6TLCfm+LXAkWBoFwvBuFI7HsMYae9A0FVlgX7gTsKVfMddw==", "license": "MIT", "dependencies": { "@fluentui/priority-overflow": "^9.3.0", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-context-selector": "^9.2.16", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3521,17 +3576,17 @@ } }, "node_modules/@fluentui/react-persona": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.7.2.tgz", - "integrity": "sha512-u6buhC6Haf8YewBnZAzi49YCwiC8vt0O0YPADemk+4uJ8bhCnayzLxMYGuQ95XO4HFhvVnSPEYjMDdKrMO1hIw==", + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.7.3.tgz", + "integrity": "sha512-OY3xpSD6l4NDdeKihriC+H0q6P1CA2xyZ+pe/WwfKPnatxs2BALoRFtDQduMO7AK/j0w7UAxnaZrvEeftLen2g==", "license": "MIT", "dependencies": { - "@fluentui/react-avatar": "^9.11.0", - "@fluentui/react-badge": "^9.5.1", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-avatar": "^9.11.1", + "@fluentui/react-badge": "^9.5.2", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3543,23 +3598,23 @@ } }, "node_modules/@fluentui/react-popover": { - "version": "9.14.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.14.1.tgz", - "integrity": "sha512-EODa5yWSfDLPDurjWoZXfkf2ccnbQQbk3s1XYRzxA6RDfdVqUI5W64RJzHWBiNhOLzQEhd6Qb4e6Mshj4FSbdQ==", + "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.14.2.tgz", + "integrity": "sha512-EDvzLkT98/vcCSGrcZWUACGsvLjrHin0Xf9eowMQKiiHFWbu8HNRmr7W2XB9Eja1W5HSIK6+mV8ro9zrLibG4w==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.14.0", - "@fluentui/react-motion-components-preview": "^0.15.3", - "@fluentui/react-portal": "^9.8.11", - "@fluentui/react-positioning": "^9.22.0", + "@fluentui/react-aria": "^9.17.11", + "@fluentui/react-context-selector": "^9.2.16", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-motion": "^9.15.0", + "@fluentui/react-motion-components-preview": "^0.15.4", + "@fluentui/react-portal": "^9.8.12", + "@fluentui/react-positioning": "^9.22.1", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3571,14 +3626,14 @@ } }, "node_modules/@fluentui/react-portal": { - "version": "9.8.11", - "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.8.11.tgz", - "integrity": "sha512-2eg4MdW7e2UGRYWPg05GCytAjWYNd55YOP9+iUDINoQwwto9oeFTtZRyn08HYw37cSNqoH24qGz/VBctzTkqDA==", + "version": "9.8.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.8.12.tgz", + "integrity": "sha512-+WH0wH/5lsodGP6Mam1alHXpkMCYA5uMcnF98RVOs7/GR69KiFcza1mCnvPJUaJ55AfwLuz/xLxuWdWgQnUdMQ==", "license": "MIT", "dependencies": { "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-tabster": "^9.26.14", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3603,16 +3658,16 @@ } }, "node_modules/@fluentui/react-positioning": { - "version": "9.22.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.22.0.tgz", - "integrity": "sha512-i3DLC4jd4MoYSZMYLKQNUTpkjKAJ0snIcihvkrjt2jpvv34CifKJhqVtjFQ470pRW4XNx/pBBX07vdXpA3poxA==", + "version": "9.22.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.22.1.tgz", + "integrity": "sha512-/r1BHQKr/WCjEM8UGloiq7bWWBSYB/Uqt7D1sAF9EHd968VH07cAN3RMVKmWWjeJO31rstOZHdgcz0WHhFF+2Q==", "license": "MIT", "dependencies": { "@floating-ui/devtools": "^0.2.3", "@floating-ui/dom": "^1.6.12", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1", "use-sync-external-store": "^1.2.0" @@ -3625,17 +3680,17 @@ } }, "node_modules/@fluentui/react-progress": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.5.0.tgz", - "integrity": "sha512-VcWXI6UJfBkrDuC/e9oR4YBlpnLUE+FqRRjMG4mVXV+AJzFiljF3mQkFAj94G6dsr54TcoDXC6oydgXLCOTW2A==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.5.1.tgz", + "integrity": "sha512-EXJ/Bp67d5+bXPNpPabxdtXUgCMTtvYrBoKtIS6wE5KeUzaek/rgQ3v5wnGfbuLnJ4J/kj+n7XQEc9fhoFPy9w==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.5.0", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.14.0", + "@fluentui/react-field": "^9.5.1", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-motion": "^9.15.0", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3647,17 +3702,17 @@ } }, "node_modules/@fluentui/react-provider": { - "version": "9.22.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.22.15.tgz", - "integrity": "sha512-a+ImgL9DOlylDM4UYPnxQTA3yXxbVj+O0iNEyTZ6fMzdMsHzpALU4GAq6tOyW4L7RaQtRBmNpVfwTCEKpqaTJQ==", + "version": "9.22.16", + "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.22.16.tgz", + "integrity": "sha512-S77n5ASUWE/V1I6lX09CrHm4TAKSGENhIrKz9qMKDv2Vrq44/j3eGBLz12k8IW4TJVu9nwGwst9kBpCT+3WHpA==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/core": "^1.16.0", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" @@ -3670,18 +3725,18 @@ } }, "node_modules/@fluentui/react-radio": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.6.1.tgz", - "integrity": "sha512-QBoV6l8fVLP+H9Tigq/Y6boiEqMDRhhVMkIfUiWFbnsU/Uc7J5fxW8GoNqzMmoOmC7yvQ/g4jsoTQF27+PzK5w==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.6.2.tgz", + "integrity": "sha512-Sp2us4eWRopUKOMCQw5/iks7euPKY6FeesBCCUIVGBg5VKZf2/CfEtbCa9hMjn4D4PCHGivnUTf23t238mvvnw==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.5.0", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-label": "^9.4.0", + "@fluentui/react-field": "^9.5.1", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-label": "^9.4.1", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3693,17 +3748,17 @@ } }, "node_modules/@fluentui/react-rating": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-rating/-/react-rating-9.4.0.tgz", - "integrity": "sha512-qVesFNgQ7uuX8z9d8xqxIXn5ax06xffgBr/eAuZfqVYZG5aRrPHHRoiWf0HDrYD4Lb/HRBLPtbNihNxhXj/LEA==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-rating/-/react-rating-9.4.1.tgz", + "integrity": "sha512-DfWipzrT44j+yaShtfHz96/vHEa5ut5IR1kobrO0bSqAcpetOn327gFeY+sG/W6xzork/STcy/T836yK8A2+DQ==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3715,17 +3770,17 @@ } }, "node_modules/@fluentui/react-search": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-search/-/react-search-9.4.1.tgz", - "integrity": "sha512-Lv2zhPad7SDhMd5NeabXluw4y0Gov9YxDkJhjShMnkiN3yCOA5tlVviNvRXOXxy0gS//d8CiGJ5mBT1bzz2Rrw==", + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-search/-/react-search-9.4.2.tgz", + "integrity": "sha512-PIb50euHoMsKWLqFymf8wo/+z1jrx1MB7uNuhjNT5DvwTP4VYAy5EtRCSwVRyxWNSaWSL6iy6dDy517EQE96mA==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-input": "^9.8.1", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-input": "^9.8.2", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3737,17 +3792,17 @@ } }, "node_modules/@fluentui/react-select": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.5.0.tgz", - "integrity": "sha512-pGOD6MBwQsiHKkEdNmVrTavcfC9pOjt4nz/DRlFD444j6iR1PALlus5cNOp7A0JOnGDDvW+1afIvgySCqN0oiA==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.5.1.tgz", + "integrity": "sha512-8GocQKiUHEUlAks6zA0HbGGSF2lpjuSZuxPzIBqTyuWof8vFiK6eFAcSXb0hTYIVH3RsTihhfc6G3NRnHoBrzg==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.5.0", + "@fluentui/react-field": "^9.5.1", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3773,16 +3828,16 @@ } }, "node_modules/@fluentui/react-skeleton": { - "version": "9.7.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.7.1.tgz", - "integrity": "sha512-9WniFEe6gbhkZuBurpQNFmMMhP/Ox84Xm9/iu6q8OmnRkFCyZrEuCFlWGDffnBREKIJqE0VJn5ZrUYWMMh45KA==", + "version": "9.7.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.7.2.tgz", + "integrity": "sha512-PrUgdSGDAZw9FIP5NyvPoPfHDe2N9VxMyBfyTwWfZVg03dzRfnE3vEqr7N5xyfv4JsRs6u1xSqVn/0jdS0IEMQ==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.5.0", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-field": "^9.5.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3794,17 +3849,17 @@ } }, "node_modules/@fluentui/react-slider": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.6.1.tgz", - "integrity": "sha512-ytF1gOEho8DrI817H8WCBsck1RXOlW7JRXYtu9VwH3SnDRM2Jz1CNxbou80+BpvyR1KKkvCc/JSgREgUAnkRAQ==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.6.2.tgz", + "integrity": "sha512-lVavtTg8eqovfRokeYDk4popwCi8nuicacJ/HZdF3ni5e3y/2WT/bVP0eErS/GvC7+90ACQQ8uxdr4sjjY/HWA==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.5.0", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-field": "^9.5.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3816,18 +3871,18 @@ } }, "node_modules/@fluentui/react-spinbutton": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.6.1.tgz", - "integrity": "sha512-szqGlEfeJYkBzszEWBjj7ux522ckw9YtKAH0CS0Npd0xcY1GFkdywPwJMOoRUhsO08BOhv6P70Wlx0eYqURgIA==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.6.2.tgz", + "integrity": "sha512-P4vvJH7P5yHPFAv6aSo3dZxtErN62DiRJN+nEKS+/XBoRGsOGQdqyyx5Q/PQKOmyQrtwuZdXNHUjcyv8b50T2w==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-field": "^9.5.0", + "@fluentui/react-field": "^9.5.1", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3839,16 +3894,16 @@ } }, "node_modules/@fluentui/react-spinner": { - "version": "9.8.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.8.1.tgz", - "integrity": "sha512-vSM5FwjASEor8NBOJx/1MLp8VCw7+pOJqZSvMn29LrUmMbgSZ6CifZFx0GfiX+1fM0EZ2/pqJzFFHpoQQubAyw==", + "version": "9.8.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.8.2.tgz", + "integrity": "sha512-0LxykLJGUD/I3XEeIXAWznwdg9XRe0piaByR0nLFOOV3UPwkVc2w5UdPhy2Y0NZDvtPHbNaMCuQAq82+bxg/0w==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-label": "^9.4.0", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-label": "^9.4.1", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3860,19 +3915,19 @@ } }, "node_modules/@fluentui/react-swatch-picker": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-swatch-picker/-/react-swatch-picker-9.5.1.tgz", - "integrity": "sha512-7rs4dgnFMV2m/2A1tkevrVfThVEJs9crnVWCiSE4XADb9hFp7mqVyN8dKbQCJJMXODLF/Bc90nTCtLV8WaEj4Q==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-swatch-picker/-/react-swatch-picker-9.5.2.tgz", + "integrity": "sha512-DK6UU9OJY9XaGBPU2ROx+B5/7XdwVtHBdVthOAptyKSsYGOdQt5AQqg3ZOXH6r5WYbMRQDuP2OZ2iKtwidFCVQ==", "license": "MIT", "dependencies": { - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-field": "^9.5.0", + "@fluentui/react-context-selector": "^9.2.16", + "@fluentui/react-field": "^9.5.1", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3884,19 +3939,19 @@ } }, "node_modules/@fluentui/react-switch": { - "version": "9.7.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.7.1.tgz", - "integrity": "sha512-61zJhxG9UBcZ+5T/Dk9yzOJDCOc2ZMZef/ImgIMB4lVsyWs/3n/ec/PKPwjp9SNz2FhQvayhMytEbGzri00jGw==", + "version": "9.7.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.7.2.tgz", + "integrity": "sha512-j3e5se+3d+befV9MytkxxvJ9nHZOeZ7thKDTF4YVSYf6kcNx9eOlLvPgDjhGO08gzngO4B7aaprhDN7DJc3W1g==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.5.0", + "@fluentui/react-field": "^9.5.1", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-label": "^9.4.0", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-label": "^9.4.1", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3908,23 +3963,23 @@ } }, "node_modules/@fluentui/react-table": { - "version": "9.19.14", - "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.19.14.tgz", - "integrity": "sha512-IZ3tDqlQDC+R6nzX4thU8A7Aw3BMhbBZ5tgMOHnW733Xfton7wqKiumjsGJBnef3I48mqnBHJZQEzWBgzLsdqg==", + "version": "9.19.15", + "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.19.15.tgz", + "integrity": "sha512-OdQ2Nwx2nAlPMlJeyAFrKa3Zy5Ya/H87OU8MvtFJhabM/FkHiZoli/DO1mavVI+jqavOlJuQWmJ55D6jjuGa7g==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-avatar": "^9.11.0", - "@fluentui/react-checkbox": "^9.6.0", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-aria": "^9.17.11", + "@fluentui/react-avatar": "^9.11.1", + "@fluentui/react-checkbox": "^9.6.1", + "@fluentui/react-context-selector": "^9.2.16", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-radio": "^9.6.1", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-radio": "^9.6.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3936,17 +3991,17 @@ } }, "node_modules/@fluentui/react-tabs": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.12.0.tgz", - "integrity": "sha512-gKCi1XNDYRvF6R5wETeQptzQRVBlM7VETaQHS/ue1x7+Vo42MbWMtYOmvqeg5CPjqy2hAwch0IA9bzWEQAm2ZA==", + "version": "9.12.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.12.1.tgz", + "integrity": "sha512-WvzOtpC6C/7Mo5X+xmE+3stpCbx2iH9BqrEN5KuGrsHJ78DjMDeabYeL90vlrHBdP4VlTpwdORBui/jtWkxnmQ==", "license": "MIT", "dependencies": { - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-context-selector": "^9.2.16", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -3958,14 +4013,14 @@ } }, "node_modules/@fluentui/react-tabster": { - "version": "9.26.13", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.26.13.tgz", - "integrity": "sha512-uOuJj7jn1ME52Vc685/Ielf6srK/sfFQA5zBIbXIvy2Eisfp7R1RmJe2sXWoszz/Fu/XDkPwdM/GLv23N3vrvQ==", + "version": "9.26.14", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.26.14.tgz", + "integrity": "sha512-WibgoF67hl6BXfmsY6RSIWSHadeMP/6EDG9gAacfHlwKvK0+FiHp5ernwuXTPAmu2kiHicn2qUZ8EteCFiFryg==", "license": "MIT", "dependencies": { "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1", "keyborg": "^2.6.0", @@ -3979,25 +4034,25 @@ } }, "node_modules/@fluentui/react-tag-picker": { - "version": "9.8.5", - "resolved": "https://registry.npmjs.org/@fluentui/react-tag-picker/-/react-tag-picker-9.8.5.tgz", - "integrity": "sha512-uhZUWDdg7zmQNjb1/5YI3l6agSDg/yFFaYZDH4eQDOmKIm35jAT2GmEMZVomZZVW/dDhZpezfMWZA5r442cZYQ==", + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-tag-picker/-/react-tag-picker-9.8.6.tgz", + "integrity": "sha512-sOZ+wBA3hgGhKrOP7wbjB2yRvAxjcRXtcj1jDTrtSkaDPXb3K0nGmjiqp2mve995ps3wvCGnNKK4EurX842ZbA==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-combobox": "^9.17.0", - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-field": "^9.5.0", + "@fluentui/react-aria": "^9.17.11", + "@fluentui/react-combobox": "^9.17.1", + "@fluentui/react-context-selector": "^9.2.16", + "@fluentui/react-field": "^9.5.1", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-portal": "^9.8.11", - "@fluentui/react-positioning": "^9.22.0", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-portal": "^9.8.12", + "@fluentui/react-positioning": "^9.22.1", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", - "@fluentui/react-tags": "^9.8.0", + "@fluentui/react-tabster": "^9.26.14", + "@fluentui/react-tags": "^9.8.1", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -4009,20 +4064,20 @@ } }, "node_modules/@fluentui/react-tags": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.8.0.tgz", - "integrity": "sha512-O/Kf8pFgS0/eguzDCPm8FmrPG64dU36xTI1uYKwgF6iVOpmWFjk+7aPQtkoFHQzVwl1iLUL4mQFSutR4A8s38Q==", + "version": "9.8.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.8.1.tgz", + "integrity": "sha512-6ZTW78fu5eWByKHIM3i+raDrX3hwfZ67ONfZ8wEUXfZHowskxqpMHI8Gw7IAMWkC1scgLqEnht8TnHvZgjo7Ug==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-avatar": "^9.11.0", + "@fluentui/react-aria": "^9.17.11", + "@fluentui/react-avatar": "^9.11.1", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -4034,21 +4089,21 @@ } }, "node_modules/@fluentui/react-teaching-popover": { - "version": "9.6.20", - "resolved": "https://registry.npmjs.org/@fluentui/react-teaching-popover/-/react-teaching-popover-9.6.20.tgz", - "integrity": "sha512-XB/SJXdJabulcDBp6z4NNSFOcAnaOoIUZdmzqpx09UxtQwU/eFnYvZw/k1SI8Nc7IpHBgjzId8gHy6jvaN8JHw==", + "version": "9.6.21", + "resolved": "https://registry.npmjs.org/@fluentui/react-teaching-popover/-/react-teaching-popover-9.6.21.tgz", + "integrity": "sha512-V86zLB1B8xu3U/02FvvMdsJP+ZC9l3vT9bQ2Gr7hZHxJ4/0NLpVcrYSBFHpON9e/WK3p+A5b5V96p86b5Pavlg==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-button": "^9.9.0", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-aria": "^9.17.11", + "@fluentui/react-button": "^9.9.1", + "@fluentui/react-context-selector": "^9.2.16", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-popover": "^9.14.1", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-popover": "^9.14.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1", "use-sync-external-store": "^1.2.0" @@ -4061,15 +4116,15 @@ } }, "node_modules/@fluentui/react-text": { - "version": "9.6.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.6.15.tgz", - "integrity": "sha512-YB1azhq8MGfnYTGlEAX1mzcFZ6CvqkkaxaCogU4TM9BtPgQ1YUAxE01RMenl8VVi8W9hNbJKkuc8R8GzYwzT4Q==", + "version": "9.6.16", + "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.6.16.tgz", + "integrity": "sha512-ZzCSJWQ6LrVuPqA6sqNEZaXbLvhi2NxBOtlMudWlqYzidLQp038d7mMGSzNnhyeblg+gj+bOVE2eOgWFuVHGYw==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -4081,16 +4136,16 @@ } }, "node_modules/@fluentui/react-textarea": { - "version": "9.7.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.7.1.tgz", - "integrity": "sha512-YG0j202PRLDLZZDn8QQgREd4Ery2fDYMYb2HUvFdfo6MuSXMvv0RCKEUBCgajIXsHwT31Hsg5+xzM40X4jlOBg==", + "version": "9.7.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.7.2.tgz", + "integrity": "sha512-awlkZoW81WaOqSoXTT9rZs3mTAzCCHnC9eAm6J8ZxI5+ASX07BTolBfZ82it5wxOHI5GMDfbFOl+xIy8uAMdzA==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.5.0", - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-field": "^9.5.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -4112,22 +4167,22 @@ } }, "node_modules/@fluentui/react-toast": { - "version": "9.7.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.7.16.tgz", - "integrity": "sha512-Yq4yJboYqtdL5pNJBIYlSdT/kR6m449O95taJCh/msXJyRgqQZ46EmpTcwsxu3D55LTHbqI6Vxu+AikDYH1W7w==", + "version": "9.7.17", + "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.7.17.tgz", + "integrity": "sha512-DWA5EARWSo1k19iWAulLpKrcUHT+Dq/Bw9zfdpoQEWWybrAZwyN7WiYFkBjKCQRxSp10OjLASSQK91CXfb1wJA==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-aria": "^9.17.11", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.14.0", - "@fluentui/react-motion-components-preview": "^0.15.3", - "@fluentui/react-portal": "^9.8.11", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-motion": "^9.15.0", + "@fluentui/react-motion-components-preview": "^0.15.4", + "@fluentui/react-portal": "^9.8.12", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -4139,20 +4194,20 @@ } }, "node_modules/@fluentui/react-toolbar": { - "version": "9.7.7", - "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.7.7.tgz", - "integrity": "sha512-49nrRvGqJfdXhwaKZfNIcTiZSqTbThNG8uCa0FvJ88cO11PRPGcr5s6u3plUVxDXUKXpZJ7PKr/TTA0MvP7yIg==", + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.8.0.tgz", + "integrity": "sha512-EIe+QWOaFR1pZzENefsFTmjxGa2yJb4A/by3kGuGqSjx7isqPUllPq0/kFQzfoUYgPDJbJtQ+KyuRDekTL0QpQ==", "license": "MIT", "dependencies": { - "@fluentui/react-button": "^9.9.0", - "@fluentui/react-context-selector": "^9.2.15", - "@fluentui/react-divider": "^9.7.0", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-radio": "^9.6.1", + "@fluentui/react-button": "^9.9.1", + "@fluentui/react-context-selector": "^9.2.16", + "@fluentui/react-divider": "^9.7.1", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-radio": "^9.6.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -4164,19 +4219,19 @@ } }, "node_modules/@fluentui/react-tooltip": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.10.0.tgz", - "integrity": "sha512-+aM0S1mcXy8XKKWgU3TocqTxHjcai7fHns3KwONLJPTp3jXTjyqEoj/o4XX1ka2IM3gdOFfyUU0Gfvw708dn9w==", + "version": "9.10.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.10.1.tgz", + "integrity": "sha512-IPHBFjqGhaaMDhLt5NSNOE9LEpDOpT7qgEqNz+Mlflo0A4qI2LW/EnkNop7IRmX/bC88A+wUtEONTjjR87dNBw==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-portal": "^9.8.11", - "@fluentui/react-positioning": "^9.22.0", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-portal": "^9.8.12", + "@fluentui/react-positioning": "^9.22.1", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -4188,26 +4243,26 @@ } }, "node_modules/@fluentui/react-tree": { - "version": "9.15.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.15.16.tgz", - "integrity": "sha512-WP4WjbF/UWCp0JKaZsMFtah/kXu+mxqN8/kghppRYfVHWzLiMgFAPB/OzrGejLNwx+ai3t2dHOIHxXHnR1jYHA==", + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.16.0.tgz", + "integrity": "sha512-c+Q4AVaYk9U69aGDgmJVNne+CtWKS75YIfGoxs6+9+wE2Wqz4T0E+gE1ng7ARCQQgI7E2NEJlot6DuI6nYYrRw==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.17.10", - "@fluentui/react-avatar": "^9.11.0", - "@fluentui/react-button": "^9.9.0", - "@fluentui/react-checkbox": "^9.6.0", - "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-aria": "^9.17.11", + "@fluentui/react-avatar": "^9.11.1", + "@fluentui/react-button": "^9.9.1", + "@fluentui/react-checkbox": "^9.6.1", + "@fluentui/react-context-selector": "^9.2.16", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.4.1", - "@fluentui/react-motion": "^9.14.0", - "@fluentui/react-motion-components-preview": "^0.15.3", - "@fluentui/react-radio": "^9.6.1", + "@fluentui/react-jsx-runtime": "^9.4.2", + "@fluentui/react-motion": "^9.15.0", + "@fluentui/react-motion-components-preview": "^0.15.4", + "@fluentui/react-radio": "^9.6.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tabster": "^9.26.14", "@fluentui/react-theme": "^9.2.1", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -4219,9 +4274,9 @@ } }, "node_modules/@fluentui/react-utilities": { - "version": "9.26.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.26.2.tgz", - "integrity": "sha512-Yp2GGNoWifj8Z/VVir4HyRumRsqXnLJd4IP/Y70vEm9ruAvyqUvfn+1lQUuA+k/Reqw8GI+Ix7FTo3rogixZBg==", + "version": "9.26.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.26.3.tgz", + "integrity": "sha512-bXB3jMm/RroT8c5eGZkijkPbLd4MqMI6biBHjavo0e7OkZHv9IPfH2nDkGhSn5Sh8e6kRcX0IjYhbM10WUK2iQ==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", @@ -4234,14 +4289,14 @@ } }, "node_modules/@fluentui/react-virtualizer": { - "version": "9.0.0-alpha.111", - "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.111.tgz", - "integrity": "sha512-yku++0779Ve1RNz6y/HWjlXKd2x1wCSbWMydT2IdCICBVwolXjPYMpkqqZUSjbJ0N9gl6BfsCBpU9Dfe2bR8Zg==", + "version": "9.0.0-alpha.112", + "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.112.tgz", + "integrity": "sha512-dao/mQssaPFxCXMx7K+G/DrRoZg28kXcE1NGbJ1RPtbkVCzJgwrEEeDhM5/wyOXO/Z5EZ31FIerDDVOyr6FAaw==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-jsx-runtime": "^9.4.2", "@fluentui/react-shared-contexts": "^9.26.2", - "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-utilities": "^9.26.3", "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, @@ -4332,30 +4387,30 @@ } }, "node_modules/@griffel/core": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.20.1.tgz", - "integrity": "sha512-ld1mX04zpmeHn8agx4slSEh8kJ+8or3Y0x9gsJNKSKn6GdCkZBSiGUh+oBXCBn8RKzz8l60TA9IhVSStnyKekA==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.21.0.tgz", + "integrity": "sha512-QqMoewiNTT0DmLM7OY607c7yhg18SuKfzovTO3hPXGQvtdu/StnjvuBAs+1B1kYSVGReAo6s/dJVeLnPuHjE7Q==", "license": "MIT", "dependencies": { "@emotion/hash": "^0.9.0", "@griffel/style-types": "^1.4.0", "csstype": "^3.1.3", "rtl-css-js": "^1.16.1", - "stylis": "^4.2.0", + "stylis": "^4.4.0", "tslib": "^2.1.0" } }, "node_modules/@griffel/react": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.6.1.tgz", - "integrity": "sha512-mNM4/+dIXzqeHboWpVZ1/jiwTAYNc5/8y/V/HasnQ2QXnV6gSUYpeUk/0n6IFU3NJmVJly9JrLSfNo0hM/IFeA==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.7.2.tgz", + "integrity": "sha512-/+N+81e9ibNsh2wNlhGf2PcimEFrx8VbtWiLCmI6lsrTV5eBcQrIIDVQq737KPIJFtD4v6Txu9n0PXbN3hedNg==", "license": "MIT", "dependencies": { - "@griffel/core": "^1.20.1", + "@griffel/core": "^1.21.0", "tslib": "^2.1.0" }, "peerDependencies": { - "react": ">=16.8.0 <20.0.0" + "react": ">=16.14.0 <20.0.0" } }, "node_modules/@griffel/style-types": { @@ -4428,9 +4483,9 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "license": "MIT", "engines": { "node": ">=8" @@ -4478,6 +4533,18 @@ "@types/yargs-parser": "*" } }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@jest/console/node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -4530,6 +4597,26 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jest/console/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, "node_modules/@jest/core": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", @@ -4602,6 +4689,18 @@ "@types/yargs-parser": "*" } }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@jest/core/node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -4663,6 +4762,26 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, "node_modules/@jest/diff-sequences": { "version": "30.3.0", "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.3.0.tgz", @@ -4779,6 +4898,18 @@ "@types/yargs-parser": "*" } }, + "node_modules/@jest/fake-timers/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@jest/fake-timers/node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -4844,6 +4975,26 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jest/fake-timers/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, "node_modules/@jest/get-type": { "version": "30.1.0", "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", @@ -4892,6 +5043,18 @@ "@types/yargs-parser": "*" } }, + "node_modules/@jest/globals/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@jest/globals/node_modules/expect": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", @@ -4957,6 +5120,26 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jest/globals/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, "node_modules/@jest/pattern": { "version": "30.0.1", "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", @@ -5508,16 +5691,6 @@ } } }, - "node_modules/@reduxjs/toolkit/node_modules/immer": { - "version": "11.1.4", - "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.4.tgz", - "integrity": "sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -5597,19 +5770,6 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "license": "MIT" }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz", - "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -5892,9 +6052,9 @@ } }, "node_modules/@swc/helpers": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.20.tgz", - "integrity": "sha512-2egEBHUMasdypIzrprsu8g+OEVd7Vp2MM3a2eVlM/cyFYto0nGz5BX5BTgh/ShZZI9ed+ozEq+Ngt+rgmUs8tw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.21.tgz", + "integrity": "sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" @@ -5919,30 +6079,71 @@ "node": ">=18" } }, - "node_modules/@testing-library/jest-dom": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", - "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "license": "MIT", - "dependencies": { - "@adobe/css-tools": "^4.4.0", - "aria-query": "^5.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.6.3", - "picocolors": "^1.1.1", - "redent": "^3.0.0" - }, "engines": { - "node": ">=14", - "npm": ">=6", - "yarn": ">=1" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", - "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", - "license": "MIT" + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/@testing-library/dom/node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "license": "MIT" + }, + "node_modules/@testing-library/dom/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", + "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } }, "node_modules/@testing-library/react": { "version": "16.3.2", @@ -6372,9 +6573,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "license": "MIT" }, "node_modules/@types/estree-jsx": { @@ -6501,38 +6702,6 @@ "pretty-format": "^30.0.0" } }, - "node_modules/@types/jest/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@types/jest/node_modules/pretty-format": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz", - "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.5", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@types/jest/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -6626,9 +6795,9 @@ "license": "MIT" }, "node_modules/@types/qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", "license": "MIT" }, "node_modules/@types/range-parser": { @@ -7003,9 +7172,9 @@ } }, "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.1.tgz", + "integrity": "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==", "license": "ISC" }, "node_modules/@webassemblyjs/ast": { @@ -7294,15 +7463,15 @@ } }, "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -7326,35 +7495,16 @@ } } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "fast-deep-equal": "^3.1.3" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", "peerDependencies": { - "ajv": "^6.9.1" + "ajv": "^8.8.2" } }, "node_modules/ansi-escapes": { @@ -7467,12 +7617,12 @@ } }, "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" + "engines": { + "node": ">= 0.4" } }, "node_modules/array-buffer-byte-length": { @@ -7707,9 +7857,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.27", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", - "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", "funding": [ { "type": "opencollective", @@ -7726,8 +7876,8 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.28.1", - "caniuse-lite": "^1.0.30001774", + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -7758,9 +7908,9 @@ } }, "node_modules/axe-core": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz", - "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==", + "version": "4.11.4", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.4.tgz", + "integrity": "sha512-KunSNx+TVpkAw/6ULfhnx+HWRecjqZGTOyquAoWHYLRSdK1tB5Ihce1ZW+UY3fj33bYAFWPu7W/GRSmmrCGuxA==", "license": "MPL-2.0", "engines": { "node": ">=4" @@ -7841,6 +7991,37 @@ "webpack": ">=2" } }, + "node_modules/babel-loader/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/babel-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/babel-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, "node_modules/babel-loader/node_modules/schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", @@ -8071,9 +8252,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.12", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.12.tgz", - "integrity": "sha512-qyq26DxfY4awP2gIRXhhLWfwzwI+N5Nxk6iQi8EFizIaWIjqicQTE4sLnZZVdeKPRcVNoJOkkpfzoIYuvCKaIQ==", + "version": "2.10.27", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.27.tgz", + "integrity": "sha512-zEs/ufmZoUd7WftKpKyXaT6RFxpQ5Qm9xytKRHvJfxFV9DFJkZph9RvJ1LcOUi0Z1ZVijMte65JbILeV+8QQEA==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -8124,9 +8305,9 @@ } }, "node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "version": "1.20.5", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz", + "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==", "license": "MIT", "dependencies": { "bytes": "~3.1.2", @@ -8137,7 +8318,7 @@ "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "on-finished": "~2.4.1", - "qs": "~6.14.0", + "qs": "~6.15.1", "raw-body": "~2.5.3", "type-is": "~1.6.18", "unpipe": "~1.0.0" @@ -8174,6 +8355,21 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/bonjour-service": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", @@ -8191,9 +8387,9 @@ "license": "ISC" }, "node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -8219,9 +8415,9 @@ "license": "BSD-2-Clause" }, "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "funding": [ { "type": "opencollective", @@ -8238,11 +8434,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -8288,14 +8484,14 @@ } }, "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" }, "engines": { @@ -8387,9 +8583,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001782", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001782.tgz", - "integrity": "sha512-dZcaJLJeDMh4rELYFw1tvSn1bhZWYFOt468FcbHHxx/Z/dFidd1I6ciyFdi3iwfQCyOjqo9upF6lGQYtMiJWxw==", + "version": "1.0.30001792", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001792.tgz", + "integrity": "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==", "funding": [ { "type": "opencollective", @@ -8948,6 +9144,15 @@ "node": ">=10" } }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, "node_modules/create-react-class": { "version": "15.7.0", "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", @@ -9292,6 +9497,15 @@ "postcss": "^8.2.15" } }, + "node_modules/cssnano/node_modules/yaml": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, "node_modules/csso": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", @@ -10125,9 +10339,9 @@ } }, "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", "license": "MIT" }, "node_modules/dom-converter": { @@ -10283,9 +10497,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.329", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.329.tgz", - "integrity": "sha512-/4t+AS1l4S3ZC0Ja7PHFIWeBIxGA3QGqV8/yKsP36v7NcyUCl+bIcmw6s5zVuMIECWwBrAK/6QLzTmbJChBboQ==", + "version": "1.5.352", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.352.tgz", + "integrity": "sha512-9wHk8x6dyuimoe18EdiDPWKExNdxYqo4fn4FwOVVper6RxT3cmpBwBkWWfSOCYJjQdIco/nPhJhNLmn4Ufg1Yg==", "license": "ISC" }, "node_modules/embla-carousel": { @@ -10349,13 +10563,13 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", - "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz", + "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.3.0" + "tapable": "^2.3.3" }, "engines": { "node": ">=10.13.0" @@ -10389,9 +10603,9 @@ } }, "node_modules/es-abstract": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", - "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.2", @@ -10481,15 +10695,15 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.1.tgz", - "integrity": "sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.2.tgz", + "integrity": "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", + "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.24.1", + "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", @@ -10501,17 +10715,16 @@ "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", - "math-intrinsics": "^1.1.0", - "safe-array-concat": "^1.1.3" + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", "license": "MIT" }, "node_modules/es-object-atoms": { @@ -10713,14 +10926,14 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", + "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", "license": "MIT", "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "is-core-module": "^2.16.1", + "resolve": "^2.0.0-next.6" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -10732,6 +10945,29 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "2.0.0-next.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", + "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/eslint-module-utils": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", @@ -10892,15 +11128,6 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/eslint-plugin-react": { "version": "7.37.5", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", @@ -11086,6 +11313,22 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -11120,6 +11363,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -11439,9 +11688,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", "funding": [ { "type": "github", @@ -11533,15 +11782,46 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "node_modules/file-loader/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/file-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/file-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { "node": ">= 10.13.0" @@ -11561,9 +11841,9 @@ } }, "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -11686,9 +11966,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", @@ -11759,6 +12039,31 @@ } } }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", @@ -11790,6 +12095,12 @@ "node": ">=10" } }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", @@ -11817,6 +12128,31 @@ "node": ">=6" } }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/yaml": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz", + "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -12289,9 +12625,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -12624,9 +12960,9 @@ } }, "node_modules/html-webpack-plugin": { - "version": "5.6.6", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.6.tgz", - "integrity": "sha512-bLjW01UTrvoWTJQL5LsMRo1SypHW80FTm12OJRSnr3v6YHNhfe+1r0MYUZJMACxnCHURVnBWRwAsWs2yPU9Ezw==", + "version": "5.6.7", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.7.tgz", + "integrity": "sha512-md+vXtdCAe60s1k6AU3dUyMJnDxUyQAwfwPKoLisvgUF1IXjtlLsk2se54+qfL9Mdm26bbwvjJybpNx48NKRLw==", "license": "MIT", "dependencies": { "@types/html-minifier-terser": "^6.0.0", @@ -12844,9 +13180,9 @@ } }, "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.7.tgz", + "integrity": "sha512-LFVFtAROHcDy1er5UI6nodRFnZ2SgdCXhfNSI+DpObO8N7Pur/muBGsjzH5wpnFHCYhYVQxZskCkV4koQ//3/Q==", "license": "MIT", "funding": { "type": "opencollective", @@ -12968,9 +13304,9 @@ } }, "node_modules/ipaddr.js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", - "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.4.0.tgz", + "integrity": "sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==", "license": "MIT", "engines": { "node": ">= 10" @@ -13098,12 +13434,12 @@ } }, "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "hasown": "^2.0.3" }, "engines": { "node": ">= 0.4" @@ -13792,6 +14128,18 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-circus/node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -13889,6 +14237,26 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, "node_modules/jest-cli": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", @@ -14048,6 +14416,18 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-config/node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -14089,53 +14469,41 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-diff": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.3.0.tgz", - "integrity": "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==", + "node_modules/jest-config/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "license": "MIT", "dependencies": { - "@jest/diff-sequences": "30.3.0", - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "pretty-format": "30.3.0" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } + "node_modules/jest-config/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" }, - "node_modules/jest-diff/node_modules/pretty-format": { + "node_modules/jest-diff": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz", - "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.3.0.tgz", + "integrity": "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==", "license": "MIT", "dependencies": { - "@jest/schemas": "30.0.5", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" + "@jest/diff-sequences": "30.3.0", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.3.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-diff/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, "node_modules/jest-docblock": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", @@ -14189,6 +14557,18 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-each/node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -14221,6 +14601,26 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, "node_modules/jest-environment-jsdom": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", @@ -14550,6 +14950,18 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-jasmine2/node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -14647,35 +15059,40 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-leak-detector": { + "node_modules/jest-jasmine2/node_modules/pretty-format": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "license": "MIT", "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-matcher-utils": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.3.0.tgz", - "integrity": "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==", + "node_modules/jest-jasmine2/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", "license": "MIT", "dependencies": { - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "jest-diff": "30.3.0", - "pretty-format": "30.3.0" + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "node_modules/jest-leak-detector/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", @@ -14687,26 +15104,41 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz", - "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==", + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "license": "MIT", "dependencies": { - "@jest/schemas": "30.0.5", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "license": "MIT" }, + "node_modules/jest-matcher-utils": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.3.0.tgz", + "integrity": "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==", + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.3.0", + "pretty-format": "30.3.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, "node_modules/jest-message-util": { "version": "30.3.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.3.0.tgz", @@ -14727,38 +15159,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz", - "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.5", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-message-util/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, "node_modules/jest-mock": { "version": "30.3.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.3.0.tgz", @@ -14982,6 +15382,18 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-runner/node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -15034,6 +15446,26 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-runner/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, "node_modules/jest-runtime": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", @@ -15092,6 +15524,18 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-runtime/node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -15166,6 +15610,26 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-runtime/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, "node_modules/jest-serializer": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", @@ -15237,6 +15701,18 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-snapshot/node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -15334,6 +15810,26 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, "node_modules/jest-util": { "version": "30.3.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.3.0.tgz", @@ -15393,6 +15889,38 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, "node_modules/jest-watch-typeahead": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", @@ -15640,14 +16168,8 @@ "react-is": "^18.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } }, "node_modules/jest-watch-typeahead/node_modules/slash": { "version": "4.0.0", @@ -15891,22 +16413,6 @@ } } }, - "node_modules/jsdom/node_modules/form-data": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz", - "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.35" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -15932,9 +16438,9 @@ "license": "MIT" }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { @@ -15956,9 +16462,9 @@ } }, "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -15992,9 +16498,9 @@ } }, "node_modules/keyborg": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/keyborg/-/keyborg-2.6.0.tgz", - "integrity": "sha512-o5kvLbuTF+o326CMVYpjlaykxqYP9DphFQZ2ZpgrvBouyvOxyEB7oqe8nOLFpiV5VCtz0D3pt8gXQYWpLpBnmA==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/keyborg/-/keyborg-2.14.1.tgz", + "integrity": "sha512-/WmmVBa6Me3hIKAOIyIq1sql+6oydQZzGMBDLNfOcJ8710byMsq3KSLS8GQhBJHOMtvnXnUBrDAIbABcZVipcg==", "license": "MIT" }, "node_modules/keyv": { @@ -16099,9 +16605,9 @@ "license": "MIT" }, "node_modules/loader-runner": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", - "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.2.tgz", + "integrity": "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==", "license": "MIT", "engines": { "node": ">=6.11.5" @@ -17348,9 +17854,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", "funding": [ { "type": "github", @@ -17445,9 +17951,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.36", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", - "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", "license": "MIT" }, "node_modules/normalize-path": { @@ -18057,9 +18563,9 @@ } }, "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", + "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", "funding": [ { "type": "opencollective", @@ -18548,6 +19054,60 @@ "postcss": "^8.2" } }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, "node_modules/postcss-loader": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", @@ -19344,17 +19904,17 @@ } }, "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz", + "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==", "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -19759,6 +20319,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/react-dev-utils/node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, "node_modules/react-dev-utils/node_modules/loader-utils": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", @@ -19863,9 +20433,9 @@ } }, "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "license": "MIT" }, "node_modules/react-markdown": { @@ -20171,9 +20741,9 @@ "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", - "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz", + "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==", "license": "BSD-2-Clause", "dependencies": { "jsesc": "~3.1.0" @@ -20373,11 +20943,12 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "license": "MIT", "dependencies": { + "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" @@ -20613,14 +21184,14 @@ "license": "BSD-3-Clause" }, "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, @@ -20777,40 +21348,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -21081,13 +21618,13 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -21641,9 +22178,9 @@ } }, "node_modules/stylis": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", - "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.4.0.tgz", + "integrity": "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==", "license": "MIT" }, "node_modules/sucrase": { @@ -21876,16 +22413,13 @@ "license": "MIT" }, "node_modules/tabster": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/tabster/-/tabster-8.7.0.tgz", - "integrity": "sha512-AKYquti8AdWzuqJdQo4LUMQDZrHoYQy6V+8yUq2PmgLZV10EaB+8BD0nWOfC/3TBp4mPNg4fbHkz6SFtkr0PpA==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/tabster/-/tabster-8.8.0.tgz", + "integrity": "sha512-eGFXgtvKOQP5BywDI9Ngs+Atm6TRj45epAAqWKyVoi+HmOmdamEB//1H/FttLdNly/+Cz+GJ4RN8TnXTw0KwfA==", "license": "MIT", "dependencies": { - "keyborg": "2.6.0", + "keyborg": "^2.14.0", "tslib": "^2.8.1" - }, - "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "4.53.3" } }, "node_modules/tailwindcss": { @@ -21937,69 +22471,10 @@ "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/tailwindcss/node_modules/postcss-load-config": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.1.1" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "jiti": ">=1.21.0", - "postcss": ">=8.0.9", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/tailwindcss/node_modules/yaml": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", - "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, "node_modules/tapable": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", - "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", "license": "MIT", "engines": { "node": ">=6" @@ -22065,9 +22540,9 @@ } }, "node_modules/terser": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.1.tgz", - "integrity": "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==", + "version": "5.47.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.47.0.tgz", + "integrity": "sha512-TV+JFkQFtljk12ffyYAA4+zVF4Hs+qaROsT+Qo9o2/z39x+IUn+pvsmomiCPlp5YigfR1OdbGHOvc0L+Ca1X7g==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -22083,9 +22558,9 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz", - "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA==", "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", @@ -22175,13 +22650,13 @@ "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", "license": "MIT", "dependencies": { "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" @@ -22782,6 +23257,7 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", "license": "MIT", "bin": { "uuid": "dist/bin/uuid" @@ -22937,9 +23413,9 @@ } }, "node_modules/webpack": { - "version": "5.105.4", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.4.tgz", - "integrity": "sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==", + "version": "5.106.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.106.2.tgz", + "integrity": "sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA==", "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", @@ -22958,9 +23434,8 @@ "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.3.1", - "mime-types": "^2.1.27", + "mime-db": "^1.54.0", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", @@ -23126,9 +23601,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz", - "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.4.1.tgz", + "integrity": "sha512-eACpxRN02yaawnt+uUNIF7Qje6A9zArxBbcAJjK1PK3S9Ycg5jIuJ8pW4q8EMnwNZCEGltcjkRx1QzOxOkKD8A==", "license": "MIT", "engines": { "node": ">=10.13.0" @@ -23156,6 +23631,15 @@ "node": ">=4.0" } }, + "node_modules/webpack/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -23403,38 +23887,6 @@ "node": ">=10.0.0" } }, - "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.7.tgz", - "integrity": "sha512-TajUJwGWbDwkCx/CZi7tRE8PVB7simCvKJfHUsSdvps+aTM/PDPP4gkLmKnc+x3CE//y9i/nj74GqdL/hwk7Iw==", - "license": "MIT", - "dependencies": { - "jsonpointer": "^5.0.1", - "leven": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "ajv": ">=8" - } - }, - "node_modules/workbox-build/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/workbox-build/node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -23450,12 +23902,6 @@ "node": ">=10" } }, - "node_modules/workbox-build/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, "node_modules/workbox-build/node_modules/source-map": { "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", @@ -23742,15 +24188,6 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "license": "ISC" }, - "node_modules/yaml": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", - "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", diff --git a/src/App/public/config/config.json b/src/App/public/config/config.json deleted file mode 100644 index daf2c368a..000000000 --- a/src/App/public/config/config.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "appConfig": { - "THREE_COLUMN": { - "DASHBOARD": 50, - "CHAT": 33, - "CHATHISTORY": 17 - }, - "TWO_COLUMN": { - "DASHBOARD_CHAT": { - "DASHBOARD": 65, - "CHAT": 35 - }, - "CHAT_CHATHISTORY": { - "CHAT": 80, - "CHATHISTORY": 20 - } - } - }, - "charts": [ - { - "id": "SATISFIED", - "chart_name": "Satisfied", - "chart_type": "card", - "layout": { "row": 1, "column": 1, "height": 11 } - }, - { - "id": "TOTAL_CALLS", - "chart_name": "Total Calls", - "chart_type": "card", - "layout": { "row": 1, "column": 2, "span": 1 } - }, - { - "id": "AVG_HANDLING_TIME", - "chart_name": "Average Handling Time", - "chart_type": "card", - "layout": { "row": 1, "column": 3, "span": 1 } - }, - { - "id": "SENTIMENT", - "chart_name": "Topics Overview", - "chart_type": "donutchart", - "layout": { "row": 2, "column": 1, "width": 40, "height": 44.5 } - }, - { - "id": "AVG_HANDLING_TIME_BY_TOPIC", - "chart_name": "Average Handling Time By Topic", - "chart_type": "bar", - "layout": { "row": 2, "column": 2, "row-span": 2, "width": 60 } - }, - { - "id": "TOPICS", - "chart_name": "Trending Topics", - "chart_type": "table", - "layout": { "row": 3, "column": 1, "span": 2 } - }, - { - "id": "KEY_PHRASES", - "chart_name": "Key Phrases", - "chart_type": "wordcloud", - "layout": { "row": 3, "column": 2, "height": 44.5 } - } - ] -} diff --git a/src/App/src/configs/Utils.tsx b/src/App/src/configs/Utils.tsx index 45ed6397e..62f4510ab 100644 --- a/src/App/src/configs/Utils.tsx +++ b/src/App/src/configs/Utils.tsx @@ -165,25 +165,6 @@ export const segregateItems = (items: Conversation[]) => { return finalResult; }; -export async function loadConfig() { - const DEFAULT_CONFIG_PATH = "./config/config.json"; - const configPath = process.env.REACT_APP_CONFIG_PATH || DEFAULT_CONFIG_PATH; - if (!configPath) { - throw new Error("Config path is not defined in the environment variables."); - } - - try { - const response = await fetch(configPath); - if (!response.ok) { - throw new Error(`Failed to load config file: ${response.statusText}`); - } - const configData = await response.json(); - return configData; - } catch (error) { - throw error; - } -} - export const generateUUIDv4 = () => { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, diff --git a/src/api/helpers/streaming_helper.py b/src/api/helpers/streaming_helper.py deleted file mode 100644 index 6e1835eb0..000000000 --- a/src/api/helpers/streaming_helper.py +++ /dev/null @@ -1,11 +0,0 @@ -import logging - - -async def stream_processor(response): - try: - async for message in response: - if message.content: - yield message.content - except Exception as e: - logging.error(f"Error processing streaming response: {e}", exc_info=True) - raise diff --git a/src/api/helpers/utils.py b/src/api/helpers/utils.py deleted file mode 100644 index ce854d8c9..000000000 --- a/src/api/helpers/utils.py +++ /dev/null @@ -1,204 +0,0 @@ -import dataclasses -import json -import logging -import os - -import requests - -AZURE_SEARCH_PERMITTED_GROUPS_COLUMN = os.environ.get( - "AZURE_SEARCH_PERMITTED_GROUPS_COLUMN" -) - - -class JSONEncoder(json.JSONEncoder): - def default(self, o): - if dataclasses.is_dataclass(o): - return dataclasses.asdict(o) - return super().default(o) - - -async def format_as_ndjson(r): - try: - async for event in r: - yield json.dumps(event, cls=JSONEncoder) + "\n" - except Exception as error: - logging.exception("Exception while generating response stream: %s", error) - yield json.dumps({"error": str(error)}) - - -def parse_multi_columns(columns: str) -> list: - if "|" in columns: - return columns.split("|") - else: - return columns.split(",") - - -def fetchUserGroups(userToken, nextLink=None): - # Recursively fetch group membership - if nextLink: - endpoint = nextLink - else: - endpoint = "https://graph.microsoft.com/v1.0/me/transitiveMemberOf?$select=id" - - headers = {"Authorization": "bearer " + userToken} - try: - r = requests.get(endpoint, headers=headers) - if r.status_code != 200: - logging.error(f"Error fetching user groups: {r.status_code} {r.text}") - return [] - - r = r.json() - if "@odata.nextLink" in r: - nextLinkData = fetchUserGroups(userToken, r["@odata.nextLink"]) - r["value"].extend(nextLinkData) - - return r["value"] - except Exception as e: - logging.error(f"Exception in fetchUserGroups: {e}") - return [] - - -def generateFilterString(userToken): - # Get list of groups user is a member of - userGroups = fetchUserGroups(userToken) - - # Construct filter string - if not userGroups: - logging.debug("No user groups found") - - group_ids = ", ".join([obj["id"] for obj in userGroups]) - return f"{AZURE_SEARCH_PERMITTED_GROUPS_COLUMN}/any(g:search.in(g, '{group_ids}'))" - - -def format_non_streaming_response(chatCompletion, history_metadata, apim_request_id): - response_obj = { - "id": chatCompletion.id, - "model": chatCompletion.model, - "created": chatCompletion.created, - "object": chatCompletion.object, - "choices": [{"messages": []}], - "history_metadata": history_metadata, - "apim-request-id": apim_request_id, - } - - if len(chatCompletion.choices) > 0: - message = chatCompletion.choices[0].message - if message: - if hasattr(message, "context"): - response_obj["choices"][0]["messages"].append( - { - "role": "tool", - "content": json.dumps(message.context), - } - ) - response_obj["choices"][0]["messages"].append( - { - "role": "assistant", - "content": message.content, - } - ) - return response_obj - - return {} - - -def format_stream_response(chatCompletionChunk, history_metadata, apim_request_id): - response_obj = { - "id": chatCompletionChunk.id, - "model": chatCompletionChunk.model, - "created": chatCompletionChunk.created, - "object": chatCompletionChunk.object, - "choices": [{"messages": []}], - "history_metadata": history_metadata, - "apim-request-id": apim_request_id, - } - - if len(chatCompletionChunk.choices) > 0: - delta = chatCompletionChunk.choices[0].delta - if delta: - if hasattr(delta, "context"): - messageObj = {"role": "tool", "content": json.dumps(delta.context)} - response_obj["choices"][0]["messages"].append(messageObj) - return response_obj - if delta.role == "assistant" and hasattr(delta, "context"): - messageObj = { - "role": "assistant", - "context": delta.context, - } - response_obj["choices"][0]["messages"].append(messageObj) - return response_obj - else: - if delta.content: - messageObj = { - "role": "assistant", - "content": delta.content, - } - response_obj["choices"][0]["messages"].append(messageObj) - return response_obj - - return {} - - -def format_pf_non_streaming_response( - chatCompletion, - history_metadata, - response_field_name, - citations_field_name, - message_uuid=None, -): - if chatCompletion is None: - logging.error( - "chatCompletion object is None - Increase PROMPTFLOW_RESPONSE_TIMEOUT parameter" - ) - return { - "error": "No response received from promptflow endpoint increase PROMPTFLOW_RESPONSE_TIMEOUT parameter or check the promptflow endpoint." - } - if "error" in chatCompletion: - logging.error(f"Error in promptflow response api: {chatCompletion['error']}") - return {"error": chatCompletion["error"]} - - logging.debug(f"chatCompletion: {chatCompletion}") - try: - messages = [] - if response_field_name in chatCompletion: - messages.append( - {"role": "assistant", "content": chatCompletion[response_field_name]} - ) - if citations_field_name in chatCompletion: - messages.append( - {"role": "tool", "content": chatCompletion[citations_field_name]} - ) - response_obj = { - "id": chatCompletion["id"], - "model": "", - "created": "", - "object": "", - "choices": [ - { - "messages": messages, - "history_metadata": history_metadata, - } - ], - } - return response_obj - except Exception as e: - logging.error(f"Exception in format_pf_non_streaming_response: {e}") - return {} - - -def convert_to_pf_format(input_json, request_field_name, response_field_name): - output_json = [] - logging.debug(f"Input json: {input_json}") - # align the input json to the format expected by promptflow chat flow - for message in input_json["messages"]: - if message: - if message["role"] == "user": - new_obj = { - "inputs": {request_field_name: message["content"]}, - "outputs": {response_field_name: ""}, - } - output_json.append(new_obj) - elif message["role"] == "assistant" and len(output_json) > 0: - output_json[-1]["outputs"][response_field_name] = message["content"] - logging.debug(f"PF formatted response: {output_json}") - return output_json diff --git a/src/api/requirements.txt b/src/api/requirements.txt index 27307e234..6af07d18a 100644 --- a/src/api/requirements.txt +++ b/src/api/requirements.txt @@ -9,7 +9,6 @@ pydantic[email]==2.13.2 azure-core==1.39.0 requests==2.33.1 types-requests==2.33.0.20260408 -aiohttp==3.13.5 # Azure Services azure-identity==1.25.3 @@ -21,7 +20,6 @@ agent-framework-azure-ai==1.0.0rc2 azure-cosmos==4.15.0 # Additional utilities -openai==2.32.0 pyodbc==5.3.0 pandas==3.0.2 diff --git a/src/tests/api/common/config/test_config.py b/src/tests/api/common/config/test_config.py index 292037cac..374f0e1f1 100644 --- a/src/tests/api/common/config/test_config.py +++ b/src/tests/api/common/config/test_config.py @@ -15,7 +15,6 @@ def mock_env_vars(): "AZURE_AI_SEARCH_API_KEY": "search_key", "AZURE_AI_SEARCH_INDEX": "test_index", "USE_AI_PROJECT_CLIENT": "true", - "AZURE_AI_PROJECT_CONN_STRING": "Endpoint=sb://test/", "USE_CHAT_HISTORY_ENABLED": "TRUE", "AZURE_COSMOSDB_DATABASE": "cosmos_db", "AZURE_COSMOSDB_ACCOUNT": "cosmos_account", diff --git a/src/tests/api/helpers/test_streaming_helper.py b/src/tests/api/helpers/test_streaming_helper.py deleted file mode 100644 index 5c02f1b7e..000000000 --- a/src/tests/api/helpers/test_streaming_helper.py +++ /dev/null @@ -1,59 +0,0 @@ -import pytest -from unittest.mock import AsyncMock, MagicMock, patch -from helpers.streaming_helper import stream_processor - - -@pytest.mark.asyncio -async def test_stream_processor_yields_content(): - # Mock message with content - message1 = MagicMock() - message1.content = "message 1" - message2 = MagicMock() - message2.content = "message 2" - - # Mock async generator - response = AsyncMock() - response.__aiter__.return_value = [message1, message2] - - # Collect results - result = [msg async for msg in stream_processor(response)] - - assert result == ["message 1", "message 2"] - - -@pytest.mark.asyncio -async def test_stream_processor_skips_empty_content(): - # Mock message with empty content - message1 = MagicMock() - message1.content = "" - message2 = MagicMock() - message2.content = "message 2" - - response = AsyncMock() - response.__aiter__.return_value = [message1, message2] - - result = [msg async for msg in stream_processor(response)] - - assert result == ["message 2"] - - -@pytest.mark.asyncio -async def test_stream_processor_logs_and_raises_on_exception(): - response = AsyncMock() - - # Simulate error during iteration - async def mock_iter(): - raise RuntimeError("stream error") - yield # This is unreachable, but needed to define async generator - - response.__aiter__.side_effect = mock_iter - - with patch("helpers.streaming_helper.logging.error") as mock_log: - with pytest.raises(RuntimeError, match="stream error"): - async for _ in stream_processor(response): - pass - - mock_log.assert_called_once() - args, kwargs = mock_log.call_args - assert "Error processing streaming response" in args[0] - assert kwargs["exc_info"] is True diff --git a/src/tests/api/helpers/test_utils.py b/src/tests/api/helpers/test_utils.py deleted file mode 100644 index fec2b1190..000000000 --- a/src/tests/api/helpers/test_utils.py +++ /dev/null @@ -1,223 +0,0 @@ -import pytest -import json -from unittest.mock import patch, MagicMock - -import helpers.utils as utils - - -@pytest.mark.asyncio -async def test_format_as_ndjson_success(): - mock_data = [{"key": "value"}, {"another": "entry"}] - - async def async_gen(): - for item in mock_data: - yield item - - result = [] - async for line in utils.format_as_ndjson(async_gen()): - result.append(line.strip()) - - expected = [json.dumps(item) for item in mock_data] - assert result == expected - - -@pytest.mark.asyncio -async def test_format_as_ndjson_exception(): - async def async_gen(): - raise Exception("Test error") - yield - - result = [] - async for line in utils.format_as_ndjson(async_gen()): - result.append(json.loads(line.strip())) - assert result[0]["error"] == "Test error" - - -def test_parse_multi_columns_pipe(): - assert utils.parse_multi_columns("a|b|c") == ["a", "b", "c"] - - -def test_parse_multi_columns_comma(): - assert utils.parse_multi_columns("a,b,c") == ["a", "b", "c"] - - -@patch("helpers.utils.requests.get") -def test_fetchUserGroups_success(mock_get): - mock_response = { - "value": [{"id": "123"}], - } - mock_get.return_value.status_code = 200 - mock_get.return_value.json.return_value = mock_response - - result = utils.fetchUserGroups("fake_token") - assert result == [{"id": "123"}] - - -@patch("helpers.utils.requests.get") -def test_fetchUserGroups_with_nextLink(mock_get): - mock_response_1 = { - "value": [{"id": "123"}], - "@odata.nextLink": "next_link" - } - mock_response_2 = { - "value": [{"id": "456"}], - } - - def side_effect(url, headers): - mock = MagicMock() - if url == "https://graph.microsoft.com/v1.0/me/transitiveMemberOf?$select=id": - mock.status_code = 200 - mock.json.return_value = mock_response_1 - else: - mock.status_code = 200 - mock.json.return_value = mock_response_2 - return mock - - mock_get.side_effect = side_effect - - result = utils.fetchUserGroups("fake_token") - assert {"id": "123"} in result and {"id": "456"} in result - - -@patch("helpers.utils.requests.get", side_effect=Exception("Request error")) -def test_fetchUserGroups_exception(mock_get): - result = utils.fetchUserGroups("fake_token") - assert result == [] - - -@patch("helpers.utils.fetchUserGroups") -@patch("helpers.utils.AZURE_SEARCH_PERMITTED_GROUPS_COLUMN", "group_column") -def test_generateFilterString(mock_fetch): - mock_fetch.return_value = [{"id": "1"}, {"id": "2"}] - result = utils.generateFilterString("token") - assert "group_column/any(g:search.in(g, '1, 2'))" in result - - -@patch("helpers.utils.fetchUserGroups", return_value=[]) -@patch("helpers.utils.AZURE_SEARCH_PERMITTED_GROUPS_COLUMN", "group_column") -def test_generateFilterString_empty_groups(mock_fetch): - result = utils.generateFilterString("token") - assert "group_column/any(g:search.in(g, ''))" in result - - -def test_format_non_streaming_response_with_context(): - chatCompletion = MagicMock() - chatCompletion.id = "1" - chatCompletion.model = "gpt" - chatCompletion.created = 123 - chatCompletion.object = "chat" - message = MagicMock() - message.context = {"source": "test"} - message.content = "response" - choice = MagicMock() - choice.message = message - chatCompletion.choices = [choice] - - result = utils.format_non_streaming_response(chatCompletion, {"meta": 1}, "req-id") - assert result["choices"][0]["messages"][0]["role"] == "tool" - assert result["choices"][0]["messages"][1]["role"] == "assistant" - - -def test_format_non_streaming_response_no_choices(): - chatCompletion = MagicMock() - chatCompletion.id = "1" - chatCompletion.model = "gpt" - chatCompletion.created = 123 - chatCompletion.object = "chat" - chatCompletion.choices = [] - - result = utils.format_non_streaming_response(chatCompletion, {}, "req-id") - assert result == {} - - -def test_format_stream_response_with_context(): - chunk = MagicMock() - chunk.id = "1" - chunk.model = "gpt" - chunk.created = 123 - chunk.object = "chat" - delta = MagicMock() - delta.context = {"source": "stream"} - delta.role = "tool" - choice = MagicMock() - choice.delta = delta - chunk.choices = [choice] - - result = utils.format_stream_response(chunk, {"meta": 1}, "req-id") - assert result["choices"][0]["messages"][0]["role"] == "tool" - - -def test_format_stream_response_with_content(): - chunk = MagicMock() - chunk.id = "1" - chunk.model = "gpt" - chunk.created = 123 - chunk.object = "chat" - - delta = MagicMock() - delta.content = "Hello" - delta.role = "assistant" - # Ensure delta does NOT have a context attribute - del delta.context - - choice = MagicMock() - choice.delta = delta - - chunk.choices = [choice] - - result = utils.format_stream_response(chunk, {}, "req-id") - assert result["choices"][0]["messages"][0]["content"] == "Hello" - assert result["choices"][0]["messages"][0]["role"] == "assistant" - - -def test_format_stream_response_empty(): - chunk = MagicMock() - chunk.id = "1" - chunk.model = "gpt" - chunk.created = 123 - chunk.object = "chat" - chunk.choices = [] - - result = utils.format_stream_response(chunk, {}, "req-id") - assert result == {} - - -def test_format_pf_non_streaming_response_valid(): - chatCompletion = { - "id": "1", - "response": "Answer", - "citations": "Refs" - } - result = utils.format_pf_non_streaming_response( - chatCompletion, {}, "response", "citations" - ) - assert result["choices"][0]["messages"][0]["content"] == "Answer" - - -def test_format_pf_non_streaming_response_error_key(): - chatCompletion = {"error": "Failure"} - result = utils.format_pf_non_streaming_response(chatCompletion, {}, "r", "c") - assert result["error"] == "Failure" - - -def test_format_pf_non_streaming_response_none(): - result = utils.format_pf_non_streaming_response(None, {}, "r", "c") - assert "error" in result - - -def test_format_pf_non_streaming_response_exception(): - badCompletion = {"id": "1", "invalid": object()} - result = utils.format_pf_non_streaming_response(badCompletion, {}, "invalid", "c") - assert isinstance(result, dict) - - -def test_convert_to_pf_format_valid(): - input_json = { - "messages": [ - {"role": "user", "content": "Hello"}, - {"role": "assistant", "content": "Hi"} - ] - } - result = utils.convert_to_pf_format(input_json, "input", "output") - assert result[0]["inputs"]["input"] == "Hello" - assert result[0]["outputs"]["output"] == "Hi"