diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..21cdfa776 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,39 @@ +{ + "name": "Node.js 20 Workspace", + "image": "mcr.microsoft.com/devcontainers/javascript-node:20", + + "hostRequirements": { + "cpus": 4 + }, + + // Lifecycle commands + "onCreateCommand": "npm install", + "updateContentCommand": "if git diff --name-only HEAD~1 HEAD | grep -E 'package(-lock)?\\.json'; then npm install; fi && npm run build", + + "forwardPorts": [3000], + "portsAttributes": { + "3000": { + "label": "Development Server", + "onAutoForward": "notify" + } + }, + + "customizations": { + "vscode": { + "extensions": [ + "dbaeumer.vscode-eslint", + "mike-lischke.vscode-antlr4", + "amodio.tsl-problem-matcher", + "Orta.vscode-jest", + "esbenp.prettier-vscode" + ], + "settings": { + "editor.formatOnSave": true, + "eslint.enable": true + } + } + }, + + // Cache node_modules between prebuilds + "mounts": ["source=node_modules-cache,target=/workspace/node_modules,type=volume"] +} diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 0e5e2ade5..aa476f65f 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -371,6 +371,152 @@ export async function yourCommand(context: IActionContext, targetItem: SomeItem) } ``` +### Wizard Back Navigation and Context Persistence + +When users navigate back in a wizard (via `GoBackError`), the `AzureWizard` framework resets context properties. Understanding this behavior is critical for proper wizard implementation. + +#### How AzureWizard Handles Back Navigation + +When a step throws `GoBackError`, the wizard: + +1. Pops steps from the finished stack until finding the previous prompted step +2. **Resets context properties** to what existed before that step's `prompt()` ran +3. Re-runs the step's `prompt()` method + +**Critical Implementation Detail**: Before each step's `prompt()` runs, the wizard captures `propertiesBeforePrompt`: + +```javascript +// From AzureWizard.js - this runs for EACH step before prompt() +step.propertiesBeforePrompt = Object.keys(this._context).filter((k) => !isNullOrUndefined(this._context[k])); // Only non-null/undefined values! +``` + +When going back, properties NOT in `propertiesBeforePrompt` are set to `undefined`: + +```javascript +// From AzureWizard.js goBack() method +for (const key of Object.keys(this._context)) { + if (!step.propertiesBeforePrompt.find((p) => p === key)) { + this._context[key] = undefined; // Property gets cleared! + } +} +``` + +#### Making Context Properties Survive Back Navigation + +To ensure a context property survives when users navigate back, you must initialize it with a **non-null, non-undefined value** in the wizard context creation: + +```typescript +// ❌ Bad - Property will be cleared on back navigation +const wizardContext: MyWizardContext = { + ...context, + cachedData: undefined, // undefined is filtered out of propertiesBeforePrompt! +}; + +// ❌ Bad - Property not initialized, same problem +const wizardContext: MyWizardContext = { + ...context, + // cachedData not set - will be undefined +}; + +// ✅ Good - Property will survive back navigation (using empty array) +const wizardContext: MyWizardContext = { + ...context, + cachedData: [], // Empty array is not null/undefined, captured in propertiesBeforePrompt +}; + +// ✅ Good - Property will survive back navigation (using empty object) +const wizardContext: MyWizardContext = { + ...context, + cachedConfig: {}, // Empty object is not null/undefined +}; + +// ✅ Good - Property will survive back navigation (using empty string) +const wizardContext: MyWizardContext = { + ...context, + cachedId: '', // Empty string is not null/undefined +}; + +// ✅ Good - Property will survive back navigation (using zero) +const wizardContext: MyWizardContext = { + ...context, + retryCount: 0, // Zero is not null/undefined +}; + +// ✅ Good - Property will survive back navigation (using false) +const wizardContext: MyWizardContext = { + ...context, + hasBeenValidated: false, // false is not null/undefined +}; +``` + +#### Pattern for Cached Data with Back Navigation Support + +When you need to cache expensive data (like API calls) that should survive back navigation: + +1. **Context Interface**: Make the property required with a non-nullable type + +```typescript +export interface MyWizardContext extends IActionContext { + // Required - initialized with non-null/undefined value to survive back navigation + cachedItems: CachedItem[]; + + // Optional - user selections that may be cleared + selectedItem?: SomeItem; +} +``` + +2. **Wizard Initialization**: Initialize with a non-null/undefined value + +```typescript +const wizardContext: MyWizardContext = { + ...context, + cachedItems: [], // Any non-null/undefined value survives back navigation +}; +``` + +3. **Step Implementation**: Check appropriately for the initial value + +```typescript +public async prompt(context: MyWizardContext): Promise { + const getQuickPickItems = async () => { + // Check for initial empty value (array uses .length, string uses === '', etc.) + if (context.cachedItems.length === 0) { + context.cachedItems = await this.fetchExpensiveData(); + } + return context.cachedItems.map(item => ({ label: item.name })); + }; + + await context.ui.showQuickPick(getQuickPickItems(), { /* options */ }); +} +``` + +4. **Clearing Cache**: Reset to the initial non-null/undefined value + +```typescript +// When you need to invalidate the cache (e.g., after a mutation) +context.cachedItems = []; // Reset to initial value, not undefined! +``` + +#### Using GoBackError in Steps + +To navigate back programmatically from a step: + +```typescript +import { GoBackError } from '@microsoft/vscode-azext-utils'; + +public async prompt(context: MyWizardContext): Promise { + const result = await context.ui.showQuickPick(items, options); + + if (result.isBackOption) { + // Clear step-specific selections before going back + context.selectedItem = undefined; + throw new GoBackError(); + } + + // Process selection... +} +``` + ### Tree View Architecture - Use proper data providers that implement `vscode.TreeDataProvider`. diff --git a/.github/workflows/deploy-documentation-production.yml b/.github/workflows/deploy-documentation-production.yml new file mode 100644 index 000000000..14aeca9af --- /dev/null +++ b/.github/workflows/deploy-documentation-production.yml @@ -0,0 +1,30 @@ +name: Deploy Documentation + +on: + push: + branches: + - main + paths: + - 'docs/**' + workflow_dispatch: + +permissions: + contents: write + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: 📥 Checkout Repository + uses: actions/checkout@v4 + with: + ref: main + token: ${{ secrets.GITHUB_TOKEN }} + + - name: 🚀 Deploy to GitHub Pages + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: docs/ + branch: gh-pages + clean: true + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 0408af70f..d5596f585 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Change Log +## 0.6.2 + +### Fixes + +- **Azure Tenant Filtering in Service Discovery**: Resolved an issue where users could not deselect tenants when filtering from a large number of available tenants. This update improves the Azure account, tenant, and subscription management workflow. For more details on the enhanced workflow, see the [updated documentation](https://microsoft.github.io/vscode-documentdb/user-manual/managing-azure-discovery). [#391](https://github.com/microsoft/vscode-documentdb/issues/391), [#415](https://github.com/microsoft/vscode-documentdb/pull/415) +- **Service Discovery Defaults**: The service discovery feature now starts with no pre-selected engines. Previously, the Azure Cosmos DB for MongoDB (RU) plugin was enabled by default, which has been corrected. [#390](https://github.com/microsoft/vscode-documentdb/issues/390), [#412](https://github.com/microsoft/vscode-documentdb/pull/412) +- **Accessibility in Query Insights**: Fixed a responsive layout issue in the "Query Insights" tab where the 'AI response may be inaccurate' text would overlap with other UI elements on resize. [#376](https://github.com/microsoft/vscode-documentdb/issues/376), [#416](https://github.com/microsoft/vscode-documentdb/pull/416) + +### Improvements + +- **Dependency Upgrades**: + - Upgraded to React 19 and SlickGrid 9, enhancing UI performance and modernizing the webview components. This also includes updates to TypeScript, Webpack, and other build tools. [#406](https://github.com/microsoft/vscode-documentdb/issues/406), [#407](https://github.com/microsoft/vscode-documentdb/pull/407) + - Updated various other dependencies to improve security and performance. [#386](https://github.com/microsoft/vscode-documentdb/pull/386) + ## 0.6.1 ### New Features & Improvements diff --git a/api/package-lock.json b/api/package-lock.json index c0b9a9de9..532d381df 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -28,6 +28,29 @@ "license": "MIT", "peer": true }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -740,15 +763,15 @@ } }, "node_modules/glob": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz", - "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" @@ -763,24 +786,14 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/glob/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { "node": "20 || >=22" diff --git a/docs/index.md b/docs/index.md index 31379ec01..a82b32654 100644 --- a/docs/index.md +++ b/docs/index.md @@ -64,7 +64,7 @@ The User Manual provides guidance on using DocumentDB for VS Code. It contains d Explore the history of updates and improvements to the DocumentDB for VS Code extension. Each release brings new features, enhancements, and fixes to improve your experience. -- [0.6](./release-notes/0.6), [0.6.1](./release-notes/0.6#patch-release-v061) +- [0.6](./release-notes/0.6), [0.6.1](./release-notes/0.6#patch-release-v061), [0.6.2](./release-notes/0.6#patch-release-v062) - [0.5](./release-notes/0.5), [0.5.1](./release-notes/0.5#patch-release-v051), [0.5.2](./release-notes/0.5#patch-release-v052) - [0.4](./release-notes/0.4), [0.4.1](./release-notes/0.4#patch-release-v041) - [0.3](./release-notes/0.3), [0.3.1](./release-notes/0.3#patch-release-v031) diff --git a/docs/release-notes/0.6.md b/docs/release-notes/0.6.md index c6e8ef7db..7021d2615 100644 --- a/docs/release-notes/0.6.md +++ b/docs/release-notes/0.6.md @@ -78,11 +78,11 @@ This patch release introduces feedback optimization and fixes a broken link. ### What's Changed in v0.6.1 -#### **Feedback Optimization** ([#392](https://github.com/microsoft/vscode-documentdb/pull/392)) +#### 💠 **Feedback Optimization** ([#392](https://github.com/microsoft/vscode-documentdb/pull/392)) Introduces privacy consent and feedback signal controls for the Query Insights feature, primarily to ensure compliance with organizational data protection requirements and user telemetry settings. It also disables survey functionality and refines the feedback dialog UI. -#### **Privacy Policy Link Update** ([#388](https://github.com/microsoft/vscode-documentdb/pull/388)) +#### 💠 **Privacy Policy Link Update** ([#388](https://github.com/microsoft/vscode-documentdb/pull/388)) Updated the outdated privacy policy link in the README to the current Microsoft privacy statement URL. @@ -90,3 +90,44 @@ Updated the outdated privacy policy link in the README to the current Microsoft See the full changelog entry for this release: ➡️ [CHANGELOG.md#061](https://github.com/microsoft/vscode-documentdb/blob/main/CHANGELOG.md#061) + +--- + +## Patch Release v0.6.2 + +This patch release delivers important fixes for Azure tenant management, service discovery, and accessibility. It also includes a significant set of dependency upgrades to modernize the extension's underlying architecture. + +### What's Changed in v0.6.2 + +#### 💠 **Improved Azure Tenant and Subscription Filtering in Service Discovery** ([#391](https://github.com/microsoft/vscode-documentdb/issues/391), [#415](https://github.com/microsoft/vscode-documentdb/pull/415)) + +We've resolved a key issue that affected users managing numerous Azure tenants. Previously, when a user had access to a large number of tenants, and had selected all of them, the filtering wizard would fail to work correctly when attempting to deselect tenants, making it impossible to refine the resource view. + +This update introduces an improved filtering mechanism that ensures a reliable experience, even for users in enterprise environments. The wizard for managing accounts, tenants, and subscriptions is now more resilient, allowing you to precisely control which resources are displayed in the Service Discovery panel. + +For a complete guide on the enhanced workflow, please see our updated documentation on [Managing Azure Discovery](https://microsoft.github.io/vscode-documentdb/user-manual/managing-azure-discovery). + +#### 💠 **Corrected Service Discovery Default Settings** ([#390](https://github.com/microsoft/vscode-documentdb/issues/390), [#412](https://github.com/microsoft/vscode-documentdb/pull/412)) + +To provide a cleaner initial experience, the Service Discovery feature no longer starts with any discovery engines enabled by default. In a previous version, the "Azure Cosmos DB for MongoDB (RU)" plugin was pre-selected by mistake, which could cause confusion. + +With this fix, you now have full control over which service discovery plugins are active from the start, for a more intentional and direct setup. + +#### 💠 **Accessibility Fix for Query Insights** ([#376](https://github.com/microsoft/vscode-documentdb/issues/376), [#416](https://github.com/microsoft/vscode-documentdb/pull/416)) + +We've addressed an accessibility issue in the "Query Insights" tab where the "AI response may be inaccurate" warning text would overlap with other UI elements when the panel was resized. The layout has been updated to be fully responsive, ensuring all content remains readable and accessible regardless of panel size. + +#### 💠 **Modernized Architecture with Major Dependency Upgrades** ([#406](https://github.com/microsoft/vscode-documentdb/issues/406), [#407](https://github.com/microsoft/vscode-documentdb/pull/407), [#386](https://github.com/microsoft/vscode-documentdb/pull/386)) + +This release includes a significant overhaul of our dev dependencies, bringing major performance and modernization improvements: + +- **Upgraded to React 19**: We've migrated our webview components to React 19, leveraging the latest features and performance enhancements from the React team. +- **Upgraded to SlickGrid 9**: The data grids used to display collection data have been updated to SlickGrid 9. This major update improves rendering performance and aligns with modern JavaScript standards. +- **Other Key Updates**: We've also updated TypeScript, Webpack, the MongoDB driver, and numerous other packages to enhance security, stability, and build performance. + +These upgrades ensure the extension remains fast, secure, and aligned with the latest web development best practices. + +### Changelog + +See the full changelog entry for this release: +➡️ [CHANGELOG.md#062](https://github.com/microsoft/vscode-documentdb/blob/main/CHANGELOG.md#062) diff --git a/docs/user-manual/managing-azure-discovery.md b/docs/user-manual/managing-azure-discovery.md index 5a62d71c8..e1b342832 100644 --- a/docs/user-manual/managing-azure-discovery.md +++ b/docs/user-manual/managing-azure-discovery.md @@ -14,40 +14,65 @@ For a general overview of service discovery, see the [Service Discovery](./servi --- -## Managing Azure Accounts +## Managing Azure Accounts and Tenants -The **Manage Credentials** feature allows you to view and manage which Azure accounts are being used for service discovery within the extension. +The **Manage Credentials** feature allows you to view your Azure accounts, sign in to specific tenants, and add new accounts for service discovery. ### How to Access You can access the credential management feature in two ways: 1. **From the context menu**: Right-click on an Azure service discovery provider and select `Manage Credentials...` -2. **From the Service Discovery panel**: Click the `key icon` next to the service discovery provider name +2. **From the Service Discovery panel**: Click the `key icon` next to the service discovery provider name. -### Available Actions +### Account and Tenant Management Flow -When you open the credential management wizard, you can: +The wizard provides options to manage your Azure authentication state. -1. **View signed-in accounts**: See all Azure accounts currently authenticated in VS Code and available for service discovery -2. **Sign in with a different account**: Add additional Azure accounts for accessing more resources -3. **View active account details**: See which account is currently being used for a specific service discovery provider -4. **Exit without changes**: Close the wizard without making modifications +#### Step 1: Select an Account -### Account Selection +First, you'll see a list of all Azure accounts currently authenticated in VS Code. For each account, you can see how many tenants are available and how many you are currently signed in to. + +You can: + +- Select an existing account to manage its tenants. +- Choose `Sign in with a different account…` to add a new Azure account. + +``` +┌───────────────────────────────────────────────────────────┐ +│ Azure accounts used for service discovery │ +├───────────────────────────────────────────────────────────┤ +│ 👤 user@contoso.com │ +│ 2 tenants available (1 signed in) │ +│ 👤 user@fabrikam.com │ +│ 1 tenant available (1 signed in) │ +├───────────────────────────────────────────────────────────┤ +│ 🔐 Sign in with a different account… │ +│ ✖️ Exit │ +└───────────────────────────────────────────────────────────┘ +``` + +#### Step 2: Manage Tenants for the Selected Account + +After selecting an account, you will see a list of all tenants associated with that account, along with their sign-in status. ``` -┌────────────────────────────────────────────┐ -│ Azure accounts used for service discovery │ -├────────────────────────────────────────────┤ -│ 👤 user1@contoso.com │ -│ 👤 user2@fabrikam.com │ -├────────────────────────────────────────────┤ -│ 🔐 Sign in with a different account… │ -│ ✖️ Exit without making changes │ -└────────────────────────────────────────────┘ +┌───────────────────────────────────────────────────────────┐ +│ Tenants for "user@contoso.com" │ +├───────────────────────────────────────────────────────────┤ +│ Experiments │ +│ ✅ Signed in │ +│ Production │ +│ 🔐 Select to sign in │ +├───────────────────────────────────────────────────────────┤ +│ ⬅️ Back to account selection │ +│ ✖️ Exit │ +└───────────────────────────────────────────────────────────┘ ``` +- **Sign in to a tenant**: Select any tenant marked with `$(sign-in) Select to sign in`. The extension will authenticate you for that specific tenant, making its subscriptions available for discovery. +- **Already signed-in tenants**: Selecting a tenant that is already signed in will simply confirm your status and allow you to return to the list. + ### Signing Out from an Azure Account The credential management wizard does **not** provide a sign-out option. If you need to sign out from an Azure account: @@ -62,7 +87,7 @@ The credential management wizard does **not** provide a sign-out option. If you ## Filtering Azure Resources -The **Filter** feature allows you to control which Azure resources are displayed in the Service Discovery panel by selecting specific tenants and subscriptions. +The **Filter** feature allows you to control which Azure resources are displayed in the Service Discovery panel by selecting from your **currently signed-in tenants** and their corresponding subscriptions. ### How to Access @@ -70,56 +95,55 @@ You can access the filtering feature by clicking the **funnel icon** next to the ### Filtering Flow -The filtering wizard guides you through selecting which Azure resources to display: +The filtering wizard guides you through selecting which Azure resources to display. The flow adapts based on your Azure environment. #### Single-Tenant Scenario -If you have access to only one Azure tenant, the wizard will skip tenant selection and proceed directly to subscription filtering: +If you have access to only one Azure tenant (or are only signed in to one), the wizard will skip tenant selection and proceed directly to subscription filtering: ``` -┌────────────────────────────────────────────┐ -│ Select subscriptions to include in │ -│ service discovery │ -├────────────────────────────────────────────┤ -│ ☑️ Production Subscription │ -│ (sub-id-123) (Contoso) │ -│ ☑️ Development Subscription │ -│ (sub-id-456) (Contoso) │ -│ ☐ Test Subscription │ -│ (sub-id-789) (Contoso) │ -└────────────────────────────────────────────┘ +┌───────────────────────────────────────────────────────────┐ +│ Select subscriptions to include in service discovery │ +├───────────────────────────────────────────────────────────┤ +│ ☑️ Demos (Experiments) │ +│ (sub-id-123) │ +│ ☑️ TestRuns (Experiments) │ +│ (sub-id-456) │ +└───────────────────────────────────────────────────────────┘ ``` #### Multi-Tenant Scenario If you have access to multiple Azure tenants, the wizard will first ask you to select tenants, then filter subscriptions based on your tenant selection: +**Step 1: Select Tenants** + +The wizard first asks you to select from the tenants you are currently signed in to. Only tenants authenticated via the "Manage Credentials" flow will appear here. + +``` +┌───────────────────────────────────────────────────────────┐ +│ Select tenants (manage accounts to see more) │ +├───────────────────────────────────────────────────────────┤ +│ ☑️ Experiments │ +│ (tenant-id-123) │ +│ ☑️ Production │ +│ (tenant-id-456) │ +└───────────────────────────────────────────────────────────┘ +``` + +**Step 2: Select Subscriptions** + +Next, you'll see a list of subscriptions belonging to the tenants you selected in the previous step. + ``` -Step 1: Select Tenants -┌────────────────────────────────────────────┐ -│ Select tenants to include in subscription │ -│ discovery │ -├────────────────────────────────────────────┤ -│ ☑️ Contoso │ -│ (tenant-id-123) contoso.onmicrosoft.com │ -│ ☑️ Fabrikam │ -│ (tenant-id-456) fabrikam.onmicrosoft.com │ -│ ☐ Adventure Works │ -│ (tenant-id-789) adventureworks.com │ -└────────────────────────────────────────────┘ - -Step 2: Select Subscriptions (filtered by selected tenants) -┌────────────────────────────────────────────┐ -│ Select subscriptions to include in │ -│ service discovery │ -├────────────────────────────────────────────┤ -│ ☑️ Contoso Production │ -│ (sub-id-123) (Contoso) │ -│ ☑️ Contoso Development │ -│ (sub-id-456) (Contoso) │ -│ ☑️ Fabrikam Production │ -│ (sub-id-789) (Fabrikam) │ -└────────────────────────────────────────────┘ +┌───────────────────────────────────────────────────────────┐ +│ Select subscriptions to include in service discovery │ +├───────────────────────────────────────────────────────────┤ +│ ☑️ Demos (Experiments) │ +│ (sub-id-123) │ +│ ☑️ Portal (Production) │ +│ (sub-id-789) │ +└───────────────────────────────────────────────────────────┘ ``` ### Filter Persistence @@ -134,22 +158,21 @@ The filtering behavior differs depending on how you access service discovery: When working within the **Service Discovery** panel in the sidebar: -- Your filter selections (tenants and subscriptions) are **applied automatically** -- Only resources from selected tenants and subscriptions are displayed -- The filter persists until you change it +- Your filter selections (tenants and subscriptions) are **applied automatically**. +- Only resources from selected tenants and subscriptions are displayed. +- The filter persists until you change it. #### From the "Add New Connection" Wizard When adding a new connection via the **"Add New Connection"** wizard: -- **No filtering is applied** by default -- You will see **all subscriptions from all tenants** you have access to -- You must select one subscription to continue, but the full list is available -- This ensures you can always access any resource when explicitly adding a connection +- **No filtering is applied** by default. +- You will see **all subscriptions from all tenants** you have access to, regardless of your filter settings or sign-in status for each tenant. +- This ensures you can always access any resource when explicitly adding a connection. ## Related Documentation - [Service Discovery Overview](./service-discovery) -- [Azure CosmosDB for MongoDB (RU) Service Discovery](./service-discovery-azure-cosmosdb-for-mongodb-ru) +- [Azure Cosmos DB for MongoDB (RU) Service Discovery](./service-discovery-azure-cosmosdb-for-mongodb-ru) - [Azure DocumentDB Service Discovery](./service-discovery-azure-cosmosdb-for-mongodb-vcore) - [Azure VMs (DocumentDB) Service Discovery](./service-discovery-azure-vms) diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index 7e7e9b43d..c7c2e2815 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -52,7 +52,7 @@ "[Query Insights Stage 3] AI service completed in {ms}ms (requestKey: {key})": "[Query Insights Stage 3] AI service completed in {ms}ms (requestKey: {key})", "[Query Insights Stage 3] Completed: {count} improvement cards generated (requestKey: {key})": "[Query Insights Stage 3] Completed: {count} improvement cards generated (requestKey: {key})", "[Query Insights Stage 3] Started for {db}.{collection} (requestKey: {key})": "[Query Insights Stage 3] Started for {db}.{collection} (requestKey: {key})", - "{0} is currently being used for Azure service discovery": "{0} is currently being used for Azure service discovery", + "{0} tenants available ({1} signed in)": "{0} tenants available ({1} signed in)", "{countMany} documents have been deleted.": "{countMany} documents have been deleted.", "{countOne} document has been deleted.": "{countOne} document has been deleted.", "{documentCount} documents exported…": "{documentCount} documents exported…", @@ -68,12 +68,16 @@ "$(add) Create...": "$(add) Create...", "$(info) Some storage accounts were filtered because of their sku. Learn more...": "$(info) Some storage accounts were filtered because of their sku. Learn more...", "$(keyboard) Manually enter error": "$(keyboard) Manually enter error", + "$(pass) Signed in": "$(pass) Signed in", "$(plus) Create new {0}...": "$(plus) Create new {0}...", "$(plus) Create new resource group": "$(plus) Create new resource group", "$(plus) Create new storage account": "$(plus) Create new storage account", "$(plus) Create new user assigned identity": "$(plus) Create new user assigned identity", + "$(sign-in) Select to sign in": "$(sign-in) Select to sign in", "$(warning) Only storage accounts in the region \"{0}\" are shown.": "$(warning) Only storage accounts in the region \"{0}\" are shown.", "$(warning) Some storage accounts were filtered because of their network configurations.": "$(warning) Some storage accounts were filtered because of their network configurations.", + "1 tenant available (0 signed in)": "1 tenant available (0 signed in)", + "1 tenant available (1 signed in)": "1 tenant available (1 signed in)", "1. Locating the one you'd like from the DocumentDB side panel,": "1. Locating the one you'd like from the DocumentDB side panel,", "2. Selecting a database or a collection,": "2. Selecting a database or a collection,", "3. Right-clicking and then choosing the \"Mongo Scrapbook\" submenu,": "3. Right-clicking and then choosing the \"Mongo Scrapbook\" submenu,", @@ -88,6 +92,7 @@ "Action failed": "Action failed", "Add new document": "Add new document", "Additional write and storage overhead for maintaining a new index.": "Additional write and storage overhead for maintaining a new index.", + "Adjust Filters": "Adjust Filters", "Advanced": "Advanced", "AI is analyzing...": "AI is analyzing...", "AI Performance Insights": "AI Performance Insights", @@ -139,6 +144,7 @@ "Azure VMs (DocumentDB)": "Azure VMs (DocumentDB)", "Back": "Back", "Back to account selection": "Back to account selection", + "Back to tenant selection": "Back to tenant selection", "Browse to {mongoExecutableFileName}": "Browse to {mongoExecutableFileName}", "Cancel": "Cancel", "Change page size": "Change page size", @@ -156,7 +162,6 @@ "Click here to retry": "Click here to retry", "Click here to update credentials": "Click here to update credentials", "Click to view resource": "Click to view resource", - "Close the account management wizard": "Close the account management wizard", "Cluster metadata not initialized. Client may not be properly connected.": "Cluster metadata not initialized. Client may not be properly connected.", "Cluster support unknown $(info)": "Cluster support unknown $(info)", "Collection name cannot begin with the system. prefix (Reserved for internal use).": "Collection name cannot begin with the system. prefix (Reserved for internal use).", @@ -299,7 +304,6 @@ "Execution timed out": "Execution timed out", "Execution timed out.": "Execution timed out.", "Exit": "Exit", - "Exit without making changes": "Exit without making changes", "Expected a file name \"{0}\", but the selected filename is \"{1}\"": "Expected a file name \"{0}\", but the selected filename is \"{1}\"", "Expecting parentheses or quotes at \"{text}\"": "Expecting parentheses or quotes at \"{text}\"", "Explain(aggregate) completed [{durationMs}ms]": "Explain(aggregate) completed [{durationMs}ms]", @@ -356,6 +360,7 @@ "Failed to retrieve Azure accounts: {0}": "Failed to retrieve Azure accounts: {0}", "Failed to save credentials for \"{cluster}\".": "Failed to save credentials for \"{cluster}\".", "Failed to save credentials.": "Failed to save credentials.", + "Failed to sign in to tenant {0}: {1}": "Failed to sign in to tenant {0}: {1}", "Failed to store secrets for key {0}:": "Failed to store secrets for key {0}:", "Failed to unhide index.": "Failed to unhide index.", "Failed to update the connection.": "Failed to update the connection.", @@ -477,12 +482,15 @@ "Loading Subscriptions…": "Loading Subscriptions…", "Loading Tenant Filter Options…": "Loading Tenant Filter Options…", "Loading Tenants and Subscription Data…": "Loading Tenants and Subscription Data…", + "Loading tenants…": "Loading tenants…", "Loading Tenants…": "Loading Tenants…", "Loading Virtual Machines…": "Loading Virtual Machines…", "Loading...": "Loading...", "Location": "Location", "LOW PRIORITY": "LOW PRIORITY", + "Manage Accounts": "Manage Accounts", "Manage Azure Accounts": "Manage Azure Accounts", + "Manage Azure Accounts…": "Manage Azure Accounts…", "Manually enter a custom tenant ID": "Manually enter a custom tenant ID", "MEDIUM PRIORITY": "MEDIUM PRIORITY", "Microsoft will process the feedback data you submit on behalf of your organization in accordance with the Data Protection Addendum between your organization and Microsoft.": "Microsoft will process the feedback data you submit on behalf of your organization in accordance with the Data Protection Addendum between your organization and Microsoft.", @@ -504,6 +512,7 @@ "New Local Connection…": "New Local Connection…", "No": "No", "No Action": "No Action", + "No authenticated tenants found. Use \"Manage Azure Accounts\" in the Discovery View to sign in to tenants.": "No authenticated tenants found. Use \"Manage Azure Accounts\" in the Discovery View to sign in to tenants.", "No authentication method selected.": "No authentication method selected.", "No authentication methods available for \"{cluster}\".": "No authentication methods available for \"{cluster}\".", "No Azure subscription found for this tree item.": "No Azure subscription found for this tree item.", @@ -526,8 +535,9 @@ "No subscriptions found": "No subscriptions found", "No subscriptions found for the selected tenants. Please adjust your tenant selection or check your Azure permissions.": "No subscriptions found for the selected tenants. Please adjust your tenant selection or check your Azure permissions.", "No suitable language model found. Please ensure GitHub Copilot is installed and you have an active subscription.": "No suitable language model found. Please ensure GitHub Copilot is installed and you have an active subscription.", - "No tenants found. Please try signing in again or check your Azure permissions.": "No tenants found. Please try signing in again or check your Azure permissions.", - "No tenants selected. Azure discovery will be filtered to exclude all tenant results.": "No tenants selected. Azure discovery will be filtered to exclude all tenant results.", + "No tenants available": "No tenants available", + "No tenants available for this account": "No tenants available for this account", + "No tenants selected. Tenant filtering disabled (all tenants will be shown).": "No tenants selected. Tenant filtering disabled (all tenants will be shown).", "None": "None", "Not connected to any MongoDB database.": "Not connected to any MongoDB database.", "Note: This confirmation type can be configured in the extension settings.": "Note: This confirmation type can be configured in the extension settings.", @@ -601,7 +611,6 @@ "Report an issue": "Report an issue", "Resource group \"{0}\" already exists in subscription \"{1}\".": "Resource group \"{0}\" already exists in subscription \"{1}\".", "Retry": "Retry", - "Return to the account list": "Return to the account list", "Reusing active connection for \"{cluster}\".": "Reusing active connection for \"{cluster}\".", "Revisit connection details and try again.": "Revisit connection details and try again.", "Role assignment \"{0}\" created for the {2} resource \"{1}\".": "Role assignment \"{0}\" created for the {2} resource \"{1}\".", @@ -626,7 +635,7 @@ "Select subscription": "Select subscription", "Select subscriptions to include in service discovery": "Select subscriptions to include in service discovery", "Select Subscriptions...": "Select Subscriptions...", - "Select tenants to include in subscription discovery": "Select tenants to include in subscription discovery", + "Select tenants (manage accounts to see more)": "Select tenants (manage accounts to see more)", "Select the error you would like to report": "Select the error you would like to report", "Select the local connection type…": "Select the local connection type…", "Selected subscriptions: {0}": "Selected subscriptions: {0}", @@ -638,11 +647,14 @@ "SHARD_MERGE · {0} shards · {1} docs · {2}ms": "SHARD_MERGE · {0} shards · {1} docs · {2}ms", "Shard: {0}": "Shard: {0}", "Show Stage Details": "Show Stage Details", + "Sign in to additional accounts or authenticate with other tenants to see more options.": "Sign in to additional accounts or authenticate with other tenants to see more options.", + "Sign in to additional accounts or authenticate with other tenants to see more subscriptions.": "Sign in to additional accounts or authenticate with other tenants to see more subscriptions.", "Sign in to Azure to continue…": "Sign in to Azure to continue…", "Sign in to Azure...": "Sign in to Azure...", - "Sign in to other Azure accounts to access more subscriptions": "Sign in to other Azure accounts to access more subscriptions", "Sign in to other Azure accounts to access more tenants": "Sign in to other Azure accounts to access more tenants", "Sign in with a different account…": "Sign in with a different account…", + "Sign-in to tenant was cancelled or failed: {0}": "Sign-in to tenant was cancelled or failed: {0}", + "Signed in to tenant \"{0}\"": "Signed in to tenant \"{0}\"", "Signing out programmatically is not supported. You must sign out by selecting the account in the Accounts menu and choosing Sign Out.": "Signing out programmatically is not supported. You must sign out by selecting the account in the Accounts menu and choosing Sign Out.", "Skip": "Skip", "Skip for now": "Skip for now", @@ -655,6 +667,7 @@ "Starting Azure account management wizard": "Starting Azure account management wizard", "Starting Azure sign-in process…": "Starting Azure sign-in process…", "Starting executable: \"{command}\"": "Starting executable: \"{command}\"", + "Starting sign-in to tenant: {0}": "Starting sign-in to tenant: {0}", "Starts with mongodb:// or mongodb+srv://": "Starts with mongodb:// or mongodb+srv://", "Submit": "Submit", "Submit Feedback": "Submit Feedback", @@ -666,6 +679,8 @@ "Successfully created resource group \"{0}\".": "Successfully created resource group \"{0}\".", "Successfully created storage account \"{0}\".": "Successfully created storage account \"{0}\".", "Successfully created user assigned identity \"{0}\".": "Successfully created user assigned identity \"{0}\".", + "Successfully signed in to {0}": "Successfully signed in to {0}", + "Successfully signed in to tenant: {0}": "Successfully signed in to tenant: {0}", "Suggest a Feature": "Suggest a Feature", "Sure!": "Sure!", "Switch to the new \"Connections View\"…": "Switch to the new \"Connections View\"…", @@ -675,9 +690,11 @@ "Tag cannot be longer than 256 characters.": "Tag cannot be longer than 256 characters.", "Template file is empty: {path}": "Template file is empty: {path}", "Template file not found: {path}": "Template file not found: {path}", + "Tenant {0} has been automatically included in subscription discovery": "Tenant {0} has been automatically included in subscription discovery", "Tenant ID cannot be empty": "Tenant ID cannot be empty", "Tenant ID: {0}": "Tenant ID: {0}", "Tenant Name: {0}": "Tenant Name: {0}", + "Tenants for \"{0}\"": "Tenants for \"{0}\"", "Thank you for helping us improve!": "Thank you for helping us improve!", "Thank you for your feedback!": "Thank you for your feedback!", "The \"_id_\" index cannot be deleted.": "The \"_id_\" index cannot be deleted.", @@ -734,6 +751,7 @@ "This will allow the query planner to use this index again.": "This will allow the query planner to use this index again.", "This will prevent the query planner from using this index.": "This will prevent the query planner from using this index.", "Timed out trying to execute the Mongo script. To use a longer timeout, modify the VS Code 'mongo.shell.timeout' setting.": "Timed out trying to execute the Mongo script. To use a longer timeout, modify the VS Code 'mongo.shell.timeout' setting.", + "To connect to Azure resources, you need to sign in to Azure accounts.": "To connect to Azure resources, you need to sign in to Azure accounts.", "TODO: Share the steps needed to reliably reproduce the problem. Please include actual and expected results.": "TODO: Share the steps needed to reliably reproduce the problem. Please include actual and expected results.", "Too many arguments. Expecting 0 or 1 argument(s) to {constructorCall}": "Too many arguments. Expecting 0 or 1 argument(s) to {constructorCall}", "Total time taken to execute the query on the server": "Total time taken to execute the query on the server", @@ -805,10 +823,10 @@ "Write error: {0}": "Write error: {0}", "Yes": "Yes", "Yes, continue": "Yes, continue", - "Yes, Manage Accounts": "Yes, Manage Accounts", "Yes, open Collection View": "Yes, open Collection View", "Yes, open connection": "Yes, open connection", "Yes, save my credentials": "Yes, save my credentials", + "You are already signed in to tenant \"{0}\"": "You are already signed in to tenant \"{0}\"", "You are not signed in to an Azure account. Please sign in.": "You are not signed in to an Azure account. Please sign in.", "You are not signed in to the MongoDB Cluster. Please sign in (by expanding the node \"{0}\") and try again.": "You are not signed in to the MongoDB Cluster. Please sign in (by expanding the node \"{0}\") and try again.", "You can connect to a different DocumentDB by:": "You can connect to a different DocumentDB by:", diff --git a/package-lock.json b/package-lock.json index b0239bddd..fad2b82e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,127 +1,113 @@ { "name": "vscode-documentdb", - "version": "0.6.1", + "version": "0.6.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vscode-documentdb", - "version": "0.6.1", + "version": "0.6.2", "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "@azure/arm-compute": "^22.4.0", - "@azure/arm-cosmosdb": "16.3.0", - "@azure/arm-mongocluster": "1.1.0-beta.1", + "@azure/arm-cosmosdb": "~16.4.0", + "@azure/arm-mongocluster": "~1.1.0", "@azure/arm-network": "^33.5.0", "@azure/arm-resources": "~6.1.0", - "@azure/cosmos": "~4.5.0", - "@azure/identity": "~4.10.2", - "@fluentui/react-components": "~9.67.0", - "@fluentui/react-icons": "~2.0.306", + "@azure/cosmos": "~4.7.0", + "@azure/identity": "~4.13.0", + "@fluentui/react-components": "~9.72.3", + "@fluentui/react-icons": "~2.0.313", "@microsoft/vscode-azext-azureauth": "~4.1.1", "@microsoft/vscode-azext-azureutils": "~3.4.5", "@microsoft/vscode-azext-utils": "~3.3.1", "@microsoft/vscode-azureresources-api": "~2.5.0", "@monaco-editor/react": "~4.7.0", "@mongodb-js/explain-plan-helper": "1.4.24", - "@trpc/client": "~11.4.3", - "@trpc/server": "~11.4.3", + "@trpc/client": "~11.7.1", + "@trpc/server": "~11.7.1", "@vscode/l10n": "~0.0.18", - "allotment": "~1.20.4", "antlr4ts": "^0.5.0-alpha.4", - "bson": "~6.10.4", + "bson": "~7.0.0", "denque": "~2.1.0", - "es-toolkit": "~1.39.7", - "monaco-editor": "~0.51.0", - "mongodb": "~6.17.0", + "es-toolkit": "~1.42.0", + "monaco-editor": "~0.54.0", + "mongodb": "~7.0.0", "mongodb-connection-string-url": "~3.0.2", - "react-hotkeys-hook": "~5.1.0", + "react-hotkeys-hook": "~5.2.1", "react-markdown": "^10.1.0", "regenerator-runtime": "^0.14.1", - "semver": "~7.7.2", - "slickgrid-react": "~5.14.1", - "vscode-json-languageservice": "~5.6.1", + "semver": "~7.7.3", + "slickgrid-react": "~9.9.0", + "vscode-json-languageservice": "~5.6.2", "vscode-languageclient": "~9.0.1", "vscode-languageserver": "~9.0.1", "vscode-languageserver-textdocument": "~1.0.12", "vscode-uri": "~3.1.0", - "zod": "~4.0.5" + "zod": "~4.1.12" }, "devDependencies": { - "@eslint/js": "~9.31.0", + "@eslint/js": "~9.39.1", "@pmmmwh/react-refresh-webpack-plugin": "~0.6.1", "@swc/cli": "~0.7.8", - "@swc/core": "~1.13.2", + "@swc/core": "~1.15.1", "@swc/jest": "~0.2.39", "@types/documentdb": "~1.10.13", "@types/jest": "~30.0.0", "@types/mocha": "~10.0.10", - "@types/node": "~22.15.32", - "@types/react": "~18.3.23", - "@types/react-dom": "~18.3.7", - "@types/semver": "~7.7.0", + "@types/node": "~22.18.13", + "@types/react": "~19.2.2", + "@types/react-dom": "~19.2.2", + "@types/semver": "~7.7.1", "@types/uuid": "~10.0.0", - "@types/vscode": "1.90.0", + "@types/vscode": "~1.96.0", "@types/vscode-webview": "~1.57.5", "@vscode/l10n-dev": "~0.0.35", - "@vscode/test-cli": "~0.0.11", + "@vscode/test-cli": "~0.0.12", "@vscode/test-electron": "~2.5.2", - "@vscode/vsce": "~3.6.0", + "@vscode/vsce": "~3.7.0", "antlr4ts-cli": "^0.5.0-alpha.4", - "copy-webpack-plugin": "~13.0.0", + "copy-webpack-plugin": "~13.0.1", "cross-env": "~7.0.3", "css-loader": "~7.1.2", - "eslint": "~9.31.0", + "eslint": "~9.39.1", "eslint-plugin-import": "~2.32.0", - "eslint-plugin-jest": "~29.0.1", + "eslint-plugin-jest": "~29.1.0", "eslint-plugin-license-header": "~0.8.0", - "eslint-plugin-mocha": "~11.1.0", - "glob": "~11.0.3", - "globals": "~16.3.0", - "jest": "~30.0.5", - "jest-mock-vscode": "~3.0.5", - "mocha": "~11.7.1", + "eslint-plugin-mocha": "~11.2.0", + "glob": "~12.0.0", + "globals": "~16.5.0", + "jest": "~30.2.0", + "jest-mock-vscode": "~4.0.5", + "mocha": "~11.7.4", "mocha-junit-reporter": "~2.2.1", "mocha-multi-reporters": "~1.5.1", - "monaco-editor-webpack-plugin": "~7.1.0", + "monaco-editor-webpack-plugin": "~7.1.1", "prettier": "~3.6.2", - "prettier-plugin-organize-imports": "~4.2.0", - "react": "~18.3.1", - "react-dom": "~18.3.1", - "react-refresh": "~0.17.0", - "rimraf": "~6.0.1", + "prettier-plugin-organize-imports": "~4.3.0", + "react": "~19.2.0", + "react-dom": "~19.2.0", + "react-refresh": "~0.18.0", + "rimraf": "~6.1.0", "run-script-os": "~1.1.6", - "sass": "~1.89.2", - "sass-loader": "~16.0.5", + "sass": "~1.94.1", + "sass-loader": "~16.0.6", "style-loader": "~4.0.0", "swc-loader": "~0.2.6", "terser-webpack-plugin": "~5.3.14", - "ts-jest": "~29.4.0", + "ts-jest": "~29.4.5", "ts-node": "~10.9.2", - "typescript": "~5.8.3", - "typescript-eslint": "~8.38.0", - "webpack": "~5.95.0", - "webpack-bundle-analyzer": "~4.10.2", + "typescript": "~5.9.3", + "typescript-eslint": "~8.47.0", + "webpack": "~5.103.0", + "webpack-bundle-analyzer": "~5.0.0", "webpack-cli": "~6.0.1", "webpack-dev-server": "~5.2.2" }, "engines": { "node": ">=20.0.0", - "vscode": "^1.90.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" + "npm": ">=10.0.0", + "vscode": "^1.96.0" } }, "node_modules/@azu/format-text": { @@ -159,15 +145,15 @@ } }, "node_modules/@azure-rest/core-client": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-2.5.0.tgz", - "integrity": "sha512-KMVIPxG6ygcQ1M2hKHahF7eddKejYsWTjoLIfTWiqnaj42dBkYzj4+S8rK9xxmlOaEHKZHcMrRbm0NfN4kgwHw==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-2.5.1.tgz", + "integrity": "sha512-EHaOXW0RYDKS5CFffnixdyRPak5ytiCtU7uXDcP/uiY+A6jFRwNGzzJBiznkCzvi5EYpY+YWinieqHb0oY916A==", "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.9.0", - "@azure/core-rest-pipeline": "^1.5.0", - "@azure/core-tracing": "^1.0.1", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" }, @@ -238,27 +224,27 @@ } }, "node_modules/@azure/arm-cosmosdb": { - "version": "16.3.0", - "resolved": "https://registry.npmjs.org/@azure/arm-cosmosdb/-/arm-cosmosdb-16.3.0.tgz", - "integrity": "sha512-Yix2dqg2jI2nh8Eh69jagvlpjZYVaQ2nm5QuinVTd0NTJdcWAC3Ok8drlDmcJJ2T6MdLE0HsF6ftnADNl2PXMA==", + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/@azure/arm-cosmosdb/-/arm-cosmosdb-16.4.0.tgz", + "integrity": "sha512-TBEaKFSKXFlmbrt7xeQrx8amfg09pRd3s5bYixSpXZg4zbnKufPMC3/NC2o0Dkd/G1/oyQe65kxgvzosoggS1g==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.9.0", - "@azure/core-client": "^1.9.2", + "@azure/core-client": "^1.9.3", "@azure/core-lro": "^2.5.4", "@azure/core-paging": "^1.6.2", - "@azure/core-rest-pipeline": "^1.19.0", + "@azure/core-rest-pipeline": "^1.19.1", "tslib": "^2.8.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/arm-mongocluster": { - "version": "1.1.0-beta.1", - "resolved": "https://registry.npmjs.org/@azure/arm-mongocluster/-/arm-mongocluster-1.1.0-beta.1.tgz", - "integrity": "sha512-XGeOhQTmRBCBoRfleTKdFR8Xsfx4BMm5iZqzbg8bFoialk9YynLeZYqyBm5sz8ckakryTHgYwW2KZqMc+65A5Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@azure/arm-mongocluster/-/arm-mongocluster-1.1.0.tgz", + "integrity": "sha512-O//J38/uFZr5C+s2W7oLSPowsIPEt2KfHSIb+KtJsEckegfm5z70CWPWJP764rA7bKPwPfugOJwnLQ9Y8SakbQ==", "license": "MIT", "dependencies": { "@azure-rest/core-client": "^2.3.1", @@ -275,14 +261,14 @@ } }, "node_modules/@azure/arm-mongocluster/node_modules/@azure/core-lro": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-3.3.0.tgz", - "integrity": "sha512-q8onFxe4O2iqPiURwnqAEO/x6oYkU+lHDWOOc16vPonhuNoKeisDPB8xzun25EClCTrd1xG51YfLGMlvKcB9mg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-3.3.1.tgz", + "integrity": "sha512-bulm3klLqIAhzI3iQMYQ42i+V9EnevScsHdI9amFfjaw6OJqPBK1038cq5qachoKV3yt/iQQEDittHmZW2aSuA==", "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.2.0", - "@azure/logger": "^1.0.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", "tslib": "^2.6.2" }, "engines": { @@ -436,13 +422,13 @@ } }, "node_modules/@azure/core-auth": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.0.tgz", - "integrity": "sha512-88Djs5vBvGbHQHf5ZZcaoNHo6Y8BKZkt3cw2iuJIQzLEgH4Ox6Tm4hjFhbqOxyYsgIG/eJbFEHpxRIfEEWv5Ow==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", + "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.11.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", "tslib": "^2.6.2" }, "engines": { @@ -450,17 +436,17 @@ } }, "node_modules/@azure/core-client": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.0.tgz", - "integrity": "sha512-O4aP3CLFNodg8eTHXECaH3B3CjicfzkxVtnrfLkOq0XNP7TIECGfHpK/C6vADZkWP75wzmdBnsIA8ksuJMk18g==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz", + "integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==", "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.4.0", - "@azure/core-rest-pipeline": "^1.20.0", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.6.1", - "@azure/logger": "^1.0.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", "tslib": "^2.6.2" }, "engines": { @@ -468,17 +454,17 @@ } }, "node_modules/@azure/core-http-compat": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.3.0.tgz", - "integrity": "sha512-qLQujmUypBBG0gxHd0j6/Jdmul6ttl24c8WGiLXIk7IHXdBlfoBqW27hyz3Xn6xbfdyVSarl1Ttbk0AwnZBYCw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.3.1.tgz", + "integrity": "sha512-az9BkXND3/d5VgdRRQVkiJb2gOmDU8Qcq4GvjtBmDICNiQ9udFmDk4ZpSB5Qq1OmtDJGlQAfBaS4palFsazQ5g==", "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-client": "^1.3.0", - "@azure/core-rest-pipeline": "^1.20.0" + "@azure/abort-controller": "^2.1.2", + "@azure/core-client": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/core-lro": { @@ -509,16 +495,16 @@ } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.0.tgz", - "integrity": "sha512-OKHmb3/Kpm06HypvB3g6Q3zJuvyXcpxDpCS1PnU8OV6AJgSFaee/covXBcPbWc6XDDxtEPlbi3EMQ6nUiPaQtw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", + "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.8.0", - "@azure/core-tracing": "^1.0.1", - "@azure/core-util": "^1.11.0", - "@azure/logger": "^1.0.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" }, @@ -527,9 +513,9 @@ } }, "node_modules/@azure/core-tracing": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.0.tgz", - "integrity": "sha512-+XvmZLLWPe67WXNZo9Oc9CrPj/Tm8QnHR92fFAFdnbzwNdCH1h+7UdpaQgRSBsMY+oW1kHXNUZQLdZ1gHX3ROw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", + "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", "license": "MIT", "dependencies": { "tslib": "^2.6.2" @@ -539,12 +525,12 @@ } }, "node_modules/@azure/core-util": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.0.tgz", - "integrity": "sha512-o0psW8QWQ58fq3i24Q1K2XfS/jYTxr7O1HRcyUE9bV9NttLU+kYOH82Ixj8DGlMTOWgxm1Sss2QAfKK5UkSPxw==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", + "@azure/abort-controller": "^2.1.2", "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" }, @@ -553,9 +539,9 @@ } }, "node_modules/@azure/cosmos": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@azure/cosmos/-/cosmos-4.5.0.tgz", - "integrity": "sha512-JsTh4twb6FcwP7rJwxQiNZQ/LGtuF6gmciaxY9Rnp6/A325Lhsw/SH4R2ArpT0yCvozbZpweIwdPfUkXVBtp5w==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@azure/cosmos/-/cosmos-4.7.0.tgz", + "integrity": "sha512-a8OV7E41u/ZDaaaDAFdqTTiJ7c82jZc/+ot3XzNCIIilR25NBB+1ixzWQOAgP8SHRUIKfaUl6wAPdTuiG9I66A==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", @@ -575,9 +561,9 @@ } }, "node_modules/@azure/identity": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.10.2.tgz", - "integrity": "sha512-Uth4vz0j+fkXCkbvutChUj03PDCokjbC6Wk9JT8hHEUtpy/EurNKAseb3+gO6Zi9VYBvwt61pgbzn1ovk942Qg==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.0.tgz", + "integrity": "sha512-uWC0fssc+hs1TGGVkkghiaFkkS7NkTxfnCH+Hdg+yTehTpMcehpok4PgUKKdyCH+9ldu6FhiHRv84Ntqj1vVcw==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -658,33 +644,33 @@ "license": "MIT" }, "node_modules/@azure/msal-browser": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.16.0.tgz", - "integrity": "sha512-yF8gqyq7tVnYftnrWaNaxWpqhGQXoXpDfwBtL7UCGlIbDMQ1PUJF/T2xCL6NyDNHoO70qp1xU8GjjYTyNIefkw==", + "version": "4.26.2", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.26.2.tgz", + "integrity": "sha512-F2U1mEAFsYGC5xzo1KuWc/Sy3CRglU9Ql46cDUx8x/Y3KnAIr1QAq96cIKCk/ZfnVxlvprXWRjNKoEpgLJXLhg==", "license": "MIT", "dependencies": { - "@azure/msal-common": "15.9.0" + "@azure/msal-common": "15.13.2" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "15.9.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.9.0.tgz", - "integrity": "sha512-lbz/D+C9ixUG3hiZzBLjU79a0+5ZXCorjel3mwXluisKNH0/rOS/ajm8yi4yI9RP5Uc70CAcs9Ipd0051Oh/kA==", + "version": "15.13.2", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.13.2.tgz", + "integrity": "sha512-cNwUoCk3FF8VQ7Ln/MdcJVIv3sF73/OT86cRH81ECsydh7F4CNfIo2OAx6Cegtg8Yv75x4506wN4q+Emo6erOA==", "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-node": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.6.4.tgz", - "integrity": "sha512-jMeut9UQugcmq7aPWWlJKhJIse4DQ594zc/JaP6BIxg55XaX3aM/jcPuIQ4ryHnI4QSf03wUspy/uqAvjWKbOg==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.3.tgz", + "integrity": "sha512-Ul7A4gwmaHzYWj2Z5xBDly/W8JSC1vnKgJ898zPMZr0oSf1ah0tiL15sytjycU/PMhDZAlkWtEL1+MzNMU6uww==", "license": "MIT", "dependencies": { - "@azure/msal-common": "15.9.0", + "@azure/msal-common": "15.13.2", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, @@ -708,9 +694,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", - "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", "dev": true, "license": "MIT", "engines": { @@ -718,22 +704,22 @@ } }, "node_modules/@babel/core": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", - "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", + "@babel/generator": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.6", - "@babel/parser": "^7.28.0", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.0", - "@babel/types": "^7.28.0", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -759,14 +745,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", - "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.0", - "@babel/types": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -844,15 +830,15 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -882,9 +868,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", "engines": { @@ -902,27 +888,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz", - "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2" + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", - "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.0" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -1171,9 +1157,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", - "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1195,18 +1181,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", - "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", + "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.0", + "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", - "@babel/types": "^7.28.0", + "@babel/types": "^7.28.5", "debug": "^4.3.1" }, "engines": { @@ -1214,25 +1200,39 @@ } }, "node_modules/@babel/types": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", - "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@borewit/text-codec": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.1.1.tgz", + "integrity": "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", @@ -1278,21 +1278,21 @@ } }, "node_modules/@emnapi/core": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz", - "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", + "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.0.4", + "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", - "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", "dev": true, "license": "MIT", "optional": true, @@ -1301,9 +1301,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz", - "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", "dev": true, "license": "MIT", "optional": true, @@ -1318,9 +1318,9 @@ "license": "MIT" }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, "license": "MIT", "dependencies": { @@ -1350,9 +1350,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -1360,13 +1360,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.6", + "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -1399,19 +1399,22 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", - "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1494,9 +1497,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -1527,9 +1530,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.31.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz", - "integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==", + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", + "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", "dev": true, "license": "MIT", "engines": { @@ -1540,9 +1543,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1550,13 +1553,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.1", + "@eslint/core": "^0.17.0", "levn": "^0.4.1" }, "engines": { @@ -1564,9 +1567,9 @@ } }, "node_modules/@excel-builder-vanilla/types": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@excel-builder-vanilla/types/-/types-3.1.0.tgz", - "integrity": "sha512-BcCMAFI3XtuJ0AUnkCIP3SSyz7tn3kNp32Ew3JTxCpkluVDgty1AIIr7hUngHhNdwNx6WkFOyniJz/KIYJtcTQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@excel-builder-vanilla/types/-/types-4.2.1.tgz", + "integrity": "sha512-AtVzHKfH7TtRTH7Yczwu6SMXYhmvO+W6H2L4ktg7JesK4cHSS7FinzFk+zkPWs2ROZEXYHLZxJTGY7OrhiOTjw==", "license": "MIT", "dependencies": { "fflate": "^0.8.2" @@ -1577,29 +1580,30 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.2.tgz", - "integrity": "sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", "license": "MIT", "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "node_modules/@floating-ui/devtools": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@floating-ui/devtools/-/devtools-0.2.1.tgz", - "integrity": "sha512-8PHJLbD6VhBh+LJ1uty/Bz30qs02NXCE5u8WpOhSewlYXUWl03GNXknr9AS2yaAWJEQaY27x7eByJs44gODBcw==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@floating-ui/devtools/-/devtools-0.2.3.tgz", + "integrity": "sha512-ZTcxTvgo9CRlP7vJV62yCxdqmahHTGpSTi5QaTDgGoyQq0OyjaVZhUhXv/qdkQFOI3Sxlfmz0XGG4HaZMsDf8Q==", + "license": "MIT", "peerDependencies": { - "@floating-ui/dom": ">=1.5.4" + "@floating-ui/dom": "^1.0.0" } }, "node_modules/@floating-ui/dom": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.2.tgz", - "integrity": "sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.2", + "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, @@ -1619,1530 +1623,1533 @@ } }, "node_modules/@fluentui/priority-overflow": { - "version": "9.1.15", - "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.1.15.tgz", - "integrity": "sha512-/3jPBBq64hRdA416grVj+ZeMBUIaKZk2S5HiRg7CKCAV1JuyF84Do0rQI6ns8Vb9XOGuc4kurMcL/UEftoEVrg==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.2.1.tgz", + "integrity": "sha512-WH5dv54aEqWo/kKQuADAwjv66W6OUMFllQMjpdkrktQp7pu4JXtmF60iYcp9+iuIX9iCeW01j8gNTU08MQlfIQ==", "license": "MIT", "dependencies": { "@swc/helpers": "^0.5.1" } }, "node_modules/@fluentui/react-accordion": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.8.0.tgz", - "integrity": "sha512-YHvTZCdARlDKF69qt3nQc+Q4N3uFTUDmZGg97/H+HZAbpTlwnQVsw//y860M828d5SMyvutNm6BGqpsb+XBudw==", + "version": "9.8.14", + "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.8.14.tgz", + "integrity": "sha512-jTcfYDRUotRhUEjE1LeG1Qm10515CQUKxHWQhppBYhq7yAZcS5jOms5tMZHtHs0EQsWv3nMgUYYqoOqAsU0jDQ==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.15.4", - "@fluentui/react-context-selector": "^9.2.2", + "@fluentui/react-aria": "^9.17.6", + "@fluentui/react-context-selector": "^9.2.12", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-motion": "^9.9.0", - "@fluentui/react-motion-components-preview": "^0.7.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-motion": "^9.11.4", + "@fluentui/react-motion-components-preview": "^0.14.1", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-alert": { - "version": "9.0.0-beta.124", - "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.124.tgz", - "integrity": "sha512-yFBo3B5H9hnoaXxlkuz8wRz04DEyQ+ElYA/p5p+Vojf19Zuta8DmFZZ6JtWdtxcdnnQ4LvAfC5OYYlzdReozPA==", + "version": "9.0.0-beta.129", + "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.129.tgz", + "integrity": "sha512-afS5Mvf9EH5je3ZOnF96GNaXL5nA/eI69AhO4nsbsvc1RaO/CkEt9+6iVyGy2zeqbQgpsP9UkNwEYyToQ1CrzA==", "license": "MIT", "dependencies": { - "@fluentui/react-avatar": "^9.6.29", - "@fluentui/react-button": "^9.3.83", + "@fluentui/react-avatar": "^9.9.12", + "@fluentui/react-button": "^9.6.12", "@fluentui/react-icons": "^2.0.239", - "@fluentui/react-jsx-runtime": "^9.0.39", - "@fluentui/react-tabster": "^9.21.5", - "@fluentui/react-theme": "^9.1.19", - "@fluentui/react-utilities": "^9.18.10", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-aria": { - "version": "9.15.4", - "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.15.4.tgz", - "integrity": "sha512-5t/BrCQOWz3ZAbCy6RHN3iT3+MiwbHe3ESZXoxSquxVJzBjDixuvzhnls83cqC86OaWi2fp2kI8e3/BvLA54+Q==", + "version": "9.17.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.17.6.tgz", + "integrity": "sha512-O421keKMgf9BkHH15kTnKGFuCFKN3ukydJLEfSQJmOfdAHyJMzAul8/zMvkd4vmMr84+PtZUD1+Tylk4NvpN4g==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-utilities": "^9.22.0", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-utilities": "^9.25.4", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-avatar": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.9.0.tgz", - "integrity": "sha512-2KWRkz7khP42ROD/thdID+dHhyCz8irQp37pD3pyLRAZe7Su1ckkjbaSB3aBl3ee0rmVq8vQmyulshsGZkyFJg==", + "version": "9.9.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.9.12.tgz", + "integrity": "sha512-dlJ5mOKCDChMAECFhpcPHoQicA28ATWQXLtz26hAuVJH2/gC/6mZ0j7drIVl9YECqT/ZbZ3/hpVeZu/S/FVrOA==", "license": "MIT", "dependencies": { - "@fluentui/react-badge": "^9.4.0", - "@fluentui/react-context-selector": "^9.2.2", + "@fluentui/react-badge": "^9.4.11", + "@fluentui/react-context-selector": "^9.2.12", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-popover": "^9.12.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-tooltip": "^9.8.0", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-popover": "^9.12.12", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-tooltip": "^9.8.11", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-badge": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.4.0.tgz", - "integrity": "sha512-FS12bACA0i5YFwTjYT1aF0NBSoNgPdZTNXM/MqJpqOq6UyCylRf75ro06a0LduU671gB578Ap+yzk8E3+Ia9NQ==", + "version": "9.4.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.4.11.tgz", + "integrity": "sha512-u2gTg+QeD5uaieAwE89n8MLg2MyZN/kGMx3hJewFKtq3SzvU4xcgcna2Gp4UgpaA3pnGZsJjjjDIHwsv4EyO9Q==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-breadcrumb": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.3.0.tgz", - "integrity": "sha512-t8EAbhyO/wFJAzEr921Oag0yrkKcX6zprqzJ1dybWv8ndyjbJdQcut0fkOeMwmXCgu3MoBirW27s+4gHODwidw==", + "version": "9.3.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.3.12.tgz", + "integrity": "sha512-cT5xmYQbAYH7HslJu6O5WvSYzsBvaQ54Q6yIPgV5kCo5n3M6OSrJ0Ga6Zbfqid/GnY4G60FfjOvbfHNNhmx2Sw==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.15.4", - "@fluentui/react-button": "^9.6.0", + "@fluentui/react-aria": "^9.17.6", + "@fluentui/react-button": "^9.6.12", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-link": "^9.6.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-link": "^9.7.0", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-button": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.6.0.tgz", - "integrity": "sha512-rsSGqJrXs4NL8Lo/2BCDEGYZrGj3Kkg2crVYnG3xBC2GMFGmlww+ovsIUcWhMo6KRY87F8dyqUcqX1g+HJNv/A==", + "version": "9.6.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.6.12.tgz", + "integrity": "sha512-seI9L9O0fCHzlfKD/via1qqzaLFeiFKQeR1/97nXL06reC3DqLSCeiZP3UTxFljFE1CYZQRJfk1wH/D6j0ZCTA==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.15.4", + "@fluentui/react-aria": "^9.17.6", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-card": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.4.0.tgz", - "integrity": "sha512-hH862zMzVVS1BRE2UGH8ZrLT0z1yLg4LRn4L8onEfCAKj5E65o+trGH4T6c0TOLexNyJKeF6bqrQDUtbT35pIA==", + "version": "9.5.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.5.6.tgz", + "integrity": "sha512-hCY6VWrKqq+y0yqUkqgkpTN5TVJSU5ZlKtZU+Sed+TlnKlojkS6cYRvsnWdAKwyFLJF9ZYTn+uos9Vi0wQyjtg==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-text": "^9.6.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-text": "^9.6.11", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-carousel": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-carousel/-/react-carousel-9.8.0.tgz", - "integrity": "sha512-6BRHOSzaY7gkSvktaHBfa3FE/Tdmjel0o1lrR0Zl1D0kdbUDtY8ICb0FtROJ4YLSE2YyLWmAMlR3MbxKWPmCcw==", + "version": "9.8.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-carousel/-/react-carousel-9.8.12.tgz", + "integrity": "sha512-Gjn6cd67FodcjfU2MQTBI2xjijzgy54TdQA8vxObZ27I6y9OHeDR07PWTqaCkX8mcBR8ilTxVD5bQ+zuqfb66g==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.15.4", - "@fluentui/react-button": "^9.6.0", - "@fluentui/react-context-selector": "^9.2.2", + "@fluentui/react-aria": "^9.17.6", + "@fluentui/react-button": "^9.6.12", + "@fluentui/react-context-selector": "^9.2.12", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-tooltip": "^9.8.0", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-tooltip": "^9.8.11", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1", "embla-carousel": "^8.5.1", "embla-carousel-autoplay": "^8.5.1", "embla-carousel-fade": "^8.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-checkbox": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.5.0.tgz", - "integrity": "sha512-HB4zac4C0Msqbrjl7AOTuEMnmpEyKeNTaKc8eb9MDU8xJVWzWS5Q91TWpmXOXgneaG3/pu5ops749zBmlCU1Pg==", + "version": "9.5.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.5.11.tgz", + "integrity": "sha512-M8DTBQK0Z7+HKfRx4mjypH0fEagKK7YMNhGMy18aW3iYWeooA0ut81MzsRM5feqhl+Q8v4VJ0aN9qHNqshkD5g==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.4.0", + "@fluentui/react-field": "^9.4.11", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-label": "^9.3.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-label": "^9.3.11", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-color-picker": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-color-picker/-/react-color-picker-9.2.0.tgz", - "integrity": "sha512-4E6woOMxj4Tyy0sHAORR8pGUlZbtoGgQ6UsdQ38SWEU+f/zo/2SsyJOqtuMur67+ThAoJR5bq+W3mLGi8WhAPA==", + "version": "9.2.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-color-picker/-/react-color-picker-9.2.11.tgz", + "integrity": "sha512-L1ZKJAyioey3glmzMrpawUrzsdu/Nz0m6nVMOznJVuw0vu0BfQuMh/1/0QOoGYXFEbsc4+gSGSCnah4X0EJIsQ==", "license": "MIT", "dependencies": { "@ctrl/tinycolor": "^3.3.4", - "@fluentui/react-context-selector": "^9.2.2", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-context-selector": "^9.2.12", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-combobox": { - "version": "9.16.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.16.0.tgz", - "integrity": "sha512-w84o5ubLL4MCfbzb/xCRoWjc1S2ZGk0Ci8PEXkP+CFAl3SxAORJISAiMCbfk+ZoWAwNLFcHNO6UFj2XH+fWkbA==", + "version": "9.16.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.16.12.tgz", + "integrity": "sha512-SimZpXzTGyDAGHQZmzUl9AsrIOlLDinTbvEwELEYh9X+yE33SZatcPwdpCmBXldBOs/eh+xOuNSOwgerJ3T3qQ==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.15.4", - "@fluentui/react-context-selector": "^9.2.2", - "@fluentui/react-field": "^9.4.0", + "@fluentui/react-aria": "^9.17.6", + "@fluentui/react-context-selector": "^9.2.12", + "@fluentui/react-field": "^9.4.11", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-portal": "^9.7.0", - "@fluentui/react-positioning": "^9.20.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-portal": "^9.8.8", + "@fluentui/react-positioning": "^9.20.10", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-components": { - "version": "9.67.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.67.0.tgz", - "integrity": "sha512-692/t+6te3HO0/tA5585CrA9FA6AIR7a6UVJ/p6Cah0cwRfi/ffeNYZ5fhZHX/46DU0SRfAXemcsoFE1cgKpYA==", - "license": "MIT", - "dependencies": { - "@fluentui/react-accordion": "^9.8.0", - "@fluentui/react-alert": "9.0.0-beta.124", - "@fluentui/react-aria": "^9.15.4", - "@fluentui/react-avatar": "^9.9.0", - "@fluentui/react-badge": "^9.4.0", - "@fluentui/react-breadcrumb": "^9.3.0", - "@fluentui/react-button": "^9.6.0", - "@fluentui/react-card": "^9.4.0", - "@fluentui/react-carousel": "^9.8.0", - "@fluentui/react-checkbox": "^9.5.0", - "@fluentui/react-color-picker": "^9.2.0", - "@fluentui/react-combobox": "^9.16.0", - "@fluentui/react-dialog": "^9.14.0", - "@fluentui/react-divider": "^9.4.0", - "@fluentui/react-drawer": "^9.9.0", - "@fluentui/react-field": "^9.4.0", - "@fluentui/react-image": "^9.3.0", - "@fluentui/react-infobutton": "9.0.0-beta.102", - "@fluentui/react-infolabel": "^9.4.0", - "@fluentui/react-input": "^9.7.0", - "@fluentui/react-label": "^9.3.0", - "@fluentui/react-link": "^9.6.0", - "@fluentui/react-list": "^9.3.0", - "@fluentui/react-menu": "^9.19.0", - "@fluentui/react-message-bar": "^9.6.0", - "@fluentui/react-motion": "^9.9.0", - "@fluentui/react-nav": "^9.3.0", - "@fluentui/react-overflow": "^9.5.0", - "@fluentui/react-persona": "^9.5.0", - "@fluentui/react-popover": "^9.12.0", - "@fluentui/react-portal": "^9.7.0", - "@fluentui/react-positioning": "^9.20.0", - "@fluentui/react-progress": "^9.4.0", - "@fluentui/react-provider": "^9.22.0", - "@fluentui/react-radio": "^9.5.0", - "@fluentui/react-rating": "^9.3.0", - "@fluentui/react-search": "^9.3.0", - "@fluentui/react-select": "^9.4.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-skeleton": "^9.4.0", - "@fluentui/react-slider": "^9.5.0", - "@fluentui/react-spinbutton": "^9.5.0", - "@fluentui/react-spinner": "^9.7.0", - "@fluentui/react-swatch-picker": "^9.4.0", - "@fluentui/react-switch": "^9.4.0", - "@fluentui/react-table": "^9.18.0", - "@fluentui/react-tabs": "^9.9.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-tag-picker": "^9.7.0", - "@fluentui/react-tags": "^9.7.0", - "@fluentui/react-teaching-popover": "^9.6.0", - "@fluentui/react-text": "^9.6.0", - "@fluentui/react-textarea": "^9.6.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-toast": "^9.6.0", - "@fluentui/react-toolbar": "^9.6.0", - "@fluentui/react-tooltip": "^9.8.0", - "@fluentui/react-tree": "^9.12.0", - "@fluentui/react-utilities": "^9.22.0", - "@fluentui/react-virtualizer": "9.0.0-alpha.100", - "@griffel/react": "^1.5.22", + "version": "9.72.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.72.7.tgz", + "integrity": "sha512-tuC8ZMBQicF4p+f9MJv9cVYZUSktQVreAGJq/YJxQ0Ts1mO2rnAuIBkBFlgjnjyebDiAO1FoAAz/wW99hrIh6A==", + "license": "MIT", + "dependencies": { + "@fluentui/react-accordion": "^9.8.14", + "@fluentui/react-alert": "9.0.0-beta.129", + "@fluentui/react-aria": "^9.17.6", + "@fluentui/react-avatar": "^9.9.12", + "@fluentui/react-badge": "^9.4.11", + "@fluentui/react-breadcrumb": "^9.3.12", + "@fluentui/react-button": "^9.6.12", + "@fluentui/react-card": "^9.5.6", + "@fluentui/react-carousel": "^9.8.12", + "@fluentui/react-checkbox": "^9.5.11", + "@fluentui/react-color-picker": "^9.2.11", + "@fluentui/react-combobox": "^9.16.12", + "@fluentui/react-dialog": "^9.16.3", + "@fluentui/react-divider": "^9.4.11", + "@fluentui/react-drawer": "^9.10.9", + "@fluentui/react-field": "^9.4.11", + "@fluentui/react-image": "^9.3.11", + "@fluentui/react-infobutton": "9.0.0-beta.107", + "@fluentui/react-infolabel": "^9.4.12", + "@fluentui/react-input": "^9.7.11", + "@fluentui/react-label": "^9.3.11", + "@fluentui/react-link": "^9.7.0", + "@fluentui/react-list": "^9.6.6", + "@fluentui/react-menu": "^9.20.5", + "@fluentui/react-message-bar": "^9.6.14", + "@fluentui/react-motion": "^9.11.4", + "@fluentui/react-nav": "^9.3.14", + "@fluentui/react-overflow": "^9.6.5", + "@fluentui/react-persona": "^9.5.12", + "@fluentui/react-popover": "^9.12.12", + "@fluentui/react-portal": "^9.8.8", + "@fluentui/react-positioning": "^9.20.10", + "@fluentui/react-progress": "^9.4.11", + "@fluentui/react-provider": "^9.22.11", + "@fluentui/react-radio": "^9.5.11", + "@fluentui/react-rating": "^9.3.11", + "@fluentui/react-search": "^9.3.11", + "@fluentui/react-select": "^9.4.11", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-skeleton": "^9.4.11", + "@fluentui/react-slider": "^9.5.11", + "@fluentui/react-spinbutton": "^9.5.11", + "@fluentui/react-spinner": "^9.7.11", + "@fluentui/react-swatch-picker": "^9.4.11", + "@fluentui/react-switch": "^9.4.11", + "@fluentui/react-table": "^9.19.5", + "@fluentui/react-tabs": "^9.10.7", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-tag-picker": "^9.7.12", + "@fluentui/react-tags": "^9.7.12", + "@fluentui/react-teaching-popover": "^9.6.12", + "@fluentui/react-text": "^9.6.11", + "@fluentui/react-textarea": "^9.6.11", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-toast": "^9.7.9", + "@fluentui/react-toolbar": "^9.6.12", + "@fluentui/react-tooltip": "^9.8.11", + "@fluentui/react-tree": "^9.15.6", + "@fluentui/react-utilities": "^9.25.4", + "@fluentui/react-virtualizer": "9.0.0-alpha.107", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-context-selector": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.2.2.tgz", - "integrity": "sha512-R9710dBH2AYNbdQz0UpvSqoA8YZ8vVicyqGvWPKvDGCNbZB6GY1Cu5LbODpeAthylLXhgXxIlGEcoOpjBBpRbA==", + "version": "9.2.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.2.12.tgz", + "integrity": "sha512-4hj+rv+4Uwn9EeDyXD1YCEpVkm0iMLG403QAGd5vZZhcgB2tg/iazewKeTff+HMRkusx+lWBYzBEGcRohY/FiA==", "license": "MIT", "dependencies": { - "@fluentui/react-utilities": "^9.22.0", + "@fluentui/react-utilities": "^9.25.4", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0", - "scheduler": ">=0.19.0 <=0.23.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0", + "scheduler": ">=0.19.0" } }, "node_modules/@fluentui/react-dialog": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.14.0.tgz", - "integrity": "sha512-FgvxWVwET9niVhWoD1gpEx7MICOCDncTyreJV12KmCVC0eYxvun0uQmA6FXVnh+3yh/9AhIH0KfiKa0C8qsP7g==", + "version": "9.16.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.16.3.tgz", + "integrity": "sha512-aUnErTbSf2oqrqbQOCrjXp/12qHVfnxCR71/5hXJLME7BtYZ/m2lvs5r9MTjQSXBy8ar4G5jobS/+XJ0Lq3XqA==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.15.4", - "@fluentui/react-context-selector": "^9.2.2", + "@fluentui/react-aria": "^9.17.6", + "@fluentui/react-context-selector": "^9.2.12", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-motion": "^9.9.0", - "@fluentui/react-motion-components-preview": "^0.7.0", - "@fluentui/react-portal": "^9.7.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-motion": "^9.11.4", + "@fluentui/react-motion-components-preview": "^0.14.1", + "@fluentui/react-portal": "^9.8.8", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-divider": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.4.0.tgz", - "integrity": "sha512-WLs/12FP7Yf+SYCISzxGaNbLvJjZyBcUFbG9KhhRmt5CcwIklTinEJWW3qXcAmS+nHuGdkwpgC/avgEjzpYMcg==", + "version": "9.4.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.4.11.tgz", + "integrity": "sha512-aESagOX6l7Ja9lb+3zJa6V5m1mjFnI4NEu8TccAu1VUlMZxX6flbMBJplgjN76dJjcHgs8uoa5xxxD74WNZBXg==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-drawer": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.9.0.tgz", - "integrity": "sha512-HjW13Tikmk7s/XUKGoYn6MKsvm9gmO6Og8h3PtcWIccsXBUesQtWAgNJpgvprEDKHFwLF5aB1fHqYDsStbrLCw==", - "license": "MIT", - "dependencies": { - "@fluentui/react-dialog": "^9.14.0", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-motion": "^9.9.0", - "@fluentui/react-portal": "^9.7.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "version": "9.10.9", + "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.10.9.tgz", + "integrity": "sha512-tlHZBkILOHnA7Lg2v/vzmOvTNrPYJnPJAqiceuFlUZWncIWWAUfpw4Teh5V0wGNr6/yC/HjUD5xnynvIhr/ZuA==", + "license": "MIT", + "dependencies": { + "@fluentui/react-dialog": "^9.16.3", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-motion": "^9.11.4", + "@fluentui/react-motion-components-preview": "^0.14.1", + "@fluentui/react-portal": "^9.8.8", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-field": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.4.0.tgz", - "integrity": "sha512-X4XWe1gWVxUP6Oa395Ekpdtj9FX2WAWPj5+DGW8OGB7SNJA67cEP/E8FCEA/tflm0eZXaHVFThh0yElf1KX7nw==", + "version": "9.4.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.4.11.tgz", + "integrity": "sha512-kF93G+LGEKaFJcEAUHJKZUc1xeV/q+JTygYVnEDkPbQ/4j+l+J3rVuHL8U7bhE+8cJG3wDP8jt4jqHsDgKyn5w==", "license": "MIT", "dependencies": { - "@fluentui/react-context-selector": "^9.2.2", + "@fluentui/react-context-selector": "^9.2.12", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-label": "^9.3.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-label": "^9.3.11", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-icons": { - "version": "2.0.306", - "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.306.tgz", - "integrity": "sha512-zS66O59F8gvwjaaIchguMVTwmI3qplwJrm5F8c17rfdrqtFhJKMM2Udef6DWHA7XtnQA8OfvYz2GGrE+GBy/KA==", + "version": "2.0.315", + "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.315.tgz", + "integrity": "sha512-IITWAQGgU7I32eHPDHi+TUCUF6malP27wZLUV3bqjGVF/x/lfxvTIx8yqv/cxuwF3+ITGFDpl+278ZYJtOI7ww==", "license": "MIT", "dependencies": { "@griffel/react": "^1.0.0", "tslib": "^2.1.0" }, "peerDependencies": { - "react": ">=16.8.0 <19.0.0" + "react": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-image": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.3.0.tgz", - "integrity": "sha512-qhKZ6Dj267UPvnAwzmvLD3JDb8zSCEtkL2c9CLyUAcuuvT4KubhNsLudY//1EMiC5a+Du0gC2lcxRT84PQ2NZg==", + "version": "9.3.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.3.11.tgz", + "integrity": "sha512-aLpz0/C6T0Uit6SmyhOJjYBvndZzfvmKv1vg+JRnE0aHS5jSUPoCLI6apxyMC6/LcqqTBklpqK3AD9kYpUxfqQ==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-infobutton": { - "version": "9.0.0-beta.102", - "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.102.tgz", - "integrity": "sha512-3kA4F0Vga8Ds6JGlBajLCCDOo/LmPuS786Wg7ui4ZTDYVIMzy1yp2XuVcZniifBFvEp0HQCUoDPWUV0VI3FfzQ==", + "version": "9.0.0-beta.107", + "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.107.tgz", + "integrity": "sha512-BcI4e+Oj1B/Qk4CMd0O9H0YF+IL4nhK8xuzI5bsZ5mdCaXiwIBgy5RyP8HVSq3y+Ml4XD2IRwufplcxF2cgTOA==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.237", - "@fluentui/react-jsx-runtime": "^9.0.36", - "@fluentui/react-label": "^9.1.68", - "@fluentui/react-popover": "^9.9.6", - "@fluentui/react-tabster": "^9.21.0", - "@fluentui/react-theme": "^9.1.19", - "@fluentui/react-utilities": "^9.18.7", - "@griffel/react": "^1.5.14", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-label": "^9.3.11", + "@fluentui/react-popover": "^9.12.12", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-infolabel": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.4.0.tgz", - "integrity": "sha512-ABSzkV/FN0TfKRXbarb+/dWihgKpqDeS5YWf69pCeXg7s+Ls3UQn/7+mgBjHcMOoRpbqW45bOzCoC+6Iqb2ggg==", + "version": "9.4.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.4.12.tgz", + "integrity": "sha512-inXlz5EAwQHKsGyB3wc5WmgQ1F9zc18x0HRd/otc2R7Oo1yRW5hXQCG5K5A9/wUge2pRiQVcBCsIurggmCNUhA==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-label": "^9.3.0", - "@fluentui/react-popover": "^9.12.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-label": "^9.3.11", + "@fluentui/react-popover": "^9.12.12", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.8.0 <20.0.0", + "@types/react-dom": ">=16.8.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-input": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.7.0.tgz", - "integrity": "sha512-rJCVaVnAidVtp//DQFaz1vHMbiNVcxZPjvZ9xfIpdRjFk+kSEkcRj1AT/iCMqwTXhJb9hYIMJRE+gPQoTiQYdQ==", + "version": "9.7.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.7.11.tgz", + "integrity": "sha512-ae/5ttJf25+J8akeEXpXRFqUAePPt2Moyfx4Tj0u7ZgG1U9IFbcBsshKEHAmIaygueXf6KdRyOduh1CF6a/D2w==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.4.0", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-field": "^9.4.11", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-jsx-runtime": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.1.2.tgz", - "integrity": "sha512-igGuh0P7Gd09Kk3g6JwjnaRIRk+mluCbpf+KcAUde6bxZ/5qB50HGX+DOGWa3+RPd5240+HLBxpT3Y985INgqw==", + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.3.3.tgz", + "integrity": "sha512-KOy85JqR6MSmp7OKUk/IPleaRlUSWF247AM2Ksu9uEKzDBQ2MO3sYUt8X9457GZjIuKLn5J2Vk127W/Khe+/Bg==", "license": "MIT", "dependencies": { - "@fluentui/react-utilities": "^9.22.0", + "@fluentui/react-utilities": "^9.25.4", "@swc/helpers": "^0.5.1", "react-is": "^17.0.2" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "react": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "react": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-label": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.3.0.tgz", - "integrity": "sha512-HRSi4TBEjkJoeNZ9FOL8VPnOwrKrJp5drd1f00cICwRz7cimSZt56C97BwM9IB41nEdF3Yk3MLd4Hea1PO+Msg==", + "version": "9.3.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.3.11.tgz", + "integrity": "sha512-9LORj4JQJCbp2J5ftW7ZjDxzD3Y4BkszX3Y7L1mK8DPRVAKOuGiakbH7U0q7ClGOMhCinWIQJjKAwzPZLo7xgA==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-link": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.6.0.tgz", - "integrity": "sha512-2G+IWuT98pt1HwJWuL9VuTQesUdYjDooK/LPUOsXaVwwGP71lKBXQ6B7ZBw5bqDt3dwborTugyG6RlD7aDpPbw==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.7.0.tgz", + "integrity": "sha512-NQ5Jhe5WBYfANSmIcl6fE/oBeh7G4iAq1FU9L/hyva5dxQ9OtiOpU5wxqVFLKEID/r144rhdtOZPL5AcAuJKdg==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-list": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-list/-/react-list-9.3.0.tgz", - "integrity": "sha512-OsYz2ULKXnFEExZW8FaUk1+cjPcFIrtRlwytKDAnRvwyBLIhhQezRWWTEVpc2M75NmZbkZtqyDujdB/ZdSlOmA==", + "version": "9.6.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-list/-/react-list-9.6.6.tgz", + "integrity": "sha512-t0ret56WXP86rDfnhuRrWg/DuS2zZkomB/Nu444rVygE8hsjPUTm5DXx7JKy+sGKVLyFbtsbXNMICkbxhGSSRA==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-checkbox": "^9.5.0", - "@fluentui/react-context-selector": "^9.2.2", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-checkbox": "^9.5.11", + "@fluentui/react-context-selector": "^9.2.12", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.8.0 <20.0.0", + "@types/react-dom": ">=16.8.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-menu": { - "version": "9.19.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.19.0.tgz", - "integrity": "sha512-Wy/8DaHXEtntJk2onVWZI19AHIJkAJB9gXjXrKFk4DbSX0n9Brj06dBu9lZzl5q4i7cUQhg9sMayle3ovspX6w==", + "version": "9.20.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.20.5.tgz", + "integrity": "sha512-vshb/OXBZxvk+ghdmdVb2mJ/LJBYjlwpZRhWGJ8ZU0hmPTh74m5jTFWditSk8aL9oMvVuIo0MYLQyUJyJsFoqg==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.15.4", - "@fluentui/react-context-selector": "^9.2.2", + "@fluentui/react-aria": "^9.17.6", + "@fluentui/react-context-selector": "^9.2.12", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-portal": "^9.7.0", - "@fluentui/react-positioning": "^9.20.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-portal": "^9.8.8", + "@fluentui/react-positioning": "^9.20.10", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-message-bar": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.6.0.tgz", - "integrity": "sha512-sGVd+wK2NsiHBcGl1Pw3P4LJW50hbaN4+4NA5udCwbtIW97lO2zMFJtROU+oBYkmV0HbJ9jSxOYyeMmndjKjAQ==", + "version": "9.6.14", + "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.6.14.tgz", + "integrity": "sha512-UR4Uvkx4VHQyS04T5ikf9gYOH52dloo1vjmK+pFKiqRzZhflHEXID9R1AZFuuZ572KUMXnxRlyEevpXnWqE70w==", "license": "MIT", "dependencies": { - "@fluentui/react-button": "^9.6.0", + "@fluentui/react-button": "^9.6.12", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-link": "^9.6.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", - "@swc/helpers": "^0.5.1", - "react-transition-group": "^4.4.1" + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-link": "^9.7.0", + "@fluentui/react-motion": "^9.11.4", + "@fluentui/react-motion-components-preview": "^0.14.1", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.8.0 <20.0.0", + "@types/react-dom": ">=16.8.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-motion": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-motion/-/react-motion-9.9.0.tgz", - "integrity": "sha512-xgm/CkU1UvemooplEFKJL9mfGJFvzId2DJ1WYTFAa5TSZMtzOAZuPuwS/PrPNFuwjnhvCMShDj8zazgvR5i37A==", + "version": "9.11.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-motion/-/react-motion-9.11.4.tgz", + "integrity": "sha512-rLxz6DSAtp3O+W+mJnov2qXtvZkIgcC1BQOAyUH6tl6u2YmsC1/zRKWhVsf/WUgZwqu3G4jlq15ptyuCITAcDA==", "license": "MIT", "dependencies": { - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-utilities": "^9.22.0", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-utilities": "^9.25.4", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.8.0 <20.0.0", + "@types/react-dom": ">=16.8.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-motion-components-preview": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-motion-components-preview/-/react-motion-components-preview-0.7.0.tgz", - "integrity": "sha512-vGxi2KLqwCzfV2WSZBYGKSzKnfsnGKjkQpE5qYfwk0aPp3iDXtyiLCANgNiPKIBJ4R+/48SAbIDKaiXBtd7GRw==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-motion-components-preview/-/react-motion-components-preview-0.14.1.tgz", + "integrity": "sha512-+2MK7d2g3mD+6Z3o9/fitO+V4u5OKGeRUoUjwlU1v56JHP43hj+NCJynoe4Cym8FeSwTyipks6hvdqBF4W+jtw==", "license": "MIT", "dependencies": { "@fluentui/react-motion": "*", + "@fluentui/react-utilities": "*", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-nav": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-nav/-/react-nav-9.3.0.tgz", - "integrity": "sha512-IodGcAPlH45pNskmPmFsXF8IGGrRAEcd4PrytdAPFhBx0Ov69uvoI1B7mCTDGYYb0g8KRW751rGJtU4QMgUAUw==", + "version": "9.3.14", + "resolved": "https://registry.npmjs.org/@fluentui/react-nav/-/react-nav-9.3.14.tgz", + "integrity": "sha512-0Lylul5g/9y3Cay5qHLtzW4SB9kdkTmvjHSffPJZDKE/Wv7GBbDypBxoB+f2L1K4f0qzRJ1NvIiwatH4hAsUDA==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.15.4", - "@fluentui/react-button": "^9.6.0", - "@fluentui/react-context-selector": "^9.2.2", - "@fluentui/react-divider": "^9.4.0", - "@fluentui/react-drawer": "^9.9.0", + "@fluentui/react-aria": "^9.17.6", + "@fluentui/react-button": "^9.6.12", + "@fluentui/react-context-selector": "^9.2.12", + "@fluentui/react-divider": "^9.4.11", + "@fluentui/react-drawer": "^9.10.9", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-motion": "^9.9.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-tooltip": "^9.8.0", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-motion": "^9.11.4", + "@fluentui/react-motion-components-preview": "^0.14.1", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-tooltip": "^9.8.11", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-overflow": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.5.0.tgz", - "integrity": "sha512-XIJ2WGNiSs4KER5GIV9iMQA/lGVSR2eE+Aeht+hGiwlmn/YvTvS5SM/LSw2CKyi1LkVRzNB3Kj1wiIzD/he5+Q==", + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.6.5.tgz", + "integrity": "sha512-4MlXASDodkwk4QWhUPLgMbUPwDYAOAWDnQGJz4q6Hs9eZvx83dSpWdWjkmQ6mwjYf2HwooMkqsjR/kAFvg+ipg==", "license": "MIT", "dependencies": { - "@fluentui/priority-overflow": "^9.1.15", - "@fluentui/react-context-selector": "^9.2.2", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/priority-overflow": "^9.2.1", + "@fluentui/react-context-selector": "^9.2.12", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-persona": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.5.0.tgz", - "integrity": "sha512-0MnNTqrJ3BxTXvg+NdLE9mabSmLFVKiuqdIAtK/gYFiEk43wGskMUx9Kw1Dfq6xRYQImaFnoLhd+47YsLyn9jg==", - "license": "MIT", - "dependencies": { - "@fluentui/react-avatar": "^9.9.0", - "@fluentui/react-badge": "^9.4.0", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "version": "9.5.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.5.12.tgz", + "integrity": "sha512-ja3t1o6XDJWCJnOVDTM48G7bFPAbNxcsQKwAPfiuROVu8ODbTQefutCHl0Hno40AsftQk6N4zGbKcn7BYSZ09Q==", + "license": "MIT", + "dependencies": { + "@fluentui/react-avatar": "^9.9.12", + "@fluentui/react-badge": "^9.4.11", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-popover": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.12.0.tgz", - "integrity": "sha512-qnPwYW3E63jLTaVB7ssbTVE9ez04eNmky7SjdD2MlU6F2506nuV5V7wPp3Z5LZpD6SQqgMjtPiTlcFgWHAjAvw==", + "version": "9.12.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.12.12.tgz", + "integrity": "sha512-IytuasB4b4lCnEhFC0OC66a3mzBSePLpg78/BceKYepuG7IC6iGuCwYartqSQCSUlSU12rT02/V0rqCO81f4Nw==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.15.4", - "@fluentui/react-context-selector": "^9.2.2", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-portal": "^9.7.0", - "@fluentui/react-positioning": "^9.20.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-aria": "^9.17.6", + "@fluentui/react-context-selector": "^9.2.12", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-portal": "^9.8.8", + "@fluentui/react-positioning": "^9.20.10", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-portal": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.7.0.tgz", - "integrity": "sha512-g9Q9wsw4OH4UFYyjb5BfbL7GwaloIiFMVZXie9q0lLeo9JUFhNHh/2X7UUGesagCO86WMGN1haQUA7uaN6gIXA==", + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.8.8.tgz", + "integrity": "sha512-RVvhWYfcwIUYXiokgFw3oxb7Q6xox2e7jcsgFtheDm2X/BHT6WJigW4OaCjOkvugkBEYQkwgIpL9iS2QG3HMFA==", "license": "MIT", "dependencies": { - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", - "@swc/helpers": "^0.5.1", - "use-disposable": "^1.0.1" + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-positioning": { - "version": "9.20.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.20.0.tgz", - "integrity": "sha512-qbxIYG8N+zBVXsgyiqd8kQzDiEn+eabnDBn3hqhaolVqn3QVWfgjoARJXYuKbUY0GDMPMukW1PH2NbEl5BvQXQ==", + "version": "9.20.10", + "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.20.10.tgz", + "integrity": "sha512-mjuiqh+urV5SzAP2NfzUzsvtWut0aNcO9m/jIuz374iTVGRfDNeVIl7aPI4yK5sdCDR6dGALiNMTFHpjz1YXyw==", "license": "MIT", "dependencies": { - "@floating-ui/devtools": "0.2.1", + "@floating-ui/devtools": "^0.2.3", "@floating-ui/dom": "^1.6.12", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1", "use-sync-external-store": "^1.2.0" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-progress": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.4.0.tgz", - "integrity": "sha512-EplT3K95DPob22MV0mIzLmbzsdS2bhMPEiRjUAsRpUPnw5gRJi4OKneS5y3mRCBUiFjlkzEDwTTbEa+NkZEXlg==", + "version": "9.4.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.4.11.tgz", + "integrity": "sha512-L0Yh2D0vLPJX0jYfc9VHf8c/idW+e/oRxYNXfrTrvtW1bX80bAmrXWgdRPr/VEtvbJh//2ol2TRmTTQsn2ECNQ==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.4.0", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-field": "^9.4.11", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-provider": { - "version": "9.22.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.22.0.tgz", - "integrity": "sha512-dyrux/z+OXTM9U0uaq/AHtSI/5jZsehw3LND79StMP11ebi9lGjyRthZ3M8E6Pq7LlSgQ0yVnMFYZc9WoijVHg==", + "version": "9.22.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.22.11.tgz", + "integrity": "sha512-XrinA7DVEqsPHeN9XljwTENiIQypiF9cmDYXHN9Emsz6Od4hnmsbt4pnR4Xsf+GcSxVtxkIImfgwtS0aENzYbQ==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", "@griffel/core": "^1.16.0", - "@griffel/react": "^1.5.22", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-radio": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.5.0.tgz", - "integrity": "sha512-9j4t85KdIYu5TN3tN1S2KlIfzL4FNYRuFBsQ8WxB0F8vmGlyIxUt9S2dRG3+MScqOwIS2Q0HAmZhu0hrTJVWRg==", - "license": "MIT", - "dependencies": { - "@fluentui/react-field": "^9.4.0", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-label": "^9.3.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "version": "9.5.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.5.11.tgz", + "integrity": "sha512-tMxCcqRSSYqYr6hy1dKkzS6LymRc8wM089vr4eBLPQCGCvi3OCd6P7XH8aIcXnzxE3+v03Gs7E/wbzi2CXN6gA==", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.4.11", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-label": "^9.3.11", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-rating": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-rating/-/react-rating-9.3.0.tgz", - "integrity": "sha512-FP19VCBG3aQm7uP/pORfDBKHU/f5YinvETe39y4+9VPiXlgbF+sqjwXGB6N7kvu9ZdTD4ZFrMW4FaSLYrpJEtA==", + "version": "9.3.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-rating/-/react-rating-9.3.11.tgz", + "integrity": "sha512-9Bl/sESNbFTbz8peGt9vxLxHDO0AWvS12oMiQ80S1GQOt1ua4S9/SKC83OvyVLEdpBDpBkXTelNz5whczcWexQ==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.8.0 <20.0.0", + "@types/react-dom": ">=16.8.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-search": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-search/-/react-search-9.3.0.tgz", - "integrity": "sha512-RMzYhNdrLpz5/e6Z3NlDmX7KP+AXz0N0e4SBoKjHauoDfEPD9+oHbSbah/JQWmw290h1jUUrElRwPYoIQ8eSgg==", + "version": "9.3.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-search/-/react-search-9.3.11.tgz", + "integrity": "sha512-inLoPgbGnupfwhBxFS59mF/ThsntusfYp9TaaTB3SJmqfEEx6YXi5soxszzrXsNvrqpgEoCGIduRpEICuUz5pw==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-input": "^9.7.0", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-input": "^9.7.11", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-select": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.4.0.tgz", - "integrity": "sha512-6DoC6Xc6hkHKCzRFjB2UYbJAa3v+KZ/OUML18OvYvdGkEtv+n2x3sc+mUDgFuXHqB/4OIhUDXq4S/Mriwd8KUg==", + "version": "9.4.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.4.11.tgz", + "integrity": "sha512-/mcdl/lkKccT+GKXu22y2/ANeLhFNUdjkOX+0rvBdl3u49xkqS9Y4Bi0zM1EhhTV2jE8+yjMjzPDzfzJaXVK1A==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.4.0", + "@fluentui/react-field": "^9.4.11", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-shared-contexts": { - "version": "9.24.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.24.0.tgz", - "integrity": "sha512-GA+uLv711E+YGrAP/aVB15ozvNCiuB2ZrPDC9aYF+A6sRDxoZZG8VgHjhQ/YWJfVjDXLky4ihirknzsW1sjGtg==", + "version": "9.26.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.26.0.tgz", + "integrity": "sha512-r52B+LUevs930pe45pFsppM9XNvY+ojgRgnDE+T/6aiwR/Mo4YoGrtjhLEzlQBeTGuySICTeaAiXfuH6Keo5Dg==", "license": "MIT", "dependencies": { - "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-theme": "^9.2.0", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "react": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "react": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-skeleton": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.4.0.tgz", - "integrity": "sha512-n6viQkyI+g7ljf33x/6FVwNfyfJq6Qosug5OlxsSTrneyn+kSb6lw8K4z3AUIEBOR65XEonYWegXOm4ldcJYOw==", + "version": "9.4.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.4.11.tgz", + "integrity": "sha512-nw6NlTBXS7lNSxsebLuADYQi9gJ83jFBFsFq+AGIpAoZLBOCHOhk8/XwV3vYtPwVrKcZtOtXqh9NdCqTR3OAIA==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.4.0", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-field": "^9.4.11", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-slider": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.5.0.tgz", - "integrity": "sha512-qxLRYBKKEbRuKdHzE0iSpETvjYKGjIK4Rm18swFd5Jl4SfXUxaq6EuHRE1sfiOhraH2nDSKHVT+iXZxYi/g+Tg==", - "license": "MIT", - "dependencies": { - "@fluentui/react-field": "^9.4.0", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "version": "9.5.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.5.11.tgz", + "integrity": "sha512-kxZKklJbcG/521muQaIDMdcftoClbwV7yMOcu8PMG+VXsaIuoandoBleBYdzM2XdpY62iK6vUPAMZWBZh3B5Ng==", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.4.11", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-spinbutton": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.5.0.tgz", - "integrity": "sha512-rRdgwNb0yNJOeCwbr6Kn1VX+ys+4PEfl6bwHphXy/6iwbF7BETtZjmGGbfXhuu+WsLxQxHnyeo5uC21E/mbWqg==", + "version": "9.5.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.5.11.tgz", + "integrity": "sha512-pYR3RkJfks+0WV47KoDKD04D0pTHtT+lu3AeOpBlIswxtsb1gZEDmTrEHHNeLDKKVhWMWNoEPlxfXuX9tOh7yA==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-field": "^9.4.0", + "@fluentui/react-field": "^9.4.11", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-spinner": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.7.0.tgz", - "integrity": "sha512-B9KQ6Muy2KZIBpmzkdZ0ONu4Ao/3iMhBous1Emq7wfiYEhoz1pOLKvVgh+IgXz5SX28x8cZiDt9/Hu7Quf6zJg==", + "version": "9.7.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.7.11.tgz", + "integrity": "sha512-MhmAisICa3BzBNQH9CnLI5NVPTTXFo1Yaey8kbQPU+gVVF4vIGORB7M1MXSHFxZvojtFpBixiVHqRwh9mowJww==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-label": "^9.3.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-label": "^9.3.11", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-swatch-picker": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-swatch-picker/-/react-swatch-picker-9.4.0.tgz", - "integrity": "sha512-KSeIvU/fwBeXP5irqQxSvs34LNu03a3NYF48GOJrDODUwv/tjYn+/IgsPRMjA2pZ502AMWFa5OSKpeUJ9mbi1g==", + "version": "9.4.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-swatch-picker/-/react-swatch-picker-9.4.11.tgz", + "integrity": "sha512-M/ZfHqo63F69y2ymEQDDN/BZuI3afeW3U+omyGZZoHts3rVCjPk6sKFemTRpUhGgGfxBdexWEPithZx3dk0IPA==", "license": "MIT", "dependencies": { - "@fluentui/react-context-selector": "^9.2.2", - "@fluentui/react-field": "^9.4.0", + "@fluentui/react-context-selector": "^9.2.12", + "@fluentui/react-field": "^9.4.11", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.8.0 <20.0.0", + "@types/react-dom": ">=16.8.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-switch": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.4.0.tgz", - "integrity": "sha512-8uKP2aM/doLGprYuljbJAbAapeVWbgMW1FLQH53+RHURZNy1Gvt8AiisllJwtmQC8esgK4xlbaSzn/b1/S8B8A==", + "version": "9.4.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.4.11.tgz", + "integrity": "sha512-/WDcoVFQ3I2fe5FTINfyVTIW6wuTgM5QkJgcwbU7HTANq/+wJ2f8wzywoI4x16cJOckBdy+ByDpW7uJ/Uvs8RA==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.4.0", + "@fluentui/react-field": "^9.4.11", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-label": "^9.3.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-label": "^9.3.11", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-table": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.18.0.tgz", - "integrity": "sha512-yBdBvY5X/XnX5WYoFseKlqc0pYomBZ+3jFaMEeWMYxOAIuHWif3IUq4kTxBoweKcFMmclMNMpY22j/6YcFwHXA==", + "version": "9.19.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.19.5.tgz", + "integrity": "sha512-In9egEdytjFd6N1RBZd5+3UgdXvEVDP7rz+/I79J10ui2+Nb7r9ah68m5CQB15AKA8F5XFDWPEGvGG3Tmuq4Jg==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.15.4", - "@fluentui/react-avatar": "^9.9.0", - "@fluentui/react-checkbox": "^9.5.0", - "@fluentui/react-context-selector": "^9.2.2", + "@fluentui/react-aria": "^9.17.6", + "@fluentui/react-avatar": "^9.9.12", + "@fluentui/react-checkbox": "^9.5.11", + "@fluentui/react-context-selector": "^9.2.12", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-radio": "^9.5.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-radio": "^9.5.11", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-tabs": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.9.0.tgz", - "integrity": "sha512-V06heimvtH5LcjjePkl8ETWrX4YN1V2STQhFr6lXn6FjS8nsNGhWemHduCi2qY3DLyZgYLBGrOR5AgSbbv5jcA==", - "license": "MIT", - "dependencies": { - "@fluentui/react-context-selector": "^9.2.2", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "version": "9.10.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.10.7.tgz", + "integrity": "sha512-Kfq6GxZXEKsMdGKmHWNMcEYOYHxl5+fXJOH6ZRgeR2FkHUsPUUe2BHaFnOMRSvCwzECvhOMYs+Ekqt7JzW3BWQ==", + "license": "MIT", + "dependencies": { + "@fluentui/react-context-selector": "^9.2.12", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-tabster": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.26.0.tgz", - "integrity": "sha512-ENaISUye53JLvAN3VqiKzTdDSubnMucG/mcGuB+QbnzTLGIHxvEYq/GV4WHwWbQwjZPXAG9Hr0F0l0AFzrkeFA==", + "version": "9.26.10", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.26.10.tgz", + "integrity": "sha512-KrddtwbnbgYVAnOkx1pQsMMgq7Kfi+lMRrUrDDJ9Y5X6wiXiajbWRRxYgKiOJc3MpeDCaTCEtjOWNG92vcinMw==", "license": "MIT", "dependencies": { - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1", "keyborg": "^2.6.0", "tabster": "^8.5.5" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-tag-picker": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-tag-picker/-/react-tag-picker-9.7.0.tgz", - "integrity": "sha512-p0xAxemN/fYlDG6dVbkcGybjMCiNravyzTsnpE2OwEoh3eDfsL5oXipPkcJACzv5ZhmavVyAHs4txenEcW24gw==", + "version": "9.7.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-tag-picker/-/react-tag-picker-9.7.12.tgz", + "integrity": "sha512-OJucCDub6b3ceGL6v2UXL+SD3x6nJMbmJ70v38BmrA9t3fNcDvn6RnsfHhF2O0pRGGUOrXbK7vDwVhUAG4Py8w==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.15.4", - "@fluentui/react-combobox": "^9.16.0", - "@fluentui/react-context-selector": "^9.2.2", - "@fluentui/react-field": "^9.4.0", + "@fluentui/react-aria": "^9.17.6", + "@fluentui/react-combobox": "^9.16.12", + "@fluentui/react-context-selector": "^9.2.12", + "@fluentui/react-field": "^9.4.11", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-portal": "^9.7.0", - "@fluentui/react-positioning": "^9.20.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-tags": "^9.7.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-portal": "^9.8.8", + "@fluentui/react-positioning": "^9.20.10", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-tags": "^9.7.12", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-tags": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.7.0.tgz", - "integrity": "sha512-TU7CPouGFuOXxGVjrbWbLgyTNrVoyxOS3xvwdZGJuGlaU9FbFuzKNUeV/CL0o6SiA/0O1wGa4/VV6XRuUGQX3Q==", + "version": "9.7.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.7.12.tgz", + "integrity": "sha512-G7pxP0GGa6J/7mYvB9ycOmD9Jpm6ByUz6JsJI4OBL9UnhenUVTtE7ZKJ9GJ0SiG0GVxS152aSlOR7NLHV7mCqw==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.15.4", - "@fluentui/react-avatar": "^9.9.0", + "@fluentui/react-aria": "^9.17.6", + "@fluentui/react-avatar": "^9.9.12", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-teaching-popover": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-teaching-popover/-/react-teaching-popover-9.6.0.tgz", - "integrity": "sha512-/JX1+W/ff8bkO1nCSExL9ASP1zfysUInc83V/6XzRgwhyNMkUoNgGRw32EDpxz6Ympe8mZnQKWNUmvTsxr28aQ==", + "version": "9.6.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-teaching-popover/-/react-teaching-popover-9.6.12.tgz", + "integrity": "sha512-Ugo5SQ3yzSlxUWkeeEdumTWTw662KDh3UPc6RGhU0Jq13skpmsClSJL678BZwsYdAaJXvvG9Bi4PjPeezeB/SA==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.15.4", - "@fluentui/react-button": "^9.6.0", - "@fluentui/react-context-selector": "^9.2.2", + "@fluentui/react-aria": "^9.17.6", + "@fluentui/react-button": "^9.6.12", + "@fluentui/react-context-selector": "^9.2.12", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-popover": "^9.12.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-popover": "^9.12.12", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1", "use-sync-external-store": "^1.2.0" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.8.0 <20.0.0", + "@types/react-dom": ">=16.8.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-text": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.6.0.tgz", - "integrity": "sha512-/ZAMjgAn5sgbAjYnwmM5k0kxgNehpccxXI6f5uJ72IfAmj85dMH4TDNsN6xOCIMhj+xDxuBIT4axEYt+wAoF1Q==", + "version": "9.6.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.6.11.tgz", + "integrity": "sha512-U7EiCesOWjkALf7LM6sy+yvE59Px3c6f27jg4aa21UMo61HCVNbjKV8Lz6GzEftEvv++/EZ25yZBiQcKgh/5iA==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-textarea": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.6.0.tgz", - "integrity": "sha512-o6jAAB4cIzzPLBj8/RDo+my7yXSQtFCC+O2p4mD2X+hUvBCydoQI+45RbEeJXXwEsWjUp7XfbLUyt3mB8dH0xQ==", + "version": "9.6.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.6.11.tgz", + "integrity": "sha512-5ds8u8hzSqj8cOy0e7HJWjUMq1aO0MIJiaNt/SyIxoZFvsklj/2yaMRVXpWxr3GvX5bzScvFoBY53gPdLKtE/g==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.4.0", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-field": "^9.4.11", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-theme": { - "version": "9.1.24", - "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.1.24.tgz", - "integrity": "sha512-OhVKYD7CMYHxzJEn4PtIszledj8hbQJNWBMfIZsp4Sytdp9vCi0txIQUx4BhS1WqtQPhNGCF16eW9Q3NRrnIrQ==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.2.0.tgz", + "integrity": "sha512-Q0zp/MY1m5RjlkcwMcjn/PQRT2T+q3bgxuxWbhgaD07V+tLzBhGROvuqbsdg4YWF/IK21zPfLhmGyifhEu0DnQ==", "license": "MIT", "dependencies": { - "@fluentui/tokens": "1.0.0-alpha.21", + "@fluentui/tokens": "1.0.0-alpha.22", "@swc/helpers": "^0.5.1" } }, "node_modules/@fluentui/react-toast": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.6.0.tgz", - "integrity": "sha512-t/eUl3w8RdLFMLHcvWHXCH9jec29MV7K7pqmyXsW2g7edaChTyCbkxlII861IvY+XqwIvNlpczzh4cgkyzAj/w==", + "version": "9.7.9", + "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.7.9.tgz", + "integrity": "sha512-PaFh2CwVK4tgvRzBMb46ODHsB+ZYSYE8mx735vqgIG8Oj1AL3wZ5Y9TrjJGxn/lppZgtnwLgt4GQ+GI7MM+e+g==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.15.4", + "@fluentui/react-aria": "^9.17.6", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-motion": "^9.9.0", - "@fluentui/react-motion-components-preview": "^0.7.0", - "@fluentui/react-portal": "^9.7.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-motion": "^9.11.4", + "@fluentui/react-motion-components-preview": "^0.14.1", + "@fluentui/react-portal": "^9.8.8", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-toolbar": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.6.0.tgz", - "integrity": "sha512-tbpM8prz8cDTzeF7PudjTA3UQruVrjGNSsTwR+vmIGVo0E986Zz+VSJaLICeC2ttiHOirhqm6goswP+bGG5Evw==", - "license": "MIT", - "dependencies": { - "@fluentui/react-button": "^9.6.0", - "@fluentui/react-context-selector": "^9.2.2", - "@fluentui/react-divider": "^9.4.0", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-radio": "^9.5.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "version": "9.6.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.6.12.tgz", + "integrity": "sha512-AuOZvp6Jcc/Sngk0OddTsHlJVU/u9mVEw6JDhsCYiwKeq04kdgfco1sjSTGjDhJbf1SnkhmyR6YN16SrpVQWtA==", + "license": "MIT", + "dependencies": { + "@fluentui/react-button": "^9.6.12", + "@fluentui/react-context-selector": "^9.2.12", + "@fluentui/react-divider": "^9.4.11", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-radio": "^9.5.11", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-tooltip": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.8.0.tgz", - "integrity": "sha512-LW0ouXkPXxx+XPScLB9tWlqn11cVHxmDJ3weZXuWrl5jjx4agjqKHGC8MOdr4Un+2hoO0g2BcrlDaQNhsMPgYA==", + "version": "9.8.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.8.11.tgz", + "integrity": "sha512-ke7Hbom3dtC3f9QjJG/F7QfNfukwTtAhoYLmwwQnXYTh/CIVxoC2rVh4c/V8jUD0lnjNPBZZ5ttVUopWljHuFg==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-portal": "^9.7.0", - "@fluentui/react-positioning": "^9.20.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-portal": "^9.8.8", + "@fluentui/react-positioning": "^9.20.10", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-tree": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.12.0.tgz", - "integrity": "sha512-vehLCk918YN53h8sGs4jx5oEF2twdVRdoIQ+csuLUkxRhl7f6eWyQWRk/R2lZlJgsz0vgk07RB/Yfx8/BFEUiA==", + "version": "9.15.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.15.6.tgz", + "integrity": "sha512-L/uc+SgwXW8DXgSZsyIg5tQkixfrGllANg0I2578WRlfOkERehkg1eSW8Uib/Mbk+W3tB0I8CL20ifoSTL7Ztw==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.15.4", - "@fluentui/react-avatar": "^9.9.0", - "@fluentui/react-button": "^9.6.0", - "@fluentui/react-checkbox": "^9.5.0", - "@fluentui/react-context-selector": "^9.2.2", + "@fluentui/react-aria": "^9.17.6", + "@fluentui/react-avatar": "^9.9.12", + "@fluentui/react-button": "^9.6.12", + "@fluentui/react-checkbox": "^9.5.11", + "@fluentui/react-context-selector": "^9.2.12", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-motion": "^9.9.0", - "@fluentui/react-motion-components-preview": "^0.7.0", - "@fluentui/react-radio": "^9.5.0", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-tabster": "^9.26.0", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-motion": "^9.11.4", + "@fluentui/react-motion-components-preview": "^0.14.1", + "@fluentui/react-radio": "^9.5.11", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-tabster": "^9.26.10", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-utilities": { - "version": "9.22.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.22.0.tgz", - "integrity": "sha512-O4D51FUyn5670SjduzzN1usmwWAmFPQA00Gu6jJrbDXvOXTpOAO/ApkLpSW87HChKGrj8Y0gjFHtK8xpC3qOCg==", + "version": "9.25.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.25.4.tgz", + "integrity": "sha512-vvEIFTfqkcBnKNJhlm8csdGNtOWDWDkqAM4tGlW7jLlFrhNkOfDsqdNuBElENPNJ1foHyVTF5ZSr20kVoKWPjQ==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-shared-contexts": "^9.24.0", + "@fluentui/react-shared-contexts": "^9.26.0", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "react": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "react": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-virtualizer": { - "version": "9.0.0-alpha.100", - "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.100.tgz", - "integrity": "sha512-e7u3SP2Smv5+9Adey+pOerGmHq2D6Nd0ek/iWbc/o0CKX5QMeHwbUlZAbVVsrX/vwIeeZ3+qJMt+UH3hHI+wdw==", + "version": "9.0.0-alpha.107", + "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.107.tgz", + "integrity": "sha512-zpTVzJB2BUNv7QdTUlLSBMCbt/EfALRuls/u/8FYaO4PGOFVeS3equytyxSOizz9zJZVhm8sjdp326DEQNiaPA==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.1.2", - "@fluentui/react-shared-contexts": "^9.24.0", - "@fluentui/react-utilities": "^9.22.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.26.0", + "@fluentui/react-utilities": "^9.25.4", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/tokens": { - "version": "1.0.0-alpha.21", - "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.21.tgz", - "integrity": "sha512-xQ1T56sNgDFGl+kJdIwhz67mHng8vcwO7Dvx5Uja4t+NRULQBgMcJ4reUo4FGF3TjufHj08pP0/OnKQgnOaSVg==", + "version": "1.0.0-alpha.22", + "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.22.tgz", + "integrity": "sha512-i9fgYyyCWFRdUi+vQwnV6hp7wpLGK4p09B+O/f2u71GBXzPuniubPYvrIJYtl444DD6shLjYToJhQ1S6XTFwLg==", "license": "MIT", "dependencies": { "@swc/helpers": "^0.5.1" @@ -3169,9 +3176,9 @@ } }, "node_modules/@griffel/react": { - "version": "1.5.30", - "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.30.tgz", - "integrity": "sha512-1q4ojbEVFY5YA0j1NamP0WWF4BKh+GHsVugltDYeEgEaVbH3odJ7tJabuhQgY+7Nhka0pyEFWSiHJev0K3FSew==", + "version": "1.5.32", + "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.32.tgz", + "integrity": "sha512-jN3SmSwAUcWFUQuQ9jlhqZ5ELtKY21foaUR0q1mJtiAeSErVgjkpKJyMLRYpvaFGWrDql0Uz23nXUogXbsS2wQ==", "license": "MIT", "dependencies": { "@griffel/core": "^1.19.2", @@ -3201,33 +3208,19 @@ } }, "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" + "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -3416,17 +3409,17 @@ } }, "node_modules/@jest/console": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.0.5.tgz", - "integrity": "sha512-xY6b0XiL0Nav3ReresUarwl2oIz1gTnxGbGpho9/rbUWsLH0f1OD/VT84xs8c7VmH7MChnLb0pag6PhZhAdDiA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.2.0.tgz", + "integrity": "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", - "jest-message-util": "30.0.5", - "jest-util": "30.0.5", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", "slash": "^3.0.0" }, "engines": { @@ -3434,39 +3427,39 @@ } }, "node_modules/@jest/core": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.0.5.tgz", - "integrity": "sha512-fKD0OulvRsXF1hmaFgHhVJzczWzA1RXMMo9LTPuFXo9q/alDbME3JIyWYqovWsUBWSoBcsHaGPSLF9rz4l9Qeg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.2.0.tgz", + "integrity": "sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.0.5", + "@jest/console": "30.2.0", "@jest/pattern": "30.0.1", - "@jest/reporters": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", - "@jest/types": "30.0.5", + "@jest/reporters": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "ci-info": "^4.2.0", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", - "jest-changed-files": "30.0.5", - "jest-config": "30.0.5", - "jest-haste-map": "30.0.5", - "jest-message-util": "30.0.5", + "jest-changed-files": "30.2.0", + "jest-config": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", "jest-regex-util": "30.0.1", - "jest-resolve": "30.0.5", - "jest-resolve-dependencies": "30.0.5", - "jest-runner": "30.0.5", - "jest-runtime": "30.0.5", - "jest-snapshot": "30.0.5", - "jest-util": "30.0.5", - "jest-validate": "30.0.5", - "jest-watcher": "30.0.5", + "jest-resolve": "30.2.0", + "jest-resolve-dependencies": "30.2.0", + "jest-runner": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "jest-watcher": "30.2.0", "micromatch": "^4.0.8", - "pretty-format": "30.0.5", + "pretty-format": "30.2.0", "slash": "^3.0.0" }, "engines": { @@ -3482,13 +3475,13 @@ } }, "node_modules/@jest/create-cache-key-function": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-30.0.5.tgz", - "integrity": "sha512-W1kmkwPq/WTMQWgvbzWSCbXSqvjI6rkqBQCxuvYmd+g6o4b5gHP98ikfh/Ei0SKzHvWdI84TOXp0hRcbpr8Q0w==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-30.2.0.tgz", + "integrity": "sha512-44F4l4Enf+MirJN8X/NhdGkl71k5rBYiwdVlo4HxOwbu0sHV8QKrGEedb1VUU4K3W7fBKE0HGfbn7eZm0Ti3zg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5" + "@jest/types": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -3505,70 +3498,70 @@ } }, "node_modules/@jest/environment": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.5.tgz", - "integrity": "sha512-aRX7WoaWx1oaOkDQvCWImVQ8XNtdv5sEWgk4gxR6NXb7WBUnL5sRak4WRzIQRZ1VTWPvV4VI4mgGjNL9TeKMYA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz", + "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/fake-timers": "30.0.5", - "@jest/types": "30.0.5", + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-mock": "30.0.5" + "jest-mock": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.0.5.tgz", - "integrity": "sha512-6udac8KKrtTtC+AXZ2iUN/R7dp7Ydry+Fo6FPFnDG54wjVMnb6vW/XNlf7Xj8UDjAE3aAVAsR4KFyKk3TCXmTA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==", "dev": true, "license": "MIT", "dependencies": { - "expect": "30.0.5", - "jest-snapshot": "30.0.5" + "expect": "30.2.0", + "jest-snapshot": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.5.tgz", - "integrity": "sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz", + "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1" + "@jest/get-type": "30.1.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.5.tgz", - "integrity": "sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz", + "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@sinonjs/fake-timers": "^13.0.0", "@types/node": "*", - "jest-message-util": "30.0.5", - "jest-mock": "30.0.5", - "jest-util": "30.0.5" + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/get-type": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz", - "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==", + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", "dev": true, "license": "MIT", "engines": { @@ -3576,16 +3569,16 @@ } }, "node_modules/@jest/globals": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.0.5.tgz", - "integrity": "sha512-7oEJT19WW4oe6HR7oLRvHxwlJk2gev0U9px3ufs8sX9PoD1Eza68KF0/tlN7X0dq/WVsBScXQGgCldA1V9Y/jA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.2.0.tgz", + "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.5", - "@jest/expect": "30.0.5", - "@jest/types": "30.0.5", - "jest-mock": "30.0.5" + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/types": "30.2.0", + "jest-mock": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -3606,17 +3599,17 @@ } }, "node_modules/@jest/reporters": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.0.5.tgz", - "integrity": "sha512-mafft7VBX4jzED1FwGC1o/9QUM2xebzavImZMeqnsklgcyxBto8mV4HzNSzUrryJ+8R9MFOM3HgYuDradWR+4g==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.2.0.tgz", + "integrity": "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", - "@jest/types": "30.0.5", + "@jest/console": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", "chalk": "^4.1.2", @@ -3629,9 +3622,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^5.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "30.0.5", - "jest-util": "30.0.5", - "jest-worker": "30.0.5", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", "slash": "^3.0.0", "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" @@ -3648,6 +3641,13 @@ } } }, + "node_modules/@jest/reporters/node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, "node_modules/@jest/schemas": { "version": "30.0.5", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", @@ -3662,13 +3662,13 @@ } }, "node_modules/@jest/snapshot-utils": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.0.5.tgz", - "integrity": "sha512-XcCQ5qWHLvi29UUrowgDFvV4t7ETxX91CbDczMnoqXPOIcZOxyNdSjm6kV5XMc8+HkxfRegU/MUmnTbJRzGrUQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", + "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "natural-compare": "^1.4.0" @@ -3693,14 +3693,14 @@ } }, "node_modules/@jest/test-result": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.0.5.tgz", - "integrity": "sha512-wPyztnK0gbDMQAJZ43tdMro+qblDHH1Ru/ylzUo21TBKqt88ZqnKKK2m30LKmLLoKtR2lxdpCC/P3g1vfKcawQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.2.0.tgz", + "integrity": "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.0.5", - "@jest/types": "30.0.5", + "@jest/console": "30.2.0", + "@jest/types": "30.2.0", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" }, @@ -3709,15 +3709,15 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.0.5.tgz", - "integrity": "sha512-Aea/G1egWoIIozmDD7PBXUOxkekXl7ueGzrsGGi1SbeKgQqCYCIf+wfbflEbf2LiPxL8j2JZGLyrzZagjvW4YQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz", + "integrity": "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.0.5", + "@jest/test-result": "30.2.0", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", + "jest-haste-map": "30.2.0", "slash": "^3.0.0" }, "engines": { @@ -3725,23 +3725,23 @@ } }, "node_modules/@jest/transform": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.0.5.tgz", - "integrity": "sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.2.0.tgz", + "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.0", + "babel-plugin-istanbul": "^7.0.1", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", + "jest-haste-map": "30.2.0", "jest-regex-util": "30.0.1", - "jest-util": "30.0.5", + "jest-util": "30.2.0", "micromatch": "^4.0.8", "pirates": "^4.0.7", "slash": "^3.0.0", @@ -3752,9 +3752,9 @@ } }, "node_modules/@jest/types": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz", - "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", + "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", "dev": true, "license": "MIT", "dependencies": { @@ -3771,9 +3771,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", - "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { @@ -3781,6 +3781,17 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -3792,9 +3803,9 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz", - "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, "license": "MIT", "dependencies": { @@ -3803,16 +3814,16 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", - "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.29", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", - "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", "dependencies": { @@ -3837,17 +3848,55 @@ "tslib": "2" } }, + "node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/@jsonjoy.com/json-pack": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.2.0.tgz", - "integrity": "sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/base64": "^1.1.1", - "@jsonjoy.com/util": "^1.1.2", + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", "hyperdyperid": "^1.2.0", - "thingies": "^1.20.0" + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" }, "engines": { "node": ">=10.0" @@ -3860,12 +3909,16 @@ "tslib": "2" } }, - "node_modules/@jsonjoy.com/util": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.6.0.tgz", - "integrity": "sha512-sw/RMbehRhN68WRtcKCpQOPfnH6lLP4GJfqzi3iYej8tnzpZUDr6UkZYJjcjjC0FWEJOJbyM3PTIwxucUmDG2A==", + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, "engines": { "node": ">=10.0" }, @@ -3877,11 +3930,26 @@ "tslib": "2" } }, - "node_modules/@juggle/resize-observer": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", - "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==", - "license": "Apache-2.0" + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.5", @@ -3891,12 +3959,12 @@ "license": "MIT" }, "node_modules/@microsoft/1ds-core-js": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/@microsoft/1ds-core-js/-/1ds-core-js-4.3.9.tgz", - "integrity": "sha512-T8s5qROH7caBNiFrUpN8vgC6wg7QysVPryZKprgl3kLQQPpoMFM6ffIYvUWD74KM9fWWLU7vzFFNBWDBsrTyWg==", + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-core-js/-/1ds-core-js-4.3.10.tgz", + "integrity": "sha512-5fSZmkGwWkH+mrIA5M1GYPZdPM+SjXwCCl2Am7VhFoVwOBJNhRnwvIpAdzw6sFjiebN/rz+/YH0NdxztGZSa9Q==", "license": "MIT", "dependencies": { - "@microsoft/applicationinsights-core-js": "3.3.9", + "@microsoft/applicationinsights-core-js": "3.3.10", "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/ts-async": ">= 0.5.4 < 2.x", @@ -3904,12 +3972,12 @@ } }, "node_modules/@microsoft/1ds-post-js": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/@microsoft/1ds-post-js/-/1ds-post-js-4.3.9.tgz", - "integrity": "sha512-BvxI4CW8Ws+gfXKy+Y/9pmEXp88iU1GYVjkUfqXP7La59VHARTumlG5iIgMVvaifOrvSW7G6knvQM++0tEfMBQ==", + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-post-js/-/1ds-post-js-4.3.10.tgz", + "integrity": "sha512-VSLjc9cT+Y+eTiSfYltJHJCejn8oYr0E6Pq2BMhOEO7F6IyLGYIxzKKvo78ze9x+iHX7KPTATcZ+PFgjGXuNqg==", "license": "MIT", "dependencies": { - "@microsoft/1ds-core-js": "4.3.9", + "@microsoft/1ds-core-js": "4.3.10", "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/ts-async": ">= 0.5.4 < 2.x", @@ -3917,13 +3985,13 @@ } }, "node_modules/@microsoft/applicationinsights-channel-js": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-channel-js/-/applicationinsights-channel-js-3.3.9.tgz", - "integrity": "sha512-/yEgSe6vT2ycQJkXu6VF04TB5XBurk46ECV7uo6KkNhWyDEctAk1VDWB7EqXYdwLhKMbNOYX1pvz7fj43fGNqg==", + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-channel-js/-/applicationinsights-channel-js-3.3.10.tgz", + "integrity": "sha512-iolFLz1ocWAzIQqHIEjjov3gNTPkgFQ4ArHnBcJEYoffOGWlJt6copaevS5YPI5rHzmbySsengZ8cLJJBBrXzQ==", "license": "MIT", "dependencies": { - "@microsoft/applicationinsights-common": "3.3.9", - "@microsoft/applicationinsights-core-js": "3.3.9", + "@microsoft/applicationinsights-common": "3.3.10", + "@microsoft/applicationinsights-core-js": "3.3.10", "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/ts-async": ">= 0.5.4 < 2.x", @@ -3934,12 +4002,12 @@ } }, "node_modules/@microsoft/applicationinsights-common": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-common/-/applicationinsights-common-3.3.9.tgz", - "integrity": "sha512-IgruOuDBxmBK9jYo7SqLJG7Z9OwmAmlvHET49srpN6pqQlEjRpjD1nfA3Ps4RSEbF89a/ad2phQaBp8jvm122g==", + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-common/-/applicationinsights-common-3.3.10.tgz", + "integrity": "sha512-RVIenPIvNgZCbjJdALvLM4rNHgAFuHI7faFzHCgnI6S2WCUNGHeXlQTs9EUUrL+n2TPp9/cd0KKMILU5VVyYiA==", "license": "MIT", "dependencies": { - "@microsoft/applicationinsights-core-js": "3.3.9", + "@microsoft/applicationinsights-core-js": "3.3.10", "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/ts-utils": ">= 0.11.8 < 2.x" @@ -3949,9 +4017,9 @@ } }, "node_modules/@microsoft/applicationinsights-core-js": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-3.3.9.tgz", - "integrity": "sha512-xliiE9H09xCycndlua4QjajN8q5k/ET6VCv+e0Jjodxr9+cmoOP/6QY9dun9ptokuwR8TK0qOaIJ8z4fgslVSA==", + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-3.3.10.tgz", + "integrity": "sha512-5yKeyassZTq2l+SAO4npu6LPnbS++UD+M+Ghjm9uRzoBwD8tumFx0/F8AkSVqbniSREd+ztH/2q2foewa2RZyg==", "license": "MIT", "dependencies": { "@microsoft/applicationinsights-shims": "3.0.1", @@ -3973,14 +4041,14 @@ } }, "node_modules/@microsoft/applicationinsights-web-basic": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-basic/-/applicationinsights-web-basic-3.3.9.tgz", - "integrity": "sha512-8tLaAgsCpWjoaxit546RqeuECnHQPBLnOZhzTYG76oPG1ku7dNXaRNieuZLbO+XmAtg/oxntKLAVoPND8NRgcA==", + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-basic/-/applicationinsights-web-basic-3.3.10.tgz", + "integrity": "sha512-AZib5DAT3NU0VT0nLWEwXrnoMDDgZ/5S4dso01CNU5ELNxLdg+1fvchstlVdMy4FrAnxzs8Wf/GIQNFYOVgpAw==", "license": "MIT", "dependencies": { - "@microsoft/applicationinsights-channel-js": "3.3.9", - "@microsoft/applicationinsights-common": "3.3.9", - "@microsoft/applicationinsights-core-js": "3.3.9", + "@microsoft/applicationinsights-channel-js": "3.3.10", + "@microsoft/applicationinsights-common": "3.3.10", + "@microsoft/applicationinsights-core-js": "3.3.10", "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/ts-async": ">= 0.5.4 < 2.x", @@ -4012,9 +4080,9 @@ } }, "node_modules/@microsoft/vscode-azext-azureutils": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/@microsoft/vscode-azext-azureutils/-/vscode-azext-azureutils-3.4.5.tgz", - "integrity": "sha512-lu4WgnFTvmIe3al3JIGZ2KX3mAvlhNH2XW4tXAknaGwCnJx8sCFIoMGJkEnYRwdFvcXekhPPW5TXcGMRK9QkVw==", + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@microsoft/vscode-azext-azureutils/-/vscode-azext-azureutils-3.4.10.tgz", + "integrity": "sha512-lW3KZgGKn6alQ6SatsmHIVlxCaSktGrOdigM+TDYTQJR0+hryD+klYVNCf+c9J7VDCutI7q6M3wwsz1hvMu1bQ==", "license": "MIT", "dependencies": { "@azure/arm-authorization": "^9.0.0", @@ -4080,9 +4148,9 @@ } }, "node_modules/@microsoft/vscode-azext-utils": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@microsoft/vscode-azext-utils/-/vscode-azext-utils-3.3.1.tgz", - "integrity": "sha512-EDvmlo/YodaxdFNuaqGfdK7oH4RiZZc21WlbDLoY8YN4oy3bGz4UWgnY/nU+Mb4K+HCRPqxWGZe6Qtwg+P8eZA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@microsoft/vscode-azext-utils/-/vscode-azext-utils-3.3.3.tgz", + "integrity": "sha512-rltLtVeUTUNHEeGzyw7A0GoRhHNBRWRpB6N2LEETBUXn5J06EqgXg/K6JxO2NCooCAi+eI+g1uSUCn2AM4DsTQ==", "license": "MIT", "dependencies": { "@microsoft/vscode-azureresources-api": "^2.3.1", @@ -4113,18 +4181,18 @@ } }, "node_modules/@microsoft/vscode-azureresources-api": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@microsoft/vscode-azureresources-api/-/vscode-azureresources-api-2.5.0.tgz", - "integrity": "sha512-MyPb9bm/NV4HulGWNrKQk8u9FjL3beVUMJ5ADE5VpJlCnfN1MqUT3I0vDIOf7qJV4xUmt6t+dX6EStximapxoQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@microsoft/vscode-azureresources-api/-/vscode-azureresources-api-2.5.1.tgz", + "integrity": "sha512-CUlDVsau6RJA8F1IENnfA3N0XqyGQz/VJgh9QLnWjRkiBjW8/VSUpxNab6qflnN9SS38EHGv81v/92kEkoOQKQ==", "license": "MIT", "peerDependencies": { "@azure/ms-rest-azure-env": "^2.0.0" } }, "node_modules/@monaco-editor/loader": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.5.0.tgz", - "integrity": "sha512-hKoGSM+7aAc7eRTRjpqAZucPmoNOC4UUbknb/VNoTkEIkCPhqV8LfbsgM1webRM7S/z21eHEx9Fkwx8Z/C/+Xw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.7.0.tgz", + "integrity": "sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==", "license": "MIT", "dependencies": { "state-local": "^1.0.6" @@ -4154,19 +4222,10 @@ "mongodb-explain-compat": "^3.3.23" } }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.3.0.tgz", - "integrity": "sha512-zlayKCsIjYb7/IdfqxorK5+xUMyi4vOKcFy10wKJYc63NSdKI8mNME+uJqfatkPmOSMMUiojrL58IePKBm3gvQ==", - "license": "MIT", - "dependencies": { - "sparse-bitfield": "^3.0.3" - } - }, - "node_modules/@mongodb-js/shell-bson-parser": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@mongodb-js/shell-bson-parser/-/shell-bson-parser-1.3.3.tgz", - "integrity": "sha512-B72m2oLK/yCUF5bX1BUFdjfO2LHKsqFNmoOhmw8+o36o2JMlwT0g0+p+s5aYVp9MVReb+l+3Fa3aAYq2cNo5bA==", + "node_modules/@mongodb-js/explain-plan-helper/node_modules/@mongodb-js/shell-bson-parser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/shell-bson-parser/-/shell-bson-parser-1.4.0.tgz", + "integrity": "sha512-3HO90liE6pmEuUMi7SWR1HooVk23/jfx5iaBZHo250iYyF5uaqssepBGRF7J/14pmgTSwIGrrDd5rQtBYrY7wA==", "license": "Apache-2.0", "dependencies": { "acorn": "^8.14.1" @@ -4175,43 +4234,63 @@ "bson": "^4.6.3 || ^5 || ^6" } }, - "node_modules/@napi-rs/nice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.4.tgz", - "integrity": "sha512-Sqih1YARrmMoHlXGgI9JrrgkzxcaaEso0AH+Y7j8NHonUs+xe4iDsgC3IBIDNdzEewbNpccNN6hip+b5vmyRLw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 10" - }, + "node_modules/@mongodb-js/explain-plan-helper/node_modules/bson": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", + "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.3.2.tgz", + "integrity": "sha512-QgA5AySqB27cGTXBFmnpifAi7HxoGUeezwo6p9dI03MuDB6Pp33zgclqVb6oVK3j6I9Vesg0+oojW2XxB59SGg==", + "license": "MIT", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, "funding": { "type": "github", "url": "https://github.com/sponsors/Brooooooklyn" }, "optionalDependencies": { - "@napi-rs/nice-android-arm-eabi": "1.0.4", - "@napi-rs/nice-android-arm64": "1.0.4", - "@napi-rs/nice-darwin-arm64": "1.0.4", - "@napi-rs/nice-darwin-x64": "1.0.4", - "@napi-rs/nice-freebsd-x64": "1.0.4", - "@napi-rs/nice-linux-arm-gnueabihf": "1.0.4", - "@napi-rs/nice-linux-arm64-gnu": "1.0.4", - "@napi-rs/nice-linux-arm64-musl": "1.0.4", - "@napi-rs/nice-linux-ppc64-gnu": "1.0.4", - "@napi-rs/nice-linux-riscv64-gnu": "1.0.4", - "@napi-rs/nice-linux-s390x-gnu": "1.0.4", - "@napi-rs/nice-linux-x64-gnu": "1.0.4", - "@napi-rs/nice-linux-x64-musl": "1.0.4", - "@napi-rs/nice-win32-arm64-msvc": "1.0.4", - "@napi-rs/nice-win32-ia32-msvc": "1.0.4", - "@napi-rs/nice-win32-x64-msvc": "1.0.4" + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" } }, "node_modules/@napi-rs/nice-android-arm-eabi": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.4.tgz", - "integrity": "sha512-OZFMYUkih4g6HCKTjqJHhMUlgvPiDuSLZPbPBWHLjKmFTv74COzRlq/gwHtmEVaR39mJQ6ZyttDl2HNMUbLVoA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", "cpu": [ "arm" ], @@ -4226,9 +4305,9 @@ } }, "node_modules/@napi-rs/nice-android-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.4.tgz", - "integrity": "sha512-k8u7cjeA64vQWXZcRrPbmwjH8K09CBnNaPnI9L1D5N6iMPL3XYQzLcN6WwQonfcqCDv5OCY3IqX89goPTV4KMw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", "cpu": [ "arm64" ], @@ -4243,9 +4322,9 @@ } }, "node_modules/@napi-rs/nice-darwin-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.4.tgz", - "integrity": "sha512-GsLdQvUcuVzoyzmtjsThnpaVEizAqH5yPHgnsBmq3JdVoVZHELFo7PuJEdfOH1DOHi2mPwB9sCJEstAYf3XCJA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", "cpu": [ "arm64" ], @@ -4260,9 +4339,9 @@ } }, "node_modules/@napi-rs/nice-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.4.tgz", - "integrity": "sha512-1y3gyT3e5zUY5SxRl3QDtJiWVsbkmhtUHIYwdWWIQ3Ia+byd/IHIEpqAxOGW1nhhnIKfTCuxBadHQb+yZASVoA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", "cpu": [ "x64" ], @@ -4277,9 +4356,9 @@ } }, "node_modules/@napi-rs/nice-freebsd-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.4.tgz", - "integrity": "sha512-06oXzESPRdXUuzS8n2hGwhM2HACnDfl3bfUaSqLGImM8TA33pzDXgGL0e3If8CcFWT98aHows5Lk7xnqYNGFeA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", "cpu": [ "x64" ], @@ -4294,9 +4373,9 @@ } }, "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.4.tgz", - "integrity": "sha512-CgklZ6g8WL4+EgVVkxkEvvsi2DSLf9QIloxWO0fvQyQBp6VguUSX3eHLeRpqwW8cRm2Hv/Q1+PduNk7VK37VZw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", "cpu": [ "arm" ], @@ -4311,9 +4390,9 @@ } }, "node_modules/@napi-rs/nice-linux-arm64-gnu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.4.tgz", - "integrity": "sha512-wdAJ7lgjhAlsANUCv0zi6msRwq+D4KDgU+GCCHssSxWmAERZa2KZXO0H2xdmoJ/0i03i6YfK/sWaZgUAyuW2oQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", "cpu": [ "arm64" ], @@ -4328,9 +4407,9 @@ } }, "node_modules/@napi-rs/nice-linux-arm64-musl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.4.tgz", - "integrity": "sha512-4b1KYG+sriufhFrpUS9uNOEYYJqSfcbnwGx6uGX7JjrH8tELG90cOpCawz5THNIwlS3DhLgnCOcn0+4p6z26QA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", "cpu": [ "arm64" ], @@ -4345,9 +4424,9 @@ } }, "node_modules/@napi-rs/nice-linux-ppc64-gnu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.4.tgz", - "integrity": "sha512-iaf3vMRgr23oe1PUaKpxaH3DS0IMN0+N9iEiWVwYPm/U15vZFYdqVegGfN2PzrZLUl5lc8ZxbmEKDfuqslhAMA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", "cpu": [ "ppc64" ], @@ -4362,9 +4441,9 @@ } }, "node_modules/@napi-rs/nice-linux-riscv64-gnu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.4.tgz", - "integrity": "sha512-UXoREY6Yw6rHrGuTwQgBxpfjK34t6mTjibE9/cXbefL9AuUCJ9gEgwNKZiONuR5QGswChqo9cnthjdKkYyAdDg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", "cpu": [ "riscv64" ], @@ -4379,9 +4458,9 @@ } }, "node_modules/@napi-rs/nice-linux-s390x-gnu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.4.tgz", - "integrity": "sha512-eFbgYCRPmsqbYPAlLYU5hYTNbogmIDUvknilehHsFhCH1+0/kN87lP+XaLT0Yeq4V/rpwChSd9vlz4muzFArtw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", "cpu": [ "s390x" ], @@ -4396,9 +4475,9 @@ } }, "node_modules/@napi-rs/nice-linux-x64-gnu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.4.tgz", - "integrity": "sha512-4T3E6uTCwWT6IPnwuPcWVz3oHxvEp/qbrCxZhsgzwTUBEwu78EGNXGdHfKJQt3soth89MLqZJw+Zzvnhrsg1mQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", "cpu": [ "x64" ], @@ -4413,9 +4492,9 @@ } }, "node_modules/@napi-rs/nice-linux-x64-musl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.4.tgz", - "integrity": "sha512-NtbBkAeyBPLvCBkWtwkKXkNSn677eaT0cX3tygq+2qVv71TmHgX4gkX6o9BXjlPzdgPGwrUudavCYPT9tzkEqQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", "cpu": [ "x64" ], @@ -4429,10 +4508,27 @@ "node": ">= 10" } }, + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@napi-rs/nice-win32-arm64-msvc": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.4.tgz", - "integrity": "sha512-vubOe3i+YtSJGEk/++73y+TIxbuVHi+W8ZzrRm2eETCjCRwNlgbfToQZ85dSA+4iBB/NJRGNp+O4hfdbbttZWA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", "cpu": [ "arm64" ], @@ -4447,9 +4543,9 @@ } }, "node_modules/@napi-rs/nice-win32-ia32-msvc": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.4.tgz", - "integrity": "sha512-BMOVrUDZeg1RNRKVlh4eyLv5djAAVLiSddfpuuQ47EFjBcklg0NUeKMFKNrKQR4UnSn4HAiACLD7YK7koskwmg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", "cpu": [ "ia32" ], @@ -4464,9 +4560,9 @@ } }, "node_modules/@napi-rs/nice-win32-x64-msvc": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.4.tgz", - "integrity": "sha512-kCNk6HcRZquhw/whwh4rHsdPyOSCQCgnVDVik+Y9cuSVTDy3frpiCJTScJqPPS872h4JgZKkr/+CwcwttNEo9Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", "cpu": [ "x64" ], @@ -4892,9 +4988,9 @@ } }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.6.1.tgz", - "integrity": "sha512-95DXXJxNkpYu+sqmpDp7vbw9JCyiNpHuCsvuMuOgVFrKQlwEIn9Y1+NNIQJq+zFL+eWyxw6htthB5CtdwJupNA==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.6.2.tgz", + "integrity": "sha512-IhIAD5n4XvGHuL9nAgWfsBR0TdxtjrUWETYKCBHxauYXEv+b+ctEbs9neEgPC7Ecgzv4bpZTBwesAoGDeFymzA==", "dev": true, "license": "MIT", "dependencies": { @@ -4912,7 +5008,7 @@ "@types/webpack": "5.x", "react-refresh": ">=0.10.0 <1.0.0", "sockjs-client": "^1.4.0", - "type-fest": ">=0.17.0 <5.0.0", + "type-fest": ">=0.17.0 <6.0.0", "webpack": "^5.0.0", "webpack-dev-server": "^4.8.0 || 5.x", "webpack-hot-middleware": "2.x", @@ -4967,28 +5063,28 @@ "license": "MIT" }, "node_modules/@secretlint/config-creator": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@secretlint/config-creator/-/config-creator-10.2.1.tgz", - "integrity": "sha512-nyuRy8uo2+mXPIRLJ93wizD1HbcdDIsVfgCT01p/zGVFrtvmiL7wqsl4KgZH0QFBM/KRLDLeog3/eaM5ASjtvw==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/config-creator/-/config-creator-10.2.2.tgz", + "integrity": "sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/types": "^10.2.1" + "@secretlint/types": "^10.2.2" }, "engines": { "node": ">=20.0.0" } }, "node_modules/@secretlint/config-loader": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@secretlint/config-loader/-/config-loader-10.2.1.tgz", - "integrity": "sha512-ob1PwhuSw/Hc6Y4TA63NWj6o++rZTRJOwPZG82o6tgEURqkrAN44fXH9GIouLsOxKa8fbCRLMeGmSBtJLdSqtw==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/config-loader/-/config-loader-10.2.2.tgz", + "integrity": "sha512-ndjjQNgLg4DIcMJp4iaRD6xb9ijWQZVbd9694Ol2IszBIbGPPkwZHzJYKICbTBmh6AH/pLr0CiCaWdGJU7RbpQ==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/profiler": "^10.2.1", - "@secretlint/resolver": "^10.2.1", - "@secretlint/types": "^10.2.1", + "@secretlint/profiler": "^10.2.2", + "@secretlint/resolver": "^10.2.2", + "@secretlint/types": "^10.2.2", "ajv": "^8.17.1", "debug": "^4.4.1", "rc-config-loader": "^4.1.3" @@ -4998,14 +5094,14 @@ } }, "node_modules/@secretlint/core": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-10.2.1.tgz", - "integrity": "sha512-2sPp5IE7pM5Q+f1/NK6nJ49FKuqh+e3fZq5MVbtVjegiD4NMhjcoML1Cg7atCBgXPufhXRHY1DWhIhkGzOx/cw==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-10.2.2.tgz", + "integrity": "sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/profiler": "^10.2.1", - "@secretlint/types": "^10.2.1", + "@secretlint/profiler": "^10.2.2", + "@secretlint/types": "^10.2.2", "debug": "^4.4.1", "structured-source": "^4.0.0" }, @@ -5014,14 +5110,14 @@ } }, "node_modules/@secretlint/formatter": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@secretlint/formatter/-/formatter-10.2.1.tgz", - "integrity": "sha512-0A7ho3j0Y4ysK0mREB3O6FKQtScD4rQgfzuI4Slv9Cut1ynQOI7JXAoIFm4XVzhNcgtmEPeD3pQB206VFphBgQ==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/formatter/-/formatter-10.2.2.tgz", + "integrity": "sha512-10f/eKV+8YdGKNQmoDUD1QnYL7TzhI2kzyx95vsJKbEa8akzLAR5ZrWIZ3LbcMmBLzxlSQMMccRmi05yDQ5YDA==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/resolver": "^10.2.1", - "@secretlint/types": "^10.2.1", + "@secretlint/resolver": "^10.2.2", + "@secretlint/types": "^10.2.2", "@textlint/linter-formatter": "^15.2.0", "@textlint/module-interop": "^15.2.0", "@textlint/types": "^15.2.0", @@ -5037,9 +5133,9 @@ } }, "node_modules/@secretlint/formatter/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", "engines": { @@ -5050,18 +5146,18 @@ } }, "node_modules/@secretlint/node": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@secretlint/node/-/node-10.2.1.tgz", - "integrity": "sha512-MQFte7C+5ZHINQGSo6+eUECcUCGvKR9PVgZcTsRj524xsbpeBqF1q1dHsUsdGb9r2jlvf40Q14MRZwMcpmLXWQ==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/node/-/node-10.2.2.tgz", + "integrity": "sha512-eZGJQgcg/3WRBwX1bRnss7RmHHK/YlP/l7zOQsrjexYt6l+JJa5YhUmHbuGXS94yW0++3YkEJp0kQGYhiw1DMQ==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/config-loader": "^10.2.1", - "@secretlint/core": "^10.2.1", - "@secretlint/formatter": "^10.2.1", - "@secretlint/profiler": "^10.2.1", - "@secretlint/source-creator": "^10.2.1", - "@secretlint/types": "^10.2.1", + "@secretlint/config-loader": "^10.2.2", + "@secretlint/core": "^10.2.2", + "@secretlint/formatter": "^10.2.2", + "@secretlint/profiler": "^10.2.2", + "@secretlint/source-creator": "^10.2.2", + "@secretlint/types": "^10.2.2", "debug": "^4.4.1", "p-map": "^7.0.3" }, @@ -5070,23 +5166,23 @@ } }, "node_modules/@secretlint/profiler": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-10.2.1.tgz", - "integrity": "sha512-gOlfPZ1ASc5mP5cqsL809uMJGp85t+AJZg1ZPscWvB/m5UFFgeNTZcOawggb1S5ExDvR388sIJxagx5hyDZ34g==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-10.2.2.tgz", + "integrity": "sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==", "dev": true, "license": "MIT" }, "node_modules/@secretlint/resolver": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@secretlint/resolver/-/resolver-10.2.1.tgz", - "integrity": "sha512-AuwehKwnE2uxKaJVv2Z5a8FzGezBmlNhtLKm70Cvsvtwd0oAtenxCSTKXkiPGYC0+S91fAw3lrX7CUkyr9cTCA==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/resolver/-/resolver-10.2.2.tgz", + "integrity": "sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==", "dev": true, "license": "MIT" }, "node_modules/@secretlint/secretlint-formatter-sarif": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@secretlint/secretlint-formatter-sarif/-/secretlint-formatter-sarif-10.2.1.tgz", - "integrity": "sha512-qOZUYBesLkhCBP7YVMv0l1Pypt8e3V2rX2PT2Q5aJhJvKTcMiP9YTHG/3H9Zb7Gq3UIwZLEAGXRqJOu1XlE0Fg==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-formatter-sarif/-/secretlint-formatter-sarif-10.2.2.tgz", + "integrity": "sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5094,22 +5190,22 @@ } }, "node_modules/@secretlint/secretlint-rule-no-dotenv": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-10.2.1.tgz", - "integrity": "sha512-XwPjc9Wwe2QljerfvGlBmLJAJVATLvoXXw1fnKyCDNgvY33cu1Z561Kxg93xfRB5LSep0S5hQrAfZRJw6x7MBQ==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-10.2.2.tgz", + "integrity": "sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/types": "^10.2.1" + "@secretlint/types": "^10.2.2" }, "engines": { "node": ">=20.0.0" } }, "node_modules/@secretlint/secretlint-rule-preset-recommend": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-10.2.1.tgz", - "integrity": "sha512-/kj3UOpFbJt80dqoeEaUVv5nbeW1jPqPExA447FItthiybnaDse5C5HYcfNA2ywEInr399ELdcmpEMRe+ld1iQ==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-10.2.2.tgz", + "integrity": "sha512-K3jPqjva8bQndDKJqctnGfwuAxU2n9XNCPtbXVI5JvC7FnQiNg/yWlQPbMUlBXtBoBGFYp08A94m6fvtc9v+zA==", "dev": true, "license": "MIT", "engines": { @@ -5117,13 +5213,13 @@ } }, "node_modules/@secretlint/source-creator": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@secretlint/source-creator/-/source-creator-10.2.1.tgz", - "integrity": "sha512-1CgO+hsRx8KdA5R/LEMNTJkujjomwSQQVV0BcuKynpOefV/rRlIDVQJOU0tJOZdqUMC15oAAwQXs9tMwWLu4JQ==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/source-creator/-/source-creator-10.2.2.tgz", + "integrity": "sha512-h6I87xJfwfUTgQ7irWq7UTdq/Bm1RuQ/fYhA3dtTIAop5BwSFmZyrchph4WcoEvbN460BWKmk4RYSvPElIIvxw==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/types": "^10.2.1", + "@secretlint/types": "^10.2.2", "istextorbinary": "^9.5.0" }, "engines": { @@ -5131,9 +5227,9 @@ } }, "node_modules/@secretlint/types": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@secretlint/types/-/types-10.2.1.tgz", - "integrity": "sha512-F5k1qpoMoUe7rrZossOBgJ3jWKv/FGDBZIwepqnefgPmNienBdInxhtZeXiGwjcxXHVhsdgp6I5Fi/M8PMgwcw==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/types/-/types-10.2.2.tgz", + "integrity": "sha512-Nqc90v4lWCXyakD6xNyNACBJNJ0tNCwj2WNk/7ivyacYHxiITVgmLUFXTBOeCdy79iz6HtN9Y31uw/jbLrdOAg==", "dev": true, "license": "MIT", "engines": { @@ -5169,9 +5265,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.34.38", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.38.tgz", - "integrity": "sha512-HpkxMmc2XmZKhvaKIZZThlHmx1L0I/V1hWK1NubtlFnr6ZqdiOpV72TKudZUNQjZNsyDBay72qFEhEvb+bcwcA==", + "version": "0.34.41", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", + "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", "dev": true, "license": "MIT" }, @@ -5222,33 +5318,33 @@ } }, "node_modules/@slickgrid-universal/binding": { - "version": "5.12.2", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/binding/-/binding-5.12.2.tgz", - "integrity": "sha512-o7dTmmW4DVBZi01VQHjO/cIJEH5RNz+rIrnQKwldTRoKC05vKOQTF/vuQAqTkhI7YHzFaspfvdy92oagEt5niw==", + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/binding/-/binding-9.8.0.tgz", + "integrity": "sha512-FN3zOGeyzPHbMql7TVLj2LPtr0kFsNBMshTIsKb2SW9ldn0XAp9yi9rhdg9s7TozhIyUvMN5xDj8YnKeo4V3Pg==", "license": "MIT" }, "node_modules/@slickgrid-universal/common": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/common/-/common-5.14.0.tgz", - "integrity": "sha512-Mme6d5G+lUqXCt0VOrzSscOJ1oYRSEIOC1v3Gdg+P4rQK0Hhgl0lSAzsGQX6yBrIw7rOX1VN+OZ9zoEqYidILA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/common/-/common-9.9.0.tgz", + "integrity": "sha512-CWiocXabZxZkgTi99Jsd6P5e9cUXXy5EBc0DRV9hMoxM52SBq8lKFnGHxgx3UCY3eV+swLgeuJhEOzkcCZIcwA==", "license": "MIT", "dependencies": { - "@excel-builder-vanilla/types": "^3.1.0", + "@excel-builder-vanilla/types": "^4.1.0", "@formkit/tempo": "^0.1.2", - "@slickgrid-universal/binding": "5.12.2", - "@slickgrid-universal/event-pub-sub": "5.13.0", - "@slickgrid-universal/utils": "5.12.0", + "@slickgrid-universal/binding": "9.8.0", + "@slickgrid-universal/event-pub-sub": "9.9.0", + "@slickgrid-universal/utils": "9.9.0", "@types/sortablejs": "^1.15.8", "@types/trusted-types": "^2.0.7", "autocompleter": "^9.3.2", "dequal": "^2.0.3", - "multiple-select-vanilla": "^3.5.0", + "multiple-select-vanilla": "^4.3.9", "sortablejs": "^1.15.6", "un-flatten-tree": "^2.0.12", - "vanilla-calendar-pro": "^2.9.10" + "vanilla-calendar-pro": "^3.0.5" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^20.0.0 || >=22.0.0" }, "funding": { "type": "ko_fi", @@ -5256,64 +5352,64 @@ } }, "node_modules/@slickgrid-universal/custom-footer-component": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/custom-footer-component/-/custom-footer-component-5.14.0.tgz", - "integrity": "sha512-4Fr5F+40KF15rI0VixWdNk4VSvjnsSI5DVqSanrmTCNfntJ7sYQ+UBF/LIQMqj99GMkztzPLOdaniFyABk2+Wg==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/custom-footer-component/-/custom-footer-component-9.9.0.tgz", + "integrity": "sha512-1znVfnijRmnLwRLh29mT0lxu1em+2UDmMMOtCBkHN/grGhi4qXuS3w/Pw4C0JVOYW7Z8BZ77H1FxD0kFautwZw==", "license": "MIT", "dependencies": { "@formkit/tempo": "^0.1.2", - "@slickgrid-universal/binding": "5.12.2", - "@slickgrid-universal/common": "5.14.0" + "@slickgrid-universal/binding": "9.8.0", + "@slickgrid-universal/common": "9.9.0" } }, "node_modules/@slickgrid-universal/empty-warning-component": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/empty-warning-component/-/empty-warning-component-5.14.0.tgz", - "integrity": "sha512-RaEBZ5Wg24SkSylKpCbfduC9d9uDaMv7KusCLXvws7z2V4nCoAIBZdb694E6lVBXsZu3UMPZMRw5QBukZQJs9g==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/empty-warning-component/-/empty-warning-component-9.9.0.tgz", + "integrity": "sha512-uibW0NKBUI91OfjPzpuj8IaSUi5c/xJguWqzuJnPYr++nXVAls/JRkiUoJwuuQ91CEo2A7HOypI8AScy0FAsgg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "5.14.0" + "@slickgrid-universal/common": "9.9.0" } }, "node_modules/@slickgrid-universal/event-pub-sub": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/event-pub-sub/-/event-pub-sub-5.13.0.tgz", - "integrity": "sha512-hjmfRw7fRoyfRgsN3ZsOiNuHmPn/+IxKJTkIhwL2HtWq2j+lP+vHfa7fqUmdMRSg/ResYYHXcF2wlCAVtln/+Q==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/event-pub-sub/-/event-pub-sub-9.9.0.tgz", + "integrity": "sha512-pJkQhcMkwWFUl1vnA/HeopxUjN9T+K3sZuijvxWFuWo8SLmkOt7GOnSrLmFJ3rBpKSmbQj770eisNDO9EhBhJQ==", "license": "MIT", "dependencies": { - "@slickgrid-universal/utils": "5.12.0" + "@slickgrid-universal/utils": "9.9.0" } }, "node_modules/@slickgrid-universal/pagination-component": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/pagination-component/-/pagination-component-5.14.0.tgz", - "integrity": "sha512-+HrGGdsnjYcEeT4xB6trCBvOgNHv847X58ccpCYORxXmLIDUmToCNuN+lYvCKvFQh1on3GPpy0v+6A+qZrmLbQ==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/pagination-component/-/pagination-component-9.9.0.tgz", + "integrity": "sha512-JehVTsy2TAFFBd+qDiv/sV4ZkkEH/UwCzzaYb2la/3kghK+9ZVmNT9jKhWLGVVnb9d9HEdC0OvlafwUbr0tQJg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/binding": "5.12.2", - "@slickgrid-universal/common": "5.14.0" + "@slickgrid-universal/binding": "9.8.0", + "@slickgrid-universal/common": "9.9.0" } }, "node_modules/@slickgrid-universal/row-detail-view-plugin": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/row-detail-view-plugin/-/row-detail-view-plugin-5.14.0.tgz", - "integrity": "sha512-xyEr0ucwchqAshuidKhcBPDrw/jwtGxUbQJg28W1LiMD+vQbsF5LlGiIB53lfBGniC34lHWiX1B/RI3Z9z0kXA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/row-detail-view-plugin/-/row-detail-view-plugin-9.9.0.tgz", + "integrity": "sha512-D5TK/n9UbXmoZZMpG2uWd0Tc6W8EW4oSo/3+0B5Gh9vjO5S7GgzWmFVxgjo4/bkoSZP9Xcow+6N1p2khmISXMg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "5.14.0", - "@slickgrid-universal/utils": "5.12.0" + "@slickgrid-universal/common": "9.9.0", + "@slickgrid-universal/utils": "9.9.0" } }, "node_modules/@slickgrid-universal/utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-5.12.0.tgz", - "integrity": "sha512-vw5Is2bdY+EjYw8dAJaAW6f+Iir0trwcz43cVI+Cpic9sTC6c7+UP89cvyW1sISN7YsWYRdtJjDT+BW9i6sSwg==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-9.9.0.tgz", + "integrity": "sha512-rys/1HR5DGxbBMP6ERYxMIPGHq2CnmVlRrh4118ntiSqptf2UW1bEv6VVmRUUmqZhcm8X3XfslCLk1cbotVp4g==", "license": "MIT" }, "node_modules/@swc/cli": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.7.8.tgz", - "integrity": "sha512-27Ov4rm0s2C6LLX+NDXfDVB69LGs8K94sXtFhgeUyQ4DBywZuCgTBu2loCNHRr8JhT9DeQvJM5j9FAu/THbo4w==", + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.7.9.tgz", + "integrity": "sha512-AFQu3ZZ9IcdClTknxbug08S9ed/q8F3aYkO5NoZ+6IjQ5UEo1s2HN1GRKNvUslYx2EoVYxd+6xGcp6C7wwtxyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5346,15 +5442,15 @@ } }, "node_modules/@swc/core": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.13.2.tgz", - "integrity": "sha512-YWqn+0IKXDhqVLKoac4v2tV6hJqB/wOh8/Br8zjqeqBkKa77Qb0Kw2i7LOFzjFNZbZaPH6AlMGlBwNrxaauaAg==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.3.tgz", + "integrity": "sha512-Qd8eBPkUFL4eAONgGjycZXj1jFCBW8Fd+xF0PzdTlBCWQIV1xnUT7B93wUANtW3KGjl3TRcOyxwSx/u/jyKw/Q==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.23" + "@swc/types": "^0.1.25" }, "engines": { "node": ">=10" @@ -5364,16 +5460,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.13.2", - "@swc/core-darwin-x64": "1.13.2", - "@swc/core-linux-arm-gnueabihf": "1.13.2", - "@swc/core-linux-arm64-gnu": "1.13.2", - "@swc/core-linux-arm64-musl": "1.13.2", - "@swc/core-linux-x64-gnu": "1.13.2", - "@swc/core-linux-x64-musl": "1.13.2", - "@swc/core-win32-arm64-msvc": "1.13.2", - "@swc/core-win32-ia32-msvc": "1.13.2", - "@swc/core-win32-x64-msvc": "1.13.2" + "@swc/core-darwin-arm64": "1.15.3", + "@swc/core-darwin-x64": "1.15.3", + "@swc/core-linux-arm-gnueabihf": "1.15.3", + "@swc/core-linux-arm64-gnu": "1.15.3", + "@swc/core-linux-arm64-musl": "1.15.3", + "@swc/core-linux-x64-gnu": "1.15.3", + "@swc/core-linux-x64-musl": "1.15.3", + "@swc/core-win32-arm64-msvc": "1.15.3", + "@swc/core-win32-ia32-msvc": "1.15.3", + "@swc/core-win32-x64-msvc": "1.15.3" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" @@ -5385,9 +5481,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.2.tgz", - "integrity": "sha512-44p7ivuLSGFJ15Vly4ivLJjg3ARo4879LtEBAabcHhSZygpmkP8eyjyWxrH3OxkY1eRZSIJe8yRZPFw4kPXFPw==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.3.tgz", + "integrity": "sha512-AXfeQn0CvcQ4cndlIshETx6jrAM45oeUrK8YeEY6oUZU/qzz0Id0CyvlEywxkWVC81Ajpd8TQQ1fW5yx6zQWkQ==", "cpu": [ "arm64" ], @@ -5402,9 +5498,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.13.2.tgz", - "integrity": "sha512-Lb9EZi7X2XDAVmuUlBm2UvVAgSCbD3qKqDCxSI4jEOddzVOpNCnyZ/xEampdngUIyDDhhJLYU9duC+Mcsv5Y+A==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.3.tgz", + "integrity": "sha512-p68OeCz1ui+MZYG4wmfJGvcsAcFYb6Sl25H9TxWl+GkBgmNimIiRdnypK9nBGlqMZAcxngNPtnG3kEMNnvoJ2A==", "cpu": [ "x64" ], @@ -5419,9 +5515,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.2.tgz", - "integrity": "sha512-9TDe/92ee1x57x+0OqL1huG4BeljVx0nWW4QOOxp8CCK67Rpc/HHl2wciJ0Kl9Dxf2NvpNtkPvqj9+BUmM9WVA==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.3.tgz", + "integrity": "sha512-Nuj5iF4JteFgwrai97mUX+xUOl+rQRHqTvnvHMATL/l9xE6/TJfPBpd3hk/PVpClMXG3Uvk1MxUFOEzM1JrMYg==", "cpu": [ "arm" ], @@ -5436,9 +5532,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.2.tgz", - "integrity": "sha512-KJUSl56DBk7AWMAIEcU83zl5mg3vlQYhLELhjwRFkGFMvghQvdqQ3zFOYa4TexKA7noBZa3C8fb24rI5sw9Exg==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.3.tgz", + "integrity": "sha512-2Nc/s8jE6mW2EjXWxO/lyQuLKShcmTrym2LRf5Ayp3ICEMX6HwFqB1EzDhwoMa2DcUgmnZIalesq2lG3krrUNw==", "cpu": [ "arm64" ], @@ -5453,9 +5549,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.2.tgz", - "integrity": "sha512-teU27iG1oyWpNh9CzcGQ48ClDRt/RCem7mYO7ehd2FY102UeTws2+OzLESS1TS1tEZipq/5xwx3FzbVgiolCiQ==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.3.tgz", + "integrity": "sha512-j4SJniZ/qaZ5g8op+p1G9K1z22s/EYGg1UXIb3+Cg4nsxEpF5uSIGEE4mHUfA70L0BR9wKT2QF/zv3vkhfpX4g==", "cpu": [ "arm64" ], @@ -5470,9 +5566,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.2.tgz", - "integrity": "sha512-dRPsyPyqpLD0HMRCRpYALIh4kdOir8pPg4AhNQZLehKowigRd30RcLXGNVZcc31Ua8CiPI4QSgjOIxK+EQe4LQ==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.3.tgz", + "integrity": "sha512-aKttAZnz8YB1VJwPQZtyU8Uk0BfMP63iDMkvjhJzRZVgySmqt/apWSdnoIcZlUoGheBrcqbMC17GGUmur7OT5A==", "cpu": [ "x64" ], @@ -5487,9 +5583,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.2.tgz", - "integrity": "sha512-CCxETW+KkYEQDqz1SYC15YIWYheqFC+PJVOW76Maa/8yu8Biw+HTAcblKf2isrlUtK8RvrQN94v3UXkC2NzCEw==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.3.tgz", + "integrity": "sha512-oe8FctPu1gnUsdtGJRO2rvOUIkkIIaHqsO9xxN0bTR7dFTlPTGi2Fhk1tnvXeyAvCPxLIcwD8phzKg6wLv9yug==", "cpu": [ "x64" ], @@ -5504,9 +5600,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.2.tgz", - "integrity": "sha512-Wv/QTA6PjyRLlmKcN6AmSI4jwSMRl0VTLGs57PHTqYRwwfwd7y4s2fIPJVBNbAlXd795dOEP6d/bGSQSyhOX3A==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.3.tgz", + "integrity": "sha512-L9AjzP2ZQ/Xh58e0lTRMLvEDrcJpR7GwZqAtIeNLcTK7JVE+QineSyHp0kLkO1rttCHyCy0U74kDTj0dRz6raA==", "cpu": [ "arm64" ], @@ -5521,9 +5617,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.2.tgz", - "integrity": "sha512-PuCdtNynEkUNbUXX/wsyUC+t4mamIU5y00lT5vJcAvco3/r16Iaxl5UCzhXYaWZSNVZMzPp9qN8NlSL8M5pPxw==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.3.tgz", + "integrity": "sha512-B8UtogMzErUPDWUoKONSVBdsgKYd58rRyv2sHJWKOIMCHfZ22FVXICR4O/VwIYtlnZ7ahERcjayBHDlBZpR0aw==", "cpu": [ "ia32" ], @@ -5538,9 +5634,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.2.tgz", - "integrity": "sha512-qlmMkFZJus8cYuBURx1a3YAG2G7IW44i+FEYV5/32ylKkzGNAr9tDJSA53XNnNXkAB5EXSPsOz7bn5C3JlEtdQ==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.3.tgz", + "integrity": "sha512-SpZKMR9QBTecHeqpzJdYEfgw30Oo8b/Xl6rjSzBt1g0ZsXyy60KLXrp6IagQyfTYqNYE/caDvwtF2FPn7pomog==", "cpu": [ "x64" ], @@ -5589,9 +5685,9 @@ } }, "node_modules/@swc/types": { - "version": "0.1.23", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.23.tgz", - "integrity": "sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==", + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz", + "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5612,26 +5708,26 @@ } }, "node_modules/@textlint/ast-node-types": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.1.tgz", - "integrity": "sha512-20fEcLPsXg81yWpApv4FQxrZmlFF/Ta7/kz1HGIL+pJo5cSTmkc+eCki3GpOPZIoZk0tbJU8hrlwUb91F+3SNQ==", + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.4.0.tgz", + "integrity": "sha512-IqY8i7IOGuvy05wZxISB7Me1ZyrvhaQGgx6DavfQjH3cfwpPFdDbDYmMXMuSv2xLS1kDB1kYKBV7fL2Vi16lRA==", "dev": true, "license": "MIT" }, "node_modules/@textlint/linter-formatter": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.2.1.tgz", - "integrity": "sha512-oollG/BHa07+mMt372amxHohteASC+Zxgollc1sZgiyxo4S6EuureV3a4QIQB0NecA+Ak3d0cl0WI/8nou38jw==", + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.4.0.tgz", + "integrity": "sha512-rfqOZmnI1Wwc/Pa4LK+vagvVPmvxf9oRsBRqIOB04DwhucingZyAIJI/TyG18DIDYbP2aFXBZ3oOvyAxHe/8PQ==", "dev": true, "license": "MIT", "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "15.2.1", - "@textlint/resolver": "15.2.1", - "@textlint/types": "15.2.1", + "@textlint/module-interop": "15.4.0", + "@textlint/resolver": "15.4.0", + "@textlint/types": "15.4.0", "chalk": "^4.1.2", - "debug": "^4.4.1", + "debug": "^4.4.3", "js-yaml": "^3.14.1", "lodash": "^4.17.21", "pluralize": "^2.0.0", @@ -5672,27 +5768,27 @@ } }, "node_modules/@textlint/module-interop": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.2.1.tgz", - "integrity": "sha512-b/C/ZNrm05n1ypymDknIcpkBle30V2ZgE3JVqQlA9PnQV46Ky510qrZk6s9yfKgA3m1YRnAw04m8xdVtqjq1qg==", + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.4.0.tgz", + "integrity": "sha512-uGf+SFIfzOLCbZI0gp+2NLsrkSArsvEWulPP6lJuKp7yRHadmy7Xf/YHORe46qhNyyxc8PiAfiixHJSaHGUrGg==", "dev": true, "license": "MIT" }, "node_modules/@textlint/resolver": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.2.1.tgz", - "integrity": "sha512-FY3aK4tElEcOJVUsaMj4Zro4jCtKEEwUMIkDL0tcn6ljNcgOF7Em+KskRRk/xowFWayqDtdz5T3u7w/6fjjuJQ==", + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.4.0.tgz", + "integrity": "sha512-Vh/QceKZQHFJFG4GxxIsKM1Xhwv93mbtKHmFE5/ybal1mIKHdqF03Z9Guaqt6Sx/AeNUshq0hkMOEhEyEWnehQ==", "dev": true, "license": "MIT" }, "node_modules/@textlint/types": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.2.1.tgz", - "integrity": "sha512-zyqNhSatK1cwxDUgosEEN43hFh3WCty9Zm2Vm3ogU566IYegifwqN54ey/CiRy/DiO4vMcFHykuQnh2Zwp6LLw==", + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.4.0.tgz", + "integrity": "sha512-ZMwJgw/xjxJufOD+IB7I2Enl9Si4Hxo04B76RwUZ5cKBKzOPcmd6WvGe2F7jqdgmTdGnfMU+Bo/joQrjPNIWqg==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.2.1" + "@textlint/ast-node-types": "15.4.0" } }, "node_modules/@tokenizer/inflate": { @@ -5722,22 +5818,22 @@ "license": "MIT" }, "node_modules/@trpc/client": { - "version": "11.4.3", - "resolved": "https://registry.npmjs.org/@trpc/client/-/client-11.4.3.tgz", - "integrity": "sha512-i2suttUCfColktXT8bqex5kHW5jpT15nwUh0hGSDiW1keN621kSUQKcLJ095blqQAUgB+lsmgSqSMmB4L9shQQ==", + "version": "11.7.2", + "resolved": "https://registry.npmjs.org/@trpc/client/-/client-11.7.2.tgz", + "integrity": "sha512-OQxqUMfpDvjcszo9dbnqWQXnW2L5IbrKSz2H7l8s+mVM3EvYw7ztQ/gjFIN3iy0NcamiQfd4eE6qjcb9Lm+63A==", "funding": [ "https://trpc.io/sponsor" ], "license": "MIT", "peerDependencies": { - "@trpc/server": "11.4.3", + "@trpc/server": "11.7.2", "typescript": ">=5.7.2" } }, "node_modules/@trpc/server": { - "version": "11.4.3", - "resolved": "https://registry.npmjs.org/@trpc/server/-/server-11.4.3.tgz", - "integrity": "sha512-wnWq3wiLlMOlYkaIZz+qbuYA5udPTLS4GVVRyFkr6aT83xpdCHyVtURT+u4hSoIrOXQM9OPCNXSXsAujWZDdaw==", + "version": "11.7.2", + "resolved": "https://registry.npmjs.org/@trpc/server/-/server-11.7.2.tgz", + "integrity": "sha512-AgB26PXY69sckherIhCacKLY49rxE2XP5h38vr/KMZTbLCL1p8IuIoKPjALTcugC2kbyQ7Lbqo2JDVfRSmPmfQ==", "funding": [ "https://trpc.io/sponsor" ], @@ -5747,9 +5843,9 @@ } }, "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", "dev": true, "license": "MIT" }, @@ -5775,9 +5871,9 @@ "license": "MIT" }, "node_modules/@tybys/wasm-util": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", - "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", "dev": true, "license": "MIT", "optional": true, @@ -5821,13 +5917,13 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/body-parser": { @@ -5891,6 +5987,28 @@ "@types/node": "*" } }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -5907,22 +6025,22 @@ } }, "node_modules/@types/express": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", - "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", "dev": true, "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", - "@types/serve-static": "*" + "@types/serve-static": "^1" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "version": "4.19.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", + "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", "dev": true, "license": "MIT", "dependencies": { @@ -5956,9 +6074,9 @@ "license": "MIT" }, "node_modules/@types/http-proxy": { - "version": "1.17.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", "dev": true, "license": "MIT", "dependencies": { @@ -6047,9 +6165,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.15.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.35.tgz", - "integrity": "sha512-stV91mHxlWpDksiUiivmFfQzjy2JLlb2NUTxKipiANEbxBZsdbDU9fSrT7SHY4uoCXAxYfJZVasn3x2/hqpd3g==", + "version": "22.18.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.13.tgz", + "integrity": "sha512-Bo45YKIjnmFtv6I1TuC8AaHBbqXtIo+Om5fE4QiU1Tj8QR/qt+8O3BAtOimG5IFmwaWiPmB3Mv3jtYzBA4Us2A==", "dev": true, "license": "MIT", "dependencies": { @@ -6057,9 +6175,9 @@ } }, "node_modules/@types/node-forge": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.13.tgz", - "integrity": "sha512-zePQJSW5QkwSHKRApqWCVKeKoSOt4xvEnLENZPjyvm9Ezdf/EyDeJM7jqLzOwjVICQQzvLZ63T55MKdJB5H6ww==", + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", "dev": true, "license": "MIT", "dependencies": { @@ -6073,12 +6191,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/prop-types": { - "version": "15.7.15", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", - "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", - "license": "MIT" - }, "node_modules/@types/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", @@ -6094,22 +6206,21 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", - "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", + "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "license": "MIT", "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/react-dom": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", - "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "license": "MIT", "peerDependencies": { - "@types/react": "^18.0.0" + "@types/react": "^19.2.0" } }, "node_modules/@types/retry": { @@ -6127,20 +6238,19 @@ "license": "MIT" }, "node_modules/@types/semver": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", - "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", "dev": true, "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, @@ -6155,15 +6265,26 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", - "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", "dev": true, "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", - "@types/send": "*" + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, "node_modules/@types/sockjs": { @@ -6177,9 +6298,9 @@ } }, "node_modules/@types/sortablejs": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.8.tgz", - "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.9.tgz", + "integrity": "sha512-7HP+rZGE2p886PKV9c9OJzLBI6BBJu1O7lJGYnPyG3fS4/duUCcngkNCjsLwIMV+WMqANe3tt4irrXHSIe68OQ==", "license": "MIT" }, "node_modules/@types/stack-utils": { @@ -6209,9 +6330,9 @@ "license": "MIT" }, "node_modules/@types/vscode": { - "version": "1.90.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.90.0.tgz", - "integrity": "sha512-oT+ZJL7qHS9Z8bs0+WKf/kQ27qWYR3trsXpq46YDjFqBsMLG4ygGGjPaJ2tyrH0wJzjOEmDyg9PDJBBhWg9pkQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.96.0.tgz", + "integrity": "sha512-qvZbSZo+K4ZYmmDuaodMbAa67Pl6VDQzLKFka6rq+3WUTY4Kro7Bwoi0CuZLO/wema0ygcmpwow7zZfPJTs5jg==", "dev": true, "license": "MIT" }, @@ -6248,38 +6369,378 @@ } }, "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", - "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.47.0.tgz", + "integrity": "sha512-fe0rz9WJQ5t2iaLfdbDc9T80GJy0AeO453q8C3YCilnGozvOyCG5t+EZtg7j7D88+c3FipfP/x+wzGnh1xp8ZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.47.0", + "@typescript-eslint/type-utils": "8.47.0", + "@typescript-eslint/utils": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.47.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/project-service": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.47.0.tgz", + "integrity": "sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.47.0", + "@typescript-eslint/types": "^8.47.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.47.0.tgz", + "integrity": "sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.47.0.tgz", + "integrity": "sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.47.0.tgz", + "integrity": "sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.47.0.tgz", + "integrity": "sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.47.0", + "@typescript-eslint/tsconfig-utils": "8.47.0", + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.47.0.tgz", + "integrity": "sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.47.0", + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/typescript-estree": "8.47.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.47.0.tgz", + "integrity": "sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.47.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.47.0.tgz", + "integrity": "sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.47.0", + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/typescript-estree": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/project-service": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.47.0.tgz", + "integrity": "sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.47.0", + "@typescript-eslint/types": "^8.47.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.47.0.tgz", + "integrity": "sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.47.0.tgz", + "integrity": "sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.47.0.tgz", + "integrity": "sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.47.0.tgz", + "integrity": "sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.47.0", + "@typescript-eslint/tsconfig-utils": "8.47.0", + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.47.0.tgz", + "integrity": "sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.47.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.48.0.tgz", + "integrity": "sha512-Ne4CTZyRh1BecBf84siv42wv5vQvVmgtk8AuiEffKTUo3DrBaGYZueJSxxBZ8fjk/N3DrgChH4TOdIOwOwiqqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.48.0", + "@typescript-eslint/types": "^8.48.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.0.tgz", + "integrity": "sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/type-utils": "8.38.0", - "@typescript-eslint/utils": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6287,35 +6748,37 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.38.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.0.tgz", + "integrity": "sha512-WNebjBdFdyu10sR1M4OXTt2OkMd5KWIL+LLfeH9KhgP+jzfDV/LI3eXzwJ1s9+Yc0Kzo2fQCdY/OpdusCMmh6w==", "dev": true, "license": "MIT", "engines": { - "node": ">= 4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/parser": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", - "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", + "node_modules/@typescript-eslint/type-utils": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.47.0.tgz", + "integrity": "sha512-QC9RiCmZ2HmIdCEvhd1aJELBlD93ErziOXXlHEZyuBo3tBiAZieya0HLIxp+DoDWlsQqDawyKuNEhORyku+P8A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", - "debug": "^4.3.4" + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/typescript-estree": "8.47.0", + "@typescript-eslint/utils": "8.47.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6326,18 +6789,18 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", - "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/project-service": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.47.0.tgz", + "integrity": "sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.38.0", - "@typescript-eslint/types": "^8.38.0", + "@typescript-eslint/tsconfig-utils": "^8.47.0", + "@typescript-eslint/types": "^8.47.0", "debug": "^4.3.4" }, "engines": { @@ -6348,18 +6811,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", - "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.47.0.tgz", + "integrity": "sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0" + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6369,10 +6832,10 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", - "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.47.0.tgz", + "integrity": "sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==", "dev": true, "license": "MIT", "engines": { @@ -6383,20 +6846,39 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", - "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.47.0.tgz", + "integrity": "sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.47.0.tgz", + "integrity": "sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/utils": "8.38.0", + "@typescript-eslint/project-service": "8.47.0", + "@typescript-eslint/tsconfig-utils": "8.47.0", + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0", "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "engines": { @@ -6406,15 +6888,56 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.47.0.tgz", + "integrity": "sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.47.0", + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/typescript-estree": "8.47.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.47.0.tgz", + "integrity": "sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.47.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/types": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", - "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.48.0.tgz", + "integrity": "sha512-cQMcGQQH7kwKoVswD1xdOytxQR60MWKM1di26xSUtxehaDs/32Zpqsu5WJlXTtTTqyAVK8R7hvsUnIXRS+bjvA==", "dev": true, "license": "MIT", "engines": { @@ -6426,21 +6949,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", - "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.0.tgz", + "integrity": "sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.38.0", - "@typescript-eslint/tsconfig-utils": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", + "@typescript-eslint/project-service": "8.48.0", + "@typescript-eslint/tsconfig-utils": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0", "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", + "tinyglobby": "^0.2.15", "ts-api-utils": "^2.1.0" }, "engines": { @@ -6451,20 +6973,20 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", - "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.48.0.tgz", + "integrity": "sha512-yTJO1XuGxCsSfIVt1+1UrLHtue8xz16V8apzPYI06W0HbEbEWHxHXgZaAgavIkoh+GeV6hKKd5jm0sS6OYxWXQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0" + "@typescript-eslint/scope-manager": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6475,17 +6997,17 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", - "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.0.tgz", + "integrity": "sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/types": "8.48.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -6497,9 +7019,9 @@ } }, "node_modules/@typespec/ts-http-runtime": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.0.tgz", - "integrity": "sha512-sOx1PKSuFwnIl7z4RN0Ls7N9AQawmR9r66eI5rFCzLDIs8HTIYrIpH9QjYWoX0lkgGrkLxXhi4QnK7MizPRrIg==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.2.tgz", + "integrity": "sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==", "license": "MIT", "dependencies": { "http-proxy-agent": "^7.0.0", @@ -6828,20 +7350,20 @@ } }, "node_modules/@vscode/test-cli": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@vscode/test-cli/-/test-cli-0.0.11.tgz", - "integrity": "sha512-qO332yvzFqGhBMJrp6TdwbIydiHgCtxXc2Nl6M58mbH/Z+0CyLR76Jzv4YWPEthhrARprzCRJUqzFvTHFhTj7Q==", + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@vscode/test-cli/-/test-cli-0.0.12.tgz", + "integrity": "sha512-iYN0fDg29+a2Xelle/Y56Xvv7Nc8Thzq4VwpzAF/SIE6918rDicqfsQxV6w1ttr2+SOm+10laGuY9FG2ptEKsQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/mocha": "^10.0.2", - "c8": "^9.1.0", - "chokidar": "^3.5.3", - "enhanced-resolve": "^5.15.0", + "@types/mocha": "^10.0.10", + "c8": "^10.1.3", + "chokidar": "^3.6.0", + "enhanced-resolve": "^5.18.3", "glob": "^10.3.10", "minimatch": "^9.0.3", - "mocha": "^11.1.0", - "supports-color": "^9.4.0", + "mocha": "^11.7.4", + "supports-color": "^10.2.2", "yargs": "^17.7.2" }, "bin": { @@ -6907,17 +7429,17 @@ } }, "node_modules/@vscode/vsce": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.6.0.tgz", - "integrity": "sha512-u2ZoMfymRNJb14aHNawnXJtXHLXDVKc1oKZaH4VELKT/9iWKRVgtQOdwxCgtwSxJoqYvuK4hGlBWQJ05wxADhg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.7.1.tgz", + "integrity": "sha512-OTm2XdMt2YkpSn2Nx7z2EJtSuhRHsTPYsSK59hr3v8jRArK+2UEoju4Jumn1CmpgoBLGI6ReHLJ/czYltNUW3g==", "dev": true, "license": "MIT", "dependencies": { "@azure/identity": "^4.1.0", - "@secretlint/node": "^10.1.1", - "@secretlint/secretlint-formatter-sarif": "^10.1.1", - "@secretlint/secretlint-rule-no-dotenv": "^10.1.1", - "@secretlint/secretlint-rule-preset-recommend": "^10.1.1", + "@secretlint/node": "^10.1.2", + "@secretlint/secretlint-formatter-sarif": "^10.1.2", + "@secretlint/secretlint-rule-no-dotenv": "^10.1.2", + "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", "@vscode/vsce-sign": "^2.0.0", "azure-devops-node-api": "^12.5.0", "chalk": "^4.1.2", @@ -6934,7 +7456,7 @@ "minimatch": "^3.0.3", "parse-semver": "^1.1.1", "read": "^1.0.7", - "secretlint": "^10.1.1", + "secretlint": "^10.1.2", "semver": "^7.5.2", "tmp": "^0.2.3", "typed-rest-client": "^1.8.4", @@ -6954,28 +7476,28 @@ } }, "node_modules/@vscode/vsce-sign": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.6.tgz", - "integrity": "sha512-j9Ashk+uOWCDHYDxgGsqzKq5FXW9b9MW7QqOIYZ8IYpneJclWTBeHZz2DJCSKQgo+JAqNcaRRE1hzIx0dswqAw==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.9.tgz", + "integrity": "sha512-8IvaRvtFyzUnGGl3f5+1Cnor3LqaUWvhaUjAYO8Y39OUYlOf3cRd+dowuQYLpZcP3uwSG+mURwjEBOSq4SOJ0g==", "dev": true, "hasInstallScript": true, "license": "SEE LICENSE IN LICENSE.txt", "optionalDependencies": { - "@vscode/vsce-sign-alpine-arm64": "2.0.5", - "@vscode/vsce-sign-alpine-x64": "2.0.5", - "@vscode/vsce-sign-darwin-arm64": "2.0.5", - "@vscode/vsce-sign-darwin-x64": "2.0.5", - "@vscode/vsce-sign-linux-arm": "2.0.5", - "@vscode/vsce-sign-linux-arm64": "2.0.5", - "@vscode/vsce-sign-linux-x64": "2.0.5", - "@vscode/vsce-sign-win32-arm64": "2.0.5", - "@vscode/vsce-sign-win32-x64": "2.0.5" + "@vscode/vsce-sign-alpine-arm64": "2.0.6", + "@vscode/vsce-sign-alpine-x64": "2.0.6", + "@vscode/vsce-sign-darwin-arm64": "2.0.6", + "@vscode/vsce-sign-darwin-x64": "2.0.6", + "@vscode/vsce-sign-linux-arm": "2.0.6", + "@vscode/vsce-sign-linux-arm64": "2.0.6", + "@vscode/vsce-sign-linux-x64": "2.0.6", + "@vscode/vsce-sign-win32-arm64": "2.0.6", + "@vscode/vsce-sign-win32-x64": "2.0.6" } }, "node_modules/@vscode/vsce-sign-alpine-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.5.tgz", - "integrity": "sha512-XVmnF40APwRPXSLYA28Ye+qWxB25KhSVpF2eZVtVOs6g7fkpOxsVnpRU1Bz2xG4ySI79IRuapDJoAQFkoOgfdQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.6.tgz", + "integrity": "sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==", "cpu": [ "arm64" ], @@ -6987,9 +7509,9 @@ ] }, "node_modules/@vscode/vsce-sign-alpine-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.5.tgz", - "integrity": "sha512-JuxY3xcquRsOezKq6PEHwCgd1rh1GnhyH6urVEWUzWn1c1PC4EOoyffMD+zLZtFuZF5qR1I0+cqDRNKyPvpK7Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.6.tgz", + "integrity": "sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==", "cpu": [ "x64" ], @@ -7001,9 +7523,9 @@ ] }, "node_modules/@vscode/vsce-sign-darwin-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.5.tgz", - "integrity": "sha512-z2Q62bk0ptADFz8a0vtPvnm6vxpyP3hIEYMU+i1AWz263Pj8Mc38cm/4sjzxu+LIsAfhe9HzvYNS49lV+KsatQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.6.tgz", + "integrity": "sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==", "cpu": [ "arm64" ], @@ -7015,9 +7537,9 @@ ] }, "node_modules/@vscode/vsce-sign-darwin-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.5.tgz", - "integrity": "sha512-ma9JDC7FJ16SuPXlLKkvOD2qLsmW/cKfqK4zzM2iJE1PbckF3BlR08lYqHV89gmuoTpYB55+z8Y5Fz4wEJBVDA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.6.tgz", + "integrity": "sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==", "cpu": [ "x64" ], @@ -7029,9 +7551,9 @@ ] }, "node_modules/@vscode/vsce-sign-linux-arm": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.5.tgz", - "integrity": "sha512-cdCwtLGmvC1QVrkIsyzv01+o9eR+wodMJUZ9Ak3owhcGxPRB53/WvrDHAFYA6i8Oy232nuen1YqWeEohqBuSzA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.6.tgz", + "integrity": "sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==", "cpu": [ "arm" ], @@ -7043,9 +7565,9 @@ ] }, "node_modules/@vscode/vsce-sign-linux-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.5.tgz", - "integrity": "sha512-Hr1o0veBymg9SmkCqYnfaiUnes5YK6k/lKFA5MhNmiEN5fNqxyPUCdRZMFs3Ajtx2OFW4q3KuYVRwGA7jdLo7Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.6.tgz", + "integrity": "sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==", "cpu": [ "arm64" ], @@ -7057,9 +7579,9 @@ ] }, "node_modules/@vscode/vsce-sign-linux-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.5.tgz", - "integrity": "sha512-XLT0gfGMcxk6CMRLDkgqEPTyG8Oa0OFe1tPv2RVbphSOjFWJwZgK3TYWx39i/7gqpDHlax0AP6cgMygNJrA6zg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.6.tgz", + "integrity": "sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==", "cpu": [ "x64" ], @@ -7071,9 +7593,9 @@ ] }, "node_modules/@vscode/vsce-sign-win32-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.5.tgz", - "integrity": "sha512-hco8eaoTcvtmuPhavyCZhrk5QIcLiyAUhEso87ApAWDllG7djIrWiOCtqn48k4pHz+L8oCQlE0nwNHfcYcxOPw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.6.tgz", + "integrity": "sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==", "cpu": [ "arm64" ], @@ -7085,9 +7607,9 @@ ] }, "node_modules/@vscode/vsce-sign-win32-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.5.tgz", - "integrity": "sha512-1ixKFGM2FwM+6kQS2ojfY3aAelICxjiCzeg4nTHpkeU1Tfs4RC+lVLrgq5NwcBC7ZLr6UfY3Ct3D6suPeOf7BQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.6.tgz", + "integrity": "sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==", "cpu": [ "x64" ], @@ -7368,14 +7890,14 @@ } }, "node_modules/@xhmikosr/bin-wrapper": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@xhmikosr/bin-wrapper/-/bin-wrapper-13.1.1.tgz", - "integrity": "sha512-93iXrknsWrP3G6QJBCJVz4xftMe5ZNJMWyOjtiug74k8dmQA4blfmaBcBgJUCYfSSQnjxjMNqxfincVuWbcGLA==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/bin-wrapper/-/bin-wrapper-13.2.0.tgz", + "integrity": "sha512-t9U9X0sDPRGDk5TGx4dv5xiOvniVJpXnfTuynVKwHgtib95NYEw4MkZdJqhoSiz820D9m0o6PCqOPMXz0N9fIw==", "dev": true, "license": "MIT", "dependencies": { "@xhmikosr/bin-check": "^7.1.0", - "@xhmikosr/downloader": "^15.1.1", + "@xhmikosr/downloader": "^15.2.0", "@xhmikosr/os-filter-obj": "^3.0.0", "bin-version-check": "^5.1.0" }, @@ -7384,9 +7906,9 @@ } }, "node_modules/@xhmikosr/decompress": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress/-/decompress-10.1.0.tgz", - "integrity": "sha512-jmVnzuJYX4f89Ls63CRI5s0GrWpLUqo+vY+8YrXuFiebDcF3xFwiSVCie68LrJNltSYMLcDY60JN51H/lVTw6Q==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress/-/decompress-10.2.0.tgz", + "integrity": "sha512-MmDBvu0+GmADyQWHolcZuIWffgfnuTo4xpr2I/Qw5Ox0gt+e1Be7oYqJM4te5ylL6mzlcoicnHVDvP27zft8tg==", "dev": true, "license": "MIT", "dependencies": { @@ -7395,7 +7917,6 @@ "@xhmikosr/decompress-targz": "^8.1.0", "@xhmikosr/decompress-unzip": "^7.1.0", "graceful-fs": "^4.2.11", - "make-dir": "^4.0.0", "strip-dirs": "^3.0.0" }, "engines": { @@ -7479,14 +8000,14 @@ } }, "node_modules/@xhmikosr/downloader": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@xhmikosr/downloader/-/downloader-15.1.1.tgz", - "integrity": "sha512-zRj8cT8KbXigN5bJz9QszeyR1Jsc4HOizjLOB5FspQ0COvKpoAOq/OUYAI5b0Pt4pfeSyc6F5iHvdGCg8Him8Q==", + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/downloader/-/downloader-15.2.0.tgz", + "integrity": "sha512-lAqbig3uRGTt0sHNIM4vUG9HoM+mRl8K28WuYxyXLCUT6pyzl4Y4i0LZ3jMEsCYZ6zjPZbO9XkG91OSTd4si7g==", "dev": true, "license": "MIT", "dependencies": { "@xhmikosr/archive-type": "^7.1.0", - "@xhmikosr/decompress": "^10.1.0", + "@xhmikosr/decompress": "^10.2.0", "content-disposition": "^0.5.4", "defaults": "^2.0.2", "ext-name": "^5.0.0", @@ -7562,14 +8083,17 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "dev": true, "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, "peerDependencies": { - "acorn": "^8" + "acorn": "^8.14.0" } }, "node_modules/acorn-jsx": { @@ -7652,28 +8176,10 @@ "ajv": "^8.8.2" } }, - "node_modules/allotment": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/allotment/-/allotment-1.20.4.tgz", - "integrity": "sha512-LMM5Xe5nLePFOLAlW/5k3ARqznYGUyNekV4xJrfDKn1jimW3nlZE6hT/Tu0T8s0VgAkr9s2P7+uM0WvJKn5DAw==", - "license": "MIT", - "dependencies": { - "classnames": "^2.3.0", - "eventemitter3": "^5.0.0", - "lodash.clamp": "^4.0.0", - "lodash.debounce": "^4.0.0", - "lodash.isequal": "^4.5.0", - "use-resize-observer": "^9.0.0" - }, - "peerDependencies": { - "react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, "node_modules/anser": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/anser/-/anser-2.3.2.tgz", - "integrity": "sha512-PMqBCBvrOVDRqLGooQb+z+t1Q0PiPyurUQeZRR5uHBOVZcW8B04KMmnT12USnhpNX2wCPagWzLVppQMUG3u0Dw==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/anser/-/anser-2.3.3.tgz", + "integrity": "sha512-QGY1oxYE7/kkeNmbtY/2ZjQ07BCG3zYdz+k/+sf69kMzEIxb93guHkPnIXITQ+BYi61oQwG74twMOX1tD4aesg==", "dev": true, "license": "MIT" }, @@ -7707,9 +8213,9 @@ } }, "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -7942,13 +8448,6 @@ "node": ">=8" } }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, "node_modules/async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", @@ -8000,23 +8499,31 @@ } }, "node_modules/b4a": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", - "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", "dev": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } }, "node_modules/babel-jest": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.5.tgz", - "integrity": "sha512-mRijnKimhGDMsizTvBTWotwNpzrkHr+VvZUQBof2AufXKB8NXrL1W69TG20EvOz7aevx6FTJIaBuBkYxS8zolg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz", + "integrity": "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/transform": "30.0.5", + "@jest/transform": "30.2.0", "@types/babel__core": "^7.20.5", - "babel-plugin-istanbul": "^7.0.0", - "babel-preset-jest": "30.0.1", + "babel-plugin-istanbul": "^7.0.1", + "babel-preset-jest": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "slash": "^3.0.0" @@ -8025,15 +8532,18 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.11.0" + "@babel/core": "^7.11.0 || ^8.0.0-0" } }, "node_modules/babel-plugin-istanbul": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.0.tgz", - "integrity": "sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", + "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", "dev": true, "license": "BSD-3-Clause", + "workspaces": [ + "test/babel-8" + ], "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -8046,14 +8556,12 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz", - "integrity": "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz", + "integrity": "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", "@types/babel__core": "^7.20.5" }, "engines": { @@ -8061,9 +8569,9 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, "license": "MIT", "dependencies": { @@ -8084,24 +8592,24 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz", - "integrity": "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz", + "integrity": "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==", "dev": true, "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "30.0.1", - "babel-preset-current-node-syntax": "^1.1.0" + "babel-plugin-jest-hoist": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.11.0" + "@babel/core": "^7.11.0 || ^8.0.0-beta.1" } }, "node_modules/bail": { @@ -8121,12 +8629,19 @@ "license": "MIT" }, "node_modules/bare-events": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.6.0.tgz", - "integrity": "sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", "dev": true, "license": "Apache-2.0", - "optional": true + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } }, "node_modules/base64-js": { "version": "1.5.1", @@ -8149,6 +8664,16 @@ ], "license": "MIT" }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.31", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz", + "integrity": "sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -8385,9 +8910,9 @@ "license": "ISC" }, "node_modules/browserslist": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", - "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", + "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", "dev": true, "funding": [ { @@ -8405,10 +8930,11 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001726", - "electron-to-chromium": "^1.5.173", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.8.25", + "caniuse-lite": "^1.0.30001754", + "electron-to-chromium": "^1.5.249", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.1.4" }, "bin": { "browserslist": "cli.js" @@ -8441,12 +8967,12 @@ } }, "node_modules/bson": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", - "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-7.0.0.tgz", + "integrity": "sha512-Kwc6Wh4lQ5OmkqqKhYGKIuELXl+EPYSCObVE6bWsp1T/cGkOCBN0I8wF/T44BiuhHyNi1mmKVPXk60d41xZ7kw==", "license": "Apache-2.0", "engines": { - "node": ">=16.20.1" + "node": ">=20.19.0" } }, "node_modules/buffer": { @@ -8523,20 +9049,20 @@ } }, "node_modules/c8": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-9.1.0.tgz", - "integrity": "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==", + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/c8/-/c8-10.1.3.tgz", + "integrity": "sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==", "dev": true, "license": "ISC", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", + "@bcoe/v8-coverage": "^1.0.1", "@istanbuljs/schema": "^0.1.3", "find-up": "^5.0.0", "foreground-child": "^3.1.1", "istanbul-lib-coverage": "^3.2.0", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.1.6", - "test-exclude": "^6.0.0", + "test-exclude": "^7.0.1", "v8-to-istanbul": "^9.0.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1" @@ -8545,7 +9071,15 @@ "c8": "bin/c8.js" }, "engines": { - "node": ">=14.14.0" + "node": ">=18" + }, + "peerDependencies": { + "monocart-coverage-reports": "^2" + }, + "peerDependenciesMeta": { + "monocart-coverage-reports": { + "optional": true + } } }, "node_modules/cacheable-lookup": { @@ -8648,9 +9182,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001727", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", - "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "version": "1.0.30001757", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz", + "integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==", "dev": true, "funding": [ { @@ -8847,9 +9381,9 @@ } }, "node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", "dev": true, "funding": [ { @@ -8863,18 +9397,12 @@ } }, "node_modules/cjs-module-lexer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz", - "integrity": "sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.1.tgz", + "integrity": "sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==", "dev": true, "license": "MIT" }, - "node_modules/classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", - "license": "MIT" - }, "node_modules/cli-cursor": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", @@ -8997,9 +9525,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", "dev": true, "license": "MIT" }, @@ -9177,9 +9705,9 @@ "license": "MIT" }, "node_modules/copy-webpack-plugin": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.0.tgz", - "integrity": "sha512-FgR/h5a6hzJqATDGd9YG41SeDViH+0bkHn6WNXCi5zKAZkeESeSxLySSsFLHqLEVCh0E+rITmCf0dusXWYukeQ==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.1.tgz", + "integrity": "sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==", "dev": true, "license": "MIT", "dependencies": { @@ -9214,9 +9742,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.44.0.tgz", - "integrity": "sha512-gvMQAGB4dfVUxpYD0k3Fq8J+n5bB6Ytl15lqlZrOIXFzxOhtPaObfkQGHtMRdyjIf7z2IeNULwi1jEwyS+ltKQ==", + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.47.0.tgz", + "integrity": "sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -9363,9 +9891,9 @@ } }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, "node_modules/data-view-buffer": { @@ -9423,9 +9951,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", "license": "MIT" }, "node_modules/debounce": { @@ -9436,9 +9964,9 @@ "license": "MIT" }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -9508,9 +10036,9 @@ } }, "node_modules/dedent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", + "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -9560,9 +10088,9 @@ } }, "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", + "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", @@ -9576,9 +10104,9 @@ } }, "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", "license": "MIT", "engines": { "node": ">=18" @@ -9708,9 +10236,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -9790,16 +10318,6 @@ "node": ">=0.10.0" } }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -9843,6 +10361,15 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.0.tgz", + "integrity": "sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, "node_modules/domutils": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", @@ -9873,13 +10400,6 @@ "node": ">= 0.4" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true, - "license": "MIT" - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -9897,15 +10417,16 @@ } }, "node_modules/editions": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/editions/-/editions-6.21.0.tgz", - "integrity": "sha512-ofkXJtn7z0urokN62DI3SBo/5xAtF0rR7tn+S/bSYV79Ka8pTajIIl+fFQ1q88DQEImymmo97M4azY3WX/nUdg==", + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz", + "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==", "dev": true, "license": "Artistic-2.0", "dependencies": { - "version-range": "^4.13.0" + "version-range": "^4.15.0" }, "engines": { + "ecmascript": ">= es5", "node": ">=4" }, "funding": { @@ -9919,26 +10440,10 @@ "dev": true, "license": "MIT" }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/electron-to-chromium": { - "version": "1.5.191", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.191.tgz", - "integrity": "sha512-xcwe9ELcuxYLUFqZZxL19Z6HVKcvNkIwhbHUz7L3us6u12yR+7uY89dSl570f/IqNthx8dAw3tojG7i4Ni4tDA==", + "version": "1.5.260", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.260.tgz", + "integrity": "sha512-ov8rBoOBhVawpzdre+Cmz4FB+y66Eqrk6Gwqd8NGxuhv99GQ8XqMAr351KEkOt7gukXWDg6gJWEMKgL2RLMPtA==", "dev": true, "license": "ISC" }, @@ -10032,9 +10537,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", - "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "dev": true, "license": "MIT", "dependencies": { @@ -10059,9 +10564,9 @@ } }, "node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.20.0.tgz", + "integrity": "sha512-+zUomDcLXsVkQ37vUqWBvQwLaLlj8eZPSi61llaEFAVBY5mhcXdaSw1pSJVl4yTYD5g/gEfpNl28YYk4IPvrrg==", "dev": true, "license": "MIT", "bin": { @@ -10085,9 +10590,9 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10261,9 +10766,9 @@ } }, "node_modules/es-toolkit": { - "version": "1.39.8", - "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.39.8.tgz", - "integrity": "sha512-A8QO9TfF+rltS8BXpdu8OS+rpGgEdnRhqIVxO/ZmNvnXBYgOdSsxukT55ELyP94gZIntWJ+Li9QRrT2u1Kitpg==", + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.42.0.tgz", + "integrity": "sha512-SLHIyY7VfDJBM8clz4+T2oquwTQxEzu263AyhVK4jREOAwJ+8eebaa4wM3nlvnAqhDrMm2EsA6hWHaQsMPQ1nA==", "license": "MIT", "workspaces": [ "docs", @@ -10297,25 +10802,24 @@ } }, "node_modules/eslint": { - "version": "9.31.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz", - "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", + "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.15.0", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.31.0", - "@eslint/plugin-kit": "^0.3.1", + "@eslint/js": "9.39.1", + "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", @@ -10486,9 +10990,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "29.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.0.1.tgz", - "integrity": "sha512-EE44T0OSMCeXhDrrdsbKAhprobKkPtJTbQz5yEktysNpHeDZTAL1SfDTNKmcFfJkY6yrQLtTKZALrD3j/Gpmiw==", + "version": "29.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.1.0.tgz", + "integrity": "sha512-LabxXbASXVjguqL+kBHTPMf3gUeSqwH4fsrEyHTY/MCs42I/p9+ctg09SJpYiD8eGaIsP6GwYr5xW6xWS9XgZg==", "dev": true, "license": "MIT", "dependencies": { @@ -10522,9 +11026,9 @@ } }, "node_modules/eslint-plugin-mocha": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-11.1.0.tgz", - "integrity": "sha512-rKntVWRsQFPbf8OkSgVNRVRrcVAPaGTyEgWCEyXaPDJkTl0v5/lwu1vTk5sWiUJU8l2sxwvGUZzSNrEKdVMeQw==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-11.2.0.tgz", + "integrity": "sha512-nMdy3tEXZac8AH5Z/9hwUkSfWu8xHf4XqwB5UEQzyTQGKcNlgFeciRAjLjliIKC3dR1Ex/a2/5sqgQzvYRkkkA==", "dev": true, "license": "MIT", "dependencies": { @@ -10750,12 +11254,6 @@ "node": ">= 0.6" } }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "license": "MIT" - }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -10766,6 +11264,16 @@ "node": ">=0.8.x" } }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -10812,18 +11320,18 @@ } }, "node_modules/expect": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.5.tgz", - "integrity": "sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/expect-utils": "30.0.5", - "@jest/get-type": "30.0.1", - "jest-matcher-utils": "30.0.5", - "jest-message-util": "30.0.5", - "jest-mock": "30.0.5", - "jest-util": "30.0.5" + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -10987,9 +11495,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "dev": true, "funding": [ { @@ -11089,32 +11597,9 @@ }, "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, "node_modules/filename-reserved-regex": { @@ -11260,9 +11745,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "dev": true, "funding": [ { @@ -11327,9 +11812,9 @@ } }, "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, "license": "MIT", "dependencies": { @@ -11382,9 +11867,9 @@ "optional": true }, "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "dev": true, "license": "MIT", "dependencies": { @@ -11452,6 +11937,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -11473,9 +11968,9 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", "dev": true, "license": "MIT", "engines": { @@ -11584,15 +12079,15 @@ "optional": true }, "node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-12.0.0.tgz", + "integrity": "sha512-5Qcll1z7IKgHr5g485ePDdHcNQY0k2dtv/bjYy0iuyGxQw2qSOiiXUXJ+AYQpg3HNoUMHqAruX478Jeev7UULw==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", + "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" @@ -11620,6 +12115,23 @@ "node": ">= 6" } }, + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -11628,11 +12140,11 @@ "license": "BSD-2-Clause" }, "node_modules/glob/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/brace-expansion": "^5.0.0" }, @@ -11644,9 +12156,9 @@ } }, "node_modules/globals": { - "version": "16.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", - "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", "dev": true, "license": "MIT", "engines": { @@ -11770,28 +12282,44 @@ "dev": true, "license": "MIT" }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "license": "MIT", "dependencies": { - "duplexer": "^0.1.2" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" }, "engines": { - "node": ">=10" + "node": ">=0.4.7" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "MIT" + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/has-bigints": { "version": "1.1.0", @@ -12278,29 +12806,6 @@ "node": ">=10.18" } }, - "node_modules/i18next": { - "version": "23.16.8", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.8.tgz", - "integrity": "sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==", - "funding": [ - { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - } - ], - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.2" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -12366,9 +12871,9 @@ "license": "MIT" }, "node_modules/immutable": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", - "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", "dev": true, "license": "MIT" }, @@ -12420,9 +12925,9 @@ } }, "node_modules/index-to-position": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", - "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", "dev": true, "license": "MIT", "engines": { @@ -12448,9 +12953,9 @@ "optional": true }, "node_modules/inline-style-parser": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.6.tgz", - "integrity": "sha512-gtGXVaBdl5mAes3rPcMedEBm12ibjt1kDMFfheul1wUAOVEJW60voNdMVzVkfLN06O7ZaD/rxhfKgtlgtTbMjg==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", "license": "MIT" }, "node_modules/inspect-with-kind": { @@ -12756,14 +13261,15 @@ } }, "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" }, @@ -12855,9 +13361,9 @@ } }, "node_modules/is-network-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", - "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", "dev": true, "license": "MIT", "engines": { @@ -12894,6 +13400,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -13198,9 +13714,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -13245,60 +13761,17 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/jest": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest/-/jest-30.0.5.tgz", - "integrity": "sha512-y2mfcJywuTUkvLm2Lp1/pFX8kTgMO5yyQGq/Sk/n2mN7XWYp4JsCZ/QXW34M8YScgk8bPZlREH04f6blPnoHnQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.2.0.tgz", + "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.0.5", - "@jest/types": "30.0.5", + "@jest/core": "30.2.0", + "@jest/types": "30.2.0", "import-local": "^3.2.0", - "jest-cli": "30.0.5" + "jest-cli": "30.2.0" }, "bin": { "jest": "bin/jest.js" @@ -13316,14 +13789,14 @@ } }, "node_modules/jest-changed-files": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.5.tgz", - "integrity": "sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.2.0.tgz", + "integrity": "sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==", "dev": true, "license": "MIT", "dependencies": { "execa": "^5.1.1", - "jest-util": "30.0.5", + "jest-util": "30.2.0", "p-limit": "^3.1.0" }, "engines": { @@ -13331,29 +13804,29 @@ } }, "node_modules/jest-circus": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.0.5.tgz", - "integrity": "sha512-h/sjXEs4GS+NFFfqBDYT7y5Msfxh04EwWLhQi0F8kuWpe+J/7tICSlswU8qvBqumR3kFgHbfu7vU6qruWWBPug==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.2.0.tgz", + "integrity": "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.5", - "@jest/expect": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/types": "30.0.5", + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "co": "^4.6.0", "dedent": "^1.6.0", "is-generator-fn": "^2.1.0", - "jest-each": "30.0.5", - "jest-matcher-utils": "30.0.5", - "jest-message-util": "30.0.5", - "jest-runtime": "30.0.5", - "jest-snapshot": "30.0.5", - "jest-util": "30.0.5", + "jest-each": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", "p-limit": "^3.1.0", - "pretty-format": "30.0.5", + "pretty-format": "30.2.0", "pure-rand": "^7.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" @@ -13363,21 +13836,21 @@ } }, "node_modules/jest-cli": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.0.5.tgz", - "integrity": "sha512-Sa45PGMkBZzF94HMrlX4kUyPOwUpdZasaliKN3mifvDmkhLYqLLg8HQTzn6gq7vJGahFYMQjXgyJWfYImKZzOw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.2.0.tgz", + "integrity": "sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/types": "30.0.5", + "@jest/core": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "chalk": "^4.1.2", "exit-x": "^0.2.2", "import-local": "^3.2.0", - "jest-config": "30.0.5", - "jest-util": "30.0.5", - "jest-validate": "30.0.5", + "jest-config": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", "yargs": "^17.7.2" }, "bin": { @@ -13396,34 +13869,34 @@ } }, "node_modules/jest-config": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.0.5.tgz", - "integrity": "sha512-aIVh+JNOOpzUgzUnPn5FLtyVnqc3TQHVMupYtyeURSb//iLColiMIR8TxCIDKyx9ZgjKnXGucuW68hCxgbrwmA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.2.0.tgz", + "integrity": "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", - "@jest/get-type": "30.0.1", + "@jest/get-type": "30.1.0", "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.0.5", - "@jest/types": "30.0.5", - "babel-jest": "30.0.5", + "@jest/test-sequencer": "30.2.0", + "@jest/types": "30.2.0", + "babel-jest": "30.2.0", "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", "glob": "^10.3.10", "graceful-fs": "^4.2.11", - "jest-circus": "30.0.5", - "jest-docblock": "30.0.1", - "jest-environment-node": "30.0.5", + "jest-circus": "30.2.0", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", "jest-regex-util": "30.0.1", - "jest-resolve": "30.0.5", - "jest-runner": "30.0.5", - "jest-util": "30.0.5", - "jest-validate": "30.0.5", + "jest-resolve": "30.2.0", + "jest-runner": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", "micromatch": "^4.0.8", "parse-json": "^5.2.0", - "pretty-format": "30.0.5", + "pretty-format": "30.2.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -13448,25 +13921,25 @@ } }, "node_modules/jest-diff": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.5.tgz", - "integrity": "sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", + "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", "dev": true, "license": "MIT", "dependencies": { "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.0.1", + "@jest/get-type": "30.1.0", "chalk": "^4.1.2", - "pretty-format": "30.0.5" + "pretty-format": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-docblock": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.0.1.tgz", - "integrity": "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", + "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", "dev": true, "license": "MIT", "dependencies": { @@ -13477,56 +13950,56 @@ } }, "node_modules/jest-each": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.0.5.tgz", - "integrity": "sha512-dKjRsx1uZ96TVyejD3/aAWcNKy6ajMaN531CwWIsrazIqIoXI9TnnpPlkrEYku/8rkS3dh2rbH+kMOyiEIv0xQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.2.0.tgz", + "integrity": "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1", - "@jest/types": "30.0.5", + "@jest/get-type": "30.1.0", + "@jest/types": "30.2.0", "chalk": "^4.1.2", - "jest-util": "30.0.5", - "pretty-format": "30.0.5" + "jest-util": "30.2.0", + "pretty-format": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-environment-node": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.0.5.tgz", - "integrity": "sha512-ppYizXdLMSvciGsRsMEnv/5EFpvOdXBaXRBzFUDPWrsfmog4kYrOGWXarLllz6AXan6ZAA/kYokgDWuos1IKDA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.2.0.tgz", + "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.5", - "@jest/fake-timers": "30.0.5", - "@jest/types": "30.0.5", + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-mock": "30.0.5", - "jest-util": "30.0.5", - "jest-validate": "30.0.5" + "jest-mock": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-haste-map": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.0.5.tgz", - "integrity": "sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz", + "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", - "jest-util": "30.0.5", - "jest-worker": "30.0.5", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", "micromatch": "^4.0.8", "walker": "^1.0.8" }, @@ -13538,49 +14011,49 @@ } }, "node_modules/jest-leak-detector": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.0.5.tgz", - "integrity": "sha512-3Uxr5uP8jmHMcsOtYMRB/zf1gXN3yUIc+iPorhNETG54gErFIiUhLvyY/OggYpSMOEYqsmRxmuU4ZOoX5jpRFg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz", + "integrity": "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1", - "pretty-format": "30.0.5" + "@jest/get-type": "30.1.0", + "pretty-format": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.5.tgz", - "integrity": "sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", + "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1", + "@jest/get-type": "30.1.0", "chalk": "^4.1.2", - "jest-diff": "30.0.5", - "pretty-format": "30.0.5" + "jest-diff": "30.2.0", + "pretty-format": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-message-util": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.5.tgz", - "integrity": "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz", + "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", - "pretty-format": "30.0.5", + "pretty-format": "30.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" }, @@ -13589,31 +14062,34 @@ } }, "node_modules/jest-mock": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.5.tgz", - "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz", + "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-util": "30.0.5" + "jest-util": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-mock-vscode": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/jest-mock-vscode/-/jest-mock-vscode-3.0.5.tgz", - "integrity": "sha512-fyOdwDnVMqPk4sqZkcIvFSuFjRxmLpAA91RX+Q3c6uWPB/dtE/Lnx8M5kwzUNk1PX9Xqo+dQsIFERTVCfeRGnA==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/jest-mock-vscode/-/jest-mock-vscode-4.0.5.tgz", + "integrity": "sha512-XLK3mZjKLAUpERm9p5j0nbDlTTYGUxvZLOFFCv5iM2dmi8LUszhlKGzYYnR9rvvbx3UYRRj+yuzK3Q0jK6s1jg==", "dev": true, "license": "MIT", "dependencies": { "vscode-uri": "^3.0.8" }, "engines": { - "node": ">16.0.0" + "node": ">20.0.0" + }, + "peerDependencies": { + "@types/vscode": "^1.90.0" } }, "node_modules/jest-pnp-resolver": { @@ -13645,18 +14121,18 @@ } }, "node_modules/jest-resolve": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.0.5.tgz", - "integrity": "sha512-d+DjBQ1tIhdz91B79mywH5yYu76bZuE96sSbxj8MkjWVx5WNdt1deEFRONVL4UkKLSrAbMkdhb24XN691yDRHg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.2.0.tgz", + "integrity": "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", + "jest-haste-map": "30.2.0", "jest-pnp-resolver": "^1.2.3", - "jest-util": "30.0.5", - "jest-validate": "30.0.5", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", "slash": "^3.0.0", "unrs-resolver": "^1.7.11" }, @@ -13665,46 +14141,46 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.5.tgz", - "integrity": "sha512-/xMvBR4MpwkrHW4ikZIWRttBBRZgWK4d6xt3xW1iRDSKt4tXzYkMkyPfBnSCgv96cpkrctfXs6gexeqMYqdEpw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.2.0.tgz", + "integrity": "sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==", "dev": true, "license": "MIT", "dependencies": { "jest-regex-util": "30.0.1", - "jest-snapshot": "30.0.5" + "jest-snapshot": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-runner": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.0.5.tgz", - "integrity": "sha512-JcCOucZmgp+YuGgLAXHNy7ualBx4wYSgJVWrYMRBnb79j9PD0Jxh0EHvR5Cx/r0Ce+ZBC4hCdz2AzFFLl9hCiw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.2.0.tgz", + "integrity": "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.0.5", - "@jest/environment": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", - "@jest/types": "30.0.5", + "@jest/console": "30.2.0", + "@jest/environment": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "emittery": "^0.13.1", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", - "jest-docblock": "30.0.1", - "jest-environment-node": "30.0.5", - "jest-haste-map": "30.0.5", - "jest-leak-detector": "30.0.5", - "jest-message-util": "30.0.5", - "jest-resolve": "30.0.5", - "jest-runtime": "30.0.5", - "jest-util": "30.0.5", - "jest-watcher": "30.0.5", - "jest-worker": "30.0.5", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-leak-detector": "30.2.0", + "jest-message-util": "30.2.0", + "jest-resolve": "30.2.0", + "jest-runtime": "30.2.0", + "jest-util": "30.2.0", + "jest-watcher": "30.2.0", + "jest-worker": "30.2.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -13713,32 +14189,32 @@ } }, "node_modules/jest-runtime": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.0.5.tgz", - "integrity": "sha512-7oySNDkqpe4xpX5PPiJTe5vEa+Ak/NnNz2bGYZrA1ftG3RL3EFlHaUkA1Cjx+R8IhK0Vg43RML5mJedGTPNz3A==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.2.0.tgz", + "integrity": "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.5", - "@jest/fake-timers": "30.0.5", - "@jest/globals": "30.0.5", + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/globals": "30.2.0", "@jest/source-map": "30.0.1", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", - "@jest/types": "30.0.5", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "cjs-module-lexer": "^2.1.0", "collect-v8-coverage": "^1.0.2", "glob": "^10.3.10", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", - "jest-message-util": "30.0.5", - "jest-mock": "30.0.5", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", "jest-regex-util": "30.0.1", - "jest-resolve": "30.0.5", - "jest-snapshot": "30.0.5", - "jest-util": "30.0.5", + "jest-resolve": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -13747,9 +14223,9 @@ } }, "node_modules/jest-snapshot": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.0.5.tgz", - "integrity": "sha512-T00dWU/Ek3LqTp4+DcW6PraVxjk28WY5Ua/s+3zUKSERZSNyxTqhDXCWKG5p2HAJ+crVQ3WJ2P9YVHpj1tkW+g==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz", + "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==", "dev": true, "license": "MIT", "dependencies": { @@ -13758,20 +14234,20 @@ "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.0.5", - "@jest/get-type": "30.0.1", - "@jest/snapshot-utils": "30.0.5", - "@jest/transform": "30.0.5", - "@jest/types": "30.0.5", - "babel-preset-current-node-syntax": "^1.1.0", + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "@jest/snapshot-utils": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0", "chalk": "^4.1.2", - "expect": "30.0.5", + "expect": "30.2.0", "graceful-fs": "^4.2.11", - "jest-diff": "30.0.5", - "jest-matcher-utils": "30.0.5", - "jest-message-util": "30.0.5", - "jest-util": "30.0.5", - "pretty-format": "30.0.5", + "jest-diff": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "pretty-format": "30.2.0", "semver": "^7.7.2", "synckit": "^0.11.8" }, @@ -13780,13 +14256,13 @@ } }, "node_modules/jest-util": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.5.tgz", - "integrity": "sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", + "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", @@ -13811,18 +14287,18 @@ } }, "node_modules/jest-validate": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.0.5.tgz", - "integrity": "sha512-ouTm6VFHaS2boyl+k4u+Qip4TSH7Uld5tyD8psQ8abGgt2uYYB8VwVfAHWHjHc0NWmGGbwO5h0sCPOGHHevefw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.2.0.tgz", + "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1", - "@jest/types": "30.0.5", + "@jest/get-type": "30.1.0", + "@jest/types": "30.2.0", "camelcase": "^6.3.0", "chalk": "^4.1.2", "leven": "^3.1.0", - "pretty-format": "30.0.5" + "pretty-format": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -13842,19 +14318,19 @@ } }, "node_modules/jest-watcher": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.0.5.tgz", - "integrity": "sha512-z9slj/0vOwBDBjN3L4z4ZYaA+pG56d6p3kTUhFRYGvXbXMWhXmb/FIxREZCD06DYUwDKKnj2T80+Pb71CQ0KEg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.2.0.tgz", + "integrity": "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.0.5", - "@jest/types": "30.0.5", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "emittery": "^0.13.1", - "jest-util": "30.0.5", + "jest-util": "30.2.0", "string-length": "^4.0.2" }, "engines": { @@ -13862,15 +14338,15 @@ } }, "node_modules/jest-worker": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.0.5.tgz", - "integrity": "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.2.0.tgz", + "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.0.5", + "jest-util": "30.2.0", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" }, @@ -13898,12 +14374,13 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -13975,9 +14452,9 @@ "license": "MIT" }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", "dependencies": { @@ -14034,12 +14511,12 @@ } }, "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.3.tgz", + "integrity": "sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==", "license": "MIT", "dependencies": { - "jwa": "^1.4.1", + "jwa": "^1.4.2", "safe-buffer": "^5.0.1" } }, @@ -14083,14 +14560,14 @@ } }, "node_modules/launch-editor": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", - "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", + "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", "dev": true, "license": "MIT", "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" } }, "node_modules/leven": { @@ -14145,13 +14622,17 @@ } }, "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "dev": true, "license": "MIT", "engines": { "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/loader-utils": { @@ -14192,18 +14673,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.clamp": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/lodash.clamp/-/lodash.clamp-4.0.3.tgz", - "integrity": "sha512-HvzRFWjtcguTW7yd8NJBshuNaCa8aqNFtnswdT7f/cMd/1YKy5Zzoq4W/Oxvnx9l7aeY258uSdDfM793+eLsVg==", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" - }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -14216,13 +14685,6 @@ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", "license": "MIT" }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", - "license": "MIT" - }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", @@ -14301,18 +14763,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/lowercase-keys": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", @@ -14397,6 +14847,18 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/marked": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", + "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -14518,9 +14980,9 @@ } }, "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -14590,20 +15052,19 @@ } }, "node_modules/memfs": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.2.tgz", - "integrity": "sha512-NgYhCOWgovOXSzvYgUW0LQ7Qy72rWQMGGFJDoWg4G30RHd3z77VbYdtJ4fembJXBy8pMIUA31XNAupobOQlwdg==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.51.0.tgz", + "integrity": "sha512-4zngfkVM/GpIhC8YazOsM6E8hoB33NP0BCESPOA6z7qaL6umPJNqkO8CNYaLV2FB2MV6H1O3x2luHHOSqppv+A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/json-pack": "^1.0.3", - "@jsonjoy.com/util": "^1.3.0", - "tree-dump": "^1.0.1", + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", "tslib": "^2.0.0" }, - "engines": { - "node": ">= 4.0.0" - }, "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" @@ -15257,9 +15718,9 @@ "optional": true }, "node_modules/mocha": { - "version": "11.7.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.1.tgz", - "integrity": "sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==", + "version": "11.7.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz", + "integrity": "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==", "dev": true, "license": "MIT", "dependencies": { @@ -15271,6 +15732,7 @@ "find-up": "^5.0.0", "glob": "^10.4.5", "he": "^1.2.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", "minimatch": "^9.0.5", @@ -15370,9 +15832,9 @@ } }, "node_modules/mocha/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -15399,15 +15861,19 @@ } }, "node_modules/monaco-editor": { - "version": "0.51.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.51.0.tgz", - "integrity": "sha512-xaGwVV1fq343cM7aOYB6lVE4Ugf0UyimdD/x5PWcWBMKENwectaEu77FAN7c5sFiyumqeJdX1RPTh1ocioyDjw==", - "license": "MIT" + "version": "0.54.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.54.0.tgz", + "integrity": "sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==", + "license": "MIT", + "dependencies": { + "dompurify": "3.1.7", + "marked": "14.0.0" + } }, "node_modules/monaco-editor-webpack-plugin": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-7.1.0.tgz", - "integrity": "sha512-ZjnGINHN963JQkFqjjcBtn1XBtUATDZBMgNQhDQwd78w2ukRhFXAPNgWuacaQiDZsUr4h1rWv5Mv6eriKuOSzA==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-7.1.1.tgz", + "integrity": "sha512-WxdbFHS3Wtz4V9hzhe/Xog5hQRSMxmDLkEEYZwqMDHgJlkZo00HVFZR0j5d0nKypjTUkkygH3dDSXERLG4757A==", "dev": true, "license": "MIT", "dependencies": { @@ -15419,26 +15885,26 @@ } }, "node_modules/mongodb": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.17.0.tgz", - "integrity": "sha512-neerUzg/8U26cgruLysKEjJvoNSXhyID3RvzvdcpsIi2COYM3FS3o9nlH7fxFtefTb942dX3W9i37oPfCVj4wA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-7.0.0.tgz", + "integrity": "sha512-vG/A5cQrvGGvZm2mTnCSz1LUcbOPl83hfB6bxULKQ8oFZauyox/2xbZOoGNl+64m8VBrETkdGCDBdOsCr3F3jg==", "license": "Apache-2.0", "dependencies": { - "@mongodb-js/saslprep": "^1.1.9", - "bson": "^6.10.4", - "mongodb-connection-string-url": "^3.0.0" + "@mongodb-js/saslprep": "^1.3.0", + "bson": "^7.0.0", + "mongodb-connection-string-url": "^7.0.0" }, "engines": { - "node": ">=16.20.1" + "node": ">=20.19.0" }, "peerDependencies": { - "@aws-sdk/credential-providers": "^3.188.0", - "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", - "gcp-metadata": "^5.2.0", - "kerberos": "^2.0.1", - "mongodb-client-encryption": ">=6.0.0 <7", - "snappy": "^7.2.2", - "socks": "^2.7.1" + "@aws-sdk/credential-providers": "^3.806.0", + "@mongodb-js/zstd": "^7.0.0", + "gcp-metadata": "^7.0.1", + "kerberos": "^7.0.0", + "mongodb-client-encryption": ">=7.0.0 <7.1.0", + "snappy": "^7.3.2", + "socks": "^2.8.6" }, "peerDependenciesMeta": { "@aws-sdk/credential-providers": { @@ -15480,6 +15946,28 @@ "integrity": "sha512-3OygQjzjHr0hsT3y0f91yP7Ylp+2bbEM3IPil2yv+9avmGhA9Ru+CcgTXI+IfkfNlbcly/w7alvHDk+dlX28QQ==", "license": "SSPL" }, + "node_modules/mongodb/node_modules/@types/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q==", + "license": "MIT", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/mongodb/node_modules/mongodb-connection-string-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-7.0.0.tgz", + "integrity": "sha512-irhhjRVLE20hbkRl4zpAYLnDMM+zIZnp0IDB9akAFFUZp/3XdOfwwddc7y6cNvF2WCEtfTYRwYbIfYa2kVY0og==", + "license": "Apache-2.0", + "dependencies": { + "@types/whatwg-url": "^13.0.0", + "whatwg-url": "^14.1.0" + }, + "engines": { + "node": ">=20.19.0" + } + }, "node_modules/moo": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", @@ -15517,9 +16005,9 @@ } }, "node_modules/multiple-select-vanilla": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/multiple-select-vanilla/-/multiple-select-vanilla-3.5.0.tgz", - "integrity": "sha512-ifIrnWqsRtbE5O8uBUV9/+LeX0CT0yVwYcEzdX8Bwa88nVkACrHEUE1m5JfURPa6+7YRN47b94Hp37N59eow7g==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/multiple-select-vanilla/-/multiple-select-vanilla-4.4.0.tgz", + "integrity": "sha512-QxZep610yATWMZhDMq0kzZWZSTb/Iffc0OdknY1El5SOjSm0o7CSHxN7CfOJRlbSyYGNv4TyFlL5A8FRN08F2A==", "license": "MIT", "dependencies": { "@types/trusted-types": "^2.0.7" @@ -15564,9 +16052,9 @@ "optional": true }, "node_modules/napi-postinstall": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.2.tgz", - "integrity": "sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", "dev": true, "license": "MIT", "bin": { @@ -15632,9 +16120,9 @@ "license": "MIT" }, "node_modules/node-abi": { - "version": "3.75.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.75.0.tgz", - "integrity": "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==", + "version": "3.85.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.85.0.tgz", + "integrity": "sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==", "dev": true, "license": "MIT", "optional": true, @@ -15654,9 +16142,9 @@ "optional": true }, "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.2.tgz", + "integrity": "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==", "dev": true, "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { @@ -15695,16 +16183,16 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true, "license": "MIT" }, "node_modules/node-sarif-builder": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.2.0.tgz", - "integrity": "sha512-kVIOdynrF2CRodHZeP/97Rh1syTUHBNiw17hUCIVhlhEsWlfJm19MuO56s4MdKbr22xWx6mzMnNAgXzVlIYM9Q==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.3.1.tgz", + "integrity": "sha512-8z5dAbhpxmk/WRQHXlv4V0h+9Y4Ugk+w08lyhV/7E/CQX9yDdBc3025/EG+RSMJU2aPFh/IQ7XDV7Ti5TLt/TA==", "dev": true, "license": "MIT", "dependencies": { @@ -15712,7 +16200,7 @@ "fs-extra": "^11.1.1" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/normalize-package-data": { @@ -15761,9 +16249,9 @@ } }, "node_modules/normalize-url": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.2.tgz", - "integrity": "sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", + "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", "dev": true, "license": "MIT", "engines": { @@ -15799,15 +16287,6 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -16033,9 +16512,9 @@ } }, "node_modules/ora/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", "engines": { @@ -16046,9 +16525,9 @@ } }, "node_modules/ora/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, "license": "MIT" }, @@ -16174,9 +16653,9 @@ } }, "node_modules/p-map": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", - "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "dev": true, "license": "MIT", "engines": { @@ -16409,9 +16888,9 @@ "license": "MIT" }, "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -16426,9 +16905,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", "dev": true, "license": "ISC", "engines": { @@ -16759,9 +17238,9 @@ } }, "node_modules/prettier-plugin-organize-imports": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.2.0.tgz", - "integrity": "sha512-Zdy27UhlmyvATZi67BTnLcKTo8fm6Oik59Sz6H64PgZJVs6NJpPD1mT240mmJn62c98/QaL+r3kx9Q3gRpDajg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.3.0.tgz", + "integrity": "sha512-FxFz0qFhyBsGdIsb697f/EkvHzi5SZOhWAjxcx2dLt+Q532bAlhswcXGYB1yzjZ69kW8UoadFBw7TyNwlq96Iw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -16776,9 +17255,9 @@ } }, "node_modules/pretty-format": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz", - "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", "dev": true, "license": "MIT", "dependencies": { @@ -16823,23 +17302,6 @@ "dev": true, "license": "MIT" }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, "node_modules/property-information": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", @@ -17108,9 +17570,9 @@ "license": "Python-2.0" }, "node_modules/rc-config-loader/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -17132,43 +17594,30 @@ } }, "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", + "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", + "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.27.0" }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-dom/node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" + "peerDependencies": { + "react": "^19.2.0" } }, "node_modules/react-hotkeys-hook": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/react-hotkeys-hook/-/react-hotkeys-hook-5.1.0.tgz", - "integrity": "sha512-GCNGXjBzV9buOS3REoQFmSmE4WTvBhYQ0YrAeeMZI83bhXg3dRWsLHXDutcVDdEjwJqJCxk5iewWYX5LtFUd7g==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/react-hotkeys-hook/-/react-hotkeys-hook-5.2.1.tgz", + "integrity": "sha512-xbKh6zJxd/vJHT4Bw4+0pBD662Fk20V+VFhLqciCg+manTVO4qlqRqiwFOYelfHN9dBvWj9vxaPkSS26ZSIJGg==", "license": "MIT", "workspaces": [ "packages/*" @@ -17212,31 +17661,15 @@ } }, "node_modules/react-refresh": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", - "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, "node_modules/read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -17485,13 +17918,13 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -17638,14 +18071,14 @@ } }, "node_modules/rimraf": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", - "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.2.tgz", + "integrity": "sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "glob": "^11.0.0", - "package-json-from-dist": "^1.0.0" + "glob": "^13.0.0", + "package-json-from-dist": "^1.0.1" }, "bin": { "rimraf": "dist/esm/bin.mjs" @@ -17667,9 +18100,9 @@ } }, "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", "license": "MIT", "engines": { "node": ">=18" @@ -17810,9 +18243,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", - "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", + "version": "1.94.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.94.2.tgz", + "integrity": "sha512-N+7WK20/wOr7CzA2snJcUSSNTCzeCGUTFY3OgeQP3mZ1aj9NMQ0mSTXwlrnd89j33zzQJGqIN52GIOmYrfq46A==", "dev": true, "license": "MIT", "dependencies": { @@ -17831,9 +18264,9 @@ } }, "node_modules/sass-loader": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", - "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", + "version": "16.0.6", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.6.tgz", + "integrity": "sha512-sglGzId5gmlfxNs4gK2U3h7HlVRfx278YK6Ono5lwzuvi1jxig80YiuHkaDBVsYIKFhx8wN7XSCI0M2IDS/3qA==", "dev": true, "license": "MIT", "dependencies": { @@ -17872,26 +18305,22 @@ } }, "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", "dev": true, - "license": "ISC" + "license": "BlueOak-1.0.0" }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" }, "node_modules/schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, "license": "MIT", "dependencies": { @@ -17909,16 +18338,16 @@ } }, "node_modules/secretlint": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/secretlint/-/secretlint-10.2.1.tgz", - "integrity": "sha512-3BghQkIGrDz3xJklX/COxgKbxHz2CAsGkXH4oh8MxeYVLlhA3L/TLhAxZiTyqeril+CnDGg8MUEZdX1dZNsxVA==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/secretlint/-/secretlint-10.2.2.tgz", + "integrity": "sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/config-creator": "^10.2.1", - "@secretlint/formatter": "^10.2.1", - "@secretlint/node": "^10.2.1", - "@secretlint/profiler": "^10.2.1", + "@secretlint/config-creator": "^10.2.2", + "@secretlint/formatter": "^10.2.2", + "@secretlint/node": "^10.2.2", + "@secretlint/profiler": "^10.2.2", "debug": "^4.4.1", "globby": "^14.1.0", "read-pkg": "^9.0.1" @@ -17996,9 +18425,9 @@ } }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -18488,26 +18917,23 @@ } }, "node_modules/slickgrid-react": { - "version": "5.14.1", - "resolved": "https://registry.npmjs.org/slickgrid-react/-/slickgrid-react-5.14.1.tgz", - "integrity": "sha512-ul8XJu6ux+jVj5XPNdAruHFFVAWUa5sRPMCBQexFWcK/AEpl/VWbaW+Cl6xgh2xeKBR9AyvBo3im1E+ujq4lvA==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/slickgrid-react/-/slickgrid-react-9.9.0.tgz", + "integrity": "sha512-KUDIx3ErHGfYV4SzY4bkF7dseLM/jucc7PG+0ZoI6CsBySsUqaFhjZqBN9VUuxFRQJAzuB2KfQ5FvQyHylgyAg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "~5.14.0", - "@slickgrid-universal/custom-footer-component": "~5.14.0", - "@slickgrid-universal/empty-warning-component": "~5.14.0", - "@slickgrid-universal/event-pub-sub": "~5.13.0", - "@slickgrid-universal/pagination-component": "~5.14.0", - "@slickgrid-universal/row-detail-view-plugin": "~5.14.0", + "@slickgrid-universal/common": "9.9.0", + "@slickgrid-universal/custom-footer-component": "9.9.0", + "@slickgrid-universal/empty-warning-component": "9.9.0", + "@slickgrid-universal/event-pub-sub": "9.9.0", + "@slickgrid-universal/pagination-component": "9.9.0", + "@slickgrid-universal/row-detail-view-plugin": "9.9.0", + "@slickgrid-universal/utils": "9.9.0", "dequal": "^2.0.3", - "i18next": "^23.16.8", "sortablejs": "^1.15.6" }, - "engines": { - "node": ">=18.19.0" - }, "peerDependencies": { - "react": ">=18.0.0" + "react": ">=19.0.0" } }, "node_modules/sockjs": { @@ -18644,9 +19070,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true, "license": "CC0-1.0" }, @@ -18768,17 +19194,15 @@ } }, "node_modules/streamx": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.1.tgz", - "integrity": "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", "dev": true, "license": "MIT", "dependencies": { + "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" } }, "node_modules/string_decoder": { @@ -18986,9 +19410,9 @@ } }, "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { @@ -19070,9 +19494,9 @@ } }, "node_modules/strtok3": { - "version": "10.3.2", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.2.tgz", - "integrity": "sha512-or9w505RhhY66+uoe5YOC5QO/bRuATaoim3XTh+pGKx5VMWi/HDhMKuCjDLsLJouU2zg9Hf1nLPcNW7IHv80kQ==", + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", + "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -19114,21 +19538,21 @@ } }, "node_modules/style-to-js": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.19.tgz", - "integrity": "sha512-Ev+SgeqiNGT1ufsXyVC5RrJRXdrkRJ1Gol9Qw7Pb72YCKJXrBvP0ckZhBeVSrw2m06DJpei2528uIpjMb4TsoQ==", + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", "license": "MIT", "dependencies": { - "style-to-object": "1.0.12" + "style-to-object": "1.0.14" } }, "node_modules/style-to-object": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.12.tgz", - "integrity": "sha512-ddJqYnoT4t97QvN2C95bCgt+m7AAgXjVnkk/jxAfmp7EAB8nnqqZYEbMd3em7/vEomDb2LAQKAy1RFfv41mdNw==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", "license": "MIT", "dependencies": { - "inline-style-parser": "0.2.6" + "inline-style-parser": "0.2.7" } }, "node_modules/stylis": { @@ -19138,13 +19562,13 @@ "license": "MIT" }, "node_modules/supports-color": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" @@ -19277,13 +19701,17 @@ } }, "node_modules/tapable": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", - "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "dev": true, "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/tar-fs": { @@ -19370,9 +19798,9 @@ } }, "node_modules/terminal-link/node_modules/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", "dev": true, "license": "MIT", "dependencies": { @@ -19386,14 +19814,14 @@ } }, "node_modules/terser": { - "version": "5.43.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", - "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "version": "5.44.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", + "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.14.0", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -19547,14 +19975,18 @@ } }, "node_modules/thingies": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", - "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", + "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", "dev": true, - "license": "Unlicense", + "license": "MIT", "engines": { "node": ">=10.18" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, "peerDependencies": { "tslib": "^2" } @@ -19574,14 +20006,14 @@ "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -19591,11 +20023,14 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -19659,12 +20094,13 @@ } }, "node_modules/token-types": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.3.tgz", - "integrity": "sha512-IKJ6EzuPPWtKtEIEPpIdXv9j5j2LGJEYk0CKY2efgKoYKLBiZdh6iQkLVBow/CB3phyWAWCyk+bZeaimJn6uRQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.1.tgz", + "integrity": "sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==", "dev": true, "license": "MIT", "dependencies": { + "@borewit/text-codec": "^0.1.0", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" }, @@ -19699,9 +20135,9 @@ } }, "node_modules/tree-dump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.3.tgz", - "integrity": "sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -19749,19 +20185,19 @@ } }, "node_modules/ts-jest": { - "version": "29.4.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.0.tgz", - "integrity": "sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==", + "version": "29.4.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.5.tgz", + "integrity": "sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==", "dev": true, "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", - "ejs": "^3.1.10", "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.8", "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.7.2", + "semver": "^7.7.3", "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, @@ -20075,9 +20511,9 @@ } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -20088,16 +20524,140 @@ } }, "node_modules/typescript-eslint": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz", - "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.47.0.tgz", + "integrity": "sha512-Lwe8i2XQ3WoMjua/r1PHrCTpkubPYJCAfOurtn+mtTzqB6jNd+14n9UN1bJ4s3F49x9ixAm0FLflB/JzQ57M8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.47.0", + "@typescript-eslint/parser": "8.47.0", + "@typescript-eslint/typescript-estree": "8.47.0", + "@typescript-eslint/utils": "8.47.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/project-service": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.47.0.tgz", + "integrity": "sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.47.0", + "@typescript-eslint/types": "^8.47.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.47.0.tgz", + "integrity": "sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.47.0.tgz", + "integrity": "sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.47.0.tgz", + "integrity": "sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.47.0.tgz", + "integrity": "sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.47.0", + "@typescript-eslint/tsconfig-utils": "8.47.0", + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.47.0.tgz", + "integrity": "sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.38.0", - "@typescript-eslint/parser": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/utils": "8.38.0" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.47.0", + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/typescript-estree": "8.47.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -20108,7 +20668,25 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.47.0.tgz", + "integrity": "sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.47.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/uc.micro": { @@ -20118,10 +20696,24 @@ "dev": true, "license": "MIT" }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/uint8array-extras": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", - "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", "dev": true, "license": "MIT", "engines": { @@ -20175,9 +20767,9 @@ "license": "MIT" }, "node_modules/undici": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.12.0.tgz", - "integrity": "sha512-GrKEsc3ughskmGA9jevVlIOPMiiAHJ4OFUtaAH+NhfTUSiZ1wMPIQqQvAJUrJspFXJt3EBWgpAeoHEDVT1IBug==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", + "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==", "dev": true, "license": "MIT", "engines": { @@ -20359,9 +20951,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", "dev": true, "funding": [ { @@ -20406,35 +20998,10 @@ "dev": true, "license": "MIT" }, - "node_modules/use-disposable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/use-disposable/-/use-disposable-1.0.4.tgz", - "integrity": "sha512-j83t6AMLWUyb5zwlTDqf6dP9LezM9R0yTbI/b6olmdaGtCKQUe9pgJWV6dRaaQLcozypjIEp4EmZr2DkZGKLSg==", - "license": "MIT", - "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" - } - }, - "node_modules/use-resize-observer": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", - "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", - "license": "MIT", - "dependencies": { - "@juggle/resize-observer": "^3.3.1" - }, - "peerDependencies": { - "react": "16.8.0 - 18", - "react-dom": "16.8.0 - 18" - } - }, "node_modules/use-sync-external-store": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", - "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -20500,10 +21067,14 @@ } }, "node_modules/vanilla-calendar-pro": { - "version": "2.9.10", - "resolved": "https://registry.npmjs.org/vanilla-calendar-pro/-/vanilla-calendar-pro-2.9.10.tgz", - "integrity": "sha512-0yqWqlvitfQSRqjyVVr613whIgp62qC1JHgXyLalcJkNkMRZXRqEr+QQQvRdQavB2PBgB4HW+GM6VU4KU0K3Ng==", - "license": "MIT" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/vanilla-calendar-pro/-/vanilla-calendar-pro-3.0.5.tgz", + "integrity": "sha512-4X9bmTo1/KzbZrB7B6mZXtvVXIhcKxaVSnFZuaVtps7tshKJDxgaIElkgdia6IjB5qWetWuu7kZ+ZaV1sPxy6w==", + "license": "MIT", + "funding": { + "type": "individual", + "url": "https://buymeacoffee.com/uvarov" + } }, "node_modules/vary": { "version": "1.1.2", @@ -20516,9 +21087,9 @@ } }, "node_modules/version-range": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.14.0.tgz", - "integrity": "sha512-gjb0ARm9qlcBAonU4zPwkl9ecKkas+tC2CGwFfptTCWWIVTWY1YUbT2zZKsOAF1jR/tNxxyLwwG0cb42XlYcTg==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz", + "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==", "dev": true, "license": "Artistic-2.0", "engines": { @@ -20557,9 +21128,9 @@ } }, "node_modules/vscode-json-languageservice": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.6.1.tgz", - "integrity": "sha512-IQIURBF2VMKBdWcMunbHSI3G2WmJ9H7613E1hRxIXX7YsAPSdBxnEiIUrTnsSW/3fk+QW1kfsvSigqgAFYIYtg==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.6.3.tgz", + "integrity": "sha512-UDF7sJF5t7mzUzXL6dsClkvnHS4xnDL/gOMKGQiizRHmswlk/xSPGZxEvAtszWQF0ImNcJ0j9l+rHuefGzit1w==", "license": "MIT", "dependencies": { "@vscode/l10n": "^0.0.18", @@ -20707,35 +21278,37 @@ } }, "node_modules/webpack": { - "version": "5.95.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", - "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", + "version": "5.103.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.103.0.tgz", + "integrity": "sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.26.3", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", + "enhanced-resolve": "^5.17.3", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "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.2.0", + "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -20754,9 +21327,9 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", - "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-5.0.1.tgz", + "integrity": "sha512-PUp3YFOHysSw8t+13rcF+8o5SGaP/AZ5KnIF3qJfFodv4xJkmixnfcyy+LOwNadpzvyrEKpaMlewAG2sFUfdpw==", "dev": true, "license": "MIT", "dependencies": { @@ -20766,7 +21339,6 @@ "commander": "^7.2.0", "debounce": "^1.2.1", "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", "opener": "^1.5.2", "picocolors": "^1.0.0", @@ -20777,7 +21349,7 @@ "webpack-bundle-analyzer": "lib/bin/analyzer.js" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 20.9.0" } }, "node_modules/webpack-bundle-analyzer/node_modules/commander": { @@ -20867,15 +21439,15 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", - "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", "dev": true, "license": "MIT", "dependencies": { "colorette": "^2.0.10", - "memfs": "^4.6.0", - "mime-types": "^2.1.31", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" @@ -20896,6 +21468,23 @@ } } }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/webpack-dev-server": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", @@ -21039,33 +21628,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/webpack/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==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -21090,32 +21652,6 @@ "node": ">=4.0" } }, - "node_modules/webpack/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==", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/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==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -21306,10 +21842,17 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/workerpool": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.3.tgz", - "integrity": "sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw==", + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", + "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==", "dev": true, "license": "Apache-2.0" }, @@ -21374,9 +21917,9 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -21644,9 +22187,9 @@ } }, "node_modules/zod": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.0.10.tgz", - "integrity": "sha512-3vB+UU3/VmLL2lvwcY/4RV2i9z/YU0DTV/tDuYjrwmx5WeJ7hwy+rGEEx8glHp6Yxw7ibRbKSaIFBgReRPe5KA==", + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", + "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index 3219dee4d..37800dab7 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,17 @@ { "name": "vscode-documentdb", - "version": "0.6.1", + "version": "0.6.2", "aiKey": "0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255", "publisher": "ms-azuretools", "displayName": "DocumentDB for VS Code", "description": "DocumentDB and MongoDB GUI: Connect to databases, run queries, and manage your data. Supports working with databases across both cloud-based and local environments.", "enableMongoClusters": true, "engines": { - "vscode": "^1.90.0", - "node": ">=20.0.0" + "vscode": "^1.96.0", + "node": ">=20.0.0", + "npm": ">=10.0.0" }, + "packageManager": "npm@10.8.2", "galleryBanner": { "color": "#3c3c3c", "theme": "dark" @@ -86,106 +88,109 @@ "l10n:import": "npx @vscode/l10n-dev import-xlf ./translations.xlf" }, "devDependencies": { - "@eslint/js": "~9.31.0", + "@eslint/js": "~9.39.1", "@pmmmwh/react-refresh-webpack-plugin": "~0.6.1", "@swc/cli": "~0.7.8", - "@swc/core": "~1.13.2", + "@swc/core": "~1.15.1", "@swc/jest": "~0.2.39", "@types/documentdb": "~1.10.13", "@types/jest": "~30.0.0", "@types/mocha": "~10.0.10", - "@types/node": "~22.15.32", - "@types/react": "~18.3.23", - "@types/react-dom": "~18.3.7", - "@types/semver": "~7.7.0", + "@types/node": "~22.18.13", + "@types/react": "~19.2.2", + "@types/react-dom": "~19.2.2", + "@types/semver": "~7.7.1", "@types/uuid": "~10.0.0", - "@types/vscode": "1.90.0", + "@types/vscode": "~1.96.0", "@types/vscode-webview": "~1.57.5", "@vscode/l10n-dev": "~0.0.35", - "@vscode/test-cli": "~0.0.11", + "@vscode/test-cli": "~0.0.12", "@vscode/test-electron": "~2.5.2", - "@vscode/vsce": "~3.6.0", + "@vscode/vsce": "~3.7.0", "antlr4ts-cli": "^0.5.0-alpha.4", - "copy-webpack-plugin": "~13.0.0", + "copy-webpack-plugin": "~13.0.1", "cross-env": "~7.0.3", "css-loader": "~7.1.2", - "eslint": "~9.31.0", + "eslint": "~9.39.1", "eslint-plugin-import": "~2.32.0", - "eslint-plugin-jest": "~29.0.1", + "eslint-plugin-jest": "~29.1.0", "eslint-plugin-license-header": "~0.8.0", - "eslint-plugin-mocha": "~11.1.0", - "glob": "~11.0.3", - "globals": "~16.3.0", - "jest": "~30.0.5", - "jest-mock-vscode": "~3.0.5", - "mocha": "~11.7.1", + "eslint-plugin-mocha": "~11.2.0", + "glob": "~12.0.0", + "globals": "~16.5.0", + "jest": "~30.2.0", + "jest-mock-vscode": "~4.0.5", + "mocha": "~11.7.4", "mocha-junit-reporter": "~2.2.1", "mocha-multi-reporters": "~1.5.1", - "monaco-editor-webpack-plugin": "~7.1.0", + "monaco-editor-webpack-plugin": "~7.1.1", "prettier": "~3.6.2", - "prettier-plugin-organize-imports": "~4.2.0", - "react": "~18.3.1", - "react-dom": "~18.3.1", - "react-refresh": "~0.17.0", - "rimraf": "~6.0.1", + "prettier-plugin-organize-imports": "~4.3.0", + "react": "~19.2.0", + "react-dom": "~19.2.0", + "react-refresh": "~0.18.0", + "rimraf": "~6.1.0", "run-script-os": "~1.1.6", - "sass": "~1.89.2", - "sass-loader": "~16.0.5", + "sass": "~1.94.1", + "sass-loader": "~16.0.6", "style-loader": "~4.0.0", "swc-loader": "~0.2.6", "terser-webpack-plugin": "~5.3.14", - "ts-jest": "~29.4.0", + "ts-jest": "~29.4.5", "ts-node": "~10.9.2", - "typescript": "~5.8.3", - "typescript-eslint": "~8.38.0", - "webpack": "~5.95.0", - "webpack-bundle-analyzer": "~4.10.2", + "typescript": "~5.9.3", + "typescript-eslint": "~8.47.0", + "webpack": "~5.103.0", + "webpack-bundle-analyzer": "~5.0.0", "webpack-cli": "~6.0.1", "webpack-dev-server": "~5.2.2" }, "dependencies": { "@azure/arm-compute": "^22.4.0", - "@azure/arm-cosmosdb": "16.3.0", - "@azure/arm-mongocluster": "1.1.0-beta.1", + "@azure/arm-cosmosdb": "~16.4.0", + "@azure/arm-mongocluster": "~1.1.0", "@azure/arm-network": "^33.5.0", "@azure/arm-resources": "~6.1.0", - "@azure/cosmos": "~4.5.0", - "@azure/identity": "~4.10.2", - "@fluentui/react-components": "~9.67.0", - "@fluentui/react-icons": "~2.0.306", + "@azure/cosmos": "~4.7.0", + "@azure/identity": "~4.13.0", + "@fluentui/react-components": "~9.72.3", + "@fluentui/react-icons": "~2.0.313", "@microsoft/vscode-azext-azureauth": "~4.1.1", "@microsoft/vscode-azext-azureutils": "~3.4.5", "@microsoft/vscode-azext-utils": "~3.3.1", "@microsoft/vscode-azureresources-api": "~2.5.0", "@monaco-editor/react": "~4.7.0", "@mongodb-js/explain-plan-helper": "1.4.24", - "@trpc/client": "~11.4.3", - "@trpc/server": "~11.4.3", + "@trpc/client": "~11.7.1", + "@trpc/server": "~11.7.1", "@vscode/l10n": "~0.0.18", - "allotment": "~1.20.4", "antlr4ts": "^0.5.0-alpha.4", - "bson": "~6.10.4", + "bson": "~7.0.0", "denque": "~2.1.0", - "es-toolkit": "~1.39.7", - "monaco-editor": "~0.51.0", - "mongodb": "~6.17.0", + "es-toolkit": "~1.42.0", + "monaco-editor": "~0.54.0", + "mongodb": "~7.0.0", "mongodb-connection-string-url": "~3.0.2", - "react-hotkeys-hook": "~5.1.0", + "react-hotkeys-hook": "~5.2.1", "react-markdown": "^10.1.0", "regenerator-runtime": "^0.14.1", - "semver": "~7.7.2", - "slickgrid-react": "~5.14.1", - "vscode-json-languageservice": "~5.6.1", + "semver": "~7.7.3", + "slickgrid-react": "~9.9.0", + "vscode-json-languageservice": "~5.6.2", "vscode-languageclient": "~9.0.1", "vscode-languageserver": "~9.0.1", "vscode-languageserver-textdocument": "~1.0.12", "vscode-uri": "~3.1.0", - "zod": "~4.0.5" + "zod": "~4.1.12" }, - "//overrides": "only jest 30 depends on glob 11", + "//overrides": "glob 12 for latest, dompurify for security, and FluentUI needs to accept React 19", "overrides": { - "glob": "~11.0.3", - "test-exclude": "~7.0.1" + "dompurify": "~3.3.0", + "glob": "~12.0.0", + "test-exclude": "~7.0.1", + "@fluentui/react-components": { + "@types/react": "~19.2.2" + } }, "extensionDependencies": [], "contributes": { diff --git a/src/commands/addConnectionFromRegistry/addConnectionFromRegistry.ts b/src/commands/addConnectionFromRegistry/addConnectionFromRegistry.ts index 8ae66db20..7eeb999fa 100644 --- a/src/commands/addConnectionFromRegistry/addConnectionFromRegistry.ts +++ b/src/commands/addConnectionFromRegistry/addConnectionFromRegistry.ts @@ -26,6 +26,12 @@ export async function addConnectionFromRegistry(context: IActionContext, node: C throw new Error(l10n.t('No node selected.')); } + // Include journey correlation ID in telemetry for funnel analysis + // This is for statistics only - does not influence functionality + if (node.journeyCorrelationId) { + context.telemetry.properties.journeyCorrelationId = node.journeyCorrelationId; + } + // FYI: As of Sept 2025 this command is used in two views: the discovery view and the azure resources view const sourceViewId = node.contextValue.includes('documentDbBranch') || node.contextValue.includes('ruBranch') diff --git a/src/commands/newConnection/PromptTenantStep.ts b/src/commands/newConnection/PromptTenantStep.ts index 903538f60..853f82b0e 100644 --- a/src/commands/newConnection/PromptTenantStep.ts +++ b/src/commands/newConnection/PromptTenantStep.ts @@ -35,7 +35,10 @@ export class PromptTenantStep extends AzureWizardPromptStep { - return refreshView(context, Views.ConnectionsView); - }); + registerCommand( + 'vscode-documentdb.command.connectionsView.refresh', + withCommandCorrelation((context: IActionContext) => { + return refreshView(context, Views.ConnectionsView); + }), + ); registerCommandWithTreeNodeUnwrapping( 'vscode-documentdb.command.chooseDataMigrationExtension', - chooseDataMigrationExtension, + withTreeNodeCommandCorrelation(chooseDataMigrationExtension), ); //// Registry Commands: - registerCommand('vscode-documentdb.command.discoveryView.addRegistry', addDiscoveryRegistry); + registerCommand( + 'vscode-documentdb.command.discoveryView.addRegistry', + withCommandCorrelation(addDiscoveryRegistry), + ); registerCommandWithTreeNodeUnwrapping( 'vscode-documentdb.command.discoveryView.removeRegistry', - removeDiscoveryRegistry, + withTreeNodeCommandCorrelation(removeDiscoveryRegistry), ); registerCommandWithTreeNodeUnwrapping( 'vscode-documentdb.command.discoveryView.filterProviderContent', - filterProviderContent, + withTreeNodeCommandCorrelation(filterProviderContent), ); registerCommandWithTreeNodeUnwrapping( 'vscode-documentdb.command.discoveryView.manageCredentials', - manageCredentials, + withTreeNodeCommandCorrelation(manageCredentials), ); registerCommandWithTreeNodeUnwrapping( 'vscode-documentdb.command.discoveryView.learnMoreAboutProvider', - learnMoreAboutServiceProvider, + withTreeNodeCommandCorrelation(learnMoreAboutServiceProvider), ); registerCommandWithTreeNodeUnwrappingAndModalErrors( 'vscode-documentdb.command.discoveryView.addConnectionToConnectionsView', - addConnectionFromRegistry, + withTreeNodeCommandCorrelation(addConnectionFromRegistry), ); registerCommandWithTreeNodeUnwrappingAndModalErrors( 'vscode-documentdb.command.azureResourcesView.addConnectionToConnectionsView', - addConnectionFromRegistry, + withTreeNodeCommandCorrelation(addConnectionFromRegistry), ); - registerCommand('vscode-documentdb.command.discoveryView.refresh', (context: IActionContext) => { - return refreshView(context, Views.DiscoveryView); - }); + registerCommand( + 'vscode-documentdb.command.discoveryView.refresh', + withCommandCorrelation((context: IActionContext) => { + return refreshView(context, Views.DiscoveryView); + }), + ); registerCommandWithTreeNodeUnwrapping( 'vscode-documentdb.command.connectionsView.removeConnection', - removeConnection, + withTreeNodeCommandCorrelation(removeConnection), ); registerCommandWithTreeNodeUnwrapping( 'vscode-documentdb.command.connectionsView.renameConnection', - renameConnection, + withTreeNodeCommandCorrelation(renameConnection), ); // using registerCommand instead of vscode.commands.registerCommand for better telemetry: @@ -269,33 +285,75 @@ export class ClustersExtension implements vscode.Disposable { * It was possible to merge the two commands into one, but it would result in code that is * harder to understand and maintain. */ - registerCommand('vscode-documentdb.command.internal.containerView.open', openCollectionViewInternal); + registerCommand( + 'vscode-documentdb.command.internal.containerView.open', + withCommandCorrelation(openCollectionViewInternal), + ); registerCommandWithTreeNodeUnwrapping( 'vscode-documentdb.command.containerView.open', - openCollectionView, + withTreeNodeCommandCorrelation(openCollectionView), ); - registerCommand('vscode-documentdb.command.internal.documentView.open', openDocumentView); + registerCommand( + 'vscode-documentdb.command.internal.documentView.open', + withCommandCorrelation(openDocumentView), + ); - registerCommand('vscode-documentdb.command.internal.helpAndFeedback.openUrl', openHelpAndFeedbackUrl); + registerCommand( + 'vscode-documentdb.command.internal.helpAndFeedback.openUrl', + withCommandCorrelation(openHelpAndFeedbackUrl), + ); - registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.internal.retry', retryAuthentication); - registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.internal.revealView', revealView); + registerCommandWithTreeNodeUnwrapping( + 'vscode-documentdb.command.internal.retry', + withTreeNodeCommandCorrelation(retryAuthentication), + ); + registerCommandWithTreeNodeUnwrapping( + 'vscode-documentdb.command.internal.revealView', + withTreeNodeCommandCorrelation(revealView), + ); - registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.launchShell', launchShell); + registerCommandWithTreeNodeUnwrapping( + 'vscode-documentdb.command.launchShell', + withTreeNodeCommandCorrelation(launchShell), + ); - registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.dropCollection', deleteCollection); - registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.dropDatabase', deleteAzureDatabase); + registerCommandWithTreeNodeUnwrapping( + 'vscode-documentdb.command.dropCollection', + withTreeNodeCommandCorrelation(deleteCollection), + ); + registerCommandWithTreeNodeUnwrapping( + 'vscode-documentdb.command.dropDatabase', + withTreeNodeCommandCorrelation(deleteAzureDatabase), + ); - registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.hideIndex', hideIndex); - registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.unhideIndex', unhideIndex); - registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.dropIndex', dropIndex); + registerCommandWithTreeNodeUnwrapping( + 'vscode-documentdb.command.hideIndex', + withTreeNodeCommandCorrelation(hideIndex), + ); + registerCommandWithTreeNodeUnwrapping( + 'vscode-documentdb.command.unhideIndex', + withTreeNodeCommandCorrelation(unhideIndex), + ); + registerCommandWithTreeNodeUnwrapping( + 'vscode-documentdb.command.dropIndex', + withTreeNodeCommandCorrelation(dropIndex), + ); - registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.createCollection', createCollection); + registerCommandWithTreeNodeUnwrapping( + 'vscode-documentdb.command.createCollection', + withTreeNodeCommandCorrelation(createCollection), + ); - registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.createDocument', createMongoDocument); + registerCommandWithTreeNodeUnwrapping( + 'vscode-documentdb.command.createDocument', + withTreeNodeCommandCorrelation(createMongoDocument), + ); - registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.importDocuments', importDocuments); + registerCommandWithTreeNodeUnwrapping( + 'vscode-documentdb.command.importDocuments', + withTreeNodeCommandCorrelation(importDocuments), + ); registerScrapbookCommands(); @@ -309,10 +367,13 @@ export class ClustersExtension implements vscode.Disposable { * It was possible to merge the two commands into one, but it would result in code that is * harder to understand and maintain. */ - registerCommand('vscode-documentdb.command.internal.exportDocuments', exportQueryResults); + registerCommand( + 'vscode-documentdb.command.internal.exportDocuments', + withCommandCorrelation(exportQueryResults), + ); registerCommandWithTreeNodeUnwrapping( 'vscode-documentdb.command.exportDocuments', - exportEntireCollection, + withTreeNodeCommandCorrelation(exportEntireCollection), ); // This is an optional task - if it fails, we don't want to break extension activation, // but we should log the error for diagnostics diff --git a/src/documentdb/auth/AuthMethod.ts b/src/documentdb/auth/AuthMethod.ts index db42b9c33..aac20354a 100644 --- a/src/documentdb/auth/AuthMethod.ts +++ b/src/documentdb/auth/AuthMethod.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { getIconURI } from '../../constants'; +import { getIconPath } from '../../utils/icons'; /** * Authentication method identifiers @@ -122,7 +122,7 @@ export function createAuthMethodQuickPickItems( label: method.label, detail: method.detail, authMethod: method.id, - iconPath: method.iconName ? getIconURI(method.iconName) : undefined, + iconPath: method.iconName ? getIconPath(method.iconName) : undefined, alwaysShow: true, description: showSupportInfo && availableMethods && !availableMethods.includes(method.id) diff --git a/src/documentdb/scrapbook/registerScrapbookCommands.ts b/src/documentdb/scrapbook/registerScrapbookCommands.ts index 45c3af905..c985fa817 100644 --- a/src/documentdb/scrapbook/registerScrapbookCommands.ts +++ b/src/documentdb/scrapbook/registerScrapbookCommands.ts @@ -17,6 +17,7 @@ import { createScrapbook } from '../../commands/scrapbook-commands/createScrapbo import { executeAllCommand } from '../../commands/scrapbook-commands/executeAllCommand'; import { executeCommand } from '../../commands/scrapbook-commands/executeCommand'; import { ext } from '../../extensionVariables'; +import { withTreeNodeCommandCorrelation } from '../../utils/commandTelemetry'; import { MongoConnectError } from './connectToClient'; import { MongoDBLanguageClient } from './languageClient'; import { getAllErrorsFromTextDocument } from './ScrapbookHelpers'; @@ -37,13 +38,25 @@ export function registerScrapbookCommands(): void { setUpErrorReporting(); - registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.scrapbook.new', createScrapbook); - registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.scrapbook.executeCommand', executeCommand); - registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.scrapbook.executeAllCommands', executeAllCommand); + registerCommandWithTreeNodeUnwrapping( + 'vscode-documentdb.command.scrapbook.new', + withTreeNodeCommandCorrelation(createScrapbook), + ); + registerCommandWithTreeNodeUnwrapping( + 'vscode-documentdb.command.scrapbook.executeCommand', + withTreeNodeCommandCorrelation(executeCommand), + ); + registerCommandWithTreeNodeUnwrapping( + 'vscode-documentdb.command.scrapbook.executeAllCommands', + withTreeNodeCommandCorrelation(executeAllCommand), + ); // #region Database command - registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.scrapbook.connect', connectCluster); + registerCommandWithTreeNodeUnwrapping( + 'vscode-documentdb.command.scrapbook.connect', + withTreeNodeCommandCorrelation(connectCluster), + ); // #endregion } diff --git a/src/extension.ts b/src/extension.ts index 7cf55ab93..ac3f47abe 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -138,6 +138,7 @@ export async function isVCoreAndRURolloutEnabled(): Promise // Suppress error display and don't rethrow - this is feature detection that should fail gracefully context.errorHandling.suppressDisplay = true; context.errorHandling.rethrow = false; + context.telemetry.properties.isActivationEvent = 'true'; const azureResourcesExtensionApi = await apiUtils.getAzureExtensionApi< AzureResourcesExtensionApi & { isDocumentDbExtensionSupportEnabled: () => boolean } diff --git a/src/plugins/api-shared/azure/askToConfigureCredentials.ts b/src/plugins/api-shared/azure/askToConfigureCredentials.ts index ad23fb4e1..850a788e9 100644 --- a/src/plugins/api-shared/azure/askToConfigureCredentials.ts +++ b/src/plugins/api-shared/azure/askToConfigureCredentials.ts @@ -6,26 +6,52 @@ import * as l10n from '@vscode/l10n'; import { window } from 'vscode'; +interface AskToConfigureCredentialsOptions { + /** + * Whether to show the "Adjust Filters" button. + * Set to false when already in the filtering wizard to avoid circular flow. + * @default true + */ + showFilterOption?: boolean; +} + /** - * Shows a modal dialog asking the user if they want to configure/manage their Azure credentials. + * Shows a modal dialog asking the user if they want to configure/manage their Azure credentials or adjust filters. * Used when no Azure subscriptions are found or when user is not signed in. * - * @returns Promise that resolves to 'configure' if user wants to manage accounts, 'cancel' otherwise + * @param options Configuration options for the dialog + * @returns Promise that resolves to 'configure' if user wants to manage accounts, 'filter' if user wants to adjust filters, 'cancel' otherwise */ -export async function askToConfigureCredentials(): Promise<'configure' | 'cancel'> { - const configure = l10n.t('Yes, Manage Accounts'); +export async function askToConfigureCredentials( + options: AskToConfigureCredentialsOptions = {}, +): Promise<'configure' | 'filter' | 'cancel'> { + const { showFilterOption = true } = options; + + const configure = l10n.t('Manage Accounts'); + const filter = l10n.t('Adjust Filters'); + + const buttons = showFilterOption ? [{ title: configure }, { title: filter }] : [{ title: configure }]; + + const detailMessage = showFilterOption + ? l10n.t( + 'To connect to Azure resources, you need to sign in to Azure accounts.\n\n' + + 'If you are already signed in, your subscription or tenant filters may be hiding results.', + ) + : l10n.t('To connect to Azure resources, you need to sign in to Azure accounts.'); const result = await window.showInformationMessage( l10n.t('No Azure Subscriptions Found'), { modal: true, - detail: l10n.t( - 'To connect to Azure resources, you need to sign in to Azure accounts.\n\n' + - 'Would you like to manage your Azure accounts now?', - ), + detail: detailMessage, }, - { title: configure }, + ...buttons, ); - return result?.title === configure ? 'configure' : 'cancel'; + if (result?.title === configure) { + return 'configure'; + } else if (result?.title === filter) { + return 'filter'; + } + return 'cancel'; } diff --git a/src/plugins/api-shared/azure/credentialsManagement/AccountTenantsStep.ts b/src/plugins/api-shared/azure/credentialsManagement/AccountTenantsStep.ts new file mode 100644 index 000000000..6ad884fbd --- /dev/null +++ b/src/plugins/api-shared/azure/credentialsManagement/AccountTenantsStep.ts @@ -0,0 +1,169 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { type AzureTenant } from '@microsoft/vscode-azext-azureauth'; +import { AzureWizardPromptStep, GoBackError, UserCancelledError } from '@microsoft/vscode-azext-utils'; +import * as l10n from '@vscode/l10n'; +import * as vscode from 'vscode'; +import { ext } from '../../../../extensionVariables'; +import { nonNullProp, nonNullValue } from '../../../../utils/nonNull'; +import { removeUnselectedTenant } from '../subscriptionFiltering/subscriptionFilteringHelpers'; +import { type CredentialsManagementWizardContext } from './CredentialsManagementWizardContext'; + +interface TenantQuickPickItem extends vscode.QuickPickItem { + tenant?: AzureTenant; + isSignedIn?: boolean; + isBackOption?: boolean; + isExitOption?: boolean; +} + +export class AccountTenantsStep extends AzureWizardPromptStep { + public async prompt(context: CredentialsManagementWizardContext): Promise { + const selectedAccount = nonNullValue( + context.selectedAccount, + 'context.selectedAccount', + 'AccountTenantsStep.ts', + ); + + // Get tenants for the selected account from cached data (fetched in SelectAccountStep) + const getTenantQuickPickItems = (): TenantQuickPickItem[] => { + const accountInfo = context.allAccountsWithTenantInfo?.find( + (info) => info.account.id === selectedAccount.id, + ); + const tenantsWithStatus = accountInfo?.tenantsWithStatus ?? []; + + // Add telemetry + const unauthenticatedCount = tenantsWithStatus.filter((t) => !t.isSignedIn).length; + context.telemetry.measurements.totalTenantCount = tenantsWithStatus.length; + context.telemetry.measurements.unauthenticatedTenantCount = unauthenticatedCount; + + if (tenantsWithStatus.length === 0) { + context.telemetry.properties.noTenantsAvailable = 'true'; + return [ + { + label: l10n.t('No tenants available for this account'), + kind: vscode.QuickPickItemKind.Separator, + }, + { + label: l10n.t('Back to account selection'), + iconPath: new vscode.ThemeIcon('arrow-left'), + isBackOption: true, + }, + { label: '', kind: vscode.QuickPickItemKind.Separator }, + { + label: l10n.t('Exit'), + iconPath: new vscode.ThemeIcon('close'), + isExitOption: true, + }, + ]; + } + + // Build tenant items with sign-in status, sorted by name + const sortedTenants = [...tenantsWithStatus].sort((a, b) => { + const aName = a.tenant.displayName ?? a.tenant.tenantId ?? ''; + const bName = b.tenant.displayName ?? b.tenant.tenantId ?? ''; + return aName.localeCompare(bName); + }); + + const tenantItems: TenantQuickPickItem[] = sortedTenants.map(({ tenant, isSignedIn }) => ({ + label: tenant.displayName ?? tenant.tenantId ?? l10n.t('Unknown tenant'), + description: tenant.tenantId ?? '', + detail: isSignedIn ? l10n.t('$(pass) Signed in') : l10n.t('$(sign-in) Select to sign in'), + tenant, + isSignedIn, + })); + + return [ + ...tenantItems, + { label: '', kind: vscode.QuickPickItemKind.Separator }, + { + label: l10n.t('Back to account selection'), + iconPath: new vscode.ThemeIcon('arrow-left'), + isBackOption: true, + }, + { + label: l10n.t('Exit'), + iconPath: new vscode.ThemeIcon('close'), + isExitOption: true, + }, + ]; + }; + + const selectedItem = await context.ui.showQuickPick(getTenantQuickPickItems(), { + stepName: 'selectTenant', + placeHolder: l10n.t('Tenants for "{0}"', selectedAccount.label), + matchOnDescription: true, + suppressPersistence: true, + loadingPlaceHolder: l10n.t('Loading tenants…'), + }); + + // Handle navigation options + if (selectedItem.isBackOption) { + // Clear the selected account to go back to selection (keep cache for fast navigation) + context.selectedAccount = undefined; + context.selectedTenant = undefined; + context.telemetry.properties.tenantAction = 'back'; + + throw new GoBackError(); + } else if (selectedItem.isExitOption) { + context.telemetry.properties.tenantAction = 'exit'; + throw new UserCancelledError('exitAccountManagement'); + } + + // User selected a tenant + const selectedTenant = nonNullValue(selectedItem.tenant, 'selectedItem.tenant', 'AccountTenantsStep.ts'); + + if (selectedItem.isSignedIn) { + // Already signed in - set as selected and go to action step for back/exit options + context.selectedTenant = selectedTenant; + context.telemetry.properties.tenantAction = 'selectSignedInTenant'; + } else { + // Not signed in - start sign-in directly (no extra step) + context.telemetry.properties.tenantAction = 'signIn'; + await this.handleSignIn(context, selectedTenant); + // Clear cache to refresh sign-in status after sign-in attempt + context.allAccountsWithTenantInfo = []; + // After sign-in attempt, go back to account selection to re-fetch all data + context.selectedAccount = undefined; + throw new GoBackError(); + } + } + + private async handleSignIn(context: CredentialsManagementWizardContext, tenant: AzureTenant): Promise { + const tenantId = nonNullProp(tenant, 'tenantId', 'tenant.tenantId', 'AccountTenantsStep.ts'); + const tenantName = tenant.displayName ?? tenantId; + const accountId = tenant.account.id; + + try { + ext.outputChannel.appendLine(l10n.t('Starting sign-in to tenant: {0}', tenantName)); + + // Sign in to the specific tenant + const success = await context.azureSubscriptionProvider.signIn(tenantId, tenant.account); + + if (success) { + ext.outputChannel.appendLine(l10n.t('Successfully signed in to tenant: {0}', tenantName)); + void vscode.window.showInformationMessage(l10n.t('Successfully signed in to {0}', tenantName)); + + // Auto-select the newly authenticated tenant by removing it from the unselected list + // This ensures the tenant's subscriptions will appear in the Discovery View + await removeUnselectedTenant(tenantId, accountId); + ext.outputChannel.appendLine( + l10n.t('Tenant {0} has been automatically included in subscription discovery', tenantName), + ); + } else { + ext.outputChannel.appendLine(l10n.t('Sign-in to tenant was cancelled or failed: {0}', tenantName)); + } + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + ext.outputChannel.appendLine(l10n.t('Failed to sign in to tenant {0}: {1}', tenantName, errorMessage)); + throw error; + } + } + + public shouldPrompt(context: CredentialsManagementWizardContext): boolean { + // Only show this step if we have a selected account but no selected tenant + return !!context.selectedAccount && !context.selectedTenant; + } +} diff --git a/src/plugins/api-shared/azure/credentialsManagement/CredentialsManagementWizardContext.ts b/src/plugins/api-shared/azure/credentialsManagement/CredentialsManagementWizardContext.ts index 514ff68ba..4149ad88f 100644 --- a/src/plugins/api-shared/azure/credentialsManagement/CredentialsManagementWizardContext.ts +++ b/src/plugins/api-shared/azure/credentialsManagement/CredentialsManagementWizardContext.ts @@ -3,10 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { type AzureTenant } from '@microsoft/vscode-azext-azureauth'; import { type IActionContext } from '@microsoft/vscode-azext-utils'; import type * as vscode from 'vscode'; import { type AzureSubscriptionProviderWithFilters } from '../AzureSubscriptionProviderWithFilters'; +export interface TenantWithSignInStatus { + tenant: AzureTenant; + isSignedIn: boolean; +} + +export interface AccountWithTenantInfo { + account: vscode.AuthenticationSessionAccountInformation; + tenantsWithStatus: TenantWithSignInStatus[]; +} + export interface CredentialsManagementWizardContext extends IActionContext { // Required context azureSubscriptionProvider: AzureSubscriptionProviderWithFilters; @@ -14,6 +25,10 @@ export interface CredentialsManagementWizardContext extends IActionContext { // Selected account information selectedAccount?: vscode.AuthenticationSessionAccountInformation; - // Available options - availableAccounts?: vscode.AuthenticationSessionAccountInformation[]; + // All accounts with their tenant info (fetched once in SelectAccountStep) + // Initialized with [] so it's captured in propertiesBeforePrompt and survives back navigation + allAccountsWithTenantInfo: AccountWithTenantInfo[]; + + // Selected tenant + selectedTenant?: AzureTenant; } diff --git a/src/plugins/api-shared/azure/credentialsManagement/SelectAccountStep.ts b/src/plugins/api-shared/azure/credentialsManagement/SelectAccountStep.ts index 8f7134a0a..377093bad 100644 --- a/src/plugins/api-shared/azure/credentialsManagement/SelectAccountStep.ts +++ b/src/plugins/api-shared/azure/credentialsManagement/SelectAccountStep.ts @@ -7,8 +7,12 @@ import { AzureWizardPromptStep, UserCancelledError } from '@microsoft/vscode-aze import * as l10n from '@vscode/l10n'; import * as vscode from 'vscode'; import { ext } from '../../../../extensionVariables'; -import { nonNullValue } from '../../../../utils/nonNull'; -import { type CredentialsManagementWizardContext } from './CredentialsManagementWizardContext'; +import { nonNullProp, nonNullValue } from '../../../../utils/nonNull'; +import { + type AccountWithTenantInfo, + type CredentialsManagementWizardContext, + type TenantWithSignInStatus, +} from './CredentialsManagementWizardContext'; interface AccountQuickPickItem extends vscode.QuickPickItem { account?: vscode.AuthenticationSessionAccountInformation; @@ -19,22 +23,48 @@ interface AccountQuickPickItem extends vscode.QuickPickItem { export class SelectAccountStep extends AzureWizardPromptStep { public async prompt(context: CredentialsManagementWizardContext): Promise { - // Create async function to provide better loading UX and debugging experience + // Create async function to provide loading UX const getAccountQuickPickItems = async (): Promise => { - const loadStartTime = Date.now(); - - const accounts = await this.getAvailableAccounts(context); - context.availableAccounts = accounts; - - // Add telemetry for account availability - context.telemetry.measurements.initialAccountCount = accounts.length; - context.telemetry.measurements.accountsLoadingTimeMs = Date.now() - loadStartTime; + // Use cached data when navigating back, otherwise fetch + // Note: allAccountsWithTenantInfo is initialized with [] in wizard context creation + // so it's captured in propertiesBeforePrompt and survives back navigation + // (AzureWizard filters out null/undefined values when capturing propertiesBeforePrompt) + if (context.allAccountsWithTenantInfo.length === 0) { + const loadStartTime = Date.now(); + context.allAccountsWithTenantInfo = await this.getAccountsWithTenantInfo(context); + context.telemetry.measurements.accountsLoadingTimeMs = Date.now() - loadStartTime; + } - const accountItems: AccountQuickPickItem[] = accounts.map((account) => ({ - label: account.label, - iconPath: new vscode.ThemeIcon('account'), - account, - })); + const accountsWithInfo = context.allAccountsWithTenantInfo; + context.telemetry.measurements.initialAccountCount = accountsWithInfo.length; + + const accountItems: AccountQuickPickItem[] = accountsWithInfo.map((info) => { + const totalTenants = info.tenantsWithStatus.length; + const signedInCount = info.tenantsWithStatus.filter((t) => t.isSignedIn).length; + + let detail: string; + if (totalTenants === 0) { + detail = l10n.t('No tenants available'); + } else if (totalTenants === 1) { + detail = + signedInCount === 1 + ? l10n.t('1 tenant available (1 signed in)') + : l10n.t('1 tenant available (0 signed in)'); + } else { + detail = l10n.t( + '{0} tenants available ({1} signed in)', + totalTenants.toString(), + signedInCount.toString(), + ); + } + + return { + label: info.account.label, + detail, + iconPath: new vscode.ThemeIcon('account'), + account: info.account, + }; + }); // Handle empty accounts case if (accountItems.length === 0) { @@ -48,7 +78,7 @@ export class SelectAccountStep extends AzureWizardPromptStep { + ): Promise { try { // Get all tenants which include the accounts const tenants = await context.azureSubscriptionProvider.getTenants(); - // Extract unique accounts from tenants - const accounts = tenants.map((tenant) => tenant.account); - const uniqueAccounts = accounts.filter( - (account, index, self) => index === self.findIndex((a) => a.id === account.id), + // Check sign-in status for all tenants in parallel + const knownTenantsWithStatus: TenantWithSignInStatus[] = await Promise.all( + tenants.map(async (tenant) => { + const tenantId = nonNullProp(tenant, 'tenantId', 'tenant.tenantId', 'SelectAccountStep.ts'); + const isSignedIn = await context.azureSubscriptionProvider.isSignedIn(tenantId, tenant.account); + return { tenant, isSignedIn }; + }), ); - return uniqueAccounts.sort((a, b) => a.label.localeCompare(b.label)); + // Group tenants by account + const accountMap = new Map(); + + for (const tenantWithStatus of knownTenantsWithStatus) { + const accountId = tenantWithStatus.tenant.account.id; + if (!accountMap.has(accountId)) { + accountMap.set(accountId, { + account: tenantWithStatus.tenant.account, + tenantsWithStatus: [], + }); + } + const info = accountMap.get(accountId)!; + info.tenantsWithStatus.push(tenantWithStatus); + } + + return Array.from(accountMap.values()).sort((a, b) => a.account.label.localeCompare(b.account.label)); } catch (error) { - ext.outputChannel.appendLine( + ext.outputChannel.error( l10n.t( 'Failed to retrieve Azure accounts: {0}', error instanceof Error ? error.message : String(error), @@ -132,16 +180,16 @@ export class SelectAccountStep extends AzureWizardPromptStep { try { - ext.outputChannel.appendLine(l10n.t('Starting Azure sign-in process…')); + ext.outputChannel.info(l10n.t('Starting Azure sign-in process…')); const success = await context.azureSubscriptionProvider.signIn(); if (success) { - ext.outputChannel.appendLine(l10n.t('Azure sign-in completed successfully')); + ext.outputChannel.info(l10n.t('Azure sign-in completed successfully')); } else { - ext.outputChannel.appendLine(l10n.t('Azure sign-in was cancelled or failed')); + ext.outputChannel.warn(l10n.t('Azure sign-in was cancelled or failed')); } } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); - ext.outputChannel.appendLine(l10n.t('Azure sign-in failed: {0}', errorMessage)); + ext.outputChannel.error(l10n.t('Azure sign-in failed: {0}', errorMessage)); throw error; } } diff --git a/src/plugins/api-shared/azure/credentialsManagement/AccountActionsStep.ts b/src/plugins/api-shared/azure/credentialsManagement/TenantActionStep.ts similarity index 50% rename from src/plugins/api-shared/azure/credentialsManagement/AccountActionsStep.ts rename to src/plugins/api-shared/azure/credentialsManagement/TenantActionStep.ts index d78ab4622..774c49d91 100644 --- a/src/plugins/api-shared/azure/credentialsManagement/AccountActionsStep.ts +++ b/src/plugins/api-shared/azure/credentialsManagement/TenantActionStep.ts @@ -6,62 +6,57 @@ import { AzureWizardPromptStep, GoBackError, UserCancelledError } from '@microsoft/vscode-azext-utils'; import * as l10n from '@vscode/l10n'; import * as vscode from 'vscode'; -import { nonNullValue } from '../../../../utils/nonNull'; +import { nonNullProp, nonNullValue } from '../../../../utils/nonNull'; import { type CredentialsManagementWizardContext } from './CredentialsManagementWizardContext'; -interface AccountActionQuickPickItem extends vscode.QuickPickItem { +interface TenantActionQuickPickItem extends vscode.QuickPickItem { action?: 'back' | 'exit'; } -export class AccountActionsStep extends AzureWizardPromptStep { +/** + * This step is shown when a user selects a tenant that is already signed in. + * It provides navigation options (back/exit) since there's no action to take. + */ +export class TenantActionStep extends AzureWizardPromptStep { public async prompt(context: CredentialsManagementWizardContext): Promise { - const selectedAccount = nonNullValue( - context.selectedAccount, - 'context.selectedAccount', - 'AccountActionsStep.ts', - ); + const selectedTenant = nonNullValue(context.selectedTenant, 'context.selectedTenant', 'TenantActionStep.ts'); + const tenantId = nonNullProp(selectedTenant, 'tenantId', 'selectedTenant.tenantId', 'TenantActionStep.ts'); + const tenantName = selectedTenant.displayName ?? tenantId; - // Create action items for the selected account - const actionItems: AccountActionQuickPickItem[] = [ + // Tenant is already signed in - show info and allow navigation + const actionItems: TenantActionQuickPickItem[] = [ { - label: l10n.t('Back to account selection'), - detail: l10n.t('Return to the account list'), + label: l10n.t('Back to tenant selection'), + detail: l10n.t('You are already signed in to tenant "{0}"', tenantName), iconPath: new vscode.ThemeIcon('arrow-left'), action: 'back', }, { label: '', kind: vscode.QuickPickItemKind.Separator }, { label: l10n.t('Exit'), - detail: l10n.t('Close the account management wizard'), iconPath: new vscode.ThemeIcon('close'), action: 'exit', }, ]; const selectedAction = await context.ui.showQuickPick(actionItems, { - stepName: 'accountActions', - placeHolder: l10n.t('{0} is currently being used for Azure service discovery', selectedAccount.label), + stepName: 'tenantAction', + placeHolder: l10n.t('Signed in to tenant "{0}"', tenantName), suppressPersistence: true, }); - // Handle the selected action if (selectedAction.action === 'back') { - // Clear the selected account to go back to selection - context.selectedAccount = undefined; - context.telemetry.properties.accountAction = 'back'; - - // Use GoBackError to navigate back to the previous step + context.telemetry.properties.tenantSignInAction = 'back'; + context.selectedTenant = undefined; throw new GoBackError(); - } else if (selectedAction.action === 'exit') { - context.telemetry.properties.accountAction = 'exit'; - - // User chose to exit - throw UserCancelledError to gracefully exit wizard + } else { + context.telemetry.properties.tenantSignInAction = 'exit'; throw new UserCancelledError('exitAccountManagement'); } } public shouldPrompt(context: CredentialsManagementWizardContext): boolean { - // Only show this step if we have a selected account - return !!context.selectedAccount; + // Only show this step if we have a selected tenant (which means it's signed in) + return !!context.selectedTenant; } } diff --git a/src/plugins/api-shared/azure/credentialsManagement/configureAzureCredentials.ts b/src/plugins/api-shared/azure/credentialsManagement/configureAzureCredentials.ts index 6202eff29..2de1ad6e4 100644 --- a/src/plugins/api-shared/azure/credentialsManagement/configureAzureCredentials.ts +++ b/src/plugins/api-shared/azure/credentialsManagement/configureAzureCredentials.ts @@ -13,10 +13,11 @@ import * as l10n from '@vscode/l10n'; import { ext } from '../../../../extensionVariables'; import { isTreeElementWithContextValue } from '../../../../tree/TreeElementWithContextValue'; import { type AzureSubscriptionProviderWithFilters } from '../AzureSubscriptionProviderWithFilters'; -import { AccountActionsStep } from './AccountActionsStep'; +import { AccountTenantsStep } from './AccountTenantsStep'; import { type CredentialsManagementWizardContext } from './CredentialsManagementWizardContext'; import { ExecuteStep } from './ExecuteStep'; import { SelectAccountStep } from './SelectAccountStep'; +import { TenantActionStep } from './TenantActionStep'; /** * Internal implementation of Azure account management. @@ -32,16 +33,19 @@ async function configureAzureCredentialsInternal( ext.outputChannel.appendLine(l10n.t('Starting Azure account management wizard')); // Create wizard context + // Note: allAccountsWithTenantInfo is initialized with [] so it exists in propertiesBeforePrompt + // (AzureWizard filters out null/undefined values) and survives back navigation const wizardContext: CredentialsManagementWizardContext = { ...context, selectedAccount: undefined, + allAccountsWithTenantInfo: [], azureSubscriptionProvider, }; // Create and configure the wizard const wizard = new AzureWizard(wizardContext, { title: l10n.t('Manage Azure Accounts'), - promptSteps: [new SelectAccountStep(), new AccountActionsStep()], + promptSteps: [new SelectAccountStep(), new AccountTenantsStep(), new TenantActionStep()], executeSteps: [new ExecuteStep()], }); diff --git a/src/plugins/api-shared/azure/credentialsManagement/index.ts b/src/plugins/api-shared/azure/credentialsManagement/index.ts index 862b190e2..b93dfa4d7 100644 --- a/src/plugins/api-shared/azure/credentialsManagement/index.ts +++ b/src/plugins/api-shared/azure/credentialsManagement/index.ts @@ -3,8 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -export { AccountActionsStep } from './AccountActionsStep'; +export { AccountTenantsStep } from './AccountTenantsStep'; export { configureAzureCredentials } from './configureAzureCredentials'; export type { CredentialsManagementWizardContext } from './CredentialsManagementWizardContext'; export { ExecuteStep } from './ExecuteStep'; export { SelectAccountStep } from './SelectAccountStep'; +export { TenantActionStep } from './TenantActionStep'; diff --git a/src/plugins/api-shared/azure/subscriptionFiltering/ExecuteStep.ts b/src/plugins/api-shared/azure/subscriptionFiltering/ExecuteStep.ts index c6779959e..7e91b8e62 100644 --- a/src/plugins/api-shared/azure/subscriptionFiltering/ExecuteStep.ts +++ b/src/plugins/api-shared/azure/subscriptionFiltering/ExecuteStep.ts @@ -54,13 +54,29 @@ export class ExecuteStep extends AzureWizardExecuteStep } } - const selectedTenantIds = new Set(selectedTenants.map((tenant) => tenant.tenantId || '')); - // Add telemetry for tenant filtering context.telemetry.measurements.tenantFilteringCount = allTenants.length; context.telemetry.measurements.selectedFinalTenantsCount = selectedTenants.length; context.telemetry.properties.filteringActionType = 'tenantFiltering'; + // If no tenants selected, clear all tenant filtering (show all tenants) + // This is analogous to subscription filtering where empty selection means "no filter" + if (selectedTenants.length === 0) { + for (const accountId of accountIds) { + for (const tenant of allTenants) { + const tenantId = tenant.tenantId || ''; + await removeUnselectedTenant(tenantId, accountId); + } + } + + ext.outputChannel.appendLine( + l10n.t('No tenants selected. Tenant filtering disabled (all tenants will be shown).'), + ); + return; + } + + const selectedTenantIds = new Set(selectedTenants.map((tenant) => tenant.tenantId || '')); + // Apply tenant filtering for each account for (const accountId of accountIds) { // Process each tenant - add to unselected if not selected, remove from unselected if selected @@ -80,16 +96,10 @@ export class ExecuteStep extends AzureWizardExecuteStep l10n.t('Successfully configured tenant filtering. Selected {0} tenant(s)', selectedTenants.length), ); - if (selectedTenants.length > 0) { - const tenantNames = selectedTenants.map( - (tenant) => tenant.displayName || tenant.tenantId || l10n.t('Unknown tenant'), - ); - ext.outputChannel.appendLine(l10n.t('Selected tenants: {0}', tenantNames.join(', '))); - } else { - ext.outputChannel.appendLine( - l10n.t('No tenants selected. Azure discovery will be filtered to exclude all tenant results.'), - ); - } + const tenantNames = selectedTenants.map( + (tenant) => tenant.displayName || tenant.tenantId || l10n.t('Unknown tenant'), + ); + ext.outputChannel.appendLine(l10n.t('Selected tenants: {0}', tenantNames.join(', '))); } private async applySubscriptionFiltering(context: FilteringWizardContext): Promise { diff --git a/src/plugins/api-shared/azure/subscriptionFiltering/FilterTenantSubStep.ts b/src/plugins/api-shared/azure/subscriptionFiltering/FilterTenantSubStep.ts index ccf644cce..faacb854f 100644 --- a/src/plugins/api-shared/azure/subscriptionFiltering/FilterTenantSubStep.ts +++ b/src/plugins/api-shared/azure/subscriptionFiltering/FilterTenantSubStep.ts @@ -16,6 +16,7 @@ interface TenantQuickPickItem extends vscode.QuickPickItem { export class FilterTenantSubStep extends AzureWizardPromptStep { public async prompt(context: FilteringWizardContext): Promise { + // availableTenants only contains authenticated tenants (filtered in InitializeFilteringStep) const tenants = context.availableTenants || []; // Add telemetry for tenant filtering @@ -23,7 +24,9 @@ export class FilterTenantSubStep extends AzureWizardPromptStep { - // Sort by display name if available, otherwise by tenant ID - const aName = a.displayName || a.tenantId || ''; - const bName = b.displayName || b.tenantId || ''; - return aName.localeCompare(bName); - }); + const allTenants = await azureSubscriptionProvider.getTenants(); + + // Filter to only show authenticated tenants + // Check sign-in status for all tenants in parallel + const tenantsWithSignInStatus = await Promise.all( + allTenants.map(async (tenant) => { + if (!tenant.tenantId) { + return { tenant, isSignedIn: false }; + } + const isSignedIn = await azureSubscriptionProvider.isSignedIn(tenant.tenantId, tenant.account); + return { tenant, isSignedIn }; + }), + ); + + // Only include authenticated tenants in the available list + context.availableTenants = tenantsWithSignInStatus + .filter(({ isSignedIn }) => isSignedIn) + .map(({ tenant }) => tenant) + .sort((a, b) => { + // Sort by display name if available, otherwise by tenant ID + const aName = a.displayName || a.tenantId || ''; + const bName = b.displayName || b.tenantId || ''; + return aName.localeCompare(bName); + }); context.telemetry.measurements.tenantLoadTimeMs = Date.now() - tenantLoadStartTime; - context.telemetry.measurements.tenantsCount = context.availableTenants.length; + context.telemetry.measurements.tenantsCount = allTenants.length; + context.telemetry.measurements.authenticatedTenantsCount = context.availableTenants.length; const subscriptionLoadStartTime = Date.now(); context.allSubscriptions = await azureSubscriptionProvider.getSubscriptions(false); context.telemetry.measurements.subscriptionLoadTimeMs = Date.now() - subscriptionLoadStartTime; context.telemetry.measurements.allSubscriptionsCount = context.allSubscriptions.length; - // Check if there are any tenant-filtered subscriptions available - const filteredSubscriptions = getTenantFilteredSubscriptions(context.allSubscriptions); - if (!filteredSubscriptions || filteredSubscriptions.length === 0) { - // Show modal dialog for empty state - const configureResult = await askToConfigureCredentials(); + // Check if there are any subscriptions available at all (before filtering) + // Only show the credentials dialog if there are truly no subscriptions + // If subscriptions exist but are filtered out, proceed with the wizard to let user adjust filters + if (!context.allSubscriptions || context.allSubscriptions.length === 0) { + // No subscriptions at all - user needs to sign in or configure accounts + // Don't show filter option since we're already in the filtering wizard + const configureResult = await askToConfigureCredentials({ showFilterOption: false }); if (configureResult === 'configure') { await this.configureCredentialsFromWizard(context, azureSubscriptionProvider); throw new UserCancelledError('User chose to configure Azure credentials'); } - // User chose not to configure - also cancel the wizard since there's nothing to filter + // User chose not to configure - cancel the wizard since there's nothing to filter throw new UserCancelledError('No subscriptions available for filtering'); } diff --git a/src/plugins/api-shared/azure/subscriptionFiltering/configureAzureSubscriptionFilter.ts b/src/plugins/api-shared/azure/subscriptionFiltering/configureAzureSubscriptionFilter.ts index f9938ab16..ab18cc72b 100644 --- a/src/plugins/api-shared/azure/subscriptionFiltering/configureAzureSubscriptionFilter.ts +++ b/src/plugins/api-shared/azure/subscriptionFiltering/configureAzureSubscriptionFilter.ts @@ -11,6 +11,7 @@ import { type IActionContext, } from '@microsoft/vscode-azext-utils'; import * as l10n from '@vscode/l10n'; +import { ext } from '../../../../extensionVariables'; import { ExecuteStep } from './ExecuteStep'; import { type FilteringWizardContext } from './FilteringWizardContext'; import { InitializeFilteringStep } from './InitializeFilteringStep'; @@ -81,6 +82,8 @@ export async function configureAzureSubscriptionFilter< context.telemetry.properties.subscriptionFilteringResult = 'Failed'; context.telemetry.properties.subscriptionFilteringError = error instanceof Error ? error.message : String(error); - throw error; + ext.outputChannel.error( + `Error during subscription filtering: ${error instanceof Error ? error.message : String(error)}`, + ); } } diff --git a/src/plugins/api-shared/azure/subscriptionFiltering/subscriptionFilteringHelpers.ts b/src/plugins/api-shared/azure/subscriptionFiltering/subscriptionFilteringHelpers.ts index 05470d8b2..e19a8c4f3 100644 --- a/src/plugins/api-shared/azure/subscriptionFiltering/subscriptionFilteringHelpers.ts +++ b/src/plugins/api-shared/azure/subscriptionFiltering/subscriptionFilteringHelpers.ts @@ -101,12 +101,7 @@ export function isTenantFilteredOut(tenantId: string, accountId: string): boolea * @returns Filtered subscriptions from selected tenants only */ export function getTenantFilteredSubscriptions(subscriptions: AzureSubscription[]): AzureSubscription[] { - const filteredSubscriptions = subscriptions.filter( - (subscription) => !isTenantFilteredOut(subscription.tenantId, subscription.account.id), - ); - - // If filtering would result in an empty list, return all subscriptions as a fallback - return filteredSubscriptions.length > 0 ? filteredSubscriptions : subscriptions; + return subscriptions.filter((subscription) => !isTenantFilteredOut(subscription.tenantId, subscription.account.id)); } /** diff --git a/src/plugins/api-shared/azure/wizard/SelectSubscriptionStep.ts b/src/plugins/api-shared/azure/wizard/SelectSubscriptionStep.ts index 60f259e00..49beabd5e 100644 --- a/src/plugins/api-shared/azure/wizard/SelectSubscriptionStep.ts +++ b/src/plugins/api-shared/azure/wizard/SelectSubscriptionStep.ts @@ -68,13 +68,24 @@ export class SelectSubscriptionStep extends AzureWizardPromptStep { + // Add telemetry for filter configuration activation + context.telemetry.properties.filterConfigActivated = 'true'; + context.telemetry.properties.nodeProvided = 'false'; + context.telemetry.properties.initiatedFrom = 'newConnectionWizard'; + if (context.discoveryProviderId) { + context.telemetry.properties.discoveryProviderId = context.discoveryProviderId; + } + + // Call the subscription filter configuration directly using the subscription provider from context + const { configureAzureSubscriptionFilter } = await import('../subscriptionFiltering'); + await configureAzureSubscriptionFilter(context, subscriptionProvider); + } + private async showRetryInstructions(): Promise { await window.showInformationMessage( l10n.t('Account Management Completed'), diff --git a/src/plugins/service-azure-mongo-ru/AzureMongoRUDiscoveryProvider.ts b/src/plugins/service-azure-mongo-ru/AzureMongoRUDiscoveryProvider.ts index f785cd7a8..aed9fabe1 100644 --- a/src/plugins/service-azure-mongo-ru/AzureMongoRUDiscoveryProvider.ts +++ b/src/plugins/service-azure-mongo-ru/AzureMongoRUDiscoveryProvider.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { type IActionContext, type IWizardOptions } from '@microsoft/vscode-azext-utils'; -import { Disposable, l10n, ThemeIcon } from 'vscode'; +import { Disposable } from 'vscode'; import { type NewConnectionWizardContext } from '../../commands/newConnection/NewConnectionWizardContext'; import { ext } from '../../extensionVariables'; import { type DiscoveryProvider } from '../../services/discoveryServices'; @@ -13,15 +13,16 @@ import { AzureSubscriptionProviderWithFilters } from '../api-shared/azure/AzureS import { configureAzureSubscriptionFilter } from '../api-shared/azure/subscriptionFiltering/configureAzureSubscriptionFilter'; import { AzureContextProperties } from '../api-shared/azure/wizard/AzureContextProperties'; import { SelectSubscriptionStep } from '../api-shared/azure/wizard/SelectSubscriptionStep'; +import { DESCRIPTION, DISCOVERY_PROVIDER_ID, ICON_PATH, LABEL, WIZARD_TITLE } from './config'; import { AzureMongoRUServiceRootItem } from './discovery-tree/AzureMongoRUServiceRootItem'; import { AzureMongoRUExecuteStep } from './discovery-wizard/AzureMongoRUExecuteStep'; import { SelectRUClusterStep } from './discovery-wizard/SelectRUClusterStep'; export class AzureMongoRUDiscoveryProvider extends Disposable implements DiscoveryProvider { - id = 'azure-mongo-ru-discovery'; - label = l10n.t('Azure Cosmos DB for MongoDB (RU)'); - description = l10n.t('Azure Service Discovery for MongoDB RU'); - iconPath = new ThemeIcon('azure'); + id = DISCOVERY_PROVIDER_ID; + label = LABEL; + description = DESCRIPTION; + iconPath = ICON_PATH; azureSubscriptionProvider: AzureSubscriptionProviderWithFilters; @@ -41,7 +42,7 @@ export class AzureMongoRUDiscoveryProvider extends Disposable implements Discove context.properties[AzureContextProperties.AzureSubscriptionProvider] = this.azureSubscriptionProvider; return { - title: l10n.t('Azure Service Discovery'), + title: WIZARD_TITLE, promptSteps: [new SelectSubscriptionStep(), new SelectRUClusterStep()], executeSteps: [new AzureMongoRUExecuteStep()], showLoadingPrompt: true, @@ -62,7 +63,7 @@ export class AzureMongoRUDiscoveryProvider extends Disposable implements Discove async configureCredentials(context: IActionContext, node?: TreeElement): Promise { // Add telemetry for credential configuration activation context.telemetry.properties.credentialConfigActivated = 'true'; - context.telemetry.properties.discoveryProviderId = this.id; + context.telemetry.properties.discoveryProviderId = DISCOVERY_PROVIDER_ID; context.telemetry.properties.nodeProvided = node ? 'true' : 'false'; if (!node || node instanceof AzureMongoRUServiceRootItem) { diff --git a/src/plugins/service-azure-mongo-ru/config.ts b/src/plugins/service-azure-mongo-ru/config.ts new file mode 100644 index 000000000..0f2c9eb19 --- /dev/null +++ b/src/plugins/service-azure-mongo-ru/config.ts @@ -0,0 +1,28 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { l10n, ThemeIcon } from 'vscode'; + +/** + * Configuration constants for the Azure Cosmos DB for MongoDB (RU) discovery provider. + */ + +/** Unique identifier for this discovery provider */ +export const DISCOVERY_PROVIDER_ID = 'azure-mongo-ru-discovery'; + +/** Resource type identifier for telemetry */ +export const RESOURCE_TYPE = 'mongoRU'; + +/** Display label for the discovery provider */ +export const LABEL = l10n.t('Azure Cosmos DB for MongoDB (RU)'); + +/** Description shown in the discovery provider list */ +export const DESCRIPTION = l10n.t('Azure Service Discovery for MongoDB RU'); + +/** Icon for the discovery provider */ +export const ICON_PATH = new ThemeIcon('azure'); + +/** Title shown in the discovery wizard */ +export const WIZARD_TITLE = l10n.t('Azure Service Discovery'); diff --git a/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUServiceRootItem.ts b/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUServiceRootItem.ts index 78b0352e6..7a38c8884 100644 --- a/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUServiceRootItem.ts +++ b/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUServiceRootItem.ts @@ -5,6 +5,7 @@ import { type AzureTenant, type VSCodeAzureSubscriptionProvider } from '@microsoft/vscode-azext-azureauth'; import * as l10n from '@vscode/l10n'; +import { randomUUID } from 'crypto'; import * as vscode from 'vscode'; import { createGenericElementWithContext } from '../../../tree/api/createGenericElementWithContext'; import { type ExtTreeElementBase, type TreeElement } from '../../../tree/TreeElement'; @@ -32,16 +33,24 @@ export class AzureMongoRUServiceRootItem } async getChildren(): Promise { + // Generate a journey correlation ID for funnel telemetry tracking + const journeyCorrelationId = randomUUID(); + const allSubscriptions = await this.azureSubscriptionProvider.getSubscriptions(true); const subscriptions = getTenantFilteredSubscriptions(allSubscriptions); if (!subscriptions || subscriptions.length === 0) { // Show modal dialog for empty state const configureResult = await askToConfigureCredentials(); + // Note to future maintainers: 'void' is important here so that the return below returns the error node. + // Otherwise, the /retry node might be duplicated as we're inside of tree node with a loading state (the node items are being swapped etc.) if (configureResult === 'configure') { - // Note to future maintainers: 'void' is important here so that the return below returns the error node. - // Otherwise, the /retry node might be duplicated as we're inside of tree node with a loading state (the node items are being swapped etc.) void vscode.commands.executeCommand('vscode-documentdb.command.discoveryView.manageCredentials', this); + } else if (configureResult === 'filter') { + void vscode.commands.executeCommand( + 'vscode-documentdb.command.discoveryView.filterProviderContent', + this, + ); } return [ @@ -79,12 +88,16 @@ export class AzureMongoRUServiceRootItem .sort((a, b) => a.name.localeCompare(b.name)) // map to AzureMongoRUSubscriptionItem .map((sub) => { - return new AzureMongoRUSubscriptionItem(this.id, { - subscription: sub, - subscriptionName: sub.name, - subscriptionId: sub.subscriptionId, - tenant: tenantMap.get(sub.tenantId), - }); + return new AzureMongoRUSubscriptionItem( + this.id, + { + subscription: sub, + subscriptionName: sub.name, + subscriptionId: sub.subscriptionId, + tenant: tenantMap.get(sub.tenantId), + }, + journeyCorrelationId, + ); }) ); } diff --git a/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUSubscriptionItem.ts b/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUSubscriptionItem.ts index a2268772a..dbc50893d 100644 --- a/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUSubscriptionItem.ts +++ b/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUSubscriptionItem.ts @@ -15,6 +15,7 @@ import { type TreeElementWithContextValue } from '../../../tree/TreeElementWithC import { type ClusterModel } from '../../../tree/documentdb/ClusterModel'; import { createCosmosDBManagementClient } from '../../../utils/azureClients'; import { nonNullProp } from '../../../utils/nonNull'; +import { DISCOVERY_PROVIDER_ID } from '../config'; import { MongoRUResourceItem } from './documentdb/MongoRUResourceItem'; export interface AzureSubscriptionModel { @@ -31,6 +32,7 @@ export class AzureMongoRUSubscriptionItem implements TreeElement, TreeElementWit constructor( public readonly parentId: string, public readonly subscription: AzureSubscriptionModel, + private readonly journeyCorrelationId: string, ) { this.id = `${parentId}/${subscription.subscriptionId}`; } @@ -40,7 +42,8 @@ export class AzureMongoRUSubscriptionItem implements TreeElement, TreeElementWit 'azure-mongo-ru-discovery.getChildren', async (context: IActionContext) => { const startTime = Date.now(); - context.telemetry.properties.discoveryProvider = 'azure-mongo-ru-discovery'; + context.telemetry.properties.discoveryProviderId = DISCOVERY_PROVIDER_ID; + context.telemetry.properties.journeyCorrelationId = this.journeyCorrelationId; const managementClient = await createCosmosDBManagementClient(context, this.subscription.subscription); const allAccounts = await uiUtils.listAllIterator(managementClient.databaseAccounts.list()); @@ -61,7 +64,11 @@ export class AzureMongoRUSubscriptionItem implements TreeElement, TreeElementWit dbExperience: CosmosDBMongoRUExperience, } as ClusterModel; - return new MongoRUResourceItem(this.subscription.subscription, clusterInfo); + return new MongoRUResourceItem( + this.journeyCorrelationId, + this.subscription.subscription, + clusterInfo, + ); }); }, ); diff --git a/src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts b/src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts index 359058014..098be5b20 100644 --- a/src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts +++ b/src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts @@ -13,6 +13,7 @@ import { Views } from '../../../../documentdb/Views'; import { ext } from '../../../../extensionVariables'; import { ClusterItemBase, type EphemeralClusterCredentials } from '../../../../tree/documentdb/ClusterItemBase'; import { type ClusterModel } from '../../../../tree/documentdb/ClusterModel'; +import { DISCOVERY_PROVIDER_ID, RESOURCE_TYPE } from '../../config'; import { extractCredentialsFromRUAccount } from '../../utils/ruClusterHelpers'; export class MongoRUResourceItem extends ClusterItemBase { @@ -28,17 +29,26 @@ export class MongoRUResourceItem extends ClusterItemBase { ); constructor( + /** + * Correlation ID for telemetry funnel analysis. + * For statistics only - does not influence functionality. + */ + journeyCorrelationId: string, readonly subscription: AzureSubscription, cluster: ClusterModel, ) { super(cluster); + this.journeyCorrelationId = journeyCorrelationId; } public async getCredentials(): Promise { return callWithTelemetryAndErrorHandling('getCredentials', async (context: IActionContext) => { context.telemetry.properties.view = Views.DiscoveryView; - context.telemetry.properties.discoveryProvider = 'azure-mongo-ru-discovery'; - context.telemetry.properties.resourceType = 'mongoRU'; + context.telemetry.properties.discoveryProviderId = DISCOVERY_PROVIDER_ID; + context.telemetry.properties.resourceType = RESOURCE_TYPE; + if (this.journeyCorrelationId) { + context.telemetry.properties.journeyCorrelationId = this.journeyCorrelationId; + } const credentials = await extractCredentialsFromRUAccount( context, @@ -59,9 +69,12 @@ export class MongoRUResourceItem extends ClusterItemBase { const result = await callWithTelemetryAndErrorHandling('connect', async (context: IActionContext) => { const connectionStartTime = Date.now(); context.telemetry.properties.view = Views.DiscoveryView; - context.telemetry.properties.discoveryProvider = 'azure-mongo-ru-discovery'; + context.telemetry.properties.discoveryProviderId = DISCOVERY_PROVIDER_ID; context.telemetry.properties.connectionInitiatedFrom = 'discoveryView'; - context.telemetry.properties.resourceType = 'mongoRU'; + context.telemetry.properties.resourceType = RESOURCE_TYPE; + if (this.journeyCorrelationId) { + context.telemetry.properties.journeyCorrelationId = this.journeyCorrelationId; + } ext.outputChannel.appendLine( l10n.t('Attempting to authenticate with "{cluster}"…', { diff --git a/src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts b/src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts index 13870172d..ba5bc9d32 100644 --- a/src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts +++ b/src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts @@ -10,6 +10,7 @@ import { type NewConnectionWizardContext } from '../../../commands/newConnection import { type GenericResource } from '@azure/arm-resources'; import { type AzureSubscription } from '@microsoft/vscode-azext-azureauth'; import { AzureContextProperties } from '../../api-shared/azure/wizard/AzureContextProperties'; +import { DISCOVERY_PROVIDER_ID } from '../config'; import { extractCredentialsFromRUAccount } from '../utils/ruClusterHelpers'; export class AzureMongoRUExecuteStep extends AzureWizardExecuteStep { @@ -23,7 +24,7 @@ export class AzureMongoRUExecuteStep extends AzureWizardExecuteStep { // Add telemetry for credential configuration activation context.telemetry.properties.credentialConfigActivated = 'true'; - context.telemetry.properties.discoveryProviderId = this.id; + context.telemetry.properties.discoveryProviderId = DISCOVERY_PROVIDER_ID; context.telemetry.properties.nodeProvided = node ? 'true' : 'false'; if (!node || node instanceof AzureServiceRootItem) { diff --git a/src/plugins/service-azure-mongo-vcore/config.ts b/src/plugins/service-azure-mongo-vcore/config.ts new file mode 100644 index 000000000..8c3c6b570 --- /dev/null +++ b/src/plugins/service-azure-mongo-vcore/config.ts @@ -0,0 +1,28 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { l10n, ThemeIcon } from 'vscode'; + +/** + * Configuration constants for the Azure Cosmos DB for MongoDB (vCore) discovery provider. + */ + +/** Unique identifier for this discovery provider */ +export const DISCOVERY_PROVIDER_ID = 'azure-mongo-vcore-discovery'; + +/** Resource type identifier for telemetry */ +export const RESOURCE_TYPE = 'mongoVCore'; + +/** Display label for the discovery provider */ +export const LABEL = l10n.t('Azure DocumentDB'); + +/** Description shown in the discovery provider list */ +export const DESCRIPTION = l10n.t('Azure Service Discovery for Azure DocumentDB'); + +/** Icon for the discovery provider */ +export const ICON_PATH = new ThemeIcon('azure'); + +/** Title shown in the discovery wizard */ +export const WIZARD_TITLE = l10n.t('Azure Service Discovery'); diff --git a/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureServiceRootItem.ts b/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureServiceRootItem.ts index 580fa0907..a84bc9af6 100644 --- a/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureServiceRootItem.ts +++ b/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureServiceRootItem.ts @@ -5,6 +5,7 @@ import { type AzureTenant, type VSCodeAzureSubscriptionProvider } from '@microsoft/vscode-azext-azureauth'; import * as l10n from '@vscode/l10n'; +import { randomUUID } from 'crypto'; import * as vscode from 'vscode'; import { createGenericElementWithContext } from '../../../tree/api/createGenericElementWithContext'; import { type ExtTreeElementBase, type TreeElement } from '../../../tree/TreeElement'; @@ -30,16 +31,25 @@ export class AzureServiceRootItem implements TreeElement, TreeElementWithContext } async getChildren(): Promise { + // Generate a new journey correlation ID for telemetry funnel analysis + // This ID is passed to all child items and included in their telemetry events + const journeyCorrelationId = randomUUID(); + const allSubscriptions = await this.azureSubscriptionProvider.getSubscriptions(true); const subscriptions = getTenantFilteredSubscriptions(allSubscriptions); if (!subscriptions || subscriptions.length === 0) { // Show modal dialog for empty state const configureResult = await askToConfigureCredentials(); + // Note to future maintainers: 'void' is important here so that the return below returns the error node. + // Otherwise, the /retry node might be duplicated as we're inside of tree node with a loading state (the node items are being swapped etc.) if (configureResult === 'configure') { - // Note to future maintainers: 'void' is important here so that the return below returns the error node. - // Otherwise, the /retry node might be duplicated as we're inside of tree node with a loading state (the node items are being swapped etc.) void vscode.commands.executeCommand('vscode-documentdb.command.discoveryView.manageCredentials', this); + } else if (configureResult === 'filter') { + void vscode.commands.executeCommand( + 'vscode-documentdb.command.discoveryView.filterProviderContent', + this, + ); } return [ @@ -77,12 +87,16 @@ export class AzureServiceRootItem implements TreeElement, TreeElementWithContext .sort((a, b) => a.name.localeCompare(b.name)) // map to AzureSubscriptionItem .map((sub) => { - return new AzureSubscriptionItem(this.id, { - subscription: sub, - subscriptionName: sub.name, - subscriptionId: sub.subscriptionId, - tenant: tenantMap.get(sub.tenantId), - }); + return new AzureSubscriptionItem( + this.id, + { + subscription: sub, + subscriptionName: sub.name, + subscriptionId: sub.subscriptionId, + tenant: tenantMap.get(sub.tenantId), + }, + journeyCorrelationId, + ); }) ); } diff --git a/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureSubscriptionItem.ts b/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureSubscriptionItem.ts index 1a0bc27d7..e520c027c 100644 --- a/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureSubscriptionItem.ts +++ b/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureSubscriptionItem.ts @@ -15,6 +15,7 @@ import { type TreeElementWithContextValue } from '../../../tree/TreeElementWithC import { type ClusterModel } from '../../../tree/documentdb/ClusterModel'; import { createResourceManagementClient } from '../../../utils/azureClients'; import { nonNullProp } from '../../../utils/nonNull'; +import { DISCOVERY_PROVIDER_ID } from '../config'; import { DocumentDBResourceItem } from './documentdb/DocumentDBResourceItem'; export interface AzureSubscriptionModel { @@ -31,6 +32,7 @@ export class AzureSubscriptionItem implements TreeElement, TreeElementWithContex constructor( public readonly parentId: string, public readonly subscription: AzureSubscriptionModel, + private readonly journeyCorrelationId: string, ) { this.id = `${parentId}/${subscription.subscriptionId}`; } @@ -39,12 +41,20 @@ export class AzureSubscriptionItem implements TreeElement, TreeElementWithContex return await callWithTelemetryAndErrorHandling( 'azure-discovery.getChildren', async (context: IActionContext) => { + const startTime = Date.now(); + context.telemetry.properties.discoveryProviderId = DISCOVERY_PROVIDER_ID; + context.telemetry.properties.journeyCorrelationId = this.journeyCorrelationId; + const client = await createResourceManagementClient(context, this.subscription.subscription); const accounts = await uiUtils.listAllIterator( client.resources.list({ filter: "resourceType eq 'Microsoft.DocumentDB/mongoClusters'" }), ); + // Add enhanced telemetry for discovery + context.telemetry.measurements.discoveryResourcesCount = accounts.length; + context.telemetry.measurements.discoveryLoadTimeMs = Date.now() - startTime; + return accounts .sort((a, b) => (a.name || '').localeCompare(b.name || '')) .map((account) => { @@ -56,7 +66,11 @@ export class AzureSubscriptionItem implements TreeElement, TreeElementWithContex dbExperience: DocumentDBExperience, } as ClusterModel; - return new DocumentDBResourceItem(this.subscription.subscription, clusterInfo); + return new DocumentDBResourceItem( + this.journeyCorrelationId, + this.subscription.subscription, + clusterInfo, + ); }); }, ); diff --git a/src/plugins/service-azure-mongo-vcore/discovery-tree/documentdb/DocumentDBResourceItem.ts b/src/plugins/service-azure-mongo-vcore/discovery-tree/documentdb/DocumentDBResourceItem.ts index 377785c8b..a788fd39b 100644 --- a/src/plugins/service-azure-mongo-vcore/discovery-tree/documentdb/DocumentDBResourceItem.ts +++ b/src/plugins/service-azure-mongo-vcore/discovery-tree/documentdb/DocumentDBResourceItem.ts @@ -13,7 +13,6 @@ import { import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; import * as l10n from '@vscode/l10n'; import * as vscode from 'vscode'; -import { getThemeAgnosticIconURI } from '../../../../constants'; import { AuthMethodId } from '../../../../documentdb/auth/AuthMethod'; import { ClustersClient } from '../../../../documentdb/ClustersClient'; import { CredentialCache } from '../../../../documentdb/CredentialCache'; @@ -25,24 +24,35 @@ import { ProvideUserNameStep } from '../../../../documentdb/wizards/authenticate import { ext } from '../../../../extensionVariables'; import { ClusterItemBase, type EphemeralClusterCredentials } from '../../../../tree/documentdb/ClusterItemBase'; import { type ClusterModel } from '../../../../tree/documentdb/ClusterModel'; +import { getThemeAgnosticIconPath } from '../../../../utils/icons'; import { nonNullValue } from '../../../../utils/nonNull'; +import { DISCOVERY_PROVIDER_ID, RESOURCE_TYPE } from '../../config'; import { extractCredentialsFromCluster, getClusterInformationFromAzure } from '../../utils/clusterHelpers'; export class DocumentDBResourceItem extends ClusterItemBase { - iconPath = getThemeAgnosticIconURI('AzureDocumentDb.svg'); + iconPath = getThemeAgnosticIconPath('AzureDocumentDb.svg'); constructor( + /** + * Correlation ID for telemetry funnel analysis. + * For statistics only - does not influence functionality. + */ + journeyCorrelationId: string, readonly subscription: AzureSubscription, cluster: ClusterModel, ) { super(cluster); + this.journeyCorrelationId = journeyCorrelationId; } public async getCredentials(): Promise { return callWithTelemetryAndErrorHandling('getCredentials', async (context: IActionContext) => { context.telemetry.properties.view = Views.DiscoveryView; - context.telemetry.properties.discoveryProvider = 'azure-mongo-vcore-discovery'; - context.telemetry.properties.resourceType = 'mongoVCore'; + context.telemetry.properties.discoveryProviderId = DISCOVERY_PROVIDER_ID; + context.telemetry.properties.resourceType = RESOURCE_TYPE; + if (this.journeyCorrelationId) { + context.telemetry.properties.journeyCorrelationId = this.journeyCorrelationId; + } // Retrieve and validate cluster information (throws if invalid) const clusterInformation = await getClusterInformationFromAzure( @@ -77,9 +87,12 @@ export class DocumentDBResourceItem extends ClusterItemBase { const result = await callWithTelemetryAndErrorHandling('connect', async (context: IActionContext) => { const connectionStartTime = Date.now(); context.telemetry.properties.view = Views.DiscoveryView; - context.telemetry.properties.discoveryProvider = 'azure-mongo-vcore-discovery'; + context.telemetry.properties.discoveryProviderId = DISCOVERY_PROVIDER_ID; context.telemetry.properties.connectionInitiatedFrom = 'discoveryView'; - context.telemetry.properties.resourceType = 'mongoVCore'; + context.telemetry.properties.resourceType = RESOURCE_TYPE; + if (this.journeyCorrelationId) { + context.telemetry.properties.journeyCorrelationId = this.journeyCorrelationId; + } ext.outputChannel.appendLine( l10n.t('Attempting to authenticate with "{cluster}"…', { @@ -200,7 +213,7 @@ export class DocumentDBResourceItem extends ClusterItemBase { // Prompt the user for credentials await callWithTelemetryAndErrorHandling('connect.promptForCredentials', async (context: IActionContext) => { context.telemetry.properties.view = Views.DiscoveryView; - context.telemetry.properties.discoveryProvider = 'azure-mongo-vcore-discovery'; + context.telemetry.properties.discoveryProviderId = DISCOVERY_PROVIDER_ID; context.telemetry.properties.credentialsRequired = 'true'; context.telemetry.properties.credentialPromptReason = 'firstTime'; diff --git a/src/plugins/service-azure-mongo-vcore/discovery-wizard/SelectClusterStep.ts b/src/plugins/service-azure-mongo-vcore/discovery-wizard/SelectClusterStep.ts index 01880f265..8377e3ed3 100644 --- a/src/plugins/service-azure-mongo-vcore/discovery-wizard/SelectClusterStep.ts +++ b/src/plugins/service-azure-mongo-vcore/discovery-wizard/SelectClusterStep.ts @@ -9,12 +9,12 @@ import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; import * as l10n from '@vscode/l10n'; import { type QuickPickItem } from 'vscode'; import { type NewConnectionWizardContext } from '../../../commands/newConnection/NewConnectionWizardContext'; -import { getThemeAgnosticIconURI } from '../../../constants'; import { createResourceManagementClient } from '../../../utils/azureClients'; +import { getThemeAgnosticIconPath } from '../../../utils/icons'; import { AzureContextProperties } from '../../api-shared/azure/wizard/AzureContextProperties'; export class SelectClusterStep extends AzureWizardPromptStep { - iconPath = getThemeAgnosticIconURI('AzureDocumentDb.svg'); + iconPath = getThemeAgnosticIconPath('AzureDocumentDb.svg'); public async prompt(context: NewConnectionWizardContext): Promise { if ( diff --git a/src/plugins/service-azure-vm/AzureVMDiscoveryProvider.ts b/src/plugins/service-azure-vm/AzureVMDiscoveryProvider.ts index 43e50c2c7..025c3a686 100644 --- a/src/plugins/service-azure-vm/AzureVMDiscoveryProvider.ts +++ b/src/plugins/service-azure-vm/AzureVMDiscoveryProvider.ts @@ -4,13 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import { type IActionContext, type IWizardOptions } from '@microsoft/vscode-azext-utils'; -import { Disposable, l10n, ThemeIcon } from 'vscode'; +import { Disposable } from 'vscode'; import { type NewConnectionWizardContext } from '../../commands/newConnection/NewConnectionWizardContext'; import { ext } from '../../extensionVariables'; import { type DiscoveryProvider } from '../../services/discoveryServices'; import { type TreeElement } from '../../tree/TreeElement'; import { AzureSubscriptionProviderWithFilters } from '../api-shared/azure/AzureSubscriptionProviderWithFilters'; import { SelectSubscriptionStep } from '../api-shared/azure/wizard/SelectSubscriptionStep'; +import { DESCRIPTION, DISCOVERY_PROVIDER_ID, ICON_PATH, LABEL, WIZARD_TITLE } from './config'; import { AzureServiceRootItem } from './discovery-tree/AzureServiceRootItem'; import { configureVmFilter } from './discovery-tree/configureVmFilterWizard'; import { AzureVMExecuteStep } from './discovery-wizard/AzureVMExecuteStep'; @@ -28,10 +29,10 @@ export enum AzureVMContextProperties { } export class AzureVMDiscoveryProvider extends Disposable implements DiscoveryProvider { - id = 'azure-vm-discovery'; - label = l10n.t('Azure VMs (DocumentDB)'); - description = l10n.t('Azure VM Service Discovery'); - iconPath = new ThemeIcon('vm'); // Using a generic VM icon + id = DISCOVERY_PROVIDER_ID; + label = LABEL; + description = DESCRIPTION; + iconPath = ICON_PATH; azureSubscriptionProvider: AzureSubscriptionProviderWithFilters; @@ -53,7 +54,7 @@ export class AzureVMDiscoveryProvider extends Disposable implements DiscoveryPro context.properties[AzureVMContextProperties.AzureSubscriptionProvider] = this.azureSubscriptionProvider; return { - title: l10n.t('Azure VM Service Discovery'), + title: WIZARD_TITLE, promptSteps: [new SelectSubscriptionStep(), new SelectTagStep(), new SelectVMStep(), new SelectPortStep()], executeSteps: [new AzureVMExecuteStep()], showLoadingPrompt: true, @@ -74,7 +75,7 @@ export class AzureVMDiscoveryProvider extends Disposable implements DiscoveryPro async configureCredentials(context: IActionContext, node?: TreeElement): Promise { // Add telemetry for credential configuration activation context.telemetry.properties.credentialConfigActivated = 'true'; - context.telemetry.properties.discoveryProviderId = this.id; + context.telemetry.properties.discoveryProviderId = DISCOVERY_PROVIDER_ID; context.telemetry.properties.nodeProvided = node ? 'true' : 'false'; if (!node || node instanceof AzureServiceRootItem) { diff --git a/src/plugins/service-azure-vm/config.ts b/src/plugins/service-azure-vm/config.ts new file mode 100644 index 000000000..eb7945638 --- /dev/null +++ b/src/plugins/service-azure-vm/config.ts @@ -0,0 +1,28 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { l10n, ThemeIcon } from 'vscode'; + +/** + * Configuration constants for the Azure VM discovery provider. + */ + +/** Unique identifier for this discovery provider */ +export const DISCOVERY_PROVIDER_ID = 'azure-vm-discovery'; + +/** Resource type identifier for telemetry */ +export const RESOURCE_TYPE = 'azureVM'; + +/** Display label for the discovery provider */ +export const LABEL = l10n.t('Azure VMs (DocumentDB)'); + +/** Description shown in the discovery provider list */ +export const DESCRIPTION = l10n.t('Azure VM Service Discovery'); + +/** Icon for the discovery provider */ +export const ICON_PATH = new ThemeIcon('vm'); + +/** Title shown in the discovery wizard */ +export const WIZARD_TITLE = l10n.t('Azure VM Service Discovery'); diff --git a/src/plugins/service-azure-vm/discovery-tree/AzureServiceRootItem.ts b/src/plugins/service-azure-vm/discovery-tree/AzureServiceRootItem.ts index c70f7398d..db8aad92b 100644 --- a/src/plugins/service-azure-vm/discovery-tree/AzureServiceRootItem.ts +++ b/src/plugins/service-azure-vm/discovery-tree/AzureServiceRootItem.ts @@ -5,6 +5,7 @@ import { type AzureTenant, type VSCodeAzureSubscriptionProvider } from '@microsoft/vscode-azext-azureauth'; import * as l10n from '@vscode/l10n'; +import { randomUUID } from 'crypto'; import * as vscode from 'vscode'; import { createGenericElementWithContext } from '../../../tree/api/createGenericElementWithContext'; import { type ExtTreeElementBase, type TreeElement } from '../../../tree/TreeElement'; @@ -30,16 +31,24 @@ export class AzureServiceRootItem implements TreeElement, TreeElementWithContext } async getChildren(): Promise { + // Generate a journey correlation ID for funnel telemetry tracking + const journeyCorrelationId = randomUUID(); + const allSubscriptions = await this.azureSubscriptionProvider.getSubscriptions(true); const subscriptions = getTenantFilteredSubscriptions(allSubscriptions); if (!subscriptions || subscriptions.length === 0) { // Show modal dialog for empty state const configureResult = await askToConfigureCredentials(); + // Note to future maintainers: 'void' is important here so that the return below returns the error node. + // Otherwise, the /retry node might be duplicated as we're inside of tree node with a loading state (the node items are being swapped etc.) if (configureResult === 'configure') { - // Note to future maintainers: 'void' is important here so that the return below returns the error node. - // Otherwise, the /retry node might be duplicated as we're inside of tree node with a loading state (the node items are being swapped etc.) void vscode.commands.executeCommand('vscode-documentdb.command.discoveryView.manageCredentials', this); + } else if (configureResult === 'filter') { + void vscode.commands.executeCommand( + 'vscode-documentdb.command.discoveryView.filterProviderContent', + this, + ); } return [ @@ -77,12 +86,16 @@ export class AzureServiceRootItem implements TreeElement, TreeElementWithContext .sort((a, b) => a.name.localeCompare(b.name)) // map to AzureSubscriptionItem .map((sub) => { - return new AzureSubscriptionItem(this.id, { - subscription: sub, - subscriptionName: sub.name, - subscriptionId: sub.subscriptionId, - tenant: tenantMap.get(sub.tenantId), - }); + return new AzureSubscriptionItem( + this.id, + { + subscription: sub, + subscriptionName: sub.name, + subscriptionId: sub.subscriptionId, + tenant: tenantMap.get(sub.tenantId), + }, + journeyCorrelationId, + ); }) ); } diff --git a/src/plugins/service-azure-vm/discovery-tree/AzureSubscriptionItem.ts b/src/plugins/service-azure-vm/discovery-tree/AzureSubscriptionItem.ts index 57a037572..42bb50fdd 100644 --- a/src/plugins/service-azure-vm/discovery-tree/AzureSubscriptionItem.ts +++ b/src/plugins/service-azure-vm/discovery-tree/AzureSubscriptionItem.ts @@ -15,6 +15,7 @@ import { ext } from '../../../extensionVariables'; import { type TreeElement } from '../../../tree/TreeElement'; import { type TreeElementWithContextValue } from '../../../tree/TreeElementWithContextValue'; import { createComputeManagementClient, createNetworkManagementClient } from '../../../utils/azureClients'; +import { DISCOVERY_PROVIDER_ID } from '../config'; import { AzureVMResourceItem, type VirtualMachineModel } from './vm/AzureVMResourceItem'; export interface AzureSubscriptionModel { @@ -31,6 +32,7 @@ export class AzureSubscriptionItem implements TreeElement, TreeElementWithContex constructor( public readonly parentId: string, public readonly subscription: AzureSubscriptionModel, + private readonly journeyCorrelationId: string, ) { this.id = `${parentId}/${subscription.subscriptionId}`; } @@ -39,7 +41,10 @@ export class AzureSubscriptionItem implements TreeElement, TreeElementWithContex return await callWithTelemetryAndErrorHandling( 'azure-vm-discovery.getChildren', async (context: IActionContext) => { + const startTime = Date.now(); + context.telemetry.properties.discoveryProviderId = DISCOVERY_PROVIDER_ID; context.telemetry.properties.view = Views.DiscoveryView; + context.telemetry.properties.journeyCorrelationId = this.journeyCorrelationId; const computeClient = await createComputeManagementClient(context, this.subscription.subscription); // For listing VMs const networkClient = await createNetworkManagementClient(context, this.subscription.subscription); // For fetching IP addresses @@ -109,10 +114,16 @@ export class AzureSubscriptionItem implements TreeElement, TreeElementWithContex fqdn: fqdn, dbExperience: DocumentDBExperience, }; - vmItems.push(new AzureVMResourceItem(this.subscription.subscription, vmInfo)); + vmItems.push( + new AzureVMResourceItem(this.journeyCorrelationId, this.subscription.subscription, vmInfo), + ); } } + // Add enhanced telemetry for discovery + context.telemetry.measurements.discoveryResourcesCount = vmItems.length; + context.telemetry.measurements.discoveryLoadTimeMs = Date.now() - startTime; + return vmItems.sort((a, b) => a.cluster.name.localeCompare(b.cluster.name)); }, ); diff --git a/src/plugins/service-azure-vm/discovery-tree/vm/AzureVMResourceItem.ts b/src/plugins/service-azure-vm/discovery-tree/vm/AzureVMResourceItem.ts index e388c6c0f..15ba40776 100644 --- a/src/plugins/service-azure-vm/discovery-tree/vm/AzureVMResourceItem.ts +++ b/src/plugins/service-azure-vm/discovery-tree/vm/AzureVMResourceItem.ts @@ -25,6 +25,7 @@ import { ext } from '../../../../extensionVariables'; import { ClusterItemBase, type EphemeralClusterCredentials } from '../../../../tree/documentdb/ClusterItemBase'; import { type ClusterModel } from '../../../../tree/documentdb/ClusterModel'; import { nonNullProp, nonNullValue } from '../../../../utils/nonNull'; +import { DISCOVERY_PROVIDER_ID } from '../../config'; // Define a model for VM, similar to ClusterModel but for VM properties export interface VirtualMachineModel extends ClusterModel { @@ -39,11 +40,16 @@ export class AzureVMResourceItem extends ClusterItemBase { iconPath = new vscode.ThemeIcon('server-environment'); constructor( - readonly subscription: AzureSubscription, // Retained from original - readonly cluster: VirtualMachineModel, // Using the new VM model - // connectionInfo: any, // Passed from the wizard execution step, containing vmId, name, connectionStringTemplate + /** + * Correlation ID for telemetry funnel analysis. + * For statistics only - does not influence functionality. + */ + journeyCorrelationId: string, + readonly subscription: AzureSubscription, + readonly cluster: VirtualMachineModel, ) { - super(cluster); // label, id + super(cluster); + this.journeyCorrelationId = journeyCorrelationId; // Construct tooltip and description const tooltipParts: string[] = [`**Name:** ${cluster.name}`, `**ID:** ${cluster.id}`]; @@ -67,8 +73,11 @@ export class AzureVMResourceItem extends ClusterItemBase { public async getCredentials(): Promise { return callWithTelemetryAndErrorHandling('connect', async (context: IActionContext) => { - context.telemetry.properties.discoveryProvider = 'azure-vm-discovery'; + context.telemetry.properties.discoveryProviderId = DISCOVERY_PROVIDER_ID; context.telemetry.properties.view = Views.DiscoveryView; + if (this.journeyCorrelationId) { + context.telemetry.properties.journeyCorrelationId = this.journeyCorrelationId; + } const newPort = await context.ui.showInputBox({ prompt: l10n.t('Enter the port number your DocumentDB uses. The default port: {defaultPort}.', { @@ -158,8 +167,11 @@ export class AzureVMResourceItem extends ClusterItemBase { */ protected async authenticateAndConnect(): Promise { const result = await callWithTelemetryAndErrorHandling('connect', async (context: IActionContext) => { - context.telemetry.properties.discoveryProvider = 'azure-vm-discovery'; + context.telemetry.properties.discoveryProviderId = DISCOVERY_PROVIDER_ID; context.telemetry.properties.view = Views.DiscoveryView; + if (this.journeyCorrelationId) { + context.telemetry.properties.journeyCorrelationId = this.journeyCorrelationId; + } ext.outputChannel.appendLine( l10n.t('Azure VM: Attempting to authenticate with "{vmName}"…', { @@ -241,6 +253,7 @@ export class AzureVMResourceItem extends ClusterItemBase { username: wizardContext.selectedUserName ?? '', }), ); + return clustersClient; }); return result ?? null; diff --git a/src/tree/api/createGenericElementWithContext.ts b/src/tree/api/createGenericElementWithContext.ts index ce92ba8f1..8bcd41d29 100644 --- a/src/tree/api/createGenericElementWithContext.ts +++ b/src/tree/api/createGenericElementWithContext.ts @@ -4,11 +4,30 @@ *--------------------------------------------------------------------------------------------*/ import { type GenericElementOptions } from '@microsoft/vscode-azext-utils'; -import { type TreeItem } from 'vscode'; +import { Uri, type IconPath, type TreeItem } from 'vscode'; import { nonNullValue } from '../../utils/nonNull'; import { type TreeElement } from '../TreeElement'; import { type TreeElementWithContextValue } from '../TreeElementWithContextValue'; +/** + * Convert TreeItemIconPath to IconPath by ensuring strings are converted to Uri + */ +function convertIconPath(iconPath: GenericElementOptions['iconPath']): IconPath | undefined { + if (!iconPath) { + return undefined; + } + if (typeof iconPath === 'string') { + return Uri.file(iconPath); + } + if (typeof iconPath === 'object' && 'light' in iconPath && 'dark' in iconPath) { + return { + light: typeof iconPath.light === 'string' ? Uri.file(iconPath.light) : iconPath.light, + dark: typeof iconPath.dark === 'string' ? Uri.file(iconPath.dark) : iconPath.dark, + }; + } + return iconPath; +} + export function createGenericElementWithContext( options: GenericElementOptions, ): TreeElement & TreeElementWithContextValue { @@ -18,8 +37,10 @@ export function createGenericElementWithContext( contextValue: nonNullValue(options.contextValue, 'options.contextValue', 'createGenericElementWithContext.ts'), getTreeItem(): TreeItem { + const { iconPath, ...restOptions } = options; return { - ...options, + ...restOptions, + iconPath: convertIconPath(iconPath), command: options.commandId ? { title: '', diff --git a/src/tree/azure-resources-view/documentdb/VCoreResourceItem.ts b/src/tree/azure-resources-view/documentdb/VCoreResourceItem.ts index 530db9f02..efc482fe7 100644 --- a/src/tree/azure-resources-view/documentdb/VCoreResourceItem.ts +++ b/src/tree/azure-resources-view/documentdb/VCoreResourceItem.ts @@ -13,7 +13,6 @@ import { import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; import * as l10n from '@vscode/l10n'; import * as vscode from 'vscode'; -import { getThemeAgnosticIconURI } from '../../../constants'; import { AuthMethodId } from '../../../documentdb/auth/AuthMethod'; import { ClustersClient } from '../../../documentdb/ClustersClient'; import { CredentialCache } from '../../../documentdb/CredentialCache'; @@ -27,12 +26,13 @@ import { extractCredentialsFromCluster, getClusterInformationFromAzure, } from '../../../plugins/service-azure-mongo-vcore/utils/clusterHelpers'; +import { getThemeAgnosticIconPath } from '../../../utils/icons'; import { nonNullValue } from '../../../utils/nonNull'; import { ClusterItemBase, type EphemeralClusterCredentials } from '../../documentdb/ClusterItemBase'; import { type ClusterModel } from '../../documentdb/ClusterModel'; export class VCoreResourceItem extends ClusterItemBase { - iconPath = getThemeAgnosticIconURI('AzureDocumentDb.svg'); + iconPath = getThemeAgnosticIconPath('AzureDocumentDb.svg'); constructor( readonly subscription: AzureSubscription, diff --git a/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts b/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts index 5b7778ece..0b338c7df 100644 --- a/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts +++ b/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts @@ -5,9 +5,9 @@ import * as l10n from '@vscode/l10n'; import * as vscode from 'vscode'; +import { type IconPath } from 'vscode'; import path from 'path'; -import { getResourcesPath, type IThemedIconPath } from '../../../constants'; import { DocumentDBExperience } from '../../../DocumentDBExperiences'; import { ConnectionStorageService, @@ -15,6 +15,7 @@ import { type ConnectionItem, } from '../../../services/connectionStorageService'; import { type EmulatorConfiguration } from '../../../utils/emulatorConfiguration'; +import { getResourcesPath } from '../../../utils/icons'; import { type ClusterModelWithStorage } from '../../documentdb/ClusterModel'; import { type TreeElement } from '../../TreeElement'; import { type TreeElementWithContextValue } from '../../TreeElementWithContextValue'; @@ -54,9 +55,9 @@ export class LocalEmulatorsItem implements TreeElement, TreeElementWithContextVa ]; } - private iconPath: IThemedIconPath = { - light: path.join(getResourcesPath(), 'icons', 'vscode-documentdb-icon-light-themes.svg'), - dark: path.join(getResourcesPath(), 'icons', 'vscode-documentdb-icon-dark-themes.svg'), + private iconPath: IconPath = { + light: vscode.Uri.file(path.join(getResourcesPath(), 'icons', 'vscode-documentdb-icon-light-themes.svg')), + dark: vscode.Uri.file(path.join(getResourcesPath(), 'icons', 'vscode-documentdb-icon-dark-themes.svg')), }; public getTreeItem(): vscode.TreeItem { diff --git a/src/tree/discovery-view/DiscoveryBranchDataProvider.test.ts b/src/tree/discovery-view/DiscoveryBranchDataProvider.test.ts new file mode 100644 index 000000000..149b4b7c3 --- /dev/null +++ b/src/tree/discovery-view/DiscoveryBranchDataProvider.test.ts @@ -0,0 +1,455 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { type IActionContext } from '@microsoft/vscode-azext-utils'; +import { ext } from '../../extensionVariables'; +import { DiscoveryService } from '../../services/discoveryServices'; +import { DiscoveryBranchDataProvider } from './DiscoveryBranchDataProvider'; + +const telemetryContextMock = { + telemetry: { properties: {}, measurements: {} }, + errorHandling: { issueProperties: {} }, + ui: { + showWarningMessage: jest.fn(), + onDidFinishPrompt: jest.fn(), + showQuickPick: jest.fn(), + showInputBox: jest.fn(), + showOpenDialog: jest.fn(), + showWorkspaceFolderPick: jest.fn(), + }, + valuesToMask: [], +}; + +// Mock vscode-azext-utils module +jest.mock('@microsoft/vscode-azext-utils', () => ({ + callWithTelemetryAndErrorHandling: jest.fn( + async (_eventName, callback: (context: IActionContext) => Promise) => { + await callback(telemetryContextMock); + return undefined; + }, + ), +})); + +// Mock vscode module +jest.mock('vscode', () => ({ + Disposable: class Disposable { + dispose() { + // Mock dispose + } + }, + EventEmitter: class EventEmitter { + fire() { + // Mock fire + } + get event() { + return jest.fn(); + } + }, + TreeItemCollapsibleState: { + None: 0, + Collapsed: 1, + Expanded: 2, + }, + l10n: { + t: jest.fn((str) => str), + }, +})); + +// Mock extensionVariables module +jest.mock('../../extensionVariables', () => ({ + ext: { + context: { + globalState: { + get: jest.fn(), + update: jest.fn(() => Promise.resolve()), + }, + }, + state: { + wrapItemInStateHandling: jest.fn((item) => item), + }, + }, +})); + +// Mock DiscoveryService +jest.mock('../../services/discoveryServices', () => ({ + DiscoveryService: { + listProviders: jest.fn(), + getProvider: jest.fn(), + }, +})); + +describe('DiscoveryBranchDataProvider - addDiscoveryProviderPromotionIfNeeded', () => { + let dataProvider: DiscoveryBranchDataProvider; + let globalStateGetMock: jest.Mock; + let globalStateUpdateMock: jest.Mock; + let listProvidersMock: jest.Mock; + let getProviderMock: jest.Mock; + + // Create a mock provider + const mockProvider = { + id: 'azure-mongo-ru-discovery', + label: 'Azure Cosmos DB for MongoDB RU', + description: 'Azure discovery provider', + getDiscoveryWizard: jest.fn(), + getDiscoveryTreeRootItem: jest.fn().mockReturnValue({ + id: 'root-item-id', + getTreeItem: jest.fn().mockResolvedValue({}), + }), + }; + + beforeEach(() => { + // Clear all mocks + jest.clearAllMocks(); + + // Store references to mocks + // eslint-disable-next-line @typescript-eslint/unbound-method + globalStateGetMock = ext.context.globalState.get as jest.Mock; + // eslint-disable-next-line @typescript-eslint/unbound-method + globalStateUpdateMock = ext.context.globalState.update as jest.Mock; + // eslint-disable-next-line @typescript-eslint/unbound-method + listProvidersMock = DiscoveryService.listProviders as jest.Mock; + // eslint-disable-next-line @typescript-eslint/unbound-method + getProviderMock = DiscoveryService.getProvider as jest.Mock; + + // Setup default mock behavior + globalStateUpdateMock.mockResolvedValue(undefined); + + // Create a new instance for each test + dataProvider = new DiscoveryBranchDataProvider(); + }); + + describe('when user never worked with discovery (empty activeDiscoveryProviderIds)', () => { + beforeEach(() => { + // Setup: no active providers (user never added any OR removed all) + listProvidersMock.mockReturnValue([mockProvider]); // Provider exists in registry + getProviderMock.mockReturnValue(mockProvider); + globalStateGetMock.mockImplementation((key: string, defaultValue?: unknown) => { + if (key === 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery') { + return false; + } + if (key === 'activeDiscoveryProviderIds') { + return []; // Empty list = new user or removed all + } + return defaultValue; + }); + }); + + it('should not add the provider to activeDiscoveryProviderIds', async () => { + await dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'); + + // Should NOT update activeDiscoveryProviderIds + const updateCalls = globalStateUpdateMock.mock.calls; + const activeProviderUpdates = updateCalls.filter((call) => call[0] === 'activeDiscoveryProviderIds'); + expect(activeProviderUpdates).toHaveLength(0); + }); + + it('should mark the promotion flag as processed', async () => { + await dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'); + + // Should mark the promotion as processed + expect(globalStateUpdateMock).toHaveBeenCalledWith( + 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery', + true, + ); + }); + + it('should return early without checking provider availability', async () => { + await dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'); + + // Should not call getProvider since we return early + expect(getProviderMock).not.toHaveBeenCalled(); + }); + }); + + describe('when user has explored discovery in the past', () => { + beforeEach(() => { + // Setup: user has some providers active + listProvidersMock.mockReturnValue([mockProvider]); + getProviderMock.mockReturnValue(mockProvider); + globalStateGetMock.mockImplementation((key: string, defaultValue?: unknown) => { + if (key === 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery') { + return false; + } + if (key === 'activeDiscoveryProviderIds') { + // User has other providers active, indicating they've used discovery before + return ['other-provider-id']; + } + return defaultValue; + }); + }); + + it('should add the provider to activeDiscoveryProviderIds', async () => { + await dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'); + + // Should add the provider to the active list + expect(globalStateUpdateMock).toHaveBeenCalledWith('activeDiscoveryProviderIds', [ + 'other-provider-id', + 'azure-mongo-ru-discovery', + ]); + }); + + it('should mark the promotion flag as processed', async () => { + await dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'); + + // Should mark the promotion as processed + expect(globalStateUpdateMock).toHaveBeenCalledWith( + 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery', + true, + ); + }); + + it('should preserve existing providers when adding the new one', async () => { + globalStateGetMock.mockImplementation((key: string, defaultValue?: unknown) => { + if (key === 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery') { + return false; + } + if (key === 'activeDiscoveryProviderIds') { + return ['provider-1', 'provider-2']; + } + return defaultValue; + }); + + await dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'); + + expect(globalStateUpdateMock).toHaveBeenCalledWith('activeDiscoveryProviderIds', [ + 'provider-1', + 'provider-2', + 'azure-mongo-ru-discovery', + ]); + }); + }); + + describe('when promotion was already shown', () => { + beforeEach(() => { + // Setup: promotion flag already set + listProvidersMock.mockReturnValue([mockProvider]); + getProviderMock.mockReturnValue(mockProvider); + globalStateGetMock.mockImplementation((key: string, defaultValue?: unknown) => { + if (key === 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery') { + return true; // Already shown + } + if (key === 'activeDiscoveryProviderIds') { + return ['other-provider-id']; + } + return defaultValue; + }); + }); + + it('should return early without any updates', async () => { + await dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'); + + // Should not update anything + expect(globalStateUpdateMock).not.toHaveBeenCalled(); + }); + + it('should not check for registered providers', async () => { + await dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'); + + // Should not call listProviders since we return early + expect(listProvidersMock).not.toHaveBeenCalled(); + }); + }); + + describe('when provider is not registered in DiscoveryService', () => { + beforeEach(() => { + // Setup: providers exist but not the requested one + listProvidersMock.mockReturnValue([mockProvider]); + getProviderMock.mockReturnValue(undefined); // Provider not found + globalStateGetMock.mockImplementation((key: string, defaultValue?: unknown) => { + if (key === 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery') { + return false; + } + if (key === 'activeDiscoveryProviderIds') { + return ['other-provider-id']; + } + return defaultValue; + }); + }); + + it('should not add the provider to activeDiscoveryProviderIds', async () => { + await dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'); + + // Should not update activeDiscoveryProviderIds + const updateCalls = globalStateUpdateMock.mock.calls; + const activeProviderUpdates = updateCalls.filter((call) => call[0] === 'activeDiscoveryProviderIds'); + expect(activeProviderUpdates).toHaveLength(0); + }); + + it('should not mark promotion as processed', async () => { + await dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'); + + // Should not mark promotion as processed since provider doesn't exist + expect(globalStateUpdateMock).not.toHaveBeenCalledWith( + 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery', + true, + ); + }); + }); + + describe('when provider is already in activeDiscoveryProviderIds', () => { + beforeEach(() => { + // Setup: provider already active + listProvidersMock.mockReturnValue([mockProvider]); + getProviderMock.mockReturnValue(mockProvider); + globalStateGetMock.mockImplementation((key: string, defaultValue?: unknown) => { + if (key === 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery') { + return false; + } + if (key === 'activeDiscoveryProviderIds') { + return ['azure-mongo-ru-discovery', 'other-provider-id']; // Already includes the provider + } + return defaultValue; + }); + }); + + it('should not add duplicate provider to activeDiscoveryProviderIds', async () => { + await dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'); + + // Should not update activeDiscoveryProviderIds since provider already exists + const updateCalls = globalStateUpdateMock.mock.calls; + const activeProviderUpdates = updateCalls.filter((call) => call[0] === 'activeDiscoveryProviderIds'); + expect(activeProviderUpdates).toHaveLength(0); + }); + + it('should still mark promotion as processed', async () => { + await dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'); + + // Should mark the promotion as processed + expect(globalStateUpdateMock).toHaveBeenCalledWith( + 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery', + true, + ); + }); + }); + + describe('error handling', () => { + beforeEach(() => { + listProvidersMock.mockReturnValue([mockProvider]); + getProviderMock.mockReturnValue(mockProvider); + globalStateGetMock.mockImplementation((key: string, defaultValue?: unknown) => { + if (key === 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery') { + return false; + } + if (key === 'activeDiscoveryProviderIds') { + return ['other-provider-id']; + } + return defaultValue; + }); + }); + + it('should handle errors when updating activeDiscoveryProviderIds gracefully', async () => { + const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(); + globalStateUpdateMock.mockImplementation((key: string) => { + if (key === 'activeDiscoveryProviderIds') { + return Promise.reject(new Error('Storage error')); + } + return Promise.resolve(); + }); + + await dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'); + + // Should log error + expect(consoleErrorSpy).toHaveBeenCalledWith('Failed to update activeDiscoveryProviderIds: Storage error'); + + // Should still attempt to mark promotion as processed + expect(globalStateUpdateMock).toHaveBeenCalledWith( + 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery', + true, + ); + + consoleErrorSpy.mockRestore(); + }); + + it('should handle errors when marking promotion as processed gracefully', async () => { + globalStateUpdateMock.mockImplementation((key: string) => { + if (key === 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery') { + return Promise.reject(new Error('Storage error')); + } + return Promise.resolve(); + }); + + // Should not throw + await expect( + dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'), + ).resolves.not.toThrow(); + }); + + it('should handle errors when checking if no providers exist gracefully', async () => { + listProvidersMock.mockReturnValue([]); + globalStateUpdateMock.mockImplementation((key: string) => { + if (key === 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery') { + return Promise.reject(new Error('Storage error')); + } + return Promise.resolve(); + }); + + // Should not throw + await expect( + dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'), + ).resolves.not.toThrow(); + }); + }); + + describe('edge cases', () => { + it('should handle when activeDiscoveryProviderIds is null/undefined', async () => { + listProvidersMock.mockReturnValue([mockProvider]); + getProviderMock.mockReturnValue(mockProvider); + globalStateGetMock.mockImplementation((key: string, defaultValue?: unknown) => { + if (key === 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery') { + return false; + } + if (key === 'activeDiscoveryProviderIds') { + return null; // Explicitly return null + } + return defaultValue; + }); + + await dataProvider.addDiscoveryProviderPromotionIfNeeded('azure-mongo-ru-discovery'); + + // Should mark promotion as processed and not add provider + expect(globalStateUpdateMock).toHaveBeenCalledWith( + 'discoveryProviderPromotionProcessed:azure-mongo-ru-discovery', + true, + ); + + const updateCalls = globalStateUpdateMock.mock.calls; + const activeProviderUpdates = updateCalls.filter((call) => call[0] === 'activeDiscoveryProviderIds'); + expect(activeProviderUpdates).toHaveLength(0); + }); + + it('should handle different provider IDs correctly', async () => { + listProvidersMock.mockReturnValue([mockProvider]); + const differentProvider = { + ...mockProvider, + id: 'different-provider-id', + }; + getProviderMock.mockReturnValue(differentProvider); + + globalStateGetMock.mockImplementation((key: string, defaultValue?: unknown) => { + if (key === 'discoveryProviderPromotionProcessed:different-provider-id') { + return false; + } + if (key === 'activeDiscoveryProviderIds') { + return ['other-provider-id']; + } + return defaultValue; + }); + + await dataProvider.addDiscoveryProviderPromotionIfNeeded('different-provider-id'); + + // Should add the different provider + expect(globalStateUpdateMock).toHaveBeenCalledWith('activeDiscoveryProviderIds', [ + 'other-provider-id', + 'different-provider-id', + ]); + + // Should use the correct promotion flag + expect(globalStateUpdateMock).toHaveBeenCalledWith( + 'discoveryProviderPromotionProcessed:different-provider-id', + true, + ); + }); + }); +}); diff --git a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts index f4f1bc9cf..b4f4af51a 100644 --- a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts +++ b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts @@ -226,20 +226,34 @@ export class DiscoveryBranchDataProvider extends BaseExtendedTreeDataProvider { + /** + * Adds a discovery provider promotion if the user has already explored discovery. + * This method is public only for testing purposes. + * + * Logic: + * - If promotion already shown: skip + * - If user has NO active providers: skip (they never used discovery OR removed all) + * - If provider doesn't exist: skip + * - If user has active providers: add this provider to promote it to existing users + */ + public async addDiscoveryProviderPromotionIfNeeded(providerId: string): Promise { const promotionFlagKey = `discoveryProviderPromotionProcessed:${providerId}`; - const promotionAlreadyShown = ext.context.globalState.get(promotionFlagKey, false); + const promotionProcessed = ext.context.globalState.get(promotionFlagKey, false); - if (promotionAlreadyShown) { + if (promotionProcessed) { // Already shown/processed previously — do nothing. return; } - // If there are no registered discovery providers at all, mark the promotion as shown - // and return early. The goal is to only show the promotion to users who have some - // discovery providers active/installed. - const registeredProviders = DiscoveryService.listProviders(); - if (!registeredProviders || registeredProviders.length === 0) { + // Read current active provider IDs + const activeProviderIds = ext.context.globalState.get('activeDiscoveryProviderIds', []); + + // If there are no active discovery providers, mark the promotion as shown + // and return early. The goal is to only show the promotion to users who have + // already added discovery providers (indicating they've explored the feature). + // We can't distinguish between new users and users who removed all providers, + // so we err on the side of not promoting to avoid cluttering the UI for new users. + if (!activeProviderIds || activeProviderIds.length === 0) { try { await ext.context.globalState.update(promotionFlagKey, true); } catch { @@ -255,9 +269,6 @@ export class DiscoveryBranchDataProvider extends BaseExtendedTreeDataProvider('activeDiscoveryProviderIds', []); - // If not present, register it if (!activeProviderIds.includes(providerId)) { const updated = [...activeProviderIds, providerId]; diff --git a/src/tree/documentdb/ClusterItemBase.ts b/src/tree/documentdb/ClusterItemBase.ts index 203f9716f..6af4468fe 100644 --- a/src/tree/documentdb/ClusterItemBase.ts +++ b/src/tree/documentdb/ClusterItemBase.ts @@ -6,6 +6,7 @@ import { createContextValue, createGenericElement } from '@microsoft/vscode-azext-utils'; import * as l10n from '@vscode/l10n'; import * as vscode from 'vscode'; +import { type IconPath } from 'vscode'; import { type Experience } from '../../DocumentDBExperiences'; import { ClustersClient, type DatabaseItemModel } from '../../documentdb/ClustersClient'; import { CredentialCache } from '../../documentdb/CredentialCache'; @@ -55,23 +56,17 @@ export abstract class ClusterItemBase public readonly experience: Experience; public contextValue: string = 'treeItem_documentdbcluster'; + /** + * Correlation ID used for telemetry funnel analysis. + * This is for statistics only and does not influence functionality. + * It tracks the user's journey through the discovery flow. + */ + public journeyCorrelationId?: string; + protected descriptionOverride?: string; protected tooltipOverride?: string | vscode.MarkdownString; - protected iconPath?: - | string - | vscode.Uri - | { - /** - * The icon path for the light theme. - */ - light: string | vscode.Uri; - /** - * The icon path for the dark theme. - */ - dark: string | vscode.Uri; - } - | vscode.ThemeIcon; + protected iconPath?: IconPath; private readonly experienceContextValue: string = ''; diff --git a/src/utils/commandTelemetry.ts b/src/utils/commandTelemetry.ts new file mode 100644 index 000000000..7a2d34398 --- /dev/null +++ b/src/utils/commandTelemetry.ts @@ -0,0 +1,49 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { type CommandCallback, type IActionContext, type TreeNodeCommandCallback } from '@microsoft/vscode-azext-utils'; + +interface HasJourneyCorrelationId { + journeyCorrelationId?: string; +} + +function tryExtractJourneyCorrelationId(maybeNode: unknown): string | undefined { + if (maybeNode && typeof maybeNode === 'object') { + const value = (maybeNode as HasJourneyCorrelationId).journeyCorrelationId; + if (value) { + return value; + } + } + return undefined; +} + +export function trackJourneyCorrelationId(context: IActionContext, ...args: unknown[]): void { + for (const arg of args) { + const correlationId = tryExtractJourneyCorrelationId(arg); + if (correlationId) { + context.telemetry.properties.journeyCorrelationId = correlationId; + return; + } + } +} + +export function withCommandCorrelation(callback: T): T { + const wrapper = (context: IActionContext, ...args: unknown[]) => { + trackJourneyCorrelationId(context, ...args); + // CommandCallback returns 'any', which we pass through unchanged, the exception below is required. + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return callback(context, ...args); + }; + return wrapper as T; +} + +export function withTreeNodeCommandCorrelation>(callback: T): T { + const wrapper = (context: IActionContext, ...args: unknown[]) => { + trackJourneyCorrelationId(context, ...args); + // TreeNodeCommandCallback returns 'unknown', which we pass through unchanged, no need or eslint-exception here. + return callback(context, ...args); + }; + return wrapper as T; +} diff --git a/src/utils/icons.ts b/src/utils/icons.ts new file mode 100644 index 000000000..2790f5b2e --- /dev/null +++ b/src/utils/icons.ts @@ -0,0 +1,41 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as fs from 'fs'; +import assert from 'node:assert'; +import * as path from 'path'; +import { Uri, type IconPath } from 'vscode'; +import { ext } from '../extensionVariables'; + +export function getResourcesPath(): string { + return ext.context.asAbsolutePath('resources'); +} + +export function getThemedIconPath(iconName: string): IconPath { + const light = path.join(getResourcesPath(), 'icons', 'light', iconName); + const dark = path.join(getResourcesPath(), 'icons', 'dark', iconName); + + assert.ok(fs.existsSync(light)); + assert.ok(fs.existsSync(dark)); + + return { + light: Uri.file(light), + dark: Uri.file(dark), + }; +} + +export function getThemeAgnosticIconPath(iconName: string): IconPath { + const icon = path.join(getResourcesPath(), 'icons', 'theme-agnostic', iconName); + + assert.ok(fs.existsSync(icon)); + + return Uri.file(icon); +} + +export function getIconPath(iconName: string): IconPath { + const icon = path.join(getResourcesPath(), 'icons', iconName); + assert.ok(fs.existsSync(icon)); + return Uri.file(icon); +} diff --git a/src/webviews/components/InputWithHistory.tsx b/src/webviews/components/InputWithHistory.tsx index 4751a8e89..1b24e079e 100644 --- a/src/webviews/components/InputWithHistory.tsx +++ b/src/webviews/components/InputWithHistory.tsx @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { Input, type InputProps } from '@fluentui/react-components'; -import { forwardRef, useRef, useState, type JSX } from 'react'; +import { useRef, useState, type JSX } from 'react'; export interface InputWithHistoryProps extends InputProps { /** @@ -27,6 +27,11 @@ export interface InputWithHistoryProps extends InputProps { * - If omitted: Component manages history internally (even if `history` prop is provided for initial state) */ onHistoryChange?: (history: string[]) => void; + + /** + * Ref to forward to the underlying input element + */ + ref?: React.Ref; } /** @@ -72,188 +77,180 @@ export interface InputWithHistoryProps extends InputProps { * /> * ``` */ -export const InputWithHistory = forwardRef( - ( - { - history: controlledHistory, - maxHistorySize = 50, - onHistoryChange, - value: controlledValue, - onChange, - onKeyDown, - ...inputProps - }, - ref, - ): JSX.Element => { - // Determine if history is fully controlled (both history AND onHistoryChange provided) - const isHistoryControlled = controlledHistory !== undefined && onHistoryChange !== undefined; - - // Internal history state - // Initialize with controlledHistory (if provided) or empty array - const [internalHistory, setInternalHistory] = useState(controlledHistory ?? []); - - // Use controlled history if fully controlled, otherwise use internal state - const history = isHistoryControlled ? controlledHistory : internalHistory; - - // Current position in history (-1 means not navigating, showing current/draft) - const [historyIndex, setHistoryIndex] = useState(-1); - - // Draft input (what user is currently typing, before adding to history) - const [draft, setDraft] = useState(''); - - // Track if we're using controlled or uncontrolled value - const isControlled = controlledValue !== undefined; - const [internalValue, setInternalValue] = useState(''); - - // Current effective value - const currentValue = isControlled ? String(controlledValue ?? '') : internalValue; - - // Ref to track if we're in the middle of history navigation - const isNavigatingRef = useRef(false); - - // Add entry to history (with deduplication and size management) - const addToHistory = (entry: string) => { - if (!entry.trim()) { - return; // Don't add empty entries - } - - const updateHistory = (prev: string[]) => { - // Don't add if it's identical to the last entry (deduplication) - if (prev.length > 0 && prev[prev.length - 1] === entry) { - return prev; - } - - const newHistory = [...prev, entry]; - - // Enforce max size (remove oldest entries) - if (newHistory.length > maxHistorySize) { - return newHistory.slice(newHistory.length - maxHistorySize); - } - - return newHistory; - }; - - if (isHistoryControlled) { - // Fully controlled mode: notify parent to update history - onHistoryChange(updateHistory(history)); - } else { - // Uncontrolled or semi-controlled mode: update internal state - setInternalHistory(updateHistory); +export function InputWithHistory({ + history: controlledHistory, + maxHistorySize = 50, + onHistoryChange, + value: controlledValue, + onChange, + onKeyDown, + ref, + ...inputProps +}: InputWithHistoryProps): JSX.Element { + // Determine if history is fully controlled (both history AND onHistoryChange provided) + const isHistoryControlled = controlledHistory !== undefined && onHistoryChange !== undefined; + + // Internal history state + // Initialize with controlledHistory (if provided) or empty array + const [internalHistory, setInternalHistory] = useState(controlledHistory ?? []); + + // Use controlled history if fully controlled, otherwise use internal state + const history = isHistoryControlled ? controlledHistory : internalHistory; + + // Current position in history (-1 means not navigating, showing current/draft) + const [historyIndex, setHistoryIndex] = useState(-1); + + // Draft input (what user is currently typing, before adding to history) + const [draft, setDraft] = useState(''); + + // Track if we're using controlled or uncontrolled value + const isControlled = controlledValue !== undefined; + const [internalValue, setInternalValue] = useState(''); + + // Current effective value + const currentValue = isControlled ? String(controlledValue ?? '') : internalValue; + + // Ref to track if we're in the middle of history navigation + const isNavigatingRef = useRef(false); + + // Add entry to history (with deduplication and size management) + const addToHistory = (entry: string) => { + if (!entry.trim()) { + return; // Don't add empty entries + } + + const updateHistory = (prev: string[]) => { + // Don't add if it's identical to the last entry (deduplication) + if (prev.length > 0 && prev[prev.length - 1] === entry) { + return prev; } - }; - // Handle value changes - const handleChange: InputProps['onChange'] = (event, data) => { - const newValue = data.value; + const newHistory = [...prev, entry]; - // If we're navigating history and user edits, save as draft and exit navigation - if (isNavigatingRef.current) { - setDraft(newValue); - setHistoryIndex(-1); - isNavigatingRef.current = false; - } else { - setDraft(newValue); + // Enforce max size (remove oldest entries) + if (newHistory.length > maxHistorySize) { + return newHistory.slice(newHistory.length - maxHistorySize); } - // Update internal value if uncontrolled - if (!isControlled) { - setInternalValue(newValue); - } - - // Call parent onChange if provided - if (onChange) { - onChange(event, data); - } + return newHistory; }; - // Handle keyboard navigation - const handleKeyDown: InputProps['onKeyDown'] = (event) => { - if (event.key === 'ArrowUp') { - event.preventDefault(); // Prevent cursor movement - navigateHistory('up'); - } else if (event.key === 'ArrowDown') { - event.preventDefault(); // Prevent cursor movement - navigateHistory('down'); - } else if (event.key === 'Enter') { - // Add to history (don't prevent default - let parent handle Enter) - addToHistory(currentValue); - setHistoryIndex(-1); // Reset navigation - setDraft(''); // Clear draft after adding to history - isNavigatingRef.current = false; + if (isHistoryControlled) { + // Fully controlled mode: notify parent to update history + onHistoryChange(updateHistory(history)); + } else { + // Uncontrolled or semi-controlled mode: update internal state + setInternalHistory(updateHistory); + } + }; + + // Handle value changes + const handleChange: InputProps['onChange'] = (event, data) => { + const newValue = data.value; + + // If we're navigating history and user edits, save as draft and exit navigation + if (isNavigatingRef.current) { + setDraft(newValue); + setHistoryIndex(-1); + isNavigatingRef.current = false; + } else { + setDraft(newValue); + } + + // Update internal value if uncontrolled + if (!isControlled) { + setInternalValue(newValue); + } + + // Call parent onChange if provided + if (onChange) { + onChange(event, data); + } + }; + + // Handle keyboard navigation + const handleKeyDown: InputProps['onKeyDown'] = (event) => { + if (event.key === 'ArrowUp') { + event.preventDefault(); // Prevent cursor movement + navigateHistory('up'); + } else if (event.key === 'ArrowDown') { + event.preventDefault(); // Prevent cursor movement + navigateHistory('down'); + } else if (event.key === 'Enter') { + // Add to history (don't prevent default - let parent handle Enter) + addToHistory(currentValue); + setHistoryIndex(-1); // Reset navigation + setDraft(''); // Clear draft after adding to history + isNavigatingRef.current = false; + } + + // Call parent onKeyDown if provided + if (onKeyDown) { + onKeyDown(event); + } + }; + + // Navigate through history + const navigateHistory = (direction: 'up' | 'down') => { + if (history.length === 0) { + return; // No history to navigate + } + + isNavigatingRef.current = true; + + if (direction === 'up') { + // Going back in history (to older entries) + if (historyIndex === -1) { + // First time navigating up - save current draft and go to last entry + setDraft(currentValue); + setHistoryIndex(history.length - 1); + updateValueFromHistory(history.length - 1); + } else if (historyIndex > 0) { + // Navigate to previous entry + const newIndex = historyIndex - 1; + setHistoryIndex(newIndex); + updateValueFromHistory(newIndex); } - - // Call parent onKeyDown if provided - if (onKeyDown) { - onKeyDown(event); + // If already at oldest (index 0), do nothing (stop at beginning) + } else { + // Going forward in history (to newer entries) + if (historyIndex === -1) { + return; // Already at the latest (draft) } - }; - // Navigate through history - const navigateHistory = (direction: 'up' | 'down') => { - if (history.length === 0) { - return; // No history to navigate - } - - isNavigatingRef.current = true; - - if (direction === 'up') { - // Going back in history (to older entries) - if (historyIndex === -1) { - // First time navigating up - save current draft and go to last entry - setDraft(currentValue); - setHistoryIndex(history.length - 1); - updateValueFromHistory(history.length - 1); - } else if (historyIndex > 0) { - // Navigate to previous entry - const newIndex = historyIndex - 1; - setHistoryIndex(newIndex); - updateValueFromHistory(newIndex); - } - // If already at oldest (index 0), do nothing (stop at beginning) + if (historyIndex < history.length - 1) { + // Navigate to next entry + const newIndex = historyIndex + 1; + setHistoryIndex(newIndex); + updateValueFromHistory(newIndex); } else { - // Going forward in history (to newer entries) - if (historyIndex === -1) { - return; // Already at the latest (draft) - } - - if (historyIndex < history.length - 1) { - // Navigate to next entry - const newIndex = historyIndex + 1; - setHistoryIndex(newIndex); - updateValueFromHistory(newIndex); - } else { - // Reached the end - show draft - setHistoryIndex(-1); - updateValueFromHistory(-1); - isNavigatingRef.current = false; - } - } - }; - - // Update input value from history or draft - const updateValueFromHistory = (index: number) => { - const newValue = index === -1 ? draft : history[index]; - - if (!isControlled) { - setInternalValue(newValue); - } - - // If controlled, we need to notify parent to update the value - if (isControlled && onChange) { - // Create a synthetic event to update controlled value - const syntheticEvent = { - target: { value: newValue }, - currentTarget: { value: newValue }, - } as React.ChangeEvent; - - onChange(syntheticEvent, { value: newValue }); + // Reached the end - show draft + setHistoryIndex(-1); + updateValueFromHistory(-1); + isNavigatingRef.current = false; } - }; - - return ( - - ); - }, -); - -InputWithHistory.displayName = 'InputWithHistory'; + } + }; + + // Update input value from history or draft + const updateValueFromHistory = (index: number) => { + const newValue = index === -1 ? draft : history[index]; + + if (!isControlled) { + setInternalValue(newValue); + } + + // If controlled, we need to notify parent to update the value + if (isControlled && onChange) { + // Create a synthetic event to update controlled value + const syntheticEvent = { + target: { value: newValue }, + currentTarget: { value: newValue }, + } as React.ChangeEvent; + + onChange(syntheticEvent, { value: newValue }); + } + }; + + return ; +} diff --git a/src/webviews/components/InputWithProgress.tsx b/src/webviews/components/InputWithProgress.tsx index 893c64876..ad69348c3 100644 --- a/src/webviews/components/InputWithProgress.tsx +++ b/src/webviews/components/InputWithProgress.tsx @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { ProgressBar } from '@fluentui/react-components'; -import { forwardRef, type JSX } from 'react'; +import { type JSX } from 'react'; import { InputWithHistory, type InputWithHistoryProps } from './InputWithHistory'; import './inputWithProgress.scss'; @@ -47,30 +47,26 @@ interface InputWithProgressProps extends InputWithHistoryProps { * /> * ``` */ -export const InputWithProgress = forwardRef( - ({ indeterminateProgress, ...inputProps }, ref): JSX.Element => { - return ( -
- - {indeterminateProgress ? ( - - ) : null} -
- ); - }, -); - -InputWithProgress.displayName = 'InputWithProgress'; +export function InputWithProgress({ indeterminateProgress, ref, ...inputProps }: InputWithProgressProps): JSX.Element { + return ( +
+ + {indeterminateProgress ? ( + + ) : null} +
+ ); +} diff --git a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/AiCard.scss b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/AiCard.scss deleted file mode 100644 index e443ef6a7..000000000 --- a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/AiCard.scss +++ /dev/null @@ -1,12 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -.ai-card { - &-title-container { - display: flex; - align-items: center; - gap: 8px; - } -} diff --git a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/AiCard.tsx b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/AiCard.tsx deleted file mode 100644 index 743e62a4c..000000000 --- a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/AiCard.tsx +++ /dev/null @@ -1,95 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { Card, CardHeader, Text, tokens } from '@fluentui/react-components'; -// TODO: Copy content feature will be added in the next release -// import { Button, CopyRegular } from '@fluentui/react-icons'; -import { SparkleRegular } from '@fluentui/react-icons'; -import * as l10n from '@vscode/l10n'; -import { forwardRef, type ReactNode } from 'react'; -import './AiCard.scss'; -import './optimizationCard.scss'; - -export interface AiCardProps { - /** - * The main title of the card - */ - title: string; - - /** - * Optional badges or other elements to display alongside the title - */ - titleChildren?: ReactNode; - - /** - * The main content of the card - */ - children: ReactNode; - - /** - * Optional callback when the copy button is clicked - */ - onCopy?: () => void; -} - -/** - * AI-themed card component for displaying optimization recommendations. - * This component supports ref forwarding for use with animation libraries. - * - * **Usage with animations**: Use directly with animation libraries like @fluentui/react-motion-components-preview: - * - * ```tsx - * - * - * - * ``` - * - * **Important**: The component applies `marginBottom: '16px'` by default for proper spacing in animated lists. - * The margin is on the Card itself to ensure borders and shadows render immediately during collapse animations. - */ -export const AiCard = forwardRef( - // TODO: Copy content feature will be added in the next release - _onCopy parameter will be used then - ({ title, titleChildren, children, onCopy: _onCopy }, ref) => { - return ( - - - {l10n.t('AI responses may be inaccurate')} - -
- -
- - - {title} - - {titleChildren} -
- } - // TODO: Copy content feature will be added in the next release - // action={ - // onCopy ? ( - //
- -
- ); - }, -); - -AiCard.displayName = 'AiCard'; diff --git a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/ImprovementCard.tsx b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/ImprovementCard.tsx index 317cc6937..4427c1ecb 100644 --- a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/ImprovementCard.tsx +++ b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/ImprovementCard.tsx @@ -20,10 +20,9 @@ import { ArrowTrendingSparkleRegular } from '@fluentui/react-icons'; // TODO: Copy content feature will be added in the next release // import { CopyRegular } from '@fluentui/react-icons'; import * as l10n from '@vscode/l10n'; -import { forwardRef, useState } from 'react'; +import { useState } from 'react'; import { type ImprovementCard as ImprovementCardConfig } from '../../../../types/queryInsights'; -import './AiCard.scss'; -import './optimizationCard.scss'; +import './baseOptimizationCard.scss'; export interface ImprovementCardProps { /** @@ -47,6 +46,11 @@ export interface ImprovementCardProps { * Returns a Promise with success status and optional message */ onSecondaryAction?: (actionId: string, payload: unknown) => Promise<{ success: boolean; message?: string }>; + + /** + * Ref to forward to the card element + */ + ref?: React.Ref; } /** @@ -76,241 +80,239 @@ const priorityColors: Record<'high' | 'medium' | 'low', 'danger' | 'warning' | ' * **Important**: The component applies `marginBottom: '16px'` by default for proper spacing in animated lists. * The margin is on the Card itself to ensure borders and shadows render immediately during collapse animations. */ -export const ImprovementCard = forwardRef( - // TODO: Copy content feature will be added in the next release - _onCopy parameter will be used then - ({ config, onCopy: _onCopy, onPrimaryAction, onSecondaryAction }, ref) => { - // Separate state for each button - independent execution tracking - const [primaryState, setPrimaryState] = useState<{ - isLoading: boolean; - errorMessage?: string; - successMessage?: string; - }>({ isLoading: false }); +// TODO: Copy content feature will be added in the next release - _onCopy parameter will be used then +export function ImprovementCard({ + config, + onCopy: _onCopy, + onPrimaryAction, + onSecondaryAction, + ref, +}: ImprovementCardProps) { + // Separate state for each button - independent execution tracking + const [primaryState, setPrimaryState] = useState<{ + isLoading: boolean; + errorMessage?: string; + successMessage?: string; + }>({ isLoading: false }); - const [secondaryState, setSecondaryState] = useState<{ - isLoading: boolean; - errorMessage?: string; - successMessage?: string; - }>({ isLoading: false }); + const [secondaryState, setSecondaryState] = useState<{ + isLoading: boolean; + errorMessage?: string; + successMessage?: string; + }>({ isLoading: false }); - const handlePrimaryClick = async () => { - if (!config.primaryButton || !onPrimaryAction) return; + const handlePrimaryClick = async () => { + if (!config.primaryButton || !onPrimaryAction) return; - // Clear previous state, set loading for primary button only - setPrimaryState({ isLoading: true }); + // Clear previous state, set loading for primary button only + setPrimaryState({ isLoading: true }); - try { - const result = await onPrimaryAction(config.primaryButton.actionId, config.primaryButton.payload); + try { + const result = await onPrimaryAction(config.primaryButton.actionId, config.primaryButton.payload); - if (result.success) { - setPrimaryState({ - isLoading: false, - successMessage: result.message || l10n.t('Action completed successfully'), - }); - } else { - setPrimaryState({ - isLoading: false, - errorMessage: result.message || l10n.t('Action failed'), - }); - } - } catch (error) { + if (result.success) { setPrimaryState({ isLoading: false, - errorMessage: error instanceof Error ? error.message : l10n.t('An unexpected error occurred'), + successMessage: result.message || l10n.t('Action completed successfully'), + }); + } else { + setPrimaryState({ + isLoading: false, + errorMessage: result.message || l10n.t('Action failed'), }); } - }; + } catch (error) { + setPrimaryState({ + isLoading: false, + errorMessage: error instanceof Error ? error.message : l10n.t('An unexpected error occurred'), + }); + } + }; - const handleSecondaryClick = async () => { - if (!config.secondaryButton || !onSecondaryAction) return; + const handleSecondaryClick = async () => { + if (!config.secondaryButton || !onSecondaryAction) return; - // Clear previous state, set loading for secondary button only - setSecondaryState({ isLoading: true }); + // Clear previous state, set loading for secondary button only + setSecondaryState({ isLoading: true }); - try { - const result = await onSecondaryAction(config.secondaryButton.actionId, config.secondaryButton.payload); + try { + const result = await onSecondaryAction(config.secondaryButton.actionId, config.secondaryButton.payload); - if (result.success) { - setSecondaryState({ - isLoading: false, - successMessage: result.message || l10n.t('Action completed successfully'), - }); - } else { - setSecondaryState({ - isLoading: false, - errorMessage: result.message || l10n.t('Action failed'), - }); - } - } catch (error) { + if (result.success) { + setSecondaryState({ + isLoading: false, + successMessage: result.message || l10n.t('Action completed successfully'), + }); + } else { setSecondaryState({ isLoading: false, - errorMessage: error instanceof Error ? error.message : l10n.t('An unexpected error occurred'), + errorMessage: result.message || l10n.t('Action failed'), }); } - }; + } catch (error) { + setSecondaryState({ + isLoading: false, + errorMessage: error instanceof Error ? error.message : l10n.t('An unexpected error occurred'), + }); + } + }; - const priorityBadgeText = { - high: l10n.t('HIGH PRIORITY'), - medium: l10n.t('MEDIUM PRIORITY'), - low: l10n.t('LOW PRIORITY'), - }[config.priority]; + const priorityBadgeText = { + high: l10n.t('HIGH PRIORITY'), + medium: l10n.t('MEDIUM PRIORITY'), + low: l10n.t('LOW PRIORITY'), + }[config.priority]; - return ( - -
- -
- - - {config.title} - - - {priorityBadgeText} - -
- } - action={ - - {l10n.t('AI responses may be inaccurate')} + return ( + +
+ +
+ + + {config.title} - } - /> -
- {/* Description */} - - {config.description} + + {priorityBadgeText} + +
+ } + action={ + + {l10n.t('AI responses may be inaccurate')} + } + /> +
+ {/* Description */} + + {config.description} + - {/* Recommended Index Section */} -
-
- - ); - }, -); - -ImprovementCard.displayName = 'ImprovementCard'; +
+ + ); +} diff --git a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/MarkdownCard.tsx b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/MarkdownCard.tsx index 10105d48d..1f8648a9c 100644 --- a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/MarkdownCard.tsx +++ b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/MarkdownCard.tsx @@ -8,9 +8,9 @@ import { Card, CardHeader, makeStyles, Text, tokens } from '@fluentui/react-comp // import { CopyRegular } from '@fluentui/react-icons'; import { SparkleRegular } from '@fluentui/react-icons'; import * as l10n from '@vscode/l10n'; -import { forwardRef, type JSX } from 'react'; +import { type JSX } from 'react'; import ReactMarkdown from 'react-markdown'; -import './optimizationCard.scss'; +import './baseOptimizationCard.scss'; const useStyles = makeStyles({ content: { @@ -127,6 +127,11 @@ interface MarkdownCardProps { * Set to false for non-AI generated content (e.g., error messages) */ showAiDisclaimer?: boolean; + + /** + * Ref to forward to the card element + */ + ref?: React.Ref; } /** @@ -144,40 +149,43 @@ interface MarkdownCardProps { * **Important**: The component applies `marginBottom: '16px'` by default for proper spacing in animated lists. * The margin is on the Card itself to ensure borders and shadows render immediately during collapse animations. */ -export const MarkdownCard = forwardRef( - // TODO: Copy content feature will be added in the next release - _onCopy parameter will be used then - ({ title, content, icon, onCopy: _onCopy, showAiDisclaimer = true }, ref) => { - const styles = useStyles(); +// TODO: Copy content feature will be added in the next release - _onCopy parameter will be used then +export function MarkdownCard({ + title, + content, + icon, + onCopy: _onCopy, + showAiDisclaimer = true, + ref, +}: MarkdownCardProps) { + const styles = useStyles(); - return ( - -
-
- {icon ?? } -
-
- - {title} + return ( + +
+
+ {icon ?? } +
+
+ + {title} + + } + action={ + showAiDisclaimer ? ( + + {l10n.t('AI responses may be inaccurate')} - } - action={ - showAiDisclaimer ? ( - - {l10n.t('AI responses may be inaccurate')} - - ) : undefined - } - /> -
- {content} -
+ ) : undefined + } + /> +
+ {content}
- - ); - }, -); - -MarkdownCard.displayName = 'MarkdownCard'; +
+
+ ); +} diff --git a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/MarkdownCardEx.tsx b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/MarkdownCardEx.tsx index de7a31018..21faf70ad 100644 --- a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/MarkdownCardEx.tsx +++ b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/MarkdownCardEx.tsx @@ -6,9 +6,9 @@ import { Card, CardHeader, makeStyles, Text, tokens } from '@fluentui/react-components'; import { SparkleRegular } from '@fluentui/react-icons'; import * as l10n from '@vscode/l10n'; -import { forwardRef, type JSX } from 'react'; +import { type JSX } from 'react'; import ReactMarkdown from 'react-markdown'; -import './optimizationCard.scss'; +import './baseOptimizationCard.scss'; const useStyles = makeStyles({ content: { @@ -123,6 +123,11 @@ interface MarkdownCardExProps { * Optional children to render between the title and content */ children?: React.ReactNode; + + /** + * Ref to forward to the card element + */ + ref?: React.Ref; } /** @@ -149,43 +154,47 @@ interface MarkdownCardExProps { * **Important**: The component applies `marginBottom: '16px'` by default for proper spacing in animated lists. * The margin is on the Card itself to ensure borders and shadows render immediately during collapse animations. */ -export const MarkdownCardEx = forwardRef( - // TODO: Copy content feature will be added in the next release - _onCopy parameter will be used then - ({ title, content, icon, onCopy: _onCopy, showAiDisclaimer = true, children }, ref) => { - const styles = useStyles(); +// TODO: Copy content feature will be added in the next release - _onCopy parameter will be used then +export function MarkdownCardEx({ + title, + content, + icon, + onCopy: _onCopy, + showAiDisclaimer = true, + children, + ref, +}: MarkdownCardExProps) { + const styles = useStyles(); - return ( - -
-
- {icon ?? } -
-
- - {title} + return ( + +
+
+ {icon ?? } +
+
+ + {title} + + } + action={ + showAiDisclaimer ? ( + + {l10n.t('AI responses may be inaccurate')} - } - action={ - showAiDisclaimer ? ( - - {l10n.t('AI responses may be inaccurate')} - - ) : undefined - } - style={{ marginBottom: '16px' }} - /> - {/* Custom children content between header and main content */} - {children} -
- {content} -
+ ) : undefined + } + style={{ marginBottom: '16px' }} + /> + {/* Custom children content between header and main content */} + {children} +
+ {content}
- - ); - }, -); - -MarkdownCardEx.displayName = 'MarkdownCardEx'; +
+
+ ); +} diff --git a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/TipsCard.tsx b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/TipsCard.tsx index 48c07e2b0..5863355e2 100644 --- a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/TipsCard.tsx +++ b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/TipsCard.tsx @@ -5,9 +5,9 @@ import { Button, Card, CardHeader, Text, tokens } from '@fluentui/react-components'; import { ChevronLeftRegular, ChevronRightRegular, DismissRegular, LightbulbRegular } from '@fluentui/react-icons'; -import { forwardRef, useState } from 'react'; +import { useState } from 'react'; import { useTrpcClient } from '../../../../../../api/webview-client/useTrpcClient'; -import './optimizationCard.scss'; +import './baseOptimizationCard.scss'; import './TipsCard.scss'; export interface Tip { @@ -35,6 +35,11 @@ export interface TipsCardProps { * Optional callback when the copy button is clicked */ onCopy?: () => void; + + /** + * Ref to forward to the card element + */ + ref?: React.Ref; } /** @@ -52,7 +57,7 @@ export interface TipsCardProps { * **Important**: The component applies `marginBottom: '16px'` by default for proper spacing in animated lists. * The margin is on the Card itself to ensure borders and shadows render immediately during collapse animations. */ -export const TipsCard = forwardRef(({ title, tips, onDismiss }, ref) => { +export function TipsCard({ title, tips, onDismiss, ref }: TipsCardProps) { const { trpcClient } = useTrpcClient(); const [currentIndex, setCurrentIndex] = useState(0); @@ -158,6 +163,4 @@ export const TipsCard = forwardRef(({ title, tips
); -}); - -TipsCard.displayName = 'TipsCard'; +} diff --git a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/optimizationCard.scss b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/baseOptimizationCard.scss similarity index 88% rename from src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/optimizationCard.scss rename to src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/baseOptimizationCard.scss index 325aec7e6..1c7f751ae 100644 --- a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/optimizationCard.scss +++ b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/baseOptimizationCard.scss @@ -16,6 +16,13 @@ display: flex; gap: 16px; } + + // Title container with badges (used by ImprovementCard) + &-title-container { + display: flex; + align-items: center; + gap: 8px; + } } // Index code block display diff --git a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/custom/GetPerformanceInsightsCard.tsx b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/custom/GetPerformanceInsightsCard.tsx index 994834e5a..951c32e39 100644 --- a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/custom/GetPerformanceInsightsCard.tsx +++ b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/custom/GetPerformanceInsightsCard.tsx @@ -6,6 +6,7 @@ import { Button, Card, + CardHeader, MessageBar, MessageBarBody, MessageBarTitle, @@ -15,8 +16,8 @@ import { } from '@fluentui/react-components'; import { SparkleRegular } from '@fluentui/react-icons'; import * as l10n from '@vscode/l10n'; -import { forwardRef } from 'react'; -import '../optimizationCard.scss'; +import React from 'react'; +import '../baseOptimizationCard.scss'; import './GetPerformanceInsightsCard.scss'; export interface GetPerformanceInsightsCardProps { @@ -64,6 +65,11 @@ export interface GetPerformanceInsightsCardProps { * Optional className to apply to the Card component (e.g., for spacing) */ className?: string; + + /** + * Ref to forward to the card element + */ + ref?: React.Ref; } /** @@ -81,94 +87,87 @@ export interface GetPerformanceInsightsCardProps { * **Note**: This component does not apply default margins. Use the `className` prop to apply * spacing classes (e.g., `cardSpacing`) when using in layouts that require spacing. */ -export const GetPerformanceInsightsCard = forwardRef( - ( - { - bodyText, - recommendation, - isLoading, - enabled = true, - errorMessage, - onGetInsights, - onLearnMore, - onCancel, - className, - }, - ref, - ) => { - return ( - - - {l10n.t('AI responses may be inaccurate')} - -
- +
+ +
+ + {l10n.t('AI Performance Insights')} + + } + action={ + + {l10n.t('AI responses may be inaccurate')} + + } + style={{ marginBottom: '8px' }} /> -
- - {l10n.t('AI Performance Insights')} + + {bodyText} + + {recommendation && ( + + {recommendation} - - {bodyText} - - {recommendation && ( - - {recommendation} - - )} - {errorMessage && ( - - - Error: - {errorMessage} - - - )} - {isLoading ? ( -
- - {l10n.t('AI is analyzing...')} - -
- ) : ( -
- - -
- )} -
+ )} + {errorMessage && ( + + + Error: + {errorMessage} + + + )} + {isLoading ? ( +
+ + {l10n.t('AI is analyzing...')} + +
+ ) : ( +
+ + +
+ )}
- - ); - }, -); - -GetPerformanceInsightsCard.displayName = 'GetPerformanceInsightsCard'; +
+ + ); +} diff --git a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/index.ts b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/index.ts index 313ea5697..28f83231a 100644 --- a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/index.ts +++ b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/optimizationCards/index.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -export * from './AiCard'; export * from './custom'; export * from './ImprovementCard'; export * from './MarkdownCard'; diff --git a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/queryPlanSummary/StageDetailCard.tsx b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/queryPlanSummary/StageDetailCard.tsx index 13fb4bc3d..11d3a7e2e 100644 --- a/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/queryPlanSummary/StageDetailCard.tsx +++ b/src/webviews/documentdb/collectionView/components/queryInsightsTab/components/queryPlanSummary/StageDetailCard.tsx @@ -5,7 +5,7 @@ import { Badge, Card, Text, Tooltip } from '@fluentui/react-components'; import { WarningRegular } from '@fluentui/react-icons'; -import { forwardRef } from 'react'; +import React from 'react'; import './StageDetailCard.scss'; export type StageType = 'IXSCAN' | 'FETCH' | 'PROJECTION' | 'SORT' | 'COLLSCAN'; @@ -50,6 +50,11 @@ export interface StageDetailCardProps { * Optional className for styling */ className?: string; + + /** + * Ref to forward to the card element + */ + ref?: React.Ref; } /** @@ -57,88 +62,87 @@ export interface StageDetailCardProps { * Uses bordered grid cells for primary metrics (Returned + Execution Time). * Supports ref forwarding for use with animation libraries. */ -export const StageDetailCard = forwardRef( - ({ stageType, description, returned, executionTimeMs, metrics, hasFailed, className }, ref) => { - // Use danger color for failed stages, otherwise use brand color - const badgeColor = hasFailed ? 'danger' : 'brand'; - - return ( - - {/* Header: Badge + Description */} -
- : undefined} - > - {stageType} - - {description && ( - - {description} - +export function StageDetailCard({ + stageType, + description, + returned, + executionTimeMs, + metrics, + hasFailed, + className, + ref, +}: StageDetailCardProps) { + // Use danger color for failed stages, otherwise use brand color + const badgeColor = hasFailed ? 'danger' : 'brand'; + + return ( + + {/* Header: Badge + Description */} +
+ : undefined} + > + {stageType} + + {description && ( + + {description} + + )} +
+ + {/* Primary metrics: Bordered grid cells */} + {(returned !== undefined || executionTimeMs !== undefined) && ( +
+ {returned !== undefined && ( +
+
Returned
+ {returned.toLocaleString()} +
+ )} + {executionTimeMs !== undefined && ( +
+
Execution Time
+ {executionTimeMs.toFixed(2)}ms +
)}
- - {/* Primary metrics: Bordered grid cells */} - {(returned !== undefined || executionTimeMs !== undefined) && ( -
- {returned !== undefined && ( -
-
Returned
- {returned.toLocaleString()} -
- )} - {executionTimeMs !== undefined && ( -
-
Execution Time
- {executionTimeMs.toFixed(2)}ms -
- )} -
- )} - - {/* Optional metrics: Gray badges */} - {metrics && metrics.length > 0 && ( -
- {metrics.map((metric, index) => { - const valueStr = - typeof metric.value === 'number' ? metric.value.toLocaleString() : String(metric.value); - - // Truncate long values (over 50 characters) - const maxLength = 50; - const isTruncated = valueStr.length > maxLength; - const displayValue = isTruncated ? valueStr.substring(0, maxLength) + '...' : valueStr; - - const badgeContent = ( - - {metric.label}:  - {displayValue} - - ); - - // Wrap in tooltip if truncated - return isTruncated ? ( - - {badgeContent} - - ) : ( - badgeContent - ); - })} -
- )} -
- ); - }, -); - -StageDetailCard.displayName = 'StageDetailCard'; + )} + + {/* Optional metrics: Gray badges */} + {metrics && metrics.length > 0 && ( +
+ {metrics.map((metric, index) => { + const valueStr = + typeof metric.value === 'number' ? metric.value.toLocaleString() : String(metric.value); + + // Truncate long values (over 50 characters) + const maxLength = 50; + const isTruncated = valueStr.length > maxLength; + const displayValue = isTruncated ? valueStr.substring(0, maxLength) + '...' : valueStr; + + const badgeContent = ( + + {metric.label}:  + {displayValue} + + ); + + // Wrap in tooltip if truncated + return isTruncated ? ( + + {badgeContent} + + ) : ( + badgeContent + ); + })} +
+ )} + + ); +} diff --git a/src/webviews/documentdb/collectionView/components/resultsTab/DataViewPanelTable.tsx b/src/webviews/documentdb/collectionView/components/resultsTab/DataViewPanelTable.tsx index 3d05d4a3b..d873cf8f7 100644 --- a/src/webviews/documentdb/collectionView/components/resultsTab/DataViewPanelTable.tsx +++ b/src/webviews/documentdb/collectionView/components/resultsTab/DataViewPanelTable.tsx @@ -209,8 +209,8 @@ export function DataViewPanelTable({ liveHeaders, liveData, handleStepIn }: Prop onCellDblClick(event)} onSelectedRowsChanged={debounce( diff --git a/src/webviews/documentdb/collectionView/components/resultsTab/DataViewPanelTree.tsx b/src/webviews/documentdb/collectionView/components/resultsTab/DataViewPanelTree.tsx index fed0cb4d7..c5eebf7e6 100644 --- a/src/webviews/documentdb/collectionView/components/resultsTab/DataViewPanelTree.tsx +++ b/src/webviews/documentdb/collectionView/components/resultsTab/DataViewPanelTree.tsx @@ -5,7 +5,7 @@ import { debounce } from 'es-toolkit'; import * as React from 'react'; -import { FieldType, Formatters, SlickgridReact, type GridOption } from 'slickgrid-react'; +import { Formatters, SlickgridReact, type GridOption } from 'slickgrid-react'; interface Props { liveData: { [key: string]: unknown }[]; @@ -20,7 +20,7 @@ export const DataViewPanelTree = ({ liveData }: Props): React.JSX.Element => { name: 'Field', field: 'field', minWidth: 100, - type: FieldType.string, + type: 'string' as const, formatter: Formatters.tree, cssClass: 'cell-title', filterable: true, @@ -104,8 +104,8 @@ export const DataViewPanelTree = ({ liveData }: Props): React.JSX.Element => { console.log('Tree View created')} /> diff --git a/src/webviews/documentdb/collectionView/components/toolbar/ToolbarDividerTransparent.tsx b/src/webviews/documentdb/collectionView/components/toolbar/ToolbarDividerTransparent.tsx index 0e69e2218..2e710d0aa 100644 --- a/src/webviews/documentdb/collectionView/components/toolbar/ToolbarDividerTransparent.tsx +++ b/src/webviews/documentdb/collectionView/components/toolbar/ToolbarDividerTransparent.tsx @@ -3,6 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -export const ToolbarDividerTransparent = (): JSX.Element => { +import * as React from 'react'; + +export const ToolbarDividerTransparent = (): React.JSX.Element => { return
; }; diff --git a/src/webviews/documentdb/collectionView/components/toolbar/ToolbarTableNavigation.tsx b/src/webviews/documentdb/collectionView/components/toolbar/ToolbarTableNavigation.tsx index 7a9d081e4..502321120 100644 --- a/src/webviews/documentdb/collectionView/components/toolbar/ToolbarTableNavigation.tsx +++ b/src/webviews/documentdb/collectionView/components/toolbar/ToolbarTableNavigation.tsx @@ -21,7 +21,7 @@ import { UsageImpact } from '../../../../../utils/surveyTypes'; import { useTrpcClient } from '../../../../api/webview-client/useTrpcClient'; import { CollectionViewContext, Views } from '../../collectionViewContext'; -export const ToolbarTableNavigation = (): JSX.Element => { +export const ToolbarTableNavigation = (): React.JSX.Element => { /** * Use the `useTrpcClient` hook to get the tRPC client */ diff --git a/src/webviews/documentdb/collectionView/components/toolbar/ToolbarViewNavigation.tsx b/src/webviews/documentdb/collectionView/components/toolbar/ToolbarViewNavigation.tsx index f5b5461a1..192fc312c 100644 --- a/src/webviews/documentdb/collectionView/components/toolbar/ToolbarViewNavigation.tsx +++ b/src/webviews/documentdb/collectionView/components/toolbar/ToolbarViewNavigation.tsx @@ -12,7 +12,7 @@ import { useTrpcClient } from '../../../../api/webview-client/useTrpcClient'; import { CollectionViewContext } from '../../collectionViewContext'; import { ToolbarDividerTransparent } from './ToolbarDividerTransparent'; -export const ToolbarViewNavigation = (): JSX.Element => { +export const ToolbarViewNavigation = (): React.JSX.Element => { /** * Use the `useTrpcClient` hook to get the tRPC client */ diff --git a/webpack.config.views.js b/webpack.config.views.js index b46cc047f..47fd660e6 100644 --- a/webpack.config.views.js +++ b/webpack.config.views.js @@ -92,10 +92,6 @@ module.exports = (env, { mode }) => { 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS', 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization', }, - // https://github.com/webpack/webpack-dev-server/issues/5446#issuecomment-2768816082 - setupMiddlewares: (middlewares) => { - return middlewares.filter((middleware) => middleware.name !== 'cross-origin-header-check'); - }, hot: true, host: '127.0.0.1', client: {