diff --git a/.coderabbit.yaml b/.coderabbit.yaml new file mode 100644 index 00000000000..1364c37fdb4 --- /dev/null +++ b/.coderabbit.yaml @@ -0,0 +1,12 @@ +# CodeRabbit configuration - https://docs.coderabbit.ai/getting-started/yaml-configuration +# Repo config overrides org-level settings. Explicitly list all branches to review +# so main stays covered while adding feature/*, release/* and hotfix/* +language: "en-US" +reviews: + auto_review: + enabled: true + base_branches: + - "main" + - "feature/.*" + - "release/.*" + - "hotfix/.*" diff --git a/.cursor/commands/bi-test-healer.md b/.cursor/commands/bi-test-healer.md new file mode 100644 index 00000000000..6604d740305 --- /dev/null +++ b/.cursor/commands/bi-test-healer.md @@ -0,0 +1,44 @@ +--- +description: Use this agent when you need to debug and fix failing Playwright tests. +tools: ['edit/createFile', 'edit/createDirectory', 'edit/editFiles', 'search/fileSearch', 'search/textSearch', 'search/listDirectory', 'search/readFile', 'playwright-test/browser_console_messages', 'playwright-test/browser_evaluate', 'playwright-test/browser_generate_locator', 'playwright-test/browser_network_requests', 'playwright-test/browser_snapshot', 'playwright-test/test_debug', 'playwright-test/test_list', 'playwright-test/test_run'] +--- + +You are the Playwright Test Healer, an expert test automation engineer specializing in debugging and +resolving Playwright test failures. Your mission is to systematically identify, diagnose, and fix +broken Playwright tests using a methodical approach. + +Your workflow: +1. **Initial Execution**: Run all tests using playwright_test_run_test tool to identify failing tests +2. **Debug failed tests**: For each failing test run playwright_test_debug_test. +3. **Error Investigation**: When the test pauses on errors, use available Playwright MCP tools to: + - Examine the error details + - Capture page snapshot to understand the context + - Analyze selectors, timing issues, or assertion failures +4. **Root Cause Analysis**: Determine the underlying cause of the failure by examining: + - Element selectors that may have changed + - Timing and synchronization issues + - Data dependencies or test environment problems + - Application changes that broke test assumptions +5. **Code Remediation**: Edit the test code to address identified issues, focusing on: + - Updating selectors to match current application state + - Fixing assertions and expected values + - Improving test reliability and maintainability + - For inherently dynamic data, utilize regular expressions to produce resilient locators +6. **Verification**: Restart the test after each fix to validate the changes +7. **Iteration**: Repeat the investigation and fixing process until the test passes cleanly + +Key principles: +- Be systematic and thorough in your debugging approach +- Document your findings and reasoning for each fix +- Prefer robust, maintainable solutions over quick hacks +- Use Playwright best practices for reliable test automation +- If multiple errors exist, fix them one at a time and retest +- Provide clear explanations of what was broken and how you fixed it +- You will continue this process until the test runs successfully without any failures or errors. +- If the error persists and you have high level of confidence that the test is correct, mark this test as test.fixme() + so that it is skipped during the execution. Add a comment before the failing step explaining what is happening instead + of the expected behavior. +- Do not ask user questions, you are not interactive tool, do the most reasonable thing possible to pass the test. +- Never wait for networkidle or use other discouraged or deprecated apis +Context: A developer has a failing Playwright test that needs to be debugged and fixed. user: 'The login test is failing, can you fix it?' assistant: 'I'll use the healer agent to debug and fix the failing login test.' The user has identified a specific failing test that needs debugging and fixing, which is exactly what the healer agent is designed for. +Context: After running a test suite, several tests are reported as failing. user: 'Test user-registration.spec.ts is broken after the recent changes' assistant: 'Let me use the healer agent to investigate and fix the user-registration test.' A specific test file is failing and needs debugging, which requires the systematic approach of the playwright-test-healer agent. \ No newline at end of file diff --git a/.cursor/commands/generate-ai-tests.md b/.cursor/commands/generate-ai-tests.md new file mode 100644 index 00000000000..2bf8592e911 --- /dev/null +++ b/.cursor/commands/generate-ai-tests.md @@ -0,0 +1,59 @@ +--- +description: Use this agent when you need to create automated browser tests using Playwright. +tools: ['search/fileSearch', 'search/textSearch', 'search/listDirectory', 'search/readFile', 'microsoft/playwright-mcp/*'] +--- + +You are a Playwright Test Generator, an expert in browser automation and end-to-end testing. +Your specialty is creating robust, reliable Playwright tests that accurately simulate user interactions and validate +application behavior. + +# For each test you generate +- First you must go to the given url and go through the vscode extension application +- Obtain the test plan with all the steps and verification specification +- Run the `generator_setup_page` tool to set up page for the scenario +- For each step and verification in the scenario, do the following: + - Use Playwright tool to manually execute it in real-time. + - Use the step description as the intent for each Playwright tool call. +- Retrieve generator log via `generator_read_log` +- Immediately after reading the test log, invoke `generator_write_test` with the generated source code + - File should contain single test + - File name must be fs-friendly scenario name + - Test must be placed in a describe matching the top-level test plan item + - Test title must match the scenario name + - Includes a comment with the step text before each step execution. Do not duplicate comments if step requires + multiple actions. + - Always use best practices from the log when generating tests. + + + For following plan: + + ```markdown file=specs/plan.md + ### 1. Adding New Todos + **Seed:** `test/e2e-playwright-tests/seed.spec.ts` + + #### 1.1 Add Valid Todo + **Steps:** + 1. Click in the "What needs to be done?" input field + + #### 1.2 Add Multiple Todos + ... + ``` + + Following file is generated: + + ```ts file=add-valid-todo.spec.ts + // spec: specs/plan.md + // seed: tests/seed.spec.ts + + test.describe('Adding New Todos', () => { + test('Add Valid Todo', async { page } => { + // 1. Click in the "What needs to be done?" input field + await page.click(...); + + ... + }); + }); + ``` + +Context: User wants to test a login flow on their web application. user: 'I need a test that logs into my app at localhost:3000 with username admin@test.com and password 123456, then verifies the dashboard page loads' assistant: 'I'll use the generator agent to create and validate this login test for you' The user needs a specific browser automation test created, which is exactly what the generator agent is designed for. +Context: User has built a new checkout flow and wants to ensure it works correctly. user: 'Can you create a test that adds items to cart, proceeds to checkout, fills in payment details, and confirms the order?' assistant: 'I'll use the generator agent to build a comprehensive checkout flow test' This is a complex user journey that needs to be automated and tested, perfect for the generator agent. \ No newline at end of file diff --git a/.cursor/commands/planner.md b/.cursor/commands/planner.md new file mode 100644 index 00000000000..d0699310c04 --- /dev/null +++ b/.cursor/commands/planner.md @@ -0,0 +1,92 @@ +--- +description: Use this agent when you need to create comprehensive test plan for a web application or website. +tools: ['edit/createFile', 'edit/createDirectory', 'search/fileSearch', 'search/textSearch', 'search/listDirectory', 'search/readFile', 'playwright-test/browser_click', 'playwright-test/browser_close', 'playwright-test/browser_console_messages', 'playwright-test/browser_drag', 'playwright-test/browser_evaluate', 'playwright-test/browser_file_upload', 'playwright-test/browser_handle_dialog', 'playwright-test/browser_hover', 'playwright-test/browser_navigate', 'playwright-test/browser_navigate_back', 'playwright-test/browser_network_requests', 'playwright-test/browser_press_key', 'playwright-test/browser_select_option', 'playwright-test/browser_snapshot', 'playwright-test/browser_take_screenshot', 'playwright-test/browser_type', 'playwright-test/browser_wait_for', 'playwright-test/planner_setup_page'] +--- + +You are an expert web test planner with extensive experience in quality assurance, user experience testing, and test +scenario design. Your expertise includes functional testing, edge case identification, and comprehensive test coverage +planning. + +You will: + +1. **Navigate and Explore** + - Invoke the `planner_setup_page` tool once to set up page before using any other tools + - Explore the browser snapshot + - Do not take screenshots unless absolutely necessary + - Use browser_* tools to navigate and discover interface + - Thoroughly explore the interface, identifying all interactive elements, forms, navigation paths, and functionality + +2. **Analyze User Flows** + - Map out the primary user journeys and identify critical paths through the application + - Consider different user types and their typical behaviors + +3. **Design Comprehensive Scenarios** + + Create detailed test scenarios that cover: + - Happy path scenarios (normal user behavior) + - Edge cases and boundary conditions + - Error handling and validation + +4. **Structure Test Plans** + + Each scenario must include: + - Clear, descriptive title + - Detailed step-by-step instructions + - Expected outcomes where appropriate + - Assumptions about starting state (always assume blank/fresh state) + - Success criteria and failure conditions + +5. **Create Documentation** + + Save your test plan as requested: + - Executive summary of the tested page/application + - Individual scenarios as separate sections + - Each scenario formatted with numbered steps + - Clear expected results for verification + + +# TodoMVC Application - Comprehensive Test Plan + +## Application Overview + +The TodoMVC application is a React-based todo list manager that provides core task management functionality. The +application features: + +- **Task Management**: Add, edit, complete, and delete individual todos +- **Bulk Operations**: Mark all todos as complete/incomplete and clear all completed todos +- **Filtering**: View todos by All, Active, or Completed status +- **URL Routing**: Support for direct navigation to filtered views via URLs +- **Counter Display**: Real-time count of active (incomplete) todos +- **Persistence**: State maintained during session (browser refresh behavior not tested) + +## Test Scenarios + +### 1. Adding New Todos + +**Seed:** `e2e-playwright-tests/ai-written-tests/seed.spec.ts` + +#### 1.1 Add Valid Todo +**Steps:** +1. Click in the "What needs to be done?" input field +2. Type "Buy groceries" +3. Press Enter key + +**Expected Results:** +- Todo appears in the list with unchecked checkbox +- Counter shows "1 item left" +- Input field is cleared and ready for next entry +- Todo list controls become visible (Mark all as complete checkbox) + +#### 1.2 +... + + +**Quality Standards**: +- Write steps that are specific enough for any tester to follow +- Include negative testing scenarios +- Ensure scenarios are independent and can be run in any order + +**Output Format**: Always save the complete test plan as a markdown file with clear headings, numbered steps, and +professional formatting suitable for sharing with development and QA teams. +Context: User wants to test a new e-commerce checkout flow. user: 'I need test scenarios for our new checkout process at https://mystore.com/checkout' assistant: 'I'll use the planner agent to navigate to your checkout page and create comprehensive test scenarios.' The user needs test planning for a specific web page, so use the planner agent to explore and create test scenarios. +Context: User has deployed a new feature and wants thorough testing coverage. user: 'Can you help me test our new user dashboard at https://app.example.com/dashboard?' assistant: 'I'll launch the planner agent to explore your dashboard and develop detailed test scenarios.' This requires web exploration and test scenario creation, perfect for the planner agent. \ No newline at end of file diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index d20386f8254..53223dfc7c2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -11,6 +11,10 @@ rush.json @hevayo @gigara @kanushka /common/ @hevayo @gigara @kanushka /workspaces/common-libs/ @hevayo @gigara @tharindulak /workspaces/mi/ @hevayo @gigara @kaumini +workspaces/ballerina/bi-diagram/src/test/__snapshots__ @hevayo @kanushka +workspaces/ballerina/component-diagram/src/test/__snapshots__ @hevayo @kanushka +workspaces/ballerina/sequence-diagram/src/test/__snapshots__ @hevayo @kanushka +workspaces/ballerina/type-diagram/src/test/__snapshots__ @hevayo @kanushka /workspaces/ballerina/ballerina-core/src/interfaces/extended-lang-client.ts @hevayo @axewilledge @kanushka /workspaces/ballerina/ballerina-rpc-client @hevayo @axewilledge @kanushka /workspaces/choreo/ @kaje94 diff --git a/.github/actions/build/action.yml b/.github/actions/build/action.yml index b8ff8c60782..a1a71801be6 100644 --- a/.github/actions/build/action.yml +++ b/.github/actions/build/action.yml @@ -55,7 +55,13 @@ inputs: BALLERINA_DEV_COPLIOT_AUTH_CLIENT_ID: type: string BALLERINA_DEV_COPLIOT_AUTH_REDIRECT_URL: - type: string + type: string + COPILOT_ROOT_URL: + type: string + COPILOT_DEV_ROOT_URL: + type: string + APPINSIGHTS_INSTRUMENTATION_KEY: + type: string MI_AUTH_ORG: type: string MI_AUTH_CLIENT_ID: @@ -169,6 +175,9 @@ runs: BALLERINA_DEV_COPLIOT_AUTH_ORG: ${{ inputs.BALLERINA_DEV_COPLIOT_AUTH_ORG }} BALLERINA_DEV_COPLIOT_AUTH_CLIENT_ID: ${{ inputs.BALLERINA_DEV_COPLIOT_AUTH_CLIENT_ID }} BALLERINA_DEV_COPLIOT_AUTH_REDIRECT_URL: ${{ inputs.BALLERINA_DEV_COPLIOT_AUTH_REDIRECT_URL }} + COPILOT_ROOT_URL: ${{ inputs.COPILOT_ROOT_URL }} + COPILOT_DEV_ROOT_URL: ${{ inputs.COPILOT_DEV_ROOT_URL }} + APPINSIGHTS_INSTRUMENTATION_KEY: ${{ inputs.APPINSIGHTS_INSTRUMENTATION_KEY }} MI_AUTH_ORG: ${{ inputs.MI_AUTH_ORG }} MI_AUTH_CLIENT_ID: ${{ inputs.MI_AUTH_CLIENT_ID }} PLATFORM_DEFAULT_GHAPP_CLIENT_ID: ${{ inputs.PLATFORM_DEFAULT_GHAPP_CLIENT_ID }} diff --git a/.github/actions/pr/action.yml b/.github/actions/pr/action.yml index fbe3a08175b..79c9663a6e1 100644 --- a/.github/actions/pr/action.yml +++ b/.github/actions/pr/action.yml @@ -128,17 +128,17 @@ runs: run: | baseBranch="" if [ "${{ inputs.ballerina }}" == 'true' ]; then - baseBranch="release-ballerina" + baseBranch="stable/ballerina" elif [ "${{ inputs.bi }}" == 'true' ]; then - baseBranch="release-bi" + baseBranch="stable/bi" elif [ "${{ inputs.wso2-platform }}" == 'true' ]; then - baseBranch="release-platform" + baseBranch="stable/platform" elif [ "${{ inputs.choreo }}" == 'true' ]; then - baseBranch="release-choreo" + baseBranch="stable/choreo" elif [ "${{ inputs.apk }}" == 'true' ]; then - baseBranch="release-apk" + baseBranch="stable/apk" elif [ "${{ inputs.mi }}" == 'true' ]; then - baseBranch="release-mi" + baseBranch="stable/mi" fi pr=$(gh pr create -B "$baseBranch" -H "${{ inputs.version }}" --title "Merge \"${{ inputs.version }}\" into \"$baseBranch\"" --body '$subject') echo "prURL=$pr" >> $GITHUB_OUTPUT diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8522f3cb7c2..22e08606ace 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -209,6 +209,9 @@ jobs: BALLERINA_DEV_COPLIOT_AUTH_ORG: ${{ secrets.BALLERINA_DEV_COPLIOT_AUTH_ORG }} BALLERINA_DEV_COPLIOT_AUTH_CLIENT_ID: ${{ secrets.BALLERINA_DEV_COPLIOT_AUTH_CLIENT_ID }} BALLERINA_DEV_COPLIOT_AUTH_REDIRECT_URL: ${{ secrets.BALLERINA_DEV_COPLIOT_AUTH_REDIRECT_URL }} + COPILOT_ROOT_URL: ${{ secrets.COPILOT_ROOT_URL }} + COPILOT_DEV_ROOT_URL: ${{ secrets.COPILOT_DEV_ROOT_URL }} + APPINSIGHTS_INSTRUMENTATION_KEY: ${{ secrets.APPINSIGHTS_INSTRUMENTATION_KEY }} MI_AUTH_ORG: ${{ secrets.MI_AUTH_ORG }} MI_AUTH_CLIENT_ID: ${{ secrets.MI_AUTH_CLIENT_ID }} PLATFORM_DEFAULT_GHAPP_CLIENT_ID: ${{ secrets.PLATFORM_DEFAULT_GHAPP_CLIENT_ID }} @@ -219,7 +222,7 @@ jobs: PLATFORM_DEV_DEVANT_ASGARDEO_CLIENT_ID: ${{ secrets.PLATFORM_DEV_DEVANT_ASGARDEO_CLIENT_ID }} - name: Run Trivy vulnerability scanner - uses: aquasecurity/trivy-action@0.33.1 + uses: aquasecurity/trivy-action@0.34.2 with: scan-type: 'fs' scan-ref: '.' @@ -233,7 +236,7 @@ jobs: name: Run Ballerina extension tests needs: Build_Stage if: false - # if: ${{ inputs.runTests || (inputs.isReleaseBuild && (inputs.ballerina || inputs.bi)) || needs.Build_Stage.outputs.runBalExtTests == 'true' || github.base_ref == 'release-ballerina' }} + # if: ${{ inputs.runTests || (inputs.isReleaseBuild && (inputs.ballerina || inputs.bi)) || needs.Build_Stage.outputs.runBalExtTests == 'true' || github.base_ref == 'stable/ballerina' }} timeout-minutes: 45 runs-on: ${{ inputs.runOnAWS && inputs.awsRunnerId || 'ubuntu-latest' }} steps: @@ -278,10 +281,55 @@ jobs: balVersion: ${{ steps.set-version.outputs.balVersion }} balHome: ${{ steps.set-version.outputs.balHome }} + ExtTest_Ballerina_Diagrams: + name: Run Ballerina diagram snapshot tests + needs: Build_Stage + if: ${{ inputs.runTests || (inputs.isReleaseBuild && (inputs.ballerina || inputs.bi)) || needs.Build_Stage.outputs.runBalExtTests == 'true' || github.base_ref == 'release-ballerina' || github.base_ref == 'release-bi' }} + timeout-minutes: 30 + runs-on: ${{ inputs.runOnAWS && inputs.awsRunnerId || 'ubuntu-latest' }} + steps: + - name: Restore build + uses: actions/download-artifact@v4 + with: + name: ExtBuild + path: ./ + + - name: Set up workspace + run: | + unzip build.zip + rm build.zip + + - name: Setup Rush + uses: gigara/setup-rush@v1.2.0 + with: + pnpm: 10.10.0 + node: 22.x + rush-install: true + + - name: Run BI diagram snapshot tests + run: | + cd workspaces/ballerina/bi-diagram + xvfb-run --auto-servernum pnpm run test + + - name: Run component diagram snapshot tests + run: | + cd workspaces/ballerina/component-diagram + xvfb-run --auto-servernum pnpm run test + + - name: Run type diagram snapshot tests + run: | + cd workspaces/ballerina/type-diagram + xvfb-run --auto-servernum pnpm run test + + - name: Run sequence diagram snapshot tests + run: | + cd workspaces/ballerina/sequence-diagram + xvfb-run --auto-servernum pnpm run test + ExtTest_MI: name: Run MI diagram tests needs: Build_Stage - if: ${{ inputs.runTests || (inputs.isReleaseBuild && inputs.mi) || needs.Build_Stage.outputs.runMIExtTests == 'true' || github.base_ref == 'release-mi' }} + if: ${{ inputs.runTests || (inputs.isReleaseBuild && inputs.mi) || needs.Build_Stage.outputs.runMIExtTests == 'true' || github.base_ref == 'stable/mi' }} timeout-minutes: 30 runs-on: ${{ inputs.runOnAWS && inputs.awsRunnerId || 'ubuntu-latest' }} steps: diff --git a/.github/workflows/daily-build.yml b/.github/workflows/daily-build.yml index 9073f8f800a..faffee8c55f 100644 --- a/.github/workflows/daily-build.yml +++ b/.github/workflows/daily-build.yml @@ -10,6 +10,7 @@ jobs: with: bi: true mi: true + ballerina: true runTests: true runMIE2ETests: true diff --git a/.github/workflows/release-packages.yml b/.github/workflows/release-packages.yml index 7341a84e575..1816d6844f8 100644 --- a/.github/workflows/release-packages.yml +++ b/.github/workflows/release-packages.yml @@ -45,6 +45,7 @@ jobs: wso2-platform: false choreo: false apk: false + runTests: true version: ${{ inputs.version }} Release: diff --git a/.github/workflows/sync-main-with-releases.yml b/.github/workflows/sync-main-with-releases.yml index 8255d27bdc0..48bebbf58fb 100644 --- a/.github/workflows/sync-main-with-releases.yml +++ b/.github/workflows/sync-main-with-releases.yml @@ -4,7 +4,7 @@ on: types: - closed branches: - - 'release-**' + - 'stable/**' jobs: sync-main: diff --git a/.github/workflows/test-pr.yml b/.github/workflows/test-pr.yml index 6dcc056684d..b7513480cfb 100644 --- a/.github/workflows/test-pr.yml +++ b/.github/workflows/test-pr.yml @@ -17,5 +17,5 @@ jobs: with: runOnAWS: ${{ contains(github.event.pull_request.labels.*.name, 'Runner/AWS') }} enableE2ETests: ${{ contains(github.event.pull_request.labels.*.name, 'Checks/Enable UI Tests') }} - runBIE2ETests: ${{ contains(github.event.pull_request.labels.*.name, 'Checks/Run BI UI Tests') || github.base_ref == 'release-bi' || github.base_ref == 'release-ballerina' }} - runMIE2ETests: ${{ contains(github.event.pull_request.labels.*.name, 'Checks/Run MI UI Tests') || github.base_ref == 'release-mi' }} + runBIE2ETests: ${{ contains(github.event.pull_request.labels.*.name, 'Checks/Run BI UI Tests') || github.base_ref == 'stable/bi' || github.base_ref == 'stable/ballerina' }} + runMIE2ETests: ${{ contains(github.event.pull_request.labels.*.name, 'Checks/Run MI UI Tests') || github.base_ref == 'stable/mi' }} diff --git a/.gitignore b/.gitignore index f2518547c7b..c61fdf7b384 100644 --- a/.gitignore +++ b/.gitignore @@ -83,5 +83,9 @@ package.json.backup pnpm-lock.yaml +TODO.md + # AI evaluation results **/results + +cc_run_log.json diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 00000000000..d3efbe07601 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,23 @@ +#!/usr/bin/env sh + +# Validate strict versioning in package.json files +echo "🔍 Validating package.json versions..." + +# Get all staged package.json files +STAGED_PACKAGE_JSON=$(git diff --cached --name-only --diff-filter=ACM | grep 'package.json$' || true) + +if [ -n "$STAGED_PACKAGE_JSON" ]; then + # Convert to array and pass to validation script + node common/scripts/validate-package-versions.js "$STAGED_PACKAGE_JSON" + + if [ $? -ne 0 ]; then + echo "" + echo "❌ Pre-commit hook failed: Non-strict versions found in package.json files." + echo " Please fix the version declarations and try again." + exit 1 + fi + + echo "✅ All staged package.json files use strict versioning." +else + echo "â„šī¸ No package.json files in this commit." +fi diff --git a/.vscode/launch.json b/.vscode/launch.json index 2f9a4a62441..3268021522f 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -27,7 +27,7 @@ "runtimeExecutable": "${execPath}", "args": [ "--extensionDevelopmentPath=${workspaceFolder}/workspaces/ballerina/ballerina-extension", - "--extensionDevelopmentPath=${workspaceFolder}/workspaces/bi/bi-extension" + "--extensionDevelopmentPath=${workspaceFolder}/workspaces/bi/bi-extension", ], "env": { "LS_EXTENSIONS_PATH": "", @@ -41,7 +41,35 @@ "${workspaceFolder}/workspaces/ballerina/ballerina-extension/dist/**/*.js", "${workspaceFolder}/workspaces/bi/bi-extension/out/**/*.js" ], - "preLaunchTask": "watch-all", + "preLaunchTask": "watch-ballerina-bi", + "envFile": "${workspaceFolder}/workspaces/ballerina/ballerina-extension/.env" + }, + { + "name": "Ballerina, BI & Platform Extensions", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}/workspaces/ballerina/ballerina-extension", + "--extensionDevelopmentPath=${workspaceFolder}/workspaces/bi/bi-extension", + "--extensionDevelopmentPath=${workspaceFolder}/workspaces/wso2-platform/wso2-platform-extension" + ], + "env": { + "LS_EXTENSIONS_PATH": "", + "LSDEBUG": "false", + "WEB_VIEW_WATCH_MODE": "true", + "WEB_VIEW_DEV_HOST": "http://localhost:9000", + "BALLERINA_STAGE_CENTRAL": "false", + + "PLATFORM_WEB_VIEW_DEV_MODE": "true", + "PLATFORM_WEB_VIEW_DEV_HOST": "http://localhost:3000/main.js", + }, + "outFiles": [ + "${workspaceFolder}/workspaces/ballerina/ballerina-extension/dist/**/*.js", + "${workspaceFolder}/workspaces/bi/bi-extension/out/**/*.js", + "${workspaceFolder}/workspaces/wso2-platform/wso2-platform-extension/dist/**/*.js", + ], + "preLaunchTask": "watch-ballerina-bi-platform", "envFile": "${workspaceFolder}/workspaces/ballerina/ballerina-extension/.env" }, { diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 29a79960663..b10d3f87e82 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -12,9 +12,13 @@ "problemMatcher": ["$tsc"] }, { - "label": "watch-all", + "label": "watch-ballerina-bi", "dependsOn": ["watch-ballerina", "watch-bi"] }, + { + "label": "watch-ballerina-bi-platform", + "dependsOn": ["watch-ballerina", "watch-bi", "npm: watch-wso2-platform"] + }, { "label": "watch-ballerina", "type": "npm", diff --git a/README.md b/README.md index cbef0978cf2..02dd380249f 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,20 @@ To add a new package: - `rush check`: Checks dependency consistency across packages. - `rush purge`: Cleans up temporary files and folders. +## Git Pre-Commit Hooks + +This repository uses [Husky](https://typicode.github.io/husky/) to enforce code quality standards before commits. + +### Strict Version Validation + +All `package.json` files must use **strict versioning** for npm dependencies: +- ❌ **Not allowed**: `^1.2.3`, `~1.2.3` (caret and tilde prefixes) +- ✅ **Allowed**: `1.2.3` (exact version) + +The pre-commit hook will automatically validate all staged `package.json` files and block commits with non-strict versions. + +For more details, see the [Git Hooks Documentation](./docs/git-hooks.md). + ## Contribution Guidelines If you are planning on contributing to the development efforts of WSO2 API Manager or related extensions, you can do so by checking out the latest development version. The `master` branch holds the latest unreleased source code. diff --git a/common/autoinstallers/rush-plugins/package.json b/common/autoinstallers/rush-plugins/package.json index 4d38b444eeb..58d74f85feb 100644 --- a/common/autoinstallers/rush-plugins/package.json +++ b/common/autoinstallers/rush-plugins/package.json @@ -4,10 +4,11 @@ "private": true, "pnpm": { "overrides": { - "fast-xml-parser": "5.3.7" + "fast-xml-parser": "5.3.8", + "minimatch": "3.1.4" } }, "dependencies": { - "@gigara/rush-github-action-build-cache-plugin": "^1.1.4" + "@gigara/rush-github-action-build-cache-plugin": "1.1.8" } } diff --git a/common/autoinstallers/rush-plugins/pnpm-lock.yaml b/common/autoinstallers/rush-plugins/pnpm-lock.yaml index 2e0250f22e9..b31e019a36f 100644 --- a/common/autoinstallers/rush-plugins/pnpm-lock.yaml +++ b/common/autoinstallers/rush-plugins/pnpm-lock.yaml @@ -5,14 +5,15 @@ settings: excludeLinksFromLockfile: false overrides: - fast-xml-parser: 5.3.7 + fast-xml-parser: 5.3.8 + minimatch: 3.1.4 importers: .: dependencies: '@gigara/rush-github-action-build-cache-plugin': - specifier: ^1.1.4 + specifier: 1.1.8 version: 1.1.8 packages: @@ -133,8 +134,8 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - fast-xml-parser@5.3.7: - resolution: {integrity: sha512-JzVLro9NQv92pOM/jTCR6mHlJh2FGwtomH8ZQjhFj/R29P2Fnj38OgPJVtcvYw6SuKClhgYuwUZf5b3rd8u2mA==} + fast-xml-parser@5.3.8: + resolution: {integrity: sha512-53jIF4N6u/pxvaL1eb/hEZts/cFLWZ92eCfLrNyCI0k38lettCG/Bs40W9pPwoPXyHQlKu2OUbQtiEIZK/J6Vw==} hasBin: true http-proxy-agent@7.0.2: @@ -145,8 +146,8 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - minimatch@3.1.3: - resolution: {integrity: sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==} + minimatch@3.1.4: + resolution: {integrity: sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -198,7 +199,7 @@ snapshots: '@actions/glob@0.5.1': dependencies: '@actions/core': 2.0.3 - minimatch: 3.1.3 + minimatch: 3.1.4 '@actions/http-client@3.0.2': dependencies: @@ -280,7 +281,7 @@ snapshots: '@azure/core-xml@1.5.0': dependencies: - fast-xml-parser: 5.3.7 + fast-xml-parser: 5.3.8 tslib: 2.8.1 '@azure/logger@1.3.0': @@ -362,7 +363,7 @@ snapshots: events@3.3.0: {} - fast-xml-parser@5.3.7: + fast-xml-parser@5.3.8: dependencies: strnum: 2.1.2 @@ -380,7 +381,7 @@ snapshots: transitivePeerDependencies: - supports-color - minimatch@3.1.3: + minimatch@3.1.4: dependencies: brace-expansion: 1.1.12 diff --git a/common/config/rush/.pnpmfile.cjs b/common/config/rush/.pnpmfile.cjs index 52de931ceba..8c519843e96 100644 --- a/common/config/rush/.pnpmfile.cjs +++ b/common/config/rush/.pnpmfile.cjs @@ -15,146 +15,58 @@ module.exports = { hooks: { readPackage(pkg, context) { - if (pkg.dependencies) { - if (pkg.dependencies['vfile']) { - pkg.dependencies['vfile'] = '6.0.3'; - } - - // Security vulnerability fixes - if (pkg.dependencies['@modelcontextprotocol/sdk']) { - pkg.dependencies['@modelcontextprotocol/sdk'] = '^1.26.0'; - } - if (pkg.dependencies['@isaacs/brace-expansion']) { - pkg.dependencies['@isaacs/brace-expansion'] = '^5.0.1'; - } - if (pkg.dependencies['axios']) { - pkg.dependencies['axios'] = '^1.13.5'; - } - if (pkg.dependencies['http-proxy']) { - pkg.dependencies['http-proxy'] = '^1.18.1'; - } - if (pkg.dependencies['prismjs']) { - pkg.dependencies['prismjs'] = '^1.30.0'; - } - if (pkg.dependencies['webpack']) { - pkg.dependencies['webpack'] = '^5.94.0'; - } - if (pkg.dependencies['webpack-dev-server']) { - pkg.dependencies['webpack-dev-server'] = '^5.2.1'; - } - if (pkg.dependencies['braces']) { - pkg.dependencies['braces'] = '^3.0.3'; - } - if (pkg.dependencies['micromatch']) { - pkg.dependencies['micromatch'] = '^4.0.8'; - } - if (pkg.dependencies['esbuild']) { - pkg.dependencies['esbuild'] = '^0.25.0'; - } - if (pkg.dependencies['xmldom']) { - pkg.dependencies['xmldom'] = 'npm:@xmldom/xmldom@^0.8.10'; - } - if (pkg.dependencies['@eslint/plugin-kit']) { - pkg.dependencies['@eslint/plugin-kit'] = '^0.3.4'; - } - if (pkg.dependencies['on-headers']) { - pkg.dependencies['on-headers'] = '^1.1.0'; - } - if (pkg.dependencies['form-data']) { - pkg.dependencies['form-data'] = '^4.0.4'; - } - if (pkg.dependencies['min-document']) { - pkg.dependencies['min-document'] = '^2.19.1'; - } - if (pkg.dependencies['js-yaml']) { - pkg.dependencies['js-yaml'] = '^4.1.1'; - } - if (pkg.dependencies['diff']) { - pkg.dependencies['diff'] = '^8.0.3'; - } - if (pkg.dependencies['eslint']) { - pkg.dependencies['eslint'] = '^9.27.0'; - } - if (pkg.dependencies['fast-xml-parser']) { - pkg.dependencies['fast-xml-parser'] = '5.3.7'; - } - if (pkg.dependencies['hono']) { - pkg.dependencies['hono'] = '^4.11.7'; - } - if (pkg.dependencies['lodash']) { - pkg.dependencies['lodash'] = '4.17.23'; - } - if (pkg.dependencies['bn.js']) { - pkg.dependencies['bn.js'] = '5.2.3'; + function applyOverrides(deps) { + if (!deps) return; + if (deps['http-proxy']) deps['http-proxy'] = '1.18.1'; + if (deps['prismjs']) deps['prismjs'] = '1.30.0'; + if (deps['xmldom']) deps['xmldom'] = 'npm:@xmldom/xmldom@0.8.10'; + if (deps['braces']) deps['braces'] = '3.0.3'; + if (deps['micromatch']) deps['micromatch'] = '4.0.8'; + if (deps['js-yaml']) deps['js-yaml'] = '4.1.1'; + if (deps['diff']) deps['diff'] = '^8.0.3'; + if (deps['eslint']) deps['eslint'] = '^9.27.0'; + if (deps['fast-xml-parser']) deps['fast-xml-parser'] = '5.3.8'; + if (deps['lodash']) deps['lodash'] = '4.17.23'; + if (deps['qs']) deps['qs'] = '6.14.2'; + if (deps['serialize-javascript']) deps['serialize-javascript'] = '7.0.3'; + if (deps['@hono/node-server']) deps['@hono/node-server'] = '1.19.10'; + if (deps['@tootallnate/once']) deps['@tootallnate/once'] = '3.0.1'; + if (deps['dompurify']) deps['dompurify'] = '3.3.2'; + if (deps['express-rate-limit']) deps['express-rate-limit'] = '8.2.2'; + if (deps['hono']) deps['hono'] = '4.12.7'; + if (deps['immutable']) deps['immutable'] = '3.8.3'; + if (deps['bn.js']) { + deps['bn.js'] = deps['bn.js'].startsWith('^5') ? '5.2.3' : '4.12.3'; + } + if (deps['minimatch']) { + const currentVersion = deps['minimatch']; + let newVersion; + if (currentVersion.startsWith('^3') || currentVersion.startsWith('3')) { + newVersion = '3.1.4'; + } else if (currentVersion.startsWith('^4') || currentVersion.startsWith('4')) { + newVersion = '4.2.5'; + } else if (currentVersion.startsWith('^5') || currentVersion.startsWith('5')) { + newVersion = '5.1.8'; + } else if (currentVersion.startsWith('^6') || currentVersion.startsWith('6')) { + newVersion = '6.2.2'; + } else if (currentVersion.startsWith('^7') || currentVersion.startsWith('7')) { + newVersion = '7.4.8'; + } else if (currentVersion.startsWith('^8') || currentVersion.startsWith('8')) { + newVersion = '8.0.6'; + } else if (currentVersion.startsWith('^9') || currentVersion.startsWith('9')) { + newVersion = '9.0.7'; + } else if (currentVersion.startsWith('^10') || currentVersion.startsWith('10')) { + newVersion = '10.2.3'; + } else { + context.log(`Unexpected minimatch version: ${currentVersion}`); + newVersion = currentVersion; + } + deps['minimatch'] = newVersion; } } - if (pkg.devDependencies) { - // Security vulnerability fixes for dev dependencies - if (pkg.devDependencies['@modelcontextprotocol/sdk']) { - pkg.devDependencies['@modelcontextprotocol/sdk'] = '^1.26.0'; - } - if (pkg.devDependencies['@isaacs/brace-expansion']) { - pkg.devDependencies['@isaacs/brace-expansion'] = '^5.0.1'; - } - if (pkg.devDependencies['axios']) { - pkg.devDependencies['axios'] = '^1.13.5'; - } - if (pkg.devDependencies['http-proxy']) { - pkg.devDependencies['http-proxy'] = '^1.18.1'; - } - if (pkg.devDependencies['prismjs']) { - pkg.devDependencies['prismjs'] = '^1.30.0'; - } - if (pkg.devDependencies['webpack']) { - pkg.devDependencies['webpack'] = '^5.94.0'; - } - if (pkg.devDependencies['webpack-dev-server']) { - pkg.devDependencies['webpack-dev-server'] = '^5.2.1'; - } - if (pkg.devDependencies['braces']) { - pkg.devDependencies['braces'] = '^3.0.3'; - } - if (pkg.devDependencies['micromatch']) { - pkg.devDependencies['micromatch'] = '^4.0.8'; - } - if (pkg.devDependencies['esbuild']) { - pkg.devDependencies['esbuild'] = '^0.25.0'; - } - if (pkg.devDependencies['xmldom']) { - pkg.devDependencies['xmldom'] = 'npm:@xmldom/xmldom@^0.8.10'; - } - if (pkg.devDependencies['@eslint/plugin-kit']) { - pkg.devDependencies['@eslint/plugin-kit'] = '^0.3.4'; - } - if (pkg.devDependencies['on-headers']) { - pkg.devDependencies['on-headers'] = '^1.1.0'; - } - if (pkg.devDependencies['form-data']) { - pkg.devDependencies['form-data'] = '^4.0.4'; - } - if (pkg.devDependencies['min-document']) { - pkg.devDependencies['min-document'] = '^2.19.1'; - } - if (pkg.devDependencies['diff']) { - pkg.devDependencies['diff'] = '^8.0.3'; - } - if (pkg.devDependencies['eslint']) { - pkg.devDependencies['eslint'] = '^9.27.0'; - } - if (pkg.devDependencies['fast-xml-parser']) { - pkg.devDependencies['fast-xml-parser'] = '5.3.7'; - } - if (pkg.devDependencies['hono']) { - pkg.devDependencies['hono'] = '^4.11.7'; - } - if (pkg.devDependencies['lodash']) { - pkg.devDependencies['lodash'] = '4.17.23'; - } - if (pkg.devDependencies['bn.js']) { - pkg.devDependencies['bn.js'] = '5.2.3'; - } - } + applyOverrides(pkg.dependencies); + applyOverrides(pkg.devDependencies); return pkg; } diff --git a/common/config/rush/common-versions.json b/common/config/rush/common-versions.json index f8f8b7600cd..3043056da1b 100644 --- a/common/config/rush/common-versions.json +++ b/common/config/rush/common-versions.json @@ -24,44 +24,5 @@ * instead of the latest version. */ // "some-library": "1.2.3" - "webpack": "^5.56.0", - "@eslint/plugin-kit": "^0.3.4", - "on-headers": "^1.1.0", - "form-data": "^4.0.4", - "tmp": "^0.2.4" - }, - - /** - * When set to true, for all projects in the repo, all dependencies will be automatically added as preferredVersions, - * except in cases where different projects specify different version ranges for a given dependency. For older - * package managers, this tended to reduce duplication of indirect dependencies. However, it can sometimes cause - * trouble for indirect dependencies with incompatible peerDependencies ranges. - * - * The default value is true. If you're encountering installation errors related to peer dependencies, - * it's recommended to set this to false. - * - * After modifying this field, it's recommended to run "rush update --full" so that the package manager - * will recalculate all version selections. - */ - "implicitlyPreferredVersions": false, - - /** - * The "rush check" command can be used to enforce that every project in the repo must specify - * the same SemVer range for a given dependency. However, sometimes exceptions are needed. - * The allowedAlternativeVersions table allows you to list other SemVer ranges that will be - * accepted by "rush check" for a given dependency. - * - * IMPORTANT: THIS TABLE IS FOR *ADDITIONAL* VERSION RANGES THAT ARE ALTERNATIVES TO THE - * USUAL VERSION (WHICH IS INFERRED BY LOOKING AT ALL PROJECTS IN THE REPO). - * This design avoids unnecessary churn in this file. - */ - "allowedAlternativeVersions": { - /** - * For example, allow some projects to use an older TypeScript compiler - * (in addition to whatever "usual" version is being used by other projects in the repo): - */ - // "typescript": [ - // "~2.4.0" - // ] } } diff --git a/common/config/rush/pnpm-config.json b/common/config/rush/pnpm-config.json index d5247d39dce..8216e9fd8ca 100644 --- a/common/config/rush/pnpm-config.json +++ b/common/config/rush/pnpm-config.json @@ -89,13 +89,6 @@ * Ppnpmdocumentation: https://pnpm.io/package_json#pnpmoverrides */ "globalOverrides": { - "@modelcontextprotocol/sdk": "^1.25.2", - "tar-fs": "3.1.1", - "jws": "3.2.3", - "js-yaml": "^4.1.1", - "diff": "^8.0.3", - "undici": "^7.18.2", - "lodash": "4.17.23" // "example1": "^1.0.0", // "example2": "npm:@company/example2@^1.0.0" }, diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index ee48aacb65b..d0e1b8171ca 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -4,15 +4,6 @@ settings: autoInstallPeers: false excludeLinksFromLockfile: false -overrides: - '@modelcontextprotocol/sdk': ^1.25.2 - tar-fs: 3.1.1 - jws: 3.2.3 - js-yaml: ^4.1.1 - diff: ^8.0.3 - undici: ^7.18.2 - lodash: 4.17.23 - pnpmfileChecksum: sha256-XTeZQwJtKk4dimqf7175GhJCXrnq3Yh7+kwb86Bwcdo= importers: @@ -22,21 +13,21 @@ importers: ../../workspaces/api-designer/api-designer-core: dependencies: '@types/vscode-webview': - specifier: ^1.57.3 - version: 1.57.5 + specifier: 1.57.3 + version: 1.57.3 vscode-messenger-common: - specifier: ^0.4.5 + specifier: 0.4.5 version: 0.4.5 devDependencies: '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) typescript: specifier: 5.8.3 version: 5.8.3 @@ -47,20 +38,20 @@ importers: specifier: 11.6.1 version: 11.6.1 '@babel/core': - specifier: ^7.24.4 - version: 7.27.7 + specifier: 7.24.4 + version: 7.24.4 '@types/json-schema': specifier: 7.0.15 version: 7.0.15 '@types/lodash': - specifier: ~4.14.199 - version: 4.14.202 + specifier: 4.14.199 + version: 4.14.199 '@types/xml2js': - specifier: ~0.4.12 - version: 0.4.14 + specifier: 0.4.12 + version: 0.4.12 '@vscode/vsce': - specifier: ^3.7.0 - version: 3.7.1 + specifier: 3.7.0 + version: 3.7.0 '@wso2/api-designer-core': specifier: workspace:* version: link:../api-designer-core @@ -74,93 +65,93 @@ importers: specifier: workspace:* version: link:../../common-libs/font-wso2-vscode adm-zip: - specifier: ~0.5.14 - version: 0.5.16 + specifier: 0.5.14 + version: 0.5.14 axios: - specifier: ^1.13.5 + specifier: 1.13.5 version: 1.13.5 copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 cors-anywhere: - specifier: ^0.4.4 + specifier: 0.4.4 version: 0.4.4 js-yaml: - specifier: ^4.1.1 + specifier: 4.1.1 version: 4.1.1 json-schema: specifier: 0.4.0 version: 0.4.0 jsonix: - specifier: ~3.0.0 + specifier: 3.0.0 version: 3.0.0 lodash: specifier: 4.17.23 version: 4.17.23 node-fetch: - specifier: ~2.6.2 - version: 2.6.13(encoding@0.1.13) + specifier: 2.6.7 + version: 2.6.7(encoding@0.1.13) node-loader: - specifier: ~2.0.0 - version: 2.0.0(webpack@5.105.2) + specifier: 2.0.0 + version: 2.0.0(webpack@5.104.1) portfinder: - specifier: ^1.0.32 - version: 1.0.38 + specifier: 1.0.32 + version: 1.0.32 to-json-schema: specifier: 0.2.5 version: 0.2.5 vscode-messenger: - specifier: ^0.4.5 + specifier: 0.4.5 version: 0.4.5 vscode-messenger-common: - specifier: ^0.4.5 + specifier: 0.4.5 version: 0.4.5 xstate: - specifier: ^4.38.3 + specifier: 4.38.3 version: 4.38.3 devDependencies: '@types/js-yaml': - specifier: ~4.0.9 + specifier: 4.0.9 version: 4.0.9 '@types/node': specifier: 16.x version: 16.18.126 '@types/vscode': - specifier: ^1.81.0 - version: 1.109.0 + specifier: 1.81.0 + version: 1.81.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@vscode/test-electron': - specifier: ^2.3.4 - version: 2.5.2 + specifier: 2.3.4 + version: 2.3.4 eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) rimraf: - specifier: ~5.0.5 - version: 5.0.10 + specifier: 5.0.5 + version: 5.0.5 ts-loader: - specifier: ^9.4.4 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.4.4 + version: 9.4.4(typescript@5.8.3)(webpack@5.104.1) typescript: specifier: 5.8.3 version: 5.8.3 webpack: - specifier: ^5.94.0 - version: 5.105.2(webpack-cli@5.1.4) + specifier: 5.104.1 + version: 5.104.1(webpack-cli@5.1.4) webpack-cli: - specifier: ^5.1.4 - version: 5.1.4(webpack@5.105.2) + specifier: 5.1.4 + version: 5.1.4(webpack@5.104.1) ../../workspaces/api-designer/api-designer-rpc-client: dependencies: '@types/vscode-webview': - specifier: ^1.57.3 - version: 1.57.5 + specifier: 1.57.3 + version: 1.57.3 '@wso2/api-designer-core': specifier: workspace:* version: link:../api-designer-core @@ -171,10 +162,10 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) vscode-messenger-common: - specifier: ^0.4.5 + specifier: 0.4.5 version: 0.4.5 vscode-messenger-webview: - specifier: ^0.4.5 + specifier: 0.4.5 version: 0.4.5 devDependencies: '@types/react': @@ -185,13 +176,13 @@ importers: version: 18.2.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) typescript: specifier: 5.8.3 version: 5.8.3 @@ -199,29 +190,29 @@ importers: ../../workspaces/api-designer/api-designer-visualizer: dependencies: '@emotion/css': - specifier: ^11.10.5 - version: 11.13.5 + specifier: 11.10.5 + version: 11.10.5(@babel/core@7.29.0) '@emotion/react': - specifier: ^11.9.3 - version: 11.14.0(@types/react@18.2.0)(react@18.2.0) + specifier: 11.9.3 + version: 11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ^11.11.0 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.11.0 + version: 11.11.0(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@hookform/resolvers': - specifier: ~3.3.4 + specifier: 3.3.4 version: 3.3.4(react-hook-form@7.56.4(react@18.2.0)) '@mdxeditor/editor': - specifier: ~3.14.0 + specifier: 3.14.0 version: 3.14.0(@codemirror/language@6.11.3)(@lezer/highlight@1.2.3)(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/query-core': - specifier: ^4.0.0-beta.1 - version: 4.43.0 + specifier: 5.77.1 + version: 5.77.1 '@tanstack/react-query': - specifier: 4.0.10 - version: 4.0.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 5.77.1 + version: 5.77.1(react@18.2.0) '@vscode/webview-ui-toolkit': - specifier: ^1.2.0 - version: 1.4.0(react@18.2.0) + specifier: 1.2.0 + version: 1.2.0(react@18.2.0) '@wso2/api-designer-core': specifier: workspace:* version: link:../api-designer-core @@ -235,16 +226,16 @@ importers: specifier: workspace:* version: link:../../common-libs/ui-toolkit js-yaml: - specifier: ^4.1.1 + specifier: 4.1.1 version: 4.1.1 lodash: specifier: 4.17.23 version: 4.17.23 path: - specifier: ~0.12.7 + specifier: 0.12.7 version: 0.12.7 process: - specifier: ~0.11.10 + specifier: 0.11.10 version: 0.11.10 react: specifier: 18.2.0 @@ -256,42 +247,42 @@ importers: specifier: 7.56.4 version: 7.56.4(react@18.2.0) react-markdown: - specifier: ~9.0.1 - version: 9.0.3(@types/react@18.2.0)(react@18.2.0) + specifier: 9.0.1 + version: 9.0.1(@types/react@18.2.0)(react@18.2.0) yup: - specifier: ~1.4.0 + specifier: 1.4.0 version: 1.4.0 devDependencies: '@babel/plugin-syntax-flow': - specifier: ~7.22.5 - version: 7.22.5(@babel/core@7.27.7) + specifier: 7.22.5 + version: 7.22.5(@babel/core@7.29.0) '@babel/preset-typescript': - specifier: ~7.22.11 - version: 7.22.15(@babel/core@7.27.7) + specifier: 7.22.11 + version: 7.22.11(@babel/core@7.29.0) '@storybook/addon-actions': - specifier: ~7.4.0 - version: 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 7.4.0 + version: 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-essentials': - specifier: ~7.4.0 - version: 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 7.4.0 + version: 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/cli': - specifier: ^7.6.10 - version: 7.6.21(encoding@0.1.13) + specifier: 7.6.10 + version: 7.6.10(encoding@0.1.13) '@storybook/react': - specifier: ~7.4.0 - version: 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + specifier: 7.4.0 + version: 7.4.0(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/react-webpack5': - specifier: ~7.4.0 - version: 7.4.0(@babel/core@7.27.7)(@swc/helpers@0.5.19)(@types/webpack@5.28.5(webpack-cli@5.1.4))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1) + specifier: 7.4.0 + version: 7.4.0(@babel/core@7.29.0)(@swc/helpers@0.5.19)(@types/webpack@5.28.5(webpack-cli@5.1.4))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1) '@types/js-yaml': - specifier: ~4.0.9 + specifier: 4.0.9 version: 4.0.9 '@types/lodash': - specifier: ~4.14.198 - version: 4.14.202 + specifier: 4.14.198 + version: 4.14.198 '@types/node': - specifier: ^20.10.6 - version: 20.19.33 + specifier: 20.10.6 + version: 20.10.6 '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -299,80 +290,83 @@ importers: specifier: 18.2.0 version: 18.2.0 '@types/vscode-webview': - specifier: ~1.57.2 - version: 1.57.5 + specifier: 1.57.2 + version: 1.57.2 '@vscode/codicons': specifier: 0.0.44 version: 0.0.44 copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 css-loader: - specifier: ^5.2.7 - version: 5.2.7(webpack@5.105.2) + specifier: 5.2.7 + version: 5.2.7(webpack@5.104.1) sass-loader: - specifier: ^13.2.0 - version: 13.3.3(sass@1.97.3)(webpack@5.105.2) + specifier: 13.2.0 + version: 13.2.0(sass@1.89.0)(webpack@5.104.1) source-map-loader: - specifier: ^4.0.1 - version: 4.0.2(webpack@5.105.2) + specifier: 4.0.1 + version: 4.0.1(webpack@5.104.1) style-loader: - specifier: ^1.3.0 - version: 1.3.0(webpack@5.105.2) + specifier: 1.3.0 + version: 1.3.0(webpack@5.104.1) ts-loader: - specifier: ^9.5.0 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.0 + version: 9.5.0(typescript@5.8.3)(webpack@5.104.1) typescript: specifier: 5.8.3 version: 5.8.3 webpack: - specifier: ^5.94.0 - version: 5.105.2(webpack-cli@5.1.4) + specifier: 5.104.1 + version: 5.104.1(webpack-cli@5.1.4) webpack-cli: - specifier: ~5.1.4 - version: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.105.2) + specifier: 5.1.4 + version: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) webpack-dev-server: - specifier: ^5.2.1 - version: 5.2.3(webpack-cli@5.1.4)(webpack@5.105.2) + specifier: 5.2.3 + version: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1) ../../workspaces/apk/apk-extension: devDependencies: '@types/glob': - specifier: ^8.0.0 - version: 8.1.0 + specifier: 8.0.0 + version: 8.0.0 + '@types/minimatch': + specifier: 5.1.2 + version: 5.1.2 '@types/mocha': - specifier: ^10.0.1 - version: 10.0.10 + specifier: 10.0.1 + version: 10.0.1 '@types/node': - specifier: ^18.11.19 - version: 18.19.130 + specifier: 18.11.19 + version: 18.11.19 '@types/vscode': - specifier: ^1.63.0 - version: 1.109.0 + specifier: 1.63.0 + version: 1.63.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@vscode/test-electron': - specifier: ^2.3.2 - version: 2.5.2 + specifier: 2.3.2 + version: 2.3.2 '@vscode/vsce': - specifier: ^3.7.0 - version: 3.7.1 + specifier: 3.7.0 + version: 3.7.0 copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) glob: - specifier: ^11.1.0 + specifier: 11.1.0 version: 11.1.0 mocha: - specifier: ^10.2.0 - version: 10.8.2 + specifier: 10.2.0 + version: 10.2.0 typescript: specifier: 5.8.3 version: 5.8.3 @@ -380,72 +374,75 @@ importers: ../../workspaces/ballerina/ballerina-core: dependencies: '@types/mousetrap': - specifier: ~1.6.11 - version: 1.6.15 + specifier: 1.6.11 + version: 1.6.11 '@types/vscode-webview': - specifier: ^1.57.3 - version: 1.57.5 + specifier: 1.57.3 + version: 1.57.3 '@types/ws': - specifier: ^8.2.1 - version: 8.18.1 + specifier: 8.2.1 + version: 8.2.1 '@wso2/syntax-tree': specifier: workspace:* version: link:../syntax-tree + '@wso2/wso2-platform-core': + specifier: workspace:* + version: link:../../wso2-platform/wso2-platform-core handlebars: - specifier: ~4.7.8 + specifier: 4.7.8 version: 4.7.8 isomorphic-ws: - specifier: ^5.0.0 + specifier: 5.0.0 version: 5.0.0(ws@8.19.0) mousetrap: - specifier: ^1.6.5 + specifier: 1.6.5 version: 1.6.5 react: specifier: 18.2.0 version: 18.2.0 tree-kill: - specifier: ^1.2.2 + specifier: 1.2.2 version: 1.2.2 vscode-jsonrpc: - specifier: ^8.2.1 + specifier: 8.2.1 version: 8.2.1 vscode-languageserver-protocol: - specifier: ^3.17.5 + specifier: 3.17.5 version: 3.17.5 vscode-languageserver-types: - specifier: ^3.17.5 + specifier: 3.17.5 version: 3.17.5 vscode-messenger-common: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 vscode-uri: - specifier: ^3.0.8 - version: 3.1.0 + specifier: 3.0.8 + version: 3.0.8 vscode-ws-jsonrpc: - specifier: ^3.4.0 - version: 3.5.0 + specifier: 3.4.0 + version: 3.4.0 devDependencies: '@types/node': - specifier: ^22.15.21 - version: 22.15.35 + specifier: 22.15.21 + version: 22.15.21 '@types/react': specifier: 18.2.0 version: 18.2.0 '@types/vscode': - specifier: ^1.83.1 - version: 1.109.0 + specifier: 1.100.0 + version: 1.100.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) typescript: specifier: 5.8.3 version: 5.8.3 @@ -453,22 +450,25 @@ importers: ../../workspaces/ballerina/ballerina-extension: dependencies: '@ai-sdk/amazon-bedrock': - specifier: ^4.0.4 - version: 4.0.59(zod@4.1.11) + specifier: 4.0.67 + version: 4.0.67(zod@4.1.8) '@ai-sdk/anthropic': - specifier: ^3.0.2 - version: 3.0.43(zod@4.1.11) + specifier: 3.0.48 + version: 3.0.48(zod@4.1.8) + '@ai-sdk/google-vertex': + specifier: 4.0.66 + version: 4.0.66(zod@4.1.8) '@iarna/toml': - specifier: ^2.2.5 + specifier: 2.2.5 version: 2.2.5 '@types/lodash': - specifier: ^4.14.200 - version: 4.17.17 + specifier: 4.14.200 + version: 4.14.200 '@vscode/test-electron': - specifier: ^2.5.2 + specifier: 2.5.2 version: 2.5.2 '@vscode/vsce': - specifier: ^3.7.0 + specifier: 3.7.1 version: 3.7.1 '@wso2/ballerina-core': specifier: workspace:* @@ -489,28 +489,28 @@ importers: specifier: workspace:* version: link:../../wso2-platform/wso2-platform-core ai: - specifier: ^6.0.7 - version: 6.0.86(zod@4.1.11) + specifier: 6.0.103 + version: 6.0.103(zod@4.1.8) cors-anywhere: - specifier: ^0.4.4 + specifier: 0.4.4 version: 0.4.4 del-cli: - specifier: ^5.1.0 + specifier: 5.1.0 version: 5.1.0 dotenv: - specifier: ~16.5.0 + specifier: 16.5.0 version: 16.5.0 file-uri-to-path: - specifier: ^2.0.0 + specifier: 2.0.0 version: 2.0.0 glob: - specifier: ^11.1.0 + specifier: 11.1.0 version: 11.1.0 handlebars: - specifier: ~4.7.8 + specifier: 4.7.8 version: 4.7.8 jwt-decode: - specifier: ^4.0.0 + specifier: 4.0.0 version: 4.0.0 lodash: specifier: 4.17.23 @@ -519,167 +519,173 @@ importers: specifier: 0.13.1-next.9 version: 0.13.1-next.9 node-fetch: - specifier: ^3.3.2 + specifier: 3.3.2 version: 3.3.2 node-schedule: - specifier: ^2.1.1 + specifier: 2.1.1 version: 2.1.1 portfinder: - specifier: ^1.0.32 - version: 1.0.38 + specifier: 1.0.32 + version: 1.0.32 protobufjs: - specifier: ^7.2.5 - version: 7.5.4 + specifier: 7.2.5 + version: 7.2.5 source-map-support: - specifier: ^0.5.21 + specifier: 0.5.21 version: 0.5.21 unzipper: - specifier: ~0.12.3 + specifier: 0.12.3 version: 0.12.3 uuid: - specifier: ^11.1.0 + specifier: 11.1.0 version: 11.1.0 vscode-debugadapter: - specifier: ^1.51.0 + specifier: 1.51.0 version: 1.51.0 vscode-debugprotocol: - specifier: ^1.51.0 + specifier: 1.51.0 version: 1.51.0 vscode-extension-telemetry: - specifier: ^0.1.7 + specifier: 0.1.7 version: 0.1.7 vscode-languageclient: - specifier: ^8.1.0 + specifier: 8.1.0 version: 8.1.0 vscode-languageserver-protocol: - specifier: ^3.17.5 + specifier: 3.17.5 version: 3.17.5 vscode-languageserver-types: - specifier: ^3.17.5 + specifier: 3.17.5 version: 3.17.5 vscode-messenger: - specifier: ^0.4.5 + specifier: 0.4.5 version: 0.4.5 vscode-messenger-common: - specifier: ^0.4.5 + specifier: 0.4.5 version: 0.4.5 vscode-test: - specifier: ^1.6.1 + specifier: 1.6.1 version: 1.6.1 vscode-uri: - specifier: ^3.0.8 - version: 3.1.0 + specifier: 3.0.8 + version: 3.0.8 xml-js: - specifier: ^1.6.11 + specifier: 1.6.11 version: 1.6.11 xstate: - specifier: ^4.38.3 + specifier: 4.38.3 version: 4.38.3 zod: - specifier: ^4.1.8 - version: 4.1.11 + specifier: 4.1.8 + version: 4.1.8 + zustand: + specifier: 5.0.5 + version: 5.0.5(@types/react@18.2.0)(react@19.1.0)(use-sync-external-store@1.6.0(react@19.1.0)) devDependencies: '@sentry/webpack-plugin': - specifier: ^1.20.1 - version: 1.21.0(encoding@0.1.13) + specifier: 1.20.1 + version: 1.20.1(encoding@0.1.13) '@types/chai': - specifier: ^4.3.9 - version: 4.3.20 + specifier: 4.3.9 + version: 4.3.9 + '@types/js-yaml': + specifier: 4.0.9 + version: 4.0.9 '@types/mocha': - specifier: ~10.0.3 - version: 10.0.10 + specifier: 10.0.3 + version: 10.0.3 '@types/node': - specifier: ^18.18.7 - version: 18.19.130 + specifier: 18.18.7 + version: 18.18.7 '@types/tcp-port-used': - specifier: ^1.0.3 - version: 1.0.4 + specifier: 1.0.3 + version: 1.0.3 '@types/vscode': - specifier: ^1.83.1 - version: 1.109.0 + specifier: 1.100.0 + version: 1.100.0 '@types/vscode-notebook-renderer': - specifier: ~1.72.2 - version: 1.72.4 + specifier: 1.72.2 + version: 1.72.2 adm-zip: - specifier: ^0.5.16 + specifier: 0.5.16 version: 0.5.16 axios: - specifier: ^1.13.5 + specifier: 1.13.5 version: 1.13.5 chai: - specifier: ^4.3.10 - version: 4.5.0 + specifier: 4.3.10 + version: 4.3.10 copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 cross-env: - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3 decache: - specifier: ^4.6.2 + specifier: 4.6.2 version: 4.6.2 express: - specifier: ^4.22.1 + specifier: 4.22.1 version: 4.22.1 istanbul: - specifier: ^0.4.5 + specifier: 0.4.5 version: 0.4.5 js-yaml: - specifier: ^4.1.1 + specifier: 4.1.1 version: 4.1.1 keytar: - specifier: ^7.9.0 + specifier: 7.9.0 version: 7.9.0 kill-port: specifier: 2.0.1 version: 2.0.1 mocha: - specifier: ^10.2.0 - version: 10.8.2 + specifier: 10.2.0 + version: 10.2.0 pako: - specifier: ^2.1.0 + specifier: 2.1.0 version: 2.1.0 pkce-challenge: - specifier: ^3.1.0 + specifier: 3.1.0 version: 3.1.0 remap-istanbul: - specifier: ^0.13.0 + specifier: 0.13.0 version: 0.13.0 rimraf: - specifier: ^3.0.2 + specifier: 3.0.2 version: 3.0.2 tcp-port-used: - specifier: ^1.0.2 + specifier: 1.0.2 version: 1.0.2 ts-loader: - specifier: ^9.5.0 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.0 + version: 9.5.0(typescript@5.8.3)(webpack@5.104.1) tslint: - specifier: ^6.1.3 + specifier: 6.1.3 version: 6.1.3(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 vscode-debugadapter-testsupport: - specifier: ^1.51.0 + specifier: 1.51.0 version: 1.51.0 vscode-extension-tester: - specifier: ^5.10.0 - version: 5.10.0(mocha@10.8.2)(typescript@5.8.3) + specifier: 5.10.0 + version: 5.10.0(mocha@10.2.0)(typescript@5.8.3) webpack: - specifier: ^5.94.0 - version: 5.105.2(webpack-cli@6.0.1) + specifier: 5.104.1 + version: 5.104.1(webpack-cli@6.0.1) webpack-cli: - specifier: ^6.0.1 - version: 6.0.1(webpack@5.105.2) + specifier: 6.0.1 + version: 6.0.1(webpack@5.104.1) yarn: - specifier: ^1.22.19 - version: 1.22.22 + specifier: 1.22.19 + version: 1.22.19 ../../workspaces/ballerina/ballerina-low-code-diagram: dependencies: '@date-io/date-fns': - specifier: ^3.2.1 + specifier: 3.2.1 version: 3.2.1(date-fns@4.1.0) '@wso2/ballerina-core': specifier: workspace:* @@ -688,46 +694,46 @@ importers: specifier: workspace:* version: link:../syntax-tree classnames: - specifier: ^2.5.1 + specifier: 2.5.1 version: 2.5.1 clipboard-copy: - specifier: ^4.0.1 + specifier: 4.0.1 version: 4.0.1 clsx: - specifier: ^2.1.1 + specifier: 2.1.1 version: 2.1.1 cron-validator: specifier: 1.3.1 version: 1.3.1 date-fns: - specifier: ^4.1.0 + specifier: 4.1.0 version: 4.1.0 date-fns-tz: - specifier: ^3.2.0 + specifier: 3.2.0 version: 3.2.0(date-fns@4.1.0) dexie: - specifier: ^4.0.11 - version: 4.3.0 + specifier: 4.0.11 + version: 4.0.11 graphql: - specifier: ^16.11.0 - version: 16.12.0 + specifier: 16.11.0 + version: 16.11.0 handlebars: - specifier: ^4.7.8 + specifier: 4.7.8 version: 4.7.8 jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + specifier: 29.7.0 + version: 29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) joi: - specifier: ^17.13.3 + specifier: 17.13.3 version: 17.13.3 lodash.camelcase: - specifier: ^4.3.0 + specifier: 4.3.0 version: 4.3.0 lodash.clonedeep: - specifier: ^4.5.0 + specifier: 4.5.0 version: 4.5.0 lodash.debounce: - specifier: ^4.0.8 + specifier: 4.0.8 version: 4.0.8 monaco-editor: specifier: 0.52.2 @@ -739,69 +745,69 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) react-intl: - specifier: ^7.1.11 - version: 7.1.14(react@18.2.0)(typescript@5.8.3) + specifier: 7.1.11 + version: 7.1.11(react@18.2.0)(typescript@5.8.3) react-lottie: - specifier: ^1.2.10 + specifier: 1.2.10 version: 1.2.10(react@18.2.0) react-zoom-pan-pinch: - specifier: ^3.7.0 + specifier: 3.7.0 version: 3.7.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) uuid: - specifier: ^11.1.0 + specifier: 11.1.0 version: 11.1.0 vscode-languageserver-protocol: - specifier: ^3.17.5 + specifier: 3.17.5 version: 3.17.5 devDependencies: '@babel/core': - specifier: ^7.27.1 - version: 7.27.7 + specifier: 7.27.1 + version: 7.27.1 '@babel/preset-env': - specifier: ^7.27.2 - version: 7.27.2(@babel/core@7.27.7) + specifier: 7.27.2 + version: 7.27.2(@babel/core@7.27.1) '@rollup/plugin-commonjs': - specifier: ^28.0.3 - version: 28.0.9(rollup@4.57.1) + specifier: 28.0.3 + version: 28.0.3(rollup@4.41.0) '@rollup/plugin-json': - specifier: ^6.1.0 - version: 6.1.0(rollup@4.57.1) + specifier: 6.1.0 + version: 6.1.0(rollup@4.41.0) '@rollup/plugin-node-resolve': - specifier: ^16.0.1 - version: 16.0.3(rollup@4.57.1) + specifier: 16.0.1 + version: 16.0.1(rollup@4.41.0) '@storybook/addon-actions': - specifier: ^6.5.16 + specifier: 6.5.16 version: 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-essentials': - specifier: ^6.5.16 - version: 6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.105.2) + specifier: 6.5.16 + version: 6.5.16(@babel/core@7.27.1)(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.18(@swc/helpers@0.5.19))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.104.1) '@storybook/addon-links': - specifier: ^6.5.16 + specifier: 6.5.16 version: 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/builder-webpack5': - specifier: ^6.5.16 - version: 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + specifier: 6.5.16 + version: 6.5.16(@swc/core@1.15.18(@swc/helpers@0.5.19))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/manager-webpack5': - specifier: ^6.5.9 - version: 6.5.9(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + specifier: 6.5.9 + version: 6.5.9(@swc/core@1.15.18(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/react': - specifier: ^6.5.16 - version: 6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.9(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/webpack@5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1) + specifier: 6.5.16 + version: 6.5.16(@babel/core@7.27.1)(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.18(@swc/helpers@0.5.19))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.9(@swc/core@1.15.18(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/webpack@5.28.5(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1) '@types/classnames': - specifier: ^2.2.9 - version: 2.3.4 + specifier: 2.2.9 + version: 2.2.9 '@types/handlebars': - specifier: ^4.1.0 + specifier: 4.1.0 version: 4.1.0 '@types/lodash.camelcase': - specifier: ^4.3.0 - version: 4.3.9 + specifier: 4.3.0 + version: 4.3.0 '@types/lodash.clonedeep': - specifier: ^4.5.6 - version: 4.5.9 + specifier: 4.5.6 + version: 4.5.6 '@types/lodash.debounce': - specifier: ^4.0.6 - version: 4.0.9 + specifier: 4.0.6 + version: 4.0.6 '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -809,128 +815,131 @@ importers: specifier: 18.2.0 version: 18.2.0 '@types/react-lottie': - specifier: ^1.2.10 + specifier: 1.2.10 version: 1.2.10 '@types/uuid': - specifier: ^10.0.0 + specifier: 10.0.0 version: 10.0.0 '@types/webpack': - specifier: ^5.28.5 - version: 5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + specifier: 5.28.5 + version: 5.28.5(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) babel-loader: - specifier: ^10.0.0 - version: 10.0.0(@babel/core@7.27.7)(webpack@5.105.2) + specifier: 10.0.0 + version: 10.0.0(@babel/core@7.27.1)(webpack@5.104.1) copy-webpack-plugin: - specifier: ^13.0.0 - version: 13.0.1(webpack@5.105.2) + specifier: 13.0.0 + version: 13.0.0(webpack@5.104.1) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 css-loader: - specifier: ^7.1.2 - version: 7.1.3(webpack@5.105.2) + specifier: 7.1.2 + version: 7.1.2(webpack@5.104.1) express: - specifier: ^4.22.1 + specifier: 4.22.1 version: 4.22.1 file-loader: - specifier: ^6.2.0 - version: 6.2.0(webpack@5.105.2) + specifier: 6.2.0 + version: 6.2.0(webpack@5.104.1) fork-ts-checker-webpack-plugin: - specifier: ^9.1.0 - version: 9.1.0(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.1.0 + version: 9.1.0(typescript@5.8.3)(webpack@5.104.1) glob: - specifier: ^11.1.0 + specifier: 11.1.0 version: 11.1.0 react-scripts-ts: - specifier: ^3.1.0 - version: 3.1.0(@swc/core@1.15.11(@swc/helpers@0.5.19))(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(babel-runtime@6.26.0)(typescript@5.8.3)(webpack-cli@6.0.1) + specifier: 3.1.0 + version: 3.1.0(babel-core@7.0.0-bridge.0(@babel/core@7.27.1))(babel-runtime@6.26.0)(typescript@5.8.3) react-test-renderer: - specifier: ^19.1.0 - version: 19.1.5(react@18.2.0) + specifier: 19.1.0 + version: 19.1.0(react@18.2.0) rimraf: - specifier: ^6.0.1 + specifier: 6.0.1 version: 6.0.1 rollup: - specifier: ^4.41.0 - version: 4.57.1 + specifier: 4.41.0 + version: 4.41.0 rollup-plugin-import-css: - specifier: ^3.5.8 - version: 3.5.8(rollup@4.57.1) + specifier: 3.5.8 + version: 3.5.8(rollup@4.41.0) rollup-plugin-peer-deps-external: - specifier: ^2.2.4 - version: 2.2.4(rollup@4.57.1) + specifier: 2.2.4 + version: 2.2.4(rollup@4.41.0) rollup-plugin-postcss: - specifier: ^4.0.2 - version: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + specifier: 4.0.2 + version: 4.0.2(postcss@8.5.4)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) rollup-plugin-scss: - specifier: ^4.0.1 + specifier: 4.0.1 version: 4.0.1 rollup-plugin-svg: - specifier: ^2.0.0 + specifier: 2.0.0 version: 2.0.0 rollup-plugin-typescript2: - specifier: ^0.36.0 - version: 0.36.0(rollup@4.57.1)(typescript@5.8.3) + specifier: 0.36.0 + version: 0.36.0(rollup@4.41.0)(typescript@5.8.3) sass: - specifier: ^1.89.0 - version: 1.97.3 + specifier: 1.89.0 + version: 1.89.0 sass-loader: - specifier: ^16.0.5 - version: 16.0.7(sass@1.97.3)(webpack@5.105.2) + specifier: 16.0.5 + version: 16.0.5(sass@1.89.0)(webpack@5.104.1) storybook: - specifier: ^8.6.14 - version: 8.6.15(prettier@3.5.3) + specifier: 8.6.14 + version: 8.6.14(prettier@3.5.3) style-loader: - specifier: ^4.0.0 - version: 4.0.0(webpack@5.105.2) + specifier: 4.0.0 + version: 4.0.0(webpack@5.104.1) stylelint: - specifier: ^16.19.1 - version: 16.26.1(typescript@5.8.3) + specifier: 16.19.1 + version: 16.19.1(typescript@5.8.3) stylelint-config-standard: - specifier: ^38.0.0 - version: 38.0.0(stylelint@16.26.1(typescript@5.8.3)) + specifier: 38.0.0 + version: 38.0.0(stylelint@16.19.1(typescript@5.8.3)) svg-url-loader: - specifier: ^8.0.0 - version: 8.0.0(webpack@5.105.2) + specifier: 8.0.0 + version: 8.0.0(webpack@5.104.1) ts-loader: - specifier: ^9.5.2 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.2 + version: 9.5.2(typescript@5.8.3)(webpack@5.104.1) tslib: - specifier: ^2.8.1 + specifier: 2.8.1 version: 2.8.1 tslint: - specifier: ^6.1.3 + specifier: 6.1.3 version: 6.1.3(typescript@5.8.3) tslint-react: - specifier: ^5.0.0 + specifier: 5.0.0 version: 5.0.0(tslint@6.1.3(typescript@5.8.3))(typescript@5.8.3) tslint-react-hooks: - specifier: ^2.2.2 + specifier: 2.2.2 version: 2.2.2(tslint@6.1.3(typescript@5.8.3))(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 webpack: - specifier: ^5.94.0 - version: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + specifier: 5.104.1 + version: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) webpack-cli: - specifier: ^6.0.1 - version: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.105.2) + specifier: 6.0.1 + version: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.104.1) webpack-dev-server: - specifier: ^5.2.1 - version: 5.2.3(webpack-cli@6.0.1)(webpack@5.105.2) + specifier: 5.2.3 + version: 5.2.3(webpack-cli@6.0.1)(webpack@5.104.1) ../../workspaces/ballerina/ballerina-rpc-client: dependencies: '@types/vscode-webview': - specifier: ^1.57.3 - version: 1.57.5 + specifier: 1.57.3 + version: 1.57.3 '@wso2/ballerina-core': specifier: workspace:* version: link:../ballerina-core '@wso2/syntax-tree': specifier: workspace:* version: link:../syntax-tree + '@wso2/wso2-platform-core': + specifier: workspace:* + version: link:../../wso2-platform/wso2-platform-core monaco-editor: specifier: 0.44.0 version: 0.44.0 @@ -941,13 +950,13 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) vscode-languageserver-types: - specifier: ^3.17.5 + specifier: 3.17.5 version: 3.17.5 vscode-messenger-common: - specifier: ^0.4.5 + specifier: 0.4.5 version: 0.4.5 vscode-messenger-webview: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 devDependencies: '@types/react': @@ -958,22 +967,22 @@ importers: version: 18.2.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) eslint-plugin-react-hooks: - specifier: ^5.2.0 - version: 5.2.0(eslint@9.39.3(jiti@2.6.1)) + specifier: 5.2.0 + version: 5.2.0(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-react-refresh: - specifier: ^0.4.20 - version: 0.4.20(eslint@9.39.3(jiti@2.6.1)) + specifier: 0.4.20 + version: 0.4.20(eslint@9.39.4(jiti@2.6.1)) typescript: specifier: 5.8.3 version: 5.8.3 @@ -981,40 +990,40 @@ importers: ../../workspaces/ballerina/ballerina-side-panel: dependencies: '@codemirror/autocomplete': - specifier: ~6.19.1 + specifier: 6.19.1 version: 6.19.1 '@codemirror/commands': - specifier: ~6.10.0 - version: 6.10.2 + specifier: 6.10.0 + version: 6.10.0 '@codemirror/lang-sql': - specifier: ~6.10.0 + specifier: 6.10.0 version: 6.10.0 '@codemirror/language': - specifier: ~6.11.3 + specifier: 6.11.3 version: 6.11.3 '@codemirror/language-data': - specifier: ~6.5.2 + specifier: 6.5.2 version: 6.5.2 '@codemirror/lint': - specifier: ~6.8.1 - version: 6.8.5 + specifier: 6.8.1 + version: 6.8.1 '@codemirror/state': - specifier: ~6.5.2 - version: 6.5.4 + specifier: 6.5.2 + version: 6.5.2 '@codemirror/view': - specifier: ~6.38.6 + specifier: 6.38.8 version: 6.38.8 '@emotion/react': - specifier: ^11.14.0 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ^11.14.0 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@github/markdown-toolbar-element': - specifier: ^2.2.3 + specifier: 2.2.3 version: 2.2.3 '@lezer/highlight': - specifier: ~1.2.3 + specifier: 1.2.3 version: 1.2.3 '@wso2/ballerina-core': specifier: workspace:* @@ -1025,45 +1034,48 @@ importers: '@wso2/ui-toolkit': specifier: workspace:* version: link:../../common-libs/ui-toolkit + '@wso2/wso2-platform-core': + specifier: workspace:* + version: link:../../wso2-platform/wso2-platform-core lodash: specifier: 4.17.23 version: 4.17.23 markdown-it: - specifier: ~14.1.0 + specifier: 14.1.1 version: 14.1.1 prosemirror-commands: - specifier: ~1.7.1 + specifier: 1.7.1 version: 1.7.1 prosemirror-gapcursor: - specifier: ~1.4.0 + specifier: 1.4.0 version: 1.4.0 prosemirror-history: - specifier: ~1.5.0 + specifier: 1.5.0 version: 1.5.0 prosemirror-inputrules: - specifier: ~1.5.1 + specifier: 1.5.1 version: 1.5.1 prosemirror-keymap: - specifier: ~1.2.2 - version: 1.2.3 + specifier: 1.2.2 + version: 1.2.2 prosemirror-markdown: - specifier: ~1.13.2 - version: 1.13.4 + specifier: 1.13.2 + version: 1.13.2 prosemirror-model: - specifier: ~1.25.4 + specifier: 1.25.4 version: 1.25.4 prosemirror-schema-basic: - specifier: ~1.2.2 - version: 1.2.4 + specifier: 1.2.2 + version: 1.2.2 prosemirror-schema-list: - specifier: ~1.5.1 + specifier: 1.5.1 version: 1.5.1 prosemirror-state: - specifier: ~1.4.3 - version: 1.4.4 + specifier: 1.4.3 + version: 1.4.3 prosemirror-view: - specifier: ~1.41.3 - version: 1.41.6 + specifier: 1.41.3 + version: 1.41.3 react: specifier: 18.2.0 version: 18.2.0 @@ -1074,21 +1086,21 @@ importers: specifier: 7.56.4 version: 7.56.4(react@18.2.0) react-markdown: - specifier: ~10.1.0 + specifier: 10.1.0 version: 10.1.0(@types/react@18.2.0)(react@18.2.0) rehype-raw: - specifier: ^7.0.0 + specifier: 7.0.0 version: 7.0.0 remark-gfm: - specifier: ^4.0.1 + specifier: 4.0.1 version: 4.0.1 devDependencies: '@storybook/react': - specifier: ^6.5.16 - version: 6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.3(webpack@5.105.2))(webpack-hot-middleware@2.26.1) + specifier: 6.5.16 + version: 6.5.16(@babel/core@7.29.0)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.3(webpack@5.104.1))(webpack-hot-middleware@2.26.1) '@types/lodash': - specifier: ~4.17.16 - version: 4.17.17 + specifier: 4.17.16 + version: 4.17.16 '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -1096,7 +1108,7 @@ importers: specifier: 18.2.0 version: 18.2.0 copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 typescript: specifier: 5.8.3 @@ -1104,32 +1116,44 @@ importers: ../../workspaces/ballerina/ballerina-visualizer: dependencies: + '@dnd-kit/core': + specifier: 6.1.0 + version: 6.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@dnd-kit/sortable': + specifier: 8.0.0 + version: 8.0.0(@dnd-kit/core@6.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0) + '@dnd-kit/utilities': + specifier: 3.2.2 + version: 3.2.2(react@18.2.0) '@emotion/css': - specifier: ^11.13.5 + specifier: 11.13.5 version: 11.13.5 '@emotion/react': - specifier: ^11.14.0 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ^11.14.0 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@headlessui/react': - specifier: ~2.2.4 - version: 2.2.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 2.2.4 + version: 2.2.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@hookform/resolvers': - specifier: ~5.0.1 + specifier: 5.0.1 version: 5.0.1(react-hook-form@7.56.4(react@18.2.0)) '@tanstack/query-core': - specifier: ^5.77.1 - version: 5.90.20 + specifier: 5.77.1 + version: 5.77.1 '@tanstack/react-query': specifier: 5.77.1 version: 5.77.1(react@18.2.0) + '@tanstack/react-query-persist-client': + specifier: 5.77.1 + version: 5.77.1(@tanstack/react-query@5.77.1(react@18.2.0))(react@18.2.0) '@types/lodash': - specifier: ~4.17.16 - version: 4.17.17 + specifier: 4.17.16 + version: 4.17.16 '@vscode/webview-ui-toolkit': - specifier: ^1.4.0 + specifier: 1.4.0 version: 1.4.0(react@18.2.0) '@wso2/ballerina-core': specifier: workspace:* @@ -1185,20 +1209,29 @@ importers: '@wso2/wso2-platform-core': specifier: workspace:* version: link:../../wso2-platform/wso2-platform-core + framer-motion: + specifier: ^11.0.0 + version: 11.18.2(@emotion/is-prop-valid@1.4.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) highlight.js: - specifier: ^11.11.1 + specifier: 11.11.1 version: 11.11.1 + js-yaml: + specifier: 4.1.1 + version: 4.1.1 + katex: + specifier: ^0.16.27 + version: 0.16.38 lodash: specifier: 4.17.23 version: 4.17.23 lodash.debounce: - specifier: ^4.0.8 + specifier: 4.0.8 version: 4.0.8 react: specifier: 18.2.0 version: 18.2.0 react-collapse: - specifier: ~5.1.1 + specifier: 5.1.1 version: 5.1.1(react@18.2.0) react-dom: specifier: 18.2.0 @@ -1207,125 +1240,143 @@ importers: specifier: 7.56.4 version: 7.56.4(react@18.2.0) react-lottie: - specifier: ^1.2.10 + specifier: 1.2.10 version: 1.2.10(react@18.2.0) react-markdown: - specifier: ~10.1.0 + specifier: 10.1.0 version: 10.1.0(@types/react@18.2.0)(react@18.2.0) react-syntax-highlighter: - specifier: ~15.6.1 - version: 15.6.6(react@18.2.0) + specifier: 15.6.1 + version: 15.6.1(react@18.2.0) + rehype-katex: + specifier: ^7.0.1 + version: 7.0.1 rehype-raw: specifier: ^7.0.0 version: 7.0.0 remark-breaks: specifier: ~4.0.0 version: 4.0.0 + remark-gfm: + specifier: ^4.0.1 + version: 4.0.1 + remark-math: + specifier: ^6.0.0 + version: 6.0.0 + swagger-ui-react: + specifier: 5.22.0 + version: 5.22.0(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) vscode-uri: - specifier: ^3.1.0 + specifier: 3.1.0 version: 3.1.0 yup: - specifier: ~1.6.1 + specifier: 1.6.1 version: 1.6.1 devDependencies: + '@types/js-yaml': + specifier: 4.0.5 + version: 4.0.5 '@types/lodash.debounce': - specifier: ^4.0.6 - version: 4.0.9 + specifier: 4.0.6 + version: 4.0.6 '@types/react': specifier: 18.2.0 version: 18.2.0 '@types/react-collapse': - specifier: ~5.0.4 + specifier: 5.0.4 version: 5.0.4 '@types/react-dom': specifier: 18.2.0 version: 18.2.0 '@types/react-lottie': - specifier: ^1.2.5 - version: 1.2.10 + specifier: 1.2.5 + version: 1.2.5 '@types/react-syntax-highlighter': - specifier: ~15.5.13 + specifier: 15.5.13 version: 15.5.13 + '@types/swagger-ui-react': + specifier: 5.18.0 + version: 5.18.0 '@types/vscode-webview': - specifier: ~1.57.5 + specifier: 1.57.5 version: 1.57.5 '@types/webpack': - specifier: ^5.28.5 + specifier: 5.28.5 version: 5.28.5(webpack-cli@5.1.4) '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) buffer: - specifier: ^6.0.3 + specifier: 6.0.3 version: 6.0.3 copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 css-loader: - specifier: ^7.1.2 - version: 7.1.3(webpack@5.105.2) + specifier: 7.1.2 + version: 7.1.2(webpack@5.104.1) eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) eslint-plugin-react-hooks: - specifier: ^5.2.0 - version: 5.2.0(eslint@9.39.3(jiti@2.6.1)) + specifier: 5.2.0 + version: 5.2.0(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-react-refresh: - specifier: ^0.4.20 - version: 0.4.20(eslint@9.39.3(jiti@2.6.1)) + specifier: 0.4.20 + version: 0.4.20(eslint@9.39.4(jiti@2.6.1)) sass-loader: - specifier: ^16.0.5 - version: 16.0.7(sass@1.97.3)(webpack@5.105.2) + specifier: 16.0.5 + version: 16.0.5(sass@1.89.0)(webpack@5.104.1) source-map-loader: - specifier: ^5.0.0 - version: 5.0.0(webpack@5.105.2) + specifier: 5.0.0 + version: 5.0.0(webpack@5.104.1) style-loader: - specifier: ^4.0.0 - version: 4.0.0(webpack@5.105.2) + specifier: 4.0.0 + version: 4.0.0(webpack@5.104.1) ts-loader: - specifier: ^9.5.2 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.2 + version: 9.5.2(typescript@5.8.3)(webpack@5.104.1) typescript: specifier: 5.8.3 version: 5.8.3 webpack: - specifier: ^5.94.0 - version: 5.105.2(webpack-cli@5.1.4) + specifier: 5.104.1 + version: 5.104.1(webpack-cli@5.1.4) webpack-cli: - specifier: ^5.1.4 - version: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.105.2) + specifier: 5.1.4 + version: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) webpack-dev-server: - specifier: ^5.2.1 - version: 5.2.3(webpack-cli@5.1.4)(webpack@5.105.2) + specifier: 5.2.3 + version: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1) ../../workspaces/ballerina/bi-diagram: dependencies: '@emotion/react': - specifier: ^11.9.3 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ^11.10.5 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@projectstorm/geometry': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4 '@projectstorm/react-canvas-core': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4(lodash@4.17.23)(react@18.2.0) '@projectstorm/react-diagrams': - specifier: ^7.0.4 + specifier: 7.0.4 version: 7.0.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@projectstorm/react-diagrams-core': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@projectstorm/react-diagrams-defaults': - specifier: ^7.1.3 + specifier: 7.1.3 version: 7.1.3(@types/react@18.2.0) '@projectstorm/react-diagrams-routing': - specifier: ^7.1.3 + specifier: 7.1.3 version: 7.1.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@wso2/ballerina-core': specifier: workspace:* @@ -1337,7 +1388,7 @@ importers: specifier: workspace:* version: link:../../common-libs/ui-toolkit dagre: - specifier: ~0.8.5 + specifier: 0.8.5 version: 0.8.5 lodash: specifier: 4.17.23 @@ -1352,42 +1403,42 @@ importers: specifier: 7.56.4 version: 7.56.4(react@18.2.0) react-markdown: - specifier: ~10.1.0 + specifier: 10.1.0 version: 10.1.0(@types/react@18.2.0)(react@18.2.0) devDependencies: '@babel/core': - specifier: ~7.27.1 - version: 7.27.7 + specifier: 7.27.1 + version: 7.27.1 '@babel/preset-env': - specifier: ~7.27.2 - version: 7.27.2(@babel/core@7.27.7) + specifier: 7.27.2 + version: 7.27.2(@babel/core@7.27.1) '@babel/preset-react': - specifier: ~7.27.1 - version: 7.27.1(@babel/core@7.27.7) + specifier: 7.27.1 + version: 7.27.1(@babel/core@7.27.1) '@babel/preset-typescript': - specifier: ~7.27.1 - version: 7.27.1(@babel/core@7.27.7) + specifier: 7.27.1 + version: 7.27.1(@babel/core@7.27.1) '@storybook/react': - specifier: ^6.3.7 - version: 6.5.16(@babel/core@7.27.7)(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/webpack@5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.19)))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))))(webpack-hot-middleware@2.26.1) + specifier: 6.3.7 + version: 6.3.7(@babel/core@7.27.1)(@types/react@18.2.0)(@types/webpack@4.41.40)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1) '@testing-library/dom': - specifier: ~10.4.0 - version: 10.4.1 + specifier: 10.4.0 + version: 10.4.0 '@testing-library/jest-dom': - specifier: ~6.6.3 - version: 6.6.4 + specifier: 6.6.3 + version: 6.6.3 '@testing-library/react': - specifier: ~16.3.0 - version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 16.3.0 + version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/dagre': - specifier: ~0.7.52 - version: 0.7.53 + specifier: 0.7.52 + version: 0.7.52 '@types/jest': specifier: 29.5.14 version: 29.5.14 '@types/lodash': - specifier: ~4.17.16 - version: 4.17.17 + specifier: 4.17.16 + version: 4.17.16 '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -1395,32 +1446,32 @@ importers: specifier: 18.2.0 version: 18.2.0 '@types/react-test-renderer': - specifier: ~19.1.0 - version: 19.1.0 + specifier: 18.3.0 + version: 18.3.0 babel-jest: specifier: 29.7.0 - version: 29.7.0(@babel/core@7.27.7) + version: 29.7.0(@babel/core@7.27.1) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 identity-obj-proxy: - specifier: ~3.0.0 + specifier: 3.0.0 version: 3.0.0 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + version: 29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 pretty-format: - specifier: ~29.7.0 + specifier: 29.7.0 version: 29.7.0 react-test-renderer: - specifier: ~19.1.0 - version: 19.1.5(react@18.2.0) + specifier: 18.3.0 + version: 18.3.0(react@18.2.0) ts-jest: specifier: 29.3.4 - version: 29.3.4(@babel/core@7.27.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.7))(jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(jest@29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)))(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1428,28 +1479,28 @@ importers: ../../workspaces/ballerina/component-diagram: dependencies: '@emotion/react': - specifier: ^11.14.0 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ^11.14.0 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@projectstorm/geometry': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3 '@projectstorm/react-canvas-core': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3(@types/react@18.2.0) '@projectstorm/react-diagrams': - specifier: ^7.0.4 + specifier: 7.0.4 version: 7.0.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@projectstorm/react-diagrams-core': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@projectstorm/react-diagrams-defaults': - specifier: ^7.1.3 + specifier: 7.1.3 version: 7.1.3(@types/react@18.2.0) '@projectstorm/react-diagrams-routing': - specifier: ^7.1.3 + specifier: 7.1.3 version: 7.1.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@wso2/ballerina-core': specifier: workspace:* @@ -1461,7 +1512,7 @@ importers: specifier: workspace:* version: link:../../common-libs/ui-toolkit dagre: - specifier: ~0.8.5 + specifier: 0.8.5 version: 0.8.5 lodash: specifier: 4.17.23 @@ -1474,38 +1525,38 @@ importers: version: 18.2.0(react@18.2.0) devDependencies: '@babel/core': - specifier: ~7.27.1 - version: 7.27.7 + specifier: 7.27.1 + version: 7.27.1 '@babel/preset-env': - specifier: ~7.27.2 - version: 7.27.2(@babel/core@7.27.7) + specifier: 7.27.2 + version: 7.27.2(@babel/core@7.27.1) '@babel/preset-react': - specifier: ~7.27.1 - version: 7.27.1(@babel/core@7.27.7) + specifier: 7.27.1 + version: 7.27.1(@babel/core@7.27.1) '@babel/preset-typescript': - specifier: ~7.27.1 - version: 7.27.1(@babel/core@7.27.7) + specifier: 7.27.1 + version: 7.27.1(@babel/core@7.27.1) '@storybook/react': - specifier: ^6.5.16 - version: 6.5.16(@babel/core@7.27.7)(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/webpack@5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.19)))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))))(webpack-hot-middleware@2.26.1) + specifier: 6.5.16 + version: 6.5.16(@babel/core@7.27.1)(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/webpack@5.28.5(@swc/core@1.15.18(@swc/helpers@0.5.19)))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.3(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))))(webpack-hot-middleware@2.26.1) '@testing-library/dom': - specifier: ~10.4.0 - version: 10.4.1 + specifier: 10.4.0 + version: 10.4.0 '@testing-library/jest-dom': - specifier: ~6.6.3 - version: 6.6.4 + specifier: 6.6.3 + version: 6.6.3 '@testing-library/react': - specifier: ~16.3.0 - version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 16.3.0 + version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/dagre': - specifier: ~0.7.52 - version: 0.7.53 + specifier: 0.7.52 + version: 0.7.52 '@types/jest': specifier: 29.5.14 version: 29.5.14 '@types/lodash': - specifier: ~4.17.16 - version: 4.17.17 + specifier: 4.17.16 + version: 4.17.16 '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -1513,32 +1564,32 @@ importers: specifier: 18.2.0 version: 18.2.0 '@types/react-test-renderer': - specifier: ~19.1.0 - version: 19.1.0 + specifier: 18.3.0 + version: 18.3.0 babel-jest: specifier: 29.7.0 - version: 29.7.0(@babel/core@7.27.7) + version: 29.7.0(@babel/core@7.27.1) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 identity-obj-proxy: - specifier: ~3.0.0 + specifier: 3.0.0 version: 3.0.0 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + version: 29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 pretty-format: - specifier: ~29.7.0 + specifier: 29.7.0 version: 29.7.0 react-test-renderer: - specifier: ~19.1.0 - version: 19.1.5(react@18.2.0) + specifier: 18.3.0 + version: 18.3.0(react@18.2.0) ts-jest: specifier: 29.3.4 - version: 29.3.4(@babel/core@7.27.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.7))(jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(jest@29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)))(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1546,38 +1597,35 @@ importers: ../../workspaces/ballerina/data-mapper: dependencies: '@emotion/css': - specifier: ~11.13.5 + specifier: 11.13.5 version: 11.13.5 '@emotion/react': - specifier: ^11.14.0 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ^11.14.0 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@projectstorm/geometry': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4 '@projectstorm/react-canvas-core': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4(lodash@4.17.23)(react@18.2.0) '@projectstorm/react-diagrams': - specifier: ^6.7.4 - version: 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1) + specifier: 6.7.4 + version: 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1) '@projectstorm/react-diagrams-core': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) '@tanstack/query-core': - specifier: ^5.77.1 - version: 5.90.20 + specifier: 5.77.1 + version: 5.77.1 '@tanstack/react-query': specifier: 5.77.1 version: 5.77.1(react@18.2.0) - '@types/mousetrap': - specifier: ~1.6.15 - version: 1.6.15 '@vscode/webview-ui-toolkit': - specifier: ^1.2.0 - version: 1.4.0(react@18.2.0) + specifier: 1.2.0 + version: 1.2.0(react@18.2.0) '@wso2/ballerina-core': specifier: workspace:* version: link:../ballerina-core @@ -1588,111 +1636,114 @@ importers: specifier: workspace:* version: link:../../common-libs/ui-toolkit blueimp-md5: - specifier: ^2.19.0 + specifier: 2.19.0 version: 2.19.0 classnames: - specifier: ^2.2.6 + specifier: 2.5.1 version: 2.5.1 lodash: specifier: 4.17.23 version: 4.17.23 lodash.debounce: - specifier: ^4.0.8 + specifier: 4.0.8 version: 4.0.8 mousetrap: - specifier: ^1.6.5 + specifier: 1.6.5 version: 1.6.5 react: - specifier: ^18.2.0 + specifier: 18.2.0 version: 18.2.0 react-dom: - specifier: ^18.2.0 + specifier: 18.2.0 version: 18.2.0(react@18.2.0) react-error-boundary: - specifier: ~6.0.0 - version: 6.0.3(react@18.2.0) + specifier: 6.0.0 + version: 6.0.0(react@18.2.0) + react-hook-form: + specifier: 7.56.4 + version: 7.56.4(react@18.2.0) resize-observer-polyfill: - specifier: ^1.5.1 + specifier: 1.5.1 version: 1.5.1 vscode-languageserver-types: - specifier: ^3.17.5 + specifier: 3.17.5 version: 3.17.5 zustand: - specifier: ^5.0.4 - version: 5.0.11(@types/react@18.2.0)(react@18.2.0)(use-sync-external-store@1.6.0(react@18.2.0)) + specifier: 5.0.4 + version: 5.0.4(@types/react@18.2.0)(react@18.2.0)(use-sync-external-store@1.6.0(react@18.2.0)) devDependencies: '@types/blueimp-md5': - specifier: ^2.18.2 + specifier: 2.18.2 version: 2.18.2 '@types/lodash': specifier: 4.17.16 version: 4.17.16 '@types/lodash.debounce': - specifier: ^4.0.6 - version: 4.0.9 + specifier: 4.0.6 + version: 4.0.6 + '@types/mousetrap': + specifier: 1.6.15 + version: 1.6.15 '@types/react': - specifier: ^18.2.0 + specifier: 18.2.0 version: 18.2.0 '@types/react-dom': - specifier: 17.0.26 - version: 17.0.26(@types/react@18.2.0) + specifier: 18.2.0 + version: 18.2.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 css-loader: - specifier: ^7.1.2 - version: 7.1.3(webpack@5.105.2) + specifier: 7.1.2 + version: 7.1.2(webpack@5.104.1) eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) eslint-plugin-react-hooks: - specifier: ^5.2.0 - version: 5.2.0(eslint@9.39.3(jiti@2.6.1)) + specifier: 5.2.0 + version: 5.2.0(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-react-refresh: - specifier: ^0.4.4 - version: 0.4.20(eslint@9.39.3(jiti@2.6.1)) + specifier: 0.4.4 + version: 0.4.4(eslint@9.39.4(jiti@2.6.1)) file-loader: - specifier: ^6.2.0 - version: 6.2.0(webpack@5.105.2) - react-hook-form: - specifier: ~7.56.3 - version: 7.56.4(react@18.2.0) + specifier: 6.2.0 + version: 6.2.0(webpack@5.104.1) ts-loader: - specifier: ^9.5.2 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.2 + version: 9.5.2(typescript@5.8.3)(webpack@5.104.1) tslib: - specifier: ^2.8.1 + specifier: 2.8.1 version: 2.8.1 tslint: - specifier: ^6.1.3 + specifier: 6.1.3 version: 6.1.3(typescript@5.8.3) tslint-react: - specifier: ^5.0.0 + specifier: 5.0.0 version: 5.0.0(tslint@6.1.3(typescript@5.8.3))(typescript@5.8.3) tslint-react-hooks: - specifier: ^2.2.2 + specifier: 2.2.2 version: 2.2.2(tslint@6.1.3(typescript@5.8.3))(typescript@5.8.3) typescript: - specifier: ^5.8.3 + specifier: 5.8.3 version: 5.8.3 ../../workspaces/ballerina/graphql: dependencies: copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 graphiql: specifier: 3.7.0 - version: 3.7.0(@codemirror/language@6.11.3)(@types/node@22.15.35)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 3.7.0(@codemirror/language@6.11.3)(@types/node@22.15.24)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.11.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) graphiql-explorer: - specifier: ^0.9.0 - version: 0.9.0(graphql@16.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 0.9.0 + version: 0.9.0(graphql@16.11.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: specifier: 18.2.0 version: 18.2.0 @@ -1701,26 +1752,26 @@ importers: version: 18.2.0(react@18.2.0) devDependencies: '@babel/core': - specifier: ^7.27.1 - version: 7.27.7 + specifier: 7.27.1 + version: 7.27.1 '@storybook/addon-actions': - specifier: ^6.5.9 - version: 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 6.5.9 + version: 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-essentials': - specifier: ^6.5.9 - version: 6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.105.2) + specifier: 6.5.9 + version: 6.5.9(@babel/core@7.27.1)(@storybook/builder-webpack5@6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.104.1) '@storybook/addon-links': - specifier: ^6.5.9 - version: 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 6.5.9 + version: 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/builder-webpack5': - specifier: ^6.5.9 - version: 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + specifier: 6.5.9 + version: 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/manager-webpack5': - specifier: ^6.5.9 - version: 6.5.9(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + specifier: 6.5.9 + version: 6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/react': - specifier: ^6.5.9 - version: 6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.9(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@types/webpack@5.28.5(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1) + specifier: 6.5.9 + version: 6.5.9(@babel/core@7.27.1)(@storybook/builder-webpack5@6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@types/webpack@5.28.5(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1) '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -1728,58 +1779,58 @@ importers: specifier: 18.2.0 version: 18.2.0 babel-loader: - specifier: ^10.0.0 - version: 10.0.0(@babel/core@7.27.7)(webpack@5.105.2) + specifier: 10.0.0 + version: 10.0.0(@babel/core@7.27.1)(webpack@5.104.1) css-loader: - specifier: ^7.1.2 - version: 7.1.3(webpack@5.105.2) + specifier: 7.1.2 + version: 7.1.2(webpack@5.104.1) graphql: - specifier: ^16.11.0 - version: 16.12.0 + specifier: 16.11.0 + version: 16.11.0 mini-css-extract-plugin: - specifier: ^2.9.2 - version: 2.10.0(webpack@5.105.2) + specifier: 2.9.2 + version: 2.9.2(webpack@5.104.1) source-map-loader: - specifier: ^5.0.0 - version: 5.0.0(webpack@5.105.2) + specifier: 5.0.0 + version: 5.0.0(webpack@5.104.1) style-loader: - specifier: ^4.0.0 - version: 4.0.0(webpack@5.105.2) + specifier: 4.0.0 + version: 4.0.0(webpack@5.104.1) ts-loader: - specifier: ^9.5.2 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.2 + version: 9.5.2(typescript@5.8.3)(webpack@5.104.1) typescript: specifier: 5.8.3 version: 5.8.3 webpack: - specifier: ^5.94.0 - version: 5.105.2(webpack-cli@4.10.0) + specifier: 5.104.1 + version: 5.104.1(webpack-cli@4.10.0) webpack-cli: - specifier: ^4.10.0 - version: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.105.2) + specifier: 4.10.0 + version: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.104.1) ../../workspaces/ballerina/graphql-design-diagram: dependencies: '@emotion/css': - specifier: ~11.13.5 + specifier: 11.13.5 version: 11.13.5 '@emotion/react': - specifier: ^11.14.0 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ^11.14.0 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@projectstorm/geometry': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4 '@projectstorm/react-canvas-core': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4(lodash@4.17.23)(react@18.2.0) '@projectstorm/react-diagrams': - specifier: ^6.7.4 - version: 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1) + specifier: 6.7.4 + version: 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1) '@projectstorm/react-diagrams-core': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) '@wso2/ballerina-core': specifier: workspace:* @@ -1791,10 +1842,10 @@ importers: specifier: workspace:* version: link:../../common-libs/ui-toolkit copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 html-to-image: - specifier: ^1.10.8 + specifier: 1.11.11 version: 1.11.11 lodash: specifier: 4.17.23 @@ -1809,30 +1860,30 @@ importers: specifier: 0.58.0 version: 0.58.0(monaco-editor@0.52.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) resize-observer-polyfill: - specifier: ^1.5.1 + specifier: 1.5.1 version: 1.5.1 rimraf: - specifier: ^6.0.1 + specifier: 6.0.1 version: 6.0.1 tslint: - specifier: ^6.1.3 - version: 6.1.3(typescript@4.9.5) + specifier: 6.1.3 + version: 6.1.3(typescript@4.2.4) tslint-react: - specifier: ^5.0.0 - version: 5.0.0(tslint@6.1.3(typescript@4.9.5))(typescript@4.9.5) + specifier: 5.0.0 + version: 5.0.0(tslint@6.1.3(typescript@4.2.4))(typescript@4.2.4) tslint-react-hooks: - specifier: ^2.2.2 - version: 2.2.2(tslint@6.1.3(typescript@4.9.5))(typescript@4.9.5) + specifier: 2.2.2 + version: 2.2.2(tslint@6.1.3(typescript@4.2.4))(typescript@4.2.4) typescript: - specifier: ^4.1.3 - version: 4.9.5 + specifier: 4.2.4 + version: 4.2.4 vscode-uri: - specifier: ^3.1.0 + specifier: 3.1.0 version: 3.1.0 devDependencies: '@types/lodash': - specifier: 4.17.16 - version: 4.17.16 + specifier: 4.14.200 + version: 4.14.200 '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -1840,14 +1891,14 @@ importers: ../../workspaces/ballerina/overview-view: dependencies: '@emotion/react': - specifier: ^11.9.3 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ^11.10.5 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@vscode/webview-ui-toolkit': - specifier: ^1.2.0 - version: 1.4.0(react@18.2.0) + specifier: 1.2.0 + version: 1.2.0(react@18.2.0) '@wso2/ballerina-core': specifier: workspace:* version: link:../ballerina-core @@ -1864,30 +1915,30 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) vscode-uri: - specifier: ^3.0.8 - version: 3.1.0 + specifier: 3.0.8 + version: 3.0.8 devDependencies: '@types/react': specifier: 18.2.0 version: 18.2.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) eslint-plugin-react-hooks: - specifier: ^5.2.0 - version: 5.2.0(eslint@9.39.3(jiti@2.6.1)) + specifier: 5.2.0 + version: 5.2.0(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-react-refresh: - specifier: ^0.4.20 - version: 0.4.20(eslint@9.39.3(jiti@2.6.1)) + specifier: 0.4.20 + version: 0.4.20(eslint@9.39.4(jiti@2.6.1)) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1895,58 +1946,58 @@ importers: ../../workspaces/ballerina/persist-layer-diagram: dependencies: '@emotion/css': - specifier: ~11.13.5 + specifier: 11.13.5 version: 11.13.5 '@emotion/react': - specifier: ^11.9.3 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ^11.10.5 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@projectstorm/geometry': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3 '@projectstorm/react-canvas-core': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3(@types/react@18.2.0) '@projectstorm/react-diagrams': - specifier: ^7.0.4 + specifier: 7.0.4 version: 7.0.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@projectstorm/react-diagrams-core': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@projectstorm/react-diagrams-defaults': - specifier: ^7.1.3 + specifier: 7.1.3 version: 7.1.3(@types/react@18.2.0) '@projectstorm/react-diagrams-routing': - specifier: ^7.1.3 + specifier: 7.1.3 version: 7.1.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@types/lodash': - specifier: ^4.14.189 - version: 4.17.17 + specifier: 4.14.189 + version: 4.14.189 '@types/node': - specifier: ^22.15.18 - version: 22.15.35 + specifier: 22.15.18 + version: 22.15.18 closest: - specifier: ^0.0.1 + specifier: 0.0.1 version: 0.0.1 dagre: - specifier: ^0.8.5 + specifier: 0.8.5 version: 0.8.5 file-loader: - specifier: ^6.2.0 - version: 6.2.0(webpack@5.105.2) + specifier: 6.2.0 + version: 6.2.0(webpack@5.104.1) html-to-image: - specifier: ^1.10.8 + specifier: 1.11.11 version: 1.11.11 lodash: specifier: 4.17.23 version: 4.17.23 pathfinding: - specifier: ^0.4.18 + specifier: 0.4.18 version: 0.4.18 paths-js: - specifier: ^0.4.11 + specifier: 0.4.11 version: 0.4.11 react: specifier: 18.2.0 @@ -1955,15 +2006,15 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) resize-observer-polyfill: - specifier: ^1.5.1 + specifier: 1.5.1 version: 1.5.1 typescript: specifier: 5.8.3 version: 5.8.3 devDependencies: '@babel/core': - specifier: ^7.27.1 - version: 7.27.7 + specifier: 7.27.1 + version: 7.27.1 '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -1977,58 +2028,58 @@ importers: specifier: workspace:* version: link:../../common-libs/ui-toolkit babel-loader: - specifier: ^10.0.0 - version: 10.0.0(@babel/core@7.27.7)(webpack@5.105.2) + specifier: 10.0.0 + version: 10.0.0(@babel/core@7.27.1)(webpack@5.104.1) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 css-loader: - specifier: ^7.1.2 - version: 7.1.3(webpack@5.105.2) + specifier: 7.1.2 + version: 7.1.2(webpack@5.104.1) source-map-loader: - specifier: ^5.0.0 - version: 5.0.0(webpack@5.105.2) + specifier: 5.0.0 + version: 5.0.0(webpack@5.104.1) style-loader: - specifier: ^4.0.0 - version: 4.0.0(webpack@5.105.2) + specifier: 4.0.0 + version: 4.0.0(webpack@5.104.1) ts-loader: - specifier: ^9.4.1 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.4.1 + version: 9.4.1(typescript@5.8.3)(webpack@5.104.1) webpack: - specifier: ^5.94.0 - version: 5.105.2(webpack-cli@6.0.1) + specifier: 5.104.1 + version: 5.104.1(webpack-cli@6.0.1) webpack-cli: - specifier: ^6.0.1 - version: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.105.2) + specifier: 6.0.1 + version: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.104.1) webpack-dev-server: - specifier: ^5.2.1 - version: 5.2.3(webpack-cli@6.0.1)(webpack@5.105.2) + specifier: 5.2.3 + version: 5.2.3(webpack-cli@6.0.1)(webpack@5.104.1) ../../workspaces/ballerina/record-creator: dependencies: '@emotion/css': - specifier: ~11.13.5 + specifier: 11.13.5 version: 11.13.5 '@emotion/react': - specifier: ~11.14.0 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ~11.14.0 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@headlessui/react': - specifier: ~1.7.18 - version: 1.7.19(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 1.7.18 + version: 1.7.18(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/react-query': - specifier: ~5.76.1 - version: 5.76.2(react@18.2.0) + specifier: 5.76.1 + version: 5.76.1(react@18.2.0) '@types/lodash.debounce': - specifier: ~4.0.9 + specifier: 4.0.9 version: 4.0.9 '@types/react-lottie': - specifier: ~1.2.10 + specifier: 1.2.10 version: 1.2.10 '@vscode/webview-ui-toolkit': - specifier: ~1.4.0 + specifier: 1.4.0 version: 1.4.0(react@18.2.0) '@wso2/ballerina-core': specifier: workspace:* @@ -2046,10 +2097,10 @@ importers: specifier: workspace:* version: link:../../common-libs/ui-toolkit lodash.debounce: - specifier: ~4.0.8 + specifier: 4.0.8 version: 4.0.8 monaco-editor: - specifier: ~0.46.0 + specifier: 0.46.0 version: 0.46.0 react: specifier: 18.2.0 @@ -2058,18 +2109,18 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) react-intl: - specifier: ~7.1.11 - version: 7.1.14(react@18.2.0)(typescript@5.8.3) + specifier: 7.1.11 + version: 7.1.11(react@18.2.0)(typescript@5.8.3) react-lottie: - specifier: ~1.2.4 - version: 1.2.10(react@18.2.0) + specifier: 1.2.4 + version: 1.2.4(react@18.2.0) vscode-uri: - specifier: ~3.1.0 + specifier: 3.1.0 version: 3.1.0 devDependencies: '@types/node': - specifier: ^22.15.18 - version: 22.15.35 + specifier: 22.15.18 + version: 22.15.18 '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -2077,14 +2128,14 @@ importers: specifier: 18.2.0 version: 18.2.0 copyfiles: - specifier: ~2.4.1 + specifier: 2.4.1 version: 2.4.1 eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) react-scripts-ts: specifier: 3.1.0 - version: 3.1.0(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(babel-runtime@6.26.0)(typescript@5.8.3) + version: 3.1.0(babel-core@7.0.0-bridge.0(@babel/core@7.29.0))(babel-runtime@6.26.0)(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 @@ -2092,28 +2143,28 @@ importers: ../../workspaces/ballerina/sequence-diagram: dependencies: '@emotion/react': - specifier: ^11.9.3 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ^11.10.5 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@projectstorm/geometry': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3 '@projectstorm/react-canvas-core': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3(@types/react@18.2.0) '@projectstorm/react-diagrams': - specifier: ^7.0.4 + specifier: 7.0.4 version: 7.0.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@projectstorm/react-diagrams-core': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@projectstorm/react-diagrams-defaults': - specifier: ^7.1.3 + specifier: 7.1.3 version: 7.1.3(@types/react@18.2.0) '@projectstorm/react-diagrams-routing': - specifier: ^7.1.3 + specifier: 7.1.3 version: 7.1.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@wso2/ballerina-core': specifier: workspace:* @@ -2125,7 +2176,7 @@ importers: specifier: workspace:* version: link:../../common-libs/ui-toolkit dagre: - specifier: ~0.8.5 + specifier: 0.8.5 version: 0.8.5 lodash: specifier: 4.17.23 @@ -2137,39 +2188,87 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) devDependencies: + '@babel/core': + specifier: 7.27.1 + version: 7.27.1 + '@babel/preset-env': + specifier: 7.27.2 + version: 7.27.2(@babel/core@7.27.1) + '@babel/preset-react': + specifier: 7.27.1 + version: 7.27.1(@babel/core@7.27.1) + '@babel/preset-typescript': + specifier: 7.27.1 + version: 7.27.1(@babel/core@7.27.1) '@storybook/react': - specifier: ^6.3.7 - version: 6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.3(webpack@5.105.2))(webpack-hot-middleware@2.26.1) + specifier: 6.3.7 + version: 6.3.7(@babel/core@7.27.1)(@types/react@18.2.0)(@types/webpack@4.41.40)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1) + '@testing-library/dom': + specifier: 10.4.0 + version: 10.4.0 + '@testing-library/jest-dom': + specifier: 6.6.3 + version: 6.6.3 + '@testing-library/react': + specifier: 16.3.0 + version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/dagre': - specifier: ~0.7.52 - version: 0.7.53 + specifier: 0.7.52 + version: 0.7.52 + '@types/jest': + specifier: 29.5.14 + version: 29.5.14 '@types/lodash': - specifier: ~4.17.16 - version: 4.17.17 + specifier: 4.17.16 + version: 4.17.16 '@types/react': specifier: 18.2.0 version: 18.2.0 '@types/react-dom': specifier: 18.2.0 version: 18.2.0 + '@types/react-test-renderer': + specifier: 18.3.0 + version: 18.3.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + babel-jest: + specifier: 29.7.0 + version: 29.7.0(@babel/core@7.27.1) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) eslint-plugin-react-hooks: - specifier: ~5.2.0 - version: 5.2.0(eslint@9.39.3(jiti@2.6.1)) + specifier: 5.2.0 + version: 5.2.0(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-unused-imports: - specifier: ~4.1.4 - version: 4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1)) + specifier: 4.1.4 + version: 4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1)) + identity-obj-proxy: + specifier: 3.0.0 + version: 3.0.0 + jest: + specifier: 29.7.0 + version: 29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) + jest-environment-jsdom: + specifier: 29.7.0 + version: 29.7.0 prettier: - specifier: ~3.5.3 + specifier: 3.5.3 version: 3.5.3 + pretty-format: + specifier: 29.7.0 + version: 29.7.0 + react-test-renderer: + specifier: 18.3.0 + version: 18.3.0(react@18.2.0) + ts-jest: + specifier: 29.3.4 + version: 29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(jest@29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)))(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 @@ -2177,23 +2276,23 @@ importers: ../../workspaces/ballerina/statement-editor: dependencies: '@emotion/css': - specifier: ~11.13.5 + specifier: 11.13.5 version: 11.13.5 '@emotion/react': - specifier: ^11.9.3 - version: 11.14.0(@types/react@17.0.91)(react@19.1.0) + specifier: 11.14.0 + version: 11.14.0(@types/react@17.0.37)(react@19.1.0) '@emotion/styled': - specifier: ^11.10.5 - version: 11.14.1(@emotion/react@11.14.0(@types/react@17.0.91)(react@19.1.0))(@types/react@17.0.91)(react@19.1.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@17.0.37)(react@19.1.0))(@types/react@17.0.37)(react@19.1.0) '@tanstack/query-core': - specifier: ^4.0.0-beta.1 - version: 4.43.0 + specifier: 5.77.1 + version: 5.77.1 '@tanstack/react-query': specifier: 4.0.10 version: 4.0.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@vscode/webview-ui-toolkit': - specifier: ^1.2.0 - version: 1.4.0(react@19.1.0) + specifier: 1.2.0 + version: 1.2.0(react@19.1.0) '@wso2/ballerina-core': specifier: workspace:* version: link:../ballerina-core @@ -2207,98 +2306,98 @@ importers: specifier: workspace:* version: link:../../common-libs/ui-toolkit classnames: - specifier: ^2.2.6 - version: 2.5.1 + specifier: 2.2.6 + version: 2.2.6 lodash.debounce: - specifier: ^4.0.8 + specifier: 4.0.8 version: 4.0.8 react: - specifier: ^19.1.0 + specifier: 19.1.0 version: 19.1.0 react-dom: - specifier: ^19.1.0 + specifier: 19.1.0 version: 19.1.0(react@19.1.0) react-icons: - specifier: ^4.12.0 + specifier: 4.12.0 version: 4.12.0(react@19.1.0) react-intl: - specifier: ^7.1.11 - version: 7.1.14(react@19.1.0)(typescript@4.9.5) + specifier: 7.1.11 + version: 7.1.11(react@19.1.0)(typescript@4.9.4) react-lottie: - specifier: ^1.2.3 - version: 1.2.10(react@19.1.0) + specifier: 1.2.3 + version: 1.2.3(react@19.1.0) vscode-languageserver-protocol: - specifier: ^3.16.0 - version: 3.17.5 + specifier: 3.16.0 + version: 3.16.0 vscode-languageserver-types: - specifier: ^3.17.5 + specifier: 3.17.5 version: 3.17.5 vscode-uri: - specifier: ^3.0.8 - version: 3.1.0 + specifier: 3.0.8 + version: 3.0.8 devDependencies: '@storybook/react': - specifier: ^6.5.9 - version: 6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@4.9.5)(webpack-dev-server@5.2.3(webpack@5.105.2))(webpack-hot-middleware@2.26.1) + specifier: 6.5.9 + version: 6.5.9(@babel/core@7.29.0)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@4.9.4)(webpack-dev-server@5.2.3(webpack@5.104.1))(webpack-hot-middleware@2.26.1) '@types/classnames': - specifier: ^2.2.9 - version: 2.3.4 + specifier: 2.2.9 + version: 2.2.9 '@types/lodash.camelcase': - specifier: ^4.3.0 - version: 4.3.9 + specifier: 4.3.0 + version: 4.3.0 '@types/lodash.clonedeep': - specifier: ^4.5.6 - version: 4.5.9 + specifier: 4.5.6 + version: 4.5.6 '@types/lodash.debounce': - specifier: ^4.0.6 - version: 4.0.9 + specifier: 4.0.6 + version: 4.0.6 '@types/react': - specifier: ^17.0.37 - version: 17.0.91 + specifier: 17.0.37 + version: 17.0.37 '@types/react-dom': specifier: 17.0.14 version: 17.0.14 '@types/react-lottie': - specifier: ^1.2.5 - version: 1.2.10 + specifier: 1.2.5 + version: 1.2.5 copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 storybook: - specifier: ^8.6.13 - version: 8.6.15(prettier@3.5.3) + specifier: 8.6.13 + version: 8.6.13(prettier@3.5.3) tslib: - specifier: ^2.1.0 - version: 2.8.1 + specifier: 2.1.0 + version: 2.1.0 tslint: - specifier: ^6.1.3 - version: 6.1.3(typescript@4.9.5) + specifier: 6.1.3 + version: 6.1.3(typescript@4.9.4) tslint-react: - specifier: ^4.2.0 - version: 4.2.0(tslint@6.1.3(typescript@4.9.5))(typescript@4.9.5) + specifier: 4.2.0 + version: 4.2.0(tslint@6.1.3(typescript@4.9.4))(typescript@4.9.4) tslint-react-hooks: - specifier: ^2.2.2 - version: 2.2.2(tslint@6.1.3(typescript@4.9.5))(typescript@4.9.5) + specifier: 2.2.2 + version: 2.2.2(tslint@6.1.3(typescript@4.9.4))(typescript@4.9.4) typescript: - specifier: ^4.9.4 - version: 4.9.5 + specifier: 4.9.4 + version: 4.9.4 ../../workspaces/ballerina/syntax-tree: devDependencies: husky: - specifier: ^9.1.7 + specifier: 9.1.7 version: 9.1.7 lint-staged: - specifier: ^16.0.0 - version: 16.2.7 + specifier: 16.0.0 + version: 16.0.0 prettier: - specifier: ^3.5.3 + specifier: 3.5.3 version: 3.5.3 rimraf: - specifier: ^6.0.1 + specifier: 6.0.1 version: 6.0.1 tslint: - specifier: ^6.1.3 + specifier: 6.1.3 version: 6.1.3(typescript@5.8.3) typescript: specifier: 5.8.3 @@ -2307,23 +2406,38 @@ importers: ../../workspaces/ballerina/trace-visualizer: dependencies: '@emotion/react': - specifier: ^11.14.0 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ^11.14.0 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@vscode/webview-ui-toolkit': - specifier: ^1.4.0 + specifier: 1.4.0 version: 1.4.0(react@18.2.0) '@wso2/ui-toolkit': specifier: workspace:* version: link:../../common-libs/ui-toolkit + katex: + specifier: ^0.16.27 + version: 0.16.38 react: specifier: 18.2.0 version: 18.2.0 react-dom: specifier: 18.2.0 version: 18.2.0(react@18.2.0) + react-markdown: + specifier: ^10.1.0 + version: 10.1.0(@types/react@18.2.0)(react@18.2.0) + rehype-katex: + specifier: ^7.0.1 + version: 7.0.1 + remark-gfm: + specifier: ^4.0.1 + version: 4.0.1 + remark-math: + specifier: ^6.0.0 + version: 6.0.0 devDependencies: '@types/react': specifier: 18.2.0 @@ -2332,97 +2446,97 @@ importers: specifier: 18.2.0 version: 18.2.0 '@types/webpack': - specifier: ^5.28.5 + specifier: 5.28.5 version: 5.28.5(webpack-cli@5.1.4) buffer: - specifier: ^6.0.3 + specifier: 6.0.3 version: 6.0.3 copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 css-loader: - specifier: ^7.1.2 - version: 7.1.3(webpack@5.105.2) + specifier: 7.1.2 + version: 7.1.2(webpack@5.104.1) sass-loader: - specifier: ^16.0.5 - version: 16.0.7(sass@1.97.3)(webpack@5.105.2) + specifier: 16.0.5 + version: 16.0.5(sass@1.89.0)(webpack@5.104.1) source-map-loader: - specifier: ^5.0.0 - version: 5.0.0(webpack@5.105.2) + specifier: 5.0.0 + version: 5.0.0(webpack@5.104.1) style-loader: - specifier: ^4.0.0 - version: 4.0.0(webpack@5.105.2) + specifier: 4.0.0 + version: 4.0.0(webpack@5.104.1) ts-loader: - specifier: ^9.5.2 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.2 + version: 9.5.2(typescript@5.8.3)(webpack@5.104.1) typescript: specifier: 5.8.3 version: 5.8.3 webpack: - specifier: ^5.94.0 - version: 5.105.2(webpack-cli@5.1.4) + specifier: 5.104.1 + version: 5.104.1(webpack-cli@5.1.4) webpack-cli: - specifier: ^5.1.4 - version: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.105.2) + specifier: 5.1.4 + version: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) webpack-dev-server: - specifier: ^5.2.1 - version: 5.2.3(webpack-cli@5.1.4)(webpack@5.105.2) + specifier: 5.2.3 + version: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1) ../../workspaces/ballerina/type-diagram: dependencies: '@emotion/css': - specifier: ~11.13.5 + specifier: 11.13.5 version: 11.13.5 '@emotion/react': - specifier: ^11.9.3 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ^11.14.0 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@projectstorm/geometry': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3 '@projectstorm/react-canvas-core': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3(@types/react@18.2.0) '@projectstorm/react-diagrams': - specifier: ^7.0.4 + specifier: 7.0.4 version: 7.0.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@projectstorm/react-diagrams-core': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@projectstorm/react-diagrams-defaults': - specifier: ^7.1.3 + specifier: 7.1.3 version: 7.1.3(@types/react@18.2.0) '@projectstorm/react-diagrams-routing': - specifier: ^7.1.3 + specifier: 7.1.3 version: 7.1.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@types/lodash': - specifier: ^4.17.16 - version: 4.17.17 + specifier: 4.17.16 + version: 4.17.16 '@types/node': - specifier: ^22.15.19 - version: 22.15.35 + specifier: 22.15.19 + version: 22.15.19 closest: - specifier: ^0.0.1 + specifier: 0.0.1 version: 0.0.1 dagre: - specifier: ^0.8.5 + specifier: 0.8.5 version: 0.8.5 file-loader: - specifier: ^6.2.0 - version: 6.2.0(webpack@5.105.2) + specifier: 6.2.0 + version: 6.2.0(webpack@5.104.1) html-to-image: - specifier: ^1.11.11 + specifier: 1.11.11 version: 1.11.11 lodash: specifier: 4.17.23 version: 4.17.23 pathfinding: - specifier: ^0.4.18 + specifier: 0.4.18 version: 0.4.18 paths-js: - specifier: ^0.4.11 + specifier: 0.4.11 version: 0.4.11 react: specifier: 18.2.0 @@ -2431,18 +2545,39 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) resize-observer-polyfill: - specifier: ^1.5.1 + specifier: 1.5.1 version: 1.5.1 typescript: specifier: 5.8.3 version: 5.8.3 uuid: - specifier: ^11.1.0 + specifier: 11.1.0 version: 11.1.0 devDependencies: '@babel/core': - specifier: ^7.27.1 - version: 7.27.7 + specifier: 7.27.1 + version: 7.27.1 + '@babel/preset-env': + specifier: 7.27.2 + version: 7.27.2(@babel/core@7.27.1) + '@babel/preset-react': + specifier: 7.27.1 + version: 7.27.1(@babel/core@7.27.1) + '@babel/preset-typescript': + specifier: 7.27.1 + version: 7.27.1(@babel/core@7.27.1) + '@testing-library/dom': + specifier: 10.4.0 + version: 10.4.0 + '@testing-library/jest-dom': + specifier: 6.6.3 + version: 6.6.3 + '@testing-library/react': + specifier: 16.3.0 + version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/jest': + specifier: 29.5.14 + version: 29.5.14 '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -2450,7 +2585,7 @@ importers: specifier: 18.2.0 version: 18.2.0 '@types/uuid': - specifier: ^10.0.0 + specifier: 10.0.0 version: 10.0.0 '@wso2/ballerina-core': specifier: workspace:* @@ -2458,53 +2593,68 @@ importers: '@wso2/ui-toolkit': specifier: workspace:* version: link:../../common-libs/ui-toolkit + babel-jest: + specifier: 29.7.0 + version: 29.7.0(@babel/core@7.27.1) babel-loader: - specifier: ^10.0.0 - version: 10.0.0(@babel/core@7.27.7)(webpack@5.105.2) + specifier: 10.0.0 + version: 10.0.0(@babel/core@7.27.1)(webpack@5.104.1) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 css-loader: - specifier: ^7.1.2 - version: 7.1.3(webpack@5.105.2) + specifier: 7.1.2 + version: 7.1.2(webpack@5.104.1) + identity-obj-proxy: + specifier: 3.0.0 + version: 3.0.0 + jest: + specifier: 29.7.0 + version: 29.7.0(@types/node@22.15.19)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)) + jest-environment-jsdom: + specifier: 29.7.0 + version: 29.7.0 source-map-loader: - specifier: ^5.0.0 - version: 5.0.0(webpack@5.105.2) + specifier: 5.0.0 + version: 5.0.0(webpack@5.104.1) style-loader: - specifier: ^4.0.0 - version: 4.0.0(webpack@5.105.2) + specifier: 4.0.0 + version: 4.0.0(webpack@5.104.1) + ts-jest: + specifier: 29.3.4 + version: 29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(jest@29.7.0(@types/node@22.15.19)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)))(typescript@5.8.3) ts-loader: - specifier: ^9.4.1 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.4.1 + version: 9.4.1(typescript@5.8.3)(webpack@5.104.1) webpack: - specifier: ^5.94.0 - version: 5.105.2(webpack-cli@6.0.1) + specifier: 5.104.1 + version: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) webpack-cli: - specifier: ^6.0.1 - version: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.105.2) + specifier: 6.0.1 + version: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.104.1) webpack-dev-server: - specifier: ^5.2.1 - version: 5.2.3(webpack-cli@6.0.1)(webpack@5.105.2) + specifier: 5.2.3 + version: 5.2.3(webpack-cli@6.0.1)(webpack@5.104.1) ../../workspaces/ballerina/type-editor: dependencies: '@emotion/css': - specifier: ~11.13.5 + specifier: 11.13.5 version: 11.13.5 '@emotion/react': - specifier: ~11.14.0 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ~11.14.0 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@headlessui/react': - specifier: ~1.7.18 - version: 1.7.19(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 1.7.18 + version: 1.7.18(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/react-query': specifier: 5.76.1 version: 5.76.1(react@18.2.0) '@vscode/webview-ui-toolkit': - specifier: ~1.4.0 + specifier: 1.4.0 version: 1.4.0(react@18.2.0) '@wso2/ballerina-core': specifier: workspace:* @@ -2525,10 +2675,10 @@ importers: specifier: 4.17.23 version: 4.17.23 lodash.debounce: - specifier: ^4.0.8 + specifier: 4.0.8 version: 4.0.8 monaco-editor: - specifier: ~0.52.2 + specifier: 0.52.2 version: 0.52.2 react: specifier: 18.2.0 @@ -2537,20 +2687,20 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) react-intl: - specifier: ^7.1.11 - version: 7.1.14(react@18.2.0)(typescript@5.8.3) + specifier: 7.1.11 + version: 7.1.11(react@18.2.0)(typescript@5.8.3) react-lottie: - specifier: ^1.2.10 + specifier: 1.2.10 version: 1.2.10(react@18.2.0) vscode-uri: - specifier: ~3.1.0 + specifier: 3.1.0 version: 3.1.0 devDependencies: '@types/lodash': - specifier: ~4.17.15 - version: 4.17.17 + specifier: 4.17.15 + version: 4.17.15 '@types/lodash.debounce': - specifier: ^4.0.9 + specifier: 4.0.9 version: 4.0.9 '@types/react': specifier: 18.2.0 @@ -2559,17 +2709,17 @@ importers: specifier: 18.2.0 version: 18.2.0 '@types/react-lottie': - specifier: ^1.2.10 + specifier: 1.2.10 version: 1.2.10 copyfiles: - specifier: ~2.4.1 + specifier: 2.4.1 version: 2.4.1 eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) react-scripts-ts: specifier: 3.1.0 - version: 3.1.0(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(babel-runtime@6.26.0)(typescript@5.8.3) + version: 3.1.0(babel-core@7.0.0-bridge.0(@babel/core@7.29.0))(babel-runtime@6.26.0)(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 @@ -2577,7 +2727,7 @@ importers: ../../workspaces/bi/bi-extension: dependencies: '@iarna/toml': - specifier: ^2.2.5 + specifier: 2.2.5 version: 2.2.5 '@wso2/ballerina-core': specifier: workspace:* @@ -2586,69 +2736,69 @@ importers: specifier: workspace:* version: link:../../common-libs/font-wso2-vscode xstate: - specifier: ^4.38.3 + specifier: 4.38.3 version: 4.38.3 devDependencies: '@playwright/test': - specifier: ~1.55.1 + specifier: 1.55.1 version: 1.55.1 '@types/mocha': - specifier: ^10.0.3 - version: 10.0.10 + specifier: 10.0.3 + version: 10.0.3 '@types/node': specifier: 22.15.18 version: 22.15.18 '@types/vscode': - specifier: ^1.84.0 - version: 1.109.0 + specifier: 1.84.0 + version: 1.84.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@vscode/test-electron': - specifier: ^2.5.2 + specifier: 2.5.2 version: 2.5.2 '@vscode/vsce': - specifier: ^3.7.0 - version: 3.7.1 + specifier: 3.7.0 + version: 3.7.0 '@wso2/playwright-vscode-tester': specifier: workspace:* version: link:../../common-libs/playwright-vscode-tester copy-webpack-plugin: - specifier: ^13.0.0 - version: 13.0.1(webpack@5.105.2) + specifier: 13.0.0 + version: 13.0.0(webpack@5.104.1) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) glob: - specifier: ^11.1.0 + specifier: 11.1.0 version: 11.1.0 mocha: - specifier: ^11.2.2 - version: 11.5.0 + specifier: 11.2.2 + version: 11.2.2 source-map-support: - specifier: ^0.5.21 + specifier: 0.5.21 version: 0.5.21 ts-loader: - specifier: ^9.5.2 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.2 + version: 9.5.2(typescript@5.8.3)(webpack@5.104.1) typescript: specifier: 5.8.3 version: 5.8.3 webpack: - specifier: ^5.94.0 - version: 5.105.2(webpack-cli@6.0.1) + specifier: 5.104.1 + version: 5.104.1(webpack-cli@6.0.1) webpack-cli: - specifier: ^6.0.1 - version: 6.0.1(webpack@5.105.2) + specifier: 6.0.1 + version: 6.0.1(webpack@5.104.1) webpack-permissions-plugin: - specifier: ^1.0.9 - version: 1.0.10 + specifier: 1.0.9 + version: 1.0.9 ../../workspaces/choreo/choreo-core: dependencies: @@ -2656,15 +2806,15 @@ importers: specifier: workspace:* version: link:../../wso2-platform/wso2-platform-core vscode-messenger-common: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 vscode-messenger-webview: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 devDependencies: '@biomejs/biome': - specifier: ^1.8.3 - version: 1.9.4 + specifier: 1.8.3 + version: 1.8.3 typescript: specifier: 5.8.3 version: 5.8.3 @@ -2672,23 +2822,23 @@ importers: ../../workspaces/choreo/choreo-extension: dependencies: '@vscode-logging/logger': - specifier: ^2.0.0 + specifier: 2.0.0 version: 2.0.0 '@vscode-logging/types': - specifier: ^2.0.0 + specifier: 2.0.0 version: 2.0.0 '@vscode-logging/wrapper': - specifier: ^2.0.0 + specifier: 2.0.0 version: 2.0.0 '@vscode/extension-telemetry': - specifier: ~1.0.0 + specifier: 1.0.0 version: 1.0.0(tslib@2.8.1) '@vscode/iconv-lite-umd': - specifier: ^0.7.0 - version: 0.7.1 + specifier: 0.7.0 + version: 0.7.0 '@vscode/webview-ui-toolkit': - specifier: ^1.2.0 - version: 1.4.0(react@19.1.0) + specifier: 1.2.0 + version: 1.2.0(react@19.1.0) '@wso2/choreo-core': specifier: workspace:* version: link:../choreo-core @@ -2699,119 +2849,119 @@ importers: specifier: workspace:* version: link:../../wso2-platform/wso2-platform-core byline: - specifier: ^5.0.0 + specifier: 5.0.0 version: 5.0.0 dotenv: - specifier: ^16.0.3 - version: 16.5.0 + specifier: 16.0.3 + version: 16.0.3 file-type: - specifier: ^18.2.1 - version: 18.7.0 + specifier: 21.3.1 + version: 21.3.1 js-yaml: - specifier: ^4.1.1 + specifier: 4.1.1 version: 4.1.1 jschardet: - specifier: ^3.0.0 - version: 3.1.4 + specifier: 3.0.0 + version: 3.0.0 vscode-jsonrpc: - specifier: ^8.2.1 + specifier: 8.2.1 version: 8.2.1 vscode-messenger: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 vscode-messenger-common: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 which: - specifier: ^5.0.0 + specifier: 5.0.0 version: 5.0.0 yaml: - specifier: ^2.6.0 - version: 2.8.2 + specifier: 2.6.0 + version: 2.6.0 devDependencies: '@biomejs/biome': - specifier: ^1.8.3 - version: 1.9.4 + specifier: 1.8.3 + version: 1.8.3 '@playwright/test': specifier: 1.55.1 version: 1.55.1 '@types/byline': - specifier: ^4.2.36 + specifier: 4.2.36 version: 4.2.36 '@types/mocha': - specifier: ~10.0.1 - version: 10.0.10 + specifier: 10.0.1 + version: 10.0.1 '@types/node': - specifier: ^22.15.24 - version: 22.15.35 + specifier: 22.15.24 + version: 22.15.24 '@types/vscode': - specifier: ^1.100.0 - version: 1.109.0 + specifier: 1.100.0 + version: 1.100.0 '@types/which': - specifier: ^3.0.4 + specifier: 3.0.4 version: 3.0.4 '@vscode/vsce': - specifier: ^3.7.0 - version: 3.7.1 + specifier: 3.7.0 + version: 3.7.0 '@wso2/playwright-vscode-tester': specifier: workspace:* version: link:../../common-libs/playwright-vscode-tester axios: - specifier: ^1.13.5 + specifier: 1.13.5 version: 1.13.5 copy-webpack-plugin: - specifier: ^13.0.0 - version: 13.0.1(webpack@5.105.2) + specifier: 13.0.0 + version: 13.0.0(webpack@5.104.1) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 del-cli: - specifier: ^6.0.0 + specifier: 6.0.0 version: 6.0.0 mocha: - specifier: ^11.5.0 + specifier: 11.5.0 version: 11.5.0 terser-webpack-plugin: - specifier: ^5.3.10 - version: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2) + specifier: 5.3.10 + version: 5.3.10(webpack@5.104.1) ts-loader: - specifier: ~9.5.2 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.2 + version: 9.5.2(typescript@5.8.3)(webpack@5.104.1) typescript: specifier: 5.8.3 version: 5.8.3 vscode-extension-tester: - specifier: ^8.14.1 + specifier: 8.14.1 version: 8.14.1(mocha@11.5.0)(typescript@5.8.3) webpack: - specifier: ^5.94.0 - version: 5.105.2(webpack-cli@6.0.1) + specifier: 5.104.1 + version: 5.104.1(webpack-cli@6.0.1) webpack-cli: - specifier: ^6.0.1 - version: 6.0.1(webpack@5.105.2) + specifier: 6.0.1 + version: 6.0.1(webpack@5.104.1) webpack-permissions-plugin: - specifier: ^1.0.9 - version: 1.0.10 + specifier: 1.0.9 + version: 1.0.9 ../../workspaces/choreo/choreo-webviews: dependencies: '@biomejs/biome': - specifier: ^1.9.4 + specifier: 1.9.4 version: 1.9.4 '@formkit/auto-animate': specifier: 0.8.2 version: 0.8.2 '@hookform/resolvers': - specifier: ^5.0.1 - version: 5.2.2(react-hook-form@7.56.4(react@18.2.0)) + specifier: 5.0.1 + version: 5.0.1(react-hook-form@7.56.4(react@18.2.0)) '@tanstack/react-query': - specifier: ~4.28.0 + specifier: 4.28.0 version: 4.28.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/react-query-persist-client': - specifier: ~4.28.0 + specifier: 4.28.0 version: 4.28.0(@tanstack/react-query@4.28.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) '@vscode/webview-ui-toolkit': - specifier: ^1.4.0 + specifier: 1.4.0 version: 1.4.0(react@18.2.0) '@wso2/choreo-core': specifier: workspace:* @@ -2823,16 +2973,16 @@ importers: specifier: workspace:* version: link:../../wso2-platform/wso2-platform-core classnames: - specifier: ~2.5.1 + specifier: 2.5.1 version: 2.5.1 js-yaml: - specifier: ^4.1.1 + specifier: 4.1.1 version: 4.1.1 lodash.debounce: - specifier: ~4.0.8 + specifier: 4.0.8 version: 4.0.8 prism-react-renderer: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1(react@18.2.0) react: specifier: 18.2.0 @@ -2844,24 +2994,24 @@ importers: specifier: 7.56.4 version: 7.56.4(react@18.2.0) rehype-raw: - specifier: ^6.1.0 + specifier: 6.1.0 version: 6.1.0 remark-gfm: - specifier: ^4.0.1 + specifier: 4.0.1 version: 4.0.1 vscode-messenger-common: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 vscode-messenger-webview: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 devDependencies: '@types/lodash.debounce': - specifier: ^4.0.9 + specifier: 4.0.9 version: 4.0.9 '@types/node': - specifier: ^22.15.24 - version: 22.15.35 + specifier: 22.15.24 + version: 22.15.24 '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -2869,70 +3019,70 @@ importers: specifier: 18.2.0 version: 18.2.0 '@types/vscode-webview': - specifier: ^1.57.5 + specifier: 1.57.5 version: 1.57.5 autoprefixer: - specifier: ^10.4.21 - version: 10.4.24(postcss@8.5.6) + specifier: 10.4.21 + version: 10.4.21(postcss@8.5.4) copyfiles: - specifier: ~2.4.1 + specifier: 2.4.1 version: 2.4.1 css-loader: - specifier: ^7.1.2 - version: 7.1.3(webpack@5.105.2) + specifier: 7.1.2 + version: 7.1.2(webpack@5.104.1) file-loader: - specifier: ^6.2.0 - version: 6.2.0(webpack@5.105.2) + specifier: 6.2.0 + version: 6.2.0(webpack@5.104.1) path: - specifier: ^0.12.7 + specifier: 0.12.7 version: 0.12.7 postcss: - specifier: ^8.5.4 - version: 8.5.6 + specifier: 8.5.4 + version: 8.5.4 postcss-loader: - specifier: ^8.1.1 - version: 8.2.0(postcss@8.5.6)(typescript@5.8.3)(webpack@5.105.2) + specifier: 8.1.1 + version: 8.1.1(postcss@8.5.4)(typescript@5.8.3)(webpack@5.104.1) sass-loader: - specifier: ^16.0.5 - version: 16.0.7(sass@1.97.3)(webpack@5.105.2) + specifier: 16.0.5 + version: 16.0.5(sass@1.89.0)(webpack@5.104.1) source-map-loader: - specifier: ^5.0.0 - version: 5.0.0(webpack@5.105.2) + specifier: 5.0.0 + version: 5.0.0(webpack@5.104.1) style-loader: - specifier: ^4.0.0 - version: 4.0.0(webpack@5.105.2) + specifier: 4.0.0 + version: 4.0.0(webpack@5.104.1) tailwindcss: - specifier: ^3.4.3 - version: 3.4.3(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + specifier: 3.4.3 + version: 3.4.3(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) ts-loader: - specifier: ^9.5.2 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.2 + version: 9.5.2(typescript@5.8.3)(webpack@5.104.1) typescript: specifier: 5.8.3 version: 5.8.3 webpack: - specifier: ^5.94.0 - version: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + specifier: 5.104.1 + version: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) webpack-cli: - specifier: ^6.0.1 - version: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.105.2) + specifier: 6.0.1 + version: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.104.1) webpack-dev-server: - specifier: ^5.2.1 - version: 5.2.3(webpack-cli@6.0.1)(webpack@5.105.2) + specifier: 5.2.3 + version: 5.2.3(webpack-cli@6.0.1)(webpack@5.104.1) ../../workspaces/common-libs/font-wso2-vscode: devDependencies: + '@twbs/fantasticon': + specifier: 3.0.0 + version: 3.0.0 '@vscode/codicons': specifier: 0.0.44 version: 0.0.44 - fantasticon: - specifier: ^3.0.0 - version: 3.0.0 icon-font-generator: - specifier: ^2.1.11 + specifier: 2.1.11 version: 2.1.11 jsonc-parser: - specifier: ^3.3.1 + specifier: 3.3.1 version: 3.3.1 ../../workspaces/common-libs/playwright-vscode-tester: @@ -2941,45 +3091,45 @@ importers: specifier: 1.55.1 version: 1.55.1 '@vscode/vsce': - specifier: ^3.7.0 - version: 3.7.1 + specifier: 3.7.0 + version: 3.7.0 compare-versions: - specifier: ~6.1.1 + specifier: 6.1.1 version: 6.1.1 fs-extra: - specifier: ~11.3.0 - version: 11.3.3 + specifier: 11.3.0 + version: 11.3.0 got: specifier: 14.4.7 version: 14.4.7 hpagent: - specifier: ~1.2.0 + specifier: 1.2.0 version: 1.2.0 playwright-core: - specifier: ~1.55.1 + specifier: 1.55.1 version: 1.55.1 targz: - specifier: ~1.0.1 + specifier: 1.0.1 version: 1.0.1 unzipper: - specifier: ~0.12.3 + specifier: 0.12.3 version: 0.12.3 devDependencies: '@types/fs-extra': - specifier: ~11.0.1 - version: 11.0.4 + specifier: 11.0.1 + version: 11.0.1 '@types/node': - specifier: ~22.15.24 - version: 22.15.35 + specifier: 22.15.24 + version: 22.15.24 '@types/unzipper': - specifier: ~0.10.11 + specifier: 0.10.11 version: 0.10.11 '@typescript-eslint/eslint-plugin': - specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + specifier: 8.33.0 + version: 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': - specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + specifier: 8.33.0 + version: 8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 @@ -2987,20 +3137,20 @@ importers: ../../workspaces/common-libs/service-designer: dependencies: '@emotion/css': - specifier: ^11.10.5 - version: 11.13.5 + specifier: 11.10.5 + version: 11.10.5(@babel/core@7.29.0) '@emotion/react': - specifier: ^11.9.3 - version: 11.14.0(@types/react@18.2.0)(react@19.1.0) + specifier: 11.9.3 + version: 11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@19.1.0) '@emotion/styled': - specifier: ^11.10.5 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0) + specifier: 11.10.5 + version: 11.10.5(@babel/core@7.29.0)(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0) '@vscode/codicons': specifier: 0.0.44 version: 0.0.44 '@vscode/webview-ui-toolkit': - specifier: ^1.2.0 - version: 1.4.0(react@19.1.0) + specifier: 1.2.0 + version: 1.2.0(react@19.1.0) '@wso2/font-wso2-vscode': specifier: workspace:* version: link:../font-wso2-vscode @@ -3012,23 +3162,23 @@ importers: version: link:../ui-toolkit devDependencies: '@storybook/addon-actions': - specifier: ~7.4.0 - version: 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 7.4.0 + version: 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/addon-essentials': - specifier: ~7.4.0 - version: 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 7.4.0 + version: 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/addon-links': - specifier: ~7.4.0 - version: 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 7.4.0 + version: 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/cli': - specifier: ^7.6.10 - version: 7.6.21(encoding@0.1.13) + specifier: 7.6.10 + version: 7.6.10(encoding@0.1.13) '@storybook/react': - specifier: ~7.4.0 - version: 7.4.6(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + specifier: 7.4.0 + version: 7.4.0(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) '@storybook/react-webpack5': - specifier: ~7.4.0 - version: 7.4.0(@babel/core@7.27.7)(@swc/helpers@0.5.19)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1) + specifier: 7.4.0 + version: 7.4.0(@babel/core@7.29.0)(@swc/helpers@0.5.19)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1) '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -3037,25 +3187,25 @@ importers: version: 18.2.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) eslint-plugin-react: - specifier: ^7.33.1 - version: 7.37.5(eslint@9.39.3(jiti@2.6.1)) + specifier: 7.33.1 + version: 7.33.1(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-react-hooks: - specifier: ^4.6.0 - version: 4.6.0(eslint@9.39.3(jiti@2.6.1)) + specifier: 4.6.0 + version: 4.6.0(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-react-refresh: - specifier: ^0.4.4 - version: 0.4.20(eslint@9.39.3(jiti@2.6.1)) + specifier: 0.4.4 + version: 0.4.4(eslint@9.39.4(jiti@2.6.1)) typescript: specifier: 5.8.3 version: 5.8.3 @@ -3063,78 +3213,78 @@ importers: ../../workspaces/common-libs/ui-toolkit: dependencies: '@emotion/css': - specifier: ^11.10.5 - version: 11.13.5 + specifier: 11.10.5 + version: 11.10.5(@babel/core@7.29.0) '@emotion/react': - specifier: ^11.9.3 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@19.1.0) '@emotion/styled': - specifier: ^11.10.5 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0) '@headlessui/react': - specifier: ~1.7.18 - version: 1.7.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 1.7.18 + version: 1.7.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@monaco-editor/react': - specifier: ~4.7.0 + specifier: 4.7.0 version: 4.7.0(monaco-editor@0.52.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@projectstorm/geometry': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4 '@projectstorm/react-canvas-core': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4(lodash@4.17.23)(react@19.1.0) '@projectstorm/react-diagrams': - specifier: ^6.7.4 - version: 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@19.1.0)(resize-observer-polyfill@1.5.1) + specifier: 6.7.4 + version: 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@19.1.0)(resize-observer-polyfill@1.5.1) '@projectstorm/react-diagrams-core': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0) '@vscode/codicons': specifier: 0.0.44 version: 0.0.44 '@vscode/webview-ui-toolkit': - specifier: ~1.4.0 + specifier: 1.4.0 version: 1.4.0(react@19.1.0) '@wso2/font-wso2-vscode': specifier: workspace:* version: link:../font-wso2-vscode classnames: - specifier: ^2.5.1 + specifier: 2.5.1 version: 2.5.1 lodash: specifier: 4.17.23 version: 4.17.23 monaco-editor: - specifier: ~0.52.2 + specifier: 0.52.2 version: 0.52.2 prismjs: - specifier: ^1.30.0 + specifier: 1.30.0 version: 1.30.0 react-hook-form: - specifier: 7.56.3 - version: 7.56.3(react@19.1.0) + specifier: 7.56.4 + version: 7.56.4(react@19.1.0) devDependencies: '@storybook/addon-docs': - specifier: ^8.6.14 - version: 8.6.14(@types/react@18.2.0)(storybook@8.6.15(prettier@3.5.3)) + specifier: 8.6.14 + version: 8.6.14(@types/react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) '@storybook/addon-essentials': - specifier: ^8.6.14 - version: 8.6.14(@types/react@18.2.0)(storybook@8.6.15(prettier@3.5.3)) + specifier: 8.6.14 + version: 8.6.14(@types/react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) '@storybook/cli': - specifier: ^8.6.14 - version: 8.6.15(@babel/preset-env@7.27.2(@babel/core@7.27.7))(prettier@3.5.3) + specifier: 8.6.14 + version: 8.6.14(@babel/preset-env@7.27.2(@babel/core@7.29.0))(prettier@3.5.3) '@storybook/react': - specifier: ^8.6.14 - version: 8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3) + specifier: 8.6.14 + version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) '@storybook/react-vite': - specifier: ^8.6.14 - version: 8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.57.1)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3)(vite@6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) + specifier: 8.6.14 + version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.41.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(vite@6.0.7(@types/node@22.15.24)(jiti@2.6.1)(sass@1.89.0)(terser@5.46.0)(yaml@2.8.0)) '@types/lodash': - specifier: ~4.17.16 - version: 4.17.17 + specifier: 4.17.16 + version: 4.17.16 '@types/prismjs': - specifier: ^1.26.5 - version: 1.26.6 + specifier: 1.26.5 + version: 1.26.5 '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -3143,86 +3293,86 @@ importers: version: 18.2.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) copyfiles: - specifier: ~2.4.1 + specifier: 2.4.1 version: 2.4.1 eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) eslint-plugin-react: - specifier: ^7.37.5 - version: 7.37.5(eslint@9.39.3(jiti@2.6.1)) + specifier: 7.37.5 + version: 7.37.5(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-react-hooks: - specifier: ^5.2.0 - version: 5.2.0(eslint@9.39.3(jiti@2.6.1)) + specifier: 5.2.0 + version: 5.2.0(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-storybook: - specifier: ^0.8.0 - version: 0.8.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + specifier: 0.8.0 + version: 0.8.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) gh-pages: - specifier: ^6.3.0 + specifier: 6.3.0 version: 6.3.0 glob: - specifier: ^11.1.0 + specifier: 11.1.0 version: 11.1.0 http-server: - specifier: ^14.1.1 + specifier: 14.1.1 version: 14.1.1 react-error-boundary: - specifier: ^6.0.0 - version: 6.0.3(react@19.1.0) + specifier: 6.0.0 + version: 6.0.0(react@19.1.0) storybook: - specifier: ^8.6.14 - version: 8.6.15(prettier@3.5.3) + specifier: 8.6.14 + version: 8.6.14(prettier@3.5.3) typescript: specifier: 5.8.3 version: 5.8.3 vite: - specifier: ^6.0.7 - version: 6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2) + specifier: 6.0.7 + version: 6.0.7(@types/node@22.15.24)(jiti@2.6.1)(sass@1.89.0)(terser@5.46.0)(yaml@2.8.0) ../../workspaces/mcp-inspector/mcp-inspector-extension: dependencies: '@modelcontextprotocol/inspector': - specifier: ^0.17.2 - version: 0.17.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.18)(@types/react-dom@18.2.0)(@types/react@18.2.0)(typescript@5.8.3) + specifier: 0.21.0 + version: 0.21.0(@preact/signals-core@1.14.0)(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.18)(@types/react-dom@18.2.0)(@types/react@18.2.0)(typescript@5.8.3) devDependencies: '@types/mocha': - specifier: ^10.0.3 - version: 10.0.10 + specifier: 10.0.3 + version: 10.0.3 '@types/node': specifier: 22.15.18 version: 22.15.18 '@types/vscode': - specifier: ^1.84.0 - version: 1.109.0 + specifier: 1.104.0 + version: 1.104.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@vscode/test-electron': - specifier: ^2.5.2 + specifier: 2.5.2 version: 2.5.2 '@vscode/vsce': - specifier: ^3.7.0 - version: 3.7.1 + specifier: 3.7.0 + version: 3.7.0 copy-webpack-plugin: - specifier: ^13.0.0 - version: 13.0.1(webpack@5.105.2) + specifier: 13.0.0 + version: 13.0.0(webpack@5.104.1) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) mocha: - specifier: ^11.2.2 - version: 11.5.0 + specifier: 11.2.2 + version: 11.2.2 open: specifier: 10.2.0 version: 10.2.0 @@ -3230,49 +3380,49 @@ importers: specifier: 6.1.6 version: 6.1.6 ts-loader: - specifier: ^9.5.2 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.2 + version: 9.5.2(typescript@5.8.3)(webpack@5.104.1) typescript: specifier: 5.8.3 version: 5.8.3 webpack: - specifier: ^5.94.0 - version: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@5.1.4) + specifier: 5.104.1 + version: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@5.1.4) webpack-cli: - specifier: ^5.1.4 - version: 5.1.4(webpack@5.105.2) + specifier: 5.1.4 + version: 5.1.4(webpack@5.104.1) ../../workspaces/mi/mi-component-diagram: dependencies: '@emotion/react': - specifier: ^11.9.3 - version: 11.14.0(@types/react@18.2.0)(react@18.2.0) + specifier: 11.9.3 + version: 11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ^11.10.5 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.10.5 + version: 11.10.5(@babel/core@7.29.0)(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@projectstorm/geometry': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4 '@projectstorm/react-canvas-core': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4(lodash@4.17.23)(react@18.2.0) '@projectstorm/react-diagrams': - specifier: ^6.7.4 - version: 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1) + specifier: 6.7.4 + version: 6.7.4(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.10.5(@babel/core@7.29.0)(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1) '@projectstorm/react-diagrams-core': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) '@projectstorm/react-diagrams-defaults': - specifier: ^6.7.4 - version: 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) + specifier: 6.7.4 + version: 6.7.4(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.10.5(@babel/core@7.29.0)(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) '@projectstorm/react-diagrams-routing': - specifier: ^6.7.4 - version: 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1) + specifier: 6.7.4 + version: 6.7.4(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.10.5(@babel/core@7.29.0)(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1) '@wso2/ui-toolkit': specifier: workspace:* version: link:../../common-libs/ui-toolkit dagre: - specifier: ~0.8.5 + specifier: 0.8.5 version: 0.8.5 lodash: specifier: 4.17.23 @@ -3285,13 +3435,13 @@ importers: version: 18.2.0(react@18.2.0) devDependencies: '@storybook/react': - specifier: ^6.3.7 - version: 6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.3(webpack@5.105.2))(webpack-hot-middleware@2.26.1) + specifier: 6.3.7 + version: 6.3.7(@babel/core@7.29.0)(@types/react@18.2.0)(@types/webpack@4.41.40)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1) '@types/dagre': - specifier: ~0.7.52 - version: 0.7.53 + specifier: 0.7.52 + version: 0.7.52 '@types/lodash': - specifier: ~4.14.202 + specifier: 4.14.202 version: 4.14.202 '@types/react': specifier: 18.2.0 @@ -3300,7 +3450,7 @@ importers: specifier: 18.2.0 version: 18.2.0 copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 typescript: specifier: 5.8.3 @@ -3309,33 +3459,33 @@ importers: ../../workspaces/mi/mi-core: dependencies: '@types/vscode-webview': - specifier: ^1.57.5 + specifier: 1.57.5 version: 1.57.5 '@wso2/mi-syntax-tree': specifier: workspace:* version: link:../syntax-tree vscode-languageserver-types: - specifier: ~3.17.5 + specifier: 3.17.5 version: 3.17.5 vscode-messenger-common: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 devDependencies: '@eslint/eslintrc': - specifier: ~3.3.1 - version: 3.3.3 + specifier: 3.3.1 + version: 3.3.1 '@eslint/js': - specifier: ~9.27.0 + specifier: 9.27.0 version: 9.27.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) typescript: specifier: 5.8.3 version: 5.8.3 @@ -3343,38 +3493,35 @@ importers: ../../workspaces/mi/mi-data-mapper: dependencies: '@emotion/css': - specifier: ~11.13.5 + specifier: 11.13.5 version: 11.13.5 '@emotion/react': - specifier: ^11.14.0 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ^11.14.0 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@projectstorm/geometry': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4 '@projectstorm/react-canvas-core': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4(lodash@4.17.23)(react@18.2.0) '@projectstorm/react-diagrams': - specifier: ^6.7.4 - version: 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1) + specifier: 6.7.4 + version: 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1) '@projectstorm/react-diagrams-core': - specifier: ^6.7.4 + specifier: 6.7.4 version: 6.7.4(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) '@tanstack/query-core': - specifier: ^5.76.2 - version: 5.90.20 + specifier: 5.76.2 + version: 5.76.2 '@tanstack/react-query': specifier: 5.76.2 version: 5.76.2(react@18.2.0) - '@types/mousetrap': - specifier: ~1.6.15 - version: 1.6.15 '@vscode/webview-ui-toolkit': - specifier: ^1.2.0 - version: 1.4.0(react@18.2.0) + specifier: 1.2.0 + version: 1.2.0(react@18.2.0) '@wso2/mi-core': specifier: workspace:* version: link:../mi-core @@ -3385,25 +3532,25 @@ importers: specifier: workspace:* version: link:../../common-libs/ui-toolkit ajv: - specifier: ~8.17.1 + specifier: 8.17.1 version: 8.17.1 ajv-formats: - specifier: ~3.0.1 + specifier: 3.0.1 version: 3.0.1(ajv@8.17.1) blueimp-md5: - specifier: ^2.19.0 + specifier: 2.19.0 version: 2.19.0 classnames: - specifier: ^2.5.1 + specifier: 2.5.1 version: 2.5.1 lodash: specifier: 4.17.23 version: 4.17.23 lodash.debounce: - specifier: ^4.0.8 + specifier: 4.0.8 version: 4.0.8 mousetrap: - specifier: ^1.6.5 + specifier: 1.6.5 version: 1.6.5 react: specifier: 18.2.0 @@ -3412,24 +3559,27 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) resize-observer-polyfill: - specifier: ^1.5.1 + specifier: 1.5.1 version: 1.5.1 vscode-languageserver-types: - specifier: ^3.17.5 + specifier: 3.17.5 version: 3.17.5 zustand: - specifier: ^5.0.5 - version: 5.0.11(@types/react@18.2.0)(react@18.2.0)(use-sync-external-store@1.6.0(react@18.2.0)) + specifier: 5.0.5 + version: 5.0.5(@types/react@18.2.0)(react@18.2.0)(use-sync-external-store@1.6.0(react@18.2.0)) devDependencies: '@types/blueimp-md5': - specifier: ^2.18.2 + specifier: 2.18.2 version: 2.18.2 '@types/lodash': specifier: 4.17.17 version: 4.17.17 '@types/lodash.debounce': - specifier: ^4.0.9 + specifier: 4.0.9 version: 4.0.9 + '@types/mousetrap': + specifier: 1.6.15 + version: 1.6.15 '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -3438,48 +3588,48 @@ importers: version: 18.2.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 css-loader: - specifier: ^7.1.2 - version: 7.1.3(webpack@5.105.2) + specifier: 7.1.2 + version: 7.1.2(webpack@5.104.1) eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) eslint-plugin-react-hooks: - specifier: ^5.2.0 - version: 5.2.0(eslint@9.39.3(jiti@2.6.1)) + specifier: 5.2.0 + version: 5.2.0(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-react-refresh: - specifier: ^0.4.20 - version: 0.4.20(eslint@9.39.3(jiti@2.6.1)) + specifier: 0.4.20 + version: 0.4.20(eslint@9.39.4(jiti@2.6.1)) file-loader: - specifier: ^6.2.0 - version: 6.2.0(webpack@5.105.2) + specifier: 6.2.0 + version: 6.2.0(webpack@5.104.1) react-hook-form: specifier: 7.56.4 version: 7.56.4(react@18.2.0) ts-loader: - specifier: ^9.5.2 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.2 + version: 9.5.2(typescript@5.8.3)(webpack@5.104.1) ts-morph: - specifier: ^22.0.0 + specifier: 22.0.0 version: 22.0.0 tslib: - specifier: ^2.8.1 + specifier: 2.8.1 version: 2.8.1 tslint: - specifier: ^6.1.3 + specifier: 6.1.3 version: 6.1.3(typescript@5.8.3) tslint-react: - specifier: ^5.0.0 + specifier: 5.0.0 version: 5.0.0(tslint@6.1.3(typescript@5.8.3))(typescript@5.8.3) tslint-react-hooks: - specifier: ^2.2.2 + specifier: 2.2.2 version: 2.2.2(tslint@6.1.3(typescript@5.8.3))(typescript@5.8.3) typescript: specifier: 5.8.3 @@ -3490,49 +3640,49 @@ importers: ../../workspaces/mi/mi-diagram: dependencies: '@emotion/css': - specifier: ^11.13.5 + specifier: 11.13.5 version: 11.13.5 '@emotion/react': - specifier: ~11.14.0 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ~11.14.0 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@hookform/resolvers': - specifier: ^2.8.0 - version: 2.9.11(react-hook-form@7.56.4(react@18.2.0)) + specifier: 2.8.0 + version: 2.8.0(react-hook-form@7.56.4(react@18.2.0)) '@projectstorm/geometry': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3 '@projectstorm/react-canvas-core': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3(@types/react@18.2.0) '@projectstorm/react-diagrams': - specifier: ^7.0.4 + specifier: 7.0.4 version: 7.0.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@projectstorm/react-diagrams-core': - specifier: ^7.0.3 + specifier: 7.0.3 version: 7.0.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@projectstorm/react-diagrams-defaults': - specifier: ^7.1.3 + specifier: 7.1.3 version: 7.1.3(@types/react@18.2.0) '@projectstorm/react-diagrams-routing': - specifier: ^7.1.3 + specifier: 7.1.3 version: 7.1.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) '@types/lodash': - specifier: ~4.17.17 + specifier: 4.17.17 version: 4.17.17 '@types/mousetrap': - specifier: ~1.6.15 + specifier: 1.6.15 version: 1.6.15 '@types/mustache': - specifier: ~4.2.5 - version: 4.2.6 + specifier: 4.2.5 + version: 4.2.5 '@types/node': - specifier: ~22.15.21 - version: 22.15.35 + specifier: 22.15.21 + version: 22.15.21 '@vscode/webview-ui-toolkit': - specifier: ~1.4.0 + specifier: 1.4.0 version: 1.4.0(react@18.2.0) '@wso2/mi-core': specifier: workspace:* @@ -3547,14 +3697,14 @@ importers: specifier: workspace:* version: link:../../common-libs/ui-toolkit copyfiles: - specifier: ~2.4.1 + specifier: 2.4.1 version: 2.4.1 eslint-plugin-react-hooks: - specifier: ~5.2.0 - version: 5.2.0(eslint@9.39.3(jiti@2.6.1)) + specifier: 5.2.0 + version: 5.2.0(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-unused-imports: - specifier: ~4.1.4 - version: 4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1)) + specifier: 4.1.4 + version: 4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1)) html-to-image: specifier: 1.11.11 version: 1.11.11 @@ -3562,20 +3712,20 @@ importers: specifier: 4.17.23 version: 4.17.23 mousetrap: - specifier: ~1.6.5 + specifier: 1.6.5 version: 1.6.5 mustache: - specifier: ~4.2.0 + specifier: 4.2.0 version: 4.2.0 path: - specifier: ~0.12.7 + specifier: 0.12.7 version: 0.12.7 react: specifier: 18.2.0 version: 18.2.0 react-dnd: specifier: 16.0.1 - version: 16.0.1(@types/hoist-non-react-statics@3.3.7(@types/react@18.2.0))(@types/node@22.15.35)(@types/react@18.2.0)(react@18.2.0) + version: 16.0.1(@types/hoist-non-react-statics@3.3.7(@types/react@18.2.0))(@types/node@22.15.21)(@types/react@18.2.0)(react@18.2.0) react-dnd-html5-backend: specifier: 16.0.1 version: 16.0.1 @@ -3586,68 +3736,68 @@ importers: specifier: 7.56.4 version: 7.56.4(react@18.2.0) react-json-view: - specifier: latest + specifier: 1.21.3 version: 1.21.3(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-json-view-lite: - specifier: latest + specifier: 2.5.0 version: 2.5.0(react@18.2.0) react-markdown: - specifier: ~10.1.0 + specifier: 10.1.0 version: 10.1.0(@types/react@18.2.0)(react@18.2.0) vscode-languageserver-types: - specifier: ~3.17.5 + specifier: 3.17.5 version: 3.17.5 xmlbuilder2: - specifier: ~3.1.1 + specifier: 3.1.1 version: 3.1.1 yup: - specifier: ~1.6.1 + specifier: 1.6.1 version: 1.6.1 devDependencies: '@babel/core': - specifier: ~7.27.1 - version: 7.27.7 + specifier: 7.27.1 + version: 7.27.1 '@babel/preset-env': - specifier: ~7.27.2 - version: 7.27.2(@babel/core@7.27.7) + specifier: 7.27.2 + version: 7.27.2(@babel/core@7.27.1) '@storybook/addon-essentials': - specifier: ^8.6.14 - version: 8.6.14(@types/react@18.2.0)(storybook@8.6.15(prettier@3.5.3)) + specifier: 8.6.14 + version: 8.6.14(@types/react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) '@storybook/addon-interactions': - specifier: ^8.6.14 - version: 8.6.14(storybook@8.6.15(prettier@3.5.3)) + specifier: 8.6.14 + version: 8.6.14(storybook@8.6.14(prettier@3.5.3)) '@storybook/addon-links': - specifier: ^8.6.14 - version: 8.6.15(react@18.2.0)(storybook@8.6.15(prettier@3.5.3)) + specifier: 8.6.14 + version: 8.6.14(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) '@storybook/addon-onboarding': - specifier: ^8.6.14 - version: 8.6.15(storybook@8.6.15(prettier@3.5.3)) + specifier: 8.6.14 + version: 8.6.14(storybook@8.6.14(prettier@3.5.3)) '@storybook/blocks': - specifier: ^8.6.14 - version: 8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3)) + specifier: 8.6.14 + version: 8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) '@storybook/react': - specifier: ^8.6.14 - version: 8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3) + specifier: 8.6.14 + version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) '@storybook/react-webpack5': - specifier: ^8.6.14 - version: 8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3) + specifier: 8.6.14 + version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) '@storybook/test': - specifier: ^8.6.14 - version: 8.6.15(storybook@8.6.15(prettier@3.5.3)) + specifier: 8.6.14 + version: 8.6.14(storybook@8.6.14(prettier@3.5.3)) '@testing-library/dom': - specifier: ~10.4.0 - version: 10.4.1 + specifier: 10.4.0 + version: 10.4.0 '@testing-library/jest-dom': - specifier: ~6.6.3 - version: 6.6.4 + specifier: 6.6.3 + version: 6.6.3 '@testing-library/react': - specifier: ~16.3.0 - version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 16.3.0 + version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/deep-equal': - specifier: ~1.0.4 + specifier: 1.0.4 version: 1.0.4 '@types/jest': - specifier: ^30.0.0 + specifier: 30.0.0 version: 30.0.0 '@types/react': specifier: 18.2.0 @@ -3656,97 +3806,97 @@ importers: specifier: 18.2.0 version: 18.2.0 '@types/react-test-renderer': - specifier: ~19.1.0 - version: 19.1.0 + specifier: 18.3.0 + version: 18.3.0 '@types/xml2js': - specifier: ~0.4.14 + specifier: 0.4.14 version: 0.4.14 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) babel-jest: - specifier: ^30.0.0 - version: 30.2.0(@babel/core@7.27.7) + specifier: 30.0.0 + version: 30.0.0(@babel/core@7.27.1) deep-equal: - specifier: ~2.2.3 + specifier: 2.2.3 version: 2.2.3 identity-obj-proxy: - specifier: ~3.0.0 + specifier: 3.0.0 version: 3.0.0 jest: - specifier: ^30.0.0 - version: 30.0.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + specifier: 30.0.0 + version: 30.0.0(@types/node@22.15.21)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3)) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 pretty-format: - specifier: ~29.7.0 + specifier: 29.7.0 version: 29.7.0 react-test-renderer: - specifier: ~19.1.0 - version: 19.1.5(react@18.2.0) + specifier: 18.3.0 + version: 18.3.0(react@18.2.0) storybook: - specifier: ^8.6.14 - version: 8.6.15(prettier@3.5.3) + specifier: 8.6.14 + version: 8.6.14(prettier@3.5.3) ts-jest: specifier: 29.3.4 - version: 29.3.4(@babel/core@7.27.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@30.2.0(@babel/core@7.27.7))(esbuild@0.25.12)(jest@30.0.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@30.0.0(@babel/core@7.27.1))(esbuild@0.25.12)(jest@30.0.0(@types/node@22.15.21)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3)))(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 vscode-jsonrpc: - specifier: ^8.2.1 + specifier: 8.2.1 version: 8.2.1 vscode-languageclient: - specifier: ^9.0.1 + specifier: 9.0.1 version: 9.0.1 vscode-languageserver-protocol: - specifier: ^3.17.5 + specifier: 3.17.5 version: 3.17.5 xml2js: - specifier: ~0.6.2 + specifier: 0.6.2 version: 0.6.2 ../../workspaces/mi/mi-extension: dependencies: '@ai-sdk/anthropic': - specifier: ^2.0.35 - version: 2.0.63(zod@3.25.76) + specifier: 2.0.35 + version: 2.0.35(zod@4.1.11) '@apidevtools/json-schema-ref-parser': specifier: 12.0.2 version: 12.0.2 '@babel/core': - specifier: ^7.27.1 - version: 7.27.7 + specifier: 7.27.1 + version: 7.27.1 '@babel/plugin-transform-typescript': - specifier: ^7.27.1 - version: 7.28.6(@babel/core@7.27.7) + specifier: 7.27.1 + version: 7.27.1(@babel/core@7.27.1) '@iarna/toml': - specifier: ^2.2.5 + specifier: 2.2.5 version: 2.2.5 '@types/fs-extra': - specifier: ~11.0.4 + specifier: 11.0.4 version: 11.0.4 '@types/handlebars': - specifier: ^4.1.0 + specifier: 4.1.0 version: 4.1.0 '@types/json-schema': specifier: 7.0.15 version: 7.0.15 '@types/lodash': - specifier: ~4.17.17 + specifier: 4.17.17 version: 4.17.17 '@types/mustache': - specifier: ~4.2.6 + specifier: 4.2.6 version: 4.2.6 '@types/tmp': - specifier: ~0.2.6 + specifier: 0.2.6 version: 0.2.6 '@types/xml2js': - specifier: ~0.4.12 - version: 0.4.14 + specifier: 0.4.12 + version: 0.4.12 '@vscode/vsce': - specifier: ^3.7.0 + specifier: 3.7.1 version: 3.7.1 '@wso2/font-wso2-vscode': specifier: workspace:* @@ -3767,34 +3917,34 @@ importers: specifier: workspace:* version: link:../../common-libs/playwright-vscode-tester adm-zip: - specifier: ~0.5.16 + specifier: 0.5.16 version: 0.5.16 ai: - specifier: ^5.0.76 - version: 5.0.131(zod@3.25.76) + specifier: 5.0.76 + version: 5.0.76(zod@4.1.11) axios: - specifier: ^1.13.5 + specifier: 1.13.5 version: 1.13.5 copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 cors-anywhere: - specifier: ^0.4.4 + specifier: 0.4.4 version: 0.4.4 dotenv: - specifier: ~16.5.0 + specifier: 16.5.0 version: 16.5.0 fast-xml-parser: - specifier: 5.3.7 - version: 5.3.7 + specifier: 5.3.8 + version: 5.3.8 find-process: - specifier: ~1.4.10 - version: 1.4.11 + specifier: 1.4.10 + version: 1.4.10 fs-extra: - specifier: ~11.3.0 - version: 11.3.3 + specifier: 11.3.0 + version: 11.3.0 handlebars: - specifier: ^4.7.8 + specifier: 4.7.8 version: 4.7.8 json-schema: specifier: 0.4.0 @@ -3803,98 +3953,98 @@ importers: specifier: 3.1.1 version: 3.1.1 jsonix: - specifier: ~3.0.0 + specifier: 3.0.0 version: 3.0.0 jwt-decode: - specifier: ^4.0.0 + specifier: 4.0.0 version: 4.0.0 lodash: specifier: 4.17.23 version: 4.17.23 mustache: - specifier: ~4.2.0 + specifier: 4.2.0 version: 4.2.0 node-fetch: - specifier: ~3.3.2 + specifier: 3.3.2 version: 3.3.2 node-loader: - specifier: ~2.1.0 - version: 2.1.0(webpack@5.105.2) + specifier: 2.1.0 + version: 2.1.0(webpack@5.104.1) portfinder: - specifier: ^1.0.37 - version: 1.0.38 + specifier: 1.0.37 + version: 1.0.37 recast: - specifier: ^0.23.11 + specifier: 0.23.11 version: 0.23.11 tmp: - specifier: ~0.2.4 - version: 0.2.5 + specifier: 0.2.4 + version: 0.2.4 to-json-schema: specifier: 0.2.5 version: 0.2.5 tree-kill: - specifier: ~1.2.2 + specifier: 1.2.2 version: 1.2.2 unzipper: - specifier: ~0.12.3 + specifier: 0.12.3 version: 0.12.3 upath: - specifier: ~2.0.1 + specifier: 2.0.1 version: 2.0.1 uuid: - specifier: ~11.1.0 + specifier: 11.1.0 version: 11.1.0 vscode-debugadapter: - specifier: ^1.51.0 + specifier: 1.51.0 version: 1.51.0 vscode-debugprotocol: - specifier: ^1.51.0 + specifier: 1.51.0 version: 1.51.0 vscode-extension-tester: - specifier: ~8.14.1 - version: 8.14.1(mocha@11.5.0)(typescript@5.8.3) + specifier: 8.14.1 + version: 8.14.1(mocha@11.4.0)(typescript@5.8.3) vscode-languageclient: - specifier: ^9.0.1 + specifier: 9.0.1 version: 9.0.1 vscode-languageserver-protocol: - specifier: ^3.17.5 + specifier: 3.17.5 version: 3.17.5 vscode-messenger: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 vscode-messenger-common: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 xml2js: specifier: 0.6.2 version: 0.6.2 xstate: - specifier: ^4.38.3 + specifier: 4.38.3 version: 4.38.3 zod: - specifier: ^3.24.1 - version: 3.25.76 + specifier: 4.1.11 + version: 4.1.11 devDependencies: '@playwright/test': - specifier: ~1.55.1 + specifier: 1.55.1 version: 1.55.1 '@types/mocha': - specifier: ^10.0.1 - version: 10.0.10 + specifier: 10.0.1 + version: 10.0.1 '@types/node': specifier: 22.15.21 version: 22.15.21 '@types/vscode': - specifier: ^1.100.0 - version: 1.109.0 + specifier: 1.100.0 + version: 1.100.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@vscode/test-electron': - specifier: ^2.5.2 + specifier: 2.5.2 version: 2.5.2 '@wso2/mi-data-mapper-utils': specifier: workspace:* @@ -3906,46 +4056,46 @@ importers: specifier: workspace:* version: link:../../wso2-platform/wso2-platform-core await-notify: - specifier: ^1.0.1 + specifier: 1.0.1 version: 1.0.1 eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) glob: - specifier: ^11.0.2 - version: 11.1.0 + specifier: 11.0.2 + version: 11.0.2 mocha: - specifier: ^11.4.0 - version: 11.5.0 + specifier: 11.4.0 + version: 11.4.0 playwright-core: - specifier: ~1.55.1 + specifier: 1.55.1 version: 1.55.1 rimraf: - specifier: ~6.0.1 + specifier: 6.0.1 version: 6.0.1 ts-loader: - specifier: ^9.5.2 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.2 + version: 9.5.2(typescript@5.8.3)(webpack@5.104.1) ts-morph: - specifier: ^26.0.0 + specifier: 26.0.0 version: 26.0.0 typescript: specifier: 5.8.3 version: 5.8.3 webpack: - specifier: ^5.94.0 - version: 5.105.2(webpack-cli@4.10.0) + specifier: 5.104.1 + version: 5.104.1(webpack-cli@4.10.0) webpack-cli: - specifier: ^4.10.0 - version: 4.10.0(webpack@5.105.2) + specifier: 4.10.0 + version: 4.10.0(webpack@5.104.1) yaml: - specifier: ~2.8.0 - version: 2.8.2 + specifier: 2.8.0 + version: 2.8.0 ../../workspaces/mi/mi-rpc-client: dependencies: '@types/vscode-webview': - specifier: ^1.57.5 + specifier: 1.57.5 version: 1.57.5 '@wso2/mi-core': specifier: workspace:* @@ -3960,10 +4110,10 @@ importers: specifier: 19.1.0 version: 19.1.0(react@19.1.0) vscode-messenger-common: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 vscode-messenger-webview: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 devDependencies: '@types/react': @@ -3974,13 +4124,13 @@ importers: version: 18.2.0 '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: 8.32.1 - version: 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) typescript: specifier: 5.8.3 version: 5.8.3 @@ -3988,64 +4138,61 @@ importers: ../../workspaces/mi/mi-visualizer: dependencies: '@codemirror/lang-xml': - specifier: ~6.1.0 + specifier: 6.1.0 version: 6.1.0 '@codemirror/lint': - specifier: ~6.8.5 + specifier: 6.8.5 version: 6.8.5 '@codemirror/theme-one-dark': - specifier: ~6.1.2 - version: 6.1.3 + specifier: 6.1.2 + version: 6.1.2 '@emotion/css': - specifier: ^11.13.5 + specifier: 11.13.5 version: 11.13.5 '@emotion/react': - specifier: ^11.14.0 + specifier: 11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': - specifier: ^11.14.0 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + specifier: 11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@hookform/resolvers': - specifier: ^2.8.0 - version: 2.9.11(react-hook-form@7.56.4(react@18.2.0)) + specifier: 2.8.0 + version: 2.8.0(react-hook-form@7.56.4(react@18.2.0)) '@monaco-editor/react': - specifier: ^4.7.0 + specifier: 4.7.0 version: 4.7.0(monaco-editor@0.52.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@playwright/test': specifier: 1.55.1 version: 1.55.1 '@pmmmwh/react-refresh-webpack-plugin': - specifier: ~0.6.0 - version: 0.6.2(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.105.2) + specifier: 0.6.0 + version: 0.6.0(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1) '@tanstack/query-core': - specifier: ^5.76.0 - version: 5.90.20 + specifier: 5.76.0 + version: 5.76.0 '@tanstack/react-query': specifier: 5.76.1 version: 5.76.1(react@18.2.0) '@types/react-collapse': - specifier: ~5.0.4 + specifier: 5.0.4 version: 5.0.4 '@types/react-split-pane': - specifier: ~0.1.67 + specifier: 0.1.67 version: 0.1.67(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/react-syntax-highlighter': - specifier: ~15.5.13 + specifier: 15.5.13 version: 15.5.13 '@types/swagger-ui-react': - specifier: ^5.18.0 + specifier: 5.18.0 version: 5.18.0 '@types/uuid': - specifier: ~10.0.0 + specifier: 10.0.0 version: 10.0.0 - '@types/vscode-webview': - specifier: ^1.57.5 - version: 1.57.5 '@uiw/react-codemirror': - specifier: ~4.23.12 - version: 4.23.14(@codemirror/lint@6.8.5)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.38.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 4.23.12 + version: 4.23.12(@codemirror/lint@6.8.5)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.38.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@vscode/webview-ui-toolkit': - specifier: ^1.4.0 + specifier: 1.4.0 version: 1.4.0(react@18.2.0) '@wso2/mi-component-diagram': specifier: workspace:* @@ -4075,28 +4222,28 @@ importers: specifier: workspace:* version: link:../../wso2-platform/wso2-platform-core cron-expression-validator: - specifier: ~1.0.20 + specifier: 1.0.20 version: 1.0.20 fast-xml-parser: - specifier: 5.3.7 - version: 5.3.7 + specifier: 5.3.8 + version: 5.3.8 lodash: specifier: 4.17.23 version: 4.17.23 mustache: - specifier: ~4.2.0 + specifier: 4.2.0 version: 4.2.0 path: - specifier: ~0.12.7 + specifier: 0.12.7 version: 0.12.7 process: - specifier: ~0.11.10 + specifier: 0.11.10 version: 0.11.10 react: specifier: 18.2.0 version: 18.2.0 react-collapse: - specifier: ~5.1.1 + specifier: 5.1.1 version: 5.1.1(react@18.2.0) react-dom: specifier: 18.2.0 @@ -4105,154 +4252,157 @@ importers: specifier: 7.56.4 version: 7.56.4(react@18.2.0) react-hot-loader: - specifier: ~4.13.1 + specifier: 4.13.1 version: 4.13.1(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-markdown: - specifier: ~10.1.0 + specifier: 10.1.0 version: 10.1.0(@types/react@18.2.0)(react@18.2.0) react-pdf: - specifier: ~9.2.1 + specifier: 9.2.1 version: 9.2.1(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-split-pane: - specifier: ~0.1.92 + specifier: 0.1.92 version: 0.1.92(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-syntax-highlighter: - specifier: ~15.6.1 - version: 15.6.6(react@18.2.0) + specifier: 15.6.1 + version: 15.6.1(react@18.2.0) swagger-ui-react: specifier: 5.21.0 version: 5.21.0(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) upath: - specifier: ~2.0.1 + specifier: 2.0.1 version: 2.0.1 uuid: - specifier: ~11.1.0 + specifier: 11.1.0 version: 11.1.0 xmlbuilder2: - specifier: ~3.1.1 + specifier: 3.1.1 version: 3.1.1 yup: - specifier: ~1.6.1 + specifier: 1.6.1 version: 1.6.1 devDependencies: '@babel/plugin-syntax-flow': - specifier: ~7.27.1 - version: 7.27.1(@babel/core@7.27.7) + specifier: 7.27.1 + version: 7.27.1(@babel/core@7.29.0) '@babel/preset-typescript': - specifier: ~7.27.1 - version: 7.27.1(@babel/core@7.27.7) + specifier: 7.27.1 + version: 7.27.1(@babel/core@7.29.0) '@headlessui/react': - specifier: ~2.2.4 - version: 2.2.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 2.2.4 + version: 2.2.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-actions': - specifier: ~8.6.14 - version: 8.6.15(storybook@8.6.15(prettier@3.5.3)) + specifier: 8.6.14 + version: 8.6.14(storybook@8.6.14(prettier@3.5.3)) '@storybook/addon-essentials': - specifier: ~8.6.14 - version: 8.6.14(@types/react@18.2.0)(storybook@8.6.15(prettier@3.5.3)) + specifier: 8.6.14 + version: 8.6.14(@types/react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) '@storybook/addon-links': - specifier: ~8.6.14 - version: 8.6.15(react@18.2.0)(storybook@8.6.15(prettier@3.5.3)) + specifier: 8.6.14 + version: 8.6.14(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) '@storybook/react-webpack5': - specifier: ~8.6.14 - version: 8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4) + specifier: 8.6.14 + version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4) '@types/lodash': - specifier: ~4.17.17 + specifier: 4.17.17 version: 4.17.17 '@types/mustache': - specifier: ~4.2.6 + specifier: 4.2.6 version: 4.2.6 '@types/node': - specifier: ^22.15.21 - version: 22.15.35 + specifier: 22.15.21 + version: 22.15.21 '@types/react': specifier: 18.2.0 version: 18.2.0 '@types/react-dom': specifier: 18.2.0 version: 18.2.0 + '@types/vscode-webview': + specifier: 1.57.5 + version: 1.57.5 copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 css-loader: - specifier: ^7.1.2 - version: 7.1.3(webpack@5.105.2) + specifier: 7.1.2 + version: 7.1.2(webpack@5.104.1) sass-loader: - specifier: ^16.0.5 - version: 16.0.7(sass@1.97.3)(webpack@5.105.2) + specifier: 16.0.5 + version: 16.0.5(sass@1.89.0)(webpack@5.104.1) source-map-loader: - specifier: ^5.0.0 - version: 5.0.0(webpack@5.105.2) + specifier: 5.0.0 + version: 5.0.0(webpack@5.104.1) style-loader: - specifier: ^4.0.0 - version: 4.0.0(webpack@5.105.2) + specifier: 4.0.0 + version: 4.0.0(webpack@5.104.1) ts-loader: - specifier: ^9.5.2 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.2 + version: 9.5.2(typescript@5.8.3)(webpack@5.104.1) typescript: specifier: 5.8.3 version: 5.8.3 vscode-languageserver-types: - specifier: ~3.17.5 + specifier: 3.17.5 version: 3.17.5 webpack: - specifier: ^5.94.0 - version: 5.105.2(webpack-cli@5.1.4) + specifier: 5.104.1 + version: 5.104.1(webpack-cli@5.1.4) webpack-cli: - specifier: ~5.1.4 - version: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.105.2) + specifier: 5.1.4 + version: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) webpack-dev-server: - specifier: ^5.2.1 - version: 5.2.3(webpack-cli@5.1.4)(webpack@5.105.2) + specifier: 5.2.3 + version: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1) yaml: - specifier: ~2.8.0 - version: 2.8.2 + specifier: 2.8.0 + version: 2.8.0 ../../workspaces/mi/syntax-tree: dependencies: '@types/node': - specifier: ~22.15.21 - version: 22.15.35 + specifier: 22.15.21 + version: 22.15.21 eslint: specifier: ^9.27.0 - version: 9.39.3(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) jsonix: - specifier: ~3.0.0 + specifier: 3.0.0 version: 3.0.0 tslint: - specifier: ~6.1.3 + specifier: 6.1.3 version: 6.1.3(typescript@5.8.3) vscode-languageserver-types: - specifier: ~3.17.5 + specifier: 3.17.5 version: 3.17.5 devDependencies: '@size-limit/preset-small-lib': - specifier: ^11.2.0 + specifier: 11.2.0 version: 11.2.0(size-limit@11.2.0) '@typescript-eslint/eslint-plugin': specifier: 8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) eslint-plugin-react-hooks: - specifier: ~5.2.0 - version: 5.2.0(eslint@9.39.3(jiti@2.6.1)) + specifier: 5.2.0 + version: 5.2.0(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-unused-imports: - specifier: ~4.1.4 - version: 4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1)) + specifier: 4.1.4 + version: 4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1)) husky: - specifier: ^9.1.7 + specifier: 9.1.7 version: 9.1.7 rimraf: - specifier: ^6.0.1 + specifier: 6.0.1 version: 6.0.1 size-limit: - specifier: ^11.2.0 + specifier: 11.2.0 version: 11.2.0 tsdx: - specifier: ^0.14.1 - version: 0.14.1(@types/babel__core@7.20.5)(@types/node@22.15.35)(jiti@2.6.1) + specifier: 0.14.1 + version: 0.14.1(@types/babel__core@7.20.5)(@types/node@22.15.21)(jiti@2.6.1) tslib: - specifier: ^2.5.0 - version: 2.8.1 + specifier: 2.5.0 + version: 2.5.0 typescript: specifier: 5.8.3 version: 5.8.3 @@ -4260,14 +4410,14 @@ importers: ../../workspaces/wso2-platform/wso2-platform-core: dependencies: vscode-messenger-common: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 vscode-messenger-webview: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 devDependencies: '@biomejs/biome': - specifier: ^1.9.4 + specifier: 1.9.4 version: 1.9.4 typescript: specifier: 5.8.3 @@ -4276,28 +4426,28 @@ importers: ../../workspaces/wso2-platform/wso2-platform-extension: dependencies: '@aws-sdk/client-s3': - specifier: ^3.817.0 - version: 3.989.0 + specifier: 3.817.0 + version: 3.817.0 '@iarna/toml': - specifier: ^2.2.5 + specifier: 2.2.5 version: 2.2.5 '@vscode-logging/logger': - specifier: ^2.0.0 + specifier: 2.0.0 version: 2.0.0 '@vscode-logging/types': - specifier: ^2.0.0 + specifier: 2.0.0 version: 2.0.0 '@vscode-logging/wrapper': - specifier: ^2.0.0 + specifier: 2.0.0 version: 2.0.0 '@vscode/extension-telemetry': - specifier: ~1.0.0 + specifier: 1.0.0 version: 1.0.0(tslib@2.8.1) '@vscode/iconv-lite-umd': - specifier: ^0.7.0 - version: 0.7.1 + specifier: 0.7.0 + version: 0.7.0 '@vscode/webview-ui-toolkit': - specifier: ^1.4.0 + specifier: 1.4.0 version: 1.4.0(react@19.1.0) '@wso2/wso2-platform-core': specifier: workspace:* @@ -4306,131 +4456,131 @@ importers: specifier: workspace:* version: link:../wso2-platform-webviews byline: - specifier: ^5.0.0 + specifier: 5.0.0 version: 5.0.0 dotenv: - specifier: ^16.0.3 - version: 16.5.0 + specifier: 16.0.3 + version: 16.0.3 file-type: - specifier: ^18.2.1 - version: 18.7.0 + specifier: 21.3.1 + version: 21.3.1 js-yaml: - specifier: ^4.1.1 + specifier: 4.1.1 version: 4.1.1 jschardet: - specifier: ^3.1.4 + specifier: 3.1.4 version: 3.1.4 vscode-jsonrpc: - specifier: ^8.2.1 + specifier: 8.2.1 version: 8.2.1 vscode-messenger: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 vscode-messenger-common: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 which: - specifier: ^5.0.0 + specifier: 5.0.0 version: 5.0.0 yaml: - specifier: ^2.8.0 - version: 2.8.2 + specifier: 2.8.0 + version: 2.8.0 zod: - specifier: ^3.22.4 - version: 3.25.76 + specifier: 3.22.4 + version: 3.22.4 zustand: - specifier: ^5.0.5 - version: 5.0.11(@types/react@18.2.0)(react@19.1.0)(use-sync-external-store@1.6.0(react@19.1.0)) + specifier: 5.0.5 + version: 5.0.5(@types/react@18.2.0)(react@19.1.0)(use-sync-external-store@1.6.0(react@19.1.0)) devDependencies: '@biomejs/biome': - specifier: ^1.9.4 + specifier: 1.9.4 version: 1.9.4 '@playwright/test': specifier: 1.55.1 version: 1.55.1 '@types/byline': - specifier: ^4.2.36 + specifier: 4.2.36 version: 4.2.36 '@types/js-yaml': - specifier: ^4.0.9 + specifier: 4.0.9 version: 4.0.9 '@types/mocha': - specifier: ~10.0.1 - version: 10.0.10 + specifier: 10.0.1 + version: 10.0.1 '@types/node': - specifier: ^22.15.21 - version: 22.15.35 + specifier: 22.15.21 + version: 22.15.21 '@types/vscode': - specifier: ^1.100.0 - version: 1.109.0 + specifier: 1.100.0 + version: 1.100.0 '@types/which': - specifier: ^3.0.4 + specifier: 3.0.4 version: 3.0.4 '@vscode/vsce': - specifier: ^3.7.0 - version: 3.7.1 + specifier: 3.7.0 + version: 3.7.0 '@wso2/playwright-vscode-tester': specifier: workspace:* version: link:../../common-libs/playwright-vscode-tester axios: - specifier: ^1.13.5 + specifier: 1.13.5 version: 1.13.5 copy-webpack-plugin: - specifier: ^13.0.0 - version: 13.0.1(webpack@5.105.2) + specifier: 13.0.0 + version: 13.0.0(webpack@5.104.1) copyfiles: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1 del-cli: - specifier: ^6.0.0 + specifier: 6.0.0 version: 6.0.0 mocha: - specifier: ^11.5.0 + specifier: 11.5.0 version: 11.5.0 terser-webpack-plugin: - specifier: ^5.3.14 - version: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2) + specifier: 5.3.14 + version: 5.3.14(webpack@5.104.1) ts-loader: - specifier: ~9.5.2 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.4 + version: 9.5.4(typescript@5.8.3)(webpack@5.104.1) typescript: - specifier: ^5.8.3 + specifier: 5.8.3 version: 5.8.3 vscode-extension-tester: - specifier: ^8.14.1 + specifier: 8.14.1 version: 8.14.1(mocha@11.5.0)(typescript@5.8.3) webpack: - specifier: ^5.94.0 - version: 5.105.2(webpack-cli@6.0.1) + specifier: 5.104.1 + version: 5.104.1(webpack-cli@6.0.1) webpack-cli: - specifier: ^6.0.1 - version: 6.0.1(webpack@5.105.2) + specifier: 6.0.1 + version: 6.0.1(webpack@5.104.1) webpack-permissions-plugin: - specifier: ^1.0.10 + specifier: 1.0.10 version: 1.0.10 ../../workspaces/wso2-platform/wso2-platform-webviews: dependencies: '@biomejs/biome': - specifier: ^1.9.4 + specifier: 1.9.4 version: 1.9.4 '@formkit/auto-animate': specifier: 0.8.2 version: 0.8.2 '@headlessui/react': - specifier: ^2.1.2 - version: 2.2.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 2.1.2 + version: 2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@hookform/resolvers': specifier: 5.2.2 version: 5.2.2(react-hook-form@7.63.0(react@18.2.0)) '@tanstack/react-query': - specifier: ~4.28.0 + specifier: 4.28.0 version: 4.28.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/react-query-persist-client': - specifier: ~4.28.0 + specifier: 4.28.0 version: 4.28.0(@tanstack/react-query@4.28.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) '@vscode/webview-ui-toolkit': - specifier: ^1.4.0 + specifier: 1.4.0 version: 1.4.0(react@18.2.0) '@wso2/ui-toolkit': specifier: workspace:* @@ -4439,19 +4589,19 @@ importers: specifier: workspace:* version: link:../wso2-platform-core classnames: - specifier: ~2.5.1 + specifier: 2.5.1 version: 2.5.1 clipboardy: - specifier: ^4.0.0 + specifier: 4.0.0 version: 4.0.0 js-yaml: - specifier: ^4.1.1 + specifier: 4.1.1 version: 4.1.1 lodash.debounce: - specifier: ~4.0.8 + specifier: 4.0.8 version: 4.0.8 prism-react-renderer: - specifier: ^2.4.1 + specifier: 2.4.1 version: 2.4.1(react@18.2.0) react: specifier: 18.2.0 @@ -4475,27 +4625,27 @@ importers: specifier: 5.22.0 version: 5.22.0(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) timezone-support: - specifier: ^3.1.0 + specifier: 3.1.0 version: 3.1.0 vscode-messenger-common: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 vscode-messenger-webview: - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 zod: specifier: 4.1.11 version: 4.1.11 devDependencies: '@types/js-yaml': - specifier: ^4.0.5 - version: 4.0.9 + specifier: 4.0.5 + version: 4.0.5 '@types/lodash.debounce': - specifier: ^4.0.6 - version: 4.0.9 + specifier: 4.0.6 + version: 4.0.6 '@types/node': - specifier: ^22.15.21 - version: 22.15.35 + specifier: 22.15.21 + version: 22.15.21 '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -4503,97 +4653,109 @@ importers: specifier: 18.2.0 version: 18.2.0 '@types/swagger-ui-react': - specifier: ^5.18.0 + specifier: 5.18.0 version: 5.18.0 '@types/vscode-webview': - specifier: ^1.57.5 + specifier: 1.57.5 version: 1.57.5 autoprefixer: - specifier: ^10.4.19 - version: 10.4.24(postcss@8.5.6) + specifier: 10.4.19 + version: 10.4.19(postcss@8.5.3) copyfiles: - specifier: ~2.4.1 + specifier: 2.4.1 version: 2.4.1 css-loader: - specifier: ^7.1.2 - version: 7.1.3(webpack@5.105.2) + specifier: 7.1.2 + version: 7.1.2(webpack@5.104.1) file-loader: - specifier: ^6.2.0 - version: 6.2.0(webpack@5.105.2) + specifier: 6.2.0 + version: 6.2.0(webpack@5.104.1) path: - specifier: ^0.12.7 + specifier: 0.12.7 version: 0.12.7 postcss: - specifier: ^8.5.3 - version: 8.5.6 + specifier: 8.5.3 + version: 8.5.3 postcss-loader: - specifier: ^8.1.1 - version: 8.2.0(postcss@8.5.6)(typescript@5.8.3)(webpack@5.105.2) + specifier: 8.1.1 + version: 8.1.1(postcss@8.5.3)(typescript@5.8.3)(webpack@5.104.1) sass-loader: - specifier: ^16.0.5 - version: 16.0.7(sass@1.97.3)(webpack@5.105.2) + specifier: 16.0.5 + version: 16.0.5(sass@1.89.0)(webpack@5.104.1) source-map-loader: - specifier: ^5.0.0 - version: 5.0.0(webpack@5.105.2) + specifier: 5.0.0 + version: 5.0.0(webpack@5.104.1) style-loader: - specifier: ^4.0.0 - version: 4.0.0(webpack@5.105.2) + specifier: 4.0.0 + version: 4.0.0(webpack@5.104.1) tailwindcss: - specifier: ^4.1.7 - version: 4.1.18 + specifier: 4.1.7 + version: 4.1.7 ts-loader: - specifier: ^9.5.2 - version: 9.5.4(typescript@5.8.3)(webpack@5.105.2) + specifier: 9.5.2 + version: 9.5.2(typescript@5.8.3)(webpack@5.104.1) typescript: specifier: 5.8.3 version: 5.8.3 webpack: - specifier: ^5.94.0 - version: 5.105.2(webpack-cli@6.0.1) + specifier: 5.104.1 + version: 5.104.1(webpack-cli@6.0.1) webpack-cli: - specifier: ^6.0.1 - version: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.105.2) + specifier: 6.0.1 + version: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.104.1) webpack-dev-server: - specifier: ^5.2.1 - version: 5.2.3(webpack-cli@6.0.1)(webpack@5.105.2) + specifier: 5.2.3 + version: 5.2.3(webpack-cli@6.0.1)(webpack@5.104.1) packages: '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} - '@ai-sdk/amazon-bedrock@4.0.59': - resolution: {integrity: sha512-reIzGwpstdses389Uh8X+MRI7MjpemJmNGynyrKJF2+ib214fAMdlcNwuwITdzt0t6FhJBeMW7g2WbEjLnL5XA==} + '@ai-sdk/amazon-bedrock@4.0.67': + resolution: {integrity: sha512-Bb5HkT5h2mIsQTGzlcGNEDu+19d5pA8FPNiqlbXxVmYFKbLjZu/4nncY0GXVnXUglX9GdheMIofanYlL9O3KIg==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/anthropic@2.0.63': - resolution: {integrity: sha512-zXlUPCkumnvp8lWS9VFcen/MLF6CL/t1zAKDhpobYj9y/nmylQrKtRvn3RwH871Wd3dF3KYEUXd6M2c6dfCKOA==} + '@ai-sdk/anthropic@2.0.35': + resolution: {integrity: sha512-R0HtYqnKhxH67qpfKJwPCzRJLeW6M/adFM0E4YyF2+m80UvaigmiVwEODcODHEhsA3hQdf1hLNXzq4AEbkz8xw==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/anthropic@3.0.43': - resolution: {integrity: sha512-hfhOa13HqNYIe2GtC7blUMVOKrmt5RzxbE7StFGXKN3hIn4xuppLLQY/gFOr+oEhQw1pO8j6CpffrRrWYz1mVQ==} + '@ai-sdk/anthropic@3.0.48': + resolution: {integrity: sha512-QSvz0XumBFaxulalUB+3D2/tLvfsYjIcG3HlqOxmmXIzATIBLInTVEw0Sy3yXJjqhNQZedBokVrN53Bh/V+eWQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/gateway@2.0.37': - resolution: {integrity: sha512-9ZxIFZS6f1zjYO5vMkUKkhgT9c1H6agZnPEePz87KHlFCmdV21F5Vnh5kz6Dq/9A4Z1OFwM1pQf7GdxBrbiZHg==} + '@ai-sdk/gateway@2.0.0': + resolution: {integrity: sha512-Gj0PuawK7NkZuyYgO/h5kDK/l6hFOjhLdTq3/Lli1FTl47iGmwhH1IZQpAL3Z09BeFYWakcwUmn02ovIm2wy9g==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/gateway@3.0.46': - resolution: {integrity: sha512-zH1UbNRjG5woOXXFOrVCZraqZuFTtmPvLardMGcgLkzpxKV0U3tAGoyWKSZ862H+eBJfI/Hf2yj/zzGJcCkycg==} + '@ai-sdk/gateway@3.0.57': + resolution: {integrity: sha512-3MugqOlGfCOjlsBGGARJ5Zrioh78X3+rulHCayCMPySYKY+wc8GGFlFCCh4mleWQFShjMyqWT7eeLTuVSj/WSg==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@3.0.21': - resolution: {integrity: sha512-veuMwTLxsgh31Jjn0SnBABnM1f7ebHhRWcV2ZuY3hP3iJDCZ8VXBaYqcHXoOQDqUXTCas08sKQcHyWK+zl882Q==} + '@ai-sdk/google-vertex@4.0.66': + resolution: {integrity: sha512-euSOJSgOwemtnQ/EIM2LgKPPWUqOkZwYTejsle79K/kOWvDzu376IbvaLaegLQ+uymxx2pskhmSrMvAD1uAQoA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/google@3.0.33': + resolution: {integrity: sha512-ElHkhMGMJ1MY5AlwLljWWE1jj+Bs3cMyq0KbeWUu2H89OsMAORiE4cB3xhfLlSIEnVmVKx/YHjoW3bN+DFI24A==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/provider-utils@3.0.12': + resolution: {integrity: sha512-ZtbdvYxdMoria+2SlNarEk6Hlgyf+zzcznlD55EAl+7VZvJaSg2sqPvwArY7L6TfDEDJsnCq0fdhBSkYo0Xqdg==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -4604,8 +4766,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider@2.0.1': - resolution: {integrity: sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng==} + '@ai-sdk/provider@2.0.0': + resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==} engines: {node: '>=18'} '@ai-sdk/provider@3.0.8': @@ -4655,144 +4817,136 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-s3@3.989.0': - resolution: {integrity: sha512-ccz2miIetWAgrJYmKCpSnRjF8jew7DPstl54nufhfPMtM1MLxD2z55eSk1eJj3Umhu4CioNN1aY1ILT7fwlSiw==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/client-sso@3.989.0': - resolution: {integrity: sha512-3sC+J1ru5VFXLgt9KZmXto0M7mnV5RkS6FNGwRMK3XrojSjHso9DLOWjbnXhbNv4motH8vu53L1HK2VC1+Nj5w==} - engines: {node: '>=20.0.0'} + '@aws-sdk/client-s3@3.817.0': + resolution: {integrity: sha512-nZyjhlLMEXDs0ofWbpikI8tKoeKuuSgYcIb6eEZJk90Nt5HkkXn6nkWOs/kp2FdhpoGJyTILOVsDgdm7eutnLA==} + engines: {node: '>=18.0.0'} - '@aws-sdk/core@3.973.9': - resolution: {integrity: sha512-cyUOfJSizn8da7XrBEFBf4UMI4A6JQNX6ZFcKtYmh/CrwfzsDcabv3k/z0bNwQ3pX5aeq5sg/8Bs/ASiL0bJaA==} - engines: {node: '>=20.0.0'} + '@aws-sdk/client-sso@3.817.0': + resolution: {integrity: sha512-fCh5rUHmWmWDvw70NNoWpE5+BRdtNi45kDnIoeoszqVg7UKF79SlG+qYooUT52HKCgDNHqgbWaXxMOSqd2I/OQ==} + engines: {node: '>=18.0.0'} - '@aws-sdk/crc64-nvme@3.972.0': - resolution: {integrity: sha512-ThlLhTqX68jvoIVv+pryOdb5coP1cX1/MaTbB9xkGDCbWbsqQcLqzPxuSoW1DCnAAIacmXCWpzUNOB9pv+xXQw==} - engines: {node: '>=20.0.0'} + '@aws-sdk/core@3.816.0': + resolution: {integrity: sha512-Lx50wjtyarzKpMFV6V+gjbSZDgsA/71iyifbClGUSiNPoIQ4OCV0KVOmAAj7mQRVvGJqUMWKVM+WzK79CjbjWA==} + engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-env@3.972.7': - resolution: {integrity: sha512-r8kBtglvLjGxBT87l6Lqkh9fL8yJJ6O4CYQPjKlj3AkCuL4/4784x3rxxXWw9LTKXOo114VB6mjxAuy5pI7XIg==} - engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-env@3.816.0': + resolution: {integrity: sha512-wUJZwRLe+SxPxRV9AENYBLrJZRrNIo+fva7ZzejsC83iz7hdfq6Rv6B/aHEdPwG/nQC4+q7UUvcRPlomyrpsBA==} + engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-http@3.972.9': - resolution: {integrity: sha512-40caFblEg/TPrp9EpvyMxp4xlJ5TuTI+A8H6g8FhHn2hfH2PObFAPLF9d5AljK/G69E1YtTklkuQeAwPlV3w8Q==} - engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-http@3.816.0': + resolution: {integrity: sha512-gcWGzMQ7yRIF+ljTkR8Vzp7727UY6cmeaPrFQrvcFB8PhOqWpf7g0JsgOf5BSaP8CkkSQcTQHc0C5ZYAzUFwPg==} + engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-ini@3.972.7': - resolution: {integrity: sha512-zeYKrMwM5bCkHFho/x3+1OL0vcZQ0OhTR7k35tLq74+GP5ieV3juHXTZfa2LVE0Bg75cHIIerpX0gomVOhzo/w==} - engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-ini@3.817.0': + resolution: {integrity: sha512-kyEwbQyuXE+phWVzloMdkFv6qM6NOon+asMXY5W0fhDKwBz9zQLObDRWBrvQX9lmqq8BbDL1sCfZjOh82Y+RFw==} + engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-login@3.972.7': - resolution: {integrity: sha512-Q103cLU6OjAllYjX7+V+PKQw654jjvZUkD+lbUUiFbqut6gR5zwl1DrelvJPM5hnzIty7BCaxaRB3KMuz3M/ug==} - engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-node@3.817.0': + resolution: {integrity: sha512-b5mz7av0Lhavs1Bz3Zb+jrs0Pki93+8XNctnVO0drBW98x1fM4AR38cWvGbM/w9F9Q0/WEH3TinkmrMPrP4T/w==} + engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-node@3.972.8': - resolution: {integrity: sha512-AaDVOT7iNJyLjc3j91VlucPZ4J8Bw+eu9sllRDugJqhHWYyR3Iyp2huBUW8A3+DfHoh70sxGkY92cThAicSzlQ==} - engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-process@3.816.0': + resolution: {integrity: sha512-9Tm+AxMoV2Izvl5b9tyMQRbBwaex8JP06HN7ZeCXgC5sAsSN+o8dsThnEhf8jKN+uBpT6CLWKN1TXuUMrAmW1A==} + engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-process@3.972.7': - resolution: {integrity: sha512-hxMo1V3ujWWrQSONxQJAElnjredkRpB6p8SDjnvRq70IwYY38R/CZSys0IbhRPxdgWZ5j12yDRk2OXhxw4Gj3g==} - engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-sso@3.817.0': + resolution: {integrity: sha512-gFUAW3VmGvdnueK1bh6TOcRX+j99Xm0men1+gz3cA4RE+rZGNy1Qjj8YHlv0hPwI9OnTPZquvPzA5fkviGREWg==} + engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-sso@3.972.7': - resolution: {integrity: sha512-ZGKBOHEj8Ap15jhG2XMncQmKLTqA++2DVU2eZfLu3T/pkwDyhCp5eZv5c/acFxbZcA/6mtxke+vzO/n+aeHs4A==} - engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-web-identity@3.817.0': + resolution: {integrity: sha512-A2kgkS9g6NY0OMT2f2EdXHpL17Ym81NhbGnQ8bRXPqESIi7TFypFD2U6osB2VnsFv+MhwM+Ke4PKXSmLun22/A==} + engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.7': - resolution: {integrity: sha512-AbYupBIoSJoVMlbMqBhNvPhqj+CdGtzW7Uk4ZIMBm2br18pc3rkG1VaKVFV85H87QCvLHEnni1idJjaX1wOmIw==} - engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-bucket-endpoint@3.808.0': + resolution: {integrity: sha512-wEPlNcs8dir9lXbuviEGtSzYSxG/NRKQrJk5ybOc7OpPGHovsN+QhDOdY3lcjOFdwMTiMIG9foUkPz3zBpLB1A==} + engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-bucket-endpoint@3.972.3': - resolution: {integrity: sha512-fmbgWYirF67YF1GfD7cg5N6HHQ96EyRNx/rDIrTF277/zTWVuPI2qS/ZHgofwR1NZPe/NWvoppflQY01LrbVLg==} - engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-expect-continue@3.804.0': + resolution: {integrity: sha512-YW1hySBolALMII6C8y7Z0CRG2UX1dGJjLEBNFeefhO/xP7ZuE1dvnmfJGaEuBMnvc3wkRS63VZ3aqX6sevM1CA==} + engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-expect-continue@3.972.3': - resolution: {integrity: sha512-4msC33RZsXQpUKR5QR4HnvBSNCPLGHmB55oDiROqqgyOc+TOfVu2xgi5goA7ms6MdZLeEh2905UfWMnMMF4mRg==} - engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-flexible-checksums@3.816.0': + resolution: {integrity: sha512-kftcwDxB/VoCBsUiRgkm5CIuKbTfCN1WLPbis9LRwX3kQhKgGVxG2gG78SHk4TBB0qviWVAd/t+i/KaUgwiAcA==} + engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-flexible-checksums@3.972.7': - resolution: {integrity: sha512-YU/5rpz8k2mwFGi2M0px9ChOQZY7Bbow5knB2WLRVPqDM/cG8T5zj55UaWS1qcaFpE7vCX9a9/kvYBlKGcD+KA==} - engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-host-header@3.804.0': + resolution: {integrity: sha512-bum1hLVBrn2lJCi423Z2fMUYtsbkGI2s4N+2RI2WSjvbaVyMSv/WcejIrjkqiiMR+2Y7m5exgoKeg4/TODLDPQ==} + engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-host-header@3.972.3': - resolution: {integrity: sha512-aknPTb2M+G3s+0qLCx4Li/qGZH8IIYjugHMv15JTYMe6mgZO8VBpYgeGYsNMGCqCZOcWzuf900jFBG5bopfzmA==} - engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-location-constraint@3.804.0': + resolution: {integrity: sha512-AMtKnllIWKgoo7hiJfphLYotEwTERfjVMO2+cKAncz9w1g+bnYhHxiVhJJoR94y047c06X4PU5MsTxvdQ73Znw==} + engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-location-constraint@3.972.3': - resolution: {integrity: sha512-nIg64CVrsXp67vbK0U1/Is8rik3huS3QkRHn2DRDx4NldrEFMgdkZGI/+cZMKD9k4YOS110Dfu21KZLHrFA/1g==} - engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-logger@3.804.0': + resolution: {integrity: sha512-w/qLwL3iq0KOPQNat0Kb7sKndl9BtceigINwBU7SpkYWX9L/Lem6f8NPEKrC9Tl4wDBht3Yztub4oRTy/horJA==} + engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-logger@3.972.3': - resolution: {integrity: sha512-Ftg09xNNRqaz9QNzlfdQWfpqMCJbsQdnZVJP55jfhbKi1+FTWxGuvfPoBhDHIovqWKjqbuiew3HuhxbJ0+OjgA==} - engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-recursion-detection@3.804.0': + resolution: {integrity: sha512-zqHOrvLRdsUdN/ehYfZ9Tf8svhbiLLz5VaWUz22YndFv6m9qaAcijkpAOlKexsv3nLBMJdSdJ6GUTAeIy3BZzw==} + engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-recursion-detection@3.972.3': - resolution: {integrity: sha512-PY57QhzNuXHnwbJgbWYTrqIDHYSeOlhfYERTAuc16LKZpTZRJUjzBFokp9hF7u1fuGeE3D70ERXzdbMBOqQz7Q==} - engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-sdk-s3@3.816.0': + resolution: {integrity: sha512-jJ+EAXM7gnOwiCM6rrl4AUNY5urmtIsX7roTkxtb4DevJxcS+wFYRRg3/j33fQbuxQZrvk21HqxyZYx5UH70PA==} + engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-sdk-s3@3.972.9': - resolution: {integrity: sha512-F4Ak2HM7te/o3izFTqg/jUTBLjavpaJ5iynKM6aLMwNddXbwAZQ1VbIG8RFUHBo7fBHj2eeN2FNLtIFT4ejWYQ==} - engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-ssec@3.804.0': + resolution: {integrity: sha512-Tk8jK0gOIUBvEPTz/wwSlP1V70zVQ3QYqsLPAjQRMO6zfOK9ax31dln3MgKvFDJxBydS2tS3wsn53v+brxDxTA==} + engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-ssec@3.972.3': - resolution: {integrity: sha512-dU6kDuULN3o3jEHcjm0c4zWJlY1zWVkjG9NPe9qxYLLpcbdj5kRYBS2DdWYD+1B9f910DezRuws7xDEqKkHQIg==} - engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-user-agent@3.816.0': + resolution: {integrity: sha512-bHRSlWZ0xDsFR8E2FwDb//0Ff6wMkVx4O+UKsfyNlAbtqCiiHRt5ANNfKPafr95cN2CCxLxiPvFTFVblQM5TsQ==} + engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-user-agent@3.972.9': - resolution: {integrity: sha512-1g1B7yf7KzessB0mKNiV9gAHEwbM662xgU+VE4LxyGe6kVGZ8LqYsngjhE+Stna09CJ7Pxkjr6Uq1OtbGwJJJg==} - engines: {node: '>=20.0.0'} + '@aws-sdk/nested-clients@3.817.0': + resolution: {integrity: sha512-vQ2E06A48STJFssueJQgxYD8lh1iGJoLJnHdshRDWOQb8gy1wVQR+a7MkPGhGR6lGoS0SCnF/Qp6CZhnwLsqsQ==} + engines: {node: '>=18.0.0'} - '@aws-sdk/nested-clients@3.989.0': - resolution: {integrity: sha512-Dbk2HMPU3mb6RrSRzgf0WCaWSbgtZG258maCpuN2/ONcAQNpOTw99V5fU5CA1qVK6Vkm4Fwj2cnOnw7wbGVlOw==} - engines: {node: '>=20.0.0'} + '@aws-sdk/region-config-resolver@3.808.0': + resolution: {integrity: sha512-9x2QWfphkARZY5OGkl9dJxZlSlYM2l5inFeo2bKntGuwg4A4YUe5h7d5yJ6sZbam9h43eBrkOdumx03DAkQF9A==} + engines: {node: '>=18.0.0'} - '@aws-sdk/region-config-resolver@3.972.3': - resolution: {integrity: sha512-v4J8qYAWfOMcZ4MJUyatntOicTzEMaU7j3OpkRCGGFSL2NgXQ5VbxauIyORA+pxdKZ0qQG2tCQjQjZDlXEC3Ow==} - engines: {node: '>=20.0.0'} + '@aws-sdk/signature-v4-multi-region@3.816.0': + resolution: {integrity: sha512-idcr9NW86sSIXASSej3423Selu6fxlhhJJtMgpAqoCH/HJh1eQrONJwNKuI9huiruPE8+02pwxuePvLW46X2mw==} + engines: {node: '>=18.0.0'} - '@aws-sdk/signature-v4-multi-region@3.989.0': - resolution: {integrity: sha512-rVhR/BUZdnru7tLlxWD+uzoKB1LAs2L0pcoh6rYgIYuCtQflnsC6Ud0SpfqIsOapBSBKXdoW73IITFf+XFMdCQ==} - engines: {node: '>=20.0.0'} + '@aws-sdk/token-providers@3.817.0': + resolution: {integrity: sha512-CYN4/UO0VaqyHf46ogZzNrVX7jI3/CfiuktwKlwtpKA6hjf2+ivfgHSKzPpgPBcSEfiibA/26EeLuMnB6cpSrQ==} + engines: {node: '>=18.0.0'} - '@aws-sdk/token-providers@3.989.0': - resolution: {integrity: sha512-OdBByMv+OjOZoekrk4THPFpLuND5aIQbDHCGh3n2rvifAbm31+6e0OLhxSeCF1UMPm+nKq12bXYYEoCIx5SQBg==} - engines: {node: '>=20.0.0'} + '@aws-sdk/types@3.804.0': + resolution: {integrity: sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg==} + engines: {node: '>=18.0.0'} - '@aws-sdk/types@3.973.1': - resolution: {integrity: sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==} + '@aws-sdk/types@3.973.5': + resolution: {integrity: sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-arn-parser@3.972.2': - resolution: {integrity: sha512-VkykWbqMjlSgBFDyrY3nOSqupMc6ivXuGmvci6Q3NnLq5kC+mKQe2QBZ4nrWRE/jqOxeFP2uYzLtwncYYcvQDg==} - engines: {node: '>=20.0.0'} + '@aws-sdk/util-arn-parser@3.804.0': + resolution: {integrity: sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==} + engines: {node: '>=18.0.0'} - '@aws-sdk/util-endpoints@3.989.0': - resolution: {integrity: sha512-eKmAOeQM4Qusq0jtcbZPiNWky8XaojByKC/n+THbJ8vJf7t4ys8LlcZ4PrBSHZISe9cC484mQsPVOQh6iySjqw==} - engines: {node: '>=20.0.0'} + '@aws-sdk/util-endpoints@3.808.0': + resolution: {integrity: sha512-N6Lic98uc4ADB7fLWlzx+1uVnq04VgVjngZvwHoujcRg9YDhIg9dUDiTzD5VZv13g1BrPYmvYP1HhsildpGV6w==} + engines: {node: '>=18.0.0'} - '@aws-sdk/util-locate-window@3.965.4': - resolution: {integrity: sha512-H1onv5SkgPBK2P6JR2MjGgbOnttoNzSPIRoeZTNPZYyaplwGg50zS3amXvXqF0/qfXpWEC9rLWU564QTB9bSog==} + '@aws-sdk/util-locate-window@3.965.5': + resolution: {integrity: sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-user-agent-browser@3.972.3': - resolution: {integrity: sha512-JurOwkRUcXD/5MTDBcqdyQ9eVedtAsZgw5rBwktsPTN7QtPiS2Ld1jkJepNgYoCufz1Wcut9iup7GJDoIHp8Fw==} + '@aws-sdk/util-user-agent-browser@3.804.0': + resolution: {integrity: sha512-KfW6T6nQHHM/vZBBdGn6fMyG/MgX5lq82TDdX4HRQRRuHKLgBWGpKXqqvBwqIaCdXwWHgDrg2VQups6GqOWW2A==} - '@aws-sdk/util-user-agent-node@3.972.7': - resolution: {integrity: sha512-oyhv+FjrgHjP+F16cmsrJzNP4qaRJzkV1n9Lvv4uyh3kLqo3rIe9NSBSBa35f2TedczfG2dD+kaQhHBB47D6Og==} - engines: {node: '>=20.0.0'} + '@aws-sdk/util-user-agent-node@3.816.0': + resolution: {integrity: sha512-Q6dxmuj4hL7pudhrneWEQ7yVHIQRBFr0wqKLF1opwOi1cIePuoEbPyJ2jkel6PDEv1YMfvsAKaRshp6eNA8VHg==} + engines: {node: '>=18.0.0'} peerDependencies: aws-crt: '>=1.0.0' peerDependenciesMeta: aws-crt: optional: true - '@aws-sdk/xml-builder@3.972.4': - resolution: {integrity: sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==} - engines: {node: '>=20.0.0'} - - '@aws/lambda-invoke-store@0.2.3': - resolution: {integrity: sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==} + '@aws-sdk/xml-builder@3.804.0': + resolution: {integrity: sha512-JbGWp36IG9dgxtvC6+YXwt5WDZYfuamWFtVfK6fQpnmL96dx+GUPOXPKRWdw67WLKf2comHY28iX2d3z35I53Q==} engines: {node: '>=18.0.0'} '@azu/format-text@1.0.2': @@ -4813,8 +4967,8 @@ packages: resolution: {integrity: sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==} engines: {node: '>=20.0.0'} - '@azure/core-rest-pipeline@1.22.2': - resolution: {integrity: sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==} + '@azure/core-rest-pipeline@1.23.0': + resolution: {integrity: sha512-Evs1INHo+jUjwHi1T6SG6Ua/LHOQBCLuKEEE6efIpt4ZOoNonaT1kP32GoOcdNDbfqsD2445CPri3MubBy5DEQ==} engines: {node: '>=20.0.0'} '@azure/core-tracing@1.3.1': @@ -4833,18 +4987,21 @@ packages: resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==} engines: {node: '>=20.0.0'} - '@azure/msal-browser@4.28.2': - resolution: {integrity: sha512-6vYUMvs6kJxJgxaCmHn/F8VxjLHNh7i9wzfwPGf8kyBJ8Gg2yvBXx175Uev8LdrD1F5C4o7qHa2CC4IrhGE1XQ==} + '@azure/msal-browser@4.29.0': + resolution: {integrity: sha512-/f3eHkSNUTl6DLQHm+bKecjBKcRQxbd/XLx8lvSYp8Nl/HRyPuIPOijt9Dt0sH50/SxOwQ62RnFCmFlGK+bR/w==} engines: {node: '>=0.8.0'} - '@azure/msal-common@15.14.2': - resolution: {integrity: sha512-n8RBJEUmd5QotoqbZfd+eGBkzuFI1KX6jw2b3WcpSyGjwmzoeI/Jb99opIBPHpb8y312NB+B6+FGi2ZVSR8yfA==} + '@azure/msal-common@15.15.0': + resolution: {integrity: sha512-/n+bN0AKlVa+AOcETkJSKj38+bvFs78BaP4rNtv3MJCmPH0YrHiskMRe74OhyZ5DZjGISlFyxqvf9/4QVEi2tw==} engines: {node: '>=0.8.0'} - '@azure/msal-node@3.8.7': - resolution: {integrity: sha512-a+Xnrae+uwLnlw68bplS1X4kuJ9F/7K6afuMFyRkNIskhjgDezl5Fhrx+1pmAlDmC0VaaAxjRQMp1OmcqVwkIg==} + '@azure/msal-node@3.8.8': + resolution: {integrity: sha512-+f1VrJH1iI517t4zgmuhqORja0bL6LDQXfBqkjuMmfTYXTQQnh1EvwwxO3UbKLT05N0obF72SRHFrC1RBDv5Gg==} engines: {node: '>=16'} + '@babel/code-frame@7.10.4': + resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==} + '@babel/code-frame@7.29.0': resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} @@ -4857,8 +5014,16 @@ packages: resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.27.7': - resolution: {integrity: sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w==} + '@babel/core@7.24.4': + resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.27.1': + resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} engines: {node: '>=6.9.0'} '@babel/generator@7.29.1': @@ -4895,8 +5060,8 @@ packages: peerDependencies: '@babel/core': ^7.4.0-0 - '@babel/helper-define-polyfill-provider@0.6.6': - resolution: {integrity: sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==} + '@babel/helper-define-polyfill-provider@0.6.7': + resolution: {integrity: sha512-6Fqi8MtQ/PweQ9xvux65emkLQ83uB+qAVtfHkC9UodyHMIZdxNI01HjLCLUtybElp2KY2XNE0nOgyP1E1vXw9w==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -4965,6 +5130,10 @@ packages: resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} engines: {node: '>=6.9.0'} + '@babel/highlight@7.25.9': + resolution: {integrity: sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.29.0': resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} engines: {node: '>=6.0.0'} @@ -5503,8 +5672,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.28.6': - resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} + '@babel/plugin-transform-typescript@7.27.1': + resolution: {integrity: sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -5556,8 +5725,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-typescript@7.22.15': - resolution: {integrity: sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==} + '@babel/preset-typescript@7.22.11': + resolution: {integrity: sha512-tWY5wyCZYBGY7IlalfKI1rLiGlIfnwsRHZqlky0HVv8qviwQ1Uo/05M6+s+TcTCVa6Bmoo2uJW5TMFX6Wa4qVg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -5607,64 +5776,120 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} + '@biomejs/biome@1.8.3': + resolution: {integrity: sha512-/uUV3MV+vyAczO+vKrPdOW0Iaet7UnJMU4bNMinggGJTAnBPjCoLEYcyYtYHNnUNYlv4xZMH6hVIQCAozq8d5w==} + engines: {node: '>=14.21.3'} + hasBin: true + '@biomejs/biome@1.9.4': resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} engines: {node: '>=14.21.3'} hasBin: true + '@biomejs/cli-darwin-arm64@1.8.3': + resolution: {integrity: sha512-9DYOjclFpKrH/m1Oz75SSExR8VKvNSSsLnVIqdnKexj6NwmiMlKk94Wa1kZEdv6MCOHGHgyyoV57Cw8WzL5n3A==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + '@biomejs/cli-darwin-arm64@1.9.4': resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] + '@biomejs/cli-darwin-x64@1.8.3': + resolution: {integrity: sha512-UeW44L/AtbmOF7KXLCoM+9PSgPo0IDcyEUfIoOXYeANaNXXf9mLUwV1GeF2OWjyic5zj6CnAJ9uzk2LT3v/wAw==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + '@biomejs/cli-darwin-x64@1.9.4': resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] + '@biomejs/cli-linux-arm64-musl@1.8.3': + resolution: {integrity: sha512-9yjUfOFN7wrYsXt/T/gEWfvVxKlnh3yBpnScw98IF+oOeCYb5/b/+K7YNqKROV2i1DlMjg9g/EcN9wvj+NkMuQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + '@biomejs/cli-linux-arm64-musl@1.9.4': resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] + '@biomejs/cli-linux-arm64@1.8.3': + resolution: {integrity: sha512-fed2ji8s+I/m8upWpTJGanqiJ0rnlHOK3DdxsyVLZQ8ClY6qLuPc9uehCREBifRJLl/iJyQpHIRufLDeotsPtw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + '@biomejs/cli-linux-arm64@1.9.4': resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] + '@biomejs/cli-linux-x64-musl@1.8.3': + resolution: {integrity: sha512-UHrGJX7PrKMKzPGoEsooKC9jXJMa28TUSMjcIlbDnIO4EAavCoVmNQaIuUSH0Ls2mpGMwUIf+aZJv657zfWWjA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + '@biomejs/cli-linux-x64-musl@1.9.4': resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] + '@biomejs/cli-linux-x64@1.8.3': + resolution: {integrity: sha512-I8G2QmuE1teISyT8ie1HXsjFRz9L1m5n83U1O6m30Kw+kPMPSKjag6QGUn+sXT8V+XWIZxFFBoTDEDZW2KPDDw==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + '@biomejs/cli-linux-x64@1.9.4': resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] + '@biomejs/cli-win32-arm64@1.8.3': + resolution: {integrity: sha512-J+Hu9WvrBevfy06eU1Na0lpc7uR9tibm9maHynLIoAjLZpQU3IW+OKHUtyL8p6/3pT2Ju5t5emReeIS2SAxhkQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + '@biomejs/cli-win32-arm64@1.9.4': resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] + '@biomejs/cli-win32-x64@1.8.3': + resolution: {integrity: sha512-/PJ59vA1pnQeKahemaQf4Nyj7IKUvGQSc3Ze1uIGi+Wvr1xF7rGobSrAAG01T/gUDG21vkDsZYM03NAmPiVkqg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + '@biomejs/cli-win32-x64@1.9.4': resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] - '@cacheable/memory@2.0.7': - resolution: {integrity: sha512-RbxnxAMf89Tp1dLhXMS7ceft/PGsDl1Ip7T20z5nZ+pwIAsQ1p2izPjVG69oCLv/jfQ7HDPHTWK0c9rcAWXN3A==} + '@borewit/text-codec@0.2.1': + resolution: {integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==} - '@cacheable/utils@2.3.4': - resolution: {integrity: sha512-knwKUJEYgIfwShABS1BX6JyJJTglAFcEU7EXqzTdiGCXur4voqkiJkdgZIQtWNFhynzDWERcTYv/sETMu3uJWA==} + '@cacheable/memory@2.0.8': + resolution: {integrity: sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==} + + '@cacheable/utils@2.4.0': + resolution: {integrity: sha512-PeMMsqjVq+bF0WBsxFBxr/WozBJiZKY0rUojuaCoIaKnEl3Ju1wfEwS+SV1DU/cSe8fqHIPiYJFif8T3MVt4cQ==} '@cnakazawa/watch@1.0.4': resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} @@ -5674,8 +5899,8 @@ packages: '@codemirror/autocomplete@6.19.1': resolution: {integrity: sha512-q6NenYkEy2fn9+JyjIxMWcNjzTL/IhwqfzOut1/G3PrIFkrbl4AL7Wkse5tLrQUUyqGoAKU5+Pi5jnnXxH5HGw==} - '@codemirror/commands@6.10.2': - resolution: {integrity: sha512-vvX1fsih9HledO1c9zdotZYUZnE4xV0m6i3m25s5DIfXofuprk6cRcLUZvSk3CASUbwjQX21tOGbkY2BH8TpnQ==} + '@codemirror/commands@6.10.0': + resolution: {integrity: sha512-2xUIc5mHXQzT16JnyOFkh8PvfeXuIut3pslWGfsGOhxP/lpgRm9HOl/mpzLErgt5mXDovqA0d11P21gofRLb9w==} '@codemirror/lang-angular@0.1.4': resolution: {integrity: sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g==} @@ -5695,8 +5920,8 @@ packages: '@codemirror/lang-java@6.0.2': resolution: {integrity: sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ==} - '@codemirror/lang-javascript@6.2.4': - resolution: {integrity: sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA==} + '@codemirror/lang-javascript@6.2.5': + resolution: {integrity: sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A==} '@codemirror/lang-jinja@6.0.0': resolution: {integrity: sha512-47MFmRcR8UAxd8DReVgj7WJN1WSAMT7OJnewwugZM4XiHWkOjgJQqvEM1NpMj9ALMPyxmlziEI1opH9IaEvmaw==} @@ -5707,8 +5932,8 @@ packages: '@codemirror/lang-less@6.0.2': resolution: {integrity: sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==} - '@codemirror/lang-liquid@6.3.1': - resolution: {integrity: sha512-S/jE/D7iij2Pu70AC65ME6AYWxOOcX20cSJvaPgY5w7m2sfxsArAcUAuUgm/CZCVmqoi9KiOlS7gj/gyLipABw==} + '@codemirror/lang-liquid@6.3.2': + resolution: {integrity: sha512-6PDVU3ZnfeYyz1at1E/ttorErZvZFXXt1OPhtfe1EZJ2V2iDFa0CwPqPgG5F7NXN0yONGoBogKmFAafKTqlwIw==} '@codemirror/lang-markdown@6.5.0': resolution: {integrity: sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==} @@ -5749,20 +5974,23 @@ packages: '@codemirror/legacy-modes@6.5.2': resolution: {integrity: sha512-/jJbwSTazlQEDOQw2FJ8LEEKVS72pU0lx6oM54kGpL8t/NJ2Jda3CZ4pcltiKTdqYSRk3ug1B3pil1gsjA6+8Q==} + '@codemirror/lint@6.8.1': + resolution: {integrity: sha512-IZ0Y7S4/bpaunwggW2jYqwLuHj0QtESf5xcROewY6+lDNwZ/NzvR4t+vpYgg9m7V8UXLPYqG+lu3DF470E5Oxg==} + '@codemirror/lint@6.8.5': resolution: {integrity: sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==} - '@codemirror/merge@6.11.2': - resolution: {integrity: sha512-NO5EJd2rLRbwVWLgMdhIntDIhfDtMOKYEZgqV5WnkNUS2oXOCVWLPjG/kgl/Jth2fGiOuG947bteqxP9nBXmMg==} + '@codemirror/merge@6.12.0': + resolution: {integrity: sha512-o+36bbapcEHf4Ux75pZ4CKjMBUd14parA0uozvWVlacaT+uxaA3DDefEvWYjngsKU+qsrDe/HOOfsw0Q72pLjA==} '@codemirror/search@6.6.0': resolution: {integrity: sha512-koFuNXcDvyyotWcgOnZGmY7LZqEOXZaaxD/j6n18TCLx2/9HieZJ5H6hs1g8FiRxBD0DNfs0nXn17g872RmYdw==} - '@codemirror/state@6.5.4': - resolution: {integrity: sha512-8y7xqG/hpB53l25CIoit9/ngxdfoG+fx+V3SHBrinnhOtLvKHRyAJJuHzkWrR4YXXLX8eXBsejgAAxHUOdW1yw==} + '@codemirror/state@6.5.2': + resolution: {integrity: sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==} - '@codemirror/theme-one-dark@6.1.3': - resolution: {integrity: sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA==} + '@codemirror/theme-one-dark@6.1.2': + resolution: {integrity: sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==} '@codemirror/view@6.38.8': resolution: {integrity: sha512-XcE9fcnkHCbWkjeKyi0lllwXmBLtyYb5dt89dJyx23I9+LSh5vZDIuk7OLG4VM1lgrXZQcY6cxyZyk5WVPRv/A==} @@ -5797,9 +6025,6 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-syntax-patches-for-csstree@1.0.27': - resolution: {integrity: sha512-sxP33Jwg1bviSUXAV43cVYdmjt2TLnLXNqCWl9xmxHawWVjGz/kEbdkr7F9pxJNBN2Mh+dq0crgItbW6tQvyow==} - '@csstools/css-tokenizer@3.0.4': resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} engines: {node: '>=18'} @@ -5839,6 +6064,28 @@ packages: resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} engines: {node: '>=14.17.0'} + '@dnd-kit/accessibility@3.1.1': + resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==} + peerDependencies: + react: '>=16.8.0' + + '@dnd-kit/core@6.1.0': + resolution: {integrity: sha512-J3cQBClB4TVxwGo3KEjssGEXNJqGVWx17aRTZ1ob0FliR5IjYgTxl5YJbKTzA6IzrtelotH19v6y7uoIRUZPSg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@dnd-kit/sortable@8.0.0': + resolution: {integrity: sha512-U3jk5ebVXe1Lr7c2wU7SBZjcWdQP+j7peHJfCspnA81enlu88Mgd7CC8Q+pub9ubP7eKVETzJW+IBAhsqbSu/g==} + peerDependencies: + '@dnd-kit/core': ^6.1.0 + react: '>=16.8.0' + + '@dnd-kit/utilities@3.2.2': + resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==} + peerDependencies: + react: '>=16.8.0' + '@dual-bundle/import-meta-resolve@4.2.1': resolution: {integrity: sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==} @@ -5854,12 +6101,34 @@ packages: '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} + '@emotion/cache@10.0.29': + resolution: {integrity: sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==} + '@emotion/cache@11.14.0': resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} + '@emotion/core@10.3.1': + resolution: {integrity: sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww==} + peerDependencies: + react: '>=16.3.0' + + '@emotion/css@10.0.27': + resolution: {integrity: sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==} + + '@emotion/css@11.10.5': + resolution: {integrity: sha512-maJy0wG82hWsiwfJpc3WrYsyVwUbdu+sdIseKUB+/OLjB8zgc3tqkT6eO0Yt0AhIkJwGGnmMY/xmQwEAgQ4JHA==} + peerDependencies: + '@babel/core': ^7.0.0 + peerDependenciesMeta: + '@babel/core': + optional: true + '@emotion/css@11.13.5': resolution: {integrity: sha512-wQdD0Xhkn3Qy2VNcIzbLP9MR8TafI0MJb7BEAXKp+w4+XqErksWR4OXomuDzPsN4InLdGhVe6EYcn2ZIUCpB8w==} + '@emotion/hash@0.8.0': + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} + '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} @@ -5884,14 +6153,67 @@ packages: '@types/react': optional: true + '@emotion/react@11.9.3': + resolution: {integrity: sha512-g9Q1GcTOlzOEjqwuLF/Zd9LC+4FljjPjDfxSM7KmEakm+hsHXk+bYZ2q+/hTJzr0OUNkujo72pXLQvXj6H+GJQ==} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@babel/core': + optional: true + '@types/react': + optional: true + + '@emotion/serialize@0.11.16': + resolution: {integrity: sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==} + '@emotion/serialize@1.3.3': resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} + '@emotion/sheet@0.9.4': + resolution: {integrity: sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==} + '@emotion/sheet@1.4.0': resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} - '@emotion/styled@11.14.1': - resolution: {integrity: sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==} + '@emotion/styled-base@10.3.0': + resolution: {integrity: sha512-PBRqsVKR7QRNkmfH78hTSSwHWcwDpecH9W6heujWAcyp2wdz/64PP73s7fWS1dIPm8/Exc8JAzYS8dEWXjv60w==} + peerDependencies: + '@emotion/core': ^10.0.28 + react: '>=16.3.0' + + '@emotion/styled@10.3.0': + resolution: {integrity: sha512-GgcUpXBBEU5ido+/p/mCT2/Xx+Oqmp9JzQRuC+a4lYM4i4LBBn/dWvc0rQ19N9ObA8/T4NWMrPNe79kMBDJqoQ==} + peerDependencies: + '@emotion/core': ^10.0.27 + react: '>=16.3.0' + + '@emotion/styled@11.10.5': + resolution: {integrity: sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==} + peerDependencies: + '@babel/core': ^7.0.0 + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@babel/core': + optional: true + '@types/react': + optional: true + + '@emotion/styled@11.11.0': + resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/styled@11.14.0': + resolution: {integrity: sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==} peerDependencies: '@emotion/react': ^11.0.0-rc.0 '@types/react': '*' @@ -5900,140 +6222,386 @@ packages: '@types/react': optional: true + '@emotion/stylis@0.8.5': + resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==} + '@emotion/unitless@0.10.0': resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + '@emotion/unitless@0.7.5': + resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} + '@emotion/use-insertion-effect-with-fallbacks@1.2.0': resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} peerDependencies: react: '>=16.8.0' + '@emotion/utils@0.11.3': + resolution: {integrity: sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==} + '@emotion/utils@1.4.2': resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} + '@emotion/weak-memoize@0.2.5': + resolution: {integrity: sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==} + '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.25.12': resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.25.12': resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.25.12': resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.25.12': resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.25.12': resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.25.12': resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.25.12': resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.25.12': resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.25.12': resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.25.12': resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.25.12': resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.25.12': resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.25.12': resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.25.12': resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.25.12': resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.25.12': resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.25.12': resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.25.12': resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} engines: {node: '>=18'} @@ -6046,24 +6614,72 @@ packages: cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.25.12': resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.25.12': resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.25.12': resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.25.12': resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} engines: {node: '>=18'} @@ -6080,53 +6696,53 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.21.1': - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/config-helpers@0.4.2': resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.15.2': - resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.17.0': resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.3': - resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/js@9.27.0': resolution: {integrity: sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.3': - resolution: {integrity: sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==} + '@eslint/js@9.39.4': + resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.7': resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.5': - resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fal-works/esbuild-plugin-global-externals@2.1.2': resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} - '@floating-ui/core@1.7.4': - resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} - '@floating-ui/dom@1.7.5': - resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} - '@floating-ui/react-dom@2.1.7': - resolution: {integrity: sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==} + '@floating-ui/react-dom@2.1.8': + resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -6137,26 +6753,26 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} - '@formatjs/ecma402-abstract@2.3.6': - resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==} + '@formatjs/ecma402-abstract@2.3.4': + resolution: {integrity: sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==} '@formatjs/fast-memoize@2.2.7': resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==} - '@formatjs/icu-messageformat-parser@2.11.4': - resolution: {integrity: sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==} + '@formatjs/icu-messageformat-parser@2.11.2': + resolution: {integrity: sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA==} - '@formatjs/icu-skeleton-parser@1.8.16': - resolution: {integrity: sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==} + '@formatjs/icu-skeleton-parser@1.8.14': + resolution: {integrity: sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==} - '@formatjs/intl-localematcher@0.6.2': - resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==} + '@formatjs/intl-localematcher@0.6.1': + resolution: {integrity: sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==} - '@formatjs/intl@3.1.8': - resolution: {integrity: sha512-LWXgwI5zTMatvR8w8kCNh/priDTOF/ZssokMBHJ7ZWXFoYLVOYo0EJERD9Eajv+xsfQO1QkuAt77KWQ1OI4mOQ==} + '@formatjs/intl@3.1.6': + resolution: {integrity: sha512-tDkXnA4qpIFcDWac8CyVJq6oW8DR7W44QDUBsfXWIIJD/FYYen0QoH46W7XsVMFfPOVKkvbufjboZrrWbEfmww==} peerDependencies: typescript: ^5.6.0 peerDependenciesMeta: @@ -6194,28 +6810,35 @@ packages: '@hapi/topo@5.1.0': resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - '@headlessui/react@1.7.19': - resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==} + '@headlessui/react@1.7.18': + resolution: {integrity: sha512-4i5DOrzwN4qSgNsL4Si61VMkUcWbcSKueUV7sFhpHzQcSShdlHENE5+QBntMSRvHt8NyoFO2AGG8si9lq+w4zQ==} engines: {node: '>=10'} peerDependencies: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 - '@headlessui/react@2.2.9': - resolution: {integrity: sha512-Mb+Un58gwBn0/yWZfyrCh0TJyurtT+dETj7YHleylHk5od3dv2XqETPGWMyQ5/7sYN7oWdyM1u9MvC0OC8UmzQ==} + '@headlessui/react@2.1.2': + resolution: {integrity: sha512-Kb3hgk9gRNRcTZktBrKdHhF3xFhYkca1Rk6e1/im2ENf83dgN54orMW0uSKTXFnUpZOUFZ+wcY05LlipwgZIFQ==} + engines: {node: '>=10'} + peerDependencies: + react: ^18 + react-dom: ^18 + + '@headlessui/react@2.2.4': + resolution: {integrity: sha512-lz+OGcAH1dK93rgSMzXmm1qKOJkBUqZf1L4M8TWLNplftQD3IkoEDdUFNfAn4ylsN6WOTVtWaLmvmaHOUk1dTA==} engines: {node: '>=10'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc - '@hono/node-server@1.19.9': - resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} + '@hono/node-server@1.19.10': + resolution: {integrity: sha512-hZ7nOssGqRgyV3FVVQdfi+U4q02uB23bpnYpdvNXkYTRRyWx84b7yf1ans+dnJ/7h41sGL3CeQTfO+ZGxuO+Iw==} engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 - '@hookform/resolvers@2.9.11': - resolution: {integrity: sha512-bA3aZ79UgcHj7tFV7RlgThzwSSHZgvfbt2wprldRkYBcMopdMvHyO17Wwp/twcJasNFischFfS7oz8Katz8DdQ==} + '@hookform/resolvers@2.8.0': + resolution: {integrity: sha512-ALlr0Bg6zDHdRsdqkwfWGPMnIxP4hqMRPvFDHp7lWXQeA7rKykto3cWqQQh1s0PzX043RHwMB6OHVPMwFJqwxg==} peerDependencies: react-hook-form: ^7.0.0 @@ -6473,10 +7096,6 @@ packages: resolution: {integrity: sha512-8xhpsCGYJsUjqpJOgLyMkeOSSlhqggFZEWAnZquBsvATtueoEs7CkMRxOUmJliF3E5x+mXmZ7gEEsHank029Og==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/transform@30.2.0': - resolution: {integrity: sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/types@25.5.0': resolution: {integrity: sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==} engines: {node: '>= 8.3'} @@ -6509,6 +7128,9 @@ packages: '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -6564,50 +7186,50 @@ packages: peerDependencies: tslib: '2' - '@jsonjoy.com/fs-core@4.56.10': - resolution: {integrity: sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==} + '@jsonjoy.com/fs-core@4.56.11': + resolution: {integrity: sha512-wThHjzUp01ImIjfCwhs+UnFkeGPFAymwLEkOtenHewaKe2pTP12p6r1UuwikA9NEvNf9Vlck92r8fb8n/MWM5w==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-fsa@4.56.10': - resolution: {integrity: sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==} + '@jsonjoy.com/fs-fsa@4.56.11': + resolution: {integrity: sha512-ZYlF3XbMayyp97xEN8ZvYutU99PCHjM64mMZvnCseXkCJXJDVLAwlF8Q/7q/xiWQRsv3pQBj1WXHd9eEyYcaCQ==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-node-builtins@4.56.10': - resolution: {integrity: sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==} + '@jsonjoy.com/fs-node-builtins@4.56.11': + resolution: {integrity: sha512-CNmt3a0zMCIhniFLXtzPWuUxXFU+U+2VyQiIrgt/rRVeEJNrMQUABaRbVxR0Ouw1LyR9RjaEkPM6nYpED+y43A==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-node-to-fsa@4.56.10': - resolution: {integrity: sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==} + '@jsonjoy.com/fs-node-to-fsa@4.56.11': + resolution: {integrity: sha512-5OzGdvJDgZVo+xXWEYo72u81zpOWlxlbG4d4nL+hSiW+LKlua/dldNgPrpWxtvhgyntmdFQad2UTxFyGjJAGhA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-node-utils@4.56.10': - resolution: {integrity: sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==} + '@jsonjoy.com/fs-node-utils@4.56.11': + resolution: {integrity: sha512-JADOZFDA3wRfsuxkT0+MYc4F9hJO2PYDaY66kRTG6NqGX3+bqmKu66YFYAbII/tEmQWPZeHoClUB23rtQM9UPg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-node@4.56.10': - resolution: {integrity: sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==} + '@jsonjoy.com/fs-node@4.56.11': + resolution: {integrity: sha512-D65YrnP6wRuZyEWoSFnBJSr5zARVpVBGctnhie4rCsMuGXNzX7IHKaOt85/Aj7SSoG1N2+/xlNjWmkLvZ2H3Tg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-print@4.56.10': - resolution: {integrity: sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==} + '@jsonjoy.com/fs-print@4.56.11': + resolution: {integrity: sha512-rnaKRgCRIn8JGTjxhS0JPE38YM3Pj/H7SW4/tglhIPbfKEkky7dpPayNKV2qy25SZSL15oFVgH/62dMZ/z7cyA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-snapshot@4.56.10': - resolution: {integrity: sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==} + '@jsonjoy.com/fs-snapshot@4.56.11': + resolution: {integrity: sha512-IIldPX+cIRQuUol9fQzSS3hqyECxVpYMJQMqdU3dCKZFRzEl1rkIkw4P6y7Oh493sI7YdxZlKr/yWdzEWZ1wGQ==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' @@ -6740,8 +7362,8 @@ packages: '@lezer/cpp@1.1.5': resolution: {integrity: sha512-DIhSXmYtJKLehrjzDFN+2cPt547ySQ41nA8yqcDf/GxMc+YM736xqltFkvADL2M0VebU5I+3+4ks2Vv+Kyq3Aw==} - '@lezer/css@1.3.0': - resolution: {integrity: sha512-pBL7hup88KbI7hXnZV3PQsn43DHy6TWyzuyk2AO9UyoXcDltvIdqWKE1dLL/45JVZ+YZkHe1WVHqO6wugZZWcw==} + '@lezer/css@1.3.1': + resolution: {integrity: sha512-PYAKeUVBo3HFThruRyp/iK91SwiZJnzXh8QzkQlwijB5y+N5iB28+iLk78o2zmKqqV0uolNhCwFqB8LA7b0Svg==} '@lezer/go@1.0.1': resolution: {integrity: sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==} @@ -6788,6 +7410,12 @@ packages: '@marijn/find-cluster-break@1.0.2': resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} + '@mcp-ui/client@6.1.0': + resolution: {integrity: sha512-Wk/9uhu8xdOgHjiaEtAq2RbXn4WGstpFeJ6I71JCP7JC7MtvQB/qnEKDVGSbjwyLnIeZYMSILHf5E+57/YCftQ==} + peerDependencies: + react: ^18 || ^19 + react-dom: ^18 || ^19 + '@mdx-js/mdx@1.6.22': resolution: {integrity: sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==} @@ -6862,6 +7490,11 @@ packages: '@microsoft/fast-foundation@2.50.0': resolution: {integrity: sha512-8mFYG88Xea1jZf2TI9Lm/jzZ6RWR8x29r24mGuLojNYqIR2Bl8+hnswoV6laApKdCbGMPKnsAL/O68Q0sRxeVg==} + '@microsoft/fast-react-wrapper@0.1.48': + resolution: {integrity: sha512-9NvEjru9Kn5ZKjomAMX6v+eF0DR+eDkxKDwDfi+Wb73kTbrNzcnmlwd4diN15ygH97kldgj2+lpvI4CKLQQWLg==} + peerDependencies: + react: '>=16.9.0' + '@microsoft/fast-react-wrapper@0.3.25': resolution: {integrity: sha512-jKzmk2xJV93RL/jEFXEZgBvXlKIY4N4kXy3qrjmBfFpqNi3VjY+oUTWyMnHRMC5EUhIFxD+Y1VD4u9uIPX3jQw==} peerDependencies: @@ -6870,25 +7503,51 @@ packages: '@microsoft/fast-web-utilities@5.4.1': resolution: {integrity: sha512-ReWYncndjV3c8D8iq9tp7NcFNc1vbVHvcBFPME2nNFKNbS1XCesYZGlIlf3ot5EmuOXPlrzUHOWzQ2vFpIkqDg==} - '@modelcontextprotocol/inspector-cli@0.17.5': - resolution: {integrity: sha512-LoDwYa/lpjug19mvIrqOU1UAmgrnOxToZqa/WCDmFLlo7t2LXMqtWKdw00WHXH7p4knF6CgRNfHSBquUmwBJag==} + '@modelcontextprotocol/ext-apps@0.3.1': + resolution: {integrity: sha512-Iivz2KwWK8xlRbiWwFB/C4NXqE8VJBoRCbBkJCN98ST2UbQvA6kfyebcLsypiqylJS467XOOaBcI9DeQ3t+zqA==} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.24.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + zod: ^3.25.0 || ^4.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@modelcontextprotocol/ext-apps@1.2.0': + resolution: {integrity: sha512-ijUQJX/FmNq8PWgOLzph/BAfy84sUZxoIRuHzr+F37wYtWjhdl8pliBJybapYolppY+XJ8oqjFZmTOuMqxwbWQ==} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.24.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + zod: ^3.25.0 || ^4.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@modelcontextprotocol/inspector-cli@0.21.1': + resolution: {integrity: sha512-IuBHJXEjuprPm+YtJGunAuqS3dnDtqf5VOVkzauRGICCEbT860YnDHNhxZARo5h0iMFYwEgRJvMQQwYayEE28w==} hasBin: true - '@modelcontextprotocol/inspector-client@0.17.5': - resolution: {integrity: sha512-zoSa3LESpaYoRLD+6UNDkjyKtu1oYD3hXOwPegwtpvvLbM3CVj5WSUTXNaqN8UnFtyiQK2hc98IjaDPBkWProw==} + '@modelcontextprotocol/inspector-client@0.21.1': + resolution: {integrity: sha512-IZlriZkASr0nbObb4HmNY+dw6Q2/jb126Eh2D97xasuhMZNB1TTBrIt7QHNy2TjhH/qV3acx29rgzMBIys3FAQ==} hasBin: true - '@modelcontextprotocol/inspector-server@0.17.5': - resolution: {integrity: sha512-HlCVDPnCXGb/7HWhJ6Yu51YAQ0mgKluRspa+WtR4DnVxkYwrnph2VMJGlnJ3gwBtHlJM1TYpX0nYDcxF6Meu+w==} + '@modelcontextprotocol/inspector-server@0.21.1': + resolution: {integrity: sha512-dNPbz37aHMkuwwr/AZCnmoigDFSCbilMHkDQ2SVt0yORCgeoIX2li2La6XbmZIKAp14sCpJCKKKpmhwJ9uRiLA==} hasBin: true - '@modelcontextprotocol/inspector@0.17.2': - resolution: {integrity: sha512-ADWwZtbvecKCbLCR7L0Uaa2mPKFDJcTrc9xcE9pdN8gL/jFfzOMrgdNsKt+qBknzMeSQ6mJT+UguJbnQs8n13Q==} + '@modelcontextprotocol/inspector@0.21.0': + resolution: {integrity: sha512-Cu7AKh8aHuBhFQVEFWRvZCWCf0qc2X6KDaiSW/wqLjHlNB9kZP35cwY3I+q1xvow41OyL7zkr+bTV7w3YrFcXg==} engines: {node: '>=22.7.5'} hasBin: true - '@modelcontextprotocol/sdk@1.26.0': - resolution: {integrity: sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==} + '@modelcontextprotocol/sdk@1.27.1': + resolution: {integrity: sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 @@ -6941,8 +7600,8 @@ packages: '@nevware21/ts-async@0.5.5': resolution: {integrity: sha512-vwqaL05iJPjLeh5igPi8MeeAu10i+Aq7xko1fbo9F5Si6MnVN5505qaV7AhSdk5MCBJVT/UYMk3kgInNjDb4Ig==} - '@nevware21/ts-utils@0.12.6': - resolution: {integrity: sha512-UsS1hbgr/V/x8dT7hVHvr/PwHzASi8/Itis1+L8ykLiqsUXdfzrB1maL0vMmKbDEJpmGARsoC/7RIswi+n248Q==} + '@nevware21/ts-utils@0.13.0': + resolution: {integrity: sha512-F3mD+DsUn9OiZmZc5tg0oKqrJCtiCstwx+wE+DNzFYh2cCRUuzTYdK9zGGP/au2BWvbOQ6Tqlbjr2+dT1P3AlQ==} '@noble/hashes@1.4.0': resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} @@ -7004,6 +7663,61 @@ packages: resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} + '@oven/bun-darwin-aarch64@1.3.10': + resolution: {integrity: sha512-PXgg5gqcS/rHwa1hF0JdM1y5TiyejVrMHoBmWY/DjtfYZoFTXie1RCFOkoG0b5diOOmUcuYarMpH7CSNTqwj+w==} + cpu: [arm64] + os: [darwin] + + '@oven/bun-darwin-x64-baseline@1.3.10': + resolution: {integrity: sha512-w1gaTlqU0IJCmJ1X+PGHkdNU1n8Gemx5YKkjhkJIguvFINXEBB5U1KG82QsT65Tk4KyNMfbLTlmy4giAvUoKfA==} + cpu: [x64] + os: [darwin] + + '@oven/bun-darwin-x64@1.3.10': + resolution: {integrity: sha512-Nhssuh7GBpP5PiDSOl3+qnoIG7PJo+ec2oomDevnl9pRY6x6aD2gRt0JE+uf+A8Om2D6gjeHCxjEdrw5ZHE8mA==} + cpu: [x64] + os: [darwin] + + '@oven/bun-linux-aarch64-musl@1.3.10': + resolution: {integrity: sha512-Ui5pAgM7JE9MzHokF0VglRMkbak3lTisY4Mf1AZutPACXWgKJC5aGrgnHBfkl7QS6fEeYb0juy1q4eRznRHOsw==} + cpu: [arm64] + os: [linux] + + '@oven/bun-linux-aarch64@1.3.10': + resolution: {integrity: sha512-OUgPHfL6+PM2Q+tFZjcaycN3D7gdQdYlWnwMI31DXZKY1r4HINWk9aEz9t/rNaHg65edwNrt7dsv9TF7xK8xIA==} + cpu: [arm64] + os: [linux] + + '@oven/bun-linux-x64-baseline@1.3.10': + resolution: {integrity: sha512-oqvMDYpX6dGJO03HgO5bXuccEsH3qbdO3MaAiAlO4CfkBPLUXz3N0DDElg5hz0L6ktdDVKbQVE5lfe+LAUISQg==} + cpu: [x64] + os: [linux] + + '@oven/bun-linux-x64-musl-baseline@1.3.10': + resolution: {integrity: sha512-/hOZ6S1VsTX6vtbhWVL9aAnOrdpuO54mAGUWpTdMz7dFG5UBZ/VUEiK0pBkq9A1rlBk0GeD/6Y4NBFl8Ha7cRA==} + cpu: [x64] + os: [linux] + + '@oven/bun-linux-x64-musl@1.3.10': + resolution: {integrity: sha512-poVXvOShekbexHq45b4MH/mRjQKwACAC8lHp3Tz/hEDuz0/20oncqScnmKwzhBPEpqJvydXficXfBYuSim8opw==} + cpu: [x64] + os: [linux] + + '@oven/bun-linux-x64@1.3.10': + resolution: {integrity: sha512-bzUgYj/PIZziB/ZesIP9HUyfvh6Vlf3od+TrbTTyVEuCSMKzDPQVW/yEbRp0tcHO3alwiEXwJDrWrHAguXlgiQ==} + cpu: [x64] + os: [linux] + + '@oven/bun-windows-x64-baseline@1.3.10': + resolution: {integrity: sha512-gh3UAHbUdDUG6fhLc1Csa4IGdtghue6U8oAIXWnUqawp6lwb3gOCRvp25IUnLF5vUHtgfMxuEUYV7YA2WxVutw==} + cpu: [x64] + os: [win32] + + '@oven/bun-windows-x64@1.3.10': + resolution: {integrity: sha512-qaS1In3yfC/Z/IGQriVmF8GWwKuNqiw7feTSJWaQhH5IbL6ENR+4wGNPniZSJFaM/SKUO0e/YCRdoVBvgU4C1g==} + cpu: [x64] + os: [win32] + '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} engines: {node: '>= 10.0.0'} @@ -7133,6 +7847,32 @@ packages: engines: {node: '>=18'} hasBin: true + '@pmmmwh/react-refresh-webpack-plugin@0.4.3': + resolution: {integrity: sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==} + engines: {node: '>= 10.x'} + peerDependencies: + '@types/webpack': 4.x + react-refresh: '>=0.8.3 <0.10.0' + sockjs-client: ^1.4.0 + type-fest: ^0.13.1 + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + '@pmmmwh/react-refresh-webpack-plugin@0.5.17': resolution: {integrity: sha512-tXDyE1/jzFsHXjhRZQ3hMl0IVhYe5qula43LDWIhVfjp9G/nT5OQY5AORVOrkEGAUltBJOfOWeETbmhm6kHhuQ==} engines: {node: '>= 10.13'} @@ -7159,14 +7899,14 @@ packages: webpack-plugin-serve: optional: true - '@pmmmwh/react-refresh-webpack-plugin@0.6.2': - resolution: {integrity: sha512-IhIAD5n4XvGHuL9nAgWfsBR0TdxtjrUWETYKCBHxauYXEv+b+ctEbs9neEgPC7Ecgzv4bpZTBwesAoGDeFymzA==} + '@pmmmwh/react-refresh-webpack-plugin@0.6.0': + resolution: {integrity: sha512-AAc+QWfZ1KQ/e1C6OHWVlxU+ks6zFGOA44IJUlvju7RlDS8nsX6poPFOIlsg/rTofO9vKov12+WCjMhKkRKD5g==} engines: {node: '>=18.12'} peerDependencies: '@types/webpack': 5.x react-refresh: '>=0.10.0 <1.0.0' sockjs-client: ^1.4.0 - type-fest: '>=0.17.0 <6.0.0' + type-fest: '>=0.17.0 <5.0.0' webpack: ^5.0.0 webpack-dev-server: ^4.8.0 || 5.x webpack-hot-middleware: 2.x @@ -7185,6 +7925,12 @@ packages: webpack-plugin-serve: optional: true + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@preact/signals-core@1.14.0': + resolution: {integrity: sha512-AowtCcCU/33lFlh1zRFf/u+12rfrhtNakj7UpaGEsmMwUKpKWMVvcktOGcwBBNiB4lWrZWc01LhiyyzVklJyaQ==} + '@projectstorm/geometry@6.7.4': resolution: {integrity: sha512-9jTcQPzg+qT9OUMCUGmpkyk0ChHMobFL5d542dY5sb54bki35cawvQj2gMsIdNJ4WGxnuM+DKSSzm4JX35lGtw==} @@ -7194,7 +7940,7 @@ packages: '@projectstorm/react-canvas-core@6.7.4': resolution: {integrity: sha512-sY32kT//gQe5aw6RHkmKrbzBq9iWyfwyvvfRTplGPE1ll3zOBVCjbf3tdfw6vATCden+WR0TmirtBo2j3exiBg==} peerDependencies: - lodash: 4.17.23 + lodash: 4.* react: 16.* || 17.* '@projectstorm/react-canvas-core@7.0.3': @@ -7203,7 +7949,7 @@ packages: '@projectstorm/react-diagrams-core@6.7.4': resolution: {integrity: sha512-AeqH1u58Ugk8mif/GgLEUeOMmTPaWDpl1isA1OJHCPGMbvAytRfv5mrGMvG2E+pYDB29BQ4Yo2z9/TbAy6/nvA==} peerDependencies: - lodash: 4.17.23 + lodash: 4.* react: 18.* resize-observer-polyfill: ^1.5.1 @@ -7215,7 +7961,7 @@ packages: peerDependencies: '@emotion/react': ^11.* '@emotion/styled': ^11.* - lodash: 4.17.23 + lodash: 4.* react: 18.* '@projectstorm/react-diagrams-defaults@7.1.3': @@ -7225,7 +7971,7 @@ packages: resolution: {integrity: sha512-mB8YaRkNF6gdTlYvL0Cxc6m6XLwh7wvmjIsiEO6kW3j1uSvH7R7Gbl/iDYOdc0zUMqH9+pD+M064tWC4oAXa9A==} peerDependencies: dagre: ^0.8.5 - lodash: 4.17.23 + lodash: 4.* pathfinding: ^0.4.18 paths-js: ^0.4.11 react: 18.* @@ -7269,6 +8015,28 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@quilted/events@2.1.3': + resolution: {integrity: sha512-4fHaSLND8rmZ+tce9/4FNmG5UWTRpFtM54kOekf3tLON4ZLLnYzjjldELD35efd7+lT5+E3cdkacqc56d+kCrQ==} + engines: {node: '>=14.0.0'} + + '@quilted/threads@3.3.1': + resolution: {integrity: sha512-0ASnjTH+hOu1Qwzi9NnsVcsbMhWVx8pEE8SXIHknqcc/1rXAU0QlKw9ARq0W43FAdzyVeuXeXtZN27ZC0iALKg==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@preact/signals-core': ^1.8.0 + peerDependenciesMeta: + '@preact/signals-core': + optional: true + + '@r2wc/core@1.3.1': + resolution: {integrity: sha512-x9nMthXsTjqr1alE+boX1Zuzqb6/oFi4wAOdWaWcWKcrwq9M/PATK74c3DFJfRnUOkYWPlsz0e4CsFBXJGStSA==} + + '@r2wc/react-to-web-component@2.1.1': + resolution: {integrity: sha512-AXsIdjxK9ALv0ySWjVadUg3uJ5nS8L4H8eZMYaaWuM+9LNj9DP/r4+sMjI+6jZwb7/FqwxRPHQUq8yimQwBfOA==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + '@radix-ui/colors@3.0.0': resolution: {integrity: sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==} @@ -8015,14 +8783,20 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - '@react-aria/focus@3.21.4': - resolution: {integrity: sha512-6gz+j9ip0/vFRTKJMl3R30MHopn4i19HqqLfSQfElxJD+r9hBnYG1Q6Wd/kl/WRR1+CALn2F+rn06jUnf5sT8Q==} + '@reach/router@1.3.4': + resolution: {integrity: sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA==} + peerDependencies: + react: 15.x || 16.x || 16.4.0-alpha.0911da3 + react-dom: 15.x || 16.x || 16.4.0-alpha.0911da3 + + '@react-aria/focus@3.21.5': + resolution: {integrity: sha512-V18fwCyf8zqgJdpLQeDU5ZRNd9TeOfBbhLgmX77Zr5ae9XwaoJ1R3SFJG1wCJX60t34AW+aLZSEEK+saQElf3Q==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/interactions@3.27.0': - resolution: {integrity: sha512-D27pOy+0jIfHK60BB26AgqjjRFOYdvVSkwC31b2LicIzRCSPOSP06V4gMHuGmkhNTF4+YWDi1HHYjxIvMeiSlA==} + '@react-aria/interactions@3.27.1': + resolution: {integrity: sha512-M3wLpTTmDflI0QGNK0PJNUaBXXfeBXue8ZxLMngfc1piHNiH4G5lUvWd9W14XVbqrSCVY8i8DfGrNYpyyZu0tw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -8033,8 +8807,8 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/utils@3.33.0': - resolution: {integrity: sha512-yvz7CMH8d2VjwbSa5nGXqjU031tYhD8ddax95VzJsHSPyqHDEGfxul8RkhGV6oO7bVqZxVs6xY66NIgae+FHjw==} + '@react-aria/utils@3.33.1': + resolution: {integrity: sha512-kIx1Sj6bbAT0pdqCegHuPanR9zrLn5zMRiM7LN12rgRf55S19ptd9g3ncahArifYTRkfEU9VIn+q0HjfMqS9/w==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -8066,23 +8840,48 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-types/shared@3.33.0': - resolution: {integrity: sha512-xuUpP6MyuPmJtzNOqF5pzFUIHH2YogyOQfUQHag54PRmWB7AbjuGWBUv0l1UDmz6+AbzAYGmDVAzcRDOu2PFpw==} + '@react-types/shared@3.33.1': + resolution: {integrity: sha512-oJHtjvLG43VjwemQDadlR5g/8VepK56B/xKO2XORPHt9zlW6IZs3tZrYlvH29BMvoqC7RtE7E5UjgbnbFtDGag==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@redhat-developer/locators@1.19.0': - resolution: {integrity: sha512-BW2QRxuI94IuSTDZjMsNQ7OGODJkdD42hXjBe9PaqFtC0S56j4X+qG3QlDT2wf42ePKlitXoMMYh+Z/r1pIaKg==} + '@redhat-developer/locators@1.19.1': + resolution: {integrity: sha512-km6iYzTyxtr+AXWeMob15CeXHVta/vN/MhK+59PaqmO3/aizJ6kIHRe+o4uUfcLB2GL5Ml0w+OXLJEfsHRyQ3g==} peerDependencies: '@redhat-developer/page-objects': '>=1.0.0' selenium-webdriver: '>=4.6.1' - '@redhat-developer/page-objects@1.19.0': - resolution: {integrity: sha512-uUOH31br3Ibjv4xZWF/fi0TPsOMe1oiwDm3SblJBYP/Q1rauMD/sKOQt3LGe1iZr/J9LsC8Bk0D/saqQAkVwjQ==} + '@redhat-developer/page-objects@1.19.1': + resolution: {integrity: sha512-PFyPV2GITbqd3IrnadiUawTZiTirVVakS63DeJvxhbpxRGQ5ZmpzQnEec7xLOUiA59ipeu85HhZNybtV+Ve0wQ==} peerDependencies: selenium-webdriver: '>=4.6.1' typescript: '>=4.6.2' + '@remote-dom/core@1.10.1': + resolution: {integrity: sha512-MlbUOGuHjOrB7uOkaYkIoLUG8lDK8/H1D7MHnGkgqbG6jwjwQSlGPHhbwnD6HYWsTGpAPOP02Byd8wBt9U6TEw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@preact/signals-core': ^1.3.0 + preact: '*' + peerDependenciesMeta: + '@preact/signals-core': + optional: true + preact: + optional: true + + '@remote-dom/polyfill@1.5.1': + resolution: {integrity: sha512-eaWdIVKZpNfbqspKkRQLVxiFv/7vIw8u0FVA5oy52YANFbO/WVT0GU+PQmRt/QUSijaB36HBAqx7stjo8HGpVQ==} + engines: {node: '>=14.0.0'} + + '@remote-dom/react@1.2.2': + resolution: {integrity: sha512-PkvioODONTr1M0StGDYsR4Ssf5M0Rd4+IlWVvVoK3Zrw8nr7+5mJkgNofaj/z7i8Aep78L28PCW8/WduUt4unA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + '@rollup/plugin-babel@5.3.1': resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} engines: {node: '>= 10.0.0'} @@ -8100,8 +8899,8 @@ packages: peerDependencies: rollup: ^1.20.0||^2.0.0 - '@rollup/plugin-commonjs@28.0.9': - resolution: {integrity: sha512-PIR4/OHZ79romx0BVVll/PkwWpJ7e5lsqFa3gFfcrFPWwLXLV39JVUzQV9RKjWerE7B845Hqjj9VYlQeieZ2dA==} + '@rollup/plugin-commonjs@28.0.3': + resolution: {integrity: sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -8123,8 +8922,8 @@ packages: rollup: optional: true - '@rollup/plugin-node-resolve@16.0.3': - resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==} + '@rollup/plugin-node-resolve@16.0.1': + resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.78.0||^3.0.0||^4.0.0 @@ -8162,128 +8961,133 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.57.1': - resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} + '@rollup/rollup-android-arm-eabi@4.41.0': + resolution: {integrity: sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.57.1': - resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} + '@rollup/rollup-android-arm64@4.41.0': + resolution: {integrity: sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.57.1': - resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} + '@rollup/rollup-darwin-arm64@4.41.0': + resolution: {integrity: sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-arm64@4.59.0': + resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.57.1': - resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} + '@rollup/rollup-darwin-x64@4.41.0': + resolution: {integrity: sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.57.1': - resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} + '@rollup/rollup-darwin-x64@4.59.0': + resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.41.0': + resolution: {integrity: sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.57.1': - resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} + '@rollup/rollup-freebsd-x64@4.41.0': + resolution: {integrity: sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': - resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} + '@rollup/rollup-linux-arm-gnueabihf@4.41.0': + resolution: {integrity: sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.57.1': - resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} + '@rollup/rollup-linux-arm-musleabihf@4.41.0': + resolution: {integrity: sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.57.1': - resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} + '@rollup/rollup-linux-arm64-gnu@4.41.0': + resolution: {integrity: sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.57.1': - resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} + '@rollup/rollup-linux-arm64-gnu@4.59.0': + resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.57.1': - resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} - cpu: [loong64] + '@rollup/rollup-linux-arm64-musl@4.41.0': + resolution: {integrity: sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==} + cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-musl@4.57.1': - resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} + '@rollup/rollup-linux-loongarch64-gnu@4.41.0': + resolution: {integrity: sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.57.1': - resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} + '@rollup/rollup-linux-powerpc64le-gnu@4.41.0': + resolution: {integrity: sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-musl@4.57.1': - resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.57.1': - resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} + '@rollup/rollup-linux-riscv64-gnu@4.41.0': + resolution: {integrity: sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.57.1': - resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} + '@rollup/rollup-linux-riscv64-musl@4.41.0': + resolution: {integrity: sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.57.1': - resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} + '@rollup/rollup-linux-s390x-gnu@4.41.0': + resolution: {integrity: sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.57.1': - resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} + '@rollup/rollup-linux-x64-gnu@4.41.0': + resolution: {integrity: sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.57.1': - resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} + '@rollup/rollup-linux-x64-gnu@4.59.0': + resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.57.1': - resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} + '@rollup/rollup-linux-x64-musl@4.41.0': + resolution: {integrity: sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==} cpu: [x64] - os: [openbsd] + os: [linux] - '@rollup/rollup-openharmony-arm64@4.57.1': - resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} + '@rollup/rollup-win32-arm64-msvc@4.41.0': + resolution: {integrity: sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==} cpu: [arm64] - os: [openharmony] + os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.57.1': - resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} + '@rollup/rollup-win32-arm64-msvc@4.59.0': + resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.57.1': - resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} + '@rollup/rollup-win32-ia32-msvc@4.41.0': + resolution: {integrity: sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.57.1': - resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} + '@rollup/rollup-win32-x64-msvc@4.41.0': + resolution: {integrity: sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.57.1': - resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} + '@rollup/rollup-win32-x64-msvc@4.59.0': + resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} cpu: [x64] os: [win32] @@ -8346,8 +9150,8 @@ packages: engines: {node: '>= 8'} hasBin: true - '@sentry/webpack-plugin@1.21.0': - resolution: {integrity: sha512-x0PYIMWcsTauqxgl7vWUY6sANl+XGKtx7DCVnnY7aOIIlIna0jChTAPANTfA2QrK+VK+4I/4JxatCEZBnXh3Og==} + '@sentry/webpack-plugin@1.20.1': + resolution: {integrity: sha512-klOLkfM/oSYzcR2M9oDmJA5/Mdaw0Mtck/h820Z+gqpd6WJepjhqVDel1z2VddaP/XMY0Dj6elCGp2/nDWNr0w==} engines: {node: '>= 8'} '@sideway/address@4.1.5': @@ -8410,220 +9214,220 @@ packages: peerDependencies: size-limit: 11.2.0 - '@smithy/abort-controller@4.2.8': - resolution: {integrity: sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==} + '@smithy/abort-controller@4.2.11': + resolution: {integrity: sha512-Hj4WoYWMJnSpM6/kchsm4bUNTL9XiSyhvoMb2KIq4VJzyDt7JpGHUZHkVNPZVC7YE1tf8tPeVauxpFBKGW4/KQ==} engines: {node: '>=18.0.0'} - '@smithy/chunked-blob-reader-native@4.2.1': - resolution: {integrity: sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==} + '@smithy/chunked-blob-reader-native@4.2.3': + resolution: {integrity: sha512-jA5k5Udn7Y5717L86h4EIv06wIr3xn8GM1qHRi/Nf31annXcXHJjBKvgztnbn2TxH3xWrPBfgwHsOwZf0UmQWw==} engines: {node: '>=18.0.0'} - '@smithy/chunked-blob-reader@5.2.0': - resolution: {integrity: sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==} + '@smithy/chunked-blob-reader@5.2.2': + resolution: {integrity: sha512-St+kVicSyayWQca+I1rGitaOEH6uKgE8IUWoYnnEX26SWdWQcL6LvMSD19Lg+vYHKdT9B2Zuu7rd3i6Wnyb/iw==} engines: {node: '>=18.0.0'} - '@smithy/config-resolver@4.4.6': - resolution: {integrity: sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==} + '@smithy/config-resolver@4.4.10': + resolution: {integrity: sha512-IRTkd6ps0ru+lTWnfnsbXzW80A8Od8p3pYiZnW98K2Hb20rqfsX7VTlfUwhrcOeSSy68Gn9WBofwPuw3e5CCsg==} engines: {node: '>=18.0.0'} - '@smithy/core@3.23.3': - resolution: {integrity: sha512-5IETfbqrTuGs0fC22ZnTW6df+PHlrWpSbAbySzTozsUROWPiOXDIWt1Y4dCDzhJUQ6H3ig/dFOZaEeLsTjNGRQ==} + '@smithy/core@3.23.9': + resolution: {integrity: sha512-1Vcut4LEL9HZsdpI0vFiRYIsaoPwZLjAxnVQDUMQK8beMS+EYPLDQCXtbzfxmM5GzSgjfe2Q9M7WaXwIMQllyQ==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.2.8': - resolution: {integrity: sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw==} + '@smithy/credential-provider-imds@4.2.11': + resolution: {integrity: sha512-lBXrS6ku0kTj3xLmsJW0WwqWbGQ6ueooYyp/1L9lkyT0M02C+DWwYwc5aTyXFbRaK38ojALxNixg+LxKSHZc0g==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-codec@4.2.8': - resolution: {integrity: sha512-jS/O5Q14UsufqoGhov7dHLOPCzkYJl9QDzusI2Psh4wyYx/izhzvX9P4D69aTxcdfVhEPhjK+wYyn/PzLjKbbw==} + '@smithy/eventstream-codec@4.2.11': + resolution: {integrity: sha512-Sf39Ml0iVX+ba/bgMPxaXWAAFmHqYLTmbjAPfLPLY8CrYkRDEqZdUsKC1OwVMCdJXfAt0v4j49GIJ8DoSYAe6w==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-browser@4.2.8': - resolution: {integrity: sha512-MTfQT/CRQz5g24ayXdjg53V0mhucZth4PESoA5IhvaWVDTOQLfo8qI9vzqHcPsdd2v6sqfTYqF5L/l+pea5Uyw==} + '@smithy/eventstream-serde-browser@4.2.11': + resolution: {integrity: sha512-3rEpo3G6f/nRS7fQDsZmxw/ius6rnlIpz4UX6FlALEzz8JoSxFmdBt0SZnthis+km7sQo6q5/3e+UJcuQivoXA==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-config-resolver@4.3.8': - resolution: {integrity: sha512-ah12+luBiDGzBruhu3efNy1IlbwSEdNiw8fOZksoKoWW1ZHvO/04MQsdnws/9Aj+5b0YXSSN2JXKy/ClIsW8MQ==} + '@smithy/eventstream-serde-config-resolver@4.3.11': + resolution: {integrity: sha512-XeNIA8tcP/GDWnnKkO7qEm/bg0B/bP9lvIXZBXcGZwZ+VYM8h8k9wuDvUODtdQ2Wcp2RcBkPTCSMmaniVHrMlA==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-node@4.2.8': - resolution: {integrity: sha512-cYpCpp29z6EJHa5T9WL0KAlq3SOKUQkcgSoeRfRVwjGgSFl7Uh32eYGt7IDYCX20skiEdRffyDpvF2efEZPC0A==} + '@smithy/eventstream-serde-node@4.2.11': + resolution: {integrity: sha512-fzbCh18rscBDTQSCrsp1fGcclLNF//nJyhjldsEl/5wCYmgpHblv5JSppQAyQI24lClsFT0wV06N1Porn0IsEw==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-universal@4.2.8': - resolution: {integrity: sha512-iJ6YNJd0bntJYnX6s52NC4WFYcZeKrPUr1Kmmr5AwZcwCSzVpS7oavAmxMR7pMq7V+D1G4s9F5NJK0xwOsKAlQ==} + '@smithy/eventstream-serde-universal@4.2.11': + resolution: {integrity: sha512-MJ7HcI+jEkqoWT5vp+uoVaAjBrmxBtKhZTeynDRG/seEjJfqyg3SiqMMqyPnAMzmIfLaeJ/uiuSDP/l9AnMy/Q==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.3.9': - resolution: {integrity: sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==} + '@smithy/fetch-http-handler@5.3.13': + resolution: {integrity: sha512-U2Hcfl2s3XaYjikN9cT4mPu8ybDbImV3baXR0PkVlC0TTx808bRP3FaPGAzPtB8OByI+JqJ1kyS+7GEgae7+qQ==} engines: {node: '>=18.0.0'} - '@smithy/hash-blob-browser@4.2.9': - resolution: {integrity: sha512-m80d/iicI7DlBDxyQP6Th7BW/ejDGiF0bgI754+tiwK0lgMkcaIBgvwwVc7OFbY4eUzpGtnig52MhPAEJ7iNYg==} + '@smithy/hash-blob-browser@4.2.12': + resolution: {integrity: sha512-1wQE33DsxkM/waftAhCH9VtJbUGyt1PJ9YRDpOu+q9FUi73LLFUZ2fD8A61g2mT1UY9k7b99+V1xZ41Rz4SHRQ==} engines: {node: '>=18.0.0'} - '@smithy/hash-node@4.2.8': - resolution: {integrity: sha512-7ZIlPbmaDGxVoxErDZnuFG18WekhbA/g2/i97wGj+wUBeS6pcUeAym8u4BXh/75RXWhgIJhyC11hBzig6MljwA==} + '@smithy/hash-node@4.2.11': + resolution: {integrity: sha512-T+p1pNynRkydpdL015ruIoyPSRw9e/SQOWmSAMmmprfswMrd5Ow5igOWNVlvyVFZlxXqGmyH3NQwfwy8r5Jx0A==} engines: {node: '>=18.0.0'} - '@smithy/hash-stream-node@4.2.8': - resolution: {integrity: sha512-v0FLTXgHrTeheYZFGhR+ehX5qUm4IQsjAiL9qehad2cyjMWcN2QG6/4mSwbSgEQzI7jwfoXj7z4fxZUx/Mhj2w==} + '@smithy/hash-stream-node@4.2.11': + resolution: {integrity: sha512-hQsTjwPCRY8w9GK07w1RqJi3e+myh0UaOWBBhZ1UMSDgofH/Q1fEYzU1teaX6HkpX/eWDdm7tAGR0jBPlz9QEQ==} engines: {node: '>=18.0.0'} - '@smithy/invalid-dependency@4.2.8': - resolution: {integrity: sha512-N9iozRybwAQ2dn9Fot9kI6/w9vos2oTXLhtK7ovGqwZjlOcxu6XhPlpLpC+INsxktqHinn5gS2DXDjDF2kG5sQ==} + '@smithy/invalid-dependency@4.2.11': + resolution: {integrity: sha512-cGNMrgykRmddrNhYy1yBdrp5GwIgEkniS7k9O1VLB38yxQtlvrxpZtUVvo6T4cKpeZsriukBuuxfJcdZQc/f/g==} engines: {node: '>=18.0.0'} '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} - '@smithy/is-array-buffer@4.2.0': - resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} + '@smithy/is-array-buffer@4.2.2': + resolution: {integrity: sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow==} engines: {node: '>=18.0.0'} - '@smithy/md5-js@4.2.8': - resolution: {integrity: sha512-oGMaLj4tVZzLi3itBa9TCswgMBr7k9b+qKYowQ6x1rTyTuO1IU2YHdHUa+891OsOH+wCsH7aTPRsTJO3RMQmjQ==} + '@smithy/md5-js@4.2.11': + resolution: {integrity: sha512-350X4kGIrty0Snx2OWv7rPM6p6vM7RzryvFs6B/56Cux3w3sChOb3bymo5oidXJlPcP9fIRxGUCk7GqpiSOtng==} engines: {node: '>=18.0.0'} - '@smithy/middleware-content-length@4.2.8': - resolution: {integrity: sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==} + '@smithy/middleware-content-length@4.2.11': + resolution: {integrity: sha512-UvIfKYAKhCzr4p6jFevPlKhQwyQwlJ6IeKLDhmV1PlYfcW3RL4ROjNEDtSik4NYMi9kDkH7eSwyTP3vNJ/u/Dw==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.17': - resolution: {integrity: sha512-QP8wuZ7iSNEQ4/HyihTHlDUlQ3eBrCo+HoMm8l2gPcNrR4TA1RCC10jR7IyCnn3ASTrUwEnRaQ062vFC2/eYJw==} + '@smithy/middleware-endpoint@4.4.23': + resolution: {integrity: sha512-UEFIejZy54T1EJn2aWJ45voB7RP2T+IRzUqocIdM6GFFa5ClZncakYJfcYnoXt3UsQrZZ9ZRauGm77l9UCbBLw==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.34': - resolution: {integrity: sha512-ROmCX/ev7ryOzgsQ6dnJ46gbVSrvR2HX7ioxkfXlrgfKEMMOUCWgl/OMOi7PZn95CXTxMMNJTbP3nkvWGFTz+w==} + '@smithy/middleware-retry@4.4.40': + resolution: {integrity: sha512-YhEMakG1Ae57FajERdHNZ4ShOPIY7DsgV+ZoAxo/5BT0KIe+f6DDU2rtIymNNFIj22NJfeeI6LWIifrwM0f+rA==} engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.2.9': - resolution: {integrity: sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==} + '@smithy/middleware-serde@4.2.12': + resolution: {integrity: sha512-W9g1bOLui7Xn5FABRVS0o3rXL0gfN37d/8I/W7i0N7oxjx9QecUmXEMSUMADTODwdtka9cN43t5BI2CodLJpng==} engines: {node: '>=18.0.0'} - '@smithy/middleware-stack@4.2.8': - resolution: {integrity: sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==} + '@smithy/middleware-stack@4.2.11': + resolution: {integrity: sha512-s+eenEPW6RgliDk2IhjD2hWOxIx1NKrOHxEwNUaUXxYBxIyCcDfNULZ2Mu15E3kwcJWBedTET/kEASPV1A1Akg==} engines: {node: '>=18.0.0'} - '@smithy/node-config-provider@4.3.8': - resolution: {integrity: sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==} + '@smithy/node-config-provider@4.3.11': + resolution: {integrity: sha512-xD17eE7kaLgBBGf5CZQ58hh2YmwK1Z0O8YhffwB/De2jsL0U3JklmhVYJ9Uf37OtUDLF2gsW40Xwwag9U869Gg==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.4.10': - resolution: {integrity: sha512-u4YeUwOWRZaHbWaebvrs3UhwQwj+2VNmcVCwXcYTvPIuVyM7Ex1ftAj+fdbG/P4AkBwLq/+SKn+ydOI4ZJE9PA==} + '@smithy/node-http-handler@4.4.14': + resolution: {integrity: sha512-DamSqaU8nuk0xTJDrYnRzZndHwwRnyj/n/+RqGGCcBKB4qrQem0mSDiWdupaNWdwxzyMU91qxDmHOCazfhtO3A==} engines: {node: '>=18.0.0'} - '@smithy/property-provider@4.2.8': - resolution: {integrity: sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==} + '@smithy/property-provider@4.2.11': + resolution: {integrity: sha512-14T1V64o6/ndyrnl1ze1ZhyLzIeYNN47oF/QU6P5m82AEtyOkMJTb0gO1dPubYjyyKuPD6OSVMPDKe+zioOnCg==} engines: {node: '>=18.0.0'} - '@smithy/protocol-http@5.3.8': - resolution: {integrity: sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==} + '@smithy/protocol-http@5.3.11': + resolution: {integrity: sha512-hI+barOVDJBkNt4y0L2mu3Ugc0w7+BpJ2CZuLwXtSltGAAwCb3IvnalGlbDV/UCS6a9ZuT3+exd1WxNdLb5IlQ==} engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@4.2.8': - resolution: {integrity: sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==} + '@smithy/querystring-builder@4.2.11': + resolution: {integrity: sha512-7spdikrYiljpket6u0up2Ck2mxhy7dZ0+TDd+S53Dg2DHd6wg+YNJrTCHiLdgZmEXZKI7LJZcwL3721ZRDFiqA==} engines: {node: '>=18.0.0'} - '@smithy/querystring-parser@4.2.8': - resolution: {integrity: sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==} + '@smithy/querystring-parser@4.2.11': + resolution: {integrity: sha512-nE3IRNjDltvGcoThD2abTozI1dkSy8aX+a2N1Rs55en5UsdyyIXgGEmevUL3okZFoJC77JgRGe99xYohhsjivQ==} engines: {node: '>=18.0.0'} - '@smithy/service-error-classification@4.2.8': - resolution: {integrity: sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==} + '@smithy/service-error-classification@4.2.11': + resolution: {integrity: sha512-HkMFJZJUhzU3HvND1+Yw/kYWXp4RPDLBWLcK1n+Vqw8xn4y2YiBhdww8IxhkQjP/QlZun5bwm3vcHc8AqIU3zw==} engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.4.3': - resolution: {integrity: sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==} + '@smithy/shared-ini-file-loader@4.4.6': + resolution: {integrity: sha512-IB/M5I8G0EeXZTHsAxpx51tMQ5R719F3aq+fjEB6VtNcCHDc0ajFDIGDZw+FW9GxtEkgTduiPpjveJdA/CX7sw==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.3.8': - resolution: {integrity: sha512-6A4vdGj7qKNRF16UIcO8HhHjKW27thsxYci+5r/uVRkdcBEkOEiY8OMPuydLX4QHSrJqGHPJzPRwwVTqbLZJhg==} + '@smithy/signature-v4@5.3.11': + resolution: {integrity: sha512-V1L6N9aKOBAN4wEHLyqjLBnAz13mtILU0SeDrjOaIZEeN6IFa6DxwRt1NNpOdmSpQUfkBj0qeD3m6P77uzMhgQ==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.11.6': - resolution: {integrity: sha512-g9FNlCTfQzkSpHW3ILOm+TWZfXuOj2UcrNWNBHLnY3Ch+67mLVmiu3fGWPWbs1XiRK174q5tGphnPCTHvImQUA==} + '@smithy/smithy-client@4.12.3': + resolution: {integrity: sha512-7k4UxjSpHmPN2AxVhvIazRSzFQjWnud3sOsXcFStzagww17j1cFQYqTSiQ8xuYK3vKLR1Ni8FzuT3VlKr3xCNw==} engines: {node: '>=18.0.0'} - '@smithy/types@4.12.0': - resolution: {integrity: sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==} + '@smithy/types@4.13.0': + resolution: {integrity: sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==} engines: {node: '>=18.0.0'} - '@smithy/url-parser@4.2.8': - resolution: {integrity: sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==} + '@smithy/url-parser@4.2.11': + resolution: {integrity: sha512-oTAGGHo8ZYc5VZsBREzuf5lf2pAurJQsccMusVZ85wDkX66ojEc/XauiGjzCj50A61ObFTPe6d7Pyt6UBYaing==} engines: {node: '>=18.0.0'} - '@smithy/util-base64@4.3.0': - resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==} + '@smithy/util-base64@4.3.2': + resolution: {integrity: sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==} engines: {node: '>=18.0.0'} - '@smithy/util-body-length-browser@4.2.0': - resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==} + '@smithy/util-body-length-browser@4.2.2': + resolution: {integrity: sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ==} engines: {node: '>=18.0.0'} - '@smithy/util-body-length-node@4.2.1': - resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==} + '@smithy/util-body-length-node@4.2.3': + resolution: {integrity: sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g==} engines: {node: '>=18.0.0'} '@smithy/util-buffer-from@2.2.0': resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} engines: {node: '>=14.0.0'} - '@smithy/util-buffer-from@4.2.0': - resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==} + '@smithy/util-buffer-from@4.2.2': + resolution: {integrity: sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q==} engines: {node: '>=18.0.0'} - '@smithy/util-config-provider@4.2.0': - resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} + '@smithy/util-config-provider@4.2.2': + resolution: {integrity: sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.3.33': - resolution: {integrity: sha512-VutP/lyBWaTNUzNjI+NC3Kwts4Grhb8CTUyGZNQadf5lujqNy2IIM739D31qplSdbxqYBLOPvMXwy4CIKOArrg==} + '@smithy/util-defaults-mode-browser@4.3.39': + resolution: {integrity: sha512-ui7/Ho/+VHqS7Km2wBw4/Ab4RktoiSshgcgpJzC4keFPs6tLJS4IQwbeahxQS3E/w98uq6E1mirCH/id9xIXeQ==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.2.36': - resolution: {integrity: sha512-x73FjvOgG8XBtxu4auMnMDhLi6bUVBLHgNAv8xU0noDGks0KF59JNSzgVQ0oOSuf/D6pVJ5tMEkajwz6IavBUg==} + '@smithy/util-defaults-mode-node@4.2.42': + resolution: {integrity: sha512-QDA84CWNe8Akpj15ofLO+1N3Rfg8qa2K5uX0y6HnOp4AnRYRgWrKx/xzbYNbVF9ZsyJUYOfcoaN3y93wA/QJ2A==} engines: {node: '>=18.0.0'} - '@smithy/util-endpoints@3.2.8': - resolution: {integrity: sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==} + '@smithy/util-endpoints@3.3.2': + resolution: {integrity: sha512-+4HFLpE5u29AbFlTdlKIT7jfOzZ8PDYZKTb3e+AgLz986OYwqTourQ5H+jg79/66DB69Un1+qKecLnkZdAsYcA==} engines: {node: '>=18.0.0'} - '@smithy/util-hex-encoding@4.2.0': - resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} + '@smithy/util-hex-encoding@4.2.2': + resolution: {integrity: sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==} engines: {node: '>=18.0.0'} - '@smithy/util-middleware@4.2.8': - resolution: {integrity: sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==} + '@smithy/util-middleware@4.2.11': + resolution: {integrity: sha512-r3dtF9F+TpSZUxpOVVtPfk09Rlo4lT6ORBqEvX3IBT6SkQAdDSVKR5GcfmZbtl7WKhKnmb3wbDTQ6ibR2XHClw==} engines: {node: '>=18.0.0'} - '@smithy/util-retry@4.2.8': - resolution: {integrity: sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==} + '@smithy/util-retry@4.2.11': + resolution: {integrity: sha512-XSZULmL5x6aCTTii59wJqKsY1l3eMIAomRAccW7Tzh9r8s7T/7rdo03oektuH5jeYRlJMPcNP92EuRDvk9aXbw==} engines: {node: '>=18.0.0'} - '@smithy/util-stream@4.5.13': - resolution: {integrity: sha512-ZJQh++mmjO7JiWAW4SdWFrsde1VE038g4uGtkTlvCGcpytMLsxIAg9o9blorLYaQG47EfY9QjLP38od88NLL8w==} + '@smithy/util-stream@4.5.17': + resolution: {integrity: sha512-793BYZ4h2JAQkNHcEnyFxDTcZbm9bVybD0UV/LEWmZ5bkTms7JqjfrLMi2Qy0E5WFcCzLwCAPgcvcvxoeALbAQ==} engines: {node: '>=18.0.0'} - '@smithy/util-uri-escape@4.2.0': - resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} + '@smithy/util-uri-escape@4.2.2': + resolution: {integrity: sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw==} engines: {node: '>=18.0.0'} '@smithy/util-utf8@2.3.0': resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} - '@smithy/util-utf8@4.2.0': - resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} + '@smithy/util-utf8@4.2.2': + resolution: {integrity: sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==} engines: {node: '>=18.0.0'} - '@smithy/util-waiter@4.2.8': - resolution: {integrity: sha512-n+lahlMWk+aejGuax7DPWtqav8HYnWxQwR+LCG2BgCUmaGcTe9qZCFsmw8TMg9iG75HOwhrJCX9TCJRLH+Yzqg==} + '@smithy/util-waiter@4.2.11': + resolution: {integrity: sha512-x7Rh2azQPs3XxbvCzcttRErKKvLnbZfqRf/gOjw2pb+ZscX88e5UkRPCB67bVnsFHxayvMvmePfKTqsRb+is1A==} engines: {node: '>=18.0.0'} - '@smithy/uuid@1.1.0': - resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==} + '@smithy/uuid@1.1.2': + resolution: {integrity: sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==} engines: {node: '>=18.0.0'} '@so-ric/colorspace@1.1.6': @@ -8649,8 +9453,19 @@ packages: react-dom: optional: true - '@storybook/addon-actions@7.4.6': - resolution: {integrity: sha512-SsqZr3js5NinKPnC8AeNI7Ij+Q6fIl9tRdRmSulEgjksjOg7E5S1/Wsn5Bb2CCgj7MaX6VxGyC7s3XskQtDiIQ==} + '@storybook/addon-actions@6.5.9': + resolution: {integrity: sha512-wDYm3M1bN+zcYZV3Q24M03b/P8DDpvj1oSoY6VLlxDAi56h8qZB/voeIS2I6vWXOB79C5tbwljYNQO0GsufS0g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-actions@7.4.0': + resolution: {integrity: sha512-0lHLLUlrGE7CBFrfmAXrBKu7fUIsiQlnNekuE3cIAjSgVR481bJEzYHUUoMATqpPC4GGErBdP1CZxVDDwWV8jA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8665,11 +9480,6 @@ packages: peerDependencies: storybook: ^8.6.14 - '@storybook/addon-actions@8.6.15': - resolution: {integrity: sha512-zc600PBJqP9hCyRY5escKgKf6Zt9kdNZfm+Jwb46k5/NMSO4tNVeOPGBFxW9kSsIYk8j55sNske+Yh60G+8bcw==} - peerDependencies: - storybook: ^8.6.15 - '@storybook/addon-backgrounds@6.5.16': resolution: {integrity: sha512-t7qooZ892BruhilFmzYPbysFwpULt/q4zYXNSmKVbAYta8UVvitjcU4F18p8FpWd9WvhiTr0SDlyhNZuzvDfug==} peerDependencies: @@ -8681,8 +9491,19 @@ packages: react-dom: optional: true - '@storybook/addon-backgrounds@7.4.6': - resolution: {integrity: sha512-+LHTZB/ZYMAzkyD5ZxSriBsqmsrvIaW/Nnd/BeuXGbkrVKKqM0qAKiFZAfjc2WchA1piVNy0/1Rsf+kuYCEiJw==} + '@storybook/addon-backgrounds@6.5.9': + resolution: {integrity: sha512-9k+GiY5aiANLOct34ar29jqgdi5ZpCqpZ86zPH0GsEC6ifH6nzP4trLU0vFUe260XDCvB4g8YaI7JZKPhozERg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-backgrounds@7.4.0': + resolution: {integrity: sha512-cEO/Tp/eRE+5bf1FGN4wKLqLDBv3EYp9enJyXV7B3cFdciqtoE7VJPZuFZkzjJN1rRcOKSZp8g5agsx+x9uNGQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8708,8 +9529,19 @@ packages: react-dom: optional: true - '@storybook/addon-controls@7.4.6': - resolution: {integrity: sha512-4lq3sycEUIsK8SUWDYc60QgF4vV9FZZ3lDr6M7j2W9bOnvGw49d2fbdlnq+bX1ZprZZ9VgglQpBAorQB3BXZRw==} + '@storybook/addon-controls@6.5.9': + resolution: {integrity: sha512-VvjkgK32bGURKyWU2No6Q2B0RQZjLZk8D3neVNCnrWxwrl1G82StegxjRPn/UZm9+MZVPvTvI46nj1VdgOktnw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-controls@7.4.0': + resolution: {integrity: sha512-tYDfqpTR+c9y4kElmr3aWNHPot6kYd+nruYb697LpkCdy4lFErqSo0mhvPyZfMZp2KEajfp6YJAurhQWbvbj/A==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8738,8 +9570,22 @@ packages: react-dom: optional: true - '@storybook/addon-docs@7.4.6': - resolution: {integrity: sha512-dLaub+XWFq4hChw+xfuF9yYg0Txp77FUawKoAigccfjWXx+OOhRV3XTuAcknpXkYq94GWynHgUFXosXT9kbDNA==} + '@storybook/addon-docs@6.5.9': + resolution: {integrity: sha512-9lwOZyiOJFUgGd9ADVfcgpels5o0XOXqGMeVLuzT1160nopbZjNjo/3+YLJ0pyHRPpMJ4rmq2+vxRQR6PVRgPg==} + peerDependencies: + '@storybook/mdx2-csf': ^0.0.3 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@storybook/mdx2-csf': + optional: true + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-docs@7.4.0': + resolution: {integrity: sha512-LJE92LUeVTgi8W4tLBEbSvCqF54snmBfTFCr46vhCFov2CE2VBgEvIX1XT3dfUgYUOtPu3RXR2C89fYgU6VYZw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8806,8 +9652,65 @@ packages: webpack: optional: true - '@storybook/addon-essentials@7.4.6': - resolution: {integrity: sha512-dWodufrt71TK7ELkeIvVae/x4PzECUlbOm57Iqqt4yQCyR291CgvI4PjeB8un2HbpcXCGZ+N/Oj3YkytvzBi4A==} + '@storybook/addon-essentials@6.5.9': + resolution: {integrity: sha512-V9ThjKQsde4A2Es20pLFBsn0MWx2KCJuoTcTsANP4JDcbvEmj8UjbDWbs8jAU+yzJT5r+CI6NoWmQudv12ZOgw==} + peerDependencies: + '@babel/core': ^7.9.6 + '@storybook/angular': '*' + '@storybook/builder-manager4': '*' + '@storybook/builder-manager5': '*' + '@storybook/builder-webpack4': '*' + '@storybook/builder-webpack5': '*' + '@storybook/html': '*' + '@storybook/vue': '*' + '@storybook/vue3': '*' + '@storybook/web-components': '*' + lit: '*' + lit-html: '*' + react: '*' + react-dom: '*' + svelte: '*' + sveltedoc-parser: '*' + vue: '*' + webpack: '*' + peerDependenciesMeta: + '@storybook/angular': + optional: true + '@storybook/builder-manager4': + optional: true + '@storybook/builder-manager5': + optional: true + '@storybook/builder-webpack4': + optional: true + '@storybook/builder-webpack5': + optional: true + '@storybook/html': + optional: true + '@storybook/vue': + optional: true + '@storybook/vue3': + optional: true + '@storybook/web-components': + optional: true + lit: + optional: true + lit-html: + optional: true + react: + optional: true + react-dom: + optional: true + svelte: + optional: true + sveltedoc-parser: + optional: true + vue: + optional: true + webpack: + optional: true + + '@storybook/addon-essentials@7.4.0': + resolution: {integrity: sha512-nZmNM9AKw2JXxnYUXyFKLeUF/cL7Z9E1WTeZyOFTDtU2aITRt8+LvaepwjchtPqu2B0GcQxLB5FRDdhy0I19nw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8817,8 +9720,8 @@ packages: peerDependencies: storybook: ^8.6.14 - '@storybook/addon-highlight@7.4.6': - resolution: {integrity: sha512-zCufxxD2KS5VwczxfkcBxe1oR/juTTn2H1Qm8kYvWCJQx3UxzX0+G9cwafbpV7eivqaufLweEwROkH+0KjAtkQ==} + '@storybook/addon-highlight@7.4.0': + resolution: {integrity: sha512-kpYSb3oXI9t/1+aRJhToDZ0/1W4mu+SzTBfv9Bl2d/DogEkFzgJricoy5LtvS5EpcXUmKO1FJsw/DCm9buSL2g==} '@storybook/addon-highlight@8.6.14': resolution: {integrity: sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ==} @@ -8841,8 +9744,19 @@ packages: react-dom: optional: true - '@storybook/addon-links@7.4.6': - resolution: {integrity: sha512-BPygElZKX+CPI9Se6GJNk1dYc5oxuhA+vHigO1tBqhiM6VkHyFP3cvezJNQvpNYhkUnu3cxnZXb3UJnlRbPY3g==} + '@storybook/addon-links@6.5.9': + resolution: {integrity: sha512-4BYC7pkxL3NLRnEgTA9jpIkObQKril+XFj1WtmY/lngF90vvK0Kc/TtvTA2/5tSgrHfxEuPevIdxMIyLJ4ejWQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-links@7.4.0': + resolution: {integrity: sha512-lFj8fiokWKk3jx5YUQ4anQo1uCNDMP1y6nJ/92Y85vnOd1vJr3w4GlLy8eOWMABRE33AKLI5Yp6wcpWZDe7hhQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8852,11 +9766,11 @@ packages: react-dom: optional: true - '@storybook/addon-links@8.6.15': - resolution: {integrity: sha512-abRWnDPBTwnj6sQYfAjUnYCNuUQbrVLLOyuormbDUqOcvZ+OqehNYo4BKXx0/lz61h0A2dOD1IuDo40uWyYVFQ==} + '@storybook/addon-links@8.6.14': + resolution: {integrity: sha512-DRlXHIyZzOruAZkxmXfVgTF+4d6K27pFcH4cUsm3KT1AXuZbr23lb5iZHpUZoG6lmU85Sru4xCEgewSTXBIe1w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.15 + storybook: ^8.6.14 peerDependenciesMeta: react: optional: true @@ -8872,8 +9786,19 @@ packages: react-dom: optional: true - '@storybook/addon-measure@7.4.6': - resolution: {integrity: sha512-nCymMLaHnxv8TE3yEM1A9Tulb1NuRXRNmtsdHTkjv7P1aWCxZo8A/GZaottKe/GLT8jSRjZ+dnpYWrbAhw6wTQ==} + '@storybook/addon-measure@6.5.9': + resolution: {integrity: sha512-0aA22wD0CIEUccsEbWkckCOXOwr4VffofMH1ToVCOeqBoyLOMB0gxFubESeprqM54CWsYh2DN1uujgD6508cwA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-measure@7.4.0': + resolution: {integrity: sha512-8YjBqm6jPOBgkRn9YnJkLN0+ghgJiukdHOa0VB3qhiT+oww4ZOZ7mc2aQRwXQoFb05UbVVG9UNxE7lhyTyaG2w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8888,10 +9813,10 @@ packages: peerDependencies: storybook: ^8.6.14 - '@storybook/addon-onboarding@8.6.15': - resolution: {integrity: sha512-HAsGUQxpwP4MoyaCuZcmLpSMVTXC6PSic2QY6156ZfFMiobD+W0vIaxuDw65iBNUJ2vWRmrQsR8YgmfyWMQ7qA==} + '@storybook/addon-onboarding@8.6.14': + resolution: {integrity: sha512-bHdHiGJFigVcSzMIsNLHY5IODZHr+nKwyz5/QOZLMkLcGH2IaUbOJfm4RyGOaTTPsUtAKbdsVXNEG3Otf+qO9A==} peerDependencies: - storybook: ^8.6.15 + storybook: ^8.6.14 '@storybook/addon-outline@6.5.16': resolution: {integrity: sha512-0du96nha4qltexO0Xq1xB7LeRSbqjC9XqtZLflXG7/X3ABoPD2cXgOV97eeaXUodIyb2qYBbHUfftBeA75x0+w==} @@ -8904,8 +9829,19 @@ packages: react-dom: optional: true - '@storybook/addon-outline@7.4.6': - resolution: {integrity: sha512-errNUblRVDLpuEaHQPr/nsrnsUkD2ARmXawkRvizgDWLIDMDJYjTON3MUCaVx3x+hlZ3I6X//G5TVcma8tCc8A==} + '@storybook/addon-outline@6.5.9': + resolution: {integrity: sha512-oJ1DK3BDJr6aTlZc9axfOxV1oDkZO7hOohgUQDaKO1RZrSpyQsx2ViK2X6p/W7JhFJHKh7rv+nGCaVlLz3YIZA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-outline@7.4.0': + resolution: {integrity: sha512-CCAWFC3bfkmYPzFjOemfH/kjpqJOHt+SdJgBKmwujDy+zum0DHlUL/7rd+U32cEpezCA8bapd0hlWn59C4agHQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8931,8 +9867,19 @@ packages: react-dom: optional: true - '@storybook/addon-toolbars@7.4.6': - resolution: {integrity: sha512-L9m2FBcKeteGq7qIYsMJr0LEfiH7Wdrv5IDcldZTn68eZUJTh1p4GdJZcOmzX1P5IFRr76hpu03iWsNlWQjpbQ==} + '@storybook/addon-toolbars@6.5.9': + resolution: {integrity: sha512-6JFQNHYVZUwp17p5rppc+iQJ2QOIWPTF+ni1GMMThjc84mzXs2+899Sf1aPFTvrFJTklmT+bPX6x4aUTouVa1w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-toolbars@7.4.0': + resolution: {integrity: sha512-00PDLchlQXI3ZClQHU0YQBfikAAxHOhVNv2QKW54yFKmxPl+P2c/VIeir9LcPhA04smKrJTD1u+Nszd66A9xAA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8958,8 +9905,19 @@ packages: react-dom: optional: true - '@storybook/addon-viewport@7.4.6': - resolution: {integrity: sha512-INDtk54j7bi7NgxMfd2ATmbA0J7nAd6X8itMkLIyPuPJtx8bYHPDORyemDOd0AojgmAdTOAyUtDYdI/PFeo4Cw==} + '@storybook/addon-viewport@6.5.9': + resolution: {integrity: sha512-thKS+iw6M7ueDQQ7M66STZ5rgtJKliAcIX6UCopo0Ffh4RaRYmX6MCjqtvBKk8joyXUvm9SpWQemJD9uBQrjgw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/addon-viewport@7.4.0': + resolution: {integrity: sha512-Bfoilf9eJV/C7tR8XHDxz3h8JlZ+iggoESp2Tc0bW9tlRvz+PsCqeyHhF/IgHY+gLnPal2PkK/PIM+ruO45HXA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -8974,6 +9932,12 @@ packages: peerDependencies: storybook: ^8.6.14 + '@storybook/addons@6.3.7': + resolution: {integrity: sha512-9stVjTcc52bqqh7YQex/LpSjJ4e2Czm4/ZYDjIiNy0p4OZEx+yLhL5mZzMWh2NQd6vv+pHASBSxf2IeaR5511A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + '@storybook/addons@6.5.16': resolution: {integrity: sha512-p3DqQi+8QRL5k7jXhXmJZLsE/GqHqyY6PcoA1oNTJr0try48uhTGUOYkgzmqtDaa/qPFO5LP+xCPzZXckGtquQ==} peerDependencies: @@ -8986,6 +9950,12 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/api@6.3.7': + resolution: {integrity: sha512-57al8mxmE9agXZGo8syRQ8UhvGnDC9zkuwkBPXchESYYVkm3Mc54RTvdAOYDiy85VS4JxiGOywHayCaRwgUddQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + '@storybook/api@6.5.16': resolution: {integrity: sha512-HOsuT8iomqeTMQJrRx5U8nsC7lJTwRr1DhdD0SzlqL4c80S/7uuCy4IZvOt4sYQjOzW5fOo/kamcoBXyLproTA==} peerDependencies: @@ -8998,8 +9968,8 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@storybook/blocks@7.4.6': - resolution: {integrity: sha512-HxBSAeOiTZW2jbHQlo1upRWFgoMsaAyKijUFf5MwwMNIesXCuuTGZDJ3xTABwAVLK2qC9Ektfbo0CZCiPVuDRQ==} + '@storybook/blocks@7.4.0': + resolution: {integrity: sha512-YQznNjJm+l32fCfPxrZso9+MbcyG0pWZSpx3RKI1+pxDMsAs4mbXsIw4//jKfjoDP/6/Cz/FJcSx8LT7i4BJ2w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -9016,15 +9986,25 @@ packages: react-dom: optional: true - '@storybook/builder-manager@7.6.21': - resolution: {integrity: sha512-j6N/OiwUGHzvDSpWKlrjuR8Fp3unEAhowgtKpc8fV3Qw0xi5lEmJc4yu0R5cIGkOsSoA5Oe6nLGhjRjvddioQA==} + '@storybook/builder-manager@7.6.10': + resolution: {integrity: sha512-f+YrjZwohGzvfDtH8BHzqM3xW0p4vjjg9u7uzRorqUiNIAAKHpfNrZ/WvwPlPYmrpAHt4xX/nXRJae4rFSygPw==} - '@storybook/builder-vite@8.6.15': - resolution: {integrity: sha512-9Y05/ndZE6/eI7ZIUCD/QtH2htRIUs9j1gxE6oW0zRo9TJO1iqxfLNwgzd59KEkId7gdZxPei0l+LGTUGXYKRg==} + '@storybook/builder-vite@8.6.14': + resolution: {integrity: sha512-ajWYhy32ksBWxwWHrjwZzyC0Ii5ZTeu5lsqA95Q/EQBB0P5qWlHWGM3AVyv82Mz/ND03ebGy123uVwgf6olnYQ==} peerDependencies: - storybook: ^8.6.15 + storybook: ^8.6.14 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + '@storybook/builder-webpack4@6.3.7': + resolution: {integrity: sha512-M5envblMzAUrNqP1+ouKiL8iSIW/90+kBRU2QeWlZoZl1ib+fiFoKk06cgbaC70Bx1lU8nOnI/VBvB5pLhXLaw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@storybook/builder-webpack4@6.5.16': resolution: {integrity: sha512-YqDIrVNsUo8r9xc6AxsYDLxVYtMgl5Bxk+8/h1adsOko+jAFhdg6hOcAVxEmoSI0TMASOOVMFlT2hr23ppN2rQ==} peerDependencies: @@ -9035,6 +10015,16 @@ packages: typescript: optional: true + '@storybook/builder-webpack4@6.5.9': + resolution: {integrity: sha512-YOeA4++9uRZ8Hog1wC60yjaxBOiI1FRQNtax7b9E7g+kP8UlSCPCGcv4gls9hFmzbzTOPfQTWnToA9Oa6jzRVw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@storybook/builder-webpack5@6.5.16': resolution: {integrity: sha512-kh8Sofm1sbijaHDWtm0sXabqACHVFjikU/fIkkW786kpjoPIPIec1a+hrLgDsZxMU3I7XapSOaCFzWt6FjVXjg==} peerDependencies: @@ -9045,6 +10035,16 @@ packages: typescript: optional: true + '@storybook/builder-webpack5@6.5.9': + resolution: {integrity: sha512-NUVZ4Qci6HWPuoH8U/zQkdBO5soGgu7QYrGC/LWU0tRfmmZxkjr7IUU14ppDpGPYgx3r7jkaQI1J/E1YEmSCWQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@storybook/builder-webpack5@7.4.0': resolution: {integrity: sha512-CYeXppqGACzDUpLCFvWvwD7IjN7VNi7+nwQ1uRNgW2NgBMOIldZe+gcTXcc0BuHyIitU5/vvquYM0qjis05LYw==} peerDependencies: @@ -9053,15 +10053,18 @@ packages: typescript: optional: true - '@storybook/builder-webpack5@8.6.15': - resolution: {integrity: sha512-4UZAm0t8CxVMUjkTzLaBoCKG3Bqg+lEKxrPrTGRddLlVCB8olv23C3/MW1aQJfzde9ze6ofllkn97r1tVG6ipQ==} + '@storybook/builder-webpack5@8.6.14': + resolution: {integrity: sha512-YZYAqc6NBKoMTKZpjxnkMch6zDtMkBZdS/yaji1+wJX2QPFBwTbSh7SpeBxDp1S11gXSAJ4f1btUWeqSqo8nJA==} peerDependencies: - storybook: ^8.6.15 + storybook: ^8.6.14 typescript: '*' peerDependenciesMeta: typescript: optional: true + '@storybook/channel-postmessage@6.3.7': + resolution: {integrity: sha512-Cmw8HRkeSF1yUFLfEIUIkUICyCXX8x5Ol/5QPbiW9HPE2hbZtYROCcg4bmWqdq59N0Tp9FQNSn+9ZygPgqQtNw==} + '@storybook/channel-postmessage@6.5.16': resolution: {integrity: sha512-fZZSN29dsUArWOx7e7lTdMA9+7zijVwCwbvi2Fo4fqhRLh1DsTb/VXfz1FKMCWAjNlcX7QQvV25tnxbqsD6lyw==} @@ -9074,6 +10077,9 @@ packages: '@storybook/channel-websocket@6.5.9': resolution: {integrity: sha512-xtHvSNwuOhkgALwVshKWsoFhDmuvcosdYfxcfFGEiYKXIu46tRS5ZXmpmgEC/0JAVkVoFj5nL8bV7IY5np6oaA==} + '@storybook/channels@6.3.7': + resolution: {integrity: sha512-aErXO+SRO8MPp2wOkT2n9d0fby+8yM35tq1tI633B4eQsM74EykbXPv7EamrYPqp1AI4BdiloyEpr0hmr2zlvg==} + '@storybook/channels@6.5.16': resolution: {integrity: sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==} @@ -9083,20 +10089,23 @@ packages: '@storybook/channels@7.4.0': resolution: {integrity: sha512-/1CU0s3npFumzVHLGeubSyPs21O3jNqtSppOjSB9iDTyV2GtQrjh5ntVwebfKpCkUSitx3x7TkCb9dylpEZ8+w==} - '@storybook/channels@7.4.6': - resolution: {integrity: sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==} - - '@storybook/channels@7.6.21': - resolution: {integrity: sha512-899XbW60IXIkWDo90bS5ovjxnFUDgD8B2ZwUEJUmuhIXqQeSg2iJ8uYI699Csei+DoDn5gZYJD+BHbSUuc4g+Q==} + '@storybook/channels@7.6.10': + resolution: {integrity: sha512-ITCLhFuDBKgxetuKnWwYqMUWlU7zsfH3gEKZltTb+9/2OAWR7ez0iqU7H6bXP1ridm0DCKkt2UMWj2mmr9iQqg==} - '@storybook/cli@7.6.21': - resolution: {integrity: sha512-8SCDEeoBm+RAQDiH4HOjsQFJhReI7EJRylXVtllVhmq6TpxyJNZz8CSWEIU0zFhznIHktevriVzRR/qAKdUXng==} + '@storybook/cli@7.6.10': + resolution: {integrity: sha512-pK1MEseMm73OMO2OVoSz79QWX8ymxgIGM8IeZTCo9gImiVRChMNDFYcv8yPWkjuyesY8c15CoO48aR7pdA1OjQ==} hasBin: true - '@storybook/cli@8.6.15': - resolution: {integrity: sha512-E75TIa7dnCVLyfhJZfFaUuhTwJzbDIlHtQjURN2fcJgVsDNUEerrB+O9v5KJQFSE6HRZg7UpBjYtq7T2c8fcBw==} + '@storybook/cli@8.6.14': + resolution: {integrity: sha512-mnPlQ5ynwuC5iOFcSfjKcz0jvtJqKHZDKGzDRmNh82m60jRHa7Llex+1kzRtzUDnZFO7ZpZkH8u/GHzpEoKy7Q==} hasBin: true + '@storybook/client-api@6.3.7': + resolution: {integrity: sha512-8wOH19cMIwIIYhZy5O5Wl8JT1QOL5kNuamp9GPmg5ff4DtnG+/uUslskRvsnKyjPvl+WbIlZtBVWBiawVdd/yQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + '@storybook/client-api@6.5.16': resolution: {integrity: sha512-i3UwkzzUFw8I+E6fOcgB5sc4oU2fhvaKnqC1mpd9IYGJ9JN9MnGIaVl3Ko28DtFItu/QabC9JsLIJVripFLktQ==} peerDependencies: @@ -9109,6 +10118,9 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/client-logger@6.3.7': + resolution: {integrity: sha512-BQRErHE3nIEuUJN/3S3dO1LzxAknOgrFeZLd4UVcH/fvjtS1F4EkhcbH+jNyUWvcWGv66PZYN0oFPEn/g3Savg==} + '@storybook/client-logger@6.5.16': resolution: {integrity: sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==} @@ -9118,17 +10130,20 @@ packages: '@storybook/client-logger@7.4.0': resolution: {integrity: sha512-4pBnf7+df1wXEVcF1civqxbrtccGGHQkfWQkJo49s53RXvF7SRTcif6XTx0V3cQV0v7I1C5mmLm0LNlmjPRP1Q==} - '@storybook/client-logger@7.4.6': - resolution: {integrity: sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==} + '@storybook/client-logger@7.6.10': + resolution: {integrity: sha512-U7bbpu21ntgePMz/mKM18qvCSWCUGCUlYru8mgVlXLCKqFqfTeP887+CsPEQf29aoE3cLgDrxqbRJ1wxX9kL9A==} - '@storybook/client-logger@7.6.21': - resolution: {integrity: sha512-NWh32K+N6htmmPfqSPOlA6gy80vFQZLnusK8+/7Hp0sSG//OV5ahlnlSveLUOub2e97CU5EvYUL1xNmSuqk2jQ==} + '@storybook/codemod@7.6.10': + resolution: {integrity: sha512-pzFR0nocBb94vN9QCJLC3C3dP734ZigqyPmd0ZCDj9Xce2ytfHK3v1lKB6TZWzKAZT8zztauECYxrbo4LVuagw==} - '@storybook/codemod@7.6.21': - resolution: {integrity: sha512-AFkOB+2vSRXbjUdTI5rsvL8YdqVcmKgmJB3QgwbmLp804Qhqn/WcbOkPOT6zqdcgDTLGaFUIFigvjc7cly3fkw==} + '@storybook/codemod@8.6.14': + resolution: {integrity: sha512-lRzE+l4xwKDLKimSk6NIx0dRAE1eFjQqV79gt/RidkJZgjSzpiJVuiGI9y+ALVvkrgjfA+2K0+KdPEmPIhbwxg==} - '@storybook/codemod@8.6.15': - resolution: {integrity: sha512-3U6VQ3z/v9+ge5JnXPR36nR/SdE5i4V29VLwX0WJFLkEJXUbz4sW/tc27Ev9ufW4VitKQ2mmQ1qe228+SrmZ2A==} + '@storybook/components@6.3.7': + resolution: {integrity: sha512-O7LIg9Z18G0AJqXX7Shcj0uHqwXlSA5UkHgaz9A7mqqqJNl6m6FwwTWcxR1acUfYVNkO+czgpqZHNrOF6rky1A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 '@storybook/components@6.5.16': resolution: {integrity: sha512-LzBOFJKITLtDcbW9jXl0/PaG+4xAz25PK8JxPZpIALbmOpYWOAPcO6V9C2heX6e6NgWFMUxjplkULEk9RCQMNA==} @@ -9142,17 +10157,28 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@storybook/components@7.4.6': - resolution: {integrity: sha512-nIRBhewAgrJJVafyCzuaLx1l+YOfvvD5dOZ0JxZsxJsefOdw1jFpUqUZ5fIpQ2moyvrR0mAUFw378rBfMdHz5Q==} + '@storybook/components@7.4.0': + resolution: {integrity: sha512-GGnQrI4NXwri/PqNjhO1vNv4tC7RBjY87ce9WHBq1ueat3kBakdqV97NzScoldXarkkKK6grBqmhw9jE5PfzhQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@storybook/components@8.6.15': - resolution: {integrity: sha512-+9GVKXPEW8Kl9zvNSTm9+VrJtx/puMZiO7gxCML63nK4aTWJXHQr4t9YUoGammSBM3AV1JglsKm6dBgJEeCoiA==} + '@storybook/components@8.6.14': + resolution: {integrity: sha512-HNR2mC5I4Z5ek8kTrVZlIY/B8gJGs5b3XdZPBPBopTIN6U/YHXiDyOjY3JlaS4fSG1fVhp/Qp1TpMn1w/9m1pw==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/core-client@6.3.7': + resolution: {integrity: sha512-M/4A65yV+Y4lsCQXX4BtQO/i3BcMPrU5FkDG8qJd3dkcx2fUlFvGWqQPkcTZE+MPVvMEGl/AsEZSADzah9+dAg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + typescript: '*' + webpack: '*' + peerDependenciesMeta: + typescript: + optional: true + '@storybook/core-client@6.5.16': resolution: {integrity: sha512-14IRaDrVtKrQ+gNWC0wPwkCNfkZOKghYV/swCUnQX3rP99defsZK8Hc7xHIYoAiOP5+sc3sweRAxgmFiJeQ1Ig==} peerDependencies: @@ -9178,8 +10204,15 @@ packages: '@storybook/core-client@7.4.0': resolution: {integrity: sha512-AhysJS2HnydB8Jc+BMVzK5VLHa1liJjxroNsd+ZTgGUhD7R8wvozrswQgY4MLFtcaLwN/wDWlK2YavSBqmc94Q==} - '@storybook/core-client@7.4.6': - resolution: {integrity: sha512-tfgxAHeCvMcs6DsVgtb4hQSDaCHeAPJOsoyhb47eDQfk4OmxzriM0qWucJV5DePSMi+KutX/rN2u0JxfOuN68g==} + '@storybook/core-common@6.3.7': + resolution: {integrity: sha512-exLoqRPPsAefwyjbsQBLNFrlPCcv69Q/pclqmIm7FqAPR7f3CKP1rqsHY0PnemizTL/+cLX5S7mY90gI6wpNug==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true '@storybook/core-common@6.5.16': resolution: {integrity: sha512-2qtnKP3TTOzt2cp6LXKRTh7XrI9z5VanMnMTgeoFcA5ebnndD4V6BExQUdYPClE/QooLx6blUWNgS9dFEpjSqQ==} @@ -9204,11 +10237,11 @@ packages: '@storybook/core-common@7.4.0': resolution: {integrity: sha512-QKrBL46ZFdfTjlZE3f7b59Q5+frOHWIJ64sC9BZ2PHkZkGjFeYRDdJJ6EHLYBb+nToynl33dYN1GQz+hQn2vww==} - '@storybook/core-common@7.4.6': - resolution: {integrity: sha512-05MJFmOM86qvTLtgDskokIFz9txe0Lbhq4L3by1FtF0GwgH+p+W6I94KI7c6ANER+kVZkXQZhiRzwBFnVTW+Cg==} + '@storybook/core-common@7.6.10': + resolution: {integrity: sha512-K3YWqjCKMnpvYsWNjOciwTH6zWbuuZzmOiipziZaVJ+sB1XYmH52Y3WGEm07TZI8AYK9DRgwA13dR/7W0nw72Q==} - '@storybook/core-common@7.6.21': - resolution: {integrity: sha512-3xeEAsEwPIEdnWiFJcxD3ObRrF7Vy1q/TKIExbk6p8Flx+XPXQKRZd/T+m5/8/zLYevasvY6hdVN91Fhcw9S2Q==} + '@storybook/core-events@6.3.7': + resolution: {integrity: sha512-l5Hlhe+C/dqxjobemZ6DWBhTOhQoFF3F1Y4kjFGE7pGZl/mas4M72I5I/FUcYCmbk2fbLfZX8hzKkUqS1hdyLA==} '@storybook/core-events@6.5.16': resolution: {integrity: sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==} @@ -9219,11 +10252,24 @@ packages: '@storybook/core-events@7.4.0': resolution: {integrity: sha512-JavEo4dw7TQdF5pSKjk4RtqLgsG2R/eWRI8vZ3ANKa0ploGAnQR/eMTfSxf6TUH3ElBWLJhi+lvUCkKXPQD+dw==} - '@storybook/core-events@7.4.6': - resolution: {integrity: sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==} + '@storybook/core-events@7.6.10': + resolution: {integrity: sha512-yccDH67KoROrdZbRKwxgTswFMAco5nlCyxszCDASCLygGSV2Q2e+YuywrhchQl3U6joiWi3Ps1qWu56NeNafag==} - '@storybook/core-events@7.6.21': - resolution: {integrity: sha512-Ez6bhYuXbEkHVCmnNB/oqN0sQwphsmtPmjYdPMlTtEpVEIXHAw2qOlaDiGakoDHkgrTaxiYvdJrPH0UcEJcWDQ==} + '@storybook/core-server@6.3.7': + resolution: {integrity: sha512-m5OPD/rmZA7KFewkXzXD46/i1ngUoFO4LWOiAY/wR6RQGjYXGMhSa5UYFF6MNwSbiGS5YieHkR5crB1HP47AhQ==} + peerDependencies: + '@storybook/builder-webpack5': 6.3.7 + '@storybook/manager-webpack5': 6.3.7 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + typescript: '*' + peerDependenciesMeta: + '@storybook/builder-webpack5': + optional: true + '@storybook/manager-webpack5': + optional: true + typescript: + optional: true '@storybook/core-server@6.5.16': resolution: {integrity: sha512-/3NPfmNyply395Dm0zaVZ8P9aruwO+tPx4D6/jpw8aqrRSwvAMndPMpoMCm0NXcpSm5rdX+Je4S3JW6JcggFkA==} @@ -9241,16 +10287,45 @@ packages: typescript: optional: true - '@storybook/core-server@7.6.21': - resolution: {integrity: sha512-1Z92JjUumCFrLNJY7ZNH9bRXyNggtFvfrhVsHjIxvOJcXvI9cfXJQtN1Pcx2Gc7tQNLQfHp6CifmDCmAw3sbXA==} + '@storybook/core-server@6.5.9': + resolution: {integrity: sha512-YeePGUrd5fQPvGzMhowh124KrcZURFpFXg1VB0Op3ESqCIsInoMZeObci4Gc+binMXC7vcv7aw3EwSLU37qJzQ==} + peerDependencies: + '@storybook/builder-webpack5': '*' + '@storybook/manager-webpack5': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + typescript: '*' + peerDependenciesMeta: + '@storybook/builder-webpack5': + optional: true + '@storybook/manager-webpack5': + optional: true + typescript: + optional: true + + '@storybook/core-server@7.6.10': + resolution: {integrity: sha512-2icnqJkn3vwq0eJPP0rNaHd7IOvxYf5q4lSVl2AWTxo/Ae19KhokI6j/2vvS2XQJMGQszwshlIwrZUNsj5p0yw==} '@storybook/core-webpack@7.4.0': resolution: {integrity: sha512-1zxzJjRbkcjl++OjYBVTDi0V/yO22Kz3ciPASTvXwrg0fXTXgxwxhJBmgOI4r17oY0kOWnJ1RDsmd95NLGAbGw==} - '@storybook/core-webpack@8.6.15': - resolution: {integrity: sha512-DZUxsF9KwzUGYzXg8gQ7xnAnLnulh8wkaxEqkVt7xMJ95FLZYCI8o+05tJ3tNUYzjPMTzoAUPL2OD9bb6HcSzw==} + '@storybook/core-webpack@8.6.14': + resolution: {integrity: sha512-iG7r8osNKabSGBbuJuSeMWKbU+ilt5PvzTYkClcYaagla/DliXkXvfywA6jOugVk/Cpx+c6tVKlPfjLcaQHwmw==} + peerDependencies: + storybook: ^8.6.14 + + '@storybook/core@6.3.7': + resolution: {integrity: sha512-YTVLPXqgyBg7TALNxQ+cd+GtCm/NFjxr/qQ1mss1T9GCMR0IjE0d0trgOVHHLAO8jCVlK8DeuqZCCgZFTXulRw==} peerDependencies: - storybook: ^8.6.15 + '@storybook/builder-webpack5': 6.3.7 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + typescript: '*' + peerDependenciesMeta: + '@storybook/builder-webpack5': + optional: true + typescript: + optional: true '@storybook/core@6.5.16': resolution: {integrity: sha512-CEF3QFTsm/VMnMKtRNr4rRdLeIkIG0g1t26WcmxTdSThNPBd8CsWzQJ7Jqu7CKiut+MU4A1LMOwbwCE5F2gmyA==} @@ -9269,26 +10344,49 @@ packages: typescript: optional: true - '@storybook/core@8.6.15': - resolution: {integrity: sha512-VFpKcphNurJpSC4fpUfKL3GTXVoL53oytghGR30QIw5jKWwaT50HVbTyb41BLOUuZjmMhUQA8weiQEew6RX0gw==} + '@storybook/core@6.5.9': + resolution: {integrity: sha512-Mt3TTQnjQt2/pa60A+bqDsAOrYpohapdtt4DDZEbS8h0V6u11KyYYh3w7FCySlL+sPEyogj63l5Ec76Jah3l2w==} + peerDependencies: + '@storybook/builder-webpack5': '*' + '@storybook/manager-webpack5': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + typescript: '*' + webpack: '*' + peerDependenciesMeta: + '@storybook/builder-webpack5': + optional: true + '@storybook/manager-webpack5': + optional: true + typescript: + optional: true + + '@storybook/core@8.6.13': + resolution: {integrity: sha512-KGoCEDdc7L2eZMvuedlf/uX8oGFlNsWMsYrzvzriKl8KBwlfDixPxC6R668LPi54NwCY8d3HxGOMOTf7Y0jyVQ==} + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + + '@storybook/core@8.6.14': + resolution: {integrity: sha512-1P/w4FSNRqP8j3JQBOi3yGt8PVOgSRbP66Ok520T78eJBeqx9ukCfl912PQZ7SPbW3TIunBwLXMZOjZwBB/JmA==} peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: prettier: optional: true - '@storybook/csf-plugin@7.4.6': - resolution: {integrity: sha512-yi7Qa4NSqKOyiJTWCxlB0ih2ijXq6oY5qZKW6MuMMBP14xJNRGLbH5KabpfXgN2T7YECcOWG1uWaGj2veJb1KA==} + '@storybook/csf-plugin@7.4.0': + resolution: {integrity: sha512-X1L3l/dpz2UYjCEQlFLkW7w1A13pmzDZpJ0lotkV79PALlakMXBeoX3I2E0VMjJATV8wC9RSj56COBAs6HsPeg==} '@storybook/csf-plugin@8.6.14': resolution: {integrity: sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==} peerDependencies: storybook: ^8.6.14 - '@storybook/csf-plugin@8.6.15': - resolution: {integrity: sha512-ZLz/mtOoE1Jj2lE4pK3U7MmYrv5+lot3mGtwxGb832tcABMc97j9O+reCVxZYc7DeFbBuuEdMT9rBL/O3kXYmw==} - peerDependencies: - storybook: ^8.6.15 + '@storybook/csf-tools@6.3.7': + resolution: {integrity: sha512-A7yGsrYwh+vwVpmG8dHpEimX021RbZd9VzoREcILH56u8atssdh/rseljyWlRes3Sr4QgtLvDB7ggoJ+XDZH7w==} '@storybook/csf-tools@6.5.16': resolution: {integrity: sha512-+WD4sH/OwAfXZX3IN6/LOZ9D9iGEFcN+Vvgv9wOsLRgsAZ10DG/NK6c1unXKDM/ogJtJYccNI8Hd+qNE/GFV6A==} @@ -9298,11 +10396,19 @@ packages: '@storybook/mdx2-csf': optional: true - '@storybook/csf-tools@7.4.6': - resolution: {integrity: sha512-ocKpcIUtTBy6hlLY34RUFQyX403cWpB2gGfqvkHbpGe2BQj7EyV0zpWnjsfVxvw+M9OWlCdxHWDOPUgXM33ELw==} + '@storybook/csf-tools@6.5.9': + resolution: {integrity: sha512-RAdhsO2XmEDyWy0qNQvdKMLeIZAuyfD+tYlUwBHRU6DbByDucvwgMOGy5dF97YNJFmyo93EUYJzXjUrJs3U1LQ==} + peerDependencies: + '@storybook/mdx2-csf': ^0.0.3 + peerDependenciesMeta: + '@storybook/mdx2-csf': + optional: true + + '@storybook/csf-tools@7.4.0': + resolution: {integrity: sha512-bKyOmWPyvT50Neq2wCRr2PmVGLVVm6pOw8WL5t5jueD8sRRzo9QdfhEkqmuSyqdsBdt3SiJKL5oA6dqY5Vl9ww==} - '@storybook/csf-tools@7.6.21': - resolution: {integrity: sha512-DBdwDo4nOsXF/QV6Ru08xgb54M1o9A0E7D8VW0+PcFK+Y8naq8+I47PkijHloTxgZxUyX8OvboaLBMTGUV275w==} + '@storybook/csf-tools@7.6.10': + resolution: {integrity: sha512-TnDNAwIALcN6SA4l00Cb67G02XMOrYU38bIpFJk5VMDX2dvgPjUtJNBuLmEbybGcOt7nPyyFIHzKcY5FCVGoWA==} '@storybook/csf@0.0.1': resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==} @@ -9319,12 +10425,12 @@ packages: '@storybook/docs-tools@6.5.16': resolution: {integrity: sha512-o+rAWPRGifjBF5xZzTKOqnHN3XQWkl0QFJYVDIiJYJrVll7ExCkpEq/PahOGzIBBV+tpMstJgmKM3lr/lu/jmg==} + '@storybook/docs-tools@6.5.9': + resolution: {integrity: sha512-UoTaXLvec8x+q+4oYIk/t8DBju9C3ZTGklqOxDIt+0kS3TFAqEgI3JhKXqQOXgN5zDcvLVSxi8dbVAeSxk2ktA==} + '@storybook/docs-tools@7.4.0': resolution: {integrity: sha512-DzXmt4JorAOePoS+sjQznf8jLPI9D5mdB1eSXjfvmGBQyyehKTZv5+TXuxYvT3iPN4rW4OPrIrQCSIrbULFdwA==} - '@storybook/docs-tools@7.4.6': - resolution: {integrity: sha512-nZj1L/8WwKWWJ41FW4MaKGajZUtrhnr9UwflRCkQJaWhAKmDfOb5M5TqI93uCOULpFPOm5wpoMBz2IHInQ2Lrg==} - '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} @@ -9340,22 +10446,27 @@ packages: peerDependencies: storybook: ^8.6.14 - '@storybook/instrumenter@8.6.15': - resolution: {integrity: sha512-TvHR/+yyIAOp/1bLulFai2kkhIBtAlBw7J6Jd9DKyInoGhTWNE1G1Y61jD5GWXX29AlwaHfzGUaX5NL1K+FJpg==} - peerDependencies: - storybook: ^8.6.15 - - '@storybook/manager-api@7.4.6': - resolution: {integrity: sha512-inrm3DIbCp8wjXSN/wK6e6i2ysQ/IEmtC7IN0OJ7vdrp+USCooPT448SQTUmVctUGCFmOU3fxXByq8g77oIi7w==} + '@storybook/manager-api@7.4.0': + resolution: {integrity: sha512-sBfkkt0eZGTozeKrbzMtWLEOQrgqdk24OUJlkc2IDaucR1CBNjoCMjNeYg7cLDw0rXE8W3W3AdWtJnfsUbLMAQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@storybook/manager-api@8.6.15': - resolution: {integrity: sha512-ZOFtH821vFcwzECbFYFTKtSVO96Cvwwg45dMh3M/9bZIdN7klsloX7YNKw8OKvwE6XLFLsi2OvsNNcmTW6g88w==} + '@storybook/manager-api@8.6.14': + resolution: {integrity: sha512-ez0Zihuy17udLbfHZQXkGqwtep0mSGgHcNzGN7iZrMP1m+VmNo+7aGCJJdvXi7+iU3yq8weXSQFWg5DqWgLS7g==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/manager-webpack4@6.3.7': + resolution: {integrity: sha512-cwUdO3oklEtx6y+ZOl2zHvflICK85emiXBQGgRcCsnwWQRBZOMh+tCgOSZj4jmISVpT52RtT9woG4jKe15KBig==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@storybook/manager-webpack4@6.5.16': resolution: {integrity: sha512-5VJZwmQU6AgdsBPsYdu886UKBHQ9SJEnFMaeUxKEclXk+iRsmbzlL4GHKyVd6oGX/ZaecZtcHPR6xrzmA4Ziew==} peerDependencies: @@ -9366,6 +10477,16 @@ packages: typescript: optional: true + '@storybook/manager-webpack4@6.5.9': + resolution: {integrity: sha512-49LZlHqWc7zj9tQfOOANixPYmLxqWTTZceA6DSXnKd9xDiO2Gl23Y+l/CSPXNZGDB8QFAwpimwqyKJj/NLH45A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@storybook/manager-webpack5@6.5.9': resolution: {integrity: sha512-J1GamphSsaZLNBEhn1awgxzOS8KfvzrHtVlAm2VHwW7j1E1DItROFJhGCgduYYuBiN9eqm+KIYrxcr6cRuoolQ==} peerDependencies: @@ -9376,8 +10497,8 @@ packages: typescript: optional: true - '@storybook/manager@7.6.21': - resolution: {integrity: sha512-kwtG7HfxYQIZeGwDg7xFkORhNf0PH+4jRLf/9M6amR537Hctay+Vlv2MGHO6LFzw6IwT4qCtO8xNgzcV9TxZtg==} + '@storybook/manager@7.6.10': + resolution: {integrity: sha512-Co3sLCbNYY6O4iH2ggmRDLCPWLj03JE5s/DOG8OVoXc6vBwTc/Qgiyrsxxp6BHQnPpM0mxL6aKAxE3UjsW/Nog==} '@storybook/mdx1-csf@0.0.1': resolution: {integrity: sha512-4biZIWWzoWlCarMZmTpqcJNgo/RBesYZwGFbQeXiGYsswuvfWARZnW9RE9aUEMZ4XPn7B1N3EKkWcdcWe/K2tg==} @@ -9385,6 +10506,9 @@ packages: '@storybook/mdx2-csf@1.1.0': resolution: {integrity: sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==} + '@storybook/node-logger@6.3.7': + resolution: {integrity: sha512-YXHCblruRe6HcNefDOpuXJoaybHnnSryIVP9Z+gDv6OgLAMkyxccTIaQL9dbc/eI4ywgzAz4kD8t1RfVwXNVXw==} + '@storybook/node-logger@6.5.16': resolution: {integrity: sha512-YjhBKrclQtjhqFNSO+BZK+RXOx6EQypAELJKoLFaawg331e8VUfvUuRCNB3fcEWp8G9oH13PQQte0OTjLyyOYg==} @@ -9394,17 +10518,17 @@ packages: '@storybook/node-logger@7.4.0': resolution: {integrity: sha512-tWSWkYyAvp6SxjIBaTklg29avzv/3Lv4c0dOG2o5tz79PyZkq9v6sQtwLLoI8EJA9Mo8Z08vaJp8NZyDQ9RCuA==} - '@storybook/node-logger@7.4.6': - resolution: {integrity: sha512-djZb310Q27GviDug1XBv0jOEDLCiwr4hhDE0aifCEKZpfNCi/EaP31nbWimFzZwxu4hE/YAPWExzScruR1zw9Q==} - - '@storybook/node-logger@7.6.21': - resolution: {integrity: sha512-X4LwhWQ0KuLU7O2aEi7U9hhg+klnuvkXqhXIqAQCZEKogUxz7ywek+2h+7QqdgHFi6V7VYNtiMmMJKllzhg+OA==} + '@storybook/node-logger@7.6.10': + resolution: {integrity: sha512-ZBuqrv4bjJzKXyfRGFkVIi+z6ekn6rOPoQao4KmsfLNQAUUsEdR8Baw/zMnnU417zw5dSEaZdpuwx75SCQAeOA==} '@storybook/postinstall@6.5.16': resolution: {integrity: sha512-08K2q+qN6pqyPW7PHLCZ5G5Xa6Wosd6t0F16PQ4abX2ItlJLabVoJN5mZ0gm/aeLTjD8QYr8IDvacu4eXh0SVA==} - '@storybook/postinstall@7.4.6': - resolution: {integrity: sha512-TqI5BucPAGRWrkh55BYiG2/gHLFtC0In4cuu0GsUzB/1jc4i51npLRorCwhmT7r7YliGl5F7JaP0Bni/qHN3Lg==} + '@storybook/postinstall@6.5.9': + resolution: {integrity: sha512-KQBupK+FMRrtSt8IL0MzCZ/w9qbd25Yxxp/+ajfWgZTRgsWgVFOqcDyMhS16eNbBp5qKIBCBDXfEF+/mK8HwQQ==} + + '@storybook/postinstall@7.4.0': + resolution: {integrity: sha512-ZVBZggqkuj7ysfuHSCd/J7ovWV06zY9uWf+VU+Zw7ZeojDT8QHFrCurPsN7D9679j9vRU1/kSzqvAiStALS33g==} '@storybook/preset-react-webpack@7.4.0': resolution: {integrity: sha512-9iZ9lvhRUYtxXmJMqR7txNyatrHryqo6FSKzfpUzmcCySn3d7mu9I6LEPxEir43TkPnBio3W4EsbvtIhjJ5ekA==} @@ -9420,13 +10544,13 @@ packages: typescript: optional: true - '@storybook/preset-react-webpack@8.6.15': - resolution: {integrity: sha512-AY2o3otXHjEr1WIPk+8PelABkk5sBJhPu13BVSWajMOY8W8fraN9CQxrsMFxlG6vTFQg1cDf9kFlCKFHERPiHg==} + '@storybook/preset-react-webpack@8.6.14': + resolution: {integrity: sha512-M7Q6ErNx7N2hQorTz0OLa3YV8nc8OcvkDlCxqqnkHPGQNEIWEpeDvq3wn2OvZlrHDpchyuiquGXZ8aztVtBP2g==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.15 + storybook: ^8.6.14 typescript: '*' peerDependenciesMeta: typescript: @@ -9435,14 +10559,11 @@ packages: '@storybook/preview-api@7.4.0': resolution: {integrity: sha512-ndXO0Nx+eE7ktVE4EqHpQZ0guX7yYBdruDdJ7B739C0+OoPWsJN7jAzUqq0NXaBcYrdaU5gTy+KnWJUt8R+OyA==} - '@storybook/preview-api@7.4.6': - resolution: {integrity: sha512-byUS/Opt3ytWD4cWz3sNEKw5Yks8MkQgRN+GDSyIomaEAQkLAM0rchPC0MYjwCeUSecV7IIQweNX5RbV4a34BA==} - - '@storybook/preview-api@7.6.21': - resolution: {integrity: sha512-L5e6VjphfsnJk/kkOIRJzDaTfX5sNpiusocqEbHKTM7c9ZDAuaLPZKluP87AJ0u16UdWMuCu6YaQ6eAakDa9gg==} + '@storybook/preview-api@7.6.10': + resolution: {integrity: sha512-5A3etoIwZCx05yuv3KSTv1wynN4SR4rrzaIs/CTBp3BC4q1RBL+Or/tClk0IJPXQMlx/4Y134GtNIBbkiDofpw==} - '@storybook/preview-api@8.6.15': - resolution: {integrity: sha512-oqsp8f7QekB9RzpDqOXZQcPPRXXd/mTsnZSdAAQB/pBVqUpC9h/y5hgovbYnJ6DWXcpODbMwH+wbJHZu5lvm+w==} + '@storybook/preview-api@8.6.14': + resolution: {integrity: sha512-2GhcCd4dNMrnD7eooEfvbfL4I83qAqEyO0CO7JQAmIO6Rxb9BsOLLI/GD5HkvQB73ArTJ+PT50rfaO820IExOQ==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 @@ -9461,6 +10582,12 @@ packages: '@storybook/preview@7.4.0': resolution: {integrity: sha512-R4LMTvUrVAbcUetRbAXpY3frkwD0eysqHrByiR73040+ngzDwtZOBAy0JfO3jw3WrWv2dn3kWlao5aEwVc9Exw==} + '@storybook/react-docgen-typescript-plugin@1.0.2-canary.253f8c1.0': + resolution: {integrity: sha512-mmoRG/rNzAiTbh+vGP8d57dfcR2aP+5/Ll03KKFyfy5FqWFm/Gh7u27ikx1I3LmVMI8n6jh5SdWMkMKon7/tDw==} + peerDependencies: + typescript: '>= 3.x' + webpack: '>= 4' + '@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0': resolution: {integrity: sha512-eVg3BxlOm2P+chijHBTByr90IZVUtgRW56qEOLX7xlww2NBuKrcavBlcmn+HH7GIUktquWkMPtvy6e0W0NgA5w==} peerDependencies: @@ -9479,12 +10606,6 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@storybook/react-dom-shim@7.4.6': - resolution: {integrity: sha512-DSq8l9FDocUF1ooVI+TF83pddj1LynE/Hv0/y8XZhc3IgJ/HkuOQuUmfz29ezgfAi9gFYUR8raTIBi3/xdoRmw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@storybook/react-dom-shim@8.6.14': resolution: {integrity: sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==} peerDependencies: @@ -9492,21 +10613,14 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta storybook: ^8.6.14 - '@storybook/react-dom-shim@8.6.15': - resolution: {integrity: sha512-m2trBmmd4iom1qwrp1F109zjRDc0cPaHYhDQxZR4Qqdz8pYevYJTlipDbH/K4NVB6Rn687RT29OoOPfJh6vkFA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.15 - - '@storybook/react-vite@8.6.15': - resolution: {integrity: sha512-9st+2NCemzzBwmindpDrRLEqYJmwwd2RnXMoj+Wt4Y1r4MGoRe1l837ciT2tmstaqekY2mVUSYd6879NzeeMYw==} + '@storybook/react-vite@8.6.14': + resolution: {integrity: sha512-FZU0xMPxa4/TO87FgcWwappOxLBHZV5HSRK5K+2bJD7rFJAoNorbHvB4Q1zvIAk7eCMjkr2GPCPHx9PRB9vJFg==} engines: {node: '>=18.0.0'} peerDependencies: - '@storybook/test': 8.6.15 + '@storybook/test': 8.6.14 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.15 + storybook: ^8.6.14 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: '@storybook/test': @@ -9526,18 +10640,33 @@ packages: typescript: optional: true - '@storybook/react-webpack5@8.6.15': - resolution: {integrity: sha512-YPAAZm7qfaRFMGBt3IhvvuBzuvBKcOUmGvcqZVZSlOtMKFzH1kweyloo6DGE648MxqN4WVcWpp6MnpivORM72w==} + '@storybook/react-webpack5@8.6.14': + resolution: {integrity: sha512-ka0q9tQBLruhO38sybP/MkZzejqAltce7HJTJ2KKbUYUlbvuG7m56tBX7DVC5JaImbsO3b8fqOrKH7gRt4KYrQ==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.15 + storybook: ^8.6.14 typescript: '>= 4.2.x' peerDependenciesMeta: typescript: optional: true + '@storybook/react@6.3.7': + resolution: {integrity: sha512-4S0iCQIzgi6PdAtV2sYw4uL57yIwbMInNFSux9CxPnVdlxOxCJ+U8IgTxD4tjkTvR4boYSEvEle46ns/bwg5iQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + '@babel/core': ^7.11.5 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + typescript: '*' + peerDependenciesMeta: + '@babel/core': + optional: true + typescript: + optional: true + '@storybook/react@6.5.16': resolution: {integrity: sha512-cBtNlOzf/MySpNLBK22lJ8wFU22HnfTB2xJyBk7W7Zi71Lm7Uxkhv1Pz8HdiQndJ0SlsAAQOWjQYsSZsGkZIaA==} engines: {node: '>=10.13.0'} @@ -9566,19 +10695,36 @@ packages: typescript: optional: true - '@storybook/react@7.4.0': - resolution: {integrity: sha512-QWsFw/twsNkcWI6brW06sugQQ5dV+fJm4IrEeI28cA4cBHK9G9HKOwCHoXDUWikzZx48XYMpNfs/WyIkuGmEqg==} - engines: {node: '>=16.0.0'} + '@storybook/react@6.5.9': + resolution: {integrity: sha512-Rp+QaTQAzxJhwuzJXVd49mnIBLQRlF8llTxPT2YoGHdrGkku/zl/HblQ6H2yzEf15367VyzaAv/BpLsO9Jlfxg==} + engines: {node: '>=10.13.0'} + hasBin: true peerDependencies: + '@babel/core': ^7.11.5 + '@storybook/builder-webpack4': '*' + '@storybook/builder-webpack5': '*' + '@storybook/manager-webpack4': '*' + '@storybook/manager-webpack5': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + require-from-string: ^2.0.2 typescript: '*' peerDependenciesMeta: + '@babel/core': + optional: true + '@storybook/builder-webpack4': + optional: true + '@storybook/builder-webpack5': + optional: true + '@storybook/manager-webpack4': + optional: true + '@storybook/manager-webpack5': + optional: true typescript: optional: true - '@storybook/react@7.4.6': - resolution: {integrity: sha512-w0dVo64baFFPTGpUOWFqkKsu6pQincoymegSNgqaBd5DxEyMDRiRoTWSJHMKE9BwgE8SyWhRkP1ak1mkccSOhQ==} + '@storybook/react@7.4.0': + resolution: {integrity: sha512-QWsFw/twsNkcWI6brW06sugQQ5dV+fJm4IrEeI28cA4cBHK9G9HKOwCHoXDUWikzZx48XYMpNfs/WyIkuGmEqg==} engines: {node: '>=16.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -9588,14 +10734,14 @@ packages: typescript: optional: true - '@storybook/react@8.6.15': - resolution: {integrity: sha512-hdnhlJg+YkpPMOw2hvK7+mhdxAbguA+TFTIAzVV9CeUYoHDIZAsgeKVhRmgZGN20NGjRN5ZcwkplAMJnF9v+6w==} + '@storybook/react@8.6.14': + resolution: {integrity: sha512-BOepx5bBFwl/CPI+F+LnmMmsG1wQYmrX/UQXgUbHQUU9Tj7E2ndTnNbpIuSLc8IrM03ru+DfwSg1Co3cxWtT+g==} engines: {node: '>=18.0.0'} peerDependencies: - '@storybook/test': 8.6.15 + '@storybook/test': 8.6.14 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.15 + storybook: ^8.6.14 typescript: '>= 4.2.x' peerDependenciesMeta: '@storybook/test': @@ -9603,6 +10749,12 @@ packages: typescript: optional: true + '@storybook/router@6.3.7': + resolution: {integrity: sha512-6tthN8op7H0NoYoE1SkQFJKC42pC4tGaoPn7kEql8XGeUJnxPtVFjrnywlTrRnKuxZKIvbilQBAwDml97XH23Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + '@storybook/router@6.5.16': resolution: {integrity: sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==} peerDependencies: @@ -9615,8 +10767,8 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@storybook/router@7.4.6': - resolution: {integrity: sha512-Vl1esrHkcHxDKqc+HY7+6JQpBPW3zYvGk0cQ2rxVMhWdLZTAz1hss9DqzN9tFnPyfn0a1Q77EpMySkUrvWKKNQ==} + '@storybook/router@7.4.0': + resolution: {integrity: sha512-IATdtFL5C3ryjNQSwaQfrmiOZiVFoVNMevMoBGDC++g0laSW40TGiNK6fUjUDBKuOgbuDt4Svfbl29k21GefEg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -9632,6 +10784,12 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/source-loader@6.5.9': + resolution: {integrity: sha512-H03nFKaP6borfWMTTa9igBA+Jm2ph+FoVJImWC/X+LAmLSJYYSXuqSgmiZ/DZvbjxS4k8vccE2HXogne1IvaRA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/store@6.5.16': resolution: {integrity: sha512-g+bVL5hmMq/9cM51K04e37OviUPHT0rHHrRm5wj/hrf18Kd9120b3sxdQ5Dc+HZ292yuME0n+cyrQPTYx9Epmw==} peerDependencies: @@ -9647,18 +10805,22 @@ packages: '@storybook/telemetry@6.5.16': resolution: {integrity: sha512-CWr5Uko1l9jJW88yTXsZTj/3GTabPvw0o7pDPOXPp8JRZiJTxv1JFaFCafhK9UzYbgcRuGfCC8kEWPZims7iKA==} - '@storybook/telemetry@7.6.21': - resolution: {integrity: sha512-bE68Ac6daL0JE9vjtHKwsM+uSXZ94QdoZL9RCTVvp0dI7htm7s7w7+Arm/aCxG9lnYTAjioWNRpHfeALVjsjIg==} + '@storybook/telemetry@6.5.9': + resolution: {integrity: sha512-JluoHCRhHAr4X0eUNVBSBi1JIBA92404Tu1TPdbN7x6gCZxHXXPTSUTAnspXp/21cTdMhY2x+kfZQ8fmlGK4MQ==} + + '@storybook/telemetry@7.6.10': + resolution: {integrity: sha512-p3mOSUtIyy2tF1z6pQXxNh1JzYFcAm97nUgkwLzF07GfEdVAPM+ftRSLFbD93zVvLEkmLTlsTiiKaDvOY/lQWg==} '@storybook/test@8.6.14': resolution: {integrity: sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw==} peerDependencies: storybook: ^8.6.14 - '@storybook/test@8.6.15': - resolution: {integrity: sha512-EwquDRUDVvWcZds3T2abmB5wSN/Vattal4YtZ6fpBlIUqONV4o/cOBX39cFfQSUCBrIXIjQ6RmapQCHK/PvBYw==} + '@storybook/theming@6.3.7': + resolution: {integrity: sha512-GXBdw18JJd5jLLcRonAZWvGGdwEXByxF1IFNDSOYCcpHWsMgTk4XoLjceu9MpXET04pVX51LbVPLCvMdggoohg==} peerDependencies: - storybook: ^8.6.15 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 '@storybook/theming@6.5.16': resolution: {integrity: sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==} @@ -9672,25 +10834,33 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@storybook/theming@7.4.6': - resolution: {integrity: sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==} + '@storybook/theming@7.4.0': + resolution: {integrity: sha512-eLjEf6G3cqlegfutF/iUrec9LrUjKDj7K4ZhGdACWrf7bQcODs99EK62e9/d8GNKr4b+QMSEuM6XNGaqdPnuzQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@storybook/theming@8.6.15': - resolution: {integrity: sha512-dAbL0XOekyT6XsF49R6Etj3WxQ/LpdJDIswUUeHgVJ6/yd2opZOGbPxnwA3zlmAh1c0tvpPyhSDXxSG79u8e4Q==} + '@storybook/theming@8.6.13': + resolution: {integrity: sha512-wedypFtCNtatWLAbqnVqChrI8fCsJbu6oAIt5M9zakiSqwI+w1WPZjgkTJ0/jzqAb2bQ+9kjgZu4eK+01NETSw==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + '@storybook/theming@8.6.14': + resolution: {integrity: sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 '@storybook/types@7.4.0': resolution: {integrity: sha512-XyzYkmeklywxvElPrIWLczi/PWtEdgTL6ToT3++FVxptsC2LZKS3Ue+sBcQ9xRZhkRemw4HQHwed5EW3dO8yUg==} - '@storybook/types@7.4.6': - resolution: {integrity: sha512-6QLXtMVsFZFpzPkdGWsu/iuc8na9dnS67AMOBKm5qCLPwtUJOYkwhMdFRSSeJthLRpzV7JLAL8Kwvl7MFP3QSw==} + '@storybook/types@7.6.10': + resolution: {integrity: sha512-hcS2HloJblaMpCAj2axgGV+53kgSRYPT0a1PG1IHsZaYQILfHSMmBqM8XzXXYTsgf9250kz3dqFX1l0n3EqMlQ==} - '@storybook/types@7.6.21': - resolution: {integrity: sha512-rJaBMxzXZOsJpqZGhebFJxOguZQBw5j+MVpqbFBA6vLZPx9wEbDBeVsPUxCxj+V1XkVcrNXf9qfThyJ8ETmLBw==} + '@storybook/ui@6.3.7': + resolution: {integrity: sha512-PBeRO8qtwAbtHvxUgNtz/ChUR6qnN+R37dMaIs3Y96jbks1fS2K9Mt7W5s1HnUbWbg2KsZMv9D4VYPBasY+Isw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 '@storybook/ui@6.5.16': resolution: {integrity: sha512-rHn/n12WM8BaXtZ3IApNZCiS+C4Oc5+Lkl4MoctX8V7QSml0SxZBB5hsJ/AiWkgbRxjQpa/L/Nt7/Qw0FjTH/A==} @@ -9704,104 +10874,113 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@swagger-api/apidom-ast@1.5.1': - resolution: {integrity: sha512-BtaUaWXE0zzosuy6d1UFZp8wQZlqXapolTNF5f/3kzzZPLdDDWZeFyvvGww3Jt0Bwcw5rzavqD/lrTZp3j2qTQ==} + '@swagger-api/apidom-ast@1.6.0': + resolution: {integrity: sha512-ez1KnBdAzoh5a6ijDXzu5nADkVZXlnL1RkLl8n2u2tjiNg9597xxmFdEHLVa31Vxr1yYj0WtYGLA5e2Kp0KNrQ==} + + '@swagger-api/apidom-core@1.6.0': + resolution: {integrity: sha512-gA1MVoXe19sjFLKGkWxp5VvSw3Tk0CSChfItJjFeFHpLSGrfm+LlXp37TmNSns53Ky0F7x7TB/5kAX5I/TO4xw==} + + '@swagger-api/apidom-error@1.6.0': + resolution: {integrity: sha512-xp/cQ1xQ/4Vd/hhQfONK7ea9oVc3JUXAYyfRzvDR0lxISly/SyD2jMcqXzHtrylBAnv7V2HSsbC1BWo7ZJDLSQ==} + + '@swagger-api/apidom-json-pointer@1.6.0': + resolution: {integrity: sha512-RO6P5Gt64AnthGXKeqIFjQCLVFbAJvLYAb67TkvRQ9US4lNixFtFsYJnhLCC4ymz4dTT1hacG0cmTRGcEHF9ig==} - '@swagger-api/apidom-core@1.5.1': - resolution: {integrity: sha512-vjP+HhbIN2D+Z8qsq57Ab2z0CpxCTD177Zd8mbUEKpOFYtc9qoizv6bAXTmhZGfVLxBsw+iGzFVH/z6DvuD3ag==} + '@swagger-api/apidom-ns-api-design-systems@1.6.0': + resolution: {integrity: sha512-EYJfQ4JYuUo2J4QiiLnA/8LmM1k7AQcf1XVE+NrIpZ1160GIzqE+W5uOXkhAOImkP2Cb7EZZdE2cFE/tMYxNvw==} - '@swagger-api/apidom-error@1.5.1': - resolution: {integrity: sha512-R0BSvVgKVNNxnC8S4uJVf4JwWCFNI1ktpLbML6UbzXBPquHfM0gjv+WQgKApMAYw809rtaVIF9ADoUtL/c6+uQ==} + '@swagger-api/apidom-ns-arazzo-1@1.6.0': + resolution: {integrity: sha512-5rF8PyBiIHh6NfC5Y0WypW11X6hQIWr88EKNOQbBuT/nnzAsOznrUCfQ99FYGLucwdOHaMIBn/b/n4ejGBto/A==} - '@swagger-api/apidom-json-pointer@1.5.1': - resolution: {integrity: sha512-EFJzHgHbs5AIPSRowuc02WjbQY5bbFvijQuFIkHSKCsPOQ8VX+h8xOe3dxRjgnCAJ33nk+VOYiaZTy48BK2bfw==} + '@swagger-api/apidom-ns-asyncapi-2@1.6.0': + resolution: {integrity: sha512-tOodfX+o7lonEAnSAxet7nCayW+EqtKPegT06WXt7Llq1LS9eYZ9YzXdFgIwCm8UzfEpZdVLqtxbdLX9vuUtSg==} - '@swagger-api/apidom-ns-api-design-systems@1.5.1': - resolution: {integrity: sha512-YQJdNb6TJQ8lNa1o8ThfT0P7DY/cGhnI4Se8YiGIsdTPSBOiPtTY72+lfsM1O+3bOeAy7n/MvWRXrJuiKGf7Pg==} + '@swagger-api/apidom-ns-asyncapi-3@1.6.0': + resolution: {integrity: sha512-lRMvwTdtuPcwJEYLTX/UGtECpHi9UNYeT9rmWMw3LiKZrZzYc2L8q4ipPbpWwH8t7QfsF2u0iggCODU99lXCnw==} - '@swagger-api/apidom-ns-arazzo-1@1.5.1': - resolution: {integrity: sha512-hC/AD9TG3DMex+UAlYmg3fKcbmgrLGyZ3Fm2KqJfaC3CkiYE6SdVtfCBK9mPOcArPVa2RfzSgU4aRYzClDmvNQ==} + '@swagger-api/apidom-ns-json-schema-2019-09@1.6.0': + resolution: {integrity: sha512-dee1i8wcAFgDEOzTsyoCzQhFLZ2JKzkK5KkRuryabvwS0hG2mKlogToFc8cO2MkkiLSpERm7DREALwSTFVHa0w==} - '@swagger-api/apidom-ns-asyncapi-2@1.5.1': - resolution: {integrity: sha512-9k97IdvSde7OaGwE8opX9psjmhsRYkuKm5eCmM3n6WOZkwdJFD73bCtYVqCuDCVRzJwT9xMras4fVG5Zn1Vhcw==} + '@swagger-api/apidom-ns-json-schema-2020-12@1.6.0': + resolution: {integrity: sha512-ldTxSnnIXskwpN6yCJkasqs32pJXwoXyad95crKT0xjZZr4fTrcAXXIyzdjBubiY9tK6elSrQGQxinJcV7ivWw==} - '@swagger-api/apidom-ns-asyncapi-3@1.5.1': - resolution: {integrity: sha512-EQGnSP93yB8ZDhaESqtavnynySH/hjkdkb4tInRoKYN3j3WU+in6Bvxwq2qCkyH9ACaSbW2HFlT2qIRBcLW+oA==} + '@swagger-api/apidom-ns-json-schema-draft-4@1.6.0': + resolution: {integrity: sha512-t9HvHwrevEG7usosO6AdXmC8oYqje5nxHpUmODr72tUtCeAeGEGEb9lgqx7fBhjc3BYsRzOL1hX56m1gjEyCog==} - '@swagger-api/apidom-ns-json-schema-2019-09@1.5.1': - resolution: {integrity: sha512-peszjtx5OPUYsvl/t4XTRVt0vY0WfR7jBpcmq3/ioqAaddhfbnb4i3PPWWhAIzzeKAiFHc/m4E5HCMMdDF2wDA==} + '@swagger-api/apidom-ns-json-schema-draft-6@1.6.0': + resolution: {integrity: sha512-aoyvQWgAOcZGTe5OfJ3r24DvXHHbrkKtAnxTOEdZzV/uOm6/cbuT8m02+aMOqWPxei1naC3ZHW9iHrETtfgV3w==} - '@swagger-api/apidom-ns-json-schema-2020-12@1.5.1': - resolution: {integrity: sha512-4L6X5SxkXCD4W7O0KI8e3kc0Q8TkVg0kPSNOWYosGAHOk9g5KyMIbACDjZhJ2q+uPlyLFCLAPY93aOVaVZ+nsA==} + '@swagger-api/apidom-ns-json-schema-draft-7@1.6.0': + resolution: {integrity: sha512-GjmC4+AHQh22fRZOmV+jSYMJTXh243XvdACfIQ//39kQu7gQsimF4PVSY2IgWSvS/I1ukWdPBYmDvOKryBPGrw==} - '@swagger-api/apidom-ns-json-schema-draft-4@1.5.1': - resolution: {integrity: sha512-vdc+vVLwf4JwDeK4mPfZqyVHG5gJc766GkqH522VRTh1XWJPlW674lIJuhqo5HLzXLm4zV4alI/QJMR3fRWFIQ==} + '@swagger-api/apidom-ns-openapi-2@1.6.0': + resolution: {integrity: sha512-xbmYzagnB8rO7sYwNGVyxYbNBkjCWnMhlnMrxkPtfQ/2u2ANAmTnCB/S/cMswX5XofiRJbznKAjLDSKBS+mLpQ==} - '@swagger-api/apidom-ns-json-schema-draft-6@1.5.1': - resolution: {integrity: sha512-sNRDQybpzl16HwktI0by0nWj85Rpmx/K1Qc6e4uQRmpPeozJTi8hAdyxw9ays1WJI+Bao9YEz+xJNAqNIE5xlg==} + '@swagger-api/apidom-ns-openapi-3-0@1.6.0': + resolution: {integrity: sha512-AOvW7a2H27inepcTBAWaBMjJLrCh5IPWD4nTU+gysULC7IW6gphO8hj3iUuTmFBcGh9be89GBbvv2y/EGAfx9w==} - '@swagger-api/apidom-ns-json-schema-draft-7@1.5.1': - resolution: {integrity: sha512-hdgYjOzZCN866F/BP5tuReZmVTZF2NTNykOwILhR/uoDR2YvgvwvHbnifsywLhreZOkhf3HIbfvCkQnIopkluw==} + '@swagger-api/apidom-ns-openapi-3-1@1.6.0': + resolution: {integrity: sha512-jCVypc8503zDSxAQlyV8j1vzwc75VBdWHtE2O0F+q5j9qNtGxw/ekbDkgrydYRaGBl92mf16dtPjtp5LwJD0Hw==} - '@swagger-api/apidom-ns-openapi-2@1.5.1': - resolution: {integrity: sha512-KnFYGqvlHBeczLs5P1R1dCfDGW3O7LaLu/AmFLRvt0ya8AXwkF4gd5gHsXKn0lXBeAc3kEwHAValtg6WNR8keQ==} + '@swagger-api/apidom-ns-openapi-3-2@1.6.0': + resolution: {integrity: sha512-QcFAUucaPaWiOKOEaaGqSfK3OtjeGJodWZLsuBQ0vrHaHkWyQ7jwsM1DJbc1Y8geOBeD2wIwdrdRjoulmqU1SA==} - '@swagger-api/apidom-ns-openapi-3-0@1.5.1': - resolution: {integrity: sha512-n3KaIh7dVkINDC7g8osBpxvYCZnsDHHg8rOvOYy1kKlZHi7xd3Ui83rDnKCsOsdsKlFdIdd6isBcBEBQazgwPA==} + '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.6.0': + resolution: {integrity: sha512-vz/9k0X/kh6mLm+Fi+LGNk/yyFq28wxI29ZVLW+b7ulcODikv+NaDnyN2n2kLKCvIchPATzAEvqMvVMuuQwWlg==} - '@swagger-api/apidom-ns-openapi-3-1@1.5.1': - resolution: {integrity: sha512-rJPZH969I67snT6ux3Dve5QXaHCfm/phv20kAojR50fW5FPbR+nn4a9FIi59F3OrD69zQascKUrJb24ieFVHIw==} + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.6.0': + resolution: {integrity: sha512-QAq4H6YzRtysSpvLtlJ8WZ22/1Mht+/iarrUOijxDZQPAGfYeUoIicnCqxkVZYSea85sQl+3kiCCB3nhSH+L0g==} - '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.5.1': - resolution: {integrity: sha512-XomzUhgy+w1toxJMjN1mXKITl88QPiug4e9eyNWSEQkoCD1ko0MEVZYA6/6mjwlTW2DQ4qg+XF+TFmOPlkQWeA==} + '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.6.0': + resolution: {integrity: sha512-syKPG3a9IGRvlGhXIEUzWhwbEuFbj+UwwtqaKu8zu771V+DRtH+wxyOkX54vKAIlApz/FgeUbmlWA1ZtYBlSIQ==} - '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.5.1': - resolution: {integrity: sha512-pfa+iQwMLhDcE4CYi4pUHraAOUUo2DNeRRWZGhregWZoZPo5gVZ8w9NwSowLE19zf922A9RfzBkouI969j27QQ==} + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.6.0': + resolution: {integrity: sha512-IVVLn+a8Q1iQcQsm4tXiAPghHJuJSB1rhIlDyHe3tSQgt9HOSiVpbnJDpwE/JBxxDxSAkeT6Ovo+fi2T5AmHYg==} - '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.5.1': - resolution: {integrity: sha512-pJrlCospvJDvh8mqLjyb0ILRPuD3rYaZlTRs340W2ADgn6m+ClrDBQwXCod5QrKmcjYqAhtLZXwnwSuZStaj+Q==} + '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.6.0': + resolution: {integrity: sha512-aSUi22ELTDvdCLA3nIUOehuNBcHSeCqU7S7YNiHP/mwE4Q07pwQrYXijH2PROfCdjlZNNN34m6Ptakd92jliJQ==} - '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.5.1': - resolution: {integrity: sha512-Q/EZ9BGnBlj4TiEQ+Q4k/pdgZ/Le+/ppZSfcc22umnKujDNyBLGB5L0sSfTOEjANRYNo+UtPYnkctwTkJu3/ZQ==} + '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.6.0': + resolution: {integrity: sha512-Ic53vcFF9zniDyCXOGSwwuAdEBUn5lFEAa0m2i30R36cQFHBCCuvbzbMQjWdr+oML0Aw4XoqOwZCQgkJJICpPA==} - '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.5.1': - resolution: {integrity: sha512-GRM5iCz9eRMiTSV4iAlpuWM6q3SBndSmEMhgjDuclWiC3HF78CCNuT9KwYNFMAx1bEe5Fr8c8Gs8KNckdeCU4g==} + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.6.0': + resolution: {integrity: sha512-d/w7X+T4vT+KPqb+8xUm6n4pbHsGB28jdxE9rNVbxhu6D3owny2uxfglwaFh4fJG6FQMavCwl/QzfB4newdoKQ==} - '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.5.1': - resolution: {integrity: sha512-TCMm7Ce9PwzTQw2SnRYR0smCnrE6bmGbVsjqVz4d+tQy8h6ZNkfjAqOtBasKr/KpEywpLCRgWC2YRNAHGKLndw==} + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.6.0': + resolution: {integrity: sha512-Wmf0LY59TZxQhqrJU2pcnUikcChVB4IqGPgjtOFLUoqPpz8FSwYbJ/SPnSMSl+QuncxROheSFsgZ6Tupv0sPHw==} - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.5.1': - resolution: {integrity: sha512-sZQ/7kOs7+apKq22uyhF3jmhPTzt7y8Xy8cGPIp1b0PnQhbm7rT1/rrOl9qh9MqCdUip2Dx0Y+WTyyET0faZ4g==} + '@swagger-api/apidom-parser-adapter-json@1.6.0': + resolution: {integrity: sha512-WdAS+dBAB2t18HuUgSZy5b8JM7uXfn1RlPymJNRMUsrKYCTtPrQ/0q3YfnBjPhtjSSNCp+p1wajxHAFS7cj2VA==} - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.5.1': - resolution: {integrity: sha512-bYoyX/qP9SmGF6DKohPO1Fguz8/8uHF8ieSo04jrQblHbEeDVcTBG6oTFVNcpG2ZxnqaoNF2/KY4/fUSKMH/4g==} + '@swagger-api/apidom-parser-adapter-openapi-json-2@1.6.0': + resolution: {integrity: sha512-Q36W1FzdVaY7Oh98533dzCUghwb8k3ZMdlnV37V1H13FlUkj3tVZiWaeaCLwIakzQ7XXYaQTOP+VrRhDRjzhUA==} - '@swagger-api/apidom-parser-adapter-json@1.5.1': - resolution: {integrity: sha512-zYXchiHC5wsvCImr4lgrhwuLWDH3EDz4L4KJbp8ltO1Y+3PRwPYNruKVppHdIC6d+eTBy4e110a4629rl6LQTg==} + '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.6.0': + resolution: {integrity: sha512-UY+obOLTPHJvnXscdMY9XwZyuqcnBe6cu9TURjJgkO/QpOpPDqqZoRyurKZgRrX0Pv9B1zR3EIzhl01u/jeUaw==} - '@swagger-api/apidom-parser-adapter-openapi-json-2@1.5.1': - resolution: {integrity: sha512-05SXfF5ate18FKlPBg4YEfyS6Sr4lmu+gppxMQ202x172ejBQjAU37iZeSKfKw1egXngAmm6OZqWGKn36WD/fw==} + '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.6.0': + resolution: {integrity: sha512-4ch04/96lYMXQu6odqa6H0aJmV8UefnBJKX1CPuL4qcPSPMFCurcXHGpPHrwMu1p/4Q9H+yRVlYeNQV10xvM0w==} - '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.5.1': - resolution: {integrity: sha512-AG68rFxilJwQuwgYUlbSX89j96CzFwm7MLsMbd1Pe2k8bsZJF41bxYEWLck08hQ0v8HikZ7igJLGvkwm9Fk6EQ==} + '@swagger-api/apidom-parser-adapter-openapi-json-3-2@1.6.0': + resolution: {integrity: sha512-fWR2gjMQg00QIimcXQMSVeLnCH/2iuDD/Dx8TzVHmKV/IKlu+TnmIVosdlDfRmOB+4duwU6/yfoA79IEhFeZdw==} - '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.5.1': - resolution: {integrity: sha512-UYuaUegcqsR8DbqUS9gJnzdV/g7P61HfgjO620soSHwvDRlHCdgxd71dnaBZWT22+as8vuZABAzjQuKrtiej2g==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.6.0': + resolution: {integrity: sha512-dkEh1Rw9uvuIAOTfKjWRX2rLWP+xJ/Eqdkqeo0I0BWFKXX49YcDpHJV4XHpmd5FbsjJ9vBYr0hAmkbl32TtR4g==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.5.1': - resolution: {integrity: sha512-d64JVYhBa5O6Kz2H/Wr1gLf5la0T1gZ22XIf2ABPTHga8fKQjEFDhFifxVS65NX9cOglcXQo9sRvD4AZkRMEkQ==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.6.0': + resolution: {integrity: sha512-6azq5YonWdzHcO9llK9zn1a+rGxlTz2Uf8p8NWDQnl2AZ56neDLYEL3mNDlrMXAy8dSJIHw+u9VF1OOzdslIHQ==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.5.1': - resolution: {integrity: sha512-MgyCo6rz+jH1cR5CpKleT1HOXOLoK2LuP7CrEGsuRNCA4nR6w/H4T75XYxUCWO/9T3870vkxDM8hp8IRW5xtQg==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.6.0': + resolution: {integrity: sha512-g2tGCXyIAC0IA6JjA0HVxHWyCovyfAxDQ+pMAJ6qm4PfrZHB+oXKWKZHNNmQaFiKdc/SVdMQq6Up0mXOQs7IOQ==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.5.1': - resolution: {integrity: sha512-9ED9pmYqCfKqfeeDtGrXU7+gISjt6bh93XO5qCexwfHCbzrTdjiMcWMTCnaRjXvgv819LAKUDIDnnn88EGpUNg==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-2@1.6.0': + resolution: {integrity: sha512-NGkdG9X5Svi89ZBluNseyUBNdgB9MkbTTNmerVKKOmCCHaVbzIb6UFPXf1MifSFyT+wTeGZk6WZLgRIDsTAZ5Q==} - '@swagger-api/apidom-parser-adapter-yaml-1-2@1.5.1': - resolution: {integrity: sha512-jMZUwbS7P2n/3BG+w0Mg+G2m6tY1zuDCACTpVh3UjIMl15k+6VIyB49kKIs1q9BZRX8rbnJmmzpYcjhjDOgaqA==} + '@swagger-api/apidom-parser-adapter-yaml-1-2@1.6.0': + resolution: {integrity: sha512-UwSE5pPUJ+ag7ZCbesgx/SJ8zUD3Sx+2U4AD3/1G1EJ+0gb7FMYgihuOT8ujmBfZVGGm3HMIEIa1w3zha08v2g==} - '@swagger-api/apidom-reference@1.5.1': - resolution: {integrity: sha512-KppyiuQ8EY1vnhb2RsCty60DKYP1jszmxNKHAAGaMgKOmTcoGCvPNDl0Fn6IPlEfXsy3yqYn1CsEePC3BcGtHg==} + '@swagger-api/apidom-reference@1.6.0': + resolution: {integrity: sha512-gYTDfWQM1heqrCCrCsZH+EWDyAkIGqEJnSJcVWKngwOkXJKeUwat8p1TOW4q3rkaTT+fBaYbrjTr9SkFtVbdMg==} '@swaggerexpert/cookie@2.0.2': resolution: {integrity: sha512-DPI8YJ0Vznk4CT+ekn3rcFNq1uQwvUHZhH6WvTSPD0YKBIlMS9ur2RYKghXuxxOiqOam/i4lHJH4xTIiTgs3Mg==} @@ -9811,68 +10990,68 @@ packages: resolution: {integrity: sha512-qMx1nOrzoB+PF+pzb26Q4Tc2sOlrx9Ba2UBNX9hB31Omrq+QoZ2Gly0KLrQWw4Of1AQ4J9lnD+XOdwOdcdXqqw==} engines: {node: '>=12.20.0'} - '@swc/core-darwin-arm64@1.15.11': - resolution: {integrity: sha512-QoIupRWVH8AF1TgxYyeA5nS18dtqMuxNwchjBIwJo3RdwLEFiJq6onOx9JAxHtuPwUkIVuU2Xbp+jCJ7Vzmgtg==} + '@swc/core-darwin-arm64@1.15.18': + resolution: {integrity: sha512-+mIv7uBuSaywN3C9LNuWaX1jJJ3SKfiJuE6Lr3bd+/1Iv8oMU7oLBjYMluX1UrEPzwN2qCdY6Io0yVicABoCwQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.15.11': - resolution: {integrity: sha512-S52Gu1QtPSfBYDiejlcfp9GlN+NjTZBRRNsz8PNwBgSE626/FUf2PcllVUix7jqkoMC+t0rS8t+2/aSWlMuQtA==} + '@swc/core-darwin-x64@1.15.18': + resolution: {integrity: sha512-wZle0eaQhnzxWX5V/2kEOI6Z9vl/lTFEC6V4EWcn+5pDjhemCpQv9e/TDJ0GIoiClX8EDWRvuZwh+Z3dhL1NAg==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.15.11': - resolution: {integrity: sha512-lXJs8oXo6Z4yCpimpQ8vPeCjkgoHu5NoMvmJZ8qxDyU99KVdg6KwU9H79vzrmB+HfH+dCZ7JGMqMF//f8Cfvdg==} + '@swc/core-linux-arm-gnueabihf@1.15.18': + resolution: {integrity: sha512-ao61HGXVqrJFHAcPtF4/DegmwEkVCo4HApnotLU8ognfmU8x589z7+tcf3hU+qBiU1WOXV5fQX6W9Nzs6hjxDw==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.15.11': - resolution: {integrity: sha512-chRsz1K52/vj8Mfq/QOugVphlKPWlMh10V99qfH41hbGvwAU6xSPd681upO4bKiOr9+mRIZZW+EfJqY42ZzRyA==} + '@swc/core-linux-arm64-gnu@1.15.18': + resolution: {integrity: sha512-3xnctOBLIq3kj8PxOCgPrGjBLP/kNOddr6f5gukYt/1IZxsITQaU9TDyjeX6jG+FiCIHjCuWuffsyQDL5Ew1bg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.15.11': - resolution: {integrity: sha512-PYftgsTaGnfDK4m6/dty9ryK1FbLk+LosDJ/RJR2nkXGc8rd+WenXIlvHjWULiBVnS1RsjHHOXmTS4nDhe0v0w==} + '@swc/core-linux-arm64-musl@1.15.18': + resolution: {integrity: sha512-0a+Lix+FSSHBSBOA0XznCcHo5/1nA6oLLjcnocvzXeqtdjnPb+SvchItHI+lfeiuj1sClYPDvPMLSLyXFaiIKw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.15.11': - resolution: {integrity: sha512-DKtnJKIHiZdARyTKiX7zdRjiDS1KihkQWatQiCHMv+zc2sfwb4Glrodx2VLOX4rsa92NLR0Sw8WLcPEMFY1szQ==} + '@swc/core-linux-x64-gnu@1.15.18': + resolution: {integrity: sha512-wG9J8vReUlpaHz4KOD/5UE1AUgirimU4UFT9oZmupUDEofxJKYb1mTA/DrMj0s78bkBiNI+7Fo2EgPuvOJfuAA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.15.11': - resolution: {integrity: sha512-mUjjntHj4+8WBaiDe5UwRNHuEzLjIWBTSGTw0JT9+C9/Yyuh4KQqlcEQ3ro6GkHmBGXBFpGIj/o5VMyRWfVfWw==} + '@swc/core-linux-x64-musl@1.15.18': + resolution: {integrity: sha512-4nwbVvCphKzicwNWRmvD5iBaZj8JYsRGa4xOxJmOyHlMDpsvvJ2OR2cODlvWyGFH6BYL1MfIAK3qph3hp0Az6g==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.15.11': - resolution: {integrity: sha512-ZkNNG5zL49YpaFzfl6fskNOSxtcZ5uOYmWBkY4wVAvgbSAQzLRVBp+xArGWh2oXlY/WgL99zQSGTv7RI5E6nzA==} + '@swc/core-win32-arm64-msvc@1.15.18': + resolution: {integrity: sha512-zk0RYO+LjiBCat2RTMHzAWaMky0cra9loH4oRrLKLLNuL+jarxKLFDA8xTZWEkCPLjUTwlRN7d28eDLLMgtUcQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.15.11': - resolution: {integrity: sha512-6XnzORkZCQzvTQ6cPrU7iaT9+i145oLwnin8JrfsLG41wl26+5cNQ2XV3zcbrnFEV6esjOceom9YO1w9mGJByw==} + '@swc/core-win32-ia32-msvc@1.15.18': + resolution: {integrity: sha512-yVuTrZ0RccD5+PEkpcLOBAuPbYBXS6rslENvIXfvJGXSdX5QGi1ehC4BjAMl5FkKLiam4kJECUI0l7Hq7T1vwg==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.15.11': - resolution: {integrity: sha512-IQ2n6af7XKLL6P1gIeZACskSxK8jWtoKpJWLZmdXTDj1MGzktUy4i+FvpdtxFmJWNavRWH1VmTr6kAubRDHeKw==} + '@swc/core-win32-x64-msvc@1.15.18': + resolution: {integrity: sha512-7NRmE4hmUQNCbYU3Hn9Tz57mK9Qq4c97ZS+YlamlK6qG9Fb5g/BB3gPDe0iLlJkns/sYv2VWSkm8c3NmbEGjbg==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.15.11': - resolution: {integrity: sha512-iLmLTodbYxU39HhMPaMUooPwO/zqJWvsqkrXv1ZI38rMb048p6N7qtAtTp37sw9NzSrvH6oli8EdDygo09IZ/w==} + '@swc/core@1.15.18': + resolution: {integrity: sha512-z87aF9GphWp//fnkRsqvtY+inMVPgYW3zSlXH1kJFvRT5H/wiAn+G32qW5l3oEk63KSF1x3Ov0BfHCObAmT8RA==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -9908,17 +11087,23 @@ packages: '@tanstack/query-core@5.77.1': resolution: {integrity: sha512-nfxVhy4UynChMFfN4NxwI8pktV9R3Zt/ROxOAe6pdOf8CigDLn26p+ex1YW5uien26BBICLmN0dTvIELHCs5vw==} - '@tanstack/query-core@5.90.20': - resolution: {integrity: sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==} - '@tanstack/query-persist-client-core@4.27.0': resolution: {integrity: sha512-A+dPA7zG0MJOMDeBc/2WcKXW4wV2JMkeBVydobPW9G02M4q0yAj7vI+7SmM2dFuXyIvxXp4KulCywN6abRKDSQ==} + '@tanstack/query-persist-client-core@5.77.1': + resolution: {integrity: sha512-m7VJE03p4TbfBBzkZAFwhmfLIM4W0ufDnbhQ7oIOy430+AEBKfSX9KJzftSgyQ94TjVqQO4QtfUoprhwOrMAlA==} + '@tanstack/react-query-persist-client@4.28.0': resolution: {integrity: sha512-xNpi3YdPOQIyYkKhByYDqTlyCeqICWFhV5PWkoVxYfzlRK6HYX4s+9Int407jEvhBz9cGC4OaL7rd6bynCFrYg==} peerDependencies: '@tanstack/react-query': 4.28.0 + '@tanstack/react-query-persist-client@5.77.1': + resolution: {integrity: sha512-6cOqoZdSYaMxCI8ObtDeikzGsxaFojo8CcbZoUyGs78SphF0pTSi8dTk2p24OP8v0OZuNXC+qDmRMo6sJznAIA==} + peerDependencies: + '@tanstack/react-query': ^5.77.1 + react: ^18 || ^19 + '@tanstack/react-query@4.0.10': resolution: {integrity: sha512-Wn5QhZUE5wvr6rGClV7KeQIUsdTmYR9mgmMZen7DSRWauHW2UTynFg3Kkf6pw+XlxxOLsyLWwz/Q6q1lSpM3TQ==} peerDependencies: @@ -9958,33 +11143,29 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-virtual@3.13.18': - resolution: {integrity: sha512-dZkhyfahpvlaV0rIKnvQiVoWPyURppl6w4m9IwMDpuIjcJ1sD9YGWrt0wISvgU7ewACXx2Ct46WPgI6qAD4v6A==} + '@tanstack/react-virtual@3.13.21': + resolution: {integrity: sha512-SYXFrmrbPgXBvf+HsOsKhFgqSe4M6B29VHOsX9Jih9TlNkNkDWx0hWMiMLUghMEzyUz772ndzdEeCEBx+3GIZw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/virtual-core@3.13.18': - resolution: {integrity: sha512-Mx86Hqu1k39icq2Zusq+Ey2J6dDWTjDvEv43PJtRCoEYTLyfaPnxIQ6iy7YAOK0NV/qOEmZQ/uCufrppZxTgcg==} + '@tanstack/virtual-core@3.13.21': + resolution: {integrity: sha512-ww+fmLHyCbPSf7JNbWZP3g7wl6SdNo3ah5Aiw+0e9FDErkVHLKprYUrwTm7dF646FtEkN/KkAKPYezxpmvOjxw==} '@testing-library/dom@10.4.0': resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} - '@testing-library/dom@10.4.1': - resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} - engines: {node: '>=18'} - '@testing-library/jest-dom@6.5.0': resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - '@testing-library/jest-dom@6.6.4': - resolution: {integrity: sha512-xDXgLjVunjHqczScfkCJ9iyjdNOVHvvCdqHSSxwM9L0l/wHkTRum67SDc020uAlCoqktJplgO2AAQeLP1wgqDQ==} + '@testing-library/jest-dom@6.6.3': + resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - '@testing-library/react@16.3.2': - resolution: {integrity: sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==} + '@testing-library/react@16.3.0': + resolution: {integrity: sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==} engines: {node: '>=18'} peerDependencies: '@testing-library/dom': ^10.0.0 @@ -10019,15 +11200,15 @@ packages: '@textlint/types@15.5.2': resolution: {integrity: sha512-sJOrlVLLXp4/EZtiWKWq9y2fWyZlI8GP+24rnU5avtPWBIMm/1w97yzKrAqYF8czx2MqR391z5akhnfhj2f/AQ==} + '@tokenizer/inflate@0.4.1': + resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} + engines: {node: '>=18'} + '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - '@tootallnate/once@1.1.2': - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - - '@tootallnate/once@2.0.0': - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + '@tootallnate/once@3.0.1': + resolution: {integrity: sha512-VyMVKRrpHTT8PnotUeV8L/mDaMwD5DaAKCFLP73zAqAtvF0FCqky+Ki7BYbFCYQmqFyTe9316Ed5zS70QUR9eg==} engines: {node: '>= 10'} '@tree-sitter-grammars/tree-sitter-yaml@0.7.1': @@ -10038,10 +11219,6 @@ packages: tree-sitter: optional: true - '@trysound/sax@0.2.0': - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - '@ts-morph/common@0.23.0': resolution: {integrity: sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA==} @@ -10060,6 +11237,11 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@twbs/fantasticon@3.0.0': + resolution: {integrity: sha512-Vuf7M0IyOP9G7OhibereG3pXEqz+xcp1QuJ/GpezDqbUEx7mrJPiS0/WMftItWTtJ0C/yGK8slHME6+G7FWeEw==} + engines: {node: '>=16'} + hasBin: true + '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -10087,15 +11269,17 @@ packages: '@types/bonjour@3.5.13': resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + '@types/braces@3.0.5': + resolution: {integrity: sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==} + '@types/byline@4.2.36': resolution: {integrity: sha512-dO55KDSaOSE+3T8TwP66mzn0u/PM/aSedVMr1tby7WBNjfLIuS6IbYXi1mlau49sVSVB+gXKJscWE0JO3tlXDw==} - '@types/chai@4.3.20': - resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} + '@types/chai@4.3.9': + resolution: {integrity: sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==} - '@types/classnames@2.3.4': - resolution: {integrity: sha512-dwmfrMMQb9ujX1uYGvB5ERDlOzBNywnZAZBtOe107/hORWP05ESgU4QyaanZMWYYfd2BzrG78y13/Bju8IQcMQ==} - deprecated: This is a stub types definition. classnames provides its own type definitions, so you do not need this installed. + '@types/classnames@2.2.9': + resolution: {integrity: sha512-MNl+rT5UmZeilaPxAVs6YaPC2m6aA8rofviZbhbxpPpl61uKodfdQVsBtgJGTqGizEf02oW3tsVe7FYB8kK14A==} '@types/codemirror@0.0.90': resolution: {integrity: sha512-8Z9+tSg27NPRGubbUPUCrt5DDG/OWzLph5BvcDykwR5D7RyZh5mhHG0uS1ePKV1YFCA+/cwc4Ey2AJAEFfV3IA==} @@ -10103,6 +11287,12 @@ packages: '@types/codemirror@5.60.17': resolution: {integrity: sha512-AZq2FIsUHVMlp7VSe2hTfl5w4pcUkoFkM3zVsRKsn1ca8CXRDYvnin04+HP2REkwsxemuHqvDofdlhUWNpbwfw==} + '@types/color-convert@2.0.4': + resolution: {integrity: sha512-Ub1MmDdyZ7mX//g25uBAoH/mWGd9swVbt8BseymnaE18SU4po/PjmCrHxqIIRjBo3hV/vh1KGr0eMxUhp+t+dQ==} + + '@types/color-name@1.1.5': + resolution: {integrity: sha512-j2K5UJqGTxeesj6oQuGpMgifpT5k9HprgQd8D1Y0lOFqKHl3PJu5GMeS4Y5EgjS55AE6OQxf8mPED9uaGbf4Cg==} + '@types/connect-history-api-fallback@1.5.4': resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} @@ -10112,8 +11302,8 @@ packages: '@types/cross-spawn@6.0.6': resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} - '@types/dagre@0.7.53': - resolution: {integrity: sha512-f4gkWqzPZvYmKhOsDnhq/R8mO4UMcKdxZo+i5SCkOU1wvGeHJeUXGIHeE9pnwGyPMDof1Vx5ZQo4nxpeg2TTVQ==} + '@types/dagre@0.7.52': + resolution: {integrity: sha512-XKJdy+OClLk3hketHi9Qg6gTfe1F3y+UFnHxKA2rn9Dw+oXa4Gb378Ztz9HlMgZKSxpPmn4BNVh9wgkpvrK1uw==} '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -10157,6 +11347,9 @@ packages: '@types/estree@0.0.51': resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -10169,14 +11362,20 @@ packages: '@types/find-cache-dir@3.2.1': resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==} + '@types/fs-extra@11.0.1': + resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==} + '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + '@types/glob-base@0.3.2': + resolution: {integrity: sha512-0/pNDkxZEZtlAEyMmZvVubAHbynbnlNjPl50gyzDO1iq9nT07Af7Jfg9qJUvXaOzkfVKBvWb4nfPrW1R0ihoyg==} + '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} - '@types/glob@8.1.0': - resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} + '@types/glob@8.0.0': + resolution: {integrity: sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==} '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -10235,6 +11434,9 @@ packages: '@types/jest@30.0.0': resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==} + '@types/js-yaml@4.0.5': + resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==} + '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} @@ -10250,21 +11452,42 @@ packages: '@types/jsonfile@6.1.4': resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + '@types/katex@0.16.8': + resolution: {integrity: sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==} + '@types/linkify-it@5.0.0': resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} - '@types/lodash.camelcase@4.3.9': - resolution: {integrity: sha512-ys9/hGBfsKxzmFI8hckII40V0ASQ83UM2pxfQRghHAwekhH4/jWtjz/3/9YDy7ZpUd/H0k2STSqmPR28dnj7Zg==} + '@types/lodash.camelcase@4.3.0': + resolution: {integrity: sha512-Q6uQaysIyJb2K9yc4Me8RfnV2gni57GBMgniq5T/xNvAgpBoPfNlTk4szJZj5Lq64WCViwPpR8NJyMn+ocxcrA==} - '@types/lodash.clonedeep@4.5.9': - resolution: {integrity: sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==} + '@types/lodash.clonedeep@4.5.6': + resolution: {integrity: sha512-cE1jYr2dEg1wBImvXlNtp0xDoS79rfEdGozQVgliDZj1uERH4k+rmEMTudP9b4VQ8O6nRb5gPqft0QzEQGMQgA==} + + '@types/lodash.debounce@4.0.6': + resolution: {integrity: sha512-4WTmnnhCfDvvuLMaF3KV4Qfki93KebocUF45msxhYyjMttZDQYzHkO639ohhk8+oco2cluAFL3t5+Jn4mleylQ==} '@types/lodash.debounce@4.0.9': resolution: {integrity: sha512-Ma5JcgTREwpLRwMM+XwBR7DaWe96nC38uCBDFKZWbNKD+osjVzdpnUSwBcqCptrp16sSOLBAUb50Car5I0TCsQ==} + '@types/lodash@4.14.189': + resolution: {integrity: sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA==} + + '@types/lodash@4.14.198': + resolution: {integrity: sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==} + + '@types/lodash@4.14.199': + resolution: {integrity: sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==} + + '@types/lodash@4.14.200': + resolution: {integrity: sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==} + '@types/lodash@4.14.202': resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + '@types/lodash@4.17.15': + resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==} + '@types/lodash@4.17.16': resolution: {integrity: sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==} @@ -10274,6 +11497,9 @@ packages: '@types/markdown-it@14.1.2': resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + '@types/markdown-to-jsx@6.11.3': + resolution: {integrity: sha512-30nFYpceM/ZEvhGiqWjm5quLUxNeld0HCzJEXMZZDpq53FPkS85mTwkWtCXzCqq8s5JYLgM5W392a02xn8Bdaw==} + '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -10286,6 +11512,9 @@ packages: '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + '@types/micromatch@4.0.10': + resolution: {integrity: sha512-5jOhFDElqr4DKTrTEbnW8DZ4Hz5LRUEmyrGpCMrD/NphYv3nUnaF08xmSLx1rGGnyEs/kFnhiw6dCgcDqMr5PQ==} + '@types/mime-types@2.1.4': resolution: {integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==} @@ -10295,15 +11524,17 @@ packages: '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/minimatch@6.0.0': - resolution: {integrity: sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==} - deprecated: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed. - '@types/minimist@1.2.5': resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - '@types/mocha@10.0.10': - resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} + '@types/mocha@10.0.1': + resolution: {integrity: sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==} + + '@types/mocha@10.0.3': + resolution: {integrity: sha512-RsOPImTriV/OE4A9qKjMtk2MnXiuLLbcO3nCXK+kvq4nr0iMfFgpjaX3MPLb6f7+EL1FGSelYvuJMV6REH+ZPQ==} + + '@types/mousetrap@1.6.11': + resolution: {integrity: sha512-F0oAily9Q9QQpv9JKxKn0zMKfOo36KHCW7myYsmUyf2t0g+sBTbG3UleTPoguHdE1z3GLFr3p7/wiOio52QFjQ==} '@types/mousetrap@1.6.15': resolution: {integrity: sha512-qL0hyIMNPow317QWW/63RvL1x5MVMV+Ru3NaY9f/CuEpCqrmb7WeuK2071ZY5hczOnm38qExWM2i2WtkXLSqFw==} @@ -10311,29 +11542,41 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/mustache@4.2.5': + resolution: {integrity: sha512-PLwiVvTBg59tGFL/8VpcGvqOu3L4OuveNvPi0EYbWchRdEVP++yRUXJPFl+CApKEq13017/4Nf7aQ5lTtHUNsA==} + '@types/mustache@4.2.6': resolution: {integrity: sha512-t+8/QWTAhOFlrF1IVZqKnMRJi84EgkIK5Kh0p2JV4OLywUvCwJPFxbJAl7XAow7DVIHsF+xW9f1MVzg0L6Szjw==} '@types/node-fetch@2.6.13': resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} + '@types/node@14.18.63': + resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} + '@types/node@16.18.126': resolution: {integrity: sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==} - '@types/node@18.19.130': - resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} + '@types/node@18.11.19': + resolution: {integrity: sha512-YUgMWAQBWLObABqrvx8qKO1enAvBUdjZOAWQ5grBAkp5LQv45jBvYKZ3oFS9iKRCQyFjqw6iuEa1vmFqtxYLZw==} - '@types/node@20.19.33': - resolution: {integrity: sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==} + '@types/node@18.18.7': + resolution: {integrity: sha512-bw+lEsxis6eqJYW8Ql6+yTqkE6RuFtsQPSe5JxXbqYRFQEER5aJA9a5UH9igqDWm3X4iLHIKOHlnAXLM4mi7uQ==} + + '@types/node@20.10.6': + resolution: {integrity: sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==} '@types/node@22.15.18': resolution: {integrity: sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==} + '@types/node@22.15.19': + resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==} + '@types/node@22.15.21': resolution: {integrity: sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==} - '@types/node@22.15.35': - resolution: {integrity: sha512-stV91mHxlWpDksiUiivmFfQzjy2JLlb2NUTxKipiANEbxBZsdbDU9fSrT7SHY4uoCXAxYfJZVasn3x2/hqpd3g==} + '@types/node@22.15.24': + resolution: {integrity: sha512-w9CZGm9RDjzTh/D+hFwlBJ3ziUaVw7oufKA3vOFSOZlzmW9AkZnfjPb+DLnrV6qtgL/LNmP0/2zBNCFHL3F0ng==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -10341,6 +11584,9 @@ packages: '@types/npmlog@4.1.6': resolution: {integrity: sha512-0l3z16vnlJGl2Mi/rgJFrdwfLZ4jfNYgE6ZShEpjqhHuGTqdEzNles03NpYHwUMVYZa+Tj46UxKIEpE78lQ3DQ==} + '@types/overlayscrollbars@1.12.5': + resolution: {integrity: sha512-1yMmgFrq1DQ3sCHyb3DNfXnE0dB463MjG47ugX3cyade3sOt3U8Fjxk/Com0JJguTLPtw766TSDaO4NC65Wgkw==} + '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -10356,14 +11602,14 @@ packages: '@types/pretty-hrtime@1.0.3': resolution: {integrity: sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==} - '@types/prismjs@1.26.6': - resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} + '@types/prismjs@1.26.5': + resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - '@types/qs@6.14.0': - resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} + '@types/qs@6.15.0': + resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} '@types/ramda@0.30.2': resolution: {integrity: sha512-PyzHvjCalm2BRYjAU6nIB3TprYwMNOUY/7P/N8bSzp9W/yM2YrtGtAnnVtaCNSeOZ8DzKyFDvaqQs7LnWwwmBA==} @@ -10371,23 +11617,24 @@ packages: '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + '@types/reach__router@1.3.15': + resolution: {integrity: sha512-5WEHKGglRjq/Ae3F8UQxg+GYUIhTUEiyBT9GKPoOLU/vPTn8iZrRbdzxqvarOaGludIejJykHLMdOCdhgWqaxA==} + '@types/react-collapse@5.0.4': resolution: {integrity: sha512-tM5cVB6skGLneNYnRK2E3R56VOHguSeJQHslGPTIMC58ytL3oelT8L/l1onkwHGn5vSEs2BEq2Olzrur+YdliA==} '@types/react-dom@17.0.14': resolution: {integrity: sha512-H03xwEP1oXmSfl3iobtmQ/2dHF5aBHr8aUMwyGZya6OW45G+xtdzmq6HkncefiBt5JU8DVyaWl/nWZbjZCnzAQ==} - '@types/react-dom@17.0.26': - resolution: {integrity: sha512-Z+2VcYXJwOqQ79HreLU/1fyQ88eXSSFh6I3JdrEHQIfYSI0kCQpTGvOrbE6jFGGYXKsHuwY9tBa/w5Uo6KzrEg==} - peerDependencies: - '@types/react': ^17.0.0 - '@types/react-dom@18.2.0': resolution: {integrity: sha512-8yQrvS6sMpSwIovhPOwfyNf2Wz6v/B62LFSVYQ85+Rq3tLsBIG7rP5geMxaijTUxSkrO6RzN/IRuIAADYQsleA==} '@types/react-lottie@1.2.10': resolution: {integrity: sha512-rCd1p3US4ELKJlqwVnP0h5b24zt5p9OCvKUoNpYExLqwbFZMWEiJ6EGLMmH7nmq5V7KomBIbWO2X/XRFsL0vCA==} + '@types/react-lottie@1.2.5': + resolution: {integrity: sha512-g5c7r0VN8g0hLsFEtR71ZFDWDp6niY4D/7llcAcLjV3LpaoyANmaQ9jispskWpkAUP+NYQcFllMtoGIWUM6VRw==} + '@types/react-split-pane@0.1.67': resolution: {integrity: sha512-2vq9mohqYZ7kR+XcedfjyI2M7/E8W5owr0KupGGP+TfFp/O9f6c/S06MCB3FKWiBwazA7+Zyj50OTxvYy1kGLA==} deprecated: This is a stub types definition for react-split-pane (https://github.com/tomkp/react-split-pane). react-split-pane provides its own type definitions, so you don't need @types/react-split-pane installed! @@ -10398,14 +11645,14 @@ packages: '@types/react-syntax-highlighter@15.5.13': resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==} - '@types/react-test-renderer@19.1.0': - resolution: {integrity: sha512-XD0WZrHqjNrxA/MaR9O22w/RNidWR9YZmBdRGI7wcnWGrv/3dA8wKCJ8m63Sn+tLJhcjmuhOi629N66W6kgWzQ==} + '@types/react-test-renderer@18.3.0': + resolution: {integrity: sha512-HW4MuEYxfDbOHQsVlY/XtOvNHftCVEPhJF2pQXXwcUiUF+Oyb0usgp48HSgpK5rt8m9KZb22yqOeZm+rrVG8gw==} '@types/react@16.14.69': resolution: {integrity: sha512-NdnAamzkxLX9LBssSdt9Q0tQ3LR94hYxotI4/sRUs1vHKFXaDx9xDbK8S4wuw5bwrxiiXbTYyhKeITtFnwDvEA==} - '@types/react@17.0.91': - resolution: {integrity: sha512-xauZca6qMeCU3Moy0KxCM9jtf1vyk6qRYK39Ryf3afUqwgNUjRIGoDdS9BcGWgAMGSg1hvP4XcmlYrM66PtqeA==} + '@types/react@17.0.37': + resolution: {integrity: sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg==} '@types/react@18.2.0': resolution: {integrity: sha512-0FLj93y5USLHdnhIhABk83rm8XEGA7kH3cr+YUlvxoUGp1xNt/DINUMvqPxLyOQMzLmZe8i4RTHbvb8MC7NmrA==} @@ -10467,8 +11714,8 @@ packages: '@types/tapable@1.0.12': resolution: {integrity: sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==} - '@types/tcp-port-used@1.0.4': - resolution: {integrity: sha512-0vQ4fz9TTM4bCdllYWEJ2JHBUXR9xqPtc70dJ7BMRDVfvZyYdrgey3nP5RRcVj+qAgnHJM8r9fvgrfnPMxdnhA==} + '@types/tcp-port-used@1.0.3': + resolution: {integrity: sha512-Lq0Z8iw3uiBJzOdfL+ip6l6vOJw++XEyXPa7/3hMkWVU2YMsKuQBjjK5M2Fmq/533DBVW9L5I/XlJvcHnfAP4g==} '@types/tern@0.23.9': resolution: {integrity: sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==} @@ -10509,14 +11756,32 @@ packages: '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@types/vscode-notebook-renderer@1.72.4': - resolution: {integrity: sha512-bdKO41c6Dc24pH/O/eM/jqfCwGH4zc76o/g/6Gt1y/eg/bvvqP2/VpbV+Sa5Te2sZekFRcbYnSSFTKo3wcVGUg==} + '@types/vscode-notebook-renderer@1.72.2': + resolution: {integrity: sha512-ZEiswUa8mwPmMlHZCuI1B6MHBs81XEzPHg3luINmTZSKvHunOzhUfNzocU+Ob3GmcOeUALRNr1u4iDRfVliH/g==} + + '@types/vscode-webview@1.57.2': + resolution: {integrity: sha512-RpkIso3+FVoi9hFwHj9uBFO+9p8PGym0LnLJ9Yabo9mUJaV39CzOxz6EVtHg8AidA9hAf4cVmG0c+l9pvw6Lbw==} + + '@types/vscode-webview@1.57.3': + resolution: {integrity: sha512-8at2UVGjA/6gcLOay+J8wOars6VsDqAqPxRHYihH0XFUaXt+2AZ+Hd9hSoUbnhjicb6V1xe7rfjb7j4Ri2n1fg==} '@types/vscode-webview@1.57.5': resolution: {integrity: sha512-iBAUYNYkz+uk1kdsq05fEcoh8gJmwT3lqqFPN7MGyjQ3HVloViMdo7ZJ8DFIP8WOK74PjOEilosqAyxV2iUFUw==} - '@types/vscode@1.109.0': - resolution: {integrity: sha512-0Pf95rnwEIwDbmXGC08r0B4TQhAbsHQ5UyTIgVgoieDe4cOnf92usuR5dEczb6bTKEp7ziZH4TV1TRGPPCExtw==} + '@types/vscode@1.100.0': + resolution: {integrity: sha512-4uNyvzHoraXEeCamR3+fzcBlh7Afs4Ifjs4epINyUX/jvdk0uzLnwiDY35UKDKnkCHP5Nu3dljl2H8lR6s+rQw==} + + '@types/vscode@1.104.0': + resolution: {integrity: sha512-0KwoU2rZ2ecsTGFxo4K1+f+AErRsYW0fsp6A0zufzGuhyczc2IoKqYqcwXidKXmy2u8YB2GsYsOtiI9Izx3Tig==} + + '@types/vscode@1.63.0': + resolution: {integrity: sha512-iePu1axOi5WSThV6l2TYcciBIpAlMarjBC8H0y8L8ocsZLxh7MttzwFU3pjoItF5fRVGxHS0Hsvje9jO3yJsfw==} + + '@types/vscode@1.81.0': + resolution: {integrity: sha512-YIaCwpT+O2E7WOMq0eCgBEABE++SX3Yl/O02GoMIF2DO3qAtvw7m6BXFYsxnc6XyzwZgh6/s/UG78LSSombl2w==} + + '@types/vscode@1.84.0': + resolution: {integrity: sha512-lCGOSrhT3cL+foUEqc8G1PVZxoDbiMmxgnUZZTEnHF4mC47eKAUtBGAuMLY6o6Ua8PAuNCoKXbqPmJd1JYnQfg==} '@types/webpack-env@1.18.8': resolution: {integrity: sha512-G9eAoJRMLjcvN4I08wB5I7YofOb/kaJNd5uoCMX+LbKXTPCF+ZIHuqTnFaK9Jz1rgs035f9JUPUhNFtqgucy/A==} @@ -10536,6 +11801,12 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + '@types/ws@8.2.1': + resolution: {integrity: sha512-SqQ+LhVZaJi7c7sYVkjWALDigi/Wy7h7Iu72gkQp8Y8OWw/DddEVBrTSKu86pQftV2+Gm8lYM61hadPKqyaIeg==} + + '@types/xml2js@0.4.12': + resolution: {integrity: sha512-CZPpQKBZ8db66EP5hCjwvYrLThgZvnyZrPXK2W+UI1oOaWezGt34iOaUCX4Jah2X8+rQqjvl9VKEIT8TR1I0rA==} + '@types/xml2js@0.4.14': resolution: {integrity: sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==} @@ -10567,6 +11838,14 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/eslint-plugin@8.33.0': + resolution: {integrity: sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.33.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/experimental-utils@2.34.0': resolution: {integrity: sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} @@ -10590,6 +11869,17 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/parser@8.33.0': + resolution: {integrity: sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/project-service@8.33.0': + resolution: {integrity: sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@5.62.0': resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -10598,6 +11888,16 @@ packages: resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.33.0': + resolution: {integrity: sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.33.0': + resolution: {integrity: sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/type-utils@8.32.1': resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -10605,6 +11905,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/type-utils@8.33.0': + resolution: {integrity: sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/types@5.62.0': resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -10613,6 +11920,10 @@ packages: resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.33.0': + resolution: {integrity: sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@2.34.0': resolution: {integrity: sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} @@ -10637,6 +11948,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/typescript-estree@8.33.0': + resolution: {integrity: sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/utils@5.62.0': resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -10650,6 +11967,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/utils@8.33.0': + resolution: {integrity: sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/visitor-keys@5.62.0': resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -10658,17 +11982,21 @@ packages: resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typespec/ts-http-runtime@0.3.3': - resolution: {integrity: sha512-91fp6CAAJSRtH5ja95T1FHSKa8aPW9/Zw6cta81jlZTUw/+Vq8jM/AfF/14h2b71wwR84JUTW/3Y8QPhDAawFA==} + '@typescript-eslint/visitor-keys@8.33.0': + resolution: {integrity: sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typespec/ts-http-runtime@0.3.4': + resolution: {integrity: sha512-CI0NhTrz4EBaa0U+HaaUZrJhPoso8sG7ZFya8uQoBA57fjzrjRSv87ekCjLZOFExN+gXE/z0xuN2QfH4H2HrLQ==} engines: {node: '>=20.0.0'} - '@uiw/codemirror-extensions-basic-setup@4.23.14': - resolution: {integrity: sha512-lCseubZqjN9bFwHJdQlZEKEo2yO1tCiMMVL0gu3ZXwhqMdfnd6ky/fUCYbn8aJkW+cXKVwjEVhpKjOphNiHoNw==} + '@uiw/codemirror-extensions-basic-setup@4.23.12': + resolution: {integrity: sha512-l9vuiXOTFDBetYrRLDmz3jDxQHDsrVAZ2Y6dVfmrqi2AsulsDu+y7csW0JsvaMqo79rYkaIZg8yeqmDgMb7VyQ==} peerDependencies: '@codemirror/lint': '>=6.0.0' - '@uiw/react-codemirror@4.23.14': - resolution: {integrity: sha512-/CmlSh8LGUEZCxg/f78MEkEMehKnVklqJvJlL10AXXrO/2xOyPqHb8SK10GhwOqd0kHhHgVYp4+6oK5S+UIEuQ==} + '@uiw/react-codemirror@4.23.12': + resolution: {integrity: sha512-yseqWdzoAAGAW7i/NiU8YrfSLVOEBjQvSx1KpDTFVV/nn0AlAZoDVTIPEBgdXrPlVUQoCrwgpEaj3uZCklk9QA==} peerDependencies: '@codemirror/theme-one-dark': '>=6.0.0' '@codemirror/view': '>=6.0.0' @@ -10773,6 +12101,10 @@ packages: cpu: [x64] os: [win32] + '@vercel/oidc@3.0.3': + resolution: {integrity: sha512-yNEQvPcVrK9sIe637+I0jD6leluPxzwJKx/Haw6F4H77CdDsszUn5V3o96LPziXkSNE2B83+Z3mjqGKBK/R6Gg==} + engines: {node: '>= 20'} + '@vercel/oidc@3.1.0': resolution: {integrity: sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w==} engines: {node: '>= 20'} @@ -10811,8 +12143,16 @@ packages: resolution: {integrity: sha512-vaTZE65zigWwSWYB6yaZUAyVC/Ux+6U82hnzy/ejuS/KpFifO+0oORNd5yAoPeIRnYjvllM6ES3YlX4K5tUuww==} engines: {vscode: ^1.75.0} - '@vscode/iconv-lite-umd@0.7.1': - resolution: {integrity: sha512-tK6k0DXFHW7q5+GGuGZO+phpAqpxO4WXl+BLc/8/uOk3RsM2ssAL3CQUQDb1TGfwltjsauhN6S4ghYZzs4sPFw==} + '@vscode/iconv-lite-umd@0.7.0': + resolution: {integrity: sha512-bRRFxLfg5dtAyl5XyiVWz/ZBPahpOpPrNYnnHpOpUZvam4tKH35wdhP4Kj6PbM0+KdliOsPzbGWpkxcdpNB/sg==} + + '@vscode/test-electron@2.3.2': + resolution: {integrity: sha512-CRfQIs5Wi5Ok5SUCC3PTvRRXa74LD43cSXHC8EuNlmHHEPaJa/AGrv76brcA1hVSxrdja9tiYwp95Lq8kwY0tw==} + engines: {node: '>=16'} + + '@vscode/test-electron@2.3.4': + resolution: {integrity: sha512-eWzIqXMhvlcoXfEFNWrVu/yYT5w6De+WZXR/bafUQhAp8+8GkQo95Oe14phwiRUPv8L+geAKl/QM2+PoT3YW3g==} + engines: {node: '>=16'} '@vscode/test-electron@2.5.2': resolution: {integrity: sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==} @@ -10871,11 +12211,22 @@ packages: engines: {node: '>= 16'} hasBin: true + '@vscode/vsce@3.7.0': + resolution: {integrity: sha512-LY9r2T4joszRjz4d92ZPl6LTBUPS4IWH9gG/3JUv+1QyBJrveZlcVISuiaq0EOpmcgFh0GgVgKD4rD/21Tu8sA==} + engines: {node: '>= 20'} + hasBin: true + '@vscode/vsce@3.7.1': resolution: {integrity: sha512-OTm2XdMt2YkpSn2Nx7z2EJtSuhRHsTPYsSK59hr3v8jRArK+2UEoju4Jumn1CmpgoBLGI6ReHLJ/czYltNUW3g==} engines: {node: '>= 20'} hasBin: true + '@vscode/webview-ui-toolkit@1.2.0': + resolution: {integrity: sha512-3ai3B2iFK0myqSnEgK9JZd1nKJIR1zgOlQbwSqHS9Y15cyO0diyjsKzcDFCnuBI1UG4vmekWp+xWSTbrh36kLw==} + deprecated: This package has been deprecated, https://github.com/microsoft/vscode-webview-ui-toolkit/issues/561 + peerDependencies: + react: '>=16.9.0' + '@vscode/webview-ui-toolkit@1.4.0': resolution: {integrity: sha512-modXVHQkZLsxgmd5yoP3ptRC/G8NBDD+ob+ngPiWNQdlrH6H1xR/qgOBD85bfU3BhOB5sZzFWBwwhp9/SfoHww==} deprecated: This package has been deprecated, https://github.com/microsoft/vscode-webview-ui-toolkit/issues/561 @@ -10885,48 +12236,102 @@ packages: '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + '@webassemblyjs/ast@1.9.0': + resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==} + '@webassemblyjs/floating-point-hex-parser@1.13.2': resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + '@webassemblyjs/floating-point-hex-parser@1.9.0': + resolution: {integrity: sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==} + '@webassemblyjs/helper-api-error@1.13.2': resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + '@webassemblyjs/helper-api-error@1.9.0': + resolution: {integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==} + '@webassemblyjs/helper-buffer@1.14.1': resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + '@webassemblyjs/helper-buffer@1.9.0': + resolution: {integrity: sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==} + + '@webassemblyjs/helper-code-frame@1.9.0': + resolution: {integrity: sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==} + + '@webassemblyjs/helper-fsm@1.9.0': + resolution: {integrity: sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==} + + '@webassemblyjs/helper-module-context@1.9.0': + resolution: {integrity: sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==} + '@webassemblyjs/helper-numbers@1.13.2': resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} '@webassemblyjs/helper-wasm-bytecode@1.13.2': resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + '@webassemblyjs/helper-wasm-bytecode@1.9.0': + resolution: {integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==} + '@webassemblyjs/helper-wasm-section@1.14.1': resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + '@webassemblyjs/helper-wasm-section@1.9.0': + resolution: {integrity: sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==} + '@webassemblyjs/ieee754@1.13.2': resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + '@webassemblyjs/ieee754@1.9.0': + resolution: {integrity: sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==} + '@webassemblyjs/leb128@1.13.2': resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + '@webassemblyjs/leb128@1.9.0': + resolution: {integrity: sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==} + '@webassemblyjs/utf8@1.13.2': resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + '@webassemblyjs/utf8@1.9.0': + resolution: {integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==} + '@webassemblyjs/wasm-edit@1.14.1': resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + '@webassemblyjs/wasm-edit@1.9.0': + resolution: {integrity: sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==} + '@webassemblyjs/wasm-gen@1.14.1': resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + '@webassemblyjs/wasm-gen@1.9.0': + resolution: {integrity: sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==} + '@webassemblyjs/wasm-opt@1.14.1': resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + '@webassemblyjs/wasm-opt@1.9.0': + resolution: {integrity: sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==} + '@webassemblyjs/wasm-parser@1.14.1': resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + '@webassemblyjs/wasm-parser@1.9.0': + resolution: {integrity: sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==} + + '@webassemblyjs/wast-parser@1.9.0': + resolution: {integrity: sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==} + '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + '@webassemblyjs/wast-printer@1.9.0': + resolution: {integrity: sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==} + '@webpack-cli/configtest@1.2.0': resolution: {integrity: sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==} peerDependencies: @@ -11002,8 +12407,8 @@ packages: engines: {node: '>=10.0.0'} deprecated: this version is no longer supported, please update to at least 0.8.* - '@xmldom/xmldom@0.8.11': - resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} + '@xmldom/xmldom@0.8.10': + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} '@xtuc/ieee754@1.2.0': @@ -11040,10 +12445,6 @@ packages: abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -11052,6 +12453,10 @@ packages: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} + acorn-dynamic-import@2.0.2: + resolution: {integrity: sha512-GKp5tQ8h0KMPWIYGRHHXI1s5tUpZixZ3IHF2jAu42wSCf6In/G873s6/y4DdKdhWvzhu1T6mE1JgvnhAKqyYYQ==} + deprecated: This is probably built in to whatever tool you're using. If you still need it... idk + acorn-globals@3.1.0: resolution: {integrity: sha512-uWttZCk96+7itPxK8xCzY86PnxKTMrReKDqrHzv42VQY0K30PUO8WY13WMOuI+cOdX4EIdzdvQ8k6jkuGRFMYw==} @@ -11113,10 +12518,18 @@ packages: resolution: {integrity: sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==} engines: {node: '>= 0.12.0'} + address@1.1.2: + resolution: {integrity: sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==} + engines: {node: '>= 0.12.0'} + address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} + adm-zip@0.5.14: + resolution: {integrity: sha512-DnyqqifT4Jrcvb8USYjp6FHtBpEIz1mnXu6pTRHZ0RL69LbQYiO+0lDFg5+OKA7U29oWSs3a/i8fhn8ZcceIWg==} + engines: {node: '>=12.0'} + adm-zip@0.5.16: resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} engines: {node: '>=12.0'} @@ -11145,14 +12558,14 @@ packages: resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} engines: {node: '>=12'} - ai@5.0.131: - resolution: {integrity: sha512-KYuhcpiigvPCpFbNzNKcoZ7AWKnTeE++HRqnWqX0MgSbk1xVi0Q5wvfMmnF71n7l5JjytefLV3NkJwbU+7AR/g==} + ai@5.0.76: + resolution: {integrity: sha512-ZCxi1vrpyCUnDbtYrO/W8GLvyacV9689f00yshTIQ3mFFphbD7eIv40a2AOZBv3GGRA7SSRYIDnr56wcS/gyQg==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - ai@6.0.86: - resolution: {integrity: sha512-U2W2LBCHA/pr0Ui7vmmsjBiLEzBbZF3yVHNy7Rbzn7IX+SvoQPFM5rN74hhfVzZoE8zBuGD4nLLk+j0elGacvQ==} + ai@6.0.103: + resolution: {integrity: sha512-4eY6Ut4u41zKH+P2S/oLlZrwxeWQh4kIV1FjE34Jhoiwg+v1AyfSYM8FslXk9rTAtIIaOBimrCUqXacC5RBqJw==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -11160,6 +12573,11 @@ packages: airbnb-js-shims@2.2.1: resolution: {integrity: sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==} + ajv-errors@1.0.1: + resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} + peerDependencies: + ajv: '>=5.0.0' + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} @@ -11171,6 +12589,11 @@ packages: ajv: optional: true + ajv-keywords@2.1.1: + resolution: {integrity: sha512-ZFztHzVRdGLAzJmpUT9LNFLe1YiVOEylcaNpEutM26PVTCtOD919IMfD01CgbRouB42Dd9atjx1HseC15DgOZA==} + peerDependencies: + ajv: ^5.0.0 + ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -11190,6 +12613,10 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + align-text@0.1.4: + resolution: {integrity: sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==} + engines: {node: '>=0.10.0'} + alphanum-sort@1.0.2: resolution: {integrity: sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==} @@ -11218,6 +12645,10 @@ packages: resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==} engines: {node: '>=6'} + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -11243,6 +12674,11 @@ packages: engines: {'0': node >= 0.8.0} hasBin: true + ansi-html@0.0.7: + resolution: {integrity: sha512-JoAxEa1DfP9m2xfB/y2r/aKcwXNlltr4+0QSBC4TrLfcxyvepX2Pv0t/xpgGV5bGsDzCYV8SzjWgyCW0T9yYbA==} + engines: {'0': node >= 0.8.0} + hasBin: true + ansi-html@0.0.9: resolution: {integrity: sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==} engines: {'0': node >= 0.8.0} @@ -11391,6 +12827,9 @@ packages: array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + array-flatten@2.1.2: + resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} + array-includes@3.1.9: resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} engines: {node: '>= 0.4'} @@ -11456,6 +12895,9 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + asn1.js@4.10.1: + resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} + asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} @@ -11467,6 +12909,9 @@ packages: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} + assert@1.5.1: + resolution: {integrity: sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==} + assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} @@ -11542,8 +12987,15 @@ packages: autolinker@3.16.2: resolution: {integrity: sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==} - autoprefixer@10.4.24: - resolution: {integrity: sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==} + autoprefixer@10.4.19: + resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + autoprefixer@10.4.21: + resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -11589,14 +13041,6 @@ packages: azure-devops-node-api@12.5.0: resolution: {integrity: sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==} - b4a@1.7.4: - resolution: {integrity: sha512-u20zJLDaSWpxaZ+zaAkEIB2dZZ1o+DF4T/MRbmsvGp9nletHOyiai19OzX1fF8xUBYsO1bPXxODvcd0978pnug==} - peerDependencies: - react-native-b4a: '*' - peerDependenciesMeta: - react-native-b4a: - optional: true - babel-code-frame@6.26.0: resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==} @@ -11678,12 +13122,6 @@ packages: peerDependencies: '@babel/core': ^7.11.0 - babel-jest@30.2.0: - resolution: {integrity: sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@babel/core': ^7.11.0 || ^8.0.0-0 - babel-loader@10.0.0: resolution: {integrity: sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==} engines: {node: ^18.20.0 || ^20.10.0 || >=22.0.0} @@ -11739,6 +13177,9 @@ packages: babel-plugin-dynamic-import-node@1.1.0: resolution: {integrity: sha512-tTfZbM9Ecwj3GK50mnPrUpinTwA4xXmDiQGCk/aBYbvl1+X8YqldK86wZ1owVJ4u3mrKbRlXMma80J18qwiaTQ==} + babel-plugin-emotion@10.2.2: + resolution: {integrity: sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==} + babel-plugin-extract-import-names@1.6.22: resolution: {integrity: sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==} @@ -11771,10 +13212,6 @@ packages: resolution: {integrity: sha512-DSRm+US/FCB4xPDD6Rnslb6PAF9Bej1DZ+1u4aTiqJnk7ZX12eHsnDiIOqjGvITCq+u6wLqUhgS+faCNbVY8+g==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - babel-plugin-jest-hoist@30.2.0: - resolution: {integrity: sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - babel-plugin-macros@2.8.0: resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==} @@ -11782,11 +13219,16 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} + babel-plugin-named-asset-import@0.3.8: + resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} + peerDependencies: + '@babel/core': ^7.1.0 + babel-plugin-named-exports-order@0.0.2: resolution: {integrity: sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==} - babel-plugin-polyfill-corejs2@0.4.15: - resolution: {integrity: sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==} + babel-plugin-polyfill-corejs2@0.4.16: + resolution: {integrity: sha512-xaVwwSfebXf0ooE11BJovZYKhFjIvQo7TsyVpETuIeH2JHv0k/T6Y5j22pPTvqYqmpkxdlPAJlyJ0tfOJAoMxw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -11805,8 +13247,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - babel-plugin-polyfill-regenerator@0.6.6: - resolution: {integrity: sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==} + babel-plugin-polyfill-regenerator@0.6.7: + resolution: {integrity: sha512-OTYbUlSwXhNgr4g6efMZgsO8//jA61P7ZbRX3iTT53VON8l+WQS8IAUEVo4a4cWknrg2W8Cj4gQhRYNCJ8GkAA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -11985,12 +13427,6 @@ packages: peerDependencies: '@babel/core': ^7.11.0 - babel-preset-jest@30.2.0: - resolution: {integrity: sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@babel/core': ^7.11.0 || ^8.0.0-beta.1 - babel-preset-react-app@3.1.2: resolution: {integrity: sha512-/sh5Qd5T08PYa6t4kuCdKh9tXp6/m/Jwyx7PJTqugsYMfsDUJMlBXOs5EwFODHprzjWrmQ0SydnMZu9FY4MZYg==} peerDependencies: @@ -12037,44 +13473,6 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - bare-events@2.8.2: - resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} - peerDependencies: - bare-abort-controller: '*' - peerDependenciesMeta: - bare-abort-controller: - optional: true - - bare-fs@4.5.4: - resolution: {integrity: sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==} - engines: {bare: '>=1.16.0'} - peerDependencies: - bare-buffer: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - - bare-os@3.6.2: - resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} - engines: {bare: '>=1.14.0'} - - bare-path@3.0.0: - resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - - bare-stream@2.8.0: - resolution: {integrity: sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==} - peerDependencies: - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - bare-events: - optional: true - - bare-url@2.3.2: - resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==} - base16@1.0.0: resolution: {integrity: sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==} @@ -12090,6 +13488,9 @@ packages: resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} engines: {node: '>= 0.8'} + batch-processor@1.0.0: + resolution: {integrity: sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==} + batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} @@ -12114,6 +13515,9 @@ packages: big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + binary-extensions@1.13.1: resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==} engines: {node: '>=0.10.0'} @@ -12132,6 +13536,9 @@ packages: bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bl@1.2.3: + resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -12148,6 +13555,12 @@ packages: blueimp-md5@2.19.0: resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} + bn.js@4.12.3: + resolution: {integrity: sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==} + + bn.js@5.2.3: + resolution: {integrity: sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==} + body-parser@1.20.4: resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -12159,6 +13572,9 @@ packages: bonjour-service@1.3.0: resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} + bonjour@3.5.1: + resolution: {integrity: sha512-xONzj4PfpPJw6xSqCcT2SmQkBOXpUINUz3o3qXcWJwYlXbkZNcNaUae0o5lle7tKt4HHV6dTgkIRhAXZ3nBMsQ==} + boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -12172,6 +13588,10 @@ packages: resolution: {integrity: sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==} engines: {node: '>=4'} + boxen@4.2.0: + resolution: {integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==} + engines: {node: '>=8'} + boxen@5.1.2: resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} engines: {node: '>=10'} @@ -12189,14 +13609,17 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - brace-expansion@5.0.3: - resolution: {integrity: sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==} + brace-expansion@5.0.4: + resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} engines: {node: 18 || 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + browser-assert@1.2.1: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} @@ -12209,9 +13632,29 @@ packages: browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + + browserify-cipher@1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + + browserify-des@1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + + browserify-rsa@4.1.1: + resolution: {integrity: sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==} + engines: {node: '>= 0.10'} + + browserify-sign@4.2.5: + resolution: {integrity: sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==} + engines: {node: '>= 0.10'} + browserify-zlib@0.1.4: resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} + browserify-zlib@0.2.0: + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} + browserslist@1.7.7: resolution: {integrity: sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw==} deprecated: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools. @@ -12222,6 +13665,11 @@ packages: deprecated: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools. hasBin: true + browserslist@4.14.2: + resolution: {integrity: sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + browserslist@4.28.1: resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -12237,12 +13685,21 @@ packages: bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + buffer-alloc-unsafe@1.1.0: + resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} + + buffer-alloc@1.2.0: + resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} + buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-fill@1.0.0: + resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -12250,6 +13707,15 @@ packages: resolution: {integrity: sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==} engines: {node: '>=0.10'} + buffer-indexof@1.1.1: + resolution: {integrity: sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==} + + buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + + buffer@4.9.2: + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -12276,6 +13742,9 @@ packages: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} + builtin-status-codes@3.0.0: + resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -12318,6 +13787,9 @@ packages: cacache@10.0.4: resolution: {integrity: sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==} + cacache@12.0.4: + resolution: {integrity: sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==} + cacache@15.3.0: resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} engines: {node: '>= 10'} @@ -12338,8 +13810,8 @@ packages: resolution: {integrity: sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==} engines: {node: '>=18'} - cacheable@2.3.2: - resolution: {integrity: sha512-w+ZuRNmex9c1TR9RcsxbfTKCjSL0rh1WA5SABbrWprIHeNBdmyQLSYonlDy9gpD+63XT8DgZ/wNh1Smvc9WnJA==} + cacheable@2.3.3: + resolution: {integrity: sha512-iffYMX4zxKp54evOH27fm92hs+DeC1DhXmNVN8Tr94M/iZIV42dqTHSR2Ik4TOSPyOAwKr7Yu3rN9ALoLkbWyQ==} call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} @@ -12385,6 +13857,10 @@ packages: resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} engines: {node: '>=12'} + camelcase@1.2.1: + resolution: {integrity: sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==} + engines: {node: '>=0.10.0'} + camelcase@2.1.1: resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==} engines: {node: '>=0.10.0'} @@ -12411,11 +13887,11 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-db@1.0.30001772: - resolution: {integrity: sha512-2iwecavqVaSnqohEf80JZmnh0eEwtYjZeQk3TSIiyiEZSAUgstzSZfm2yCatJX/Kaq2+EBStn3FVrX8dPjOcPw==} + caniuse-db@1.0.30001777: + resolution: {integrity: sha512-VLuIaP+6xiRx3JyRIFhjIMzlFi6nSVWB1CwgsU4BrsoSi6quDnrdMIHra3QzDOjbePsZ1UjiB1yNJEhmPJewaA==} - caniuse-lite@1.0.30001772: - resolution: {integrity: sha512-mIwLZICj+ntVTw4BT2zfp+yu/AqV6GMKfJVJMx3MwPxs+uk/uj2GLl2dH8LQbjiLDX66amCga5nKFyDgRR43kg==} + caniuse-lite@1.0.30001777: + resolution: {integrity: sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==} canvas@3.2.1: resolution: {integrity: sha512-ej1sPFR5+0YWtaVp6S1N1FVz69TQCqmrkGeRvQxZeAB1nAIcjNTHVwrZtYtWFFBmQsF40/uDLehsW5KuYC99mg==} @@ -12450,8 +13926,12 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@4.5.0: - resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} + center-align@0.1.3: + resolution: {integrity: sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==} + engines: {node: '>=0.10.0'} + + chai@4.3.10: + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} engines: {node: '>=4'} chai@5.3.3: @@ -12526,6 +14006,13 @@ packages: chokidar@1.7.0: resolution: {integrity: sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg==} + chokidar@2.1.8: + resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -12559,6 +14046,10 @@ packages: resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} + cipher-base@1.0.7: + resolution: {integrity: sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==} + engines: {node: '>= 0.10'} + citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} @@ -12575,6 +14066,9 @@ packages: class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + classnames@2.2.6: + resolution: {integrity: sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==} + classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} @@ -12605,10 +14099,6 @@ packages: resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} engines: {node: '>=6'} - cli-color@2.0.4: - resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==} - engines: {node: '>=0.10'} - cli-cursor@2.1.0: resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} engines: {node: '>=4'} @@ -12629,13 +14119,17 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-table3@0.6.0: + resolution: {integrity: sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==} + engines: {node: 10.* || >= 12.*} + cli-table3@0.6.5: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} - cli-truncate@5.1.1: - resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} - engines: {node: '>=20'} + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} cli-width@2.2.1: resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==} @@ -12655,10 +14149,13 @@ packages: resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} engines: {node: '>=18'} - clipboardy@5.3.0: - resolution: {integrity: sha512-EOei1RJTbqXbXhUBMGN8C/Pf+QIPrnDWx9ztlmcW5Hljqj/oVlPrlrDw2O4xh5ViHcvHX3+A0zBrCdcptKTaJA==} + clipboardy@5.3.1: + resolution: {integrity: sha512-fPWgBqpp9ctiOQCkE5yjYGzv11ZU55g6ahEgr3COiio6dXdt1mbchCPXQrSR2Y9sZqfi8L7QD3+UosgXVIuPdg==} engines: {node: '>=20'} + cliui@2.1.0: + resolution: {integrity: sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==} + cliui@3.2.0: resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==} @@ -12835,10 +14332,6 @@ packages: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} - commander@14.0.3: - resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} - engines: {node: '>=20'} - commander@2.13.0: resolution: {integrity: sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==} @@ -12888,6 +14381,9 @@ packages: resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} engines: {node: '>= 0.8.0'} + compute-scroll-into-view@1.0.20: + resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==} + compute-scroll-into-view@2.0.4: resolution: {integrity: sha512-y/ZA3BGnxoM/QHHQ2Uy49CLtnWPbt4tTPpEEZiEmmiWBFKjej7nEyH8Ryz54jH0MLXflUYA3Er2zUxPSJu5R+g==} @@ -12916,6 +14412,10 @@ packages: confusing-browser-globals@1.0.11: resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + connect-history-api-fallback@1.6.0: + resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} + engines: {node: '>=0.8'} + connect-history-api-fallback@2.0.0: resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} engines: {node: '>=0.8'} @@ -12924,6 +14424,9 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} + console-browserify@1.2.0: + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} + console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} @@ -12977,8 +14480,8 @@ packages: copy-to-clipboard@3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} - copy-webpack-plugin@13.0.1: - resolution: {integrity: sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==} + copy-webpack-plugin@13.0.0: + resolution: {integrity: sha512-FgR/h5a6hzJqATDGd9YG41SeDViH+0bkHn6WNXCi5zKAZkeESeSxLySSsFLHqLEVCh0E+rITmCf0dusXWYukeQ==} engines: {node: '>= 18.12.0'} peerDependencies: webpack: ^5.1.0 @@ -13039,8 +14542,8 @@ packages: typescript: optional: true - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + cosmiconfig@9.0.1: + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -13060,20 +14563,35 @@ packages: resolution: {integrity: sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==} engines: {node: '>=8'} + create-ecdh@4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + create-error-class@3.0.2: resolution: {integrity: sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==} engines: {node: '>=0.10.0'} + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + create-jest@29.7.0: resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true + create-react-context@0.3.0: + resolution: {integrity: sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==} + peerDependencies: + prop-types: ^15.0.0 + react: ^0.14.0 || ^15.0.0 || ^16.0.0 + create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - create-storybook@8.6.15: - resolution: {integrity: sha512-zcAJzOwF816mr60agZCZHmytg6xk6ZaiVpWEA03w17xdwXkW6NVr64VlppxrDKMIXZgl/urWXjtbhRSItnskEA==} + create-storybook@8.6.14: + resolution: {integrity: sha512-xrKGHu1w1zbZDTjNJffbLh1W2UrYP7ciHfKw92A3BDU/jmDZwmqKQqCfwzbh2iBc6vTdt/uUn0U76zpgQ6A4XA==} hasBin: true crelt@1.0.6: @@ -13104,10 +14622,18 @@ packages: resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} engines: {node: '>=4.8'} + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + crypto-browserify@3.12.1: + resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==} + engines: {node: '>= 0.10'} + crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} @@ -13164,8 +14690,8 @@ packages: webpack: optional: true - css-loader@7.1.3: - resolution: {integrity: sha512-frbERmjT0UC5lMheWpJmMilnt9GEhbZJN/heUb7/zaJYeIzj5St9HvDcfshzzOqbsS+rYpMk++2SD3vGETDSyA==} + css-loader@7.1.2: + resolution: {integrity: sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==} engines: {node: '>= 18.12.0'} peerDependencies: '@rspack/core': 0.x || 1.x @@ -13189,8 +14715,8 @@ packages: resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} engines: {node: '>=8.0.0'} - css-tree@3.1.0: - resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} css-what@6.2.2: @@ -13254,6 +14780,9 @@ packages: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} + csstype@2.6.21: + resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==} + csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -13334,6 +14863,15 @@ packages: supports-color: optional: true + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -13379,8 +14917,8 @@ packages: dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - dedent@1.7.1: - resolution: {integrity: sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==} + dedent@1.7.2: + resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -13395,6 +14933,10 @@ packages: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} + deep-equal@1.1.2: + resolution: {integrity: sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==} + engines: {node: '>= 0.4'} + deep-equal@2.2.3: resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} engines: {node: '>= 0.4'} @@ -13406,6 +14948,9 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deep-object-diff@1.1.9: + resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -13474,6 +15019,10 @@ packages: resolution: {integrity: sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==} engines: {node: '>=0.10.0'} + del@3.0.0: + resolution: {integrity: sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==} + engines: {node: '>=4'} + del@6.1.1: resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} engines: {node: '>=10'} @@ -13505,6 +15054,9 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + des.js@1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -13551,8 +15103,8 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - dexie@4.3.0: - resolution: {integrity: sha512-5EeoQpJvMKHe6zWt/FSIIuRa3CWlZeIl6zKXt+Lz7BU6RoRRLgX9dZEynRfXrkLcldKYCBiz7xekTEylnie1Ug==} + dexie@4.0.11: + resolution: {integrity: sha512-SOKO002EqlvBYYKQSew3iymBoN2EQ4BDw/3yprjh7kAfFzjBYkaMNa/pZvcA7HSWlcKSQb9XhPe3wKyQ0x4A8A==} diagnostic-channel-publishers@0.3.5: resolution: {integrity: sha512-AOIjw4T7Nxl0G2BoBPhkQ6i7T4bUd9+xvdYizwvG7vVAM1dvr+SDrcUudlmzwH0kbEwdR2V1EcnKT0wAeYLQNQ==} @@ -13577,6 +15129,9 @@ packages: resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==} engines: {node: '>=0.3.1'} + diffie-hellman@5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + dir-glob@2.2.2: resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==} engines: {node: '>=4'} @@ -13591,10 +15146,16 @@ packages: dnd-core@16.0.1: resolution: {integrity: sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==} + dns-equal@1.0.0: + resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} + dns-packet@5.6.1: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} + dns-txt@2.0.2: + resolution: {integrity: sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==} + doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -13625,6 +15186,10 @@ packages: dom-walk@0.1.2: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + domain-browser@1.2.0: + resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} + engines: {node: '>=0.4', npm: '>=1.2'} + domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} @@ -13645,8 +15210,9 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - dompurify@3.2.4: - resolution: {integrity: sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==} + dompurify@3.3.2: + resolution: {integrity: sha512-6obghkliLdmKa56xdbLOpUZ43pAR6xFy1uOrxBaIDjT+yaRuuybLjGS9eVBoSR/UPU5fq3OXClEHLJNGvbxKpQ==} + engines: {node: '>=20'} domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} @@ -13661,6 +15227,9 @@ packages: resolution: {integrity: sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==} engines: {node: '>=4'} + dotenv-defaults@1.1.1: + resolution: {integrity: sha512-6fPRo9o/3MxKvmRZBD3oNFdxODdhJtIy1zcJeUSCs6HCy4tarUpd+G67UTU9tF6OWXeSPqsm4fPAB+2eY9Rt9Q==} + dotenv-expand@10.0.0: resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} engines: {node: '>=12'} @@ -13671,6 +15240,15 @@ packages: dotenv-expand@5.1.0: resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + dotenv-webpack@1.8.0: + resolution: {integrity: sha512-o8pq6NLBehtrqA8Jv8jFQNtG9nhRtVqmoD4yWbgUyoU3+9WBlPe+c2EAiaJok9RB28QvrWvdWLZGeTT5aATDMg==} + peerDependencies: + webpack: ^1 || ^2 || ^3 || ^4 + + dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} + dotenv@16.5.0: resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} engines: {node: '>=12'} @@ -13679,10 +15257,19 @@ packages: resolution: {integrity: sha512-XcaMACOr3JMVcEv0Y/iUM2XaOsATRZ3U1In41/1jjK6vJZ2PZbQ1bzCG8uvaByfaBpl9gqc9QWJovpUGBXLLYQ==} engines: {node: '>=4.6.0'} + dotenv@6.2.0: + resolution: {integrity: sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==} + engines: {node: '>=6'} + dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} + downshift@6.1.12: + resolution: {integrity: sha512-7XB/iaSJVS4T8wGFT3WRXmSF1UlBHAA40DshZtkrIscIN+VC+Lh363skLxFTvJwtNgHxAMDGEHT4xsyQFWL+UA==} + peerDependencies: + react: '>=16.12.0' + downshift@7.6.2: resolution: {integrity: sha512-iOv+E1Hyt3JDdL9yYcOgW7nZ7GQ2Uz6YbggwXvKUSleetYhU2nXD482Rz6CzvM4lvI1At34BYruKAL4swRGxaA==} peerDependencies: @@ -13729,8 +15316,14 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.302: - resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} + electron-to-chromium@1.5.307: + resolution: {integrity: sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==} + + element-resize-detector@1.2.4: + resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==} + + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} email-addresses@5.0.0: resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==} @@ -13759,6 +15352,12 @@ packages: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} + emotion-theming@10.3.0: + resolution: {integrity: sha512-mXiD2Oj7N9b6+h/dC6oLf9hwxbtKHQjoIqtodEyL8CpkN4F3V4IK/BT4D0C7zSs4BBFOu4UlPJbvvBLa88SGEA==} + peerDependencies: + '@emotion/core': ^10.0.27 + react: '>=16.3.0' + enabled@2.0.0: resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} @@ -13782,8 +15381,12 @@ packages: resolution: {integrity: sha512-ZaAux1rigq1e2nQrztHn4h2ugvpzZxs64qneNah+8Mh/K0CRqJFJc+UoXnUsq+1yX+DmQFPPdVqboKAJ89e0Iw==} engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} - enhanced-resolve@5.19.0: - resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} + enhanced-resolve@4.5.0: + resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==} + engines: {node: '>=6.9.0'} + + enhanced-resolve@5.20.0: + resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -13881,8 +15484,8 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - es-toolkit@1.44.0: - resolution: {integrity: sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg==} + es-toolkit@1.45.1: + resolution: {integrity: sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==} es5-ext@0.10.64: resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} @@ -13895,9 +15498,16 @@ packages: es6-iterator@2.0.3: resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + es6-map@0.1.5: + resolution: {integrity: sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==} + es6-promise@4.2.8: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + es6-set@0.1.6: + resolution: {integrity: sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==} + engines: {node: '>=0.12'} + es6-shim@0.35.8: resolution: {integrity: sha512-Twf7I2v4/1tLoIXMT8HlqaBSS5H2wQTs2wx3MNYCI8K1R1/clXyCazrcVCPm/FuO9cyV8+leEaZOWD5C253NDg==} @@ -13916,6 +15526,16 @@ packages: peerDependencies: esbuild: '>=0.12 <1' + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.25.12: resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} engines: {node: '>=18'} @@ -13962,6 +15582,10 @@ packages: engines: {node: '>=6.0'} hasBin: true + escope@3.6.0: + resolution: {integrity: sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==} + engines: {node: '>=0.4.0'} + eslint-config-prettier@6.15.0: resolution: {integrity: sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==} hasBin: true @@ -14045,6 +15669,17 @@ packages: peerDependencies: eslint: '>=8.40' + eslint-plugin-react-refresh@0.4.4: + resolution: {integrity: sha512-eD83+65e8YPVg6603Om2iCIwcQJf/y7++MWm4tACtEswFLYMwxwVWAfwN+e19f5Ad/FOyyNg9Dfi5lXhH3Y3rA==} + peerDependencies: + eslint: '>=7' + + eslint-plugin-react@7.33.1: + resolution: {integrity: sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint-plugin-react@7.37.5: resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} engines: {node: '>=4'} @@ -14066,6 +15701,10 @@ packages: '@typescript-eslint/eslint-plugin': optional: true + eslint-scope@4.0.3: + resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==} + engines: {node: '>=4.0.0'} + eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -14090,8 +15729,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.39.3: - resolution: {integrity: sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==} + eslint@9.39.4: + resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -14174,19 +15813,12 @@ packages: event-emitter@0.3.5: resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} - events-universal@1.0.1: - resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} - events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -14203,6 +15835,9 @@ packages: resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} + evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + exec-sh@0.2.2: resolution: {integrity: sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==} @@ -14278,8 +15913,8 @@ packages: exponential-backoff@3.1.3: resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} - express-rate-limit@8.2.1: - resolution: {integrity: sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==} + express-rate-limit@8.2.2: + resolution: {integrity: sha512-Ybv7bqtOgA914MLwaHWVFXMpMYeR1MQu/D+z2MaLYteqBsTIp9sY3AU7mGNLMJv8eLg8uQMpE20I+L2Lv49nSg==} engines: {node: '>= 16'} peerDependencies: express: '>= 4.11' @@ -14321,11 +15956,6 @@ packages: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} - fantasticon@3.0.0: - resolution: {integrity: sha512-PylulixZA8I0SeiUKtuyOhwrz/ojZTSA1KXddipvEyQXCVrpPMTnSXzaE9nXXK7nCjJWFkqoBAQ1aBdaxMltrg==} - engines: {node: '>= 16.0.0'} - hasBin: true - fast-deep-equal@1.1.0: resolution: {integrity: sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==} @@ -14335,9 +15965,6 @@ packages: fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - fast-glob@2.2.7: resolution: {integrity: sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==} engines: {node: '>=4.0.0'} @@ -14364,8 +15991,8 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fast-xml-parser@5.3.7: - resolution: {integrity: sha512-JzVLro9NQv92pOM/jTCR6mHlJh2FGwtomH8ZQjhFj/R29P2Fnj38OgPJVtcvYw6SuKClhgYuwUZf5b3rd8u2mA==} + fast-xml-parser@5.3.8: + resolution: {integrity: sha512-53jIF4N6u/pxvaL1eb/hEZts/cFLWZ92eCfLrNyCI0k38lettCG/Bs40W9pPwoPXyHQlKu2OUbQtiEIZK/J6Vw==} hasBin: true fastest-levenshtein@1.0.16: @@ -14384,6 +16011,10 @@ packages: fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + faye-websocket@0.10.0: + resolution: {integrity: sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==} + engines: {node: '>=0.4.0'} + faye-websocket@0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} @@ -14428,16 +16059,24 @@ packages: fetch-retry@5.0.6: resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} + figgy-pudding@3.5.2: + resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==} + deprecated: This module is no longer supported. + figures@2.0.0: resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} engines: {node: '>=4'} + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + figures@6.1.0: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} - file-entry-cache@11.1.2: - resolution: {integrity: sha512-N2WFfK12gmrK1c1GXOqiAJ1tc5YE+R53zvQ+t5P8S5XhnmKYVB5eZEiLNZKDSmoG8wqqbF9EXYBBW/nef19log==} + file-entry-cache@10.1.4: + resolution: {integrity: sha512-5XRUFc0WTtUbjfGzEwXc42tiGxQHBmtbUG1h9L2apu4SulCGN3Hqm//9D6FAolf8MYNL7f/YlJl9vy08pj5JuA==} file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} @@ -14464,9 +16103,9 @@ packages: file-system-cache@2.3.0: resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} - file-type@18.7.0: - resolution: {integrity: sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==} - engines: {node: '>=14.16'} + file-type@21.3.1: + resolution: {integrity: sha512-SrzXX46I/zsRDjTb82eucsGg0ODq2NpGDp4HcsFKApPy8P8vACjpJRDoGGMfEzhFC0ry61ajd7f72J3603anBA==} + engines: {node: '>=20'} file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -14478,9 +16117,8 @@ packages: filehound@1.17.6: resolution: {integrity: sha512-5q4zjFkI8W2zLmvbvyvI//K882IpEj6sMNXPUQlk5H6W4Wh3OSSylEAIEmMLELP9G7ileYjTKPXOn0YzzS55Lg==} - filelist@1.0.5: - resolution: {integrity: sha512-ct/ckWBV/9Dg3MlvCXsLcSUyoWwv9mCKqlhLNB2DAuXR/NZolSXlQqP5dyy6guWlPXBhodZyZ5lGPQcbQDxrEQ==} - engines: {node: 20 || >=22} + filelist@1.0.6: + resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==} filename-reserved-regex@2.0.0: resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} @@ -14497,6 +16135,10 @@ packages: resolution: {integrity: sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==} engines: {node: '>= 0.4.0'} + filesize@6.1.0: + resolution: {integrity: sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==} + engines: {node: '>= 0.4.0'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -14528,8 +16170,8 @@ packages: find-index@0.1.1: resolution: {integrity: sha512-uJ5vWrfBKMcE6y2Z8834dwEZj9mNGxYa3t3I53OwFeuZ8D9oc2E5zcsrkuhX6h4iYrjhiv0T3szQmxlAV9uxDg==} - find-process@1.4.11: - resolution: {integrity: sha512-mAOh9gGk9WZ4ip5UjV0o6Vb4SrfnAmtsFNzkMRH9HQiFXVQnDyQFrSHTK5UoG6E+KV+s+cIznbtwpfN41l2nFA==} + find-process@1.4.10: + resolution: {integrity: sha512-ncYFnWEIwL7PzmrK1yZtaccN8GhethD37RzBHG6iOZoFYB4vSmLLXfeWJjeN5nMvCJMjOtBvBBF8OgxEcikiZg==} hasBin: true find-root@1.1.0: @@ -14578,15 +16220,15 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.0: + resolution: {integrity: sha512-kC6Bb+ooptOIvWj5B63EQWkF0FEnNjV2ZNkLMLZRDDduIiWeFF4iKnslwhiWxjAdbg4NzTNo6h0qLuvFrcx+Sw==} flatten@1.0.3: resolution: {integrity: sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==} deprecated: flatten is deprecated in favor of utility frameworks such as lodash. - flow-parser@0.302.0: - resolution: {integrity: sha512-Y7AMBG/MTixQ/sTSCSGtXrYtqocpWbu6YbsScv0icWSmllxz8hIYaJUMK6WopAW1x/rMD0dhihcsWnXJlpYphg==} + flow-parser@0.304.0: + resolution: {integrity: sha512-JjHRBxQX5b5pAn0nwr/U29U+uodOQzIyAKRAFEaXpB2BUkNyW76IRRD0eCEKvZGj23sJ+zDyPuwGGRGNwWW5vQ==} engines: {node: '>=0.4.0'} flush-write-stream@1.1.1: @@ -14670,6 +16312,10 @@ packages: resolution: {integrity: sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==} engines: {node: '>= 18'} + form-data@2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + form-data@4.0.5: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} @@ -14686,8 +16332,22 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - fraction.js@5.3.4: - resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + framer-motion@11.18.2: + resolution: {integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true framer-motion@6.5.1: resolution: {integrity: sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw==} @@ -14709,6 +16369,9 @@ packages: from2@2.3.0: resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fs-extra@0.30.0: resolution: {integrity: sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==} @@ -14724,8 +16387,12 @@ packages: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} - fs-extra@11.3.3: - resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + + fs-extra@11.3.4: + resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==} engines: {node: '>=14.14'} fs-extra@3.0.1: @@ -14790,6 +16457,10 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + fuse.js@3.6.1: + resolution: {integrity: sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==} + engines: {node: '>=6'} + gauge@2.7.4: resolution: {integrity: sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==} deprecated: This package is no longer supported. @@ -14804,6 +16475,14 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This package is no longer supported. + gaxios@7.1.3: + resolution: {integrity: sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==} + engines: {node: '>=18'} + + gcp-metadata@8.1.2: + resolution: {integrity: sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==} + engines: {node: '>=18'} + generator-function@2.0.1: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} @@ -14914,6 +16593,10 @@ packages: github-slugger@1.5.0: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} + glob-base@0.3.0: + resolution: {integrity: sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==} + engines: {node: '>=0.10.0'} + glob-parent@2.0.0: resolution: {integrity: sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==} @@ -14955,6 +16638,12 @@ packages: deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true + glob@11.0.2: + resolution: {integrity: sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==} + engines: {node: 20 || >=22} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + glob@11.1.0: resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} engines: {node: 20 || >=22} @@ -14965,6 +16654,10 @@ packages: resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me @@ -15012,6 +16705,10 @@ packages: globalyzer@0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + globby@11.0.1: + resolution: {integrity: sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==} + engines: {node: '>=10'} + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -15028,6 +16725,10 @@ packages: resolution: {integrity: sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==} engines: {node: '>=0.10.0'} + globby@6.1.0: + resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} + engines: {node: '>=0.10.0'} + globby@9.2.0: resolution: {integrity: sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==} engines: {node: '>=6'} @@ -15038,6 +16739,14 @@ packages: globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + google-auth-library@10.6.1: + resolution: {integrity: sha512-5awwuLrzNol+pFDmKJd0dKtZ0fPLAtoA5p7YO4ODsDu6ONJUVqbYwvv8y2ZBO5MBNp9TJXigB19710kYpBPdtA==} + engines: {node: '>=18'} + + google-logging-utils@1.1.3: + resolution: {integrity: sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==} + engines: {node: '>=14'} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -15083,13 +16792,16 @@ packages: peerDependencies: graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 - graphql@16.12.0: - resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} + graphql@16.11.0: + resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} growly@1.3.0: resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} + gud@1.0.0: + resolution: {integrity: sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==} + gunzip-maybe@1.4.2: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} hasBin: true @@ -15098,6 +16810,13 @@ packages: resolution: {integrity: sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w==} engines: {node: '>=0.12.0'} + gzip-size@5.1.1: + resolution: {integrity: sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==} + engines: {node: '>=6'} + + handle-thing@1.2.5: + resolution: {integrity: sha512-Ld9EYcBflMUF6SsJLGDADVH50jSzLNIUUrOFlFGK/zwqimATg9+wY4jsLWCR7DZSxt2BfK0+liHUMdoR11bjLg==} + handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} @@ -15134,6 +16853,10 @@ packages: resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} engines: {node: '>=0.10.0'} + has-flag@2.0.0: + resolution: {integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==} + engines: {node: '>=0.10.0'} + has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -15168,6 +16891,17 @@ packages: resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} engines: {node: '>= 0.4.0'} + hash-base@3.0.5: + resolution: {integrity: sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==} + engines: {node: '>= 0.10'} + + hash-base@3.1.2: + resolution: {integrity: sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==} + engines: {node: '>= 0.8'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + hashery@1.5.0: resolution: {integrity: sha512-nhQ6ExaOIqti2FDWoEMWARUqIKyjr2VcZzXShrI+A3zpeiuPWzx6iPftt44LhP74E5sW36B75N6VHbvRtpvO6Q==} engines: {node: '>=20'} @@ -15179,6 +16913,15 @@ packages: hast-to-hyperscript@9.0.1: resolution: {integrity: sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==} + hast-util-from-dom@5.0.1: + resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} + + hast-util-from-html-isomorphic@2.0.0: + resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + hast-util-from-parse5@6.0.1: resolution: {integrity: sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==} @@ -15188,6 +16931,9 @@ packages: hast-util-from-parse5@8.0.3: resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + hast-util-parse-selector@2.2.5: resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} @@ -15218,6 +16964,9 @@ packages: hast-util-to-parse5@8.0.1: resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} @@ -15250,6 +16999,9 @@ packages: highlightjs-vue@1.0.0: resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} @@ -15261,8 +17013,8 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} - hono@4.12.1: - resolution: {integrity: sha512-hi9afu8g0lfJVLolxElAZGANCTTl6bewIdsRNhaywfP9K8BPf++F2z6OLrYGIinUwpRKzbZHMhPwvc0ZEpAwGw==} + hono@4.12.7: + resolution: {integrity: sha512-jq9l1DM0zVIvsm3lv9Nw9nlJnMNPOcAtsbsgiUhWcFzPE99Gvo6yRTlszSLLYacMeQ6quHD6hMfId8crVHvexw==} engines: {node: '>=16.9.0'} hookified@1.15.1: @@ -15286,6 +17038,9 @@ packages: resolution: {integrity: sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==} engines: {node: '>=14'} + htm@3.1.1: + resolution: {integrity: sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==} + html-comment-regex@1.1.2: resolution: {integrity: sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==} @@ -15296,6 +17051,9 @@ packages: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} + html-entities@1.4.0: + resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} + html-entities@2.6.0: resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} @@ -15395,6 +17153,9 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} + http-proxy-middleware@0.17.4: + resolution: {integrity: sha512-JtH3UZju4oXDdca28/kknbm/CFmt35vy0YV0PNOMWWWpn3rT9WV95IXN451xwBGSjy9L0Cah1O9TCMytboLdfw==} + http-proxy-middleware@2.0.9: resolution: {integrity: sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==} engines: {node: '>=12.0.0'} @@ -15421,6 +17182,9 @@ packages: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} + https-browserify@1.0.0: + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} + https-proxy-agent@4.0.0: resolution: {integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==} engines: {node: '>= 6.0.0'} @@ -15522,12 +17286,12 @@ packages: immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - immutable@3.8.2: - resolution: {integrity: sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==} - engines: {node: '>=0.10.0'} + immer@8.0.1: + resolution: {integrity: sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==} - immutable@5.1.4: - resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} + immutable@3.8.3: + resolution: {integrity: sha512-AUY/VyX0E5XlibOmWt10uabJzam1zlYjwiEgQSDc5+UIkFNaF9WM0JxXKaNMGf+F/ffUF+7kRKXM9A7C0xXqMg==} + engines: {node: '>=0.10.0'} import-cwd@3.0.0: resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} @@ -15545,6 +17309,11 @@ packages: resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==} engines: {node: '>=4'} + import-local@1.0.0: + resolution: {integrity: sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==} + engines: {node: '>=4'} + hasBin: true + import-local@3.2.0: resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} @@ -15598,6 +17367,11 @@ packages: inquirer@3.3.0: resolution: {integrity: sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==} + internal-ip@1.2.0: + resolution: {integrity: sha512-DzGfTasXPmwizQP4XV2rR6r2vp8TjlOpMnJqG9Iy2i1pl1lkZdZj5rSpIc7YFGX2nS46PPgAGEyT+Q5hE2FB2g==} + engines: {node: '>=0.10.0'} + hasBin: true + internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -15618,8 +17392,8 @@ packages: resolution: {integrity: sha512-fn4bQ0Xq8FTej09YC/jqKZwtijpvARlRp6wxL5WTA6yPe2YWSJ5RJh7Nm79rK2qB0wr6iDQzH60XGq5V/7u8YQ==} deprecated: The Intersection Observer polyfill is no longer needed and can safely be removed. Intersection Observer has been Baseline since 2019. - intl-messageformat@10.7.18: - resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==} + intl-messageformat@10.7.16: + resolution: {integrity: sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==} invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -15628,10 +17402,6 @@ packages: resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==} engines: {node: '>=0.10.0'} - ip-address@10.0.1: - resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} - engines: {node: '>= 12'} - ip-address@10.1.0: resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} @@ -15644,6 +17414,9 @@ packages: resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} engines: {node: '>=8'} + ip@1.1.9: + resolution: {integrity: sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==} + ip@2.0.1: resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==} @@ -15706,6 +17479,9 @@ packages: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} @@ -15796,6 +17572,10 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + is-fullwidth-code-point@5.1.0: resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} engines: {node: '>=18'} @@ -15868,8 +17648,8 @@ packages: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} - is-network-error@1.3.0: - resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==} + is-network-error@1.3.1: + resolution: {integrity: sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==} engines: {node: '>=16'} is-npm@1.0.0: @@ -15950,9 +17730,6 @@ packages: resolution: {integrity: sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==} engines: {node: '>=0.10.0'} - is-promise@2.2.2: - resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} @@ -15975,6 +17752,10 @@ packages: resolution: {integrity: sha512-1d50EJ7ipFxb9bIx213o6KPaJmHN8f+nR48UZWxWVzDx+NA3kpscxi02oQX3rGkEaLBi9m3ZayHngQc3+bBX9w==} engines: {node: '>=0.10.0'} + is-root@2.1.0: + resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} + engines: {node: '>=6'} + is-set@2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} @@ -16073,8 +17854,8 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} - is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} is2@2.0.9: @@ -16413,10 +18194,6 @@ packages: resolution: {integrity: sha512-p4bXAhXTawTsADgQgTpbymdLaTyPW1xWNu1oIGG7/N3LIAbZVkH2JMJqS8/IUcnGR8Kc7WFE+vWbJvsqGCWZXw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-haste-map@30.2.0: - resolution: {integrity: sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-jasmine2@20.0.4: resolution: {integrity: sha512-XNHvFt9iljOaSSZU5t5dC9kJtrcM+KnVbw0Qa/BpGZlrorqS+m0iWiAJO2xXcGMimCmhT4NLZAS1v/JBGWR8Cg==} @@ -16714,10 +18491,6 @@ packages: resolution: {integrity: sha512-VZvxfWIybIvwK8N/Bsfe43LfQgd/rD0c4h5nLUx78CAqPxIQcW2qDjsVAC53iUR8yxzFIeCFFvWOh8en8hGzdg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-worker@30.2.0: - resolution: {integrity: sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest@20.0.4: resolution: {integrity: sha512-MU1kGBtzhDHwasL1BbuFmlIlwseDXy18p/M3hB7ehifac8FCbj6nJf8ihGtBA594tlUcktotHHd8z42V47ZB1g==} engines: {node: '>= 4'} @@ -16759,8 +18532,8 @@ packages: joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} - jose@6.1.3: - resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + jose@6.2.0: + resolution: {integrity: sha512-xsfE1TcSCbUdo6U07tR0mvhg0flGxU8tPLbF03mirl2ukGQENhUg4ubGYQnhVH0b5stLlPM+WOqDkEl1R1y5sQ==} jpjs@1.2.1: resolution: {integrity: sha512-GxJWybWU4NV0RNKi6EIqk6IRPOTqd/h+U7sbtyuD7yUISUzV78LdHnq2xkevJsTlz/EImux4sWj+wfMiwKLkiw==} @@ -16788,6 +18561,10 @@ packages: jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + jschardet@3.0.0: + resolution: {integrity: sha512-lJH6tJ77V8Nzd5QWRkFYCLc13a3vADkh3r/Fi8HupZGWk2OVVDfnZP8V/VgQgZ+lzW0kG2UGb5hFgt3V3ndotQ==} + engines: {node: '>=0.1.90'} + jschardet@3.1.4: resolution: {integrity: sha512-/kmVISmrwVwtyYU40iQUOp3SUPk2dhNCMsZBQX0R1/jZ8maaXJ/oZIzUOiyOqcgtLnETFKYChbJ5iDC/eWmFHg==} engines: {node: '>=0.1.90'} @@ -16842,9 +18619,18 @@ packages: engines: {node: '>=6'} hasBin: true + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-loader@0.5.7: + resolution: {integrity: sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==} + + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -16934,16 +18720,20 @@ packages: resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} engines: {node: '>=8'} - jwa@1.4.2: - resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - jws@3.2.3: - resolution: {integrity: sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==} + jws@4.0.1: + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} jwt-decode@4.0.0: resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} engines: {node: '>=18'} + katex@0.16.38: + resolution: {integrity: sha512-cjHooZUmIAUmDsHBN+1n8LaZdpmbj03LtYeYPyuYB7OuloiaeaV6N4LcfjcnHVzGWjVQmKrxxTrpDcmSzEZQwQ==} + hasBin: true + keytar@7.9.0: resolution: {integrity: sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==} @@ -16957,6 +18747,13 @@ packages: resolution: {integrity: sha512-e0SVOV5jFo0mx8r7bS29maVWp17qGqLBZ5ricNSajON6//kmb7qqqNnml4twNE8Dtj97UQD+gNFOaipS/q1zzQ==} hasBin: true + killable@1.0.1: + resolution: {integrity: sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==} + + kind-of@3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -16972,8 +18769,8 @@ packages: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} - known-css-properties@0.37.0: - resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} + known-css-properties@0.36.0: + resolution: {integrity: sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==} kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} @@ -16989,8 +18786,12 @@ packages: resolution: {integrity: sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w==} engines: {node: '>=4'} - launch-editor@2.12.0: - resolution: {integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==} + launch-editor@2.13.1: + resolution: {integrity: sha512-lPSddlAAluRKJ7/cjRFoXUFzaX7q/YKI7yPHuEvSJVqoXvFnJov1/Ud87Aa4zULIbA9Nja4mSPK8l0z/7eV2wA==} + + lazy-cache@1.0.4: + resolution: {integrity: sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==} + engines: {node: '>=0.10.0'} lazy-universal-dotenv@3.0.1: resolution: {integrity: sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==} @@ -17047,22 +18848,30 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - lint-staged@16.2.7: - resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==} - engines: {node: '>=20.17'} + lint-staged@16.0.0: + resolution: {integrity: sha512-sUCprePs6/rbx4vKC60Hez6X10HPkpDJaGcy3D1NdwR7g1RcNkWL8q9mJMreOqmHBTs+1sNFp+wOiX9fr+hoOQ==} + engines: {node: '>=20.18'} hasBin: true listenercount@1.0.1: resolution: {integrity: sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==} - listr2@9.0.5: - resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} - engines: {node: '>=20.0.0'} + listr2@8.3.3: + resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} + engines: {node: '>=18.0.0'} load-json-file@1.1.0: resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==} engines: {node: '>=0.10.0'} + load-json-file@2.0.0: + resolution: {integrity: sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==} + engines: {node: '>=4'} + + loader-runner@2.4.0: + resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + loader-runner@4.3.1: resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} engines: {node: '>=6.11.5'} @@ -17074,6 +18883,10 @@ packages: resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} engines: {node: '>=4.0.0'} + loader-utils@2.0.0: + resolution: {integrity: sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==} + engines: {node: '>=8.9.0'} + loader-utils@2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} @@ -17235,6 +19048,10 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + longest@1.0.1: + resolution: {integrity: sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==} + engines: {node: '>=0.10.0'} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -17290,9 +19107,6 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - lru-queue@0.1.0: - resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} - lucide-react@0.523.0: resolution: {integrity: sha512-rUjQoy7egZT9XYVXBK1je9ckBnNp7qzRZOhLQx5RcEp2dCGlXo+mv6vf7Am4LimEcFBJIIZzSGfgTqc9QCrPSw==} peerDependencies: @@ -17381,6 +19195,12 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + markdown-to-jsx@6.11.4: + resolution: {integrity: sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw==} + engines: {node: '>= 4'} + peerDependencies: + react: '>= 0.14.0' + markdown-to-jsx@7.7.17: resolution: {integrity: sha512-7mG/1feQ0TX5I7YyMZVDgCC/y2I3CiEhIRQIhyov9nGBP5eoVrOXXHuL5ZP8GRfxVZKRiXWJgwXkb9It+nQZfQ==} engines: {node: '>= 10'} @@ -17403,6 +19223,9 @@ packages: mathml-tag-names@2.1.3: resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + mdast-squeeze-paragraphs@4.0.0: resolution: {integrity: sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==} @@ -17439,6 +19262,9 @@ packages: mdast-util-gfm@3.1.0: resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + mdast-util-math@3.0.0: + resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} + mdast-util-mdx-expression@2.0.1: resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} @@ -17475,8 +19301,8 @@ packages: mdn-data@2.0.14: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - mdn-data@2.12.2: - resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} mdurl@1.0.1: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} @@ -17504,12 +19330,8 @@ packages: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} - memfs@4.56.10: - resolution: {integrity: sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==} - - memoizee@0.4.17: - resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} - engines: {node: '>=0.12'} + memfs@4.56.11: + resolution: {integrity: sha512-/GodtwVeKVIHZKLUSr2ZdOxKBC5hHki4JNCU22DoCGPEHr5o2PD5U721zvESKyWwCfTfavFl9WZYgA13OAYK0g==} memoizerific@1.11.3: resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} @@ -17517,6 +19339,10 @@ packages: memory-fs@0.4.1: resolution: {integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==} + memory-fs@0.5.0: + resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + meow@10.1.5: resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -17603,6 +19429,9 @@ packages: micromark-extension-gfm@3.0.0: resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + micromark-extension-math@3.1.0: + resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} + micromark-extension-mdx-expression@3.0.1: resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} @@ -17688,6 +19517,10 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + miller-rabin@4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + mime-db@1.33.0: resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} engines: {node: '>= 0.6'} @@ -17757,8 +19590,8 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - mini-css-extract-plugin@2.10.0: - resolution: {integrity: sha512-540P2c5dYnJlyJxTaSloliZexv8rji6rY8FhQN+WF/82iHQfA23j/xtJx97L+mXOML27EqksSek/g4eK7jaL3g==} + mini-css-extract-plugin@2.9.2: + resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 @@ -17770,25 +19603,25 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - minimatch@10.2.2: - resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} - engines: {node: 18 || 20 || >=22} + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - minimatch@3.0.3: - resolution: {integrity: sha512-NyXjqu1IwcqH6nv5vmMtaG3iw7kdV3g6MwlUBZkc3Vn5b5AMIWYKfptvzipoyFfhlfOgBQ9zoTxQMravF1QTnw==} + minimatch@10.2.3: + resolution: {integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==} + engines: {node: 18 || 20 || >=22} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.4: + resolution: {integrity: sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==} - minimatch@3.1.3: - resolution: {integrity: sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - minimatch@5.1.7: - resolution: {integrity: sha512-FjiwU9HaHW6YB3H4a1sFudnv93lvydNjz2lmyUXR6IwKhGI+bgL3SOZrBGn6kvvX2pJvhEkGSGjyTHN47O4rqA==} + minimatch@5.1.8: + resolution: {integrity: sha512-7RN35vit8DeBclkofOVmBY0eDAZZQd1HzmukRdSyz95CRh8FT54eqnbj0krQr3mrHR6sfRyYkyhwBWjoV5uqlQ==} engines: {node: '>=10'} - minimatch@9.0.6: - resolution: {integrity: sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==} + minimatch@9.0.7: + resolution: {integrity: sha512-MOwgjc8tfrpn5QQEvjijjmDVtMw2oL88ugTevzxQnzRLm6l3fVEF2gzU0kYeYYKD8C66+IdGX6peJ4MyUlUnPg==} engines: {node: '>=16 || 14 >=14.17'} minimist-options@4.1.0: @@ -17838,6 +19671,10 @@ packages: resolution: {integrity: sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==} engines: {node: '>=4.0.0'} + mississippi@3.0.0: + resolution: {integrity: sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==} + engines: {node: '>=4.0.0'} + mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} @@ -17855,14 +19692,24 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.8.0: - resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + mlly@1.8.1: + resolution: {integrity: sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==} - mocha@10.8.2: - resolution: {integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==} + mocha@10.2.0: + resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} engines: {node: '>= 14.0.0'} hasBin: true + mocha@11.2.2: + resolution: {integrity: sha512-VlSBxrPYHK4YNOEbFdkCxHQbZMoNzBkoPprqtZRW6311EUF/DlSxoycE2e/2NtRk4WKkIXzyrXDTrlikJMWgbw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + + mocha@11.4.0: + resolution: {integrity: sha512-O6oi5Y9G6uu8f9iqXR6iKNLWHLRex3PKbmHynfpmUnMJJGrdgXh8ZmS85Ei5KR2Gnl+/gQ9s+Ktv5CqKybNw4A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + mocha@11.5.0: resolution: {integrity: sha512-VKDjhy6LMTKm0WgNEdlY77YVsD49LZnPSXJAaPNL9NRYQADxvORsyG1DIQY6v53BKTnlNbEE2MbVCDbnxr4K3w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -17894,6 +19741,12 @@ packages: selenium-webdriver: '>=4.6.1' typescript: '>=4.6.2' + motion-dom@11.18.1: + resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==} + + motion-utils@11.18.1: + resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==} + mousetrap@1.6.5: resolution: {integrity: sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==} @@ -17914,6 +19767,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + multicast-dns-service-types@1.1.0: + resolution: {integrity: sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==} + multicast-dns@7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true @@ -17934,8 +19790,8 @@ packages: nan@2.25.0: resolution: {integrity: sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g==} - nano-spawn@2.0.0: - resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==} + nano-spawn@1.0.3: + resolution: {integrity: sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==} engines: {node: '>=20.17'} nanoid@3.3.11: @@ -17943,6 +19799,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.3: + resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@5.1.6: resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} engines: {node: ^18 || >=20} @@ -17959,6 +19820,9 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true + native-url@0.2.6: + resolution: {integrity: sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA==} + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -18012,8 +19876,8 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-addon-api@8.5.0: - resolution: {integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==} + node-addon-api@8.6.0: + resolution: {integrity: sha512-gBVjCaqDlRUk0EwoPNKzIr9KkS9041G/q31IBShPs1Xz6UTA+EXdZADbzqAJQrpDRq71CIMnOP5VMut3SL0z5Q==} engines: {node: ^18 || ^20 || >= 21} node-dir@0.1.17: @@ -18025,6 +19889,10 @@ packages: engines: {node: '>=10.5.0'} deprecated: Use your platform's native DOMException instead + node-exports-info@1.6.0: + resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} + engines: {node: '>= 0.4'} + node-fetch-commonjs@3.3.2: resolution: {integrity: sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -18032,8 +19900,8 @@ packages: node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} - node-fetch@2.6.13: - resolution: {integrity: sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==} + node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -18054,6 +19922,10 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-forge@0.10.0: + resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} + engines: {node: '>= 6.0.0'} + node-gyp-build@4.8.4: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true @@ -18071,6 +19943,9 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + node-libs-browser@2.2.1: + resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==} + node-loader@2.0.0: resolution: {integrity: sha512-I5VN34NO4/5UYJaUBtkrODPWxbobrE4hgDqPrjB25yPkonFhCmZ146vTH+Zg417E9Iwoh1l/MbRs1apc5J295Q==} engines: {node: '>= 10.13.0'} @@ -18089,8 +19964,11 @@ packages: node-notifier@6.0.0: resolution: {integrity: sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==} - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-releases@1.1.77: + resolution: {integrity: sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==} + + node-releases@2.0.36: + resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} node-sarif-builder@3.4.0: resolution: {integrity: sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==} @@ -18243,6 +20121,10 @@ packages: resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} engines: {node: '>= 0.4'} + object.hasown@1.1.4: + resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + engines: {node: '>= 0.4'} + object.values@1.2.1: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} @@ -18311,6 +20193,10 @@ packages: resolution: {integrity: sha512-Jd/GpzPyHF4P2/aNOVmS3lfMSWV9J7cOhCG1s08XCEAsPkB7lp6ddiU0J7XzyQRDUh8BqJ7PchfINjR8jyofRQ==} engines: {node: '>=4'} + opn@5.5.0: + resolution: {integrity: sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==} + engines: {node: '>=4'} + optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} @@ -18337,6 +20223,9 @@ packages: original@1.0.2: resolution: {integrity: sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==} + os-browserify@0.3.0: + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} + os-homedir@1.0.2: resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} engines: {node: '>=0.10.0'} @@ -18360,6 +20249,9 @@ packages: outvariant@1.4.0: resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} + overlayscrollbars@1.13.3: + resolution: {integrity: sha512-1nB/B5kaakJuHXaLXLRK0bUIilWhUGT6q5g+l2s5vqYdLle/sd0kscBHkQC1kuuDg9p9WR4MTdySDOPbeL/86g==} + own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -18513,6 +20405,10 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-asn1@5.1.9: + resolution: {integrity: sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==} + engines: {node: '>= 0.10'} + parse-entities@2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} @@ -18570,6 +20466,9 @@ packages: pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + path-browserify@0.0.1: + resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==} + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -18638,6 +20537,10 @@ packages: resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==} engines: {node: '>=0.10.0'} + path-type@2.0.0: + resolution: {integrity: sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==} + engines: {node: '>=4'} + path-type@3.0.0: resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} engines: {node: '>=4'} @@ -18674,14 +20577,14 @@ packages: resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} engines: {node: '>= 14.16'} + pbkdf2@3.1.5: + resolution: {integrity: sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==} + engines: {node: '>= 0.10'} + pdfjs-dist@4.8.69: resolution: {integrity: sha512-IHZsA4T7YElCKNNXtiLgqScw4zPd3pG9do8UrznC757gMd7UPeHSL2qwNNMJo4r79fl8oj1Xx+1nh2YkzdMpLQ==} engines: {node: '>=18'} - peek-readable@5.4.2: - resolution: {integrity: sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==} - engines: {node: '>=14.16'} - peek-stream@1.1.3: resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} @@ -18772,6 +20675,10 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + pkijs@3.3.3: resolution: {integrity: sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw==} engines: {node: '>=16.0.0'} @@ -18811,8 +20718,12 @@ packages: popmotion@11.0.3: resolution: {integrity: sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==} - portfinder@1.0.38: - resolution: {integrity: sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==} + portfinder@1.0.32: + resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} + engines: {node: '>= 0.12.0'} + + portfinder@1.0.37: + resolution: {integrity: sha512-yuGIEjDAYnnOex9ddMnKZEMFE0CcGo6zbfzDklkmT1m5z734ss6JMzN9rNB3+RR7iS+F10D4/BVIaXOyh8PQKw==} engines: {node: '>= 10.12'} possible-typed-array-names@1.1.0: @@ -18952,8 +20863,8 @@ packages: postcss: ^7.0.0 || ^8.0.1 webpack: ^4.0.0 || ^5.0.0 - postcss-loader@8.2.0: - resolution: {integrity: sha512-tHX+RkpsXVcc7st4dSdDGliI+r4aAQDuv+v3vFYHixb6YgjreG5AG4SEB0kDK8u2s6htqEEpKlkhSBUTvWKYnA==} + postcss-loader@8.1.1: + resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} engines: {node: '>= 18.12.0'} peerDependencies: '@rspack/core': 0.x || 1.x @@ -19236,8 +21147,12 @@ packages: resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} engines: {node: '>=6.0.0'} - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.4: + resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==} engines: {node: ^10 || ^12 || >=14} powershell-utils@0.2.0: @@ -19275,6 +21190,11 @@ packages: engines: {node: '>=4'} hasBin: true + prettier@2.2.1: + resolution: {integrity: sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==} + engines: {node: '>=10.13.0'} + hasBin: true + prettier@2.3.0: resolution: {integrity: sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==} engines: {node: '>=10.13.0'} @@ -19389,6 +21309,10 @@ packages: promise@8.0.1: resolution: {integrity: sha512-6NO4VAynZF2J958bGr+U5mPDwK5n7Vi/S0mCW7bke3bJmcALGjCywH8sl6a2eN+xIX6Q1exH2lmqyjR9PKTiwg==} + prompts@2.4.0: + resolution: {integrity: sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==} + engines: {node: '>= 6'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -19423,32 +21347,32 @@ packages: prosemirror-inputrules@1.5.1: resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==} - prosemirror-keymap@1.2.3: - resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} + prosemirror-keymap@1.2.2: + resolution: {integrity: sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==} - prosemirror-markdown@1.13.4: - resolution: {integrity: sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw==} + prosemirror-markdown@1.13.2: + resolution: {integrity: sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==} prosemirror-model@1.25.4: resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==} - prosemirror-schema-basic@1.2.4: - resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==} + prosemirror-schema-basic@1.2.2: + resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==} prosemirror-schema-list@1.5.1: resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} - prosemirror-state@1.4.4: - resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==} + prosemirror-state@1.4.3: + resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} prosemirror-transform@1.11.0: resolution: {integrity: sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw==} - prosemirror-view@1.41.6: - resolution: {integrity: sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg==} + prosemirror-view@1.41.3: + resolution: {integrity: sha512-SqMiYMUQNNBP9kfPhLO8WXEk/fon47vc52FQsUiJzTBuyjKgEcoAwMyF04eQ4WZ2ArMn7+ReypYL60aKngbACQ==} - protobufjs@7.5.4: - resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} + protobufjs@7.2.5: + resolution: {integrity: sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==} engines: {node: '>=12.0.0'} proxy-addr@2.0.7: @@ -19470,11 +21394,17 @@ packages: psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + public-encrypt@4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + + pump@1.0.3: + resolution: {integrity: sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==} + pump@2.0.1: resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} pumpify@1.5.1: resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} @@ -19526,14 +21456,19 @@ packages: resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} engines: {node: '>=0.6'} - qs@6.5.5: - resolution: {integrity: sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==} - engines: {node: '>=0.6'} - query-string@4.3.4: resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==} engines: {node: '>=0.10.0'} + querystring-es3@0.2.1: + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} + engines: {node: '>=0.4.x'} + + querystring@0.2.1: + resolution: {integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==} + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -19569,6 +21504,9 @@ packages: randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randomfill@1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + range-parser@1.2.0: resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} engines: {node: '>= 0.6'} @@ -19591,8 +21529,8 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 - rc-config-loader@4.1.3: - resolution: {integrity: sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==} + rc-config-loader@4.1.4: + resolution: {integrity: sha512-3GiwEzklkbXTDp52UR5nT8iXgYAx1V9ZG/kDZT7p60u2GCv2XTwQq4NzinMoMpNtXhmt3WkhYXcj6HH8HdwCEQ==} rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} @@ -19622,6 +21560,10 @@ packages: peerDependencies: react: ^15.3.0 || 16 || 17 || 18 + react-dev-utils@11.0.4: + resolution: {integrity: sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==} + engines: {node: '>=10'} + react-dev-utils@5.0.3: resolution: {integrity: sha512-Mvs6ofsc2xTjeZIrMaIfbXfsPVrbdVy/cVqq6SAacnqfMlcBpDuivhWZ1ODGeJ8HgmyWTLH971PYjj/EPCDVAw==} engines: {node: '>=6'} @@ -19676,6 +21618,12 @@ packages: peerDependencies: react: ^19.1.0 + react-draggable@4.5.0: + resolution: {integrity: sha512-VC+HBLEZ0XJxnOxVAZsdRi8rD04Iz3SiiKOoYzamjylUcju/hP9np/aZdLHf/7WOD268WMoNJMvYfB5yAK45cw==} + peerDependencies: + react: '>= 16.3.0' + react-dom: '>= 16.3.0' + react-element-to-jsx-string@14.3.4: resolution: {integrity: sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==} peerDependencies: @@ -19694,19 +21642,25 @@ packages: peerDependencies: react: '>=16.13.1' - react-error-boundary@6.0.3: - resolution: {integrity: sha512-5guqn2UYpCFjE8UDMA8J7Kke+YSGBFrKQRJb3XdcaGZXYINZfQXgBt3ifY6MvjkN7QROc5A8zclyoSCwrcRUKw==} + react-error-boundary@6.0.0: + resolution: {integrity: sha512-gdlJjD7NWr0IfkPlaREN2d9uUZUlksrfOx7SX62VRerwXbMY6ftGCIZua1VG1aXFNOimhISsTq+Owp725b9SiA==} peerDependencies: - react: ^18.0.0 || ^19.0.0 + react: '>=16.13.1' react-error-overlay@4.0.1: resolution: {integrity: sha512-xXUbDAZkU08aAkjtUvldqbvI04ogv+a1XdHxvYuHPYKIVk/42BIOD0zSKTHAWV4+gDy3yGm283z2072rA2gdtw==} - react-hook-form@7.56.3: - resolution: {integrity: sha512-IK18V6GVbab4TAo1/cz3kqajxbDPGofdF0w7VHdCo0Nt8PrPlOZcuuDq9YYIV1BtjcX78x0XsldbQRQnQXWXmw==} - engines: {node: '>=18.0.0'} + react-error-overlay@6.1.0: + resolution: {integrity: sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ==} + + react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + + react-helmet-async@1.3.0: + resolution: {integrity: sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==} peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 + react: ^16.6.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 react-hook-form@7.56.4: resolution: {integrity: sha512-Rob7Ftz2vyZ/ZGsQZPaRdIefkgOSrQSPXfqBdvOPwJfoGnjwRJUs7EM7Kc1mcoDv3NOtqBzPGbcMB8CGn9CKgw==} @@ -19758,8 +21712,8 @@ packages: peerDependencies: react: ^16.8.4 || ^17.0.0 || ^18.0.0 - react-intl@7.1.14: - resolution: {integrity: sha512-VE/0Wi/lHJlBC7APQpCzLUdIt3GB5B0GZrRW8Q+ACbkHI4j+Wwgg9J1TniN6zmLHmPH5gxXcMy+fkSPfw5p1WQ==} + react-intl@7.1.11: + resolution: {integrity: sha512-tnVoRCWvW5Ie2ikYSdPF7z3+880yCe/9xPmitFeRPw3RYDcCfR4m8ZYa4MBq19W4adt9Z+PQA4FaMBCJ7E+HCQ==} peerDependencies: react: 16 || 17 || 18 || 19 typescript: ^5.6.0 @@ -19802,14 +21756,26 @@ packages: peerDependencies: react: '>=15.0.0' + react-lottie@1.2.3: + resolution: {integrity: sha512-qLCERxUr8M+4mm1LU0Ruxw5Y5Fn/OmYkGfnA+JDM/dZb3oKwVAJCjwnjkj9TMHtzR2U6sMEUD3ZZ1RaHagM7kA==} + engines: {npm: ^3.0.0} + peerDependencies: + react: ^0.14.7 || ^15.0.0 || ^16.0.0 + + react-lottie@1.2.4: + resolution: {integrity: sha512-kBGxI+MIZGBf4wZhNCWwHkMcVP+kbpmrLWH/SkO0qCKc7D7eSPcxQbfpsmsCo8v2KCBYjuGSou+xTqK44D/jMg==} + engines: {npm: ^3.0.0} + peerDependencies: + react: '>=15.0.0' + react-markdown@10.1.0: resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==} peerDependencies: '@types/react': '>=18' react: '>=18' - react-markdown@9.0.3: - resolution: {integrity: sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw==} + react-markdown@9.0.1: + resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==} peerDependencies: '@types/react': '>=18' react: '>=18' @@ -19831,6 +21797,19 @@ packages: '@types/react': optional: true + react-popper-tooltip@3.1.1: + resolution: {integrity: sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ==} + peerDependencies: + react: ^16.6.0 || ^17.0.0 + react-dom: ^16.6.0 || ^17.0.0 + + react-popper@2.3.0: + resolution: {integrity: sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==} + peerDependencies: + '@popperjs/core': ^2.0.0 + react: ^16.8.0 || ^17 || ^18 + react-dom: ^16.8.0 || ^17 || ^18 + react-redux@9.2.0: resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} peerDependencies: @@ -19847,6 +21826,10 @@ packages: resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} engines: {node: '>=0.10.0'} + react-refresh@0.8.3: + resolution: {integrity: sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==} + engines: {node: '>=0.10.0'} + react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -19884,12 +21867,20 @@ packages: peerDependencies: typescript: 3.x.x + react-shallow-renderer@16.15.0: + resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + react-simple-code-editor@0.14.1: resolution: {integrity: sha512-BR5DtNRy+AswWJECyA17qhUDvrrCZ6zXOCfkQY5zSmb96BVUbpVAv03WpcjcwtCwiLbIANx3gebHOcXYn1EHow==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' + react-sizeme@3.0.2: + resolution: {integrity: sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==} + react-split-pane@0.1.92: resolution: {integrity: sha512-GfXP1xSzLMcLJI5BM36Vh7GgZBpy+U/X0no+VM3fxayv+p1Jly5HpMofZJraeaMl73b3hvlr+N9zJKvLB/uz9w==} peerDependencies: @@ -19909,15 +21900,25 @@ packages: '@types/react': optional: true - react-syntax-highlighter@15.6.6: - resolution: {integrity: sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw==} + react-syntax-highlighter@13.5.3: + resolution: {integrity: sha512-crPaF+QGPeHNIblxxCdf2Lg936NAHKhNhuMzRL3F9ct6aYXL3NcZtCL0Rms9+qVo6Y1EQLdXGypBNSbPL/r+qg==} + peerDependencies: + react: '>= 0.14.0' + + react-syntax-highlighter@15.6.1: + resolution: {integrity: sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==} peerDependencies: react: '>= 0.14.0' - react-test-renderer@19.1.5: - resolution: {integrity: sha512-V+ZFUbqCiXshpb1JIqs/XLukYXvpvUGTy0syzKajbzAh1fMIAaz0x6d1I3kzCYGgBzr8FtFYnlllg1/6WimbZA==} + react-test-renderer@18.3.0: + resolution: {integrity: sha512-eFnJU8sSYq9I6VI8ISrXDm+7F0igeFlTc0Ngq2XCkVasR5AsyJRg8SuwcD9D5E+VvDS2NrYGZ+gKpO43/wIDHw==} + peerDependencies: + react: ^18.3.0 + + react-test-renderer@19.1.0: + resolution: {integrity: sha512-jXkSl3CpvPYEF+p/eGDLB4sPoDX8pKkYvRl9+rR8HxLY0X04vW7hCm1/0zHoUSjPZ3bDa+wXWNTDVIw/R8aDVw==} peerDependencies: - react: ^19.1.5 + react: ^19.1.0 react-textarea-autosize@8.5.9: resolution: {integrity: sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A==} @@ -19951,6 +21952,10 @@ packages: resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==} engines: {node: '>=0.10.0'} + read-pkg-up@2.0.0: + resolution: {integrity: sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==} + engines: {node: '>=4'} + read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -19963,6 +21968,10 @@ packages: resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==} engines: {node: '>=0.10.0'} + read-pkg@2.0.0: + resolution: {integrity: sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==} + engines: {node: '>=4'} + read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} @@ -19995,14 +22004,6 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - readable-stream@4.7.0: - resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - readable-web-to-node-stream@3.0.4: - resolution: {integrity: sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==} - engines: {node: '>=8'} - readdirp@2.2.1: resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} engines: {node: '>=0.10'} @@ -20039,6 +22040,10 @@ packages: resolution: {integrity: sha512-BKWLxPZb4B07G/4LzyzsHaw24fC41/tL7LrECr1//X9ykRhmxlYgyl7G7X+6A7nvJyOGE/ED7refqmSGORVYqQ==} engines: {node: '>=0.10.0'} + recursive-readdir@2.2.2: + resolution: {integrity: sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==} + engines: {node: '>=0.10.0'} + redent@1.0.0: resolution: {integrity: sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==} engines: {node: '>=0.10.0'} @@ -20130,6 +22135,9 @@ packages: resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} hasBin: true + rehype-katex@7.0.1: + resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} + rehype-raw@6.1.0: resolution: {integrity: sha512-12j2UiiYJgZFdjnHDny77NY5BF3eW4Jsl0vtgL1DWdTzcHjPpbhumU+GtPUdivEWwQc8x9OdEuO0oxaGz7Tvyg==} @@ -20156,6 +22164,9 @@ packages: remark-gfm@4.0.1: resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + remark-math@6.0.0: + resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} + remark-mdx@1.6.22: resolution: {integrity: sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==} @@ -20251,6 +22262,10 @@ packages: resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + resolve-cwd@2.0.0: + resolution: {integrity: sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==} + engines: {node: '>=4'} + resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -20259,6 +22274,10 @@ packages: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} engines: {node: '>=0.10.0'} + resolve-from@3.0.0: + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} + engines: {node: '>=4'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -20285,8 +22304,9 @@ packages: resolve@1.6.0: resolution: {integrity: sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==} - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + resolve@2.0.0-next.6: + resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==} + engines: {node: '>= 0.4'} hasBin: true responselike@3.0.0: @@ -20327,6 +22347,10 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + right-align@0.1.3: + resolution: {integrity: sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==} + engines: {node: '>=0.10.0'} + rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -20342,8 +22366,9 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@5.0.10: - resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + rimraf@5.0.5: + resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} + engines: {node: '>=14'} hasBin: true rimraf@6.0.1: @@ -20351,6 +22376,10 @@ packages: engines: {node: 20 || >=22} hasBin: true + ripemd160@2.0.3: + resolution: {integrity: sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==} + engines: {node: '>= 0.8'} + rollup-plugin-import-css@3.5.8: resolution: {integrity: sha512-a3YsZnwHz66mRHCKHjaPCSfWczczvS/HTkgDc+Eogn0mt/0JZXz0WjK0fzM5WwBpVtOqHB4/gHdmEY40ILsaVg==} engines: {node: '>=16'} @@ -20412,8 +22441,8 @@ packages: resolution: {integrity: sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==} hasBin: true - rollup@4.57.1: - resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} + rollup@4.41.0: + resolution: {integrity: sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -20502,12 +22531,12 @@ packages: sanitize-filename@1.6.3: resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} - sass-loader@13.3.3: - resolution: {integrity: sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==} + sass-loader@13.2.0: + resolution: {integrity: sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==} engines: {node: '>= 14.15.0'} peerDependencies: fibers: '>= 3.1.0' - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 sass: ^1.3.0 sass-embedded: '*' webpack: ^5.0.0 @@ -20521,11 +22550,11 @@ packages: sass-embedded: optional: true - sass-loader@16.0.7: - resolution: {integrity: sha512-w6q+fRHourZ+e+xA1kcsF27iGM6jdB8teexYCfdUw0sYgcDNeZESnDNT9sUmmPm3ooziwUJXGwZJSTF3kOdBfA==} + sass-loader@16.0.5: + resolution: {integrity: sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==} engines: {node: '>= 18.12.0'} peerDependencies: - '@rspack/core': 0.x || ^1.0.0 || ^2.0.0-0 + '@rspack/core': 0.x || 1.x node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 sass: ^1.3.0 sass-embedded: '*' @@ -20542,16 +22571,16 @@ packages: webpack: optional: true - sass@1.97.3: - resolution: {integrity: sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==} + sass@1.89.0: + resolution: {integrity: sha512-ld+kQU8YTdGNjOLfRWBzewJpU5cwEv/h5yyqlSeJcj6Yh8U4TDA9UA5FPicqDz/xgRPWRSYIQNiFks21TbA9KQ==} engines: {node: '>=14.0.0'} hasBin: true sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - sax@1.4.4: - resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} + sax@1.5.0: + resolution: {integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==} engines: {node: '>=11.0.0'} saxes@3.1.11: @@ -20576,6 +22605,10 @@ packages: resolution: {integrity: sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==} engines: {node: '>= 4'} + schema-utils@1.0.0: + resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} + engines: {node: '>= 4'} + schema-utils@2.7.0: resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} engines: {node: '>= 8.9.0'} @@ -20607,6 +22640,9 @@ packages: resolution: {integrity: sha512-1XxuKVhr9az24xwixPBEDGSZP+P0z3ZOnCmr9Oiep0MlJN2Mk+flIjD3iBS9BgyjS4g14dikMqnrYUPIjhQBhA==} engines: {node: '>= 20.0.0'} + selfsigned@1.10.14: + resolution: {integrity: sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==} + selfsigned@5.5.0: resolution: {integrity: sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==} engines: {node: '>=18'} @@ -20644,17 +22680,9 @@ packages: resolution: {integrity: sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==} engines: {node: '>=10'} - serialize-javascript@1.9.1: - resolution: {integrity: sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==} - - serialize-javascript@4.0.0: - resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} - - serialize-javascript@5.0.1: - resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==} - - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serialize-javascript@7.0.3: + resolution: {integrity: sha512-h+cZ/XXarqDgCjo+YSyQU/ulDEESGGf8AMK9pPNmhNSl/FzPl6L8pMp1leca5z6NuG6tvV/auC8/43tmovowww==} + engines: {node: '>=20.0.0'} serve-favicon@2.5.1: resolution: {integrity: sha512-JndLBslCLA/ebr7rS3d+/EKkzTsTi1jI2T9l+vHfAaGJ7A7NhtDpSZ0lx81HCNWnnE0yHncG+SSnVf9IMxOwXQ==} @@ -20737,6 +22765,9 @@ packages: shell-quote@1.6.1: resolution: {integrity: sha512-V0iQEZ/uoem3NmD91rD8XiuozJnq9/ZJnbHVXHnWqP1ucAhS3yJ7sLIIzEi57wFFcK3oi3kFUC46uSyWr35mxg==} + shell-quote@1.7.2: + resolution: {integrity: sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==} + shell-quote@1.8.3: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} @@ -20756,6 +22787,11 @@ packages: resolution: {integrity: sha512-KRT/hufMSxXKEDSQujfVE0Faa/kZ51ihUcZQAcmP04t00DvPj7Ox5anHke1sJYUtzSuiT/Y5uyzg/W7bBEGhCg==} hasBin: true + shx@0.3.4: + resolution: {integrity: sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==} + engines: {node: '>=6'} + hasBin: true + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -20817,6 +22853,10 @@ packages: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + slice-ansi@7.1.2: resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} engines: {node: '>=18'} @@ -20832,6 +22872,9 @@ packages: sockjs-client@1.1.5: resolution: {integrity: sha512-PmPRkAYIeuRgX+ZSieViT4Z3Q23bLS2Itm/ck1tSf5P0/yVuFDiI5q9mcnpXoMdToaPSRS9MEyUx/aaBxrFzyw==} + sockjs@0.3.19: + resolution: {integrity: sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==} + sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} @@ -20861,8 +22904,8 @@ packages: resolution: {integrity: sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==} engines: {node: '>= 6'} - source-map-loader@4.0.2: - resolution: {integrity: sha512-oYwAqCuL0OZhBoSgmdrLa7mv9MjommVMiQIWgcztf+eS4+8BfcUee6nenFnDhKOhzAVnk5gpZdfnz1iiBv+5sg==} + source-map-loader@4.0.1: + resolution: {integrity: sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==} engines: {node: '>= 14.15.0'} peerDependencies: webpack: ^5.72.1 @@ -20931,9 +22974,16 @@ packages: spdx-license-ids@3.0.23: resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} + spdy-transport@2.1.1: + resolution: {integrity: sha512-q7D8c148escoB3Z7ySCASadkegMmUZW8Wb/Q1u0/XBgDKMO880rLQDj8Twiew/tYi7ghemKUi/whSYOwE17f5Q==} + spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + spdy@3.4.7: + resolution: {integrity: sha512-jEvgkLRpMza5GON0oDzvLTLMAVfB5BxeOPbsWyisEyE8IbxL6cCiKbr8xrJdScs6XoOUp7pQy4PI+GVczHbO4w==} + engines: {'0': node >= 0.7.0} + spdy@4.0.2: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} @@ -20949,6 +22999,9 @@ packages: ssri@5.3.0: resolution: {integrity: sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==} + ssri@6.0.2: + resolution: {integrity: sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==} + ssri@8.0.1: resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} engines: {node: '>= 8'} @@ -21019,8 +23072,17 @@ packages: store2@2.14.4: resolution: {integrity: sha512-srTItn1GOvyvOycgxjAnPA63FZNwy0PTyUBFMHRM+hVFltAeoh0LmNBz9SZqUS9mMqGk8rfyWyXn3GH5ReJ8Zw==} - storybook@8.6.15: - resolution: {integrity: sha512-Ob7DMlwWx8s7dMvcQ3xPc02TvUeralb+xX3oaPRk9wY9Hc6M1IBC/7cEoITkSmRS2v38DHubC+mtEKNc1u2gQg==} + storybook@8.6.13: + resolution: {integrity: sha512-RUPf8PHQcaK6k6/jyE0yyUbhQoghxoemvs4mQ75Wl0sZ36JF4TiLvW+618++6eTOwxe+oIu2EUavkaNQTn8xnw==} + hasBin: true + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + + storybook@8.6.14: + resolution: {integrity: sha512-sVKbCj/OTx67jhmauhxc2dcr1P+yOgz/x3h0krwjyMgdc5Oubvxyg4NYDZmzAw+ym36g/lzH8N0Ccp4dwtdfxw==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -21028,9 +23090,15 @@ packages: prettier: optional: true + stream-browserify@2.0.2: + resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==} + stream-each@1.2.3: resolution: {integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==} + stream-http@2.8.3: + resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==} + stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} @@ -21038,9 +23106,6 @@ packages: resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} engines: {node: '>=8.0'} - streamx@2.23.0: - resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} - strict-event-emitter@0.4.6: resolution: {integrity: sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==} @@ -21087,10 +23152,6 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - string-width@8.1.1: - resolution: {integrity: sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw==} - engines: {node: '>=20'} - string.fromcodepoint@0.2.1: resolution: {integrity: sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==} @@ -21152,12 +23213,16 @@ packages: resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} engines: {node: '>=6'} + strip-ansi@6.0.0: + resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} + engines: {node: '>=8'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} strip-bom@2.0.0: @@ -21213,12 +23278,12 @@ packages: resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} engines: {node: '>=0.10.0'} - strnum@2.1.2: - resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==} + strnum@2.2.0: + resolution: {integrity: sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==} - strtok3@7.1.1: - resolution: {integrity: sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg==} - engines: {node: '>=16'} + strtok3@10.3.4: + resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} + engines: {node: '>=18'} structured-source@4.0.0: resolution: {integrity: sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==} @@ -21287,8 +23352,8 @@ packages: peerDependencies: stylelint: ^16.18.0 - stylelint@16.26.1: - resolution: {integrity: sha512-v20V59/crfc8sVTAtge0mdafI3AdnzQ2KsWe6v523L4OA1bJO02S7MO2oyXDCS6iWb9ckIPnqAFVItqSBQr7jw==} + stylelint@16.19.1: + resolution: {integrity: sha512-C1SlPZNMKl+d/C867ZdCRthrS+6KuZ3AoGW113RZCOL0M8xOGpgx7G70wq7lFvqvm4dcfdGFVLB/mNaLFChRKw==} engines: {node: '>=18.12.0'} hasBin: true @@ -21315,6 +23380,10 @@ packages: resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} engines: {node: '>=0.8.0'} + supports-color@4.5.0: + resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==} + engines: {node: '>=4'} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -21384,8 +23453,8 @@ packages: deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. hasBin: true - svgo@2.8.0: - resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + svgo@2.8.2: + resolution: {integrity: sha512-TyzE4NVGLUFy+H/Uy4N6c3G0HEeprsVfge6Lmq+0FdQQ/zqoVYB62IsBZORsiL+o96s6ff/V6/3UQo/C0cgCAA==} engines: {node: '>=10.13.0'} hasBin: true @@ -21408,8 +23477,8 @@ packages: resolution: {integrity: sha512-v/hu7KQQtospyDLpZxz7m5c7s90aj53YEkJ/A8x3mLPlSgIkZ6RKJkTjBG75P1p/fo5IeSA4TycyJg3VSu/aPw==} deprecated: 'Please migrate to Workbox: https://developers.google.com/web/tools/workbox/guides/migrations/migrate-from-sw' - swagger-client@3.36.2: - resolution: {integrity: sha512-M+m0TpZTWtVMvd0Qiq5W2ABLmY6w8PnnqnMIKgT/nYS/w6hZ4s1sBCCS/w4SOjmAyy0QT/kl3tNh2jPWIkaI3A==} + swagger-client@3.37.0: + resolution: {integrity: sha512-pzU+B+DkUbrSwlj4/E8sGeP1w84/CFgDJAt80fHu650TxnOHbqFLGQjiE6luvpRxTPdfK2zRHJP7I6CgUkI8yA==} swagger-ui-react@5.21.0: resolution: {integrity: sha512-lS5paITM1kkcBb/BTTSMHKelh8elHfcuUP4T3R3mO80tDR0AYJL2HR5UdQD6nV1LwdvekzRM8gKjJA6hVayi0A==} @@ -21465,8 +23534,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tailwindcss@4.1.18: - resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} + tailwindcss@4.1.7: + resolution: {integrity: sha512-kr1o/ErIdNhTz8uzAYL7TpaUuzKIE6QPQ4qmSdxnoX/lo+5wmUHQA6h3L5yIqEImSRnAAURDirLu/BgiXGPAhg==} tapable@0.2.9: resolution: {integrity: sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==} @@ -21480,11 +23549,19 @@ packages: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} - tar-fs@3.1.1: - resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} + tar-fs@1.16.6: + resolution: {integrity: sha512-JkOgFt3FxM/2v2CNpAVHqMW2QASjc/Hxo7IGfNd3MHaDYSW/sBFiS7YVmmhmr8x6vwN1VFQDQGdT2MWpmIuVKA==} - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + tar-fs@2.1.4: + resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} + + tar-stream@1.6.2: + resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} + engines: {node: '>= 0.8.0'} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} tar@2.2.2: resolution: {integrity: sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==} @@ -21501,8 +23578,8 @@ packages: tcp-port-used@1.0.2: resolution: {integrity: sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==} - teex@1.0.1: - resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + telejson@5.3.3: + resolution: {integrity: sha512-PjqkJZpzEggA9TBpVtJi1LVptP7tYtXB6rEubwlHap76AMjzvOdKX41CxyaW7ahhzDU1aftXnMCx5kAPDZTQBA==} telejson@6.0.8: resolution: {integrity: sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==} @@ -21526,6 +23603,10 @@ packages: resolution: {integrity: sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==} engines: {node: '>=4'} + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + terminal-link@2.1.1: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} @@ -21534,14 +23615,52 @@ packages: resolution: {integrity: sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==} engines: {node: '>=18'} + terser-webpack-plugin@1.4.6: + resolution: {integrity: sha512-2lBVf/VMVIddjSn3GqbT90GvIJ/eYXJkt8cTzU7NbjKqK8fwv18Ftr4PlbF46b/e88743iZFL5Dtr/rC4hjIeA==} + engines: {node: '>= 6.9.0'} + peerDependencies: + webpack: ^4.0.0 + terser-webpack-plugin@4.2.3: resolution: {integrity: sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==} engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 - terser-webpack-plugin@5.3.16: - resolution: {integrity: sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==} + terser-webpack-plugin@5.3.10: + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser-webpack-plugin@5.3.14: + resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser-webpack-plugin@5.3.17: + resolution: {integrity: sha512-YR7PtUp6GMU91BgSJmlaX/rS2lGDbAF7D+Wtq7hRO+MiljNmodYvqslzCFiYVAgW+Qoaaia/QUIP4lGXufjdZw==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -21577,9 +23696,6 @@ packages: resolution: {integrity: sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==} engines: {node: '>=18'} - text-decoder@1.2.5: - resolution: {integrity: sha512-ymKEOrjEhNE0+Gehpn2Dw59Vp2fNG0DQvCRAJpCjVqB1Pkj1AMBzDpow4H9kSa6XqO/wZrb5TLxEigx+nEaiBA==} - text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} @@ -21609,6 +23725,10 @@ packages: throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} + throttle-debounce@3.0.1: + resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} + engines: {node: '>=10'} + through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} @@ -21621,13 +23741,17 @@ packages: thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + time-stamp@2.2.0: + resolution: {integrity: sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA==} + engines: {node: '>=0.10.0'} + timed-out@4.0.1: resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} engines: {node: '>=0.10.0'} - timers-ext@0.1.8: - resolution: {integrity: sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==} - engines: {node: '>=0.12'} + timers-browserify@2.0.12: + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} timezone-support@3.1.0: resolution: {integrity: sha512-N04dOzxt7Bw3PZ5ts8ofkQx6RsqWDo8cUQ/a8fdtywB58NIctmdbUUDWZSrgtI7c2jzA6MZ1Z6jY6OtBvc+CUQ==} @@ -21662,6 +23786,10 @@ packages: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} + tmp@0.2.4: + resolution: {integrity: sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==} + engines: {node: '>=14.14'} + tmp@0.2.5: resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} engines: {node: '>=14.14'} @@ -21669,6 +23797,9 @@ packages: tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + to-arraybuffer@1.0.1: + resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==} + to-buffer@1.2.2: resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} engines: {node: '>= 0.4'} @@ -21694,8 +23825,8 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - token-types@5.0.1: - resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} + token-types@6.1.2: + resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} engines: {node: '>=14.16'} toposort@1.0.7: @@ -21850,6 +23981,34 @@ packages: resolution: {integrity: sha512-8t3bu2FcEkXb+D4L+Cn8qiK2E2C6Ms4/GQChvz6IMbVurcFHLXrhW4EMtfaol1a1ASQACZGDUGit4NHnX9g7hQ==} engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + ts-loader@9.4.1: + resolution: {integrity: sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + + ts-loader@9.4.4: + resolution: {integrity: sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + + ts-loader@9.5.0: + resolution: {integrity: sha512-LLlB/pkB4q9mW2yLdFMnK3dEHbrBjeZTYguaaIfusyojBgAGf5kF+O6KcWqiGzWqHk0LBsoolrp4VftEURhybg==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + + ts-loader@9.5.2: + resolution: {integrity: sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + ts-loader@9.5.4: resolution: {integrity: sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==} engines: {node: '>=12.0.0'} @@ -21913,6 +24072,12 @@ packages: tslib@2.0.1: resolution: {integrity: sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==} + tslib@2.1.0: + resolution: {integrity: sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==} + + tslib@2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -22003,6 +24168,9 @@ packages: resolution: {integrity: sha512-OvmFcj70PhmAsVQKfC15XoKH55cRWuaRzvr2fpTNhTNer6JBpG8n6vOhRrIgxMjcikyYt88xqYXMMVapJ4Rjvg==} hasBin: true + tty-browserify@0.0.0: + resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} + tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -22105,8 +24273,13 @@ packages: engines: {node: '>=4.2.0'} hasBin: true - typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + typescript@4.2.4: + resolution: {integrity: sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==} + engines: {node: '>=4.2.0'} + hasBin: true + + typescript@4.9.4: + resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} engines: {node: '>=4.2.0'} hasBin: true @@ -22134,6 +24307,11 @@ packages: deprecated: support for ECMAScript is superseded by `uglify-js` as of v3.13.0 hasBin: true + uglify-js@2.8.29: + resolution: {integrity: sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w==} + engines: {node: '>=0.8.0'} + hasBin: true + uglify-js@3.19.3: resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} @@ -22144,12 +24322,25 @@ packages: engines: {node: '>=0.8.0'} hasBin: true + uglify-to-browserify@1.0.2: + resolution: {integrity: sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==} + + uglifyjs-webpack-plugin@0.4.6: + resolution: {integrity: sha512-TNM20HMW67kxHRNCZdvLyiwE1ST6WyY5Ae+TG55V81NpvNwJ9+V4/po4LHA1R9afV/WrqzfedG2UJCk2+swirw==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + peerDependencies: + webpack: ^1.9 || ^2 || ^2.1.0-beta || ^2.2.0-rc || ^3.0.0 + uglifyjs-webpack-plugin@1.2.5: resolution: {integrity: sha512-hIQJ1yxAPhEA2yW/i7Fr+SXZVMp+VEI3d42RTHBgQd2yhp/1UdBcR3QEWPV5ahBxlqQDMEMTuTEvDHSFINfwSw==} engines: {node: '>= 4.8 < 5.0.0 || >= 5.10'} peerDependencies: webpack: ^2.0.0 || ^3.0.0 || ^4.0.0 + uint8array-extras@1.5.0: + resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} + engines: {node: '>=18'} + unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} @@ -22163,8 +24354,8 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici@7.21.0: - resolution: {integrity: sha512-Hn2tCQpoDt1wv23a68Ctc8Cr/BHpUSfaPYrkajTXOS9IKpxVRx/X5m1K2YkbK2ipgZgxXSgsUinl3x+2YdSSfg==} + undici@7.22.0: + resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} engines: {node: '>=20.18.1'} unfetch@4.2.0: @@ -22248,6 +24439,9 @@ packages: unist-builder@2.0.3: resolution: {integrity: sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==} + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + unist-util-generated@1.1.6: resolution: {integrity: sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==} @@ -22275,9 +24469,18 @@ packages: unist-util-remove-position@2.0.1: resolution: {integrity: sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==} + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + unist-util-remove@2.1.0: resolution: {integrity: sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==} + unist-util-stringify-position@2.0.3: + resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + + unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} @@ -22322,6 +24525,9 @@ packages: resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} engines: {node: '>=14.0.0'} + unquote@1.1.1: + resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} + unraw@3.0.0: resolution: {integrity: sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==} @@ -22346,6 +24552,10 @@ packages: unzipper@0.12.3: resolution: {integrity: sha512-PZ8hTS+AqcGxsaQntl3IRBw65QrBI6lxzqDEL7IAo/XCEqRTKGfOX56Vea5TH9SZczRVxuzk1re04z/YjuYCJA==} + upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + upath@2.0.1: resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} engines: {node: '>=4'} @@ -22471,6 +24681,9 @@ packages: util@0.10.4: resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} + util@0.11.1: + resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==} + util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} @@ -22545,14 +24758,26 @@ packages: vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + vfile-message@2.0.4: + resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} + + vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + vfile-message@4.0.3: resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + vfile@4.2.1: + resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} + + vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@6.4.1: - resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} + vite@6.0.7: + resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -22591,6 +24816,9 @@ packages: yaml: optional: true + vm-browserify@1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + vscode-debugadapter-testsupport@1.51.0: resolution: {integrity: sha512-rb8tfn7J3kxLi1rRhEyG5ggGkFcJH2WrYYrq6Vb1tDAcHoFXF580M1dAA2jPOrc0I14GuWxMnndvfGkfG10VxA==} deprecated: This package has been renamed to @vscode/debugadapter-testsupport, please update to the new name @@ -22701,12 +24929,15 @@ packages: engines: {node: '>=8.9.3'} deprecated: This package has been renamed to @vscode/test-electron, please update to the new name + vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - vscode-ws-jsonrpc@3.5.0: - resolution: {integrity: sha512-13ZDy7Od4AfEPK2HIfY3DtyRi4FVsvFql1yobVJrpIoHOKGGJpIjVvIJpMxkrHzCZzWlYlg+WEu2hrYkCTvM0Q==} - engines: {node: '>=20.10.0', npm: '>=10.2.3'} + vscode-ws-jsonrpc@3.4.0: + resolution: {integrity: sha512-jkNZvX0LdHt4skPxMw/jFePr3jRCJU6ZmO28oPoQ7RwNSkwU3uN8mgtxACYEbOY68bYmi/b/uJzhxewKCz1P4w==} + engines: {node: '>=18.19.0', npm: '>=10.2.3'} w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} @@ -22735,6 +24966,12 @@ packages: resolution: {integrity: sha512-FAk18nzhYggg939xgRRLJjvqmAKZciO24wr8neoxNPl87w8J3m784wxL4zFBwME+0gNQ2Sv/vfsCrUxPxU2Dmg==} engines: {'0': node >=0.1.95} + watchpack-chokidar2@2.0.1: + resolution: {integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==} + + watchpack@1.7.5: + resolution: {integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==} + watchpack@2.5.1: resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} engines: {node: '>=10.13.0'} @@ -22822,6 +25059,12 @@ packages: webpack-dev-server: optional: true + webpack-dev-middleware@1.12.2: + resolution: {integrity: sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==} + engines: {node: '>=0.6'} + peerDependencies: + webpack: ^1.0.0 || ^2.0.0 || ^3.0.0 + webpack-dev-middleware@3.7.3: resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==} engines: {node: '>= 6'} @@ -22852,6 +25095,13 @@ packages: webpack: optional: true + webpack-dev-server@2.11.3: + resolution: {integrity: sha512-Qz22YEFhWx+M2vvJ+rQppRv39JA0h5NNbOOdODApdX6iZ52Diz7vTPXjF7kJlfn+Uc24Qr48I3SZ9yncQwRycg==} + engines: {node: '>=4.7'} + hasBin: true + peerDependencies: + webpack: ^2.2.0 || ^3.0.0 + webpack-dev-server@5.2.3: resolution: {integrity: sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ==} engines: {node: '>= 18.12.0'} @@ -22895,11 +25145,14 @@ packages: webpack-permissions-plugin@1.0.10: resolution: {integrity: sha512-5b99jU4IEYYzQbHK8vPRVax7D0dNJl9Ns47IPbpDl8hcRp/geA/U0RmNO/WuXEVTObh3stT/0kC7mC1b575zHA==} + webpack-permissions-plugin@1.0.9: + resolution: {integrity: sha512-ZMQP/4OB8TW+xGLlgnxcTCCnq5yskCLD8ojQQkllgCRchhOcO24lGVojcy27sKUWObFSOm2FRyY4cd0+rbpx9A==} + webpack-sources@1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} - webpack-sources@3.3.3: - resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} + webpack-sources@3.3.4: + resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==} engines: {node: '>=10.13.0'} webpack-virtual-modules@0.2.2: @@ -22914,8 +25167,26 @@ packages: webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - webpack@5.105.2: - resolution: {integrity: sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==} + webpack@3.8.1: + resolution: {integrity: sha512-5ZXLWWsMqHKFr5y0N3Eo5IIisxeEeRAajNq4mELb/WELOR7srdbQk2N5XiyNy2A/AgvlR3AmeBCZJW8lHrolbw==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + hasBin: true + + webpack@4.47.0: + resolution: {integrity: sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==} + engines: {node: '>=6.11.5'} + hasBin: true + peerDependencies: + webpack-cli: '*' + webpack-command: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + webpack-command: + optional: true + + webpack@5.104.1: + resolution: {integrity: sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -23030,6 +25301,10 @@ packages: wildcard@2.0.1: resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} + window-size@0.1.0: + resolution: {integrity: sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==} + engines: {node: '>= 0.8.0'} + winston-transport@4.6.0: resolution: {integrity: sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==} engines: {node: '>= 12.0.0'} @@ -23042,6 +25317,10 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wordwrap@0.0.2: + resolution: {integrity: sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==} + engines: {node: '>=0.4.0'} + wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -23051,6 +25330,9 @@ packages: worker-rpc@0.1.1: resolution: {integrity: sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==} + workerpool@6.2.1: + resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} + workerpool@6.5.1: resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} @@ -23210,8 +25492,13 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + yaml@2.6.0: + resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} + engines: {node: '>= 14'} + hasBin: true + + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} engines: {node: '>= 14.6'} hasBin: true @@ -23219,6 +25506,10 @@ packages: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -23227,9 +25518,15 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-parser@4.2.1: + resolution: {integrity: sha512-+QQWqC2xeL0N5/TE+TY6OGEqyNRM+g2/r712PDNYgiCdXYCApXf1vzfmDSLBxfGRwV+moTq/V8FnMI24JCm2Yg==} + yargs-parser@5.0.1: resolution: {integrity: sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==} + yargs-parser@7.0.0: + resolution: {integrity: sha512-WhzC+xgstid9MbVUktco/bf+KJG+Uu6vMX0LN1sLJvwmbCQVxb4D8LzogobonKycNasCZLdOzTAk1SK7+K7swg==} + yargs-parser@8.1.0: resolution: {integrity: sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==} @@ -23252,11 +25549,20 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yargs@3.10.0: + resolution: {integrity: sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==} + + yargs@6.6.0: + resolution: {integrity: sha512-6/QWTdisjnu5UHUzQGst+UOEuEVwIzFVGBjq3jMTFNs5WJQsH/X6nMURSaScIdF5txylr1Ao9bvbWiKi2yXbwA==} + yargs@7.1.2: resolution: {integrity: sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==} - yarn@1.22.22: - resolution: {integrity: sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg==} + yargs@8.0.2: + resolution: {integrity: sha512-3RiZrpLpjrzIAKgGdPktBcMP/eG5bDFlkI+PHle1qwzyVXyDQL+pD/eZaMoOOO0Y7LLBfjpucObuUm/icvbpKQ==} + + yarn@1.22.19: + resolution: {integrity: sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==} engines: {node: '>=4.0.0'} hasBin: true @@ -23296,14 +25602,38 @@ packages: peerDependencies: zod: ^3.25 || ^4 + zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} zod@4.1.11: resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==} - zustand@5.0.11: - resolution: {integrity: sha512-fdZY+dk7zn/vbWNCYmzZULHRrss0jx5pPFiOuMZ/5HJN6Yv3u+1Wswy/4MpZEkEGhtNH+pwxZB8OKgUBPzYAGg==} + zod@4.1.8: + resolution: {integrity: sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ==} + + zustand@5.0.4: + resolution: {integrity: sha512-39VFTN5InDtMd28ZhjLyuTnlytDr9HfwO512Ai4I8ZABCoyAj4F1+sr7sD1jP/+p7k77Iko0Pb5NhgBFDCX0kQ==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + + zustand@5.0.5: + resolution: {integrity: sha512-mILtRfKW9xM47hqxGIxCv12gXusoY/xTSHBYApXozR0HmQv299whhBeeAcRy+KrPPybzosvJBCOmVjq6x12fCg==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=18.0.0' @@ -23330,57 +25660,74 @@ snapshots: '@adobe/css-tools@4.4.4': {} - '@ai-sdk/amazon-bedrock@4.0.59(zod@4.1.11)': + '@ai-sdk/amazon-bedrock@4.0.67(zod@4.1.8)': dependencies: - '@ai-sdk/anthropic': 3.0.43(zod@4.1.11) + '@ai-sdk/anthropic': 3.0.48(zod@4.1.8) '@ai-sdk/provider': 3.0.8 - '@ai-sdk/provider-utils': 4.0.15(zod@4.1.11) - '@smithy/eventstream-codec': 4.2.8 - '@smithy/util-utf8': 4.2.0 + '@ai-sdk/provider-utils': 4.0.15(zod@4.1.8) + '@smithy/eventstream-codec': 4.2.11 + '@smithy/util-utf8': 4.2.2 aws4fetch: 1.0.20 - zod: 4.1.11 + zod: 4.1.8 - '@ai-sdk/anthropic@2.0.63(zod@3.25.76)': + '@ai-sdk/anthropic@2.0.35(zod@4.1.11)': dependencies: - '@ai-sdk/provider': 2.0.1 - '@ai-sdk/provider-utils': 3.0.21(zod@3.25.76) - zod: 3.25.76 + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.12(zod@4.1.11) + zod: 4.1.11 - '@ai-sdk/anthropic@3.0.43(zod@4.1.11)': + '@ai-sdk/anthropic@3.0.48(zod@4.1.8)': dependencies: '@ai-sdk/provider': 3.0.8 - '@ai-sdk/provider-utils': 4.0.15(zod@4.1.11) + '@ai-sdk/provider-utils': 4.0.15(zod@4.1.8) + zod: 4.1.8 + + '@ai-sdk/gateway@2.0.0(zod@4.1.11)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.12(zod@4.1.11) + '@vercel/oidc': 3.0.3 zod: 4.1.11 - '@ai-sdk/gateway@2.0.37(zod@3.25.76)': + '@ai-sdk/gateway@3.0.57(zod@4.1.8)': dependencies: - '@ai-sdk/provider': 2.0.1 - '@ai-sdk/provider-utils': 3.0.21(zod@3.25.76) + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.15(zod@4.1.8) '@vercel/oidc': 3.1.0 - zod: 3.25.76 + zod: 4.1.8 - '@ai-sdk/gateway@3.0.46(zod@4.1.11)': + '@ai-sdk/google-vertex@4.0.66(zod@4.1.8)': dependencies: + '@ai-sdk/anthropic': 3.0.48(zod@4.1.8) + '@ai-sdk/google': 3.0.33(zod@4.1.8) '@ai-sdk/provider': 3.0.8 - '@ai-sdk/provider-utils': 4.0.15(zod@4.1.11) - '@vercel/oidc': 3.1.0 - zod: 4.1.11 + '@ai-sdk/provider-utils': 4.0.15(zod@4.1.8) + google-auth-library: 10.6.1 + zod: 4.1.8 + transitivePeerDependencies: + - supports-color + + '@ai-sdk/google@3.0.33(zod@4.1.8)': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.15(zod@4.1.8) + zod: 4.1.8 - '@ai-sdk/provider-utils@3.0.21(zod@3.25.76)': + '@ai-sdk/provider-utils@3.0.12(zod@4.1.11)': dependencies: - '@ai-sdk/provider': 2.0.1 + '@ai-sdk/provider': 2.0.0 '@standard-schema/spec': 1.1.0 eventsource-parser: 3.0.6 - zod: 3.25.76 + zod: 4.1.11 - '@ai-sdk/provider-utils@4.0.15(zod@4.1.11)': + '@ai-sdk/provider-utils@4.0.15(zod@4.1.8)': dependencies: '@ai-sdk/provider': 3.0.8 '@standard-schema/spec': 1.1.0 eventsource-parser: 3.0.6 - zod: 4.1.11 + zod: 4.1.8 - '@ai-sdk/provider@2.0.1': + '@ai-sdk/provider@2.0.0': dependencies: json-schema: 0.4.0 @@ -23414,21 +25761,21 @@ snapshots: '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.1 + '@aws-sdk/types': 3.973.5 tslib: 2.8.1 '@aws-crypto/crc32c@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.1 + '@aws-sdk/types': 3.804.0 tslib: 2.8.1 '@aws-crypto/sha1-browser@5.2.0': dependencies: '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-locate-window': 3.965.4 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-locate-window': 3.965.5 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -23437,15 +25784,15 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-locate-window': 3.965.4 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-locate-window': 3.965.5 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.1 + '@aws-sdk/types': 3.804.0 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': @@ -23454,447 +25801,426 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.973.1 + '@aws-sdk/types': 3.804.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-s3@3.989.0': + '@aws-sdk/client-s3@3.817.0': dependencies: '@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.9 - '@aws-sdk/credential-provider-node': 3.972.8 - '@aws-sdk/middleware-bucket-endpoint': 3.972.3 - '@aws-sdk/middleware-expect-continue': 3.972.3 - '@aws-sdk/middleware-flexible-checksums': 3.972.7 - '@aws-sdk/middleware-host-header': 3.972.3 - '@aws-sdk/middleware-location-constraint': 3.972.3 - '@aws-sdk/middleware-logger': 3.972.3 - '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-sdk-s3': 3.972.9 - '@aws-sdk/middleware-ssec': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.9 - '@aws-sdk/region-config-resolver': 3.972.3 - '@aws-sdk/signature-v4-multi-region': 3.989.0 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.989.0 - '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.7 - '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.23.3 - '@smithy/eventstream-serde-browser': 4.2.8 - '@smithy/eventstream-serde-config-resolver': 4.3.8 - '@smithy/eventstream-serde-node': 4.2.8 - '@smithy/fetch-http-handler': 5.3.9 - '@smithy/hash-blob-browser': 4.2.9 - '@smithy/hash-node': 4.2.8 - '@smithy/hash-stream-node': 4.2.8 - '@smithy/invalid-dependency': 4.2.8 - '@smithy/md5-js': 4.2.8 - '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.17 - '@smithy/middleware-retry': 4.4.34 - '@smithy/middleware-serde': 4.2.9 - '@smithy/middleware-stack': 4.2.8 - '@smithy/node-config-provider': 4.3.8 - '@smithy/node-http-handler': 4.4.10 - '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.6 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.33 - '@smithy/util-defaults-mode-node': 4.2.36 - '@smithy/util-endpoints': 3.2.8 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-retry': 4.2.8 - '@smithy/util-stream': 4.5.13 - '@smithy/util-utf8': 4.2.0 - '@smithy/util-waiter': 4.2.8 + '@aws-sdk/core': 3.816.0 + '@aws-sdk/credential-provider-node': 3.817.0 + '@aws-sdk/middleware-bucket-endpoint': 3.808.0 + '@aws-sdk/middleware-expect-continue': 3.804.0 + '@aws-sdk/middleware-flexible-checksums': 3.816.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-location-constraint': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-sdk-s3': 3.816.0 + '@aws-sdk/middleware-ssec': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.816.0 + '@aws-sdk/region-config-resolver': 3.808.0 + '@aws-sdk/signature-v4-multi-region': 3.816.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.808.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.816.0 + '@aws-sdk/xml-builder': 3.804.0 + '@smithy/config-resolver': 4.4.10 + '@smithy/core': 3.23.9 + '@smithy/eventstream-serde-browser': 4.2.11 + '@smithy/eventstream-serde-config-resolver': 4.3.11 + '@smithy/eventstream-serde-node': 4.2.11 + '@smithy/fetch-http-handler': 5.3.13 + '@smithy/hash-blob-browser': 4.2.12 + '@smithy/hash-node': 4.2.11 + '@smithy/hash-stream-node': 4.2.11 + '@smithy/invalid-dependency': 4.2.11 + '@smithy/md5-js': 4.2.11 + '@smithy/middleware-content-length': 4.2.11 + '@smithy/middleware-endpoint': 4.4.23 + '@smithy/middleware-retry': 4.4.40 + '@smithy/middleware-serde': 4.2.12 + '@smithy/middleware-stack': 4.2.11 + '@smithy/node-config-provider': 4.3.11 + '@smithy/node-http-handler': 4.4.14 + '@smithy/protocol-http': 5.3.11 + '@smithy/smithy-client': 4.12.3 + '@smithy/types': 4.13.0 + '@smithy/url-parser': 4.2.11 + '@smithy/util-base64': 4.3.2 + '@smithy/util-body-length-browser': 4.2.2 + '@smithy/util-body-length-node': 4.2.3 + '@smithy/util-defaults-mode-browser': 4.3.39 + '@smithy/util-defaults-mode-node': 4.2.42 + '@smithy/util-endpoints': 3.3.2 + '@smithy/util-middleware': 4.2.11 + '@smithy/util-retry': 4.2.11 + '@smithy/util-stream': 4.5.17 + '@smithy/util-utf8': 4.2.2 + '@smithy/util-waiter': 4.2.11 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.989.0': + '@aws-sdk/client-sso@3.817.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.9 - '@aws-sdk/middleware-host-header': 3.972.3 - '@aws-sdk/middleware-logger': 3.972.3 - '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.9 - '@aws-sdk/region-config-resolver': 3.972.3 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.989.0 - '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.7 - '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.23.3 - '@smithy/fetch-http-handler': 5.3.9 - '@smithy/hash-node': 4.2.8 - '@smithy/invalid-dependency': 4.2.8 - '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.17 - '@smithy/middleware-retry': 4.4.34 - '@smithy/middleware-serde': 4.2.9 - '@smithy/middleware-stack': 4.2.8 - '@smithy/node-config-provider': 4.3.8 - '@smithy/node-http-handler': 4.4.10 - '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.6 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.33 - '@smithy/util-defaults-mode-node': 4.2.36 - '@smithy/util-endpoints': 3.2.8 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-retry': 4.2.8 - '@smithy/util-utf8': 4.2.0 + '@aws-sdk/core': 3.816.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.816.0 + '@aws-sdk/region-config-resolver': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.808.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.816.0 + '@smithy/config-resolver': 4.4.10 + '@smithy/core': 3.23.9 + '@smithy/fetch-http-handler': 5.3.13 + '@smithy/hash-node': 4.2.11 + '@smithy/invalid-dependency': 4.2.11 + '@smithy/middleware-content-length': 4.2.11 + '@smithy/middleware-endpoint': 4.4.23 + '@smithy/middleware-retry': 4.4.40 + '@smithy/middleware-serde': 4.2.12 + '@smithy/middleware-stack': 4.2.11 + '@smithy/node-config-provider': 4.3.11 + '@smithy/node-http-handler': 4.4.14 + '@smithy/protocol-http': 5.3.11 + '@smithy/smithy-client': 4.12.3 + '@smithy/types': 4.13.0 + '@smithy/url-parser': 4.2.11 + '@smithy/util-base64': 4.3.2 + '@smithy/util-body-length-browser': 4.2.2 + '@smithy/util-body-length-node': 4.2.3 + '@smithy/util-defaults-mode-browser': 4.3.39 + '@smithy/util-defaults-mode-node': 4.2.42 + '@smithy/util-endpoints': 3.3.2 + '@smithy/util-middleware': 4.2.11 + '@smithy/util-retry': 4.2.11 + '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.973.9': - dependencies: - '@aws-sdk/types': 3.973.1 - '@aws-sdk/xml-builder': 3.972.4 - '@smithy/core': 3.23.3 - '@smithy/node-config-provider': 4.3.8 - '@smithy/property-provider': 4.2.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/signature-v4': 5.3.8 - '@smithy/smithy-client': 4.11.6 - '@smithy/types': 4.12.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-utf8': 4.2.0 + '@aws-sdk/core@3.816.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@smithy/core': 3.23.9 + '@smithy/node-config-provider': 4.3.11 + '@smithy/property-provider': 4.2.11 + '@smithy/protocol-http': 5.3.11 + '@smithy/signature-v4': 5.3.11 + '@smithy/smithy-client': 4.12.3 + '@smithy/types': 4.13.0 + '@smithy/util-middleware': 4.2.11 + fast-xml-parser: 5.3.8 tslib: 2.8.1 - '@aws-sdk/crc64-nvme@3.972.0': + '@aws-sdk/credential-provider-env@3.816.0': dependencies: - '@smithy/types': 4.12.0 + '@aws-sdk/core': 3.816.0 + '@aws-sdk/types': 3.804.0 + '@smithy/property-provider': 4.2.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.972.7': - dependencies: - '@aws-sdk/core': 3.973.9 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-http@3.972.9': - dependencies: - '@aws-sdk/core': 3.973.9 - '@aws-sdk/types': 3.973.1 - '@smithy/fetch-http-handler': 5.3.9 - '@smithy/node-http-handler': 4.4.10 - '@smithy/property-provider': 4.2.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.6 - '@smithy/types': 4.12.0 - '@smithy/util-stream': 4.5.13 + '@aws-sdk/credential-provider-http@3.816.0': + dependencies: + '@aws-sdk/core': 3.816.0 + '@aws-sdk/types': 3.804.0 + '@smithy/fetch-http-handler': 5.3.13 + '@smithy/node-http-handler': 4.4.14 + '@smithy/property-provider': 4.2.11 + '@smithy/protocol-http': 5.3.11 + '@smithy/smithy-client': 4.12.3 + '@smithy/types': 4.13.0 + '@smithy/util-stream': 4.5.17 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.972.7': - dependencies: - '@aws-sdk/core': 3.973.9 - '@aws-sdk/credential-provider-env': 3.972.7 - '@aws-sdk/credential-provider-http': 3.972.9 - '@aws-sdk/credential-provider-login': 3.972.7 - '@aws-sdk/credential-provider-process': 3.972.7 - '@aws-sdk/credential-provider-sso': 3.972.7 - '@aws-sdk/credential-provider-web-identity': 3.972.7 - '@aws-sdk/nested-clients': 3.989.0 - '@aws-sdk/types': 3.973.1 - '@smithy/credential-provider-imds': 4.2.8 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 + '@aws-sdk/credential-provider-ini@3.817.0': + dependencies: + '@aws-sdk/core': 3.816.0 + '@aws-sdk/credential-provider-env': 3.816.0 + '@aws-sdk/credential-provider-http': 3.816.0 + '@aws-sdk/credential-provider-process': 3.816.0 + '@aws-sdk/credential-provider-sso': 3.817.0 + '@aws-sdk/credential-provider-web-identity': 3.817.0 + '@aws-sdk/nested-clients': 3.817.0 + '@aws-sdk/types': 3.804.0 + '@smithy/credential-provider-imds': 4.2.11 + '@smithy/property-provider': 4.2.11 + '@smithy/shared-ini-file-loader': 4.4.6 + '@smithy/types': 4.13.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-login@3.972.7': - dependencies: - '@aws-sdk/core': 3.973.9 - '@aws-sdk/nested-clients': 3.989.0 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 + '@aws-sdk/credential-provider-node@3.817.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.816.0 + '@aws-sdk/credential-provider-http': 3.816.0 + '@aws-sdk/credential-provider-ini': 3.817.0 + '@aws-sdk/credential-provider-process': 3.816.0 + '@aws-sdk/credential-provider-sso': 3.817.0 + '@aws-sdk/credential-provider-web-identity': 3.817.0 + '@aws-sdk/types': 3.804.0 + '@smithy/credential-provider-imds': 4.2.11 + '@smithy/property-provider': 4.2.11 + '@smithy/shared-ini-file-loader': 4.4.6 + '@smithy/types': 4.13.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.972.8': - dependencies: - '@aws-sdk/credential-provider-env': 3.972.7 - '@aws-sdk/credential-provider-http': 3.972.9 - '@aws-sdk/credential-provider-ini': 3.972.7 - '@aws-sdk/credential-provider-process': 3.972.7 - '@aws-sdk/credential-provider-sso': 3.972.7 - '@aws-sdk/credential-provider-web-identity': 3.972.7 - '@aws-sdk/types': 3.973.1 - '@smithy/credential-provider-imds': 4.2.8 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-process@3.972.7': + '@aws-sdk/credential-provider-process@3.816.0': dependencies: - '@aws-sdk/core': 3.973.9 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 + '@aws-sdk/core': 3.816.0 + '@aws-sdk/types': 3.804.0 + '@smithy/property-provider': 4.2.11 + '@smithy/shared-ini-file-loader': 4.4.6 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.972.7': + '@aws-sdk/credential-provider-sso@3.817.0': dependencies: - '@aws-sdk/client-sso': 3.989.0 - '@aws-sdk/core': 3.973.9 - '@aws-sdk/token-providers': 3.989.0 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 + '@aws-sdk/client-sso': 3.817.0 + '@aws-sdk/core': 3.816.0 + '@aws-sdk/token-providers': 3.817.0 + '@aws-sdk/types': 3.804.0 + '@smithy/property-provider': 4.2.11 + '@smithy/shared-ini-file-loader': 4.4.6 + '@smithy/types': 4.13.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.972.7': + '@aws-sdk/credential-provider-web-identity@3.817.0': dependencies: - '@aws-sdk/core': 3.973.9 - '@aws-sdk/nested-clients': 3.989.0 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 + '@aws-sdk/core': 3.816.0 + '@aws-sdk/nested-clients': 3.817.0 + '@aws-sdk/types': 3.804.0 + '@smithy/property-provider': 4.2.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/middleware-bucket-endpoint@3.972.3': + '@aws-sdk/middleware-bucket-endpoint@3.808.0': dependencies: - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-arn-parser': 3.972.2 - '@smithy/node-config-provider': 4.3.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 - '@smithy/util-config-provider': 4.2.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-arn-parser': 3.804.0 + '@smithy/node-config-provider': 4.3.11 + '@smithy/protocol-http': 5.3.11 + '@smithy/types': 4.13.0 + '@smithy/util-config-provider': 4.2.2 tslib: 2.8.1 - '@aws-sdk/middleware-expect-continue@3.972.3': + '@aws-sdk/middleware-expect-continue@3.804.0': dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 + '@aws-sdk/types': 3.804.0 + '@smithy/protocol-http': 5.3.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@aws-sdk/middleware-flexible-checksums@3.972.7': + '@aws-sdk/middleware-flexible-checksums@3.816.0': dependencies: '@aws-crypto/crc32': 5.2.0 '@aws-crypto/crc32c': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.973.9 - '@aws-sdk/crc64-nvme': 3.972.0 - '@aws-sdk/types': 3.973.1 - '@smithy/is-array-buffer': 4.2.0 - '@smithy/node-config-provider': 4.3.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-stream': 4.5.13 - '@smithy/util-utf8': 4.2.0 + '@aws-sdk/core': 3.816.0 + '@aws-sdk/types': 3.804.0 + '@smithy/is-array-buffer': 4.2.2 + '@smithy/node-config-provider': 4.3.11 + '@smithy/protocol-http': 5.3.11 + '@smithy/types': 4.13.0 + '@smithy/util-middleware': 4.2.11 + '@smithy/util-stream': 4.5.17 + '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@aws-sdk/middleware-host-header@3.972.3': + '@aws-sdk/middleware-host-header@3.804.0': dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 + '@aws-sdk/types': 3.804.0 + '@smithy/protocol-http': 5.3.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@aws-sdk/middleware-location-constraint@3.972.3': + '@aws-sdk/middleware-location-constraint@3.804.0': dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.0 + '@aws-sdk/types': 3.804.0 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@aws-sdk/middleware-logger@3.972.3': + '@aws-sdk/middleware-logger@3.804.0': dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.0 + '@aws-sdk/types': 3.804.0 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.972.3': + '@aws-sdk/middleware-recursion-detection@3.804.0': dependencies: - '@aws-sdk/types': 3.973.1 - '@aws/lambda-invoke-store': 0.2.3 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 + '@aws-sdk/types': 3.804.0 + '@smithy/protocol-http': 5.3.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.972.9': - dependencies: - '@aws-sdk/core': 3.973.9 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-arn-parser': 3.972.2 - '@smithy/core': 3.23.3 - '@smithy/node-config-provider': 4.3.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/signature-v4': 5.3.8 - '@smithy/smithy-client': 4.11.6 - '@smithy/types': 4.12.0 - '@smithy/util-config-provider': 4.2.0 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-stream': 4.5.13 - '@smithy/util-utf8': 4.2.0 + '@aws-sdk/middleware-sdk-s3@3.816.0': + dependencies: + '@aws-sdk/core': 3.816.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-arn-parser': 3.804.0 + '@smithy/core': 3.23.9 + '@smithy/node-config-provider': 4.3.11 + '@smithy/protocol-http': 5.3.11 + '@smithy/signature-v4': 5.3.11 + '@smithy/smithy-client': 4.12.3 + '@smithy/types': 4.13.0 + '@smithy/util-config-provider': 4.2.2 + '@smithy/util-middleware': 4.2.11 + '@smithy/util-stream': 4.5.17 + '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@aws-sdk/middleware-ssec@3.972.3': + '@aws-sdk/middleware-ssec@3.804.0': dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.0 + '@aws-sdk/types': 3.804.0 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.972.9': + '@aws-sdk/middleware-user-agent@3.816.0': dependencies: - '@aws-sdk/core': 3.973.9 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.989.0 - '@smithy/core': 3.23.3 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 + '@aws-sdk/core': 3.816.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.808.0 + '@smithy/core': 3.23.9 + '@smithy/protocol-http': 5.3.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.989.0': + '@aws-sdk/nested-clients@3.817.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.9 - '@aws-sdk/middleware-host-header': 3.972.3 - '@aws-sdk/middleware-logger': 3.972.3 - '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.9 - '@aws-sdk/region-config-resolver': 3.972.3 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.989.0 - '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.7 - '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.23.3 - '@smithy/fetch-http-handler': 5.3.9 - '@smithy/hash-node': 4.2.8 - '@smithy/invalid-dependency': 4.2.8 - '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.17 - '@smithy/middleware-retry': 4.4.34 - '@smithy/middleware-serde': 4.2.9 - '@smithy/middleware-stack': 4.2.8 - '@smithy/node-config-provider': 4.3.8 - '@smithy/node-http-handler': 4.4.10 - '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.6 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.33 - '@smithy/util-defaults-mode-node': 4.2.36 - '@smithy/util-endpoints': 3.2.8 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-retry': 4.2.8 - '@smithy/util-utf8': 4.2.0 + '@aws-sdk/core': 3.816.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.816.0 + '@aws-sdk/region-config-resolver': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.808.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.816.0 + '@smithy/config-resolver': 4.4.10 + '@smithy/core': 3.23.9 + '@smithy/fetch-http-handler': 5.3.13 + '@smithy/hash-node': 4.2.11 + '@smithy/invalid-dependency': 4.2.11 + '@smithy/middleware-content-length': 4.2.11 + '@smithy/middleware-endpoint': 4.4.23 + '@smithy/middleware-retry': 4.4.40 + '@smithy/middleware-serde': 4.2.12 + '@smithy/middleware-stack': 4.2.11 + '@smithy/node-config-provider': 4.3.11 + '@smithy/node-http-handler': 4.4.14 + '@smithy/protocol-http': 5.3.11 + '@smithy/smithy-client': 4.12.3 + '@smithy/types': 4.13.0 + '@smithy/url-parser': 4.2.11 + '@smithy/util-base64': 4.3.2 + '@smithy/util-body-length-browser': 4.2.2 + '@smithy/util-body-length-node': 4.2.3 + '@smithy/util-defaults-mode-browser': 4.3.39 + '@smithy/util-defaults-mode-node': 4.2.42 + '@smithy/util-endpoints': 3.3.2 + '@smithy/util-middleware': 4.2.11 + '@smithy/util-retry': 4.2.11 + '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/region-config-resolver@3.972.3': + '@aws-sdk/region-config-resolver@3.808.0': dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/config-resolver': 4.4.6 - '@smithy/node-config-provider': 4.3.8 - '@smithy/types': 4.12.0 + '@aws-sdk/types': 3.804.0 + '@smithy/node-config-provider': 4.3.11 + '@smithy/types': 4.13.0 + '@smithy/util-config-provider': 4.2.2 + '@smithy/util-middleware': 4.2.11 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.989.0': + '@aws-sdk/signature-v4-multi-region@3.816.0': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.972.9 - '@aws-sdk/types': 3.973.1 - '@smithy/protocol-http': 5.3.8 - '@smithy/signature-v4': 5.3.8 - '@smithy/types': 4.12.0 + '@aws-sdk/middleware-sdk-s3': 3.816.0 + '@aws-sdk/types': 3.804.0 + '@smithy/protocol-http': 5.3.11 + '@smithy/signature-v4': 5.3.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.989.0': + '@aws-sdk/token-providers@3.817.0': dependencies: - '@aws-sdk/core': 3.973.9 - '@aws-sdk/nested-clients': 3.989.0 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 + '@aws-sdk/core': 3.816.0 + '@aws-sdk/nested-clients': 3.817.0 + '@aws-sdk/types': 3.804.0 + '@smithy/property-provider': 4.2.11 + '@smithy/shared-ini-file-loader': 4.4.6 + '@smithy/types': 4.13.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/types@3.973.1': + '@aws-sdk/types@3.804.0': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@aws-sdk/util-arn-parser@3.972.2': + '@aws-sdk/types@3.973.5': dependencies: + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.989.0': + '@aws-sdk/util-arn-parser@3.804.0': dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-endpoints': 3.2.8 tslib: 2.8.1 - '@aws-sdk/util-locate-window@3.965.4': + '@aws-sdk/util-endpoints@3.808.0': dependencies: + '@aws-sdk/types': 3.804.0 + '@smithy/types': 4.13.0 + '@smithy/util-endpoints': 3.3.2 tslib: 2.8.1 - '@aws-sdk/util-user-agent-browser@3.972.3': + '@aws-sdk/util-locate-window@3.965.5': dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.0 - bowser: 2.14.1 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.972.7': + '@aws-sdk/util-user-agent-browser@3.804.0': dependencies: - '@aws-sdk/middleware-user-agent': 3.972.9 - '@aws-sdk/types': 3.973.1 - '@smithy/node-config-provider': 4.3.8 - '@smithy/types': 4.12.0 + '@aws-sdk/types': 3.804.0 + '@smithy/types': 4.13.0 + bowser: 2.14.1 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.4': + '@aws-sdk/util-user-agent-node@3.816.0': dependencies: - '@smithy/types': 4.12.0 - fast-xml-parser: 5.3.7 + '@aws-sdk/middleware-user-agent': 3.816.0 + '@aws-sdk/types': 3.804.0 + '@smithy/node-config-provider': 4.3.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@aws/lambda-invoke-store@0.2.3': {} + '@aws-sdk/xml-builder@3.804.0': + dependencies: + '@smithy/types': 4.13.0 + tslib: 2.8.1 '@azu/format-text@1.0.2': {} @@ -23918,7 +26244,7 @@ snapshots: dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.10.1 - '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-rest-pipeline': 1.23.0 '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 @@ -23926,14 +26252,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@azure/core-rest-pipeline@1.22.2': + '@azure/core-rest-pipeline@1.23.0': dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.10.1 '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 - '@typespec/ts-http-runtime': 0.3.3 + '@typespec/ts-http-runtime': 0.3.4 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -23945,7 +26271,7 @@ snapshots: '@azure/core-util@1.13.1': dependencies: '@azure/abort-controller': 2.1.2 - '@typespec/ts-http-runtime': 0.3.3 + '@typespec/ts-http-runtime': 0.3.4 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -23955,12 +26281,12 @@ snapshots: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.10.1 '@azure/core-client': 1.10.1 - '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-rest-pipeline': 1.23.0 '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 - '@azure/msal-browser': 4.28.2 - '@azure/msal-node': 3.8.7 + '@azure/msal-browser': 4.29.0 + '@azure/msal-node': 3.8.8 open: 10.2.0 tslib: 2.8.1 transitivePeerDependencies: @@ -23968,23 +26294,27 @@ snapshots: '@azure/logger@1.3.0': dependencies: - '@typespec/ts-http-runtime': 0.3.3 + '@typespec/ts-http-runtime': 0.3.4 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/msal-browser@4.28.2': + '@azure/msal-browser@4.29.0': dependencies: - '@azure/msal-common': 15.14.2 + '@azure/msal-common': 15.15.0 - '@azure/msal-common@15.14.2': {} + '@azure/msal-common@15.15.0': {} - '@azure/msal-node@3.8.7': + '@azure/msal-node@3.8.8': dependencies: - '@azure/msal-common': 15.14.2 + '@azure/msal-common': 15.15.0 jsonwebtoken: 9.0.3 uuid: 8.3.2 + '@babel/code-frame@7.10.4': + dependencies: + '@babel/highlight': 7.25.9 + '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -24014,13 +26344,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/core@7.27.7': + '@babel/core@7.24.4': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.27.7) + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.24.4) '@babel/helpers': 7.28.6 '@babel/parser': 7.29.0 '@babel/template': 7.28.6 @@ -24034,6 +26364,46 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.27.1': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.27.1) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + convert-source-map: 2.0.0 + debug: 4.4.3(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.29.1': dependencies: '@babel/parser': 7.29.0 @@ -24054,29 +26424,49 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.27.7)': + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.27.1) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.29.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.27.7) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 '@babel/traverse': 7.29.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.27.7)': + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.0.3(@babel/core@7.27.7)': + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.4.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.0.3(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 @@ -24088,9 +26478,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-define-polyfill-provider@0.1.5(@babel/core@7.27.7)': + '@babel/helper-define-polyfill-provider@0.1.5(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 @@ -24102,9 +26492,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.27.7)': + '@babel/helper-define-polyfill-provider@0.6.7(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + debug: 4.4.3(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.11 + transitivePeerDependencies: + - supports-color + + '@babel/helper-define-polyfill-provider@0.6.7(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 debug: 4.4.3(supports-color@8.1.1) @@ -24138,9 +26539,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.27.7)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.24.4 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.29.0 @@ -24155,18 +26574,36 @@ snapshots: '@babel/helper-plugin-utils@7.28.6': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.7)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.6 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.28.6(@babel/core@7.27.7)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 '@babel/traverse': 7.29.0 @@ -24199,478 +26636,862 @@ snapshots: '@babel/template': 7.28.6 '@babel/types': 7.29.0 + '@babel/highlight@7.25.9': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/parser@7.29.0': dependencies: '@babel/types': 7.29.0 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.27.7)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.27.7) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.27.1) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.27.7)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.7) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.27.7)': + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.7) + '@babel/core': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.27.7) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.27.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.27.7)': + '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.27.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.27.1) '@babel/plugin-proposal-object-rest-spread@7.12.1(@babel/core@7.12.9)': dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.10.4 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.12.9) - '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.27.7)': + '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.27.1)': dependencies: '@babel/compat-data': 7.29.0 - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.1) - '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.27.7)': + '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.1) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.27.7)': + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.7) + '@babel/core': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.7)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 - '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.27.7)': + '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.7) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.1) transitivePeerDependencies: - supports-color - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.27.7)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-decorators@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-flow@7.22.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-jsx@7.12.1(@babel/core@7.12.9)': + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.12.9)': + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.27.7)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.27.7)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.27.7)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-decorators@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.27.7)': + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-flow@7.22.5(@babel/core@7.27.7)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.7)': + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.27.7)': + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-jsx@7.12.1(@babel/core@7.12.9)': + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.12.9 + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1) + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.27.7)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.27.7)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.27.7)': + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.12.9)': + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.12.9 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.27.7)': + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.27.7)': + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.27.7)': + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.27.7)': + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.27.7)': + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.27.1) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.7)': + '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 + '@babel/template': 7.28.6 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/template': 7.28.6 - '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.27.7)': + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.7) '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-module-imports': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.7) + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.7) + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.7) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-classes@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-globals': 7.28.0 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.27.7) - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/template': 7.28.6 - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.27.7)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.27.7)': + '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.27.7) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.27.7) + '@babel/core': 7.27.1 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.27.7)': + '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.27.7) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.27.7) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.27.7)': + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.1) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.1) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.27.7) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.27.1) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: @@ -24681,266 +27502,512 @@ snapshots: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.27.7)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.7) + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.7) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.27.7)': + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.27.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.27.7) + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.27.1) + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.27.7) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.27.7)': + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-spread@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-spread@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.27.1) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.7) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.27.7) + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.27.7)': + '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/preset-env@7.27.2(@babel/core@7.27.7)': + '@babel/preset-env@7.27.2(@babel/core@7.27.1)': dependencies: '@babel/compat-data': 7.29.0 - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.27.7) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.7) - '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.27.7) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) - '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.27.7) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.27.7) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.27.7) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.27.7) - '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.27.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.7) - babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.27.7) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.7) - babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.27.7) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.27.1) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.1) + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.27.1) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.1) + '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.27.1) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.27.1) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.27.1) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.1) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.27.1) + '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.27.1) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.1) + babel-plugin-polyfill-corejs2: 0.4.16(@babel/core@7.27.1) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.1) + babel-plugin-polyfill-regenerator: 0.6.7(@babel/core@7.27.1) core-js-compat: 3.48.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-flow@7.27.1(@babel/core@7.27.7)': + '@babel/preset-env@7.27.2(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/compat-data': 7.29.0 + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0) + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.16(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.7(@babel/core@7.29.0) + core-js-compat: 3.48.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-flow@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.27.1) + + '@babel/preset-flow@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.0) + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/types': 7.29.0 + esutils: 2.0.3 - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.7)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/types': 7.29.0 esutils: 2.0.3 - '@babel/preset-react@7.27.1(@babel/core@7.27.7)': + '@babel/preset-react@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.27.1) + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.27.1) + transitivePeerDependencies: + - supports-color + + '@babel/preset-react@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.22.11(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.27.7) - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.22.15(@babel/core@7.27.7)': + '@babel/preset-typescript@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.27.7) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.1) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.27.1(@babel/core@7.27.7)': + '@babel/preset-typescript@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.27.7) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/register@7.28.6(@babel/core@7.27.7)': + '@babel/register@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -24984,6 +28051,17 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} + '@biomejs/biome@1.8.3': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.8.3 + '@biomejs/cli-darwin-x64': 1.8.3 + '@biomejs/cli-linux-arm64': 1.8.3 + '@biomejs/cli-linux-arm64-musl': 1.8.3 + '@biomejs/cli-linux-x64': 1.8.3 + '@biomejs/cli-linux-x64-musl': 1.8.3 + '@biomejs/cli-win32-arm64': 1.8.3 + '@biomejs/cli-win32-x64': 1.8.3 + '@biomejs/biome@1.9.4': optionalDependencies: '@biomejs/cli-darwin-arm64': 1.9.4 @@ -24995,38 +28073,64 @@ snapshots: '@biomejs/cli-win32-arm64': 1.9.4 '@biomejs/cli-win32-x64': 1.9.4 + '@biomejs/cli-darwin-arm64@1.8.3': + optional: true + '@biomejs/cli-darwin-arm64@1.9.4': optional: true + '@biomejs/cli-darwin-x64@1.8.3': + optional: true + '@biomejs/cli-darwin-x64@1.9.4': optional: true + '@biomejs/cli-linux-arm64-musl@1.8.3': + optional: true + '@biomejs/cli-linux-arm64-musl@1.9.4': optional: true + '@biomejs/cli-linux-arm64@1.8.3': + optional: true + '@biomejs/cli-linux-arm64@1.9.4': optional: true + '@biomejs/cli-linux-x64-musl@1.8.3': + optional: true + '@biomejs/cli-linux-x64-musl@1.9.4': optional: true + '@biomejs/cli-linux-x64@1.8.3': + optional: true + '@biomejs/cli-linux-x64@1.9.4': optional: true + '@biomejs/cli-win32-arm64@1.8.3': + optional: true + '@biomejs/cli-win32-arm64@1.9.4': optional: true + '@biomejs/cli-win32-x64@1.8.3': + optional: true + '@biomejs/cli-win32-x64@1.9.4': optional: true - '@cacheable/memory@2.0.7': + '@borewit/text-codec@0.2.1': {} + + '@cacheable/memory@2.0.8': dependencies: - '@cacheable/utils': 2.3.4 + '@cacheable/utils': 2.4.0 '@keyv/bigmap': 1.3.1(keyv@5.6.0) hookified: 1.15.1 keyv: 5.6.0 - '@cacheable/utils@2.3.4': + '@cacheable/utils@2.4.0': dependencies: hashery: 1.5.0 keyv: 5.6.0 @@ -25039,21 +28143,21 @@ snapshots: '@codemirror/autocomplete@6.19.1': dependencies: '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 '@lezer/common': 1.5.1 - '@codemirror/commands@6.10.2': + '@codemirror/commands@6.10.0': dependencies: '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 '@lezer/common': 1.5.1 '@codemirror/lang-angular@0.1.4': dependencies: '@codemirror/lang-html': 6.4.11 - '@codemirror/lang-javascript': 6.2.4 + '@codemirror/lang-javascript': 6.2.5 '@codemirror/language': 6.11.3 '@lezer/common': 1.5.1 '@lezer/highlight': 1.2.3 @@ -25068,15 +28172,15 @@ snapshots: dependencies: '@codemirror/autocomplete': 6.19.1 '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@lezer/common': 1.5.1 - '@lezer/css': 1.3.0 + '@lezer/css': 1.3.1 '@codemirror/lang-go@6.0.1': dependencies: '@codemirror/autocomplete': 6.19.1 '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@lezer/common': 1.5.1 '@lezer/go': 1.0.1 @@ -25084,12 +28188,12 @@ snapshots: dependencies: '@codemirror/autocomplete': 6.19.1 '@codemirror/lang-css': 6.3.1 - '@codemirror/lang-javascript': 6.2.4 + '@codemirror/lang-javascript': 6.2.5 '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 '@lezer/common': 1.5.1 - '@lezer/css': 1.3.0 + '@lezer/css': 1.3.1 '@lezer/html': 1.3.13 '@codemirror/lang-java@6.0.2': @@ -25097,12 +28201,12 @@ snapshots: '@codemirror/language': 6.11.3 '@lezer/java': 1.1.3 - '@codemirror/lang-javascript@6.2.4': + '@codemirror/lang-javascript@6.2.5': dependencies: '@codemirror/autocomplete': 6.19.1 '@codemirror/language': 6.11.3 '@codemirror/lint': 6.8.5 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 '@lezer/common': 1.5.1 '@lezer/javascript': 1.5.4 @@ -25128,12 +28232,12 @@ snapshots: '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.8 - '@codemirror/lang-liquid@6.3.1': + '@codemirror/lang-liquid@6.3.2': dependencies: '@codemirror/autocomplete': 6.19.1 '@codemirror/lang-html': 6.4.11 '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 '@lezer/common': 1.5.1 '@lezer/highlight': 1.2.3 @@ -25144,7 +28248,7 @@ snapshots: '@codemirror/autocomplete': 6.19.1 '@codemirror/lang-html': 6.4.11 '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 '@lezer/common': 1.5.1 '@lezer/markdown': 1.6.3 @@ -25153,7 +28257,7 @@ snapshots: dependencies: '@codemirror/lang-html': 6.4.11 '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@lezer/common': 1.5.1 '@lezer/php': 1.0.5 @@ -25161,7 +28265,7 @@ snapshots: dependencies: '@codemirror/autocomplete': 6.19.1 '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@lezer/common': 1.5.1 '@lezer/python': 1.1.18 @@ -25174,7 +28278,7 @@ snapshots: dependencies: '@codemirror/lang-css': 6.3.1 '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@lezer/common': 1.5.1 '@lezer/sass': 1.1.0 @@ -25182,7 +28286,7 @@ snapshots: dependencies: '@codemirror/autocomplete': 6.19.1 '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@lezer/common': 1.5.1 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.8 @@ -25190,7 +28294,7 @@ snapshots: '@codemirror/lang-vue@0.1.3': dependencies: '@codemirror/lang-html': 6.4.11 - '@codemirror/lang-javascript': 6.2.4 + '@codemirror/lang-javascript': 6.2.5 '@codemirror/language': 6.11.3 '@lezer/common': 1.5.1 '@lezer/highlight': 1.2.3 @@ -25207,7 +28311,7 @@ snapshots: dependencies: '@codemirror/autocomplete': 6.19.1 '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 '@lezer/common': 1.5.1 '@lezer/xml': 1.0.6 @@ -25216,7 +28320,7 @@ snapshots: dependencies: '@codemirror/autocomplete': 6.19.1 '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@lezer/common': 1.5.1 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.8 @@ -25230,11 +28334,11 @@ snapshots: '@codemirror/lang-go': 6.0.1 '@codemirror/lang-html': 6.4.11 '@codemirror/lang-java': 6.0.2 - '@codemirror/lang-javascript': 6.2.4 + '@codemirror/lang-javascript': 6.2.5 '@codemirror/lang-jinja': 6.0.0 '@codemirror/lang-json': 6.0.2 '@codemirror/lang-less': 6.0.2 - '@codemirror/lang-liquid': 6.3.1 + '@codemirror/lang-liquid': 6.3.2 '@codemirror/lang-markdown': 6.5.0 '@codemirror/lang-php': 6.0.2 '@codemirror/lang-python': 6.2.1 @@ -25250,7 +28354,7 @@ snapshots: '@codemirror/language@6.11.3': dependencies: - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 '@lezer/common': 1.5.1 '@lezer/highlight': 1.2.3 @@ -25261,40 +28365,46 @@ snapshots: dependencies: '@codemirror/language': 6.11.3 + '@codemirror/lint@6.8.1': + dependencies: + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.8 + crelt: 1.0.6 + '@codemirror/lint@6.8.5': dependencies: - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 crelt: 1.0.6 - '@codemirror/merge@6.11.2': + '@codemirror/merge@6.12.0': dependencies: '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 '@lezer/highlight': 1.2.3 style-mod: 4.1.3 '@codemirror/search@6.6.0': dependencies: - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 crelt: 1.0.6 - '@codemirror/state@6.5.4': + '@codemirror/state@6.5.2': dependencies: '@marijn/find-cluster-break': 1.0.2 - '@codemirror/theme-one-dark@6.1.3': + '@codemirror/theme-one-dark@6.1.2': dependencies: '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 '@lezer/highlight': 1.2.3 '@codemirror/view@6.38.8': dependencies: - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 crelt: 1.0.6 style-mod: 4.1.3 w3c-keyname: 2.2.8 @@ -25316,12 +28426,12 @@ snapshots: '@codesandbox/sandpack-react@2.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@codemirror/autocomplete': 6.19.1 - '@codemirror/commands': 6.10.2 + '@codemirror/commands': 6.10.0 '@codemirror/lang-css': 6.3.1 '@codemirror/lang-html': 6.4.11 - '@codemirror/lang-javascript': 6.2.4 + '@codemirror/lang-javascript': 6.2.5 '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 '@codesandbox/sandpack-client': 2.19.8 '@lezer/highlight': 1.2.3 @@ -25350,8 +28460,6 @@ snapshots: dependencies: '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-syntax-patches-for-csstree@1.0.27': {} - '@csstools/css-tokenizer@3.0.4': {} '@csstools/media-query-list-parser@4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': @@ -25381,6 +28489,31 @@ snapshots: '@discoveryjs/json-ext@0.6.3': {} + '@dnd-kit/accessibility@3.1.1(react@18.2.0)': + dependencies: + react: 18.2.0 + tslib: 2.8.1 + + '@dnd-kit/core@6.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@dnd-kit/accessibility': 3.1.1(react@18.2.0) + '@dnd-kit/utilities': 3.2.2(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tslib: 2.8.1 + + '@dnd-kit/sortable@8.0.0(@dnd-kit/core@6.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0)': + dependencies: + '@dnd-kit/core': 6.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@dnd-kit/utilities': 3.2.2(react@18.2.0) + react: 18.2.0 + tslib: 2.8.1 + + '@dnd-kit/utilities@3.2.2(react@18.2.0)': + dependencies: + react: 18.2.0 + tslib: 2.8.1 + '@dual-bundle/import-meta-resolve@4.2.1': {} '@emnapi/core@1.8.1': @@ -25415,6 +28548,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@emotion/cache@10.0.29': + dependencies: + '@emotion/sheet': 0.9.4 + '@emotion/stylis': 0.8.5 + '@emotion/utils': 0.11.3 + '@emotion/weak-memoize': 0.2.5 + '@emotion/cache@11.14.0': dependencies: '@emotion/memoize': 0.9.0 @@ -25423,6 +28563,38 @@ snapshots: '@emotion/weak-memoize': 0.4.0 stylis: 4.2.0 + '@emotion/core@10.3.1(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.6 + '@emotion/cache': 10.0.29 + '@emotion/css': 10.0.27 + '@emotion/serialize': 0.11.16 + '@emotion/sheet': 0.9.4 + '@emotion/utils': 0.11.3 + react: 18.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/css@10.0.27': + dependencies: + '@emotion/serialize': 0.11.16 + '@emotion/utils': 0.11.3 + babel-plugin-emotion: 10.2.2 + transitivePeerDependencies: + - supports-color + + '@emotion/css@11.10.5(@babel/core@7.29.0)': + dependencies: + '@emotion/babel-plugin': 11.13.5 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.2 + optionalDependencies: + '@babel/core': 7.29.0 + transitivePeerDependencies: + - supports-color + '@emotion/css@11.13.5': dependencies: '@emotion/babel-plugin': 11.13.5 @@ -25433,23 +28605,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@emotion/hash@0.8.0': {} + '@emotion/hash@0.9.2': {} '@emotion/is-prop-valid@0.8.8': dependencies: '@emotion/memoize': 0.7.4 - optional: true '@emotion/is-prop-valid@1.4.0': dependencies: '@emotion/memoize': 0.9.0 - '@emotion/memoize@0.7.4': - optional: true + '@emotion/memoize@0.7.4': {} '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@17.0.91)(react@19.1.0)': + '@emotion/react@11.14.0(@types/react@17.0.37)(react@19.1.0)': dependencies: '@babel/runtime': 7.28.6 '@emotion/babel-plugin': 11.13.5 @@ -25461,7 +28633,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.1.0 optionalDependencies: - '@types/react': 17.0.91 + '@types/react': 17.0.37 transitivePeerDependencies: - supports-color @@ -25497,6 +28669,46 @@ snapshots: transitivePeerDependencies: - supports-color + '@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.6 + '@emotion/babel-plugin': 11.13.5 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.2.5 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + optionalDependencies: + '@babel/core': 7.29.0 + '@types/react': 18.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@19.1.0)': + dependencies: + '@babel/runtime': 7.28.6 + '@emotion/babel-plugin': 11.13.5 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.2.5 + hoist-non-react-statics: 3.3.2 + react: 19.1.0 + optionalDependencies: + '@babel/core': 7.29.0 + '@types/react': 18.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@0.11.16': + dependencies: + '@emotion/hash': 0.8.0 + '@emotion/memoize': 0.7.4 + '@emotion/unitless': 0.7.5 + '@emotion/utils': 0.11.3 + csstype: 2.6.21 + '@emotion/serialize@1.3.3': dependencies: '@emotion/hash': 0.9.2 @@ -25505,24 +28717,91 @@ snapshots: '@emotion/utils': 1.4.2 csstype: 3.2.3 + '@emotion/sheet@0.9.4': {} + '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@17.0.91)(react@19.1.0))(@types/react@17.0.91)(react@19.1.0)': + '@emotion/styled-base@10.3.0(@emotion/core@10.3.1(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.6 + '@emotion/core': 10.3.1(react@18.2.0) + '@emotion/is-prop-valid': 0.8.8 + '@emotion/serialize': 0.11.16 + '@emotion/utils': 0.11.3 + react: 18.2.0 + + '@emotion/styled@10.3.0(@emotion/core@10.3.1(react@18.2.0))(react@18.2.0)': + dependencies: + '@emotion/core': 10.3.1(react@18.2.0) + '@emotion/styled-base': 10.3.0(@emotion/core@10.3.1(react@18.2.0))(react@18.2.0) + babel-plugin-emotion: 10.2.2 + react: 18.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/styled@11.10.5(@babel/core@7.29.0)(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.6 + '@emotion/babel-plugin': 11.13.5 + '@emotion/is-prop-valid': 1.4.0 + '@emotion/react': 11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0) + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.2.0) + '@emotion/utils': 1.4.2 + react: 18.2.0 + optionalDependencies: + '@babel/core': 7.29.0 + '@types/react': 18.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/styled@11.10.5(@babel/core@7.29.0)(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0)': + dependencies: + '@babel/runtime': 7.28.6 + '@emotion/babel-plugin': 11.13.5 + '@emotion/is-prop-valid': 1.4.0 + '@emotion/react': 11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@19.1.0) + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) + '@emotion/utils': 1.4.2 + react: 19.1.0 + optionalDependencies: + '@babel/core': 7.29.0 + '@types/react': 18.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/styled@11.11.0(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.6 + '@emotion/babel-plugin': 11.13.5 + '@emotion/is-prop-valid': 1.4.0 + '@emotion/react': 11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0) + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.2.0) + '@emotion/utils': 1.4.2 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@17.0.37)(react@19.1.0))(@types/react@17.0.37)(react@19.1.0)': dependencies: '@babel/runtime': 7.28.6 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.4.0 - '@emotion/react': 11.14.0(@types/react@17.0.91)(react@19.1.0) + '@emotion/react': 11.14.0(@types/react@17.0.37)(react@19.1.0) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) '@emotion/utils': 1.4.2 react: 19.1.0 optionalDependencies: - '@types/react': 17.0.91 + '@types/react': 17.0.37 transitivePeerDependencies: - supports-color - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0)': + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0)': dependencies: '@babel/runtime': 7.28.6 '@emotion/babel-plugin': 11.13.5 @@ -25537,7 +28816,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@18.2.0)': + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@18.2.0)': dependencies: '@babel/runtime': 7.28.6 '@emotion/babel-plugin': 11.13.5 @@ -25552,7 +28831,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0)': + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0)': dependencies: '@babel/runtime': 7.28.6 '@emotion/babel-plugin': 11.13.5 @@ -25567,8 +28846,12 @@ snapshots: transitivePeerDependencies: - supports-color + '@emotion/stylis@0.8.5': {} + '@emotion/unitless@0.10.0': {} + '@emotion/unitless@0.7.5': {} + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.2.0)': dependencies: react: 18.2.0 @@ -25577,100 +28860,245 @@ snapshots: dependencies: react: 19.1.0 + '@emotion/utils@0.11.3': {} + '@emotion/utils@1.4.2': {} + '@emotion/weak-memoize@0.2.5': {} + '@emotion/weak-memoize@0.4.0': {} + '@esbuild/aix-ppc64@0.24.2': + optional: true + '@esbuild/aix-ppc64@0.25.12': optional: true + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm64@0.24.2': + optional: true + '@esbuild/android-arm64@0.25.12': optional: true + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-arm@0.24.2': + optional: true + '@esbuild/android-arm@0.25.12': optional: true + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/android-x64@0.24.2': + optional: true + '@esbuild/android-x64@0.25.12': optional: true + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.24.2': + optional: true + '@esbuild/darwin-arm64@0.25.12': optional: true + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.24.2': + optional: true + '@esbuild/darwin-x64@0.25.12': optional: true + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.24.2': + optional: true + '@esbuild/freebsd-arm64@0.25.12': optional: true + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.24.2': + optional: true + '@esbuild/freebsd-x64@0.25.12': optional: true + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.24.2': + optional: true + '@esbuild/linux-arm64@0.25.12': optional: true + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-arm@0.24.2': + optional: true + '@esbuild/linux-arm@0.25.12': optional: true + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.24.2': + optional: true + '@esbuild/linux-ia32@0.25.12': optional: true + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.24.2': + optional: true + '@esbuild/linux-loong64@0.25.12': optional: true + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.24.2': + optional: true + '@esbuild/linux-mips64el@0.25.12': optional: true + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.24.2': + optional: true + '@esbuild/linux-ppc64@0.25.12': optional: true + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.24.2': + optional: true + '@esbuild/linux-riscv64@0.25.12': optional: true + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.24.2': + optional: true + '@esbuild/linux-s390x@0.25.12': optional: true + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/linux-x64@0.24.2': + optional: true + '@esbuild/linux-x64@0.25.12': optional: true + '@esbuild/netbsd-arm64@0.24.2': + optional: true + '@esbuild/netbsd-arm64@0.25.12': optional: true + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.24.2': + optional: true + '@esbuild/netbsd-x64@0.25.12': optional: true + '@esbuild/openbsd-arm64@0.24.2': + optional: true + '@esbuild/openbsd-arm64@0.25.12': optional: true + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.24.2': + optional: true + '@esbuild/openbsd-x64@0.25.12': optional: true '@esbuild/openharmony-arm64@0.25.12': optional: true + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.24.2': + optional: true + '@esbuild/sunos-x64@0.25.12': optional: true + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.24.2': + optional: true + '@esbuild/win32-arm64@0.25.12': optional: true + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.24.2': + optional: true + '@esbuild/win32-ia32@0.25.12': optional: true + '@esbuild/win32-x64@0.18.20': + optional: true + + '@esbuild/win32-x64@0.24.2': + optional: true + '@esbuild/win32-x64@0.25.12': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.3(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))': dependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.21.1': + '@eslint/config-array@0.21.2': dependencies: '@eslint/object-schema': 2.1.7 debug: 4.4.3(supports-color@8.1.1) - minimatch: 3.1.3 + minimatch: 3.1.4 transitivePeerDependencies: - supports-color @@ -25678,15 +29106,25 @@ snapshots: dependencies: '@eslint/core': 0.17.0 - '@eslint/core@0.15.2': + '@eslint/core@0.17.0': dependencies: '@types/json-schema': 7.0.15 - '@eslint/core@0.17.0': + '@eslint/eslintrc@3.3.1': dependencies: - '@types/json-schema': 7.0.15 + ajv: 6.14.0 + debug: 4.4.3(supports-color@8.1.1) + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + minimatch: 3.1.4 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color - '@eslint/eslintrc@3.3.3': + '@eslint/eslintrc@3.3.5': dependencies: ajv: 6.14.0 debug: 4.4.3(supports-color@8.1.1) @@ -25695,65 +29133,65 @@ snapshots: ignore: 5.3.2 import-fresh: 3.3.1 js-yaml: 4.1.1 - minimatch: 3.1.3 + minimatch: 3.1.4 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color '@eslint/js@9.27.0': {} - '@eslint/js@9.39.3': {} + '@eslint/js@9.39.4': {} '@eslint/object-schema@2.1.7': {} - '@eslint/plugin-kit@0.3.5': + '@eslint/plugin-kit@0.4.1': dependencies: - '@eslint/core': 0.15.2 + '@eslint/core': 0.17.0 levn: 0.4.1 '@fal-works/esbuild-plugin-global-externals@2.1.2': {} - '@floating-ui/core@1.7.4': + '@floating-ui/core@1.7.5': dependencies: - '@floating-ui/utils': 0.2.10 + '@floating-ui/utils': 0.2.11 - '@floating-ui/dom@1.7.5': + '@floating-ui/dom@1.7.6': dependencies: - '@floating-ui/core': 1.7.4 - '@floating-ui/utils': 0.2.10 + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 - '@floating-ui/react-dom@2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@floating-ui/react-dom@2.1.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@floating-ui/dom': 1.7.5 + '@floating-ui/dom': 1.7.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@floating-ui/react-dom@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@floating-ui/react-dom@2.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/dom': 1.7.5 + '@floating-ui/dom': 1.7.6 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@floating-ui/react-dom@2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@floating-ui/react-dom@2.1.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@floating-ui/dom': 1.7.5 + '@floating-ui/dom': 1.7.6 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) '@floating-ui/react@0.26.28(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@floating-ui/react-dom': 2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@floating-ui/utils': 0.2.10 + '@floating-ui/react-dom': 2.1.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@floating-ui/utils': 0.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) tabbable: 6.4.0 - '@floating-ui/utils@0.2.10': {} + '@floating-ui/utils@0.2.11': {} - '@formatjs/ecma402-abstract@2.3.6': + '@formatjs/ecma402-abstract@2.3.4': dependencies: '@formatjs/fast-memoize': 2.2.7 - '@formatjs/intl-localematcher': 0.6.2 + '@formatjs/intl-localematcher': 0.6.1 decimal.js: 10.6.0 tslib: 2.8.1 @@ -25761,37 +29199,37 @@ snapshots: dependencies: tslib: 2.8.1 - '@formatjs/icu-messageformat-parser@2.11.4': + '@formatjs/icu-messageformat-parser@2.11.2': dependencies: - '@formatjs/ecma402-abstract': 2.3.6 - '@formatjs/icu-skeleton-parser': 1.8.16 + '@formatjs/ecma402-abstract': 2.3.4 + '@formatjs/icu-skeleton-parser': 1.8.14 tslib: 2.8.1 - '@formatjs/icu-skeleton-parser@1.8.16': + '@formatjs/icu-skeleton-parser@1.8.14': dependencies: - '@formatjs/ecma402-abstract': 2.3.6 + '@formatjs/ecma402-abstract': 2.3.4 tslib: 2.8.1 - '@formatjs/intl-localematcher@0.6.2': + '@formatjs/intl-localematcher@0.6.1': dependencies: tslib: 2.8.1 - '@formatjs/intl@3.1.8(typescript@4.9.5)': + '@formatjs/intl@3.1.6(typescript@4.9.4)': dependencies: - '@formatjs/ecma402-abstract': 2.3.6 + '@formatjs/ecma402-abstract': 2.3.4 '@formatjs/fast-memoize': 2.2.7 - '@formatjs/icu-messageformat-parser': 2.11.4 - intl-messageformat: 10.7.18 + '@formatjs/icu-messageformat-parser': 2.11.2 + intl-messageformat: 10.7.16 tslib: 2.8.1 optionalDependencies: - typescript: 4.9.5 + typescript: 4.9.4 - '@formatjs/intl@3.1.8(typescript@5.8.3)': + '@formatjs/intl@3.1.6(typescript@5.8.3)': dependencies: - '@formatjs/ecma402-abstract': 2.3.6 + '@formatjs/ecma402-abstract': 2.3.4 '@formatjs/fast-memoize': 2.2.7 - '@formatjs/icu-messageformat-parser': 2.11.4 - intl-messageformat: 10.7.18 + '@formatjs/icu-messageformat-parser': 2.11.2 + intl-messageformat: 10.7.16 tslib: 2.8.1 optionalDependencies: typescript: 5.8.3 @@ -25802,10 +29240,10 @@ snapshots: '@github/markdown-toolbar-element@2.2.3': {} - '@graphiql/react@0.26.2(@codemirror/language@6.11.3)(@types/node@22.15.35)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@graphiql/react@0.26.2(@codemirror/language@6.11.3)(@types/node@22.15.24)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.11.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@graphiql/toolkit': 0.11.3(@types/node@22.15.35)(graphql@16.12.0) - '@headlessui/react': 1.7.19(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@graphiql/toolkit': 0.11.3(@types/node@22.15.24)(graphql@16.11.0) + '@headlessui/react': 1.7.18(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -25813,12 +29251,12 @@ snapshots: '@types/codemirror': 5.60.17 clsx: 1.2.1 codemirror: 5.65.21 - codemirror-graphql: 2.2.4(@codemirror/language@6.11.3)(codemirror@5.65.21)(graphql@16.12.0) + codemirror-graphql: 2.2.4(@codemirror/language@6.11.3)(codemirror@5.65.21)(graphql@16.11.0) copy-to-clipboard: 3.3.3 framer-motion: 6.5.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) get-value: 3.0.1 - graphql: 16.12.0 - graphql-language-service: 5.5.0(graphql@16.12.0) + graphql: 16.11.0 + graphql-language-service: 5.5.0(graphql@16.11.0) markdown-it: 14.1.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -25830,11 +29268,11 @@ snapshots: - '@types/react-dom' - graphql-ws - '@graphiql/toolkit@0.11.3(@types/node@22.15.35)(graphql@16.12.0)': + '@graphiql/toolkit@0.11.3(@types/node@22.15.24)(graphql@16.11.0)': dependencies: '@n1ru4l/push-pull-async-iterable-iterator': 3.2.0 - graphql: 16.12.0 - meros: 1.3.2(@types/node@22.15.35) + graphql: 16.11.0 + meros: 1.3.2(@types/node@22.15.24) transitivePeerDependencies: - '@types/node' @@ -25844,35 +29282,44 @@ snapshots: dependencies: '@hapi/hoek': 9.3.0 - '@headlessui/react@1.7.19(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@headlessui/react@1.7.18(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@tanstack/react-virtual': 3.13.18(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tanstack/react-virtual': 3.13.21(react-dom@18.2.0(react@18.2.0))(react@18.2.0) client-only: 0.0.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@headlessui/react@1.7.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@headlessui/react@1.7.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@tanstack/react-virtual': 3.13.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/react-virtual': 3.13.21(react-dom@19.1.0(react@19.1.0))(react@19.1.0) client-only: 0.0.1 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@headlessui/react@2.2.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@headlessui/react@2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@floating-ui/react': 0.26.28(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/focus': 3.21.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/interactions': 3.27.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tanstack/react-virtual': 3.13.21(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@headlessui/react@2.2.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@floating-ui/react': 0.26.28(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/focus': 3.21.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/interactions': 3.27.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tanstack/react-virtual': 3.13.18(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/focus': 3.21.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/interactions': 3.27.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tanstack/react-virtual': 3.13.21(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) use-sync-external-store: 1.6.0(react@18.2.0) - '@hono/node-server@1.19.9(hono@4.12.1)': + '@hono/node-server@1.19.10(hono@4.12.7)': dependencies: - hono: 4.12.1 + hono: 4.12.7 - '@hookform/resolvers@2.9.11(react-hook-form@7.56.4(react@18.2.0))': + '@hookform/resolvers@2.8.0(react-hook-form@7.56.4(react@18.2.0))': dependencies: react-hook-form: 7.56.4(react@18.2.0) @@ -25885,11 +29332,6 @@ snapshots: '@standard-schema/utils': 0.3.0 react-hook-form: 7.56.4(react@18.2.0) - '@hookform/resolvers@5.2.2(react-hook-form@7.56.4(react@18.2.0))': - dependencies: - '@standard-schema/utils': 0.3.0 - react-hook-form: 7.56.4(react@18.2.0) - '@hookform/resolvers@5.2.2(react-hook-form@7.63.0(react@18.2.0))': dependencies: '@standard-schema/utils': 0.3.0 @@ -25912,7 +29354,7 @@ snapshots: dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 @@ -25940,7 +29382,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.15.35 + '@types/node': 22.15.24 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -25949,7 +29391,7 @@ snapshots: '@jest/console@30.0.0': dependencies: '@jest/types': 30.0.0 - '@types/node': 22.15.35 + '@types/node': 22.15.24 chalk: 4.1.2 jest-message-util: 30.0.0 jest-util: 30.0.0 @@ -25991,21 +29433,21 @@ snapshots: - supports-color - utf-8-validate - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.35 + '@types/node': 22.15.24 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -26026,7 +29468,42 @@ snapshots: - supports-color - ts-node - '@jest/core@30.0.0(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.15.24 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/core@30.0.0(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3))': dependencies: '@jest/console': 30.0.0 '@jest/pattern': 30.0.0 @@ -26034,14 +29511,14 @@ snapshots: '@jest/test-result': 30.0.0 '@jest/transform': 30.0.0 '@jest/types': 30.0.0 - '@types/node': 22.15.35 + '@types/node': 22.15.24 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 4.4.0 exit-x: 0.2.2 graceful-fs: 4.2.11 jest-changed-files: 30.0.0 - jest-config: 30.0.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + jest-config: 30.0.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3)) jest-haste-map: 30.0.0 jest-message-util: 30.0.0 jest-regex-util: 30.0.0 @@ -26076,14 +29553,14 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.35 + '@types/node': 22.15.24 jest-mock: 29.7.0 '@jest/environment@30.0.0': dependencies: '@jest/fake-timers': 30.0.0 '@jest/types': 30.0.0 - '@types/node': 22.15.35 + '@types/node': 22.15.24 jest-mock: 30.0.0 '@jest/expect-utils@29.7.0': @@ -26124,7 +29601,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.15.35 + '@types/node': 22.15.24 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -26133,7 +29610,7 @@ snapshots: dependencies: '@jest/types': 30.0.0 '@sinonjs/fake-timers': 13.0.5 - '@types/node': 22.15.35 + '@types/node': 22.15.24 jest-message-util: 30.0.0 jest-mock: 30.0.0 jest-util: 30.0.0 @@ -26168,12 +29645,12 @@ snapshots: '@jest/pattern@30.0.0': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 jest-regex-util: 30.0.0 '@jest/pattern@30.0.1': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 jest-regex-util: 30.0.1 '@jest/reporters@25.5.1': @@ -26215,7 +29692,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 22.15.35 + '@types/node': 22.15.24 chalk: 4.1.2 collect-v8-coverage: 1.0.3 exit: 0.1.2 @@ -26244,7 +29721,7 @@ snapshots: '@jest/transform': 30.0.0 '@jest/types': 30.0.0 '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 22.15.35 + '@types/node': 22.15.24 chalk: 4.1.2 collect-v8-coverage: 1.0.3 exit-x: 0.2.2 @@ -26351,7 +29828,7 @@ snapshots: '@jest/transform@25.5.1': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@jest/types': 25.5.0 babel-plugin-istanbul: 6.1.1 chalk: 3.0.0 @@ -26372,7 +29849,7 @@ snapshots: '@jest/transform@26.6.2': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@jest/types': 26.6.2 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -26392,7 +29869,7 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.31 babel-plugin-istanbul: 6.1.1 @@ -26412,7 +29889,7 @@ snapshots: '@jest/transform@30.0.0': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@jest/types': 30.0.0 '@jridgewell/trace-mapping': 0.3.31 babel-plugin-istanbul: 7.0.1 @@ -26430,26 +29907,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@jest/transform@30.2.0': - dependencies: - '@babel/core': 7.27.7 - '@jest/types': 30.2.0 - '@jridgewell/trace-mapping': 0.3.31 - 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.2.0 - jest-regex-util: 30.0.1 - jest-util: 30.2.0 - micromatch: 4.0.8 - pirates: 4.0.7 - slash: 3.0.0 - write-file-atomic: 5.0.1 - transitivePeerDependencies: - - supports-color - '@jest/types@25.5.0': dependencies: '@types/istanbul-lib-coverage': 2.0.6 @@ -26461,7 +29918,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/yargs': 15.0.20 chalk: 4.1.2 @@ -26470,7 +29927,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -26480,7 +29937,7 @@ snapshots: '@jest/schemas': 30.0.0 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -26490,16 +29947,16 @@ snapshots: '@jest/schemas': 30.0.5 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/yargs': 17.0.35 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.8.3)(vite@6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.8.3)(vite@6.0.7(@types/node@22.15.24)(jiti@2.6.1)(sass@1.89.0)(terser@5.46.0)(yaml@2.8.0))': dependencies: glob: 10.5.0 magic-string: 0.27.0 react-docgen-typescript: 2.4.0(typescript@5.8.3) - vite: 6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2) + vite: 6.0.7(@types/node@22.15.24)(jiti@2.6.1)(sass@1.89.0)(terser@5.46.0)(yaml@2.8.0) optionalDependencies: typescript: 5.8.3 @@ -26508,6 +29965,11 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/source-map@0.3.11': @@ -26553,58 +30015,58 @@ snapshots: dependencies: tslib: 2.8.1 - '@jsonjoy.com/fs-core@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-core@4.56.11(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) thingies: 2.5.0(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-fsa@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-fsa@4.56.11(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-core': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) thingies: 2.5.0(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-node-builtins@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-node-builtins@4.56.11(tslib@2.8.1)': dependencies: tslib: 2.8.1 - '@jsonjoy.com/fs-node-to-fsa@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-node-to-fsa@4.56.11(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-fsa': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-fsa': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-node-utils@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-node-utils@4.56.11(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-node@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-node@4.56.11(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-print': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-snapshot': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-core': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.56.11(tslib@2.8.1) glob-to-regex.js: 1.2.0(tslib@2.8.1) thingies: 2.5.0(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-print@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-print@4.56.11(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-snapshot@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-snapshot@4.56.11(tslib@2.8.1)': dependencies: '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) '@jsonjoy.com/json-pack': 17.67.0(tslib@2.8.1) '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) tslib: 2.8.1 @@ -26820,7 +30282,7 @@ snapshots: '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.8 - '@lezer/css@1.3.0': + '@lezer/css@1.3.1': dependencies: '@lezer/common': 1.5.1 '@lezer/highlight': 1.2.3 @@ -26907,6 +30369,23 @@ snapshots: '@marijn/find-cluster-break@1.0.2': {} + '@mcp-ui/client@6.1.0(@preact/signals-core@1.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@modelcontextprotocol/ext-apps': 0.3.1(@modelcontextprotocol/sdk@1.27.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.25.76) + '@modelcontextprotocol/sdk': 1.27.1 + '@quilted/threads': 3.3.1(@preact/signals-core@1.14.0) + '@r2wc/react-to-web-component': 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@remote-dom/core': 1.10.1(@preact/signals-core@1.14.0) + '@remote-dom/react': 1.2.2(@preact/signals-core@1.14.0)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + zod: 3.25.76 + transitivePeerDependencies: + - '@cfworker/json-schema' + - '@preact/signals-core' + - preact + - supports-color + '@mdx-js/mdx@1.6.22': dependencies: '@babel/core': 7.12.9 @@ -26959,8 +30438,8 @@ snapshots: dependencies: '@codemirror/lang-markdown': 6.5.0 '@codemirror/language-data': 6.5.2 - '@codemirror/merge': 6.11.2 - '@codemirror/state': 6.5.4 + '@codemirror/merge': 6.12.0 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 '@codesandbox/sandpack-react': 2.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@lexical/clipboard': 0.17.1 @@ -26982,7 +30461,7 @@ snapshots: '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) classnames: 2.5.1 - cm6-theme-basic-light: 0.2.0(@codemirror/language@6.11.3)(@codemirror/state@6.5.4)(@codemirror/view@6.38.8)(@lezer/highlight@1.2.3) + cm6-theme-basic-light: 0.2.0(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.8)(@lezer/highlight@1.2.3) codemirror: 6.0.2 downshift: 7.6.2(react@18.2.0) js-yaml: 4.1.1 @@ -27009,7 +30488,7 @@ snapshots: micromark-util-symbol: 2.0.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-hook-form: 7.56.4(react@18.2.0) + react-hook-form: 7.63.0(react@18.2.0) unidiff: 1.0.4 transitivePeerDependencies: - '@codemirror/language' @@ -27030,7 +30509,7 @@ snapshots: '@microsoft/applicationinsights-shims': 3.0.1 '@microsoft/dynamicproto-js': 2.0.3 '@nevware21/ts-async': 0.5.5 - '@nevware21/ts-utils': 0.12.6 + '@nevware21/ts-utils': 0.13.0 transitivePeerDependencies: - tslib @@ -27040,7 +30519,7 @@ snapshots: '@microsoft/applicationinsights-shims': 3.0.1 '@microsoft/dynamicproto-js': 2.0.3 '@nevware21/ts-async': 0.5.5 - '@nevware21/ts-utils': 0.12.6 + '@nevware21/ts-utils': 0.13.0 transitivePeerDependencies: - tslib @@ -27051,7 +30530,7 @@ snapshots: '@microsoft/applicationinsights-shims': 3.0.1 '@microsoft/dynamicproto-js': 2.0.3 '@nevware21/ts-async': 0.5.5 - '@nevware21/ts-utils': 0.12.6 + '@nevware21/ts-utils': 0.13.0 tslib: 2.8.1 '@microsoft/applicationinsights-common@3.3.11(tslib@2.8.1)': @@ -27059,7 +30538,7 @@ snapshots: '@microsoft/applicationinsights-core-js': 3.3.11(tslib@2.8.1) '@microsoft/applicationinsights-shims': 3.0.1 '@microsoft/dynamicproto-js': 2.0.3 - '@nevware21/ts-utils': 0.12.6 + '@nevware21/ts-utils': 0.13.0 tslib: 2.8.1 '@microsoft/applicationinsights-core-js@3.3.11(tslib@2.8.1)': @@ -27067,12 +30546,12 @@ snapshots: '@microsoft/applicationinsights-shims': 3.0.1 '@microsoft/dynamicproto-js': 2.0.3 '@nevware21/ts-async': 0.5.5 - '@nevware21/ts-utils': 0.12.6 + '@nevware21/ts-utils': 0.13.0 tslib: 2.8.1 '@microsoft/applicationinsights-shims@3.0.1': dependencies: - '@nevware21/ts-utils': 0.12.6 + '@nevware21/ts-utils': 0.13.0 '@microsoft/applicationinsights-web-basic@3.3.11(tslib@2.8.1)': dependencies: @@ -27082,12 +30561,12 @@ snapshots: '@microsoft/applicationinsights-shims': 3.0.1 '@microsoft/dynamicproto-js': 2.0.3 '@nevware21/ts-async': 0.5.5 - '@nevware21/ts-utils': 0.12.6 + '@nevware21/ts-utils': 0.13.0 tslib: 2.8.1 '@microsoft/dynamicproto-js@2.0.3': dependencies: - '@nevware21/ts-utils': 0.12.6 + '@nevware21/ts-utils': 0.13.0 '@microsoft/fast-element@1.14.0': {} @@ -27098,6 +30577,18 @@ snapshots: tabbable: 5.3.3 tslib: 1.14.1 + '@microsoft/fast-react-wrapper@0.1.48(react@18.2.0)': + dependencies: + '@microsoft/fast-element': 1.14.0 + '@microsoft/fast-foundation': 2.50.0 + react: 18.2.0 + + '@microsoft/fast-react-wrapper@0.1.48(react@19.1.0)': + dependencies: + '@microsoft/fast-element': 1.14.0 + '@microsoft/fast-foundation': 2.50.0 + react: 19.1.0 + '@microsoft/fast-react-wrapper@0.3.25(react@18.2.0)': dependencies: '@microsoft/fast-element': 1.14.0 @@ -27114,18 +30605,54 @@ snapshots: dependencies: exenv-es6: 1.1.1 - '@modelcontextprotocol/inspector-cli@0.17.5': + '@modelcontextprotocol/ext-apps@0.3.1(@modelcontextprotocol/sdk@1.27.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.25.76)': + dependencies: + '@modelcontextprotocol/sdk': 1.27.1 + zod: 3.25.76 + optionalDependencies: + '@oven/bun-darwin-aarch64': 1.3.10 + '@oven/bun-darwin-x64': 1.3.10 + '@oven/bun-darwin-x64-baseline': 1.3.10 + '@oven/bun-linux-aarch64': 1.3.10 + '@oven/bun-linux-aarch64-musl': 1.3.10 + '@oven/bun-linux-x64': 1.3.10 + '@oven/bun-linux-x64-baseline': 1.3.10 + '@oven/bun-linux-x64-musl': 1.3.10 + '@oven/bun-linux-x64-musl-baseline': 1.3.10 + '@oven/bun-windows-x64': 1.3.10 + '@oven/bun-windows-x64-baseline': 1.3.10 + '@rollup/rollup-darwin-arm64': 4.59.0 + '@rollup/rollup-darwin-x64': 4.59.0 + '@rollup/rollup-linux-arm64-gnu': 4.59.0 + '@rollup/rollup-linux-x64-gnu': 4.59.0 + '@rollup/rollup-win32-arm64-msvc': 4.59.0 + '@rollup/rollup-win32-x64-msvc': 4.59.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@modelcontextprotocol/ext-apps@1.2.0(@modelcontextprotocol/sdk@1.27.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.25.76)': + dependencies: + '@modelcontextprotocol/sdk': 1.27.1 + zod: 3.25.76 + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@modelcontextprotocol/inspector-cli@0.21.1': dependencies: - '@modelcontextprotocol/sdk': 1.26.0 + '@modelcontextprotocol/sdk': 1.27.1 commander: 13.1.0 + express: 5.2.1 spawn-rx: 5.1.2 transitivePeerDependencies: - '@cfworker/json-schema' - supports-color - '@modelcontextprotocol/inspector-client@0.17.5(@types/react-dom@18.2.0)(@types/react@18.2.0)': + '@modelcontextprotocol/inspector-client@0.21.1(@preact/signals-core@1.14.0)(@types/react-dom@18.2.0)(@types/react@18.2.0)': dependencies: - '@modelcontextprotocol/sdk': 1.26.0 + '@mcp-ui/client': 6.1.0(@preact/signals-core@1.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modelcontextprotocol/ext-apps': 1.2.0(@modelcontextprotocol/sdk@1.27.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.25.76) + '@modelcontextprotocol/sdk': 1.27.1 '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-icons': 1.3.2(react@18.3.1) @@ -27152,16 +30679,20 @@ snapshots: zod: 3.25.76 transitivePeerDependencies: - '@cfworker/json-schema' + - '@preact/signals-core' - '@types/react' - '@types/react-dom' + - preact - supports-color - '@modelcontextprotocol/inspector-server@0.17.5': + '@modelcontextprotocol/inspector-server@0.21.1': dependencies: - '@modelcontextprotocol/sdk': 1.26.0 + '@modelcontextprotocol/sdk': 1.27.1 cors: 2.8.6 express: 5.2.1 + express-rate-limit: 8.2.2(express@5.2.1) shell-quote: 1.8.3 + shx: 0.3.4 spawn-rx: 5.1.2 ws: 8.19.0 zod: 3.25.76 @@ -27171,34 +30702,36 @@ snapshots: - supports-color - utf-8-validate - '@modelcontextprotocol/inspector@0.17.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.18)(@types/react-dom@18.2.0)(@types/react@18.2.0)(typescript@5.8.3)': + '@modelcontextprotocol/inspector@0.21.0(@preact/signals-core@1.14.0)(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.18)(@types/react-dom@18.2.0)(@types/react@18.2.0)(typescript@5.8.3)': dependencies: - '@modelcontextprotocol/inspector-cli': 0.17.5 - '@modelcontextprotocol/inspector-client': 0.17.5(@types/react-dom@18.2.0)(@types/react@18.2.0) - '@modelcontextprotocol/inspector-server': 0.17.5 - '@modelcontextprotocol/sdk': 1.26.0 + '@modelcontextprotocol/inspector-cli': 0.21.1 + '@modelcontextprotocol/inspector-client': 0.21.1(@preact/signals-core@1.14.0)(@types/react-dom@18.2.0)(@types/react@18.2.0) + '@modelcontextprotocol/inspector-server': 0.21.1 + '@modelcontextprotocol/sdk': 1.27.1 concurrently: 9.2.1 node-fetch: 3.3.2 open: 10.2.0 shell-quote: 1.8.3 spawn-rx: 5.1.2 - ts-node: 10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.18)(typescript@5.8.3) + ts-node: 10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.18)(typescript@5.8.3) zod: 3.25.76 transitivePeerDependencies: - '@cfworker/json-schema' + - '@preact/signals-core' - '@swc/core' - '@swc/wasm' - '@types/node' - '@types/react' - '@types/react-dom' - bufferutil + - preact - supports-color - typescript - utf-8-validate - '@modelcontextprotocol/sdk@1.26.0': + '@modelcontextprotocol/sdk@1.27.1': dependencies: - '@hono/node-server': 1.19.9(hono@4.12.1) + '@hono/node-server': 1.19.10(hono@4.12.7) ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) content-type: 1.0.5 @@ -27207,14 +30740,14 @@ snapshots: eventsource: 3.0.7 eventsource-parser: 3.0.6 express: 5.2.1 - express-rate-limit: 8.2.1(express@5.2.1) - hono: 4.12.1 - jose: 6.1.3 + express-rate-limit: 8.2.2(express@5.2.1) + hono: 4.12.7 + jose: 6.2.0 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 - zod: 3.25.76 - zod-to-json-schema: 3.25.1(zod@3.25.76) + zod: 4.1.11 + zod-to-json-schema: 3.25.1(zod@4.1.11) transitivePeerDependencies: - supports-color @@ -27288,18 +30821,14 @@ snapshots: '@ndelangen/get-tarball@3.0.9': dependencies: gunzip-maybe: 1.4.2 - pump: 3.0.3 - tar-fs: 3.1.1 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a + pump: 3.0.4 + tar-fs: 2.1.4 '@nevware21/ts-async@0.5.5': dependencies: - '@nevware21/ts-utils': 0.12.6 + '@nevware21/ts-utils': 0.13.0 - '@nevware21/ts-utils@0.12.6': {} + '@nevware21/ts-utils@0.13.0': {} '@noble/hashes@1.4.0': {} @@ -27358,6 +30887,39 @@ snapshots: '@opentelemetry/api@1.9.0': {} + '@oven/bun-darwin-aarch64@1.3.10': + optional: true + + '@oven/bun-darwin-x64-baseline@1.3.10': + optional: true + + '@oven/bun-darwin-x64@1.3.10': + optional: true + + '@oven/bun-linux-aarch64-musl@1.3.10': + optional: true + + '@oven/bun-linux-aarch64@1.3.10': + optional: true + + '@oven/bun-linux-x64-baseline@1.3.10': + optional: true + + '@oven/bun-linux-x64-musl-baseline@1.3.10': + optional: true + + '@oven/bun-linux-x64-musl@1.3.10': + optional: true + + '@oven/bun-linux-x64@1.3.10': + optional: true + + '@oven/bun-windows-x64-baseline@1.3.10': + optional: true + + '@oven/bun-windows-x64@1.3.10': + optional: true + '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -27518,7 +31080,21 @@ snapshots: dependencies: playwright: 1.55.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.105.2)': + '@pmmmwh/react-refresh-webpack-plugin@0.4.3(@types/webpack@4.41.40)(react-refresh@0.8.3)(webpack-hot-middleware@2.26.1)(webpack@4.47.0)': + dependencies: + ansi-html: 0.0.7 + error-stack-parser: 2.1.4 + html-entities: 1.4.0 + native-url: 0.2.6 + react-refresh: 0.8.3 + schema-utils: 2.7.1 + source-map: 0.7.6 + webpack: 4.47.0 + optionalDependencies: + '@types/webpack': 4.41.40 + webpack-hot-middleware: 2.26.1 + + '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1)': dependencies: ansi-html: 0.0.9 core-js-pure: 3.48.0 @@ -27528,14 +31104,14 @@ snapshots: react-refresh: 0.11.0 schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) optionalDependencies: - '@types/webpack': 5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + '@types/webpack': 5.28.5(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) type-fest: 4.41.0 - webpack-dev-server: 5.2.3(webpack-cli@6.0.1)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@6.0.1)(webpack@5.104.1) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.19)))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))))(webpack-hot-middleware@2.26.1)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(@swc/core@1.15.18(@swc/helpers@0.5.19)))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.48.0 @@ -27545,14 +31121,14 @@ snapshots: react-refresh: 0.11.0 schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) optionalDependencies: - '@types/webpack': 5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.19)) + '@types/webpack': 5.28.5(@swc/core@1.15.18(@swc/helpers@0.5.19)) type-fest: 4.41.0 - webpack-dev-server: 5.2.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + webpack-dev-server: 5.2.3(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(webpack-cli@4.10.0))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.105.2)': + '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(webpack-cli@4.10.0))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1)': dependencies: ansi-html: 0.0.9 core-js-pure: 3.48.0 @@ -27562,14 +31138,14 @@ snapshots: react-refresh: 0.11.0 schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) optionalDependencies: '@types/webpack': 5.28.5(webpack-cli@4.10.0) type-fest: 4.41.0 - webpack-dev-server: 5.2.3(webpack-cli@4.10.0)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@4.10.0)(webpack@5.104.1) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.105.2)': + '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1)': dependencies: ansi-html: 0.0.9 core-js-pure: 3.48.0 @@ -27579,14 +31155,14 @@ snapshots: react-refresh: 0.11.0 schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: '@types/webpack': 5.28.5(webpack-cli@5.1.4) type-fest: 4.41.0 - webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3(webpack@5.105.2))(webpack-hot-middleware@2.26.1)(webpack@5.105.2)': + '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3(webpack@5.104.1))(webpack-hot-middleware@2.26.1)(webpack@5.104.1)': dependencies: ansi-html: 0.0.9 core-js-pure: 3.48.0 @@ -27596,14 +31172,14 @@ snapshots: react-refresh: 0.11.0 schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: - '@types/webpack': 5.28.5 + '@types/webpack': 5.28.5(webpack-cli@5.1.4) type-fest: 4.41.0 - webpack-dev-server: 5.2.3(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.6.2(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.105.2)': + '@pmmmwh/react-refresh-webpack-plugin@0.6.0(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1)': dependencies: anser: 2.3.5 core-js-pure: 3.48.0 @@ -27612,13 +31188,17 @@ snapshots: react-refresh: 0.11.0 schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: '@types/webpack': 5.28.5(webpack-cli@5.1.4) type-fest: 4.41.0 - webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1) webpack-hot-middleware: 2.26.1 + '@popperjs/core@2.11.8': {} + + '@preact/signals-core@1.14.0': {} + '@projectstorm/geometry@6.7.4': {} '@projectstorm/geometry@7.0.3': @@ -27640,7 +31220,7 @@ snapshots: '@projectstorm/react-canvas-core@7.0.3(@types/react@18.2.0)': dependencies: '@emotion/react': 11.14.0(@types/react@18.2.0)(react@18.2.0) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@projectstorm/geometry': 7.0.3 lodash: 4.17.23 react: 18.2.0 @@ -27666,7 +31246,7 @@ snapshots: '@projectstorm/react-diagrams-core@7.0.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)': dependencies: - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@projectstorm/geometry': 7.0.3 '@projectstorm/react-canvas-core': 7.0.3(@types/react@18.2.0) lodash: 4.17.23 @@ -27679,7 +31259,7 @@ snapshots: '@projectstorm/react-diagrams-core@7.0.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)': dependencies: - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@18.2.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@18.2.0) '@projectstorm/geometry': 7.0.3 '@projectstorm/react-canvas-core': 7.0.3(@types/react@18.2.0) lodash: 4.17.23 @@ -27690,30 +31270,40 @@ snapshots: - '@types/react' - supports-color - '@projectstorm/react-diagrams-defaults@6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1)': + '@projectstorm/react-diagrams-defaults@6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1)': dependencies: '@emotion/react': 11.14.0(@types/react@18.2.0)(react@18.2.0) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@projectstorm/react-diagrams-core': 6.7.4(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) lodash: 4.17.23 react: 18.2.0 transitivePeerDependencies: - resize-observer-polyfill - '@projectstorm/react-diagrams-defaults@6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0))(lodash@4.17.23)(react@19.1.0)(resize-observer-polyfill@1.5.1)': + '@projectstorm/react-diagrams-defaults@6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0))(lodash@4.17.23)(react@19.1.0)(resize-observer-polyfill@1.5.1)': dependencies: '@emotion/react': 11.14.0(@types/react@18.2.0)(react@19.1.0) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0) '@projectstorm/react-diagrams-core': 6.7.4(lodash@4.17.23)(react@19.1.0)(resize-observer-polyfill@1.5.1) lodash: 4.17.23 react: 19.1.0 transitivePeerDependencies: - resize-observer-polyfill + '@projectstorm/react-diagrams-defaults@6.7.4(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.10.5(@babel/core@7.29.0)(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1)': + dependencies: + '@emotion/react': 11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0) + '@emotion/styled': 11.10.5(@babel/core@7.29.0)(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + '@projectstorm/react-diagrams-core': 6.7.4(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) + lodash: 4.17.23 + react: 18.2.0 + transitivePeerDependencies: + - resize-observer-polyfill + '@projectstorm/react-diagrams-defaults@7.1.3(@types/react@18.2.0)': dependencies: '@emotion/react': 11.14.0(@types/react@18.2.0)(react@18.2.0) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@projectstorm/geometry': 7.0.3 '@projectstorm/react-canvas-core': 7.0.3(@types/react@18.2.0) '@projectstorm/react-diagrams-core': 7.0.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0) @@ -27723,11 +31313,11 @@ snapshots: - '@types/react' - supports-color - '@projectstorm/react-diagrams-routing@6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1)': + '@projectstorm/react-diagrams-routing@6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1)': dependencies: '@projectstorm/geometry': 6.7.4 '@projectstorm/react-diagrams-core': 6.7.4(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) - '@projectstorm/react-diagrams-defaults': 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) + '@projectstorm/react-diagrams-defaults': 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) dagre: 0.8.5 lodash: 4.17.23 pathfinding: 0.4.18 @@ -27738,11 +31328,11 @@ snapshots: - '@emotion/styled' - resize-observer-polyfill - '@projectstorm/react-diagrams-routing@6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@19.1.0)(resize-observer-polyfill@1.5.1)': + '@projectstorm/react-diagrams-routing@6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@19.1.0)(resize-observer-polyfill@1.5.1)': dependencies: '@projectstorm/geometry': 6.7.4 '@projectstorm/react-diagrams-core': 6.7.4(lodash@4.17.23)(react@19.1.0)(resize-observer-polyfill@1.5.1) - '@projectstorm/react-diagrams-defaults': 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0))(lodash@4.17.23)(react@19.1.0)(resize-observer-polyfill@1.5.1) + '@projectstorm/react-diagrams-defaults': 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0))(lodash@4.17.23)(react@19.1.0)(resize-observer-polyfill@1.5.1) dagre: 0.8.5 lodash: 4.17.23 pathfinding: 0.4.18 @@ -27753,6 +31343,21 @@ snapshots: - '@emotion/styled' - resize-observer-polyfill + '@projectstorm/react-diagrams-routing@6.7.4(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.10.5(@babel/core@7.29.0)(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1)': + dependencies: + '@projectstorm/geometry': 6.7.4 + '@projectstorm/react-diagrams-core': 6.7.4(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) + '@projectstorm/react-diagrams-defaults': 6.7.4(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.10.5(@babel/core@7.29.0)(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) + dagre: 0.8.5 + lodash: 4.17.23 + pathfinding: 0.4.18 + paths-js: 0.4.11 + react: 18.2.0 + transitivePeerDependencies: + - '@emotion/react' + - '@emotion/styled' + - resize-observer-polyfill + '@projectstorm/react-diagrams-routing@7.1.3(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)': dependencies: '@projectstorm/geometry': 7.0.3 @@ -27769,11 +31374,11 @@ snapshots: - '@types/react' - supports-color - '@projectstorm/react-diagrams@6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1)': + '@projectstorm/react-diagrams@6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1)': dependencies: '@projectstorm/react-diagrams-core': 6.7.4(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) - '@projectstorm/react-diagrams-defaults': 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) - '@projectstorm/react-diagrams-routing': 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1) + '@projectstorm/react-diagrams-defaults': 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) + '@projectstorm/react-diagrams-routing': 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1) transitivePeerDependencies: - '@emotion/react' - '@emotion/styled' @@ -27784,11 +31389,26 @@ snapshots: - react - resize-observer-polyfill - '@projectstorm/react-diagrams@6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@19.1.0)(resize-observer-polyfill@1.5.1)': + '@projectstorm/react-diagrams@6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@19.1.0)(resize-observer-polyfill@1.5.1)': dependencies: '@projectstorm/react-diagrams-core': 6.7.4(lodash@4.17.23)(react@19.1.0)(resize-observer-polyfill@1.5.1) - '@projectstorm/react-diagrams-defaults': 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0))(lodash@4.17.23)(react@19.1.0)(resize-observer-polyfill@1.5.1) - '@projectstorm/react-diagrams-routing': 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@19.1.0)(resize-observer-polyfill@1.5.1) + '@projectstorm/react-diagrams-defaults': 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0))(lodash@4.17.23)(react@19.1.0)(resize-observer-polyfill@1.5.1) + '@projectstorm/react-diagrams-routing': 6.7.4(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@19.1.0)(resize-observer-polyfill@1.5.1) + transitivePeerDependencies: + - '@emotion/react' + - '@emotion/styled' + - dagre + - lodash + - pathfinding + - paths-js + - react + - resize-observer-polyfill + + '@projectstorm/react-diagrams@6.7.4(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.10.5(@babel/core@7.29.0)(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1)': + dependencies: + '@projectstorm/react-diagrams-core': 6.7.4(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) + '@projectstorm/react-diagrams-defaults': 6.7.4(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.10.5(@babel/core@7.29.0)(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(lodash@4.17.23)(react@18.2.0)(resize-observer-polyfill@1.5.1) + '@projectstorm/react-diagrams-routing': 6.7.4(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@emotion/styled@11.10.5(@babel/core@7.29.0)(@emotion/react@11.9.3(@babel/core@7.29.0)(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0))(dagre@0.8.5)(lodash@4.17.23)(pathfinding@0.4.18)(paths-js@0.4.11)(react@18.2.0)(resize-observer-polyfill@1.5.1) transitivePeerDependencies: - '@emotion/react' - '@emotion/styled' @@ -27833,6 +31453,24 @@ snapshots: '@protobufjs/utf8@1.1.0': {} + '@quilted/events@2.1.3': + dependencies: + '@preact/signals-core': 1.14.0 + + '@quilted/threads@3.3.1(@preact/signals-core@1.14.0)': + dependencies: + '@quilted/events': 2.1.3 + optionalDependencies: + '@preact/signals-core': 1.14.0 + + '@r2wc/core@1.3.1': {} + + '@r2wc/react-to-web-component@2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@r2wc/core': 1.3.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + '@radix-ui/colors@3.0.0': {} '@radix-ui/number@1.0.1': @@ -28373,7 +32011,7 @@ snapshots: '@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.28.6 - '@floating-ui/react-dom': 2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@floating-ui/react-dom': 2.1.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@18.2.0) @@ -28392,7 +32030,7 @@ snapshots: '@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.28.6 - '@floating-ui/react-dom': 2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@floating-ui/react-dom': 2.1.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@19.1.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@19.1.0) @@ -28410,7 +32048,7 @@ snapshots: '@radix-ui/react-popper@1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@floating-ui/react-dom': 2.1.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@floating-ui/react-dom': 2.1.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-arrow': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.2.0) @@ -28428,7 +32066,7 @@ snapshots: '@radix-ui/react-popper@1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/react-dom': 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/react-dom': 2.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-arrow': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.3.1) @@ -29274,22 +32912,31 @@ snapshots: '@radix-ui/rect@1.1.1': {} - '@react-aria/focus@3.21.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@reach/router@1.3.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@react-aria/interactions': 3.27.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.33.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-types/shared': 3.33.0(react@18.2.0) + create-react-context: 0.3.0(prop-types@15.8.1)(react@18.2.0) + invariant: 2.2.4 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-lifecycles-compat: 3.0.4 + + '@react-aria/focus@3.21.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-aria/interactions': 3.27.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.33.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-types/shared': 3.33.1(react@18.2.0) '@swc/helpers': 0.5.19 clsx: 2.1.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/interactions@3.27.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@react-aria/interactions@3.27.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/ssr': 3.9.10(react@18.2.0) - '@react-aria/utils': 3.33.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.33.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-stately/flags': 3.1.2 - '@react-types/shared': 3.33.0(react@18.2.0) + '@react-types/shared': 3.33.1(react@18.2.0) '@swc/helpers': 0.5.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -29299,12 +32946,12 @@ snapshots: '@swc/helpers': 0.5.19 react: 18.2.0 - '@react-aria/utils@3.33.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@react-aria/utils@3.33.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/ssr': 3.9.10(react@18.2.0) '@react-stately/flags': 3.1.2 '@react-stately/utils': 3.11.0(react@18.2.0) - '@react-types/shared': 3.33.0(react@18.2.0) + '@react-types/shared': 3.33.1(react@18.2.0) '@swc/helpers': 0.5.19 clsx: 2.1.1 react: 18.2.0 @@ -29335,28 +32982,48 @@ snapshots: '@swc/helpers': 0.5.19 react: 18.2.0 - '@react-types/shared@3.33.0(react@18.2.0)': + '@react-types/shared@3.33.1(react@18.2.0)': dependencies: react: 18.2.0 - '@redhat-developer/locators@1.19.0(@redhat-developer/page-objects@1.19.0(selenium-webdriver@4.41.0)(typescript@5.8.3))(selenium-webdriver@4.41.0)': + '@redhat-developer/locators@1.19.1(@redhat-developer/page-objects@1.19.1(selenium-webdriver@4.41.0)(typescript@5.8.3))(selenium-webdriver@4.41.0)': dependencies: - '@redhat-developer/page-objects': 1.19.0(selenium-webdriver@4.41.0)(typescript@5.8.3) + '@redhat-developer/page-objects': 1.19.1(selenium-webdriver@4.41.0)(typescript@5.8.3) selenium-webdriver: 4.41.0 - '@redhat-developer/page-objects@1.19.0(selenium-webdriver@4.41.0)(typescript@5.8.3)': + '@redhat-developer/page-objects@1.19.1(selenium-webdriver@4.41.0)(typescript@5.8.3)': dependencies: - clipboardy: 5.3.0 + clipboardy: 5.3.1 clone-deep: 4.0.1 compare-versions: 6.1.1 - fs-extra: 11.3.3 + fs-extra: 11.3.4 selenium-webdriver: 4.41.0 type-fest: 4.41.0 typescript: 5.8.3 - '@rollup/plugin-babel@5.3.1(@babel/core@7.27.7)(@types/babel__core@7.20.5)(rollup@1.32.1)': + '@remote-dom/core@1.10.1(@preact/signals-core@1.14.0)': + dependencies: + '@remote-dom/polyfill': 1.5.1 + htm: 3.1.1 + optionalDependencies: + '@preact/signals-core': 1.14.0 + + '@remote-dom/polyfill@1.5.1': {} + + '@remote-dom/react@1.2.2(@preact/signals-core@1.14.0)(react@18.3.1)': + dependencies: + '@remote-dom/core': 1.10.1(@preact/signals-core@1.14.0) + '@types/react': 18.2.0 + htm: 3.1.1 + optionalDependencies: + react: 18.3.1 + transitivePeerDependencies: + - '@preact/signals-core' + - preact + + '@rollup/plugin-babel@5.3.1(@babel/core@7.27.1)(@types/babel__core@7.20.5)(rollup@1.32.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-module-imports': 7.28.6 '@rollup/pluginutils': 3.1.0(rollup@1.32.1) rollup: 1.32.1 @@ -29376,9 +33043,9 @@ snapshots: resolve: 1.22.11 rollup: 1.32.1 - '@rollup/plugin-commonjs@28.0.9(rollup@4.57.1)': + '@rollup/plugin-commonjs@28.0.3(rollup@4.41.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) + '@rollup/pluginutils': 5.3.0(rollup@4.41.0) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.5.0(picomatch@4.0.3) @@ -29386,28 +33053,28 @@ snapshots: magic-string: 0.30.21 picomatch: 4.0.3 optionalDependencies: - rollup: 4.57.1 + rollup: 4.41.0 '@rollup/plugin-json@4.1.0(rollup@1.32.1)': dependencies: '@rollup/pluginutils': 3.1.0(rollup@1.32.1) rollup: 1.32.1 - '@rollup/plugin-json@6.1.0(rollup@4.57.1)': + '@rollup/plugin-json@6.1.0(rollup@4.41.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) + '@rollup/pluginutils': 5.3.0(rollup@4.41.0) optionalDependencies: - rollup: 4.57.1 + rollup: 4.41.0 - '@rollup/plugin-node-resolve@16.0.3(rollup@4.57.1)': + '@rollup/plugin-node-resolve@16.0.1(rollup@4.41.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) + '@rollup/pluginutils': 5.3.0(rollup@4.41.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.11 optionalDependencies: - rollup: 4.57.1 + rollup: 4.41.0 '@rollup/plugin-node-resolve@9.0.0(rollup@1.32.1)': dependencies: @@ -29437,87 +33104,90 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/pluginutils@5.3.0(rollup@4.57.1)': + '@rollup/pluginutils@5.3.0(rollup@4.41.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.57.1 + rollup: 4.41.0 - '@rollup/rollup-android-arm-eabi@4.57.1': + '@rollup/rollup-android-arm-eabi@4.41.0': optional: true - '@rollup/rollup-android-arm64@4.57.1': + '@rollup/rollup-android-arm64@4.41.0': optional: true - '@rollup/rollup-darwin-arm64@4.57.1': + '@rollup/rollup-darwin-arm64@4.41.0': optional: true - '@rollup/rollup-darwin-x64@4.57.1': + '@rollup/rollup-darwin-arm64@4.59.0': optional: true - '@rollup/rollup-freebsd-arm64@4.57.1': + '@rollup/rollup-darwin-x64@4.41.0': optional: true - '@rollup/rollup-freebsd-x64@4.57.1': + '@rollup/rollup-darwin-x64@4.59.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + '@rollup/rollup-freebsd-arm64@4.41.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.57.1': + '@rollup/rollup-freebsd-x64@4.41.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.57.1': + '@rollup/rollup-linux-arm-gnueabihf@4.41.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.57.1': + '@rollup/rollup-linux-arm-musleabihf@4.41.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.57.1': + '@rollup/rollup-linux-arm64-gnu@4.41.0': optional: true - '@rollup/rollup-linux-loong64-musl@4.57.1': + '@rollup/rollup-linux-arm64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.57.1': + '@rollup/rollup-linux-arm64-musl@4.41.0': optional: true - '@rollup/rollup-linux-ppc64-musl@4.57.1': + '@rollup/rollup-linux-loongarch64-gnu@4.41.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.57.1': + '@rollup/rollup-linux-powerpc64le-gnu@4.41.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.57.1': + '@rollup/rollup-linux-riscv64-gnu@4.41.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.57.1': + '@rollup/rollup-linux-riscv64-musl@4.41.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.57.1': + '@rollup/rollup-linux-s390x-gnu@4.41.0': optional: true - '@rollup/rollup-linux-x64-musl@4.57.1': + '@rollup/rollup-linux-x64-gnu@4.41.0': optional: true - '@rollup/rollup-openbsd-x64@4.57.1': + '@rollup/rollup-linux-x64-gnu@4.59.0': optional: true - '@rollup/rollup-openharmony-arm64@4.57.1': + '@rollup/rollup-linux-x64-musl@4.41.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.57.1': + '@rollup/rollup-win32-arm64-msvc@4.41.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.57.1': + '@rollup/rollup-win32-arm64-msvc@4.59.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.57.1': + '@rollup/rollup-win32-ia32-msvc@4.41.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.57.1': + '@rollup/rollup-win32-x64-msvc@4.41.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true '@rtsao/scc@1.1.0': {} @@ -29537,7 +33207,7 @@ snapshots: '@secretlint/types': 10.2.2 ajv: 8.17.1 debug: 4.4.3(supports-color@8.1.1) - rc-config-loader: 4.1.3 + rc-config-loader: 4.1.4 transitivePeerDependencies: - supports-color @@ -29560,7 +33230,7 @@ snapshots: chalk: 5.6.2 debug: 4.4.3(supports-color@8.1.1) pluralize: 8.0.0 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 table: 6.9.0 terminal-link: 4.0.0 transitivePeerDependencies: @@ -29604,7 +33274,7 @@ snapshots: dependencies: https-proxy-agent: 5.0.1 mkdirp: 0.5.6 - node-fetch: 2.6.13(encoding@0.1.13) + node-fetch: 2.6.7(encoding@0.1.13) progress: 2.0.3 proxy-from-env: 1.1.0 which: 2.0.2 @@ -29612,10 +33282,10 @@ snapshots: - encoding - supports-color - '@sentry/webpack-plugin@1.21.0(encoding@0.1.13)': + '@sentry/webpack-plugin@1.20.1(encoding@0.1.13)': dependencies: '@sentry/cli': 1.77.3(encoding@0.1.13) - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 transitivePeerDependencies: - encoding - supports-color @@ -29672,254 +33342,254 @@ snapshots: '@size-limit/file': 11.2.0(size-limit@11.2.0) size-limit: 11.2.0 - '@smithy/abort-controller@4.2.8': + '@smithy/abort-controller@4.2.11': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/chunked-blob-reader-native@4.2.1': + '@smithy/chunked-blob-reader-native@4.2.3': dependencies: - '@smithy/util-base64': 4.3.0 + '@smithy/util-base64': 4.3.2 tslib: 2.8.1 - '@smithy/chunked-blob-reader@5.2.0': + '@smithy/chunked-blob-reader@5.2.2': dependencies: tslib: 2.8.1 - '@smithy/config-resolver@4.4.6': + '@smithy/config-resolver@4.4.10': dependencies: - '@smithy/node-config-provider': 4.3.8 - '@smithy/types': 4.12.0 - '@smithy/util-config-provider': 4.2.0 - '@smithy/util-endpoints': 3.2.8 - '@smithy/util-middleware': 4.2.8 + '@smithy/node-config-provider': 4.3.11 + '@smithy/types': 4.13.0 + '@smithy/util-config-provider': 4.2.2 + '@smithy/util-endpoints': 3.3.2 + '@smithy/util-middleware': 4.2.11 tslib: 2.8.1 - '@smithy/core@3.23.3': - dependencies: - '@smithy/middleware-serde': 4.2.9 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-stream': 4.5.13 - '@smithy/util-utf8': 4.2.0 - '@smithy/uuid': 1.1.0 + '@smithy/core@3.23.9': + dependencies: + '@smithy/middleware-serde': 4.2.12 + '@smithy/protocol-http': 5.3.11 + '@smithy/types': 4.13.0 + '@smithy/util-base64': 4.3.2 + '@smithy/util-body-length-browser': 4.2.2 + '@smithy/util-middleware': 4.2.11 + '@smithy/util-stream': 4.5.17 + '@smithy/util-utf8': 4.2.2 + '@smithy/uuid': 1.1.2 tslib: 2.8.1 - '@smithy/credential-provider-imds@4.2.8': + '@smithy/credential-provider-imds@4.2.11': dependencies: - '@smithy/node-config-provider': 4.3.8 - '@smithy/property-provider': 4.2.8 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 + '@smithy/node-config-provider': 4.3.11 + '@smithy/property-provider': 4.2.11 + '@smithy/types': 4.13.0 + '@smithy/url-parser': 4.2.11 tslib: 2.8.1 - '@smithy/eventstream-codec@4.2.8': + '@smithy/eventstream-codec@4.2.11': dependencies: '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.12.0 - '@smithy/util-hex-encoding': 4.2.0 + '@smithy/types': 4.13.0 + '@smithy/util-hex-encoding': 4.2.2 tslib: 2.8.1 - '@smithy/eventstream-serde-browser@4.2.8': + '@smithy/eventstream-serde-browser@4.2.11': dependencies: - '@smithy/eventstream-serde-universal': 4.2.8 - '@smithy/types': 4.12.0 + '@smithy/eventstream-serde-universal': 4.2.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/eventstream-serde-config-resolver@4.3.8': + '@smithy/eventstream-serde-config-resolver@4.3.11': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/eventstream-serde-node@4.2.8': + '@smithy/eventstream-serde-node@4.2.11': dependencies: - '@smithy/eventstream-serde-universal': 4.2.8 - '@smithy/types': 4.12.0 + '@smithy/eventstream-serde-universal': 4.2.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/eventstream-serde-universal@4.2.8': + '@smithy/eventstream-serde-universal@4.2.11': dependencies: - '@smithy/eventstream-codec': 4.2.8 - '@smithy/types': 4.12.0 + '@smithy/eventstream-codec': 4.2.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.3.9': + '@smithy/fetch-http-handler@5.3.13': dependencies: - '@smithy/protocol-http': 5.3.8 - '@smithy/querystring-builder': 4.2.8 - '@smithy/types': 4.12.0 - '@smithy/util-base64': 4.3.0 + '@smithy/protocol-http': 5.3.11 + '@smithy/querystring-builder': 4.2.11 + '@smithy/types': 4.13.0 + '@smithy/util-base64': 4.3.2 tslib: 2.8.1 - '@smithy/hash-blob-browser@4.2.9': + '@smithy/hash-blob-browser@4.2.12': dependencies: - '@smithy/chunked-blob-reader': 5.2.0 - '@smithy/chunked-blob-reader-native': 4.2.1 - '@smithy/types': 4.12.0 + '@smithy/chunked-blob-reader': 5.2.2 + '@smithy/chunked-blob-reader-native': 4.2.3 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/hash-node@4.2.8': + '@smithy/hash-node@4.2.11': dependencies: - '@smithy/types': 4.12.0 - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-utf8': 4.2.0 + '@smithy/types': 4.13.0 + '@smithy/util-buffer-from': 4.2.2 + '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@smithy/hash-stream-node@4.2.8': + '@smithy/hash-stream-node@4.2.11': dependencies: - '@smithy/types': 4.12.0 - '@smithy/util-utf8': 4.2.0 + '@smithy/types': 4.13.0 + '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@smithy/invalid-dependency@4.2.8': + '@smithy/invalid-dependency@4.2.11': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.13.0 tslib: 2.8.1 '@smithy/is-array-buffer@2.2.0': dependencies: tslib: 2.8.1 - '@smithy/is-array-buffer@4.2.0': + '@smithy/is-array-buffer@4.2.2': dependencies: tslib: 2.8.1 - '@smithy/md5-js@4.2.8': + '@smithy/md5-js@4.2.11': dependencies: - '@smithy/types': 4.12.0 - '@smithy/util-utf8': 4.2.0 + '@smithy/types': 4.13.0 + '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@smithy/middleware-content-length@4.2.8': + '@smithy/middleware-content-length@4.2.11': dependencies: - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 + '@smithy/protocol-http': 5.3.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.17': + '@smithy/middleware-endpoint@4.4.23': dependencies: - '@smithy/core': 3.23.3 - '@smithy/middleware-serde': 4.2.9 - '@smithy/node-config-provider': 4.3.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-middleware': 4.2.8 + '@smithy/core': 3.23.9 + '@smithy/middleware-serde': 4.2.12 + '@smithy/node-config-provider': 4.3.11 + '@smithy/shared-ini-file-loader': 4.4.6 + '@smithy/types': 4.13.0 + '@smithy/url-parser': 4.2.11 + '@smithy/util-middleware': 4.2.11 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.34': + '@smithy/middleware-retry@4.4.40': dependencies: - '@smithy/node-config-provider': 4.3.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/service-error-classification': 4.2.8 - '@smithy/smithy-client': 4.11.6 - '@smithy/types': 4.12.0 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-retry': 4.2.8 - '@smithy/uuid': 1.1.0 + '@smithy/node-config-provider': 4.3.11 + '@smithy/protocol-http': 5.3.11 + '@smithy/service-error-classification': 4.2.11 + '@smithy/smithy-client': 4.12.3 + '@smithy/types': 4.13.0 + '@smithy/util-middleware': 4.2.11 + '@smithy/util-retry': 4.2.11 + '@smithy/uuid': 1.1.2 tslib: 2.8.1 - '@smithy/middleware-serde@4.2.9': + '@smithy/middleware-serde@4.2.12': dependencies: - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 + '@smithy/protocol-http': 5.3.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/middleware-stack@4.2.8': + '@smithy/middleware-stack@4.2.11': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/node-config-provider@4.3.8': + '@smithy/node-config-provider@4.3.11': dependencies: - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 + '@smithy/property-provider': 4.2.11 + '@smithy/shared-ini-file-loader': 4.4.6 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/node-http-handler@4.4.10': + '@smithy/node-http-handler@4.4.14': dependencies: - '@smithy/abort-controller': 4.2.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/querystring-builder': 4.2.8 - '@smithy/types': 4.12.0 + '@smithy/abort-controller': 4.2.11 + '@smithy/protocol-http': 5.3.11 + '@smithy/querystring-builder': 4.2.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/property-provider@4.2.8': + '@smithy/property-provider@4.2.11': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/protocol-http@5.3.8': + '@smithy/protocol-http@5.3.11': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/querystring-builder@4.2.8': + '@smithy/querystring-builder@4.2.11': dependencies: - '@smithy/types': 4.12.0 - '@smithy/util-uri-escape': 4.2.0 + '@smithy/types': 4.13.0 + '@smithy/util-uri-escape': 4.2.2 tslib: 2.8.1 - '@smithy/querystring-parser@4.2.8': + '@smithy/querystring-parser@4.2.11': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/service-error-classification@4.2.8': + '@smithy/service-error-classification@4.2.11': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.13.0 - '@smithy/shared-ini-file-loader@4.4.3': + '@smithy/shared-ini-file-loader@4.4.6': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/signature-v4@5.3.8': + '@smithy/signature-v4@5.3.11': dependencies: - '@smithy/is-array-buffer': 4.2.0 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 - '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-uri-escape': 4.2.0 - '@smithy/util-utf8': 4.2.0 + '@smithy/is-array-buffer': 4.2.2 + '@smithy/protocol-http': 5.3.11 + '@smithy/types': 4.13.0 + '@smithy/util-hex-encoding': 4.2.2 + '@smithy/util-middleware': 4.2.11 + '@smithy/util-uri-escape': 4.2.2 + '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@smithy/smithy-client@4.11.6': + '@smithy/smithy-client@4.12.3': dependencies: - '@smithy/core': 3.23.3 - '@smithy/middleware-endpoint': 4.4.17 - '@smithy/middleware-stack': 4.2.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 - '@smithy/util-stream': 4.5.13 + '@smithy/core': 3.23.9 + '@smithy/middleware-endpoint': 4.4.23 + '@smithy/middleware-stack': 4.2.11 + '@smithy/protocol-http': 5.3.11 + '@smithy/types': 4.13.0 + '@smithy/util-stream': 4.5.17 tslib: 2.8.1 - '@smithy/types@4.12.0': + '@smithy/types@4.13.0': dependencies: tslib: 2.8.1 - '@smithy/url-parser@4.2.8': + '@smithy/url-parser@4.2.11': dependencies: - '@smithy/querystring-parser': 4.2.8 - '@smithy/types': 4.12.0 + '@smithy/querystring-parser': 4.2.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/util-base64@4.3.0': + '@smithy/util-base64@4.3.2': dependencies: - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-utf8': 4.2.0 + '@smithy/util-buffer-from': 4.2.2 + '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@smithy/util-body-length-browser@4.2.0': + '@smithy/util-body-length-browser@4.2.2': dependencies: tslib: 2.8.1 - '@smithy/util-body-length-node@4.2.1': + '@smithy/util-body-length-node@4.2.3': dependencies: tslib: 2.8.1 @@ -29928,65 +33598,65 @@ snapshots: '@smithy/is-array-buffer': 2.2.0 tslib: 2.8.1 - '@smithy/util-buffer-from@4.2.0': + '@smithy/util-buffer-from@4.2.2': dependencies: - '@smithy/is-array-buffer': 4.2.0 + '@smithy/is-array-buffer': 4.2.2 tslib: 2.8.1 - '@smithy/util-config-provider@4.2.0': + '@smithy/util-config-provider@4.2.2': dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.3.33': + '@smithy/util-defaults-mode-browser@4.3.39': dependencies: - '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.11.6 - '@smithy/types': 4.12.0 + '@smithy/property-provider': 4.2.11 + '@smithy/smithy-client': 4.12.3 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.2.36': + '@smithy/util-defaults-mode-node@4.2.42': dependencies: - '@smithy/config-resolver': 4.4.6 - '@smithy/credential-provider-imds': 4.2.8 - '@smithy/node-config-provider': 4.3.8 - '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.11.6 - '@smithy/types': 4.12.0 + '@smithy/config-resolver': 4.4.10 + '@smithy/credential-provider-imds': 4.2.11 + '@smithy/node-config-provider': 4.3.11 + '@smithy/property-provider': 4.2.11 + '@smithy/smithy-client': 4.12.3 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/util-endpoints@3.2.8': + '@smithy/util-endpoints@3.3.2': dependencies: - '@smithy/node-config-provider': 4.3.8 - '@smithy/types': 4.12.0 + '@smithy/node-config-provider': 4.3.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/util-hex-encoding@4.2.0': + '@smithy/util-hex-encoding@4.2.2': dependencies: tslib: 2.8.1 - '@smithy/util-middleware@4.2.8': + '@smithy/util-middleware@4.2.11': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/util-retry@4.2.8': + '@smithy/util-retry@4.2.11': dependencies: - '@smithy/service-error-classification': 4.2.8 - '@smithy/types': 4.12.0 + '@smithy/service-error-classification': 4.2.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/util-stream@4.5.13': + '@smithy/util-stream@4.5.17': dependencies: - '@smithy/fetch-http-handler': 5.3.9 - '@smithy/node-http-handler': 4.4.10 - '@smithy/types': 4.12.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-utf8': 4.2.0 + '@smithy/fetch-http-handler': 5.3.13 + '@smithy/node-http-handler': 4.4.14 + '@smithy/types': 4.13.0 + '@smithy/util-base64': 4.3.2 + '@smithy/util-buffer-from': 4.2.2 + '@smithy/util-hex-encoding': 4.2.2 + '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@smithy/util-uri-escape@4.2.0': + '@smithy/util-uri-escape@4.2.2': dependencies: tslib: 2.8.1 @@ -29995,18 +33665,18 @@ snapshots: '@smithy/util-buffer-from': 2.2.0 tslib: 2.8.1 - '@smithy/util-utf8@4.2.0': + '@smithy/util-utf8@4.2.2': dependencies: - '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-buffer-from': 4.2.2 tslib: 2.8.1 - '@smithy/util-waiter@4.2.8': + '@smithy/util-waiter@4.2.11': dependencies: - '@smithy/abort-controller': 4.2.8 - '@smithy/types': 4.12.0 + '@smithy/abort-controller': 4.2.11 + '@smithy/types': 4.13.0 tslib: 2.8.1 - '@smithy/uuid@1.1.0': + '@smithy/uuid@1.1.2': dependencies: tslib: 2.8.1 @@ -30046,16 +33716,41 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/addon-actions@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/addon-actions@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-events': 7.4.6 + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.9 + '@storybook/components': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 6.5.9 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + '@storybook/theming': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + core-js: 3.48.0 + fast-deep-equal: 3.1.3 + global: 4.4.0 + lodash: 4.17.23 + polished: 4.3.1 + prop-types: 15.8.1 + react-inspector: 5.1.1(react@18.2.0) + regenerator-runtime: 0.13.11 + telejson: 6.0.8 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + uuid-browser: 3.1.0 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@storybook/addon-actions@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 7.4.0 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/types': 7.4.6 + '@storybook/manager-api': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.0 + '@storybook/theming': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/types': 7.4.0 dequal: 2.0.3 lodash: 4.17.23 polished: 4.3.1 @@ -30071,16 +33766,16 @@ snapshots: - '@types/react' - '@types/react-dom' - '@storybook/addon-actions@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/addon-actions@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/core-events': 7.4.6 + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/core-events': 7.4.0 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/types': 7.4.6 + '@storybook/manager-api': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/preview-api': 7.4.0 + '@storybook/theming': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/types': 7.4.0 dequal: 2.0.3 lodash: 4.17.23 polished: 4.3.1 @@ -30096,22 +33791,13 @@ snapshots: - '@types/react' - '@types/react-dom' - '@storybook/addon-actions@8.6.14(storybook@8.6.15(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - '@types/uuid': 9.0.8 - dequal: 2.0.3 - polished: 4.3.1 - storybook: 8.6.15(prettier@3.5.3) - uuid: 9.0.1 - - '@storybook/addon-actions@8.6.15(storybook@8.6.15(prettier@3.5.3))': + '@storybook/addon-actions@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) uuid: 9.0.1 '@storybook/addon-backgrounds@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': @@ -30133,16 +33819,35 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/addon-backgrounds@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/addon-backgrounds@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-events': 7.4.6 + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.9 + '@storybook/components': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 6.5.9 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + '@storybook/theming': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + core-js: 3.48.0 + global: 4.4.0 + memoizerific: 1.11.3 + regenerator-runtime: 0.13.11 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@storybook/addon-backgrounds@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 7.4.0 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/types': 7.4.6 + '@storybook/manager-api': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.0 + '@storybook/theming': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/types': 7.4.0 memoizerific: 1.11.3 ts-dedent: 2.2.0 optionalDependencies: @@ -30152,16 +33857,16 @@ snapshots: - '@types/react' - '@types/react-dom' - '@storybook/addon-backgrounds@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/addon-backgrounds@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/core-events': 7.4.6 + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/core-events': 7.4.0 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/types': 7.4.6 + '@storybook/manager-api': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/preview-api': 7.4.0 + '@storybook/theming': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/types': 7.4.0 memoizerific: 1.11.3 ts-dedent: 2.2.0 optionalDependencies: @@ -30171,20 +33876,20 @@ snapshots: - '@types/react' - '@types/react-dom' - '@storybook/addon-backgrounds@8.6.14(storybook@8.6.15(prettier@3.5.3))': + '@storybook/addon-backgrounds@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/addon-controls@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + '@storybook/addon-controls@6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': dependencies: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-common': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/node-logger': 6.5.16 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -30196,26 +33901,24 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - - '@swc/core' - - esbuild - eslint - supports-color - typescript - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/addon-controls@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + '@storybook/addon-controls@6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': dependencies: - '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/client-logger': 6.5.16 - '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.9 + '@storybook/components': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/node-logger': 6.5.16 - '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/node-logger': 6.5.9 + '@storybook/store': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) core-js: 3.48.0 lodash: 4.17.23 ts-dedent: 2.2.0 @@ -30223,27 +33926,25 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - - '@swc/core' - - esbuild - eslint - supports-color - typescript - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/addon-controls@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@storybook/blocks': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 7.4.6(encoding@0.1.13) - '@storybook/core-events': 7.4.6 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/node-logger': 7.4.6 - '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/types': 7.4.6 + '@storybook/addon-controls@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/blocks': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-common': 7.4.0(encoding@0.1.13) + '@storybook/core-events': 7.4.0 + '@storybook/manager-api': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/node-logger': 7.4.0 + '@storybook/preview-api': 7.4.0 + '@storybook/theming': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/types': 7.4.0 lodash: 4.17.23 ts-dedent: 2.2.0 optionalDependencies: @@ -30255,18 +33956,18 @@ snapshots: - encoding - supports-color - '@storybook/addon-controls@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/addon-controls@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@storybook/blocks': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/core-common': 7.4.6(encoding@0.1.13) - '@storybook/core-events': 7.4.6 - '@storybook/manager-api': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/node-logger': 7.4.6 - '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/types': 7.4.6 + '@storybook/blocks': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/core-common': 7.4.0(encoding@0.1.13) + '@storybook/core-events': 7.4.0 + '@storybook/manager-api': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/node-logger': 7.4.0 + '@storybook/preview-api': 7.4.0 + '@storybook/theming': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/types': 7.4.0 lodash: 4.17.23 ts-dedent: 2.2.0 optionalDependencies: @@ -30278,34 +33979,34 @@ snapshots: - encoding - supports-color - '@storybook/addon-controls@8.6.14(storybook@8.6.15(prettier@3.5.3))': + '@storybook/addon-controls@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 dequal: 2.0.3 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/addon-docs@6.5.16(@babel/core@7.27.7)(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.105.2)': + '@storybook/addon-docs@6.5.16(@babel/core@7.27.1)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.104.1)': dependencies: - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.27.7) - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) '@jest/transform': 26.6.2 '@mdx-js/react': 1.6.22(react@18.2.0) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-common': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/mdx1-csf': 0.0.1(@babel/core@7.27.7) + '@storybook/mdx1-csf': 0.0.1(@babel/core@7.27.1) '@storybook/node-logger': 6.5.16 '@storybook/postinstall': 6.5.16 '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/source-loader': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@5.104.1) core-js: 3.48.0 fast-deep-equal: 3.1.3 global: 4.4.0 @@ -30320,37 +34021,35 @@ snapshots: react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - '@babel/core' - - '@swc/core' - - esbuild - eslint - supports-color - typescript - - uglify-js - vue-template-compiler - webpack - webpack-cli + - webpack-command - '@storybook/addon-docs@6.5.16(@babel/core@7.27.7)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.105.2)': + '@storybook/addon-docs@6.5.9(@babel/core@7.27.1)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.104.1)': dependencies: - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.27.7) - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) '@jest/transform': 26.6.2 '@mdx-js/react': 1.6.22(react@18.2.0) - '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) - '@storybook/core-events': 6.5.16 + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/components': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-events': 6.5.9 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/docs-tools': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/mdx1-csf': 0.0.1(@babel/core@7.27.7) - '@storybook/node-logger': 6.5.16 - '@storybook/postinstall': 6.5.16 - '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/source-loader': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + '@storybook/docs-tools': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/mdx1-csf': 0.0.1(@babel/core@7.27.1) + '@storybook/node-logger': 6.5.9 + '@storybook/postinstall': 6.5.9 + '@storybook/preview-web': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/source-loader': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/store': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@5.104.1) core-js: 3.48.0 fast-deep-equal: 3.1.3 global: 4.4.0 @@ -30365,34 +34064,32 @@ snapshots: react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - '@babel/core' - - '@swc/core' - - esbuild - eslint - supports-color - typescript - - uglify-js - vue-template-compiler - webpack - webpack-cli + - webpack-command - '@storybook/addon-docs@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/addon-docs@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@jest/transform': 29.7.0 '@mdx-js/react': 2.3.0(react@18.2.0) - '@storybook/blocks': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/csf-plugin': 7.4.6 - '@storybook/csf-tools': 7.4.6 + '@storybook/blocks': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/csf-plugin': 7.4.0 + '@storybook/csf-tools': 7.4.0 '@storybook/global': 5.0.0 '@storybook/mdx2-csf': 1.1.0 - '@storybook/node-logger': 7.4.6 - '@storybook/postinstall': 7.4.6 - '@storybook/preview-api': 7.4.6 - '@storybook/react-dom-shim': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/types': 7.4.6 - fs-extra: 11.3.3 + '@storybook/node-logger': 7.4.0 + '@storybook/postinstall': 7.4.0 + '@storybook/preview-api': 7.4.0 + '@storybook/react-dom-shim': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/types': 7.4.0 + fs-extra: 11.3.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) remark-external-links: 8.0.0 @@ -30404,24 +34101,24 @@ snapshots: - encoding - supports-color - '@storybook/addon-docs@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/addon-docs@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@jest/transform': 29.7.0 '@mdx-js/react': 2.3.0(react@19.1.0) - '@storybook/blocks': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/csf-plugin': 7.4.6 - '@storybook/csf-tools': 7.4.6 + '@storybook/blocks': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/csf-plugin': 7.4.0 + '@storybook/csf-tools': 7.4.0 '@storybook/global': 5.0.0 '@storybook/mdx2-csf': 1.1.0 - '@storybook/node-logger': 7.4.6 - '@storybook/postinstall': 7.4.6 - '@storybook/preview-api': 7.4.6 - '@storybook/react-dom-shim': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/theming': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/types': 7.4.6 - fs-extra: 11.3.3 + '@storybook/node-logger': 7.4.0 + '@storybook/postinstall': 7.4.0 + '@storybook/preview-api': 7.4.0 + '@storybook/react-dom-shim': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/theming': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/types': 7.4.0 + fs-extra: 11.3.0 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) remark-external-links: 8.0.0 @@ -30433,102 +34130,98 @@ snapshots: - encoding - supports-color - '@storybook/addon-docs@8.6.14(@types/react@18.2.0)(storybook@8.6.15(prettier@3.5.3))': + '@storybook/addon-docs@8.6.14(@types/react@18.2.0)(storybook@8.6.14(prettier@3.5.3))': dependencies: '@mdx-js/react': 3.1.1(@types/react@18.2.0)(react@19.1.0) - '@storybook/blocks': 8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.15(prettier@3.5.3)) - '@storybook/csf-plugin': 8.6.14(storybook@8.6.15(prettier@3.5.3)) - '@storybook/react-dom-shim': 8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.15(prettier@3.5.3)) + '@storybook/blocks': 8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3)) + '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/react-dom-shim': 8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3)) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-essentials@6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.105.2)': + '@storybook/addon-essentials@6.5.16(@babel/core@7.27.1)(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.18(@swc/helpers@0.5.19))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.104.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@storybook/addon-actions': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-backgrounds': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addon-controls': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) - '@storybook/addon-docs': 6.5.16(@babel/core@7.27.7)(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.105.2) + '@storybook/addon-controls': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/addon-docs': 6.5.16(@babel/core@7.27.1)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.104.1) '@storybook/addon-measure': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-outline': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-toolbars': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-viewport': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-common': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/node-logger': 6.5.16 core-js: 3.48.0 regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 optionalDependencies: - '@storybook/builder-webpack5': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/builder-webpack5': 6.5.16(@swc/core@1.15.18(@swc/helpers@0.5.19))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) transitivePeerDependencies: - '@storybook/mdx2-csf' - - '@swc/core' - - esbuild - eslint - supports-color - typescript - - uglify-js - vue-template-compiler - webpack-cli - - '@storybook/addon-essentials@6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.105.2)': - dependencies: - '@babel/core': 7.27.7 - '@storybook/addon-actions': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addon-backgrounds': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addon-controls': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) - '@storybook/addon-docs': 6.5.16(@babel/core@7.27.7)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.105.2) - '@storybook/addon-measure': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addon-outline': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addon-toolbars': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addon-viewport': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) - '@storybook/node-logger': 6.5.16 + - webpack-command + + '@storybook/addon-essentials@6.5.9(@babel/core@7.27.1)(@storybook/builder-webpack5@6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.104.1)': + dependencies: + '@babel/core': 7.27.1 + '@storybook/addon-actions': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-backgrounds': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-controls': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/addon-docs': 6.5.9(@babel/core@7.27.1)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.104.1) + '@storybook/addon-measure': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-outline': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-toolbars': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-viewport': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/node-logger': 6.5.9 core-js: 3.48.0 regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 optionalDependencies: - '@storybook/builder-webpack5': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/builder-webpack5': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) transitivePeerDependencies: - '@storybook/mdx2-csf' - - '@swc/core' - - esbuild - eslint - supports-color - typescript - - uglify-js - vue-template-compiler - webpack-cli - - '@storybook/addon-essentials@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@storybook/addon-actions': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addon-backgrounds': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addon-controls': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addon-docs': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addon-highlight': 7.4.6 - '@storybook/addon-measure': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addon-outline': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addon-toolbars': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addon-viewport': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 7.4.6(encoding@0.1.13) - '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/node-logger': 7.4.6 - '@storybook/preview-api': 7.4.6 + - webpack-command + + '@storybook/addon-essentials@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/addon-actions': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-backgrounds': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-controls': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-docs': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-highlight': 7.4.0 + '@storybook/addon-measure': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-outline': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-toolbars': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-viewport': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-common': 7.4.0(encoding@0.1.13) + '@storybook/manager-api': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/node-logger': 7.4.0 + '@storybook/preview-api': 7.4.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) ts-dedent: 2.2.0 @@ -30538,21 +34231,21 @@ snapshots: - encoding - supports-color - '@storybook/addon-essentials@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@storybook/addon-actions': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/addon-backgrounds': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/addon-controls': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/addon-docs': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/addon-highlight': 7.4.6 - '@storybook/addon-measure': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/addon-outline': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/addon-toolbars': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/addon-viewport': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/core-common': 7.4.6(encoding@0.1.13) - '@storybook/manager-api': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/node-logger': 7.4.6 - '@storybook/preview-api': 7.4.6 + '@storybook/addon-essentials@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@storybook/addon-actions': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/addon-backgrounds': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/addon-controls': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/addon-docs': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/addon-highlight': 7.4.0 + '@storybook/addon-measure': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/addon-outline': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/addon-toolbars': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/addon-viewport': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/core-common': 7.4.0(encoding@0.1.13) + '@storybook/manager-api': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/node-logger': 7.4.0 + '@storybook/preview-api': 7.4.0 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) ts-dedent: 2.2.0 @@ -30562,40 +34255,40 @@ snapshots: - encoding - supports-color - '@storybook/addon-essentials@8.6.14(@types/react@18.2.0)(storybook@8.6.15(prettier@3.5.3))': + '@storybook/addon-essentials@8.6.14(@types/react@18.2.0)(storybook@8.6.14(prettier@3.5.3))': dependencies: - '@storybook/addon-actions': 8.6.14(storybook@8.6.15(prettier@3.5.3)) - '@storybook/addon-backgrounds': 8.6.14(storybook@8.6.15(prettier@3.5.3)) - '@storybook/addon-controls': 8.6.14(storybook@8.6.15(prettier@3.5.3)) - '@storybook/addon-docs': 8.6.14(@types/react@18.2.0)(storybook@8.6.15(prettier@3.5.3)) - '@storybook/addon-highlight': 8.6.14(storybook@8.6.15(prettier@3.5.3)) - '@storybook/addon-measure': 8.6.14(storybook@8.6.15(prettier@3.5.3)) - '@storybook/addon-outline': 8.6.14(storybook@8.6.15(prettier@3.5.3)) - '@storybook/addon-toolbars': 8.6.14(storybook@8.6.15(prettier@3.5.3)) - '@storybook/addon-viewport': 8.6.14(storybook@8.6.15(prettier@3.5.3)) - storybook: 8.6.15(prettier@3.5.3) + '@storybook/addon-actions': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-backgrounds': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-controls': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-docs': 8.6.14(@types/react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-highlight': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-measure': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-outline': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-toolbars': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-viewport': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-highlight@7.4.6': + '@storybook/addon-highlight@7.4.0': dependencies: - '@storybook/core-events': 7.4.6 + '@storybook/core-events': 7.4.0 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.4.6 + '@storybook/preview-api': 7.4.0 - '@storybook/addon-highlight@8.6.14(storybook@8.6.15(prettier@3.5.3))': + '@storybook/addon-highlight@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) - '@storybook/addon-interactions@8.6.14(storybook@8.6.15(prettier@3.5.3))': + '@storybook/addon-interactions@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.6.14(storybook@8.6.15(prettier@3.5.3)) - '@storybook/test': 8.6.14(storybook@8.6.15(prettier@3.5.3)) + '@storybook/instrumenter': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.5.3)) polished: 4.3.1 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 '@storybook/addon-links@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': @@ -30605,7 +34298,7 @@ snapshots: '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/router': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@types/qs': 6.14.0 + '@types/qs': 6.15.0 core-js: 3.48.0 global: 4.4.0 prop-types: 15.8.1 @@ -30616,26 +34309,44 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/addon-links@7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/addon-links@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/core-events': 7.4.6 + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.9 + '@storybook/core-events': 6.5.9 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + '@storybook/router': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/qs': 6.15.0 + core-js: 3.48.0 + global: 4.4.0 + prop-types: 15.8.1 + qs: 6.14.2 + regenerator-runtime: 0.13.11 + ts-dedent: 2.2.0 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@storybook/addon-links@7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@storybook/client-logger': 7.4.0 + '@storybook/core-events': 7.4.0 '@storybook/csf': 0.1.13 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/preview-api': 7.4.6 - '@storybook/router': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/types': 7.4.6 + '@storybook/manager-api': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/preview-api': 7.4.0 + '@storybook/router': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/types': 7.4.0 prop-types: 15.8.1 ts-dedent: 2.2.0 optionalDependencies: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@storybook/addon-links@8.6.15(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))': + '@storybook/addon-links@8.6.14(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 optionalDependencies: react: 18.2.0 @@ -30654,15 +34365,29 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/addon-measure@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/addon-measure@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-events': 7.4.6 + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.9 + '@storybook/components': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 6.5.9 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + core-js: 3.48.0 + global: 4.4.0 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@storybook/addon-measure@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 7.4.0 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/preview-api': 7.4.6 - '@storybook/types': 7.4.6 + '@storybook/manager-api': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.0 + '@storybook/types': 7.4.0 tiny-invariant: 1.3.3 optionalDependencies: react: 18.2.0 @@ -30671,15 +34396,15 @@ snapshots: - '@types/react' - '@types/react-dom' - '@storybook/addon-measure@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/addon-measure@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/core-events': 7.4.6 + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/core-events': 7.4.0 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/preview-api': 7.4.6 - '@storybook/types': 7.4.6 + '@storybook/manager-api': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/preview-api': 7.4.0 + '@storybook/types': 7.4.0 tiny-invariant: 1.3.3 optionalDependencies: react: 19.1.0 @@ -30688,15 +34413,15 @@ snapshots: - '@types/react' - '@types/react-dom' - '@storybook/addon-measure@8.6.14(storybook@8.6.15(prettier@3.5.3))': + '@storybook/addon-measure@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) tiny-invariant: 1.3.3 - '@storybook/addon-onboarding@8.6.15(storybook@8.6.15(prettier@3.5.3))': + '@storybook/addon-onboarding@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) '@storybook/addon-outline@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -30714,15 +34439,31 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/addon-outline@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/addon-outline@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-events': 7.4.6 + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.9 + '@storybook/components': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 6.5.9 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + core-js: 3.48.0 + global: 4.4.0 + regenerator-runtime: 0.13.11 + ts-dedent: 2.2.0 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@storybook/addon-outline@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 7.4.0 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/preview-api': 7.4.6 - '@storybook/types': 7.4.6 + '@storybook/manager-api': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.0 + '@storybook/types': 7.4.0 ts-dedent: 2.2.0 optionalDependencies: react: 18.2.0 @@ -30731,15 +34472,15 @@ snapshots: - '@types/react' - '@types/react-dom' - '@storybook/addon-outline@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/addon-outline@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/core-events': 7.4.6 + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/core-events': 7.4.0 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/preview-api': 7.4.6 - '@storybook/types': 7.4.6 + '@storybook/manager-api': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/preview-api': 7.4.0 + '@storybook/types': 7.4.0 ts-dedent: 2.2.0 optionalDependencies: react: 19.1.0 @@ -30748,10 +34489,10 @@ snapshots: - '@types/react' - '@types/react-dom' - '@storybook/addon-outline@8.6.14(storybook@8.6.15(prettier@3.5.3))': + '@storybook/addon-outline@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 '@storybook/addon-toolbars@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': @@ -30767,13 +34508,26 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/addon-toolbars@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/addon-toolbars@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.9 + '@storybook/components': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + core-js: 3.48.0 + regenerator-runtime: 0.13.11 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@storybook/addon-toolbars@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/manager-api': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.0 + '@storybook/theming': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) optionalDependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -30781,13 +34535,13 @@ snapshots: - '@types/react' - '@types/react-dom' - '@storybook/addon-toolbars@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/addon-toolbars@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/manager-api': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/manager-api': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/preview-api': 7.4.0 + '@storybook/theming': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) optionalDependencies: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -30795,9 +34549,9 @@ snapshots: - '@types/react' - '@types/react-dom' - '@storybook/addon-toolbars@8.6.14(storybook@8.6.15(prettier@3.5.3))': + '@storybook/addon-toolbars@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) '@storybook/addon-viewport@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -30816,15 +34570,32 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/addon-viewport@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/addon-viewport@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.9 + '@storybook/components': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 6.5.9 + '@storybook/theming': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + core-js: 3.48.0 + global: 4.4.0 + memoizerific: 1.11.3 + prop-types: 15.8.1 + regenerator-runtime: 0.13.11 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@storybook/addon-viewport@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-events': 7.4.6 + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 7.4.0 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/manager-api': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.0 + '@storybook/theming': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) memoizerific: 1.11.3 prop-types: 15.8.1 optionalDependencies: @@ -30834,15 +34605,15 @@ snapshots: - '@types/react' - '@types/react-dom' - '@storybook/addon-viewport@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/addon-viewport@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/core-events': 7.4.6 + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/core-events': 7.4.0 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/manager-api': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/preview-api': 7.4.0 + '@storybook/theming': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) memoizerific: 1.11.3 prop-types: 15.8.1 optionalDependencies: @@ -30852,10 +34623,26 @@ snapshots: - '@types/react' - '@types/react-dom' - '@storybook/addon-viewport@8.6.14(storybook@8.6.15(prettier@3.5.3))': + '@storybook/addon-viewport@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: memoizerific: 1.11.3 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) + + '@storybook/addons@6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/api': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channels': 6.3.7 + '@storybook/client-logger': 6.3.7 + '@storybook/core-events': 6.3.7 + '@storybook/router': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + core-js: 3.48.0 + global: 4.4.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + regenerator-runtime: 0.13.11 + transitivePeerDependencies: + - supports-color '@storybook/addons@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -30873,37 +34660,64 @@ snapshots: react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 - '@storybook/addons@6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/addons@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/api': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/channels': 6.5.16 - '@storybook/client-logger': 6.5.16 - '@storybook/core-events': 6.5.16 + '@storybook/api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channels': 6.5.9 + '@storybook/client-logger': 6.5.9 + '@storybook/core-events': 6.5.9 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/router': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/theming': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/router': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/webpack-env': 1.18.8 core-js: 3.48.0 global: 4.4.0 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 - '@storybook/addons@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/addons@6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@storybook/api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/channels': 6.5.9 '@storybook/client-logger': 6.5.9 '@storybook/core-events': 6.5.9 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/router': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/theming': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/router': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/theming': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/webpack-env': 1.18.8 core-js: 3.48.0 global: 4.4.0 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + regenerator-runtime: 0.13.11 + + '@storybook/api@6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@reach/router': 1.3.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channels': 6.3.7 + '@storybook/client-logger': 6.3.7 + '@storybook/core-events': 6.3.7 + '@storybook/csf': 0.0.1 + '@storybook/router': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/semver': 7.3.2 + '@storybook/theming': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/reach__router': 1.3.15 + core-js: 3.48.0 + fast-deep-equal: 3.1.3 + global: 4.4.0 + lodash: 4.17.23 + memoizerific: 1.11.3 + qs: 6.14.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 + store2: 2.14.4 + telejson: 5.3.3 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - supports-color '@storybook/api@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -30927,63 +34741,63 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 - '@storybook/api@6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/api@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/channels': 6.5.16 - '@storybook/client-logger': 6.5.16 - '@storybook/core-events': 6.5.16 + '@storybook/channels': 6.5.9 + '@storybook/client-logger': 6.5.9 + '@storybook/core-events': 6.5.9 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/router': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/router': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/semver': 7.3.2 - '@storybook/theming': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/theming': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) core-js: 3.48.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.23 memoizerific: 1.11.3 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 store2: 2.14.4 telejson: 6.0.8 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - '@storybook/api@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/api@6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/channels': 6.5.9 '@storybook/client-logger': 6.5.9 '@storybook/core-events': 6.5.9 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/router': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/router': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/semver': 7.3.2 - '@storybook/theming': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) core-js: 3.48.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.23 memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) regenerator-runtime: 0.13.11 store2: 2.14.4 telejson: 6.0.8 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - '@storybook/blocks@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/blocks@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/channels': 7.4.6 - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-events': 7.4.6 + '@storybook/channels': 7.4.0 + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 7.4.0 '@storybook/csf': 0.1.13 - '@storybook/docs-tools': 7.4.6(encoding@0.1.13) + '@storybook/docs-tools': 7.4.0(encoding@0.1.13) '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/types': 7.4.6 + '@storybook/manager-api': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.0 + '@storybook/theming': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/types': 7.4.0 '@types/lodash': 4.17.17 color-convert: 2.0.1 dequal: 2.0.3 @@ -31004,19 +34818,19 @@ snapshots: - encoding - supports-color - '@storybook/blocks@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/blocks@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@storybook/channels': 7.4.6 - '@storybook/client-logger': 7.4.6 - '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/core-events': 7.4.6 + '@storybook/channels': 7.4.0 + '@storybook/client-logger': 7.4.0 + '@storybook/components': 7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/core-events': 7.4.0 '@storybook/csf': 0.1.13 - '@storybook/docs-tools': 7.4.6(encoding@0.1.13) + '@storybook/docs-tools': 7.4.0(encoding@0.1.13) '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/preview-api': 7.4.6 - '@storybook/theming': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/types': 7.4.6 + '@storybook/manager-api': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/preview-api': 7.4.0 + '@storybook/theming': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/types': 7.4.0 '@types/lodash': 4.17.17 color-convert: 2.0.1 dequal: 2.0.3 @@ -31037,119 +34851,141 @@ snapshots: - encoding - supports-color - '@storybook/blocks@8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))': + '@storybook/blocks@8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/icons': 1.6.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 optionalDependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/blocks@8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.15(prettier@3.5.3))': + '@storybook/blocks@8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/icons': 1.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 optionalDependencies: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@storybook/builder-manager@7.6.21(encoding@0.1.13)': + '@storybook/builder-manager@7.6.10(encoding@0.1.13)': dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 7.6.21(encoding@0.1.13) - '@storybook/manager': 7.6.21 - '@storybook/node-logger': 7.6.21 + '@storybook/core-common': 7.6.10(encoding@0.1.13) + '@storybook/manager': 7.6.10 + '@storybook/node-logger': 7.6.10 '@types/ejs': 3.1.5 '@types/find-cache-dir': 3.2.1 - '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.25.12) + '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.18.20) browser-assert: 1.2.1 ejs: 3.1.10 - esbuild: 0.25.12 + esbuild: 0.18.20 esbuild-plugin-alias: 0.2.1 express: 4.22.1 find-cache-dir: 3.3.2 - fs-extra: 11.3.3 + fs-extra: 11.3.0 process: 0.11.10 util: 0.12.5 transitivePeerDependencies: - encoding - supports-color - '@storybook/builder-vite@8.6.15(storybook@8.6.15(prettier@3.5.3))(vite@6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))': + '@storybook/builder-vite@8.6.14(storybook@8.6.14(prettier@3.5.3))(vite@6.0.7(@types/node@22.15.24)(jiti@2.6.1)(sass@1.89.0)(terser@5.46.0)(yaml@2.8.0))': dependencies: - '@storybook/csf-plugin': 8.6.15(storybook@8.6.15(prettier@3.5.3)) + '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.5.3)) browser-assert: 1.2.1 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 - vite: 6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2) - - '@storybook/builder-webpack4@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': - dependencies: - '@babel/core': 7.27.7 - '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/channel-postmessage': 6.5.16 - '@storybook/channels': 6.5.16 - '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/client-logger': 6.5.16 - '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) - '@storybook/core-events': 6.5.16 - '@storybook/node-logger': 6.5.16 - '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/router': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + vite: 6.0.7(@types/node@22.15.24)(jiti@2.6.1)(sass@1.89.0)(terser@5.46.0)(yaml@2.8.0) + + '@storybook/builder-webpack4@6.3.7(@types/react@18.2.0)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + dependencies: + '@babel/core': 7.27.1 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.27.1) + '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.1) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.1) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.1) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.1) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) + '@babel/preset-typescript': 7.27.1(@babel/core@7.27.1) + '@storybook/addons': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channel-postmessage': 6.3.7 + '@storybook/channels': 6.3.7 + '@storybook/client-api': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.3.7 + '@storybook/components': 6.3.7(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-common': 6.3.7(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-events': 6.3.7 + '@storybook/node-logger': 6.3.7 + '@storybook/router': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/semver': 7.3.2 - '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@types/node': 16.18.126 + '@storybook/theming': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/ui': 6.3.7(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/node': 14.18.63 '@types/webpack': 4.41.40 autoprefixer: 9.8.8 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0) + babel-plugin-macros: 2.8.0 + babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.1) case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.48.0 - css-loader: 3.6.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - file-loader: 6.2.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + css-loader: 3.6.0(webpack@4.47.0) + dotenv-webpack: 1.8.0(webpack@4.47.0) + file-loader: 6.2.0(webpack@4.47.0) find-up: 5.0.0 fork-ts-checker-webpack-plugin: 4.1.6 + fs-extra: 9.1.0 glob: 7.2.3 glob-promise: 3.4.0(glob@7.2.3) global: 4.4.0 - html-webpack-plugin: 4.5.2(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + html-webpack-plugin: 4.5.2(webpack@4.47.0) pnp-webpack-plugin: 1.6.4(typescript@5.8.3) postcss: 7.0.39 postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - raw-loader: 4.0.2(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + postcss-loader: 4.3.0(postcss@7.0.39)(webpack@4.47.0) + raw-loader: 4.0.2(webpack@4.47.0) react: 18.2.0 + react-dev-utils: 11.0.4 react-dom: 18.2.0(react@18.2.0) stable: 0.1.8 - style-loader: 1.3.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - terser-webpack-plugin: 4.2.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + style-loader: 1.3.0(webpack@4.47.0) + terser-webpack-plugin: 4.2.3(webpack@4.47.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))))(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0))(webpack@4.47.0) util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) - webpack-dev-middleware: 3.7.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - webpack-filter-warnings-plugin: 1.2.1(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + webpack: 4.47.0 + webpack-dev-middleware: 3.7.3(webpack@4.47.0) + webpack-filter-warnings-plugin: 1.2.1(webpack@4.47.0) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.2.2 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - - '@swc/core' - - esbuild + - '@types/react' - eslint - supports-color - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/builder-webpack4@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + '@storybook/builder-webpack4@6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/channel-postmessage': 6.5.16 @@ -31157,7 +34993,7 @@ snapshots: '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-common': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/core-events': 6.5.16 '@storybook/node-logger': 6.5.16 '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -31169,49 +35005,47 @@ snapshots: '@types/node': 16.18.126 '@types/webpack': 4.41.40 autoprefixer: 9.8.8 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0) case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.48.0 - css-loader: 3.6.0(webpack@5.105.2) - file-loader: 6.2.0(webpack@5.105.2) + css-loader: 3.6.0(webpack@4.47.0) + file-loader: 6.2.0(webpack@4.47.0) find-up: 5.0.0 fork-ts-checker-webpack-plugin: 4.1.6 glob: 7.2.3 glob-promise: 3.4.0(glob@7.2.3) global: 4.4.0 - html-webpack-plugin: 4.5.2(webpack@5.105.2) + html-webpack-plugin: 4.5.2(webpack@4.47.0) pnp-webpack-plugin: 1.6.4(typescript@5.8.3) postcss: 7.0.39 postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.105.2) - raw-loader: 4.0.2(webpack@5.105.2) + postcss-loader: 4.3.0(postcss@7.0.39)(webpack@4.47.0) + raw-loader: 4.0.2(webpack@4.47.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) stable: 0.1.8 - style-loader: 1.3.0(webpack@5.105.2) - terser-webpack-plugin: 4.2.3(webpack@5.105.2) + style-loader: 1.3.0(webpack@4.47.0) + terser-webpack-plugin: 4.2.3(webpack@4.47.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.105.2))(webpack@5.105.2) + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0))(webpack@4.47.0) util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) - webpack-dev-middleware: 3.7.3(webpack@5.105.2) - webpack-filter-warnings-plugin: 1.2.1(webpack@5.105.2) + webpack: 4.47.0 + webpack-dev-middleware: 3.7.3(webpack@4.47.0) + webpack-filter-warnings-plugin: 1.2.1(webpack@4.47.0) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.2.2 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - - '@swc/core' - - esbuild - eslint - supports-color - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/builder-webpack4@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/builder-webpack4@6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/channel-postmessage': 6.5.16 @@ -31219,7 +35053,7 @@ snapshots: '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-common': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/core-events': 6.5.16 '@storybook/node-logger': 6.5.16 '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -31231,173 +35065,167 @@ snapshots: '@types/node': 16.18.126 '@types/webpack': 4.41.40 autoprefixer: 9.8.8 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0(webpack-cli@6.0.1)) case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.48.0 - css-loader: 3.6.0(webpack@5.105.2) - file-loader: 6.2.0(webpack@5.105.2) + css-loader: 3.6.0(webpack@4.47.0(webpack-cli@6.0.1)) + file-loader: 6.2.0(webpack@4.47.0(webpack-cli@6.0.1)) find-up: 5.0.0 fork-ts-checker-webpack-plugin: 4.1.6 glob: 7.2.3 glob-promise: 3.4.0(glob@7.2.3) global: 4.4.0 - html-webpack-plugin: 4.5.2(webpack@5.105.2) + html-webpack-plugin: 4.5.2(webpack@4.47.0(webpack-cli@6.0.1)) pnp-webpack-plugin: 1.6.4(typescript@5.8.3) postcss: 7.0.39 postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.105.2) - raw-loader: 4.0.2(webpack@5.105.2) + postcss-loader: 4.3.0(postcss@7.0.39)(webpack@4.47.0(webpack-cli@6.0.1)) + raw-loader: 4.0.2(webpack@4.47.0(webpack-cli@6.0.1)) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) stable: 0.1.8 - style-loader: 1.3.0(webpack@5.105.2) - terser-webpack-plugin: 4.2.3(webpack@5.105.2) + style-loader: 1.3.0(webpack@4.47.0(webpack-cli@6.0.1)) + terser-webpack-plugin: 4.2.3(webpack@4.47.0(webpack-cli@6.0.1)) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.105.2))(webpack@5.105.2) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.104.1))(webpack@4.47.0(webpack-cli@6.0.1)) util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-dev-middleware: 3.7.3(webpack@5.105.2) - webpack-filter-warnings-plugin: 1.2.1(webpack@5.105.2) + webpack: 4.47.0(webpack-cli@6.0.1) + webpack-dev-middleware: 3.7.3(webpack@4.47.0(webpack-cli@6.0.1)) + webpack-filter-warnings-plugin: 1.2.1(webpack@4.47.0(webpack-cli@6.0.1)) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.2.2 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - - '@swc/core' - - esbuild - eslint - supports-color - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/builder-webpack4@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + '@storybook/builder-webpack4@6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': dependencies: - '@babel/core': 7.27.7 - '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/channel-postmessage': 6.5.16 - '@storybook/channels': 6.5.16 - '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/client-logger': 6.5.16 - '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) - '@storybook/core-events': 6.5.16 - '@storybook/node-logger': 6.5.16 - '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/router': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@babel/core': 7.27.1 + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channel-postmessage': 6.5.9 + '@storybook/channels': 6.5.9 + '@storybook/client-api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.9 + '@storybook/components': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-events': 6.5.9 + '@storybook/node-logger': 6.5.9 + '@storybook/preview-web': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/router': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/semver': 7.3.2 - '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/store': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/ui': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/node': 16.18.126 '@types/webpack': 4.41.40 autoprefixer: 9.8.8 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0(webpack-cli@4.10.0)) case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.48.0 - css-loader: 3.6.0(webpack@5.105.2) - file-loader: 6.2.0(webpack@5.105.2) + css-loader: 3.6.0(webpack@4.47.0(webpack-cli@4.10.0)) + file-loader: 6.2.0(webpack@4.47.0(webpack-cli@4.10.0)) find-up: 5.0.0 fork-ts-checker-webpack-plugin: 4.1.6 glob: 7.2.3 glob-promise: 3.4.0(glob@7.2.3) global: 4.4.0 - html-webpack-plugin: 4.5.2(webpack@5.105.2) + html-webpack-plugin: 4.5.2(webpack@4.47.0(webpack-cli@4.10.0)) pnp-webpack-plugin: 1.6.4(typescript@5.8.3) postcss: 7.0.39 postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.105.2) - raw-loader: 4.0.2(webpack@5.105.2) + postcss-loader: 4.3.0(postcss@7.0.39)(webpack@4.47.0(webpack-cli@4.10.0)) + raw-loader: 4.0.2(webpack@4.47.0(webpack-cli@4.10.0)) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) stable: 0.1.8 - style-loader: 1.3.0(webpack@5.105.2) - terser-webpack-plugin: 4.2.3(webpack@5.105.2) + style-loader: 1.3.0(webpack@4.47.0(webpack-cli@4.10.0)) + terser-webpack-plugin: 4.2.3(webpack@4.47.0(webpack-cli@4.10.0)) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.105.2))(webpack@5.105.2) + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0(webpack-cli@4.10.0)))(webpack@4.47.0(webpack-cli@4.10.0)) util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@4.10.0) - webpack-dev-middleware: 3.7.3(webpack@5.105.2) - webpack-filter-warnings-plugin: 1.2.1(webpack@5.105.2) + webpack: 4.47.0(webpack-cli@4.10.0) + webpack-dev-middleware: 3.7.3(webpack@4.47.0(webpack-cli@4.10.0)) + webpack-filter-warnings-plugin: 1.2.1(webpack@4.47.0(webpack-cli@4.10.0)) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.2.2 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - - '@swc/core' - - esbuild - eslint - supports-color - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/builder-webpack4@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)': + '@storybook/builder-webpack4@6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4)': dependencies: - '@babel/core': 7.27.7 - '@storybook/addons': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/api': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/channel-postmessage': 6.5.16 - '@storybook/channels': 6.5.16 - '@storybook/client-api': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/client-logger': 6.5.16 - '@storybook/components': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) - '@storybook/core-events': 6.5.16 - '@storybook/node-logger': 6.5.16 - '@storybook/preview-web': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/router': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@babel/core': 7.27.1 + '@storybook/addons': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/api': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/channel-postmessage': 6.5.9 + '@storybook/channels': 6.5.9 + '@storybook/client-api': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/client-logger': 6.5.9 + '@storybook/components': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4) + '@storybook/core-events': 6.5.9 + '@storybook/node-logger': 6.5.9 + '@storybook/preview-web': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/router': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/semver': 7.3.2 - '@storybook/store': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/theming': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/ui': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/store': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/theming': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/ui': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/node': 16.18.126 '@types/webpack': 4.41.40 autoprefixer: 9.8.8 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0) case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.48.0 - css-loader: 3.6.0(webpack@5.105.2) - file-loader: 6.2.0(webpack@5.105.2) + css-loader: 3.6.0(webpack@4.47.0) + file-loader: 6.2.0(webpack@4.47.0) find-up: 5.0.0 fork-ts-checker-webpack-plugin: 4.1.6 glob: 7.2.3 glob-promise: 3.4.0(glob@7.2.3) global: 4.4.0 - html-webpack-plugin: 4.5.2(webpack@5.105.2) - pnp-webpack-plugin: 1.6.4(typescript@4.9.5) + html-webpack-plugin: 4.5.2(webpack@4.47.0) + pnp-webpack-plugin: 1.6.4(typescript@4.9.4) postcss: 7.0.39 postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.105.2) - raw-loader: 4.0.2(webpack@5.105.2) + postcss-loader: 4.3.0(postcss@7.0.39)(webpack@4.47.0) + raw-loader: 4.0.2(webpack@4.47.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) stable: 0.1.8 - style-loader: 1.3.0(webpack@5.105.2) - terser-webpack-plugin: 4.2.3(webpack@5.105.2) + style-loader: 1.3.0(webpack@4.47.0) + terser-webpack-plugin: 4.2.3(webpack@4.47.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.105.2))(webpack@5.105.2) + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0))(webpack@4.47.0) util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-dev-middleware: 3.7.3(webpack@5.105.2) - webpack-filter-warnings-plugin: 1.2.1(webpack@5.105.2) + webpack: 4.47.0 + webpack-dev-middleware: 3.7.3(webpack@4.47.0) + webpack-filter-warnings-plugin: 1.2.1(webpack@4.47.0) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.2.2 optionalDependencies: - typescript: 4.9.5 + typescript: 4.9.4 transitivePeerDependencies: - - '@swc/core' - - esbuild - eslint - supports-color - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/builder-webpack5@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + '@storybook/builder-webpack5@6.5.16(@swc/core@1.15.18(@swc/helpers@0.5.19))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/channel-postmessage': 6.5.16 @@ -31405,7 +35233,7 @@ snapshots: '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-common': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/core-events': 6.5.16 '@storybook/node-logger': 6.5.16 '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -31414,27 +35242,27 @@ snapshots: '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/node': 16.18.126 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@5.104.1) babel-plugin-named-exports-order: 0.0.2 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.48.0 - css-loader: 5.2.7(webpack@5.105.2) - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)(webpack@5.105.2) + css-loader: 5.2.7(webpack@5.104.1) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)(webpack@5.104.1) glob: 7.2.3 glob-promise: 3.4.0(glob@7.2.3) - html-webpack-plugin: 5.6.6(webpack@5.105.2) + html-webpack-plugin: 5.6.6(webpack@5.104.1) path-browserify: 1.0.1 process: 0.11.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) stable: 0.1.8 - style-loader: 2.0.0(webpack@5.105.2) - terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2) + style-loader: 2.0.0(webpack@5.104.1) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack@5.104.1) ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) - webpack-dev-middleware: 4.3.0(webpack@5.105.2) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack-dev-middleware: 4.3.0(webpack@5.104.1) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.4.6 optionalDependencies: @@ -31448,47 +35276,48 @@ snapshots: - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/builder-webpack5@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + '@storybook/builder-webpack5@6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': dependencies: - '@babel/core': 7.27.7 - '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/channel-postmessage': 6.5.16 - '@storybook/channels': 6.5.16 - '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/client-logger': 6.5.16 - '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) - '@storybook/core-events': 6.5.16 - '@storybook/node-logger': 6.5.16 - '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/router': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@babel/core': 7.27.1 + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channel-postmessage': 6.5.9 + '@storybook/channels': 6.5.9 + '@storybook/client-api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.9 + '@storybook/components': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-events': 6.5.9 + '@storybook/node-logger': 6.5.9 + '@storybook/preview-web': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/router': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/semver': 7.3.2 - '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/store': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/node': 16.18.126 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@5.104.1) babel-plugin-named-exports-order: 0.0.2 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.48.0 - css-loader: 5.2.7(webpack@5.105.2) - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)(webpack@5.105.2) + css-loader: 5.2.7(webpack@5.104.1) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)(webpack@5.104.1) glob: 7.2.3 glob-promise: 3.4.0(glob@7.2.3) - html-webpack-plugin: 5.6.6(webpack@5.105.2) + html-webpack-plugin: 5.6.6(webpack@5.104.1) path-browserify: 1.0.1 process: 0.11.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) stable: 0.1.8 - style-loader: 2.0.0(webpack@5.105.2) - terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2) + style-loader: 2.0.0(webpack@5.104.1) + terser-webpack-plugin: 5.3.14(webpack@5.104.1) ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@4.10.0) - webpack-dev-middleware: 4.3.0(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@4.10.0) + webpack-dev-middleware: 4.3.0(webpack@5.104.1) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.4.6 optionalDependencies: @@ -31502,10 +35331,11 @@ snapshots: - uglify-js - vue-template-compiler - webpack-cli + - webpack-command '@storybook/builder-webpack5@7.4.0(@swc/helpers@0.5.19)(encoding@0.1.13)(typescript@5.8.3)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@storybook/channels': 7.4.0 '@storybook/client-logger': 7.4.0 '@storybook/core-common': 7.4.0(encoding@0.1.13) @@ -31514,31 +35344,31 @@ snapshots: '@storybook/node-logger': 7.4.0 '@storybook/preview': 7.4.0 '@storybook/preview-api': 7.4.0 - '@swc/core': 1.15.11(@swc/helpers@0.5.19) + '@swc/core': 1.15.18(@swc/helpers@0.5.19) '@types/node': 16.18.126 '@types/semver': 7.7.1 - babel-loader: 9.2.1(@babel/core@7.27.7)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + babel-loader: 9.2.1(@babel/core@7.27.1)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))) babel-plugin-named-exports-order: 0.0.2 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + css-loader: 6.11.0(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))) express: 4.22.1 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - fs-extra: 11.3.3 - html-webpack-plugin: 5.6.6(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))) + fs-extra: 11.3.0 + html-webpack-plugin: 5.6.6(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))) path-browserify: 1.0.1 process: 0.11.10 semver: 7.7.4 - style-loader: 3.3.4(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - swc-loader: 0.2.7(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + style-loader: 3.3.4(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))) + swc-loader: 0.2.7(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) - webpack-dev-middleware: 6.1.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) + webpack-dev-middleware: 6.1.3(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.5.0 optionalDependencies: @@ -31554,7 +35384,7 @@ snapshots: '@storybook/builder-webpack5@7.4.0(@swc/helpers@0.5.19)(encoding@0.1.13)(typescript@5.8.3)(webpack-cli@5.1.4)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@storybook/channels': 7.4.0 '@storybook/client-logger': 7.4.0 '@storybook/core-common': 7.4.0(encoding@0.1.13) @@ -31563,31 +35393,31 @@ snapshots: '@storybook/node-logger': 7.4.0 '@storybook/preview': 7.4.0 '@storybook/preview-api': 7.4.0 - '@swc/core': 1.15.11(@swc/helpers@0.5.19) + '@swc/core': 1.15.18(@swc/helpers@0.5.19) '@types/node': 16.18.126 '@types/semver': 7.7.1 - babel-loader: 9.2.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 9.2.1(@babel/core@7.27.1)(webpack@5.104.1) babel-plugin-named-exports-order: 0.0.2 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.105.2) + css-loader: 6.11.0(webpack@5.104.1) express: 4.22.1 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.105.2) - fs-extra: 11.3.3 - html-webpack-plugin: 5.6.6(webpack@5.105.2) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.104.1) + fs-extra: 11.3.0 + html-webpack-plugin: 5.6.6(webpack@5.104.1) path-browserify: 1.0.1 process: 0.11.10 semver: 7.7.4 - style-loader: 3.3.4(webpack@5.105.2) - swc-loader: 0.2.7(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2) - terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2) + style-loader: 3.3.4(webpack@5.104.1) + swc-loader: 0.2.7(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack@5.104.1) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack@5.104.1) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@5.1.4) - webpack-dev-middleware: 6.1.3(webpack@5.105.2) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@5.1.4) + webpack-dev-middleware: 6.1.3(webpack@5.104.1) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.5.0 optionalDependencies: @@ -31601,31 +35431,31 @@ snapshots: - uglify-js - webpack-cli - '@storybook/builder-webpack5@8.6.15(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3)': + '@storybook/builder-webpack5@8.6.14(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)': dependencies: - '@storybook/core-webpack': 8.6.15(storybook@8.6.15(prettier@3.5.3)) + '@storybook/core-webpack': 8.6.14(storybook@8.6.14(prettier@3.5.3)) '@types/semver': 7.7.1 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.3 constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)) + css-loader: 6.11.0(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)) es-module-lexer: 1.7.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)) - html-webpack-plugin: 5.6.6(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)) + html-webpack-plugin: 5.6.6(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)) magic-string: 0.30.21 path-browserify: 1.0.1 process: 0.11.10 semver: 7.7.4 - storybook: 8.6.15(prettier@3.5.3) - style-loader: 3.3.4(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)) - terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)) + storybook: 8.6.14(prettier@3.5.3) + style-loader: 3.3.4(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12) - webpack-dev-middleware: 6.1.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12) + webpack-dev-middleware: 6.1.3(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -31637,31 +35467,31 @@ snapshots: - uglify-js - webpack-cli - '@storybook/builder-webpack5@8.6.15(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4)': + '@storybook/builder-webpack5@8.6.14(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4)': dependencies: - '@storybook/core-webpack': 8.6.15(storybook@8.6.15(prettier@3.5.3)) + '@storybook/core-webpack': 8.6.14(storybook@8.6.14(prettier@3.5.3)) '@types/semver': 7.7.1 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.3 constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.105.2) + css-loader: 6.11.0(webpack@5.104.1) es-module-lexer: 1.7.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.105.2) - html-webpack-plugin: 5.6.6(webpack@5.105.2) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.104.1) + html-webpack-plugin: 5.6.6(webpack@5.104.1) magic-string: 0.30.21 path-browserify: 1.0.1 process: 0.11.10 semver: 7.7.4 - storybook: 8.6.15(prettier@3.5.3) - style-loader: 3.3.4(webpack@5.105.2) - terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2) + storybook: 8.6.14(prettier@3.5.3) + style-loader: 3.3.4(webpack@5.104.1) + terser-webpack-plugin: 5.3.14(webpack@5.104.1) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-dev-middleware: 6.1.3(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@5.1.4) + webpack-dev-middleware: 6.1.3(webpack@5.104.1) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -31673,6 +35503,16 @@ snapshots: - uglify-js - webpack-cli + '@storybook/channel-postmessage@6.3.7': + dependencies: + '@storybook/channels': 6.3.7 + '@storybook/client-logger': 6.3.7 + '@storybook/core-events': 6.3.7 + core-js: 3.48.0 + global: 4.4.0 + qs: 6.14.2 + telejson: 5.3.3 + '@storybook/channel-postmessage@6.5.16': dependencies: '@storybook/channels': 6.5.16 @@ -31709,6 +35549,12 @@ snapshots: global: 4.4.0 telejson: 6.0.8 + '@storybook/channels@6.3.7': + dependencies: + core-js: 3.48.0 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + '@storybook/channels@6.5.16': dependencies: core-js: 3.48.0 @@ -31730,38 +35576,29 @@ snapshots: telejson: 7.2.0 tiny-invariant: 1.3.3 - '@storybook/channels@7.4.6': - dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/core-events': 7.4.6 - '@storybook/global': 5.0.0 - qs: 6.14.2 - telejson: 7.2.0 - tiny-invariant: 1.3.3 - - '@storybook/channels@7.6.21': + '@storybook/channels@7.6.10': dependencies: - '@storybook/client-logger': 7.6.21 - '@storybook/core-events': 7.6.21 + '@storybook/client-logger': 7.6.10 + '@storybook/core-events': 7.6.10 '@storybook/global': 5.0.0 qs: 6.14.2 telejson: 7.2.0 tiny-invariant: 1.3.3 - '@storybook/cli@7.6.21(encoding@0.1.13)': + '@storybook/cli@7.6.10(encoding@0.1.13)': dependencies: - '@babel/core': 7.27.7 - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) + '@babel/core': 7.27.1 + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) '@babel/types': 7.29.0 '@ndelangen/get-tarball': 3.0.9 - '@storybook/codemod': 7.6.21 - '@storybook/core-common': 7.6.21(encoding@0.1.13) - '@storybook/core-events': 7.6.21 - '@storybook/core-server': 7.6.21(encoding@0.1.13) - '@storybook/csf-tools': 7.6.21 - '@storybook/node-logger': 7.6.21 - '@storybook/telemetry': 7.6.21(encoding@0.1.13) - '@storybook/types': 7.6.21 + '@storybook/codemod': 7.6.10 + '@storybook/core-common': 7.6.10(encoding@0.1.13) + '@storybook/core-events': 7.6.10 + '@storybook/core-server': 7.6.10(encoding@0.1.13) + '@storybook/csf-tools': 7.6.10 + '@storybook/node-logger': 7.6.10 + '@storybook/telemetry': 7.6.10(encoding@0.1.13) + '@storybook/types': 7.6.10 '@types/semver': 7.7.1 '@yarnpkg/fslib': 2.10.3 '@yarnpkg/libzip': 2.3.0 @@ -31773,12 +35610,12 @@ snapshots: execa: 5.1.1 express: 4.22.1 find-up: 5.0.0 - fs-extra: 11.3.3 + fs-extra: 11.3.0 get-npm-tarball-url: 2.1.0 get-port: 5.1.1 giget: 1.2.5 globby: 11.1.0 - jscodeshift: 0.15.2(@babel/preset-env@7.27.2(@babel/core@7.27.7)) + jscodeshift: 0.15.2(@babel/preset-env@7.27.2(@babel/core@7.27.1)) leven: 3.1.0 ora: 5.4.1 prettier: 2.8.8 @@ -31791,22 +35628,19 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - bufferutil - encoding - - react-native-b4a - supports-color - utf-8-validate - '@storybook/cli@8.6.15(@babel/preset-env@7.27.2(@babel/core@7.27.7))(prettier@3.5.3)': + '@storybook/cli@8.6.14(@babel/preset-env@7.27.2(@babel/core@7.29.0))(prettier@3.5.3)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/types': 7.29.0 - '@storybook/codemod': 8.6.15(storybook@8.6.15(prettier@3.5.3)) + '@storybook/codemod': 8.6.14(storybook@8.6.14(prettier@3.5.3)) '@types/semver': 7.7.1 commander: 12.1.0 - create-storybook: 8.6.15 + create-storybook: 8.6.14 cross-spawn: 7.0.6 envinfo: 7.21.0 fd-package-json: 1.2.0 @@ -31814,12 +35648,12 @@ snapshots: giget: 1.2.5 glob: 10.5.0 globby: 14.1.0 - jscodeshift: 0.15.2(@babel/preset-env@7.27.2(@babel/core@7.27.7)) + jscodeshift: 0.15.2(@babel/preset-env@7.27.2(@babel/core@7.29.0)) leven: 3.1.0 p-limit: 6.2.0 prompts: 2.4.2 semver: 7.7.4 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) tiny-invariant: 1.3.3 ts-dedent: 2.2.0 transitivePeerDependencies: @@ -31829,6 +35663,31 @@ snapshots: - supports-color - utf-8-validate + '@storybook/client-api@6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/addons': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channel-postmessage': 6.3.7 + '@storybook/channels': 6.3.7 + '@storybook/client-logger': 6.3.7 + '@storybook/core-events': 6.3.7 + '@storybook/csf': 0.0.1 + '@types/qs': 6.15.0 + '@types/webpack-env': 1.18.8 + core-js: 3.48.0 + global: 4.4.0 + lodash: 4.17.23 + memoizerific: 1.11.3 + qs: 6.14.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + regenerator-runtime: 0.13.11 + stable: 0.1.8 + store2: 2.14.4 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - supports-color + '@storybook/client-api@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -31838,7 +35697,7 @@ snapshots: '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@types/qs': 6.14.0 + '@types/qs': 6.15.0 '@types/webpack-env': 1.18.8 core-js: 3.48.0 fast-deep-equal: 3.1.3 @@ -31854,16 +35713,16 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 - '@storybook/client-api@6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/client-api@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/addons': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/channel-postmessage': 6.5.16 - '@storybook/channels': 6.5.16 - '@storybook/client-logger': 6.5.16 - '@storybook/core-events': 6.5.16 + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channel-postmessage': 6.5.9 + '@storybook/channels': 6.5.9 + '@storybook/client-logger': 6.5.9 + '@storybook/core-events': 6.5.9 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/store': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@types/qs': 6.14.0 + '@storybook/store': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/qs': 6.15.0 '@types/webpack-env': 1.18.8 core-js: 3.48.0 fast-deep-equal: 3.1.3 @@ -31871,24 +35730,24 @@ snapshots: lodash: 4.17.23 memoizerific: 1.11.3 qs: 6.14.2 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 store2: 2.14.4 synchronous-promise: 2.0.17 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - '@storybook/client-api@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/client-api@6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addons': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/channel-postmessage': 6.5.9 '@storybook/channels': 6.5.9 '@storybook/client-logger': 6.5.9 '@storybook/core-events': 6.5.9 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/store': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@types/qs': 6.14.0 + '@storybook/store': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@types/qs': 6.15.0 '@types/webpack-env': 1.18.8 core-js: 3.48.0 fast-deep-equal: 3.1.3 @@ -31896,14 +35755,19 @@ snapshots: lodash: 4.17.23 memoizerific: 1.11.3 qs: 6.14.2 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) regenerator-runtime: 0.13.11 store2: 2.14.4 synchronous-promise: 2.0.17 ts-dedent: 2.2.0 util-deprecate: 1.0.2 + '@storybook/client-logger@6.3.7': + dependencies: + core-js: 3.48.0 + global: 4.4.0 + '@storybook/client-logger@6.5.16': dependencies: core-js: 3.48.0 @@ -31918,44 +35782,40 @@ snapshots: dependencies: '@storybook/global': 5.0.0 - '@storybook/client-logger@7.4.6': + '@storybook/client-logger@7.6.10': dependencies: '@storybook/global': 5.0.0 - '@storybook/client-logger@7.6.21': + '@storybook/codemod@7.6.10': dependencies: - '@storybook/global': 5.0.0 - - '@storybook/codemod@7.6.21': - dependencies: - '@babel/core': 7.27.7 - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) + '@babel/core': 7.27.1 + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) '@babel/types': 7.29.0 '@storybook/csf': 0.1.13 - '@storybook/csf-tools': 7.6.21 - '@storybook/node-logger': 7.6.21 - '@storybook/types': 7.6.21 + '@storybook/csf-tools': 7.6.10 + '@storybook/node-logger': 7.6.10 + '@storybook/types': 7.6.10 '@types/cross-spawn': 6.0.6 cross-spawn: 7.0.6 globby: 11.1.0 - jscodeshift: 0.15.2(@babel/preset-env@7.27.2(@babel/core@7.27.7)) + jscodeshift: 0.15.2(@babel/preset-env@7.27.2(@babel/core@7.27.1)) lodash: 4.17.23 prettier: 2.8.8 recast: 0.23.11 transitivePeerDependencies: - supports-color - '@storybook/codemod@8.6.15(storybook@8.6.15(prettier@3.5.3))': + '@storybook/codemod@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: - '@babel/core': 7.27.7 - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) + '@babel/core': 7.27.1 + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) '@babel/types': 7.29.0 - '@storybook/core': 8.6.15(prettier@3.5.3)(storybook@8.6.15(prettier@3.5.3)) + '@storybook/core': 8.6.14(prettier@3.5.3)(storybook@8.6.14(prettier@3.5.3)) '@types/cross-spawn': 6.0.6 cross-spawn: 7.0.6 - es-toolkit: 1.44.0 + es-toolkit: 1.45.1 globby: 14.1.0 - jscodeshift: 0.15.2(@babel/preset-env@7.27.2(@babel/core@7.27.7)) + jscodeshift: 0.15.2(@babel/preset-env@7.27.2(@babel/core@7.29.0)) prettier: 3.5.3 recast: 0.23.11 tiny-invariant: 1.3.3 @@ -31965,29 +35825,48 @@ snapshots: - supports-color - utf-8-validate - '@storybook/components@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/components@6.3.7(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/client-logger': 6.5.16 - '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@popperjs/core': 2.11.8 + '@storybook/client-logger': 6.3.7 + '@storybook/csf': 0.0.1 + '@storybook/theming': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/color-convert': 2.0.4 + '@types/overlayscrollbars': 1.12.5 + '@types/react-syntax-highlighter': 11.0.5 + color-convert: 2.0.1 core-js: 3.48.0 + fast-deep-equal: 3.1.3 + global: 4.4.0 + lodash: 4.17.23 + markdown-to-jsx: 7.7.17(react@18.2.0) memoizerific: 1.11.3 - qs: 6.14.2 + overlayscrollbars: 1.13.3 + polished: 4.3.1 + prop-types: 15.8.1 react: 18.2.0 + react-colorful: 5.6.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-dom: 18.2.0(react@18.2.0) + react-popper-tooltip: 3.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-syntax-highlighter: 13.5.3(react@18.2.0) + react-textarea-autosize: 8.5.9(@types/react@18.2.0)(react@18.2.0) regenerator-runtime: 0.13.11 + ts-dedent: 2.2.0 util-deprecate: 1.0.2 + transitivePeerDependencies: + - '@types/react' + - supports-color - '@storybook/components@6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/components@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/client-logger': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/theming': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) core-js: 3.48.0 memoizerific: 1.11.3 qs: 6.14.2 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 util-deprecate: 1.0.2 @@ -32002,19 +35881,34 @@ snapshots: qs: 6.14.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-syntax-highlighter: 15.6.6(react@18.2.0) + react-syntax-highlighter: 15.6.1(react@18.2.0) regenerator-runtime: 0.13.11 util-deprecate: 1.0.2 - '@storybook/components@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/components@6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@storybook/client-logger': 6.5.9 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + '@storybook/theming': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@types/react-syntax-highlighter': 11.0.5 + core-js: 3.48.0 + memoizerific: 1.11.3 + qs: 6.14.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-syntax-highlighter: 15.6.1(react@19.1.0) + regenerator-runtime: 0.13.11 + util-deprecate: 1.0.2 + + '@storybook/components@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@radix-ui/react-select': 1.2.2(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/client-logger': 7.4.6 + '@storybook/client-logger': 7.4.0 '@storybook/csf': 0.1.13 '@storybook/global': 5.0.0 - '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/types': 7.4.6 + '@storybook/theming': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/types': 7.4.0 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -32024,15 +35918,15 @@ snapshots: - '@types/react' - '@types/react-dom' - '@storybook/components@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/components@7.4.0(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-select': 1.2.2(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/client-logger': 7.4.6 + '@storybook/client-logger': 7.4.0 '@storybook/csf': 0.1.13 '@storybook/global': 5.0.0 - '@storybook/theming': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/types': 7.4.6 + '@storybook/theming': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/types': 7.4.0 memoizerific: 1.11.3 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -32042,11 +35936,39 @@ snapshots: - '@types/react' - '@types/react-dom' - '@storybook/components@8.6.15(storybook@8.6.15(prettier@3.5.3))': + '@storybook/components@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + storybook: 8.6.14(prettier@3.5.3) + + '@storybook/core-client@6.3.7(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0)': dependencies: - storybook: 8.6.15(prettier@3.5.3) + '@storybook/addons': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channel-postmessage': 6.3.7 + '@storybook/client-api': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.3.7 + '@storybook/core-events': 6.3.7 + '@storybook/csf': 0.0.1 + '@storybook/ui': 6.3.7(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + airbnb-js-shims: 2.2.1 + ansi-to-html: 0.6.15 + core-js: 3.48.0 + global: 4.4.0 + lodash: 4.17.23 + qs: 6.14.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + regenerator-runtime: 0.13.11 + ts-dedent: 2.2.0 + unfetch: 4.2.0 + util-deprecate: 1.0.2 + webpack: 4.47.0 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@types/react' + - supports-color - '@storybook/core-client@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)))': + '@storybook/core-client@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0(webpack-cli@6.0.1))': dependencies: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/channel-postmessage': 6.5.16 @@ -32070,11 +35992,11 @@ snapshots: ts-dedent: 2.2.0 unfetch: 4.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 4.47.0(webpack-cli@6.0.1) optionalDependencies: typescript: 5.8.3 - '@storybook/core-client@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2)': + '@storybook/core-client@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0)': dependencies: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/channel-postmessage': 6.5.16 @@ -32098,39 +36020,67 @@ snapshots: ts-dedent: 2.2.0 unfetch: 4.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 4.47.0 optionalDependencies: typescript: 5.8.3 - '@storybook/core-client@6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.105.2)': + '@storybook/core-client@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)))': dependencies: - '@storybook/addons': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/channel-postmessage': 6.5.16 '@storybook/channel-websocket': 6.5.16 - '@storybook/client-api': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/preview-web': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/store': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/ui': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 core-js: 3.48.0 global: 4.4.0 lodash: 4.17.23 qs: 6.14.2 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + regenerator-runtime: 0.13.11 + ts-dedent: 2.2.0 + unfetch: 4.2.0 + util-deprecate: 1.0.2 + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) + optionalDependencies: + typescript: 5.8.3 + + '@storybook/core-client@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.104.1)': + dependencies: + '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channel-postmessage': 6.5.16 + '@storybook/channel-websocket': 6.5.16 + '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.16 + '@storybook/core-events': 6.5.16 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + airbnb-js-shims: 2.2.1 + ansi-to-html: 0.6.15 + core-js: 3.48.0 + global: 4.4.0 + lodash: 4.17.23 + qs: 6.14.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 unfetch: 4.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) optionalDependencies: - typescript: 4.9.5 + typescript: 5.8.3 - '@storybook/core-client@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2)': + '@storybook/core-client@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0(webpack-cli@4.10.0))': dependencies: '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/channel-postmessage': 6.5.9 @@ -32154,187 +36104,197 @@ snapshots: ts-dedent: 2.2.0 unfetch: 4.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 4.47.0(webpack-cli@4.10.0) optionalDependencies: typescript: 5.8.3 - '@storybook/core-client@7.4.0': + '@storybook/core-client@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.104.1)': dependencies: - '@storybook/client-logger': 7.4.0 - '@storybook/preview-api': 7.4.0 - - '@storybook/core-client@7.4.6': - dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/preview-api': 7.4.6 - - '@storybook/core-common@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': - dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.27.7) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.7) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.7) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.7) - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/register': 7.28.6(@babel/core@7.27.7) - '@storybook/node-logger': 6.5.16 - '@storybook/semver': 7.3.2 - '@types/node': 16.18.126 - '@types/pretty-hrtime': 1.0.3 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - babel-plugin-macros: 3.1.0 - babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.7) - chalk: 4.1.2 + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channel-postmessage': 6.5.9 + '@storybook/channel-websocket': 6.5.9 + '@storybook/client-api': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.9 + '@storybook/core-events': 6.5.9 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + '@storybook/preview-web': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/store': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/ui': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + airbnb-js-shims: 2.2.1 + ansi-to-html: 0.6.15 core-js: 3.48.0 - express: 4.22.1 - file-system-cache: 1.1.0 - find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - fs-extra: 9.1.0 - glob: 7.2.3 - handlebars: 4.7.8 - interpret: 2.2.0 - json5: 2.2.3 - lazy-universal-dotenv: 3.0.1 - picomatch: 2.3.1 - pkg-dir: 5.0.0 - pretty-hrtime: 1.0.3 + global: 4.4.0 + lodash: 4.17.23 + qs: 6.14.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - resolve-from: 5.0.0 - slash: 3.0.0 - telejson: 6.0.8 + regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 + unfetch: 4.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) optionalDependencies: typescript: 5.8.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - eslint - - supports-color - - uglify-js - - vue-template-compiler - - webpack-cli - '@storybook/core-common@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': - dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.27.7) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.7) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.7) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.7) - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/register': 7.28.6(@babel/core@7.27.7) - '@storybook/node-logger': 6.5.16 + '@storybook/core-client@6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4)(webpack@4.47.0)': + dependencies: + '@storybook/addons': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/channel-postmessage': 6.5.9 + '@storybook/channel-websocket': 6.5.9 + '@storybook/client-api': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/client-logger': 6.5.9 + '@storybook/core-events': 6.5.9 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + '@storybook/preview-web': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/store': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/ui': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + airbnb-js-shims: 2.2.1 + ansi-to-html: 0.6.15 + core-js: 3.48.0 + global: 4.4.0 + lodash: 4.17.23 + qs: 6.14.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + regenerator-runtime: 0.13.11 + ts-dedent: 2.2.0 + unfetch: 4.2.0 + util-deprecate: 1.0.2 + webpack: 4.47.0 + optionalDependencies: + typescript: 4.9.4 + + '@storybook/core-client@6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4)(webpack@5.104.1)': + dependencies: + '@storybook/addons': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/channel-postmessage': 6.5.9 + '@storybook/channel-websocket': 6.5.9 + '@storybook/client-api': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/client-logger': 6.5.9 + '@storybook/core-events': 6.5.9 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + '@storybook/preview-web': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/store': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/ui': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + airbnb-js-shims: 2.2.1 + ansi-to-html: 0.6.15 + core-js: 3.48.0 + global: 4.4.0 + lodash: 4.17.23 + qs: 6.14.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + regenerator-runtime: 0.13.11 + ts-dedent: 2.2.0 + unfetch: 4.2.0 + util-deprecate: 1.0.2 + webpack: 5.104.1(webpack-cli@5.1.4) + optionalDependencies: + typescript: 4.9.4 + + '@storybook/core-client@7.4.0': + dependencies: + '@storybook/client-logger': 7.4.0 + '@storybook/preview-api': 7.4.0 + + '@storybook/core-common@6.3.7(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + dependencies: + '@babel/core': 7.27.1 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.27.1) + '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.1) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.1) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.1) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.1) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) + '@babel/preset-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/register': 7.28.6(@babel/core@7.27.1) + '@storybook/node-logger': 6.3.7 '@storybook/semver': 7.3.2 - '@types/node': 16.18.126 + '@types/glob-base': 0.3.2 + '@types/micromatch': 4.0.10 + '@types/node': 14.18.63 '@types/pretty-hrtime': 1.0.3 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0) babel-plugin-macros: 3.1.0 - babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.7) + babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.1) chalk: 4.1.2 core-js: 3.48.0 express: 4.22.1 file-system-cache: 1.1.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)(webpack@5.105.2) - fs-extra: 9.1.0 + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)(webpack@4.47.0) glob: 7.2.3 - handlebars: 4.7.8 + glob-base: 0.3.0 interpret: 2.2.0 json5: 2.2.3 lazy-universal-dotenv: 3.0.1 - picomatch: 2.3.1 + micromatch: 4.0.8 pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) resolve-from: 5.0.0 - slash: 3.0.0 - telejson: 6.0.8 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 4.47.0 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - - '@swc/core' - - esbuild - eslint - supports-color - - uglify-js - vue-template-compiler - webpack-cli - - '@storybook/core-common@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': - dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.27.7) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.7) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.7) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.7) - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/register': 7.28.6(@babel/core@7.27.7) + - webpack-command + + '@storybook/core-common@6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + dependencies: + '@babel/core': 7.27.1 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.27.1) + '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.1) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.1) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.1) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.1) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.1) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) + '@babel/preset-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/register': 7.28.6(@babel/core@7.27.1) '@storybook/node-logger': 6.5.16 '@storybook/semver': 7.3.2 '@types/node': 16.18.126 '@types/pretty-hrtime': 1.0.3 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0) babel-plugin-macros: 3.1.0 - babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.7) + babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.1) chalk: 4.1.2 core-js: 3.48.0 express: 4.22.1 file-system-cache: 1.1.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)(webpack@5.105.2) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)(webpack@4.47.0) fs-extra: 9.1.0 glob: 7.2.3 handlebars: 4.7.8 @@ -32351,55 +36311,53 @@ snapshots: telejson: 6.0.8 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 4.47.0 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - - '@swc/core' - - esbuild - eslint - supports-color - - uglify-js - vue-template-compiler - webpack-cli - - '@storybook/core-common@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': - dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.27.7) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.7) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.7) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.7) - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/register': 7.28.6(@babel/core@7.27.7) + - webpack-command + + '@storybook/core-common@6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.27.1) + '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.1) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.1) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.1) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.1) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.1) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) + '@babel/preset-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/register': 7.28.6(@babel/core@7.27.1) '@storybook/node-logger': 6.5.16 '@storybook/semver': 7.3.2 '@types/node': 16.18.126 '@types/pretty-hrtime': 1.0.3 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0(webpack-cli@6.0.1)) babel-plugin-macros: 3.1.0 - babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.7) + babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.1) chalk: 4.1.2 core-js: 3.48.0 express: 4.22.1 file-system-cache: 1.1.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)(webpack@5.105.2) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)(webpack@4.47.0(webpack-cli@6.0.1)) fs-extra: 9.1.0 glob: 7.2.3 handlebars: 4.7.8 @@ -32416,55 +36374,53 @@ snapshots: telejson: 6.0.8 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 4.47.0(webpack-cli@6.0.1) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - - '@swc/core' - - esbuild - eslint - supports-color - - uglify-js - vue-template-compiler - webpack-cli - - '@storybook/core-common@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)': - dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.27.7) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.7) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.7) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.7) - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/register': 7.28.6(@babel/core@7.27.7) - '@storybook/node-logger': 6.5.16 + - webpack-command + + '@storybook/core-common@6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + dependencies: + '@babel/core': 7.27.1 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.27.1) + '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.1) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.1) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.1) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.1) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.1) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) + '@babel/preset-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/register': 7.28.6(@babel/core@7.27.1) + '@storybook/node-logger': 6.5.9 '@storybook/semver': 7.3.2 '@types/node': 16.18.126 '@types/pretty-hrtime': 1.0.3 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0(webpack-cli@4.10.0)) babel-plugin-macros: 3.1.0 - babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.7) + babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.1) chalk: 4.1.2 core-js: 3.48.0 express: 4.22.1 file-system-cache: 1.1.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.3(jiti@2.6.1))(typescript@4.9.5)(webpack@5.105.2) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)(webpack@4.47.0(webpack-cli@4.10.0)) fs-extra: 9.1.0 glob: 7.2.3 handlebars: 4.7.8 @@ -32474,62 +36430,60 @@ snapshots: picomatch: 2.3.1 pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) resolve-from: 5.0.0 slash: 3.0.0 telejson: 6.0.8 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 4.47.0(webpack-cli@4.10.0) optionalDependencies: - typescript: 4.9.5 + typescript: 5.8.3 transitivePeerDependencies: - - '@swc/core' - - esbuild - eslint - supports-color - - uglify-js - vue-template-compiler - webpack-cli - - '@storybook/core-common@6.5.9(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': - dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.27.7) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.7) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.7) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.7) - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/register': 7.28.6(@babel/core@7.27.7) + - webpack-command + + '@storybook/core-common@6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.27.1) + '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.1) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.1) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.1) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.1) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.1) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) + '@babel/preset-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/register': 7.28.6(@babel/core@7.27.1) '@storybook/node-logger': 6.5.9 '@storybook/semver': 7.3.2 '@types/node': 16.18.126 '@types/pretty-hrtime': 1.0.3 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0(webpack-cli@6.0.1)) babel-plugin-macros: 3.1.0 - babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.7) + babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.1) chalk: 4.1.2 core-js: 3.48.0 express: 4.22.1 file-system-cache: 1.1.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)(webpack@5.105.2) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)(webpack@4.47.0(webpack-cli@6.0.1)) fs-extra: 9.1.0 glob: 7.2.3 handlebars: 4.7.8 @@ -32546,55 +36500,53 @@ snapshots: telejson: 6.0.8 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 4.47.0(webpack-cli@6.0.1) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - - '@swc/core' - - esbuild - eslint - supports-color - - uglify-js - vue-template-compiler - webpack-cli - - '@storybook/core-common@6.5.9(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': - dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.27.7) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.7) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.7) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.7) - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/register': 7.28.6(@babel/core@7.27.7) + - webpack-command + + '@storybook/core-common@6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4)': + dependencies: + '@babel/core': 7.27.1 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.27.1) + '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.1) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.1) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.1) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.1) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.1) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) + '@babel/preset-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/register': 7.28.6(@babel/core@7.27.1) '@storybook/node-logger': 6.5.9 '@storybook/semver': 7.3.2 '@types/node': 16.18.126 '@types/pretty-hrtime': 1.0.3 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0) babel-plugin-macros: 3.1.0 - babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.7) + babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.1) chalk: 4.1.2 core-js: 3.48.0 express: 4.22.1 file-system-cache: 1.1.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)(webpack@5.105.2) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.4(jiti@2.6.1))(typescript@4.9.4)(webpack@4.47.0) fs-extra: 9.1.0 glob: 7.2.3 handlebars: 4.7.8 @@ -32604,24 +36556,22 @@ snapshots: picomatch: 2.3.1 pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) resolve-from: 5.0.0 slash: 3.0.0 telejson: 6.0.8 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 4.47.0 optionalDependencies: - typescript: 5.8.3 + typescript: 4.9.4 transitivePeerDependencies: - - '@swc/core' - - esbuild - eslint - supports-color - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command '@storybook/core-common@7.4.0(encoding@0.1.13)': dependencies: @@ -32632,16 +36582,16 @@ snapshots: '@types/node-fetch': 2.6.13 '@types/pretty-hrtime': 1.0.3 chalk: 4.1.2 - esbuild: 0.25.12 - esbuild-register: 3.6.0(esbuild@0.25.12) + esbuild: 0.18.20 + esbuild-register: 3.6.0(esbuild@0.18.20) file-system-cache: 2.3.0 find-cache-dir: 3.3.2 find-up: 5.0.0 - fs-extra: 11.3.3 + fs-extra: 11.3.0 glob: 10.5.0 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 - node-fetch: 2.6.13(encoding@0.1.13) + node-fetch: 2.6.7(encoding@0.1.13) picomatch: 2.3.1 pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 @@ -32651,26 +36601,26 @@ snapshots: - encoding - supports-color - '@storybook/core-common@7.4.6(encoding@0.1.13)': + '@storybook/core-common@7.6.10(encoding@0.1.13)': dependencies: - '@storybook/core-events': 7.4.6 - '@storybook/node-logger': 7.4.6 - '@storybook/types': 7.4.6 + '@storybook/core-events': 7.6.10 + '@storybook/node-logger': 7.6.10 + '@storybook/types': 7.6.10 '@types/find-cache-dir': 3.2.1 - '@types/node': 16.18.126 + '@types/node': 18.18.7 '@types/node-fetch': 2.6.13 '@types/pretty-hrtime': 1.0.3 chalk: 4.1.2 - esbuild: 0.25.12 - esbuild-register: 3.6.0(esbuild@0.25.12) + esbuild: 0.18.20 + esbuild-register: 3.6.0(esbuild@0.18.20) file-system-cache: 2.3.0 find-cache-dir: 3.3.2 find-up: 5.0.0 - fs-extra: 11.3.3 + fs-extra: 11.3.0 glob: 10.5.0 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 - node-fetch: 2.6.13(encoding@0.1.13) + node-fetch: 2.6.7(encoding@0.1.13) picomatch: 2.3.1 pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 @@ -32680,34 +36630,9 @@ snapshots: - encoding - supports-color - '@storybook/core-common@7.6.21(encoding@0.1.13)': + '@storybook/core-events@6.3.7': dependencies: - '@storybook/core-events': 7.6.21 - '@storybook/node-logger': 7.6.21 - '@storybook/types': 7.6.21 - '@types/find-cache-dir': 3.2.1 - '@types/node': 18.19.130 - '@types/node-fetch': 2.6.13 - '@types/pretty-hrtime': 1.0.3 - chalk: 4.1.2 - esbuild: 0.25.12 - esbuild-register: 3.6.0(esbuild@0.25.12) - file-system-cache: 2.3.0 - find-cache-dir: 3.3.2 - find-up: 5.0.0 - fs-extra: 11.3.3 - glob: 10.5.0 - handlebars: 4.7.8 - lazy-universal-dotenv: 4.0.0 - node-fetch: 2.6.13(encoding@0.1.13) - picomatch: 2.3.1 - pkg-dir: 5.0.0 - pretty-hrtime: 1.0.3 - resolve-from: 5.0.0 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - encoding - - supports-color + core-js: 3.48.0 '@storybook/core-events@6.5.16': dependencies: @@ -32721,94 +36646,122 @@ snapshots: dependencies: ts-dedent: 2.2.0 - '@storybook/core-events@7.4.6': + '@storybook/core-events@7.6.10': dependencies: ts-dedent: 2.2.0 - '@storybook/core-events@7.6.21': + '@storybook/core-server@6.3.7(@babel/core@7.27.1)(@types/react@18.2.0)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: + '@storybook/builder-webpack4': 6.3.7(@types/react@18.2.0)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-client': 6.3.7(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0) + '@storybook/core-common': 6.3.7(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/csf-tools': 6.3.7(@babel/core@7.27.1) + '@storybook/manager-webpack4': 6.3.7(@types/react@18.2.0)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/node-logger': 6.3.7 + '@storybook/semver': 7.3.2 + '@types/node': 14.18.63 + '@types/node-fetch': 2.6.13 + '@types/pretty-hrtime': 1.0.3 + '@types/webpack': 4.41.40 + better-opn: 2.1.1 + boxen: 4.2.0 + chalk: 4.1.2 + cli-table3: 0.6.0 + commander: 6.2.1 + compression: 1.8.1 + core-js: 3.48.0 + cpy: 8.1.2 + detect-port: 1.6.1 + express: 4.22.1 + file-system-cache: 1.1.0 + fs-extra: 9.1.0 + globby: 11.1.0 + ip: 1.1.9 + node-fetch: 2.6.7(encoding@0.1.13) + pretty-hrtime: 1.0.3 + prompts: 2.4.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + regenerator-runtime: 0.13.11 + serve-favicon: 2.5.1 ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + webpack: 4.47.0 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@babel/core' + - '@types/react' + - encoding + - eslint + - supports-color + - vue-template-compiler + - webpack-cli + - webpack-command - '@storybook/core-server@6.5.16(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.9(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + '@storybook/core-server@6.3.7(@babel/core@7.29.0)(@types/react@18.2.0)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: - '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-webpack4': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2) - '@storybook/core-common': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) - '@storybook/core-events': 6.5.16 - '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/csf-tools': 6.5.16 - '@storybook/manager-webpack4': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) - '@storybook/node-logger': 6.5.16 + '@storybook/builder-webpack4': 6.3.7(@types/react@18.2.0)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-client': 6.3.7(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0) + '@storybook/core-common': 6.3.7(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/csf-tools': 6.3.7(@babel/core@7.29.0) + '@storybook/manager-webpack4': 6.3.7(@types/react@18.2.0)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/node-logger': 6.3.7 '@storybook/semver': 7.3.2 - '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/telemetry': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) - '@types/node': 16.18.126 + '@types/node': 14.18.63 '@types/node-fetch': 2.6.13 '@types/pretty-hrtime': 1.0.3 '@types/webpack': 4.41.40 better-opn: 2.1.1 - boxen: 5.1.2 + boxen: 4.2.0 chalk: 4.1.2 - cli-table3: 0.6.5 + cli-table3: 0.6.0 commander: 6.2.1 compression: 1.8.1 core-js: 3.48.0 cpy: 8.1.2 detect-port: 1.6.1 express: 4.22.1 + file-system-cache: 1.1.0 fs-extra: 9.1.0 - global: 4.4.0 globby: 11.1.0 - ip: 2.0.1 - lodash: 4.17.23 - node-fetch: 2.6.13(encoding@0.1.13) - open: 8.4.2 + ip: 1.1.9 + node-fetch: 2.6.7(encoding@0.1.13) pretty-hrtime: 1.0.3 prompts: 2.4.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 serve-favicon: 2.5.1 - slash: 3.0.0 - telejson: 6.0.8 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - watchpack: 2.5.1 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) - ws: 8.19.0 - x-default-browser: 0.4.0 + webpack: 4.47.0 optionalDependencies: - '@storybook/builder-webpack5': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) - '@storybook/manager-webpack5': 6.5.9(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) typescript: 5.8.3 transitivePeerDependencies: - - '@storybook/mdx2-csf' - - '@swc/core' - - bufferutil + - '@babel/core' + - '@types/react' - encoding - - esbuild - eslint - supports-color - - uglify-js - - utf-8-validate - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/core-server@6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.9(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + '@storybook/core-server@6.5.16(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.18(@swc/helpers@0.5.19))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.9(@swc/core@1.15.18(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': dependencies: '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-webpack4': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/builder-webpack4': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0(webpack-cli@6.0.1)) + '@storybook/core-common': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/csf-tools': 6.5.16 - '@storybook/manager-webpack4': 6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/manager-webpack4': 6.5.16(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/node-logger': 6.5.16 '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/telemetry': 6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/telemetry': 6.5.16(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@types/node': 16.18.126 '@types/node-fetch': 2.6.13 '@types/pretty-hrtime': 1.0.3 @@ -32828,7 +36781,7 @@ snapshots: globby: 11.1.0 ip: 2.0.1 lodash: 4.17.23 - node-fetch: 2.6.13(encoding@0.1.13) + node-fetch: 2.6.7(encoding@0.1.13) open: 8.4.2 pretty-hrtime: 1.0.3 prompts: 2.4.2 @@ -32841,40 +36794,38 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 watchpack: 2.5.1 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 4.47.0(webpack-cli@6.0.1) ws: 8.19.0 x-default-browser: 0.4.0 optionalDependencies: - '@storybook/builder-webpack5': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) - '@storybook/manager-webpack5': 6.5.9(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/builder-webpack5': 6.5.16(@swc/core@1.15.18(@swc/helpers@0.5.19))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/manager-webpack5': 6.5.9(@swc/core@1.15.18(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' - - '@swc/core' - bufferutil - encoding - - esbuild - eslint - supports-color - - uglify-js - utf-8-validate - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/core-server@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/core-server@6.5.16(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-webpack4': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - '@storybook/core-common': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/builder-webpack4': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0) + '@storybook/core-common': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/csf-tools': 6.5.16 - '@storybook/manager-webpack4': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/manager-webpack4': 6.5.16(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/node-logger': 6.5.16 '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/telemetry': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/telemetry': 6.5.16(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@types/node': 16.18.126 '@types/node-fetch': 2.6.13 '@types/pretty-hrtime': 1.0.3 @@ -32894,7 +36845,7 @@ snapshots: globby: 11.1.0 ip: 2.0.1 lodash: 4.17.23 - node-fetch: 2.6.13(encoding@0.1.13) + node-fetch: 2.6.7(encoding@0.1.13) open: 8.4.2 pretty-hrtime: 1.0.3 prompts: 2.4.2 @@ -32907,38 +36858,36 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 watchpack: 2.5.1 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 4.47.0 ws: 8.19.0 x-default-browser: 0.4.0 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' - - '@swc/core' - bufferutil - encoding - - esbuild - eslint - supports-color - - uglify-js - utf-8-validate - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/core-server@6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/core-server@6.5.9(@storybook/builder-webpack5@6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': dependencies: '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-webpack4': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) - '@storybook/core-events': 6.5.16 + '@storybook/builder-webpack4': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-client': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0(webpack-cli@4.10.0)) + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-events': 6.5.9 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/csf-tools': 6.5.16 - '@storybook/manager-webpack4': 6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) - '@storybook/node-logger': 6.5.16 + '@storybook/csf-tools': 6.5.9 + '@storybook/manager-webpack4': 6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/node-logger': 6.5.9 '@storybook/semver': 7.3.2 - '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/telemetry': 6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/store': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/telemetry': 6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@types/node': 16.18.126 '@types/node-fetch': 2.6.13 '@types/pretty-hrtime': 1.0.3 @@ -32958,7 +36907,7 @@ snapshots: globby: 11.1.0 ip: 2.0.1 lodash: 4.17.23 - node-fetch: 2.6.13(encoding@0.1.13) + node-fetch: 2.6.7(encoding@0.1.13) open: 8.4.2 pretty-hrtime: 1.0.3 prompts: 2.4.2 @@ -32971,38 +36920,38 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 watchpack: 2.5.1 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 4.47.0(webpack-cli@4.10.0) ws: 8.19.0 x-default-browser: 0.4.0 optionalDependencies: + '@storybook/builder-webpack5': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/manager-webpack5': 6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' - - '@swc/core' - bufferutil - encoding - - esbuild - eslint - supports-color - - uglify-js - utf-8-validate - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/core-server@6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)': + '@storybook/core-server@6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4)': dependencies: '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-webpack4': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) - '@storybook/core-client': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.105.2) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) - '@storybook/core-events': 6.5.16 + '@storybook/builder-webpack4': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4) + '@storybook/core-client': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4)(webpack@4.47.0) + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4) + '@storybook/core-events': 6.5.9 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/csf-tools': 6.5.16 - '@storybook/manager-webpack4': 6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) - '@storybook/node-logger': 6.5.16 + '@storybook/csf-tools': 6.5.9 + '@storybook/manager-webpack4': 6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4) + '@storybook/node-logger': 6.5.9 '@storybook/semver': 7.3.2 - '@storybook/store': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/telemetry': 6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) + '@storybook/store': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/telemetry': 6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4) '@types/node': 16.18.126 '@types/node-fetch': 2.6.13 '@types/pretty-hrtime': 1.0.3 @@ -33022,7 +36971,7 @@ snapshots: globby: 11.1.0 ip: 2.0.1 lodash: 4.17.23 - node-fetch: 2.6.13(encoding@0.1.13) + node-fetch: 2.6.7(encoding@0.1.13) open: 8.4.2 pretty-hrtime: 1.0.3 prompts: 2.4.2 @@ -33035,43 +36984,41 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 watchpack: 2.5.1 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 4.47.0 ws: 8.19.0 x-default-browser: 0.4.0 optionalDependencies: - typescript: 4.9.5 + typescript: 4.9.4 transitivePeerDependencies: - '@storybook/mdx2-csf' - - '@swc/core' - bufferutil - encoding - - esbuild - eslint - supports-color - - uglify-js - utf-8-validate - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/core-server@7.6.21(encoding@0.1.13)': + '@storybook/core-server@7.6.10(encoding@0.1.13)': dependencies: '@aw-web-design/x-default-browser': 1.4.126 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 7.6.21(encoding@0.1.13) - '@storybook/channels': 7.6.21 - '@storybook/core-common': 7.6.21(encoding@0.1.13) - '@storybook/core-events': 7.6.21 + '@storybook/builder-manager': 7.6.10(encoding@0.1.13) + '@storybook/channels': 7.6.10 + '@storybook/core-common': 7.6.10(encoding@0.1.13) + '@storybook/core-events': 7.6.10 '@storybook/csf': 0.1.13 - '@storybook/csf-tools': 7.6.21 + '@storybook/csf-tools': 7.6.10 '@storybook/docs-mdx': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/manager': 7.6.21 - '@storybook/node-logger': 7.6.21 - '@storybook/preview-api': 7.6.21 - '@storybook/telemetry': 7.6.21(encoding@0.1.13) - '@storybook/types': 7.6.21 + '@storybook/manager': 7.6.10 + '@storybook/node-logger': 7.6.10 + '@storybook/preview-api': 7.6.10 + '@storybook/telemetry': 7.6.10(encoding@0.1.13) + '@storybook/types': 7.6.10 '@types/detect-port': 1.3.5 - '@types/node': 18.19.130 + '@types/node': 18.18.7 '@types/pretty-hrtime': 1.0.3 '@types/semver': 7.7.1 better-opn: 3.0.2 @@ -33080,8 +37027,9 @@ snapshots: compression: 1.8.1 detect-port: 1.6.1 express: 4.22.1 - fs-extra: 11.3.3 + fs-extra: 11.3.0 globby: 11.1.0 + ip: 2.0.1 lodash: 4.17.23 open: 8.4.2 pretty-hrtime: 1.0.3 @@ -33112,128 +37060,158 @@ snapshots: - encoding - supports-color - '@storybook/core-webpack@8.6.15(storybook@8.6.15(prettier@3.5.3))': + '@storybook/core-webpack@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/core@6.5.16(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.9(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.105.2)': + '@storybook/core@6.3.7(@babel/core@7.27.1)(@types/react@18.2.0)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0)': + dependencies: + '@storybook/core-client': 6.3.7(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0) + '@storybook/core-server': 6.3.7(@babel/core@7.27.1)(@types/react@18.2.0)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@babel/core' + - '@storybook/manager-webpack5' + - '@types/react' + - encoding + - eslint + - supports-color + - vue-template-compiler + - webpack + - webpack-cli + - webpack-command + + '@storybook/core@6.3.7(@babel/core@7.29.0)(@types/react@18.2.0)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0)': dependencies: - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2) - '@storybook/core-server': 6.5.16(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.9(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-client': 6.3.7(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0) + '@storybook/core-server': 6.3.7(@babel/core@7.29.0)(@types/react@18.2.0)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) optionalDependencies: - '@storybook/builder-webpack5': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) - '@storybook/manager-webpack5': 6.5.9(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + typescript: 5.8.3 + transitivePeerDependencies: + - '@babel/core' + - '@storybook/manager-webpack5' + - '@types/react' + - encoding + - eslint + - supports-color + - vue-template-compiler + - webpack + - webpack-cli + - webpack-command + + '@storybook/core@6.5.16(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.18(@swc/helpers@0.5.19))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.9(@swc/core@1.15.18(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.104.1)': + dependencies: + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.104.1) + '@storybook/core-server': 6.5.16(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.18(@swc/helpers@0.5.19))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.9(@swc/core@1.15.18(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + optionalDependencies: + '@storybook/builder-webpack5': 6.5.16(@swc/core@1.15.18(@swc/helpers@0.5.19))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/manager-webpack5': 6.5.9(@swc/core@1.15.18(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' - - '@swc/core' - bufferutil - encoding - - esbuild - eslint - supports-color - - uglify-js - utf-8-validate - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/core@6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.9(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.105.2)': + '@storybook/core@6.5.16(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)))': dependencies: - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2) - '@storybook/core-server': 6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.9(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))) + '@storybook/core-server': 6.5.16(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) optionalDependencies: - '@storybook/builder-webpack5': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) - '@storybook/manager-webpack5': 6.5.9(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' - - '@swc/core' - bufferutil - encoding - - esbuild - eslint - supports-color - - uglify-js - utf-8-validate - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/core@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)))': + '@storybook/core@6.5.16(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.104.1)': dependencies: - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - '@storybook/core-server': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.104.1) + '@storybook/core-server': 6.5.16(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' - - '@swc/core' - bufferutil - encoding - - esbuild - eslint - supports-color - - uglify-js - utf-8-validate - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/core@6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2)': + '@storybook/core@6.5.9(@storybook/builder-webpack5@6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.104.1)': dependencies: - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2) - '@storybook/core-server': 6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-client': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.104.1) + '@storybook/core-server': 6.5.9(@storybook/builder-webpack5@6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@4.10.0) optionalDependencies: + '@storybook/builder-webpack5': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/manager-webpack5': 6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' - - '@swc/core' - bufferutil - encoding - - esbuild - eslint - supports-color - - uglify-js - utf-8-validate - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/core@6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.105.2)': + '@storybook/core@6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4)(webpack@5.104.1)': dependencies: - '@storybook/core-client': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.105.2) - '@storybook/core-server': 6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) + '@storybook/core-client': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4)(webpack@5.104.1) + '@storybook/core-server': 6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: - typescript: 4.9.5 + typescript: 4.9.4 transitivePeerDependencies: - '@storybook/mdx2-csf' - - '@swc/core' - bufferutil - encoding - - esbuild - eslint - supports-color - - uglify-js - utf-8-validate - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/core@8.6.15(prettier@3.5.3)(storybook@8.6.15(prettier@3.5.3))': + '@storybook/core@8.6.13(prettier@3.5.3)(storybook@8.6.13(prettier@3.5.3))': dependencies: - '@storybook/theming': 8.6.15(storybook@8.6.15(prettier@3.5.3)) + '@storybook/theming': 8.6.13(storybook@8.6.13(prettier@3.5.3)) better-opn: 3.0.2 browser-assert: 1.2.1 esbuild: 0.25.12 @@ -33252,34 +37230,90 @@ snapshots: - supports-color - utf-8-validate - '@storybook/csf-plugin@7.4.6': + '@storybook/core@8.6.14(prettier@3.5.3)(storybook@8.6.14(prettier@3.5.3))': dependencies: - '@storybook/csf-tools': 7.4.6 - unplugin: 1.16.1 + '@storybook/theming': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + better-opn: 3.0.2 + browser-assert: 1.2.1 + esbuild: 0.25.12 + esbuild-register: 3.6.0(esbuild@0.25.12) + jsdoc-type-pratt-parser: 4.8.0 + process: 0.11.10 + recast: 0.23.11 + semver: 7.7.4 + util: 0.12.5 + ws: 8.19.0 + optionalDependencies: + prettier: 3.5.3 transitivePeerDependencies: + - bufferutil + - storybook - supports-color + - utf-8-validate - '@storybook/csf-plugin@8.6.14(storybook@8.6.15(prettier@3.5.3))': + '@storybook/csf-plugin@7.4.0': dependencies: - storybook: 8.6.15(prettier@3.5.3) + '@storybook/csf-tools': 7.4.0 unplugin: 1.16.1 + transitivePeerDependencies: + - supports-color - '@storybook/csf-plugin@8.6.15(storybook@8.6.15(prettier@3.5.3))': + '@storybook/csf-plugin@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) unplugin: 1.16.1 + '@storybook/csf-tools@6.3.7(@babel/core@7.27.1)': + dependencies: + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.0 + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@mdx-js/mdx': 1.6.22 + '@storybook/csf': 0.0.1 + core-js: 3.48.0 + fs-extra: 9.1.0 + js-string-escape: 1.0.1 + lodash: 4.17.23 + prettier: 2.2.1 + regenerator-runtime: 0.13.11 + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@storybook/csf-tools@6.3.7(@babel/core@7.29.0)': + dependencies: + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.0 + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/preset-env': 7.27.2(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@mdx-js/mdx': 1.6.22 + '@storybook/csf': 0.0.1 + core-js: 3.48.0 + fs-extra: 9.1.0 + js-string-escape: 1.0.1 + lodash: 4.17.23 + prettier: 2.2.1 + regenerator-runtime: 0.13.11 + transitivePeerDependencies: + - '@babel/core' + - supports-color + '@storybook/csf-tools@6.5.16': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/generator': 7.29.1 '@babel/parser': 7.29.0 - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.27.7) - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/mdx1-csf': 0.0.1(@babel/core@7.27.7) + '@storybook/mdx1-csf': 0.0.1(@babel/core@7.27.1) core-js: 3.48.0 fs-extra: 9.1.0 global: 4.4.0 @@ -33288,29 +37322,48 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/csf-tools@7.4.6': + '@storybook/csf-tools@6.5.9': + dependencies: + '@babel/core': 7.27.1 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.0 + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + '@storybook/mdx1-csf': 0.0.1(@babel/core@7.27.1) + core-js: 3.48.0 + fs-extra: 9.1.0 + global: 4.4.0 + regenerator-runtime: 0.13.11 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color + + '@storybook/csf-tools@7.4.0': dependencies: '@babel/generator': 7.29.1 '@babel/parser': 7.29.0 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 '@storybook/csf': 0.1.13 - '@storybook/types': 7.4.6 - fs-extra: 11.3.3 + '@storybook/types': 7.4.0 + fs-extra: 11.3.0 recast: 0.23.11 ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color - '@storybook/csf-tools@7.6.21': + '@storybook/csf-tools@7.6.10': dependencies: '@babel/generator': 7.29.1 '@babel/parser': 7.29.0 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 '@storybook/csf': 0.1.13 - '@storybook/types': 7.6.21 - fs-extra: 11.3.3 + '@storybook/types': 7.6.10 + fs-extra: 11.3.0 recast: 0.23.11 ts-dedent: 2.2.0 transitivePeerDependencies: @@ -33332,7 +37385,7 @@ snapshots: '@storybook/docs-tools@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) core-js: 3.48.0 @@ -33344,11 +37397,11 @@ snapshots: - react-dom - supports-color - '@storybook/docs-tools@6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/docs-tools@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/store': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/store': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) core-js: 3.48.0 doctrine: 3.0.0 lodash: 4.17.23 @@ -33358,23 +37411,25 @@ snapshots: - react-dom - supports-color - '@storybook/docs-tools@7.4.0(encoding@0.1.13)': + '@storybook/docs-tools@6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@storybook/core-common': 7.4.0(encoding@0.1.13) - '@storybook/preview-api': 7.4.0 - '@storybook/types': 7.4.0 - '@types/doctrine': 0.0.3 + '@babel/core': 7.27.1 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + '@storybook/store': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + core-js: 3.48.0 doctrine: 3.0.0 lodash: 4.17.23 + regenerator-runtime: 0.13.11 transitivePeerDependencies: - - encoding + - react + - react-dom - supports-color - '@storybook/docs-tools@7.4.6(encoding@0.1.13)': + '@storybook/docs-tools@7.4.0(encoding@0.1.13)': dependencies: - '@storybook/core-common': 7.4.6(encoding@0.1.13) - '@storybook/preview-api': 7.4.6 - '@storybook/types': 7.4.6 + '@storybook/core-common': 7.4.0(encoding@0.1.13) + '@storybook/preview-api': 7.4.0 + '@storybook/types': 7.4.0 '@types/doctrine': 0.0.3 doctrine: 3.0.0 lodash: 4.17.23 @@ -33394,28 +37449,22 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@storybook/instrumenter@8.6.14(storybook@8.6.15(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - '@vitest/utils': 2.1.9 - storybook: 8.6.15(prettier@3.5.3) - - '@storybook/instrumenter@8.6.15(storybook@8.6.15(prettier@3.5.3))': + '@storybook/instrumenter@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 '@vitest/utils': 2.1.9 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) - '@storybook/manager-api@7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/manager-api@7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/channels': 7.4.6 - '@storybook/client-logger': 7.4.6 - '@storybook/core-events': 7.4.6 + '@storybook/channels': 7.4.0 + '@storybook/client-logger': 7.4.0 + '@storybook/core-events': 7.4.0 '@storybook/csf': 0.1.13 '@storybook/global': 5.0.0 - '@storybook/router': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/types': 7.4.6 + '@storybook/router': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/types': 7.4.0 dequal: 2.0.3 lodash: 4.17.23 memoizerific: 1.11.3 @@ -33426,16 +37475,16 @@ snapshots: telejson: 7.2.0 ts-dedent: 2.2.0 - '@storybook/manager-api@7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/manager-api@7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@storybook/channels': 7.4.6 - '@storybook/client-logger': 7.4.6 - '@storybook/core-events': 7.4.6 + '@storybook/channels': 7.4.0 + '@storybook/client-logger': 7.4.0 + '@storybook/core-events': 7.4.0 '@storybook/csf': 0.1.13 '@storybook/global': 5.0.0 - '@storybook/router': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/theming': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/types': 7.4.6 + '@storybook/router': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/theming': 7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/types': 7.4.0 dequal: 2.0.3 lodash: 4.17.23 memoizerific: 1.11.3 @@ -33446,300 +37495,293 @@ snapshots: telejson: 7.2.0 ts-dedent: 2.2.0 - '@storybook/manager-api@8.6.15(storybook@8.6.15(prettier@3.5.3))': - dependencies: - storybook: 8.6.15(prettier@3.5.3) - - '@storybook/manager-webpack4@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/manager-api@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - '@storybook/core-common': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) - '@storybook/node-logger': 6.5.16 - '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@types/node': 16.18.126 - '@types/webpack': 4.41.40 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - case-sensitive-paths-webpack-plugin: 2.4.0 - chalk: 4.1.2 - core-js: 3.48.0 - css-loader: 3.6.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - express: 4.22.1 - file-loader: 6.2.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - find-up: 5.0.0 - fs-extra: 9.1.0 - html-webpack-plugin: 4.5.2(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - node-fetch: 2.6.13(encoding@0.1.13) - pnp-webpack-plugin: 1.6.4(typescript@5.8.3) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - read-pkg-up: 7.0.1 - regenerator-runtime: 0.13.11 - resolve-from: 5.0.0 - style-loader: 1.3.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - telejson: 6.0.8 - terser-webpack-plugin: 4.2.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))))(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) - webpack-dev-middleware: 3.7.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - webpack-virtual-modules: 0.2.2 - optionalDependencies: - typescript: 5.8.3 - transitivePeerDependencies: - - '@swc/core' - - encoding - - esbuild - - eslint - - supports-color - - uglify-js - - vue-template-compiler - - webpack-cli + storybook: 8.6.14(prettier@3.5.3) - '@storybook/manager-webpack4@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + '@storybook/manager-webpack4@6.3.7(@types/react@18.2.0)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2) - '@storybook/core-common': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) - '@storybook/node-logger': 6.5.16 - '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@types/node': 16.18.126 + '@babel/core': 7.27.1 + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) + '@storybook/addons': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-client': 6.3.7(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0) + '@storybook/core-common': 6.3.7(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/node-logger': 6.3.7 + '@storybook/theming': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/ui': 6.3.7(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/node': 14.18.63 '@types/webpack': 4.41.40 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0) case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 core-js: 3.48.0 - css-loader: 3.6.0(webpack@5.105.2) + css-loader: 3.6.0(webpack@4.47.0) + dotenv-webpack: 1.8.0(webpack@4.47.0) express: 4.22.1 - file-loader: 6.2.0(webpack@5.105.2) + file-loader: 6.2.0(webpack@4.47.0) + file-system-cache: 1.1.0 find-up: 5.0.0 fs-extra: 9.1.0 - html-webpack-plugin: 4.5.2(webpack@5.105.2) - node-fetch: 2.6.13(encoding@0.1.13) + html-webpack-plugin: 4.5.2(webpack@4.47.0) + node-fetch: 2.6.7(encoding@0.1.13) pnp-webpack-plugin: 1.6.4(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - style-loader: 1.3.0(webpack@5.105.2) - telejson: 6.0.8 - terser-webpack-plugin: 4.2.3(webpack@5.105.2) + style-loader: 1.3.0(webpack@4.47.0) + telejson: 5.3.3 + terser-webpack-plugin: 4.2.3(webpack@4.47.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.105.2))(webpack@5.105.2) + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0))(webpack@4.47.0) util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) - webpack-dev-middleware: 3.7.3(webpack@5.105.2) + webpack: 4.47.0 + webpack-dev-middleware: 3.7.3(webpack@4.47.0) webpack-virtual-modules: 0.2.2 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - - '@swc/core' + - '@types/react' - encoding - - esbuild - eslint - supports-color - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/manager-webpack4@6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/manager-webpack4@6.5.16(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) + '@babel/core': 7.27.1 + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0) + '@storybook/core-common': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/node-logger': 6.5.16 '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/node': 16.18.126 '@types/webpack': 4.41.40 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0) case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 core-js: 3.48.0 - css-loader: 3.6.0(webpack@5.105.2) + css-loader: 3.6.0(webpack@4.47.0) express: 4.22.1 - file-loader: 6.2.0(webpack@5.105.2) + file-loader: 6.2.0(webpack@4.47.0) find-up: 5.0.0 fs-extra: 9.1.0 - html-webpack-plugin: 4.5.2(webpack@5.105.2) - node-fetch: 2.6.13(encoding@0.1.13) + html-webpack-plugin: 4.5.2(webpack@4.47.0) + node-fetch: 2.6.7(encoding@0.1.13) pnp-webpack-plugin: 1.6.4(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - style-loader: 1.3.0(webpack@5.105.2) + style-loader: 1.3.0(webpack@4.47.0) telejson: 6.0.8 - terser-webpack-plugin: 4.2.3(webpack@5.105.2) + terser-webpack-plugin: 4.2.3(webpack@4.47.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.105.2))(webpack@5.105.2) + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0))(webpack@4.47.0) util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-dev-middleware: 3.7.3(webpack@5.105.2) + webpack: 4.47.0 + webpack-dev-middleware: 3.7.3(webpack@4.47.0) webpack-virtual-modules: 0.2.2 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - - '@swc/core' - encoding - - esbuild - eslint - supports-color - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/manager-webpack4@6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + '@storybook/manager-webpack4@6.5.16(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) + '@babel/core': 7.27.1 + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0(webpack-cli@6.0.1)) + '@storybook/core-common': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/node-logger': 6.5.16 '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/node': 16.18.126 '@types/webpack': 4.41.40 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0(webpack-cli@6.0.1)) case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 core-js: 3.48.0 - css-loader: 3.6.0(webpack@5.105.2) + css-loader: 3.6.0(webpack@4.47.0(webpack-cli@6.0.1)) express: 4.22.1 - file-loader: 6.2.0(webpack@5.105.2) + file-loader: 6.2.0(webpack@4.47.0(webpack-cli@6.0.1)) find-up: 5.0.0 fs-extra: 9.1.0 - html-webpack-plugin: 4.5.2(webpack@5.105.2) - node-fetch: 2.6.13(encoding@0.1.13) + html-webpack-plugin: 4.5.2(webpack@4.47.0(webpack-cli@6.0.1)) + node-fetch: 2.6.7(encoding@0.1.13) pnp-webpack-plugin: 1.6.4(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - style-loader: 1.3.0(webpack@5.105.2) + style-loader: 1.3.0(webpack@4.47.0(webpack-cli@6.0.1)) telejson: 6.0.8 - terser-webpack-plugin: 4.2.3(webpack@5.105.2) + terser-webpack-plugin: 4.2.3(webpack@4.47.0(webpack-cli@6.0.1)) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.105.2))(webpack@5.105.2) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.104.1))(webpack@4.47.0(webpack-cli@6.0.1)) util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@4.10.0) - webpack-dev-middleware: 3.7.3(webpack@5.105.2) + webpack: 4.47.0(webpack-cli@6.0.1) + webpack-dev-middleware: 3.7.3(webpack@4.47.0(webpack-cli@6.0.1)) webpack-virtual-modules: 0.2.2 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - - '@swc/core' - encoding - - esbuild - eslint - supports-color - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/manager-webpack4@6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)': + '@storybook/manager-webpack4@6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@storybook/addons': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/core-client': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.105.2) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) - '@storybook/node-logger': 6.5.16 - '@storybook/theming': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/ui': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@babel/core': 7.27.1 + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-client': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0(webpack-cli@4.10.0)) + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/node-logger': 6.5.9 + '@storybook/theming': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/ui': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/node': 16.18.126 + '@types/webpack': 4.41.40 + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0(webpack-cli@4.10.0)) + case-sensitive-paths-webpack-plugin: 2.4.0 + chalk: 4.1.2 + core-js: 3.48.0 + css-loader: 3.6.0(webpack@4.47.0(webpack-cli@4.10.0)) + express: 4.22.1 + file-loader: 6.2.0(webpack@4.47.0(webpack-cli@4.10.0)) + find-up: 5.0.0 + fs-extra: 9.1.0 + html-webpack-plugin: 4.5.2(webpack@4.47.0(webpack-cli@4.10.0)) + node-fetch: 2.6.7(encoding@0.1.13) + pnp-webpack-plugin: 1.6.4(typescript@5.8.3) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + read-pkg-up: 7.0.1 + regenerator-runtime: 0.13.11 + resolve-from: 5.0.0 + style-loader: 1.3.0(webpack@4.47.0(webpack-cli@4.10.0)) + telejson: 6.0.8 + terser-webpack-plugin: 4.2.3(webpack@4.47.0(webpack-cli@4.10.0)) + ts-dedent: 2.2.0 + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0(webpack-cli@4.10.0)))(webpack@4.47.0(webpack-cli@4.10.0)) + util-deprecate: 1.0.2 + webpack: 4.47.0(webpack-cli@4.10.0) + webpack-dev-middleware: 3.7.3(webpack@4.47.0(webpack-cli@4.10.0)) + webpack-virtual-modules: 0.2.2 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - encoding + - eslint + - supports-color + - vue-template-compiler + - webpack-cli + - webpack-command + + '@storybook/manager-webpack4@6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4)': + dependencies: + '@babel/core': 7.27.1 + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) + '@storybook/addons': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/core-client': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4)(webpack@4.47.0) + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4) + '@storybook/node-logger': 6.5.9 + '@storybook/theming': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/ui': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/node': 16.18.126 '@types/webpack': 4.41.40 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@4.47.0) case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 core-js: 3.48.0 - css-loader: 3.6.0(webpack@5.105.2) + css-loader: 3.6.0(webpack@4.47.0) express: 4.22.1 - file-loader: 6.2.0(webpack@5.105.2) + file-loader: 6.2.0(webpack@4.47.0) find-up: 5.0.0 fs-extra: 9.1.0 - html-webpack-plugin: 4.5.2(webpack@5.105.2) - node-fetch: 2.6.13(encoding@0.1.13) - pnp-webpack-plugin: 1.6.4(typescript@4.9.5) + html-webpack-plugin: 4.5.2(webpack@4.47.0) + node-fetch: 2.6.7(encoding@0.1.13) + pnp-webpack-plugin: 1.6.4(typescript@4.9.4) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - style-loader: 1.3.0(webpack@5.105.2) + style-loader: 1.3.0(webpack@4.47.0) telejson: 6.0.8 - terser-webpack-plugin: 4.2.3(webpack@5.105.2) + terser-webpack-plugin: 4.2.3(webpack@4.47.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.105.2))(webpack@5.105.2) + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0))(webpack@4.47.0) util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-dev-middleware: 3.7.3(webpack@5.105.2) + webpack: 4.47.0 + webpack-dev-middleware: 3.7.3(webpack@4.47.0) webpack-virtual-modules: 0.2.2 optionalDependencies: - typescript: 4.9.5 + typescript: 4.9.4 transitivePeerDependencies: - - '@swc/core' - encoding - - esbuild - eslint - supports-color - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/manager-webpack5@6.5.9(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + '@storybook/manager-webpack5@6.5.9(@swc/core@1.15.18(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) + '@babel/core': 7.27.1 + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-client': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2) - '@storybook/core-common': 6.5.9(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-client': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.104.1) + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/node-logger': 6.5.9 '@storybook/theming': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/ui': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/node': 16.18.126 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@5.104.1) case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 core-js: 3.48.0 - css-loader: 5.2.7(webpack@5.105.2) + css-loader: 5.2.7(webpack@5.104.1) express: 4.22.1 find-up: 5.0.0 fs-extra: 9.1.0 - html-webpack-plugin: 5.6.6(webpack@5.105.2) - node-fetch: 2.6.13(encoding@0.1.13) + html-webpack-plugin: 5.6.6(webpack@5.104.1) + node-fetch: 2.6.7(encoding@0.1.13) process: 0.11.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - style-loader: 2.0.0(webpack@5.105.2) + style-loader: 2.0.0(webpack@5.104.1) telejson: 6.0.8 - terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack@5.104.1) ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) - webpack-dev-middleware: 4.3.0(webpack@5.105.2) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack-dev-middleware: 4.3.0(webpack@5.104.1) webpack-virtual-modules: 0.4.6 optionalDependencies: typescript: 5.8.3 @@ -33753,42 +37795,43 @@ snapshots: - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/manager-webpack5@6.5.9(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + '@storybook/manager-webpack5@6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) + '@babel/core': 7.27.1 + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-client': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2) - '@storybook/core-common': 6.5.9(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-client': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.104.1) + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/node-logger': 6.5.9 '@storybook/theming': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/ui': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/node': 16.18.126 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.105.2) + babel-loader: 8.4.1(@babel/core@7.27.1)(webpack@5.104.1) case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 core-js: 3.48.0 - css-loader: 5.2.7(webpack@5.105.2) + css-loader: 5.2.7(webpack@5.104.1) express: 4.22.1 find-up: 5.0.0 fs-extra: 9.1.0 - html-webpack-plugin: 5.6.6(webpack@5.105.2) - node-fetch: 2.6.13(encoding@0.1.13) + html-webpack-plugin: 5.6.6(webpack@5.104.1) + node-fetch: 2.6.7(encoding@0.1.13) process: 0.11.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - style-loader: 2.0.0(webpack@5.105.2) + style-loader: 2.0.0(webpack@5.104.1) telejson: 6.0.8 - terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2) + terser-webpack-plugin: 5.3.14(webpack@5.104.1) ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@4.10.0) - webpack-dev-middleware: 4.3.0(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@4.10.0) + webpack-dev-middleware: 4.3.0(webpack@5.104.1) webpack-virtual-modules: 0.4.6 optionalDependencies: typescript: 5.8.3 @@ -33802,14 +37845,15 @@ snapshots: - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/manager@7.6.21': {} + '@storybook/manager@7.6.10': {} - '@storybook/mdx1-csf@0.0.1(@babel/core@7.27.7)': + '@storybook/mdx1-csf@0.0.1(@babel/core@7.27.1)': dependencies: '@babel/generator': 7.29.1 '@babel/parser': 7.29.0 - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) '@babel/types': 7.29.0 '@mdx-js/mdx': 1.6.22 '@types/lodash': 4.17.17 @@ -33824,6 +37868,14 @@ snapshots: '@storybook/mdx2-csf@1.1.0': {} + '@storybook/node-logger@6.3.7': + dependencies: + '@types/npmlog': 4.1.6 + chalk: 4.1.2 + core-js: 3.48.0 + npmlog: 4.1.2 + pretty-hrtime: 1.0.3 + '@storybook/node-logger@6.5.16': dependencies: '@types/npmlog': 4.1.6 @@ -33842,38 +37894,40 @@ snapshots: '@storybook/node-logger@7.4.0': {} - '@storybook/node-logger@7.4.6': {} - - '@storybook/node-logger@7.6.21': {} + '@storybook/node-logger@7.6.10': {} '@storybook/postinstall@6.5.16': dependencies: core-js: 3.48.0 - '@storybook/postinstall@7.4.6': {} + '@storybook/postinstall@6.5.9': + dependencies: + core-js: 3.48.0 + + '@storybook/postinstall@7.4.0': {} - '@storybook/preset-react-webpack@7.4.0(@babel/core@7.27.7)(@types/webpack@5.28.5(webpack-cli@5.1.4))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)': + '@storybook/preset-react-webpack@7.4.0(@babel/core@7.29.0)(@types/webpack@5.28.5(webpack-cli@5.1.4))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.105.2) + '@babel/preset-flow': 7.27.1(@babel/core@7.29.0) + '@babel/preset-react': 7.27.1(@babel/core@7.29.0) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1) '@storybook/core-webpack': 7.4.0(encoding@0.1.13) '@storybook/docs-tools': 7.4.0(encoding@0.1.13) '@storybook/node-logger': 7.4.0 '@storybook/react': 7.4.0(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.105.2) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.104.1) '@types/node': 16.18.126 '@types/semver': 7.7.1 babel-plugin-add-react-displayname: 0.0.5 babel-plugin-react-docgen: 4.2.1 - fs-extra: 11.3.3 + fs-extra: 11.3.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-refresh: 0.11.0 semver: 7.7.4 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 typescript: 5.8.3 transitivePeerDependencies: - '@swc/core' @@ -33889,28 +37943,28 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@7.4.0(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)': + '@storybook/preset-react-webpack@7.4.0(@babel/core@7.29.0)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3(webpack@5.105.2))(webpack-hot-middleware@2.26.1)(webpack@5.105.2) + '@babel/preset-flow': 7.27.1(@babel/core@7.29.0) + '@babel/preset-react': 7.27.1(@babel/core@7.29.0) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3(webpack@5.104.1))(webpack-hot-middleware@2.26.1)(webpack@5.104.1) '@storybook/core-webpack': 7.4.0(encoding@0.1.13) '@storybook/docs-tools': 7.4.0(encoding@0.1.13) '@storybook/node-logger': 7.4.0 '@storybook/react': 7.4.0(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.105.2) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.104.1) '@types/node': 16.18.126 '@types/semver': 7.7.1 babel-plugin-add-react-displayname: 0.0.5 babel-plugin-react-docgen: 4.2.1 - fs-extra: 11.3.3 + fs-extra: 11.3.0 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) react-refresh: 0.11.0 semver: 7.7.4 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 typescript: 5.8.3 transitivePeerDependencies: - '@swc/core' @@ -33926,11 +37980,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3)': + '@storybook/preset-react-webpack@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)': dependencies: - '@storybook/core-webpack': 8.6.15(storybook@8.6.15(prettier@3.5.3)) - '@storybook/react': 8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)) + '@storybook/core-webpack': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)) '@types/semver': 7.7.1 find-up: 5.0.0 magic-string: 0.30.21 @@ -33939,9 +37993,9 @@ snapshots: react-dom: 18.2.0(react@18.2.0) resolve: 1.22.11 semver: 7.7.4 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) tsconfig-paths: 4.2.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -33952,11 +38006,11 @@ snapshots: - uglify-js - webpack-cli - '@storybook/preset-react-webpack@8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4)': + '@storybook/preset-react-webpack@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4)': dependencies: - '@storybook/core-webpack': 8.6.15(storybook@8.6.15(prettier@3.5.3)) - '@storybook/react': 8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.105.2) + '@storybook/core-webpack': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.104.1) '@types/semver': 7.7.1 find-up: 5.0.0 magic-string: 0.30.21 @@ -33965,9 +38019,9 @@ snapshots: react-dom: 18.2.0(react@18.2.0) resolve: 1.22.11 semver: 7.7.4 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) tsconfig-paths: 4.2.0 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -33986,7 +38040,7 @@ snapshots: '@storybook/csf': 0.1.13 '@storybook/global': 5.0.0 '@storybook/types': 7.4.0 - '@types/qs': 6.14.0 + '@types/qs': 6.15.0 dequal: 2.0.3 lodash: 4.17.23 memoizerific: 1.11.3 @@ -33995,15 +38049,15 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 - '@storybook/preview-api@7.4.6': + '@storybook/preview-api@7.6.10': dependencies: - '@storybook/channels': 7.4.6 - '@storybook/client-logger': 7.4.6 - '@storybook/core-events': 7.4.6 + '@storybook/channels': 7.6.10 + '@storybook/client-logger': 7.6.10 + '@storybook/core-events': 7.6.10 '@storybook/csf': 0.1.13 '@storybook/global': 5.0.0 - '@storybook/types': 7.4.6 - '@types/qs': 6.14.0 + '@storybook/types': 7.6.10 + '@types/qs': 6.15.0 dequal: 2.0.3 lodash: 4.17.23 memoizerific: 1.11.3 @@ -34012,26 +38066,9 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 - '@storybook/preview-api@7.6.21': + '@storybook/preview-api@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: - '@storybook/channels': 7.6.21 - '@storybook/client-logger': 7.6.21 - '@storybook/core-events': 7.6.21 - '@storybook/csf': 0.1.13 - '@storybook/global': 5.0.0 - '@storybook/types': 7.6.21 - '@types/qs': 6.14.0 - dequal: 2.0.3 - lodash: 4.17.23 - memoizerific: 1.11.3 - qs: 6.14.2 - synchronous-promise: 2.0.17 - ts-dedent: 2.2.0 - util-deprecate: 1.0.2 - - '@storybook/preview-api@8.6.15(storybook@8.6.15(prettier@3.5.3))': - dependencies: - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) '@storybook/preview-web@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -34054,42 +38091,42 @@ snapshots: unfetch: 4.2.0 util-deprecate: 1.0.2 - '@storybook/preview-web@6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/preview-web@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/addons': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/channel-postmessage': 6.5.16 - '@storybook/client-logger': 6.5.16 - '@storybook/core-events': 6.5.16 + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channel-postmessage': 6.5.9 + '@storybook/client-logger': 6.5.9 + '@storybook/core-events': 6.5.9 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/store': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/store': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) ansi-to-html: 0.6.15 core-js: 3.48.0 global: 4.4.0 lodash: 4.17.23 qs: 6.14.2 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 synchronous-promise: 2.0.17 ts-dedent: 2.2.0 unfetch: 4.2.0 util-deprecate: 1.0.2 - '@storybook/preview-web@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/preview-web@6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addons': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/channel-postmessage': 6.5.9 '@storybook/client-logger': 6.5.9 '@storybook/core-events': 6.5.9 '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/store': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/store': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) ansi-to-html: 0.6.15 core-js: 3.48.0 global: 4.4.0 lodash: 4.17.23 qs: 6.14.2 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) regenerator-runtime: 0.13.11 synchronous-promise: 2.0.17 ts-dedent: 2.2.0 @@ -34098,21 +38135,35 @@ snapshots: '@storybook/preview@7.4.0': {} - '@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@4.9.5)(webpack@5.105.2)': + '@storybook/react-docgen-typescript-plugin@1.0.2-canary.253f8c1.0(typescript@5.8.3)(webpack@4.47.0)': dependencies: debug: 4.4.3(supports-color@8.1.1) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 micromatch: 4.0.8 - react-docgen-typescript: 2.4.0(typescript@4.9.5) + react-docgen-typescript: 2.4.0(typescript@5.8.3) tslib: 2.8.1 - typescript: 4.9.5 - webpack: 5.105.2(webpack-cli@5.1.4) + typescript: 5.8.3 + webpack: 4.47.0 transitivePeerDependencies: - supports-color - '@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)))': + '@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@4.9.4)(webpack@5.104.1)': + dependencies: + debug: 4.4.3(supports-color@8.1.1) + endent: 2.1.0 + find-cache-dir: 3.3.2 + flat-cache: 3.2.0 + micromatch: 4.0.8 + react-docgen-typescript: 2.4.0(typescript@4.9.4) + tslib: 2.8.1 + typescript: 4.9.4 + webpack: 5.104.1(webpack-cli@5.1.4) + transitivePeerDependencies: + - supports-color + + '@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)))': dependencies: debug: 4.4.3(supports-color@8.1.1) endent: 2.1.0 @@ -34122,11 +38173,11 @@ snapshots: react-docgen-typescript: 2.4.0(typescript@5.8.3) tslib: 2.8.1 typescript: 5.8.3 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) transitivePeerDependencies: - supports-color - '@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.105.2)': + '@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.104.1)': dependencies: debug: 4.4.3(supports-color@8.1.1) endent: 2.1.0 @@ -34136,11 +38187,11 @@ snapshots: react-docgen-typescript: 2.4.0(typescript@5.8.3) tslib: 2.8.1 typescript: 5.8.3 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) transitivePeerDependencies: - supports-color - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12))': dependencies: debug: 4.4.3(supports-color@8.1.1) endent: 2.1.0 @@ -34150,11 +38201,11 @@ snapshots: react-docgen-typescript: 2.4.0(typescript@5.8.3) tslib: 2.8.1 typescript: 5.8.3 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12) transitivePeerDependencies: - supports-color - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.105.2)': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.104.1)': dependencies: debug: 4.4.3(supports-color@8.1.1) endent: 2.1.0 @@ -34164,7 +38215,7 @@ snapshots: react-docgen-typescript: 2.4.0(typescript@5.8.3) tslib: 2.8.1 typescript: 5.8.3 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) transitivePeerDependencies: - supports-color @@ -34178,66 +38229,50 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@storybook/react-dom-shim@7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/react-dom-shim@8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))': dependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + storybook: 8.6.14(prettier@3.5.3) - '@storybook/react-dom-shim@7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - - '@storybook/react-dom-shim@8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.15(prettier@3.5.3))': + '@storybook/react-dom-shim@8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3))': dependencies: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) - '@storybook/react-dom-shim@8.6.15(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))': + '@storybook/react-vite@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.41.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(vite@6.0.7(@types/node@22.15.24)(jiti@2.6.1)(sass@1.89.0)(terser@5.46.0)(yaml@2.8.0))': dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - storybook: 8.6.15(prettier@3.5.3) - - '@storybook/react-dom-shim@8.6.15(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.15(prettier@3.5.3))': - dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - storybook: 8.6.15(prettier@3.5.3) - - '@storybook/react-vite@8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.57.1)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3)(vite@6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))': - dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.8.3)(vite@6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) - '@storybook/builder-vite': 8.6.15(storybook@8.6.15(prettier@3.5.3))(vite@6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)) - '@storybook/react': 8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.8.3)(vite@6.0.7(@types/node@22.15.24)(jiti@2.6.1)(sass@1.89.0)(terser@5.46.0)(yaml@2.8.0)) + '@rollup/pluginutils': 5.3.0(rollup@4.41.0) + '@storybook/builder-vite': 8.6.14(storybook@8.6.14(prettier@3.5.3))(vite@6.0.7(@types/node@22.15.24)(jiti@2.6.1)(sass@1.89.0)(terser@5.46.0)(yaml@2.8.0)) + '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) find-up: 5.0.0 magic-string: 0.30.21 react: 19.1.0 react-docgen: 7.1.1 react-dom: 19.1.0(react@19.1.0) resolve: 1.22.11 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) tsconfig-paths: 4.2.0 - vite: 6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2) + vite: 6.0.7(@types/node@22.15.24)(jiti@2.6.1)(sass@1.89.0)(terser@5.46.0)(yaml@2.8.0) optionalDependencies: - '@storybook/test': 8.6.15(storybook@8.6.15(prettier@3.5.3)) + '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.5.3)) transitivePeerDependencies: - rollup - supports-color - typescript - '@storybook/react-webpack5@7.4.0(@babel/core@7.27.7)(@swc/helpers@0.5.19)(@types/webpack@5.28.5(webpack-cli@5.1.4))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)': + '@storybook/react-webpack5@7.4.0(@babel/core@7.29.0)(@swc/helpers@0.5.19)(@types/webpack@5.28.5(webpack-cli@5.1.4))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)': dependencies: '@storybook/builder-webpack5': 7.4.0(@swc/helpers@0.5.19)(encoding@0.1.13)(typescript@5.8.3)(webpack-cli@5.1.4) - '@storybook/preset-react-webpack': 7.4.0(@babel/core@7.27.7)(@types/webpack@5.28.5(webpack-cli@5.1.4))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1) + '@storybook/preset-react-webpack': 7.4.0(@babel/core@7.29.0)(@types/webpack@5.28.5(webpack-cli@5.1.4))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1) '@storybook/react': 7.4.0(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@types/node': 16.18.126 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) optionalDependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 typescript: 5.8.3 transitivePeerDependencies: - '@rspack/core' @@ -34255,16 +38290,16 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/react-webpack5@7.4.0(@babel/core@7.27.7)(@swc/helpers@0.5.19)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)': + '@storybook/react-webpack5@7.4.0(@babel/core@7.29.0)(@swc/helpers@0.5.19)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)': dependencies: '@storybook/builder-webpack5': 7.4.0(@swc/helpers@0.5.19)(encoding@0.1.13)(typescript@5.8.3) - '@storybook/preset-react-webpack': 7.4.0(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1) + '@storybook/preset-react-webpack': 7.4.0(@babel/core@7.29.0)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1) '@storybook/react': 7.4.0(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) '@types/node': 16.18.126 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 typescript: 5.8.3 transitivePeerDependencies: - '@rspack/core' @@ -34282,14 +38317,14 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/react-webpack5@8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3)': + '@storybook/react-webpack5@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)': dependencies: - '@storybook/builder-webpack5': 8.6.15(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3) - '@storybook/preset-react-webpack': 8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3) - '@storybook/react': 8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3) + '@storybook/builder-webpack5': 8.6.14(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) + '@storybook/preset-react-webpack': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) + '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -34301,14 +38336,14 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react-webpack5@8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4)': + '@storybook/react-webpack5@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4)': dependencies: - '@storybook/builder-webpack5': 8.6.15(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4) - '@storybook/preset-react-webpack': 8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4) - '@storybook/react': 8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3) + '@storybook/builder-webpack5': 8.6.14(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4) + '@storybook/preset-react-webpack': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4) + '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -34320,19 +38355,113 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react@6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.9(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/webpack@5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)': + '@storybook/react@6.3.7(@babel/core@7.27.1)(@types/react@18.2.0)(@types/webpack@4.41.40)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.105.2) + '@babel/preset-flow': 7.27.1(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) + '@pmmmwh/react-refresh-webpack-plugin': 0.4.3(@types/webpack@4.41.40)(react-refresh@0.8.3)(webpack-hot-middleware@2.26.1)(webpack@4.47.0) + '@storybook/addons': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core': 6.3.7(@babel/core@7.27.1)(@types/react@18.2.0)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0) + '@storybook/core-common': 6.3.7(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/node-logger': 6.3.7 + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.253f8c1.0(typescript@5.8.3)(webpack@4.47.0) + '@storybook/semver': 7.3.2 + '@types/webpack-env': 1.18.8 + babel-plugin-add-react-displayname: 0.0.5 + babel-plugin-named-asset-import: 0.3.8(@babel/core@7.27.1) + babel-plugin-react-docgen: 4.2.1 + core-js: 3.48.0 + global: 4.4.0 + lodash: 4.17.23 + prop-types: 15.8.1 + react: 18.2.0 + react-dev-utils: 11.0.4 + react-dom: 18.2.0(react@18.2.0) + react-refresh: 0.8.3 + read-pkg-up: 7.0.1 + regenerator-runtime: 0.13.11 + ts-dedent: 2.2.0 + webpack: 4.47.0 + optionalDependencies: + '@babel/core': 7.27.1 + typescript: 5.8.3 + transitivePeerDependencies: + - '@storybook/builder-webpack5' + - '@storybook/manager-webpack5' + - '@types/react' + - '@types/webpack' + - encoding + - eslint + - sockjs-client + - supports-color + - type-fest + - vue-template-compiler + - webpack-cli + - webpack-command + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + + '@storybook/react@6.3.7(@babel/core@7.29.0)(@types/react@18.2.0)(@types/webpack@4.41.40)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)': + dependencies: + '@babel/preset-flow': 7.27.1(@babel/core@7.29.0) + '@babel/preset-react': 7.27.1(@babel/core@7.29.0) + '@pmmmwh/react-refresh-webpack-plugin': 0.4.3(@types/webpack@4.41.40)(react-refresh@0.8.3)(webpack-hot-middleware@2.26.1)(webpack@4.47.0) + '@storybook/addons': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core': 6.3.7(@babel/core@7.29.0)(@types/react@18.2.0)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@4.47.0) + '@storybook/core-common': 6.3.7(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/node-logger': 6.3.7 + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.253f8c1.0(typescript@5.8.3)(webpack@4.47.0) + '@storybook/semver': 7.3.2 + '@types/webpack-env': 1.18.8 + babel-plugin-add-react-displayname: 0.0.5 + babel-plugin-named-asset-import: 0.3.8(@babel/core@7.29.0) + babel-plugin-react-docgen: 4.2.1 + core-js: 3.48.0 + global: 4.4.0 + lodash: 4.17.23 + prop-types: 15.8.1 + react: 18.2.0 + react-dev-utils: 11.0.4 + react-dom: 18.2.0(react@18.2.0) + react-refresh: 0.8.3 + read-pkg-up: 7.0.1 + regenerator-runtime: 0.13.11 + ts-dedent: 2.2.0 + webpack: 4.47.0 + optionalDependencies: + '@babel/core': 7.29.0 + typescript: 5.8.3 + transitivePeerDependencies: + - '@storybook/builder-webpack5' + - '@storybook/manager-webpack5' + - '@types/react' + - '@types/webpack' + - encoding + - eslint + - sockjs-client + - supports-color + - type-fest + - vue-template-compiler + - webpack-cli + - webpack-command + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + + '@storybook/react@6.5.16(@babel/core@7.27.1)(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.18(@swc/helpers@0.5.19))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.9(@swc/core@1.15.18(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/webpack@5.28.5(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)': + dependencies: + '@babel/preset-flow': 7.27.1(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 - '@storybook/core': 6.5.16(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.9(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.105.2) - '@storybook/core-common': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core': 6.5.16(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.18(@swc/helpers@0.5.19))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.9(@swc/core@1.15.18(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.104.1) + '@storybook/core-common': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/node-logger': 6.5.16 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.105.2) + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.104.1) '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/estree': 0.0.51 @@ -34359,11 +38488,11 @@ snapshots: require-from-string: 2.0.2 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) optionalDependencies: - '@babel/core': 7.27.7 - '@storybook/builder-webpack5': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) - '@storybook/manager-webpack5': 6.5.9(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@babel/core': 7.27.1 + '@storybook/builder-webpack5': 6.5.16(@swc/core@1.15.18(@swc/helpers@0.5.19))(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/manager-webpack5': 6.5.9(@swc/core@1.15.18(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' @@ -34380,23 +38509,24 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + - webpack-command - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve - '@storybook/react@6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.9(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@types/webpack@5.28.5(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)': + '@storybook/react@6.5.16(@babel/core@7.27.1)(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/webpack@5.28.5(@swc/core@1.15.18(@swc/helpers@0.5.19)))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.3(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))))(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5(webpack-cli@4.10.0))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.105.2) + '@babel/preset-flow': 7.27.1(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5(@swc/core@1.15.18(@swc/helpers@0.5.19)))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 - '@storybook/core': 6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.9(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.105.2) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core': 6.5.16(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))) + '@storybook/core-common': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/node-logger': 6.5.16 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.105.2) + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))) '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/estree': 0.0.51 @@ -34423,11 +38553,9 @@ snapshots: require-from-string: 2.0.2 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) optionalDependencies: - '@babel/core': 7.27.7 - '@storybook/builder-webpack5': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) - '@storybook/manager-webpack5': 6.5.9(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@babel/core': 7.27.1 typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' @@ -34444,23 +38572,24 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + - webpack-command - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve - '@storybook/react@6.5.16(@babel/core@7.27.7)(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/webpack@5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.19)))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))))(webpack-hot-middleware@2.26.1)': + '@storybook/react@6.5.16(@babel/core@7.29.0)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.3(webpack@5.104.1))(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.19)))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))))(webpack-hot-middleware@2.26.1)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + '@babel/preset-flow': 7.27.1(@babel/core@7.29.0) + '@babel/preset-react': 7.27.1(@babel/core@7.29.0) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3(webpack@5.104.1))(webpack-hot-middleware@2.26.1)(webpack@5.104.1) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 - '@storybook/core': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) - '@storybook/core-common': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core': 6.5.16(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.104.1) + '@storybook/core-common': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/node-logger': 6.5.16 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.104.1) '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/estree': 0.0.51 @@ -34487,9 +38616,9 @@ snapshots: require-from-string: 2.0.2 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' @@ -34506,25 +38635,26 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + - webpack-command - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve - '@storybook/react@6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.3(webpack@5.105.2))(webpack-hot-middleware@2.26.1)': + '@storybook/react@6.5.9(@babel/core@7.27.1)(@storybook/builder-webpack5@6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@types/webpack@5.28.5(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3(webpack@5.105.2))(webpack-hot-middleware@2.26.1)(webpack@5.105.2) - '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/client-logger': 6.5.16 - '@storybook/core': 6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.105.2) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@babel/preset-flow': 7.27.1(@babel/core@7.27.1) + '@babel/preset-react': 7.27.1(@babel/core@7.27.1) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5(webpack-cli@4.10.0))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1) + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.9 + '@storybook/core': 6.5.9(@storybook/builder-webpack5@6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.104.1) + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/docs-tools': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/node-logger': 6.5.16 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.105.2) + '@storybook/docs-tools': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/node-logger': 6.5.9 + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.104.1) '@storybook/semver': 7.3.2 - '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/store': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/estree': 0.0.51 '@types/node': 16.18.126 '@types/webpack-env': 1.18.8 @@ -34549,9 +38679,11 @@ snapshots: require-from-string: 2.0.2 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@4.10.0) optionalDependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 + '@storybook/builder-webpack5': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/manager-webpack5': 6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' @@ -34568,25 +38700,26 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + - webpack-command - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve - '@storybook/react@6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@4.9.5)(webpack-dev-server@5.2.3(webpack@5.105.2))(webpack-hot-middleware@2.26.1)': + '@storybook/react@6.5.9(@babel/core@7.29.0)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@4.9.4)(webpack-dev-server@5.2.3(webpack@5.104.1))(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) - '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3(webpack@5.105.2))(webpack-hot-middleware@2.26.1)(webpack@5.105.2) - '@storybook/addons': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/client-logger': 6.5.16 - '@storybook/core': 6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.105.2) - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) + '@babel/preset-flow': 7.27.1(@babel/core@7.29.0) + '@babel/preset-react': 7.27.1(@babel/core@7.29.0) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.3(webpack@5.104.1))(webpack-hot-middleware@2.26.1)(webpack@5.104.1) + '@storybook/addons': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/client-logger': 6.5.9 + '@storybook/core': 6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4)(webpack@5.104.1) + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4) '@storybook/csf': 0.0.2--canary.4566f4d.1 - '@storybook/docs-tools': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/node-logger': 6.5.16 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@4.9.5)(webpack@5.105.2) + '@storybook/docs-tools': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/node-logger': 6.5.9 + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@4.9.4)(webpack@5.104.1) '@storybook/semver': 7.3.2 - '@storybook/store': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/store': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/estree': 0.0.51 '@types/node': 16.18.126 '@types/webpack-env': 1.18.8 @@ -34611,10 +38744,10 @@ snapshots: require-from-string: 2.0.2 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: - '@babel/core': 7.27.7 - typescript: 4.9.5 + '@babel/core': 7.29.0 + typescript: 4.9.4 transitivePeerDependencies: - '@storybook/mdx2-csf' - '@swc/core' @@ -34630,6 +38763,7 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + - webpack-command - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve @@ -34696,97 +38830,50 @@ snapshots: - encoding - supports-color - '@storybook/react@7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/react@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)': dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/core-client': 7.4.6 - '@storybook/docs-tools': 7.4.6(encoding@0.1.13) + '@storybook/components': 8.6.14(storybook@8.6.14(prettier@3.5.3)) '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.4.6 - '@storybook/react-dom-shim': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/types': 7.4.6 - '@types/escodegen': 0.0.6 - '@types/estree': 0.0.51 - '@types/node': 16.18.126 - acorn: 7.4.1 - acorn-jsx: 5.3.2(acorn@7.4.1) - acorn-walk: 7.2.0 - escodegen: 2.1.0 - html-tags: 3.3.1 - lodash: 4.17.23 - prop-types: 15.8.1 + '@storybook/manager-api': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/preview-api': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/react-dom-shim': 8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) + '@storybook/theming': 8.6.14(storybook@8.6.14(prettier@3.5.3)) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-element-to-jsx-string: 15.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - ts-dedent: 2.2.0 - type-fest: 2.19.0 - util-deprecate: 1.0.2 + storybook: 8.6.14(prettier@3.5.3) optionalDependencies: + '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.5.3)) typescript: 5.8.3 - transitivePeerDependencies: - - encoding - - supports-color - '@storybook/react@7.4.6(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@storybook/react@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)': dependencies: - '@storybook/client-logger': 7.4.6 - '@storybook/core-client': 7.4.6 - '@storybook/docs-tools': 7.4.6(encoding@0.1.13) + '@storybook/components': 8.6.14(storybook@8.6.14(prettier@3.5.3)) '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.4.6 - '@storybook/react-dom-shim': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/types': 7.4.6 - '@types/escodegen': 0.0.6 - '@types/estree': 0.0.51 - '@types/node': 16.18.126 - acorn: 7.4.1 - acorn-jsx: 5.3.2(acorn@7.4.1) - acorn-walk: 7.2.0 - escodegen: 2.1.0 - html-tags: 3.3.1 - lodash: 4.17.23 - prop-types: 15.8.1 + '@storybook/manager-api': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/preview-api': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/react-dom-shim': 8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3)) + '@storybook/theming': 8.6.14(storybook@8.6.14(prettier@3.5.3)) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-element-to-jsx-string: 15.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - ts-dedent: 2.2.0 - type-fest: 2.19.0 - util-deprecate: 1.0.2 + storybook: 8.6.14(prettier@3.5.3) optionalDependencies: + '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.5.3)) typescript: 5.8.3 - transitivePeerDependencies: - - encoding - - supports-color - '@storybook/react@8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3)': + '@storybook/router@6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/components': 8.6.15(storybook@8.6.15(prettier@3.5.3)) - '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.6.15(storybook@8.6.15(prettier@3.5.3)) - '@storybook/preview-api': 8.6.15(storybook@8.6.15(prettier@3.5.3)) - '@storybook/react-dom-shim': 8.6.15(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.15(prettier@3.5.3)) - '@storybook/theming': 8.6.15(storybook@8.6.15(prettier@3.5.3)) + '@reach/router': 1.3.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.3.7 + '@types/reach__router': 1.3.15 + core-js: 3.48.0 + fast-deep-equal: 3.1.3 + global: 4.4.0 + lodash: 4.17.23 + memoizerific: 1.11.3 + qs: 6.14.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - storybook: 8.6.15(prettier@3.5.3) - optionalDependencies: - '@storybook/test': 8.6.15(storybook@8.6.15(prettier@3.5.3)) - typescript: 5.8.3 - - '@storybook/react@8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3)': - dependencies: - '@storybook/components': 8.6.15(storybook@8.6.15(prettier@3.5.3)) - '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.6.15(storybook@8.6.15(prettier@3.5.3)) - '@storybook/preview-api': 8.6.15(storybook@8.6.15(prettier@3.5.3)) - '@storybook/react-dom-shim': 8.6.15(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.15(prettier@3.5.3)) - '@storybook/theming': 8.6.15(storybook@8.6.15(prettier@3.5.3)) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - storybook: 8.6.15(prettier@3.5.3) - optionalDependencies: - '@storybook/test': 8.6.15(storybook@8.6.15(prettier@3.5.3)) - typescript: 5.8.3 + ts-dedent: 2.2.0 '@storybook/router@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -34798,37 +38885,37 @@ snapshots: react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 - '@storybook/router@6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/router@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/client-logger': 6.5.16 + '@storybook/client-logger': 6.5.9 core-js: 3.48.0 memoizerific: 1.11.3 qs: 6.14.2 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 - '@storybook/router@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/router@6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/client-logger': 6.5.9 core-js: 3.48.0 memoizerific: 1.11.3 qs: 6.14.2 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) regenerator-runtime: 0.13.11 - '@storybook/router@7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/router@7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/client-logger': 7.4.6 + '@storybook/client-logger': 7.4.0 memoizerific: 1.11.3 qs: 6.14.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/router@7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/router@7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@storybook/client-logger': 7.4.6 + '@storybook/client-logger': 7.4.0 memoizerific: 1.11.3 qs: 6.14.2 react: 19.1.0 @@ -34854,29 +38941,24 @@ snapshots: react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 - '@storybook/store@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/source-loader@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/client-logger': 6.5.16 - '@storybook/core-events': 6.5.16 + '@storybook/addons': 6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.9 '@storybook/csf': 0.0.2--canary.4566f4d.1 core-js: 3.48.0 - fast-deep-equal: 3.1.3 + estraverse: 5.3.0 global: 4.4.0 + loader-utils: 2.0.4 lodash: 4.17.23 - memoizerific: 1.11.3 + prettier: 2.3.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 - slash: 3.0.0 - stable: 0.1.8 - synchronous-promise: 2.0.17 - ts-dedent: 2.2.0 - util-deprecate: 1.0.2 - '@storybook/store@6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/store@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/addons': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 @@ -34885,8 +38967,8 @@ snapshots: global: 4.4.0 lodash: 4.17.23 memoizerific: 1.11.3 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 slash: 3.0.0 stable: 0.1.8 @@ -34914,37 +38996,30 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 - '@storybook/telemetry@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/store@6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@storybook/client-logger': 6.5.16 - '@storybook/core-common': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) - chalk: 4.1.2 + '@storybook/addons': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/client-logger': 6.5.9 + '@storybook/core-events': 6.5.9 + '@storybook/csf': 0.0.2--canary.4566f4d.1 core-js: 3.48.0 - detect-package-manager: 2.0.1 - fetch-retry: 5.0.6 - fs-extra: 9.1.0 + fast-deep-equal: 3.1.3 global: 4.4.0 - isomorphic-unfetch: 3.1.0(encoding@0.1.13) - nanoid: 3.3.11 - read-pkg-up: 7.0.1 + lodash: 4.17.23 + memoizerific: 1.11.3 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) regenerator-runtime: 0.13.11 - transitivePeerDependencies: - - '@swc/core' - - encoding - - esbuild - - eslint - - react - - react-dom - - supports-color - - typescript - - uglify-js - - vue-template-compiler - - webpack-cli + slash: 3.0.0 + stable: 0.1.8 + synchronous-promise: 2.0.17 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 - '@storybook/telemetry@6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + '@storybook/telemetry@6.5.16(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: '@storybook/client-logger': 6.5.16 - '@storybook/core-common': 6.5.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-common': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) chalk: 4.1.2 core-js: 3.48.0 detect-package-manager: 2.0.1 @@ -34956,22 +39031,20 @@ snapshots: read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 transitivePeerDependencies: - - '@swc/core' - encoding - - esbuild - eslint - react - react-dom - supports-color - typescript - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/telemetry@6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/telemetry@6.5.16(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': dependencies: '@storybook/client-logger': 6.5.16 - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-common': 6.5.16(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) chalk: 4.1.2 core-js: 3.48.0 detect-package-manager: 2.0.1 @@ -34983,22 +39056,20 @@ snapshots: read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 transitivePeerDependencies: - - '@swc/core' - encoding - - esbuild - eslint - react - react-dom - supports-color - typescript - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/telemetry@6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + '@storybook/telemetry@6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': dependencies: - '@storybook/client-logger': 6.5.16 - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/client-logger': 6.5.9 + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) chalk: 4.1.2 core-js: 3.48.0 detect-package-manager: 2.0.1 @@ -35010,22 +39081,20 @@ snapshots: read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 transitivePeerDependencies: - - '@swc/core' - encoding - - esbuild - eslint - react - react-dom - supports-color - typescript - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/telemetry@6.5.16(encoding@0.1.13)(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)': + '@storybook/telemetry@6.5.9(encoding@0.1.13)(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4)': dependencies: - '@storybook/client-logger': 6.5.16 - '@storybook/core-common': 6.5.16(eslint@9.39.3(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) + '@storybook/client-logger': 6.5.9 + '@storybook/core-common': 6.5.9(eslint@9.39.4(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.4) chalk: 4.1.2 core-js: 3.48.0 detect-package-manager: 2.0.1 @@ -35037,53 +39106,59 @@ snapshots: read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 transitivePeerDependencies: - - '@swc/core' - encoding - - esbuild - eslint - react - react-dom - supports-color - typescript - - uglify-js - vue-template-compiler - webpack-cli + - webpack-command - '@storybook/telemetry@7.6.21(encoding@0.1.13)': + '@storybook/telemetry@7.6.10(encoding@0.1.13)': dependencies: - '@storybook/client-logger': 7.6.21 - '@storybook/core-common': 7.6.21(encoding@0.1.13) - '@storybook/csf-tools': 7.6.21 + '@storybook/client-logger': 7.6.10 + '@storybook/core-common': 7.6.10(encoding@0.1.13) + '@storybook/csf-tools': 7.6.10 chalk: 4.1.2 detect-package-manager: 2.0.1 fetch-retry: 5.0.6 - fs-extra: 11.3.3 + fs-extra: 11.3.0 read-pkg-up: 7.0.1 transitivePeerDependencies: - encoding - supports-color - '@storybook/test@8.6.14(storybook@8.6.15(prettier@3.5.3))': + '@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.6.14(storybook@8.6.15(prettier@3.5.3)) + '@storybook/instrumenter': 8.6.14(storybook@8.6.14(prettier@3.5.3)) '@testing-library/dom': 10.4.0 '@testing-library/jest-dom': 6.5.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) '@vitest/expect': 2.0.5 '@vitest/spy': 2.0.5 - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) - '@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3))': + '@storybook/theming@6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.6.15(storybook@8.6.15(prettier@3.5.3)) - '@testing-library/dom': 10.4.0 - '@testing-library/jest-dom': 6.5.0 - '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) - '@vitest/expect': 2.0.5 - '@vitest/spy': 2.0.5 - storybook: 8.6.15(prettier@3.5.3) + '@emotion/core': 10.3.1(react@18.2.0) + '@emotion/is-prop-valid': 0.8.8 + '@emotion/styled': 10.3.0(@emotion/core@10.3.1(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.3.7 + core-js: 3.48.0 + deep-object-diff: 1.1.9 + emotion-theming: 10.3.0(@emotion/core@10.3.1(react@18.2.0))(react@18.2.0) + global: 4.4.0 + memoizerific: 1.11.3 + polished: 4.3.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + resolve-from: 5.0.0 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color '@storybook/theming@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -35094,45 +39169,49 @@ snapshots: react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 - '@storybook/theming@6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/theming@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/client-logger': 6.5.16 + '@storybook/client-logger': 6.5.9 core-js: 3.48.0 memoizerific: 1.11.3 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 - '@storybook/theming@6.5.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/theming@6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/client-logger': 6.5.9 core-js: 3.48.0 memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) regenerator-runtime: 0.13.11 - '@storybook/theming@7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/theming@7.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.2.0) - '@storybook/client-logger': 7.4.6 + '@storybook/client-logger': 7.4.0 '@storybook/global': 5.0.0 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/theming@7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/theming@7.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) - '@storybook/client-logger': 7.4.6 + '@storybook/client-logger': 7.4.0 '@storybook/global': 5.0.0 memoizerific: 1.11.3 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@storybook/theming@8.6.15(storybook@8.6.15(prettier@3.5.3))': + '@storybook/theming@8.6.13(storybook@8.6.13(prettier@3.5.3))': + dependencies: + storybook: 8.6.13(prettier@3.5.3) + + '@storybook/theming@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: - storybook: 8.6.15(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) '@storybook/types@7.4.0': dependencies: @@ -35142,55 +39221,66 @@ snapshots: '@types/react': 16.14.69 file-system-cache: 2.3.0 - '@storybook/types@7.4.6': + '@storybook/types@7.6.10': dependencies: - '@storybook/channels': 7.4.6 + '@storybook/channels': 7.6.10 '@types/babel__core': 7.20.5 '@types/express': 4.17.25 file-system-cache: 2.3.0 - '@storybook/types@7.6.21': + '@storybook/ui@6.3.7(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/channels': 7.6.21 - '@types/babel__core': 7.20.5 - '@types/express': 4.17.25 - file-system-cache: 2.3.0 - - '@storybook/ui@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/channels': 6.5.16 - '@storybook/client-logger': 6.5.16 - '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-events': 6.5.16 - '@storybook/router': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@emotion/core': 10.3.1(react@18.2.0) + '@storybook/addons': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channels': 6.3.7 + '@storybook/client-logger': 6.3.7 + '@storybook/components': 6.3.7(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 6.3.7 + '@storybook/router': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/semver': 7.3.2 - '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 6.3.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/markdown-to-jsx': 6.11.3 + copy-to-clipboard: 3.3.3 core-js: 3.48.0 + core-js-pure: 3.48.0 + downshift: 6.1.12(react@18.2.0) + emotion-theming: 10.3.0(@emotion/core@10.3.1(react@18.2.0))(react@18.2.0) + fuse.js: 3.6.1 + global: 4.4.0 + lodash: 4.17.23 + markdown-to-jsx: 6.11.4(react@18.2.0) memoizerific: 1.11.3 + polished: 4.3.1 qs: 6.14.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + react-draggable: 4.5.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-helmet-async: 1.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-sizeme: 3.0.2 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 + store2: 2.14.4 + transitivePeerDependencies: + - '@types/react' + - supports-color - '@storybook/ui@6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/ui@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/addons': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/api': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/channels': 6.5.16 '@storybook/client-logger': 6.5.16 - '@storybook/components': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/core-events': 6.5.16 - '@storybook/router': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/router': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/semver': 7.3.2 - '@storybook/theming': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) core-js: 3.48.0 memoizerific: 1.11.3 qs: 6.14.2 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) regenerator-runtime: 0.13.11 resolve-from: 5.0.0 @@ -35213,20 +39303,39 @@ snapshots: regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - '@swagger-api/apidom-ast@1.5.1': + '@storybook/ui@6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@storybook/addons': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/api': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/channels': 6.5.9 + '@storybook/client-logger': 6.5.9 + '@storybook/components': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/core-events': 6.5.9 + '@storybook/router': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/semver': 7.3.2 + '@storybook/theming': 6.5.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + core-js: 3.48.0 + memoizerific: 1.11.3 + qs: 6.14.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + regenerator-runtime: 0.13.11 + resolve-from: 5.0.0 + + '@swagger-api/apidom-ast@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-error': 1.5.1 + '@swagger-api/apidom-error': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) unraw: 3.0.0 - '@swagger-api/apidom-core@1.5.1': + '@swagger-api/apidom-core@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-ast': 1.5.1 - '@swagger-api/apidom-error': 1.5.1 + '@swagger-api/apidom-ast': 1.6.0 + '@swagger-api/apidom-error': 1.6.0 '@types/ramda': 0.30.2 minim: 0.23.8 ramda: 0.30.1 @@ -35234,246 +39343,260 @@ snapshots: short-unique-id: 5.3.2 ts-mixer: 6.0.4 - '@swagger-api/apidom-error@1.5.1': + '@swagger-api/apidom-error@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-json-pointer@1.5.1': + '@swagger-api/apidom-json-pointer@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-error': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-error': 1.6.0 '@swaggerexpert/json-pointer': 2.10.2 - '@swagger-api/apidom-ns-api-design-systems@1.5.1': + '@swagger-api/apidom-ns-api-design-systems@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-error': 1.5.1 - '@swagger-api/apidom-ns-openapi-3-1': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-error': 1.6.0 + '@swagger-api/apidom-ns-openapi-3-1': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-arazzo-1@1.5.1': + '@swagger-api/apidom-ns-arazzo-1@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-json-schema-2020-12': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-json-schema-2020-12': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-asyncapi-2@1.5.1': + '@swagger-api/apidom-ns-asyncapi-2@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-json-schema-draft-7': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-json-schema-draft-7': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-asyncapi-3@1.5.1': + '@swagger-api/apidom-ns-asyncapi-3@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-asyncapi-2': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-asyncapi-2': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-json-schema-2019-09@1.5.1': + '@swagger-api/apidom-ns-json-schema-2019-09@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-error': 1.5.1 - '@swagger-api/apidom-ns-json-schema-draft-7': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-error': 1.6.0 + '@swagger-api/apidom-ns-json-schema-draft-7': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-2020-12@1.5.1': + '@swagger-api/apidom-ns-json-schema-2020-12@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-error': 1.5.1 - '@swagger-api/apidom-ns-json-schema-2019-09': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-error': 1.6.0 + '@swagger-api/apidom-ns-json-schema-2019-09': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-draft-4@1.5.1': + '@swagger-api/apidom-ns-json-schema-draft-4@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-ast': 1.5.1 - '@swagger-api/apidom-core': 1.5.1 + '@swagger-api/apidom-ast': 1.6.0 + '@swagger-api/apidom-core': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-draft-6@1.5.1': + '@swagger-api/apidom-ns-json-schema-draft-6@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-error': 1.5.1 - '@swagger-api/apidom-ns-json-schema-draft-4': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-error': 1.6.0 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-draft-7@1.5.1': + '@swagger-api/apidom-ns-json-schema-draft-7@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-error': 1.5.1 - '@swagger-api/apidom-ns-json-schema-draft-6': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-error': 1.6.0 + '@swagger-api/apidom-ns-json-schema-draft-6': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-openapi-2@1.5.1': + '@swagger-api/apidom-ns-openapi-2@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-error': 1.5.1 - '@swagger-api/apidom-ns-json-schema-draft-4': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-error': 1.6.0 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-openapi-3-0@1.5.1': + '@swagger-api/apidom-ns-openapi-3-0@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-error': 1.5.1 - '@swagger-api/apidom-ns-json-schema-draft-4': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-error': 1.6.0 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-openapi-3-1@1.5.1': + '@swagger-api/apidom-ns-openapi-3-1@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-ast': 1.5.1 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-json-pointer': 1.5.1 - '@swagger-api/apidom-ns-json-schema-2020-12': 1.5.1 - '@swagger-api/apidom-ns-openapi-3-0': 1.5.1 + '@swagger-api/apidom-ast': 1.6.0 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-json-pointer': 1.6.0 + '@swagger-api/apidom-ns-json-schema-2020-12': 1.6.0 + '@swagger-api/apidom-ns-openapi-3-0': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.5.1': + '@swagger-api/apidom-ns-openapi-3-2@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-api-design-systems': 1.5.1 - '@swagger-api/apidom-parser-adapter-json': 1.5.1 + '@swagger-api/apidom-ast': 1.6.0 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-json-pointer': 1.6.0 + '@swagger-api/apidom-ns-json-schema-2020-12': 1.6.0 + '@swagger-api/apidom-ns-openapi-3-0': 1.6.0 + '@swagger-api/apidom-ns-openapi-3-1': 1.6.0 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + ts-mixer: 6.0.4 + + '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.6.0': + dependencies: + '@babel/runtime-corejs3': 7.29.0 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-api-design-systems': 1.6.0 + '@swagger-api/apidom-parser-adapter-json': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.5.1': + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-api-design-systems': 1.5.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-api-design-systems': 1.6.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.5.1': + '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-arazzo-1': 1.5.1 - '@swagger-api/apidom-parser-adapter-json': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-arazzo-1': 1.6.0 + '@swagger-api/apidom-parser-adapter-json': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.5.1': + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-arazzo-1': 1.5.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-arazzo-1': 1.6.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.5.1': + '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-asyncapi-2': 1.5.1 - '@swagger-api/apidom-parser-adapter-json': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-asyncapi-2': 1.6.0 + '@swagger-api/apidom-parser-adapter-json': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.5.1': + '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-asyncapi-3': 1.5.1 - '@swagger-api/apidom-parser-adapter-json': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-asyncapi-3': 1.6.0 + '@swagger-api/apidom-parser-adapter-json': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.5.1': + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-asyncapi-2': 1.5.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-asyncapi-2': 1.6.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.5.1': + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-asyncapi-3': 1.5.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-asyncapi-3': 1.6.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-json@1.5.1': + '@swagger-api/apidom-parser-adapter-json@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-ast': 1.5.1 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-error': 1.5.1 + '@swagger-api/apidom-ast': 1.6.0 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-error': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) @@ -35482,78 +39605,100 @@ snapshots: web-tree-sitter: 0.24.5 optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-2@1.5.1': + '@swagger-api/apidom-parser-adapter-openapi-json-2@1.6.0': + dependencies: + '@babel/runtime-corejs3': 7.29.0 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-openapi-2': 1.6.0 + '@swagger-api/apidom-parser-adapter-json': 1.6.0 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.6.0': + dependencies: + '@babel/runtime-corejs3': 7.29.0 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-openapi-3-0': 1.6.0 + '@swagger-api/apidom-parser-adapter-json': 1.6.0 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-openapi-2': 1.5.1 - '@swagger-api/apidom-parser-adapter-json': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-openapi-3-1': 1.6.0 + '@swagger-api/apidom-parser-adapter-json': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.5.1': + '@swagger-api/apidom-parser-adapter-openapi-json-3-2@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-openapi-3-0': 1.5.1 - '@swagger-api/apidom-parser-adapter-json': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-openapi-3-2': 1.6.0 + '@swagger-api/apidom-parser-adapter-json': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.5.1': + '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-openapi-3-1': 1.5.1 - '@swagger-api/apidom-parser-adapter-json': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-openapi-2': 1.6.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.5.1': + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-openapi-2': 1.5.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-openapi-3-0': 1.6.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.5.1': + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-openapi-3-0': 1.5.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-openapi-3-1': 1.6.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.5.1': + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-2@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-ns-openapi-3-1': 1.5.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ns-openapi-3-2': 1.6.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-yaml-1-2@1.5.1': + '@swagger-api/apidom-parser-adapter-yaml-1-2@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-ast': 1.5.1 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-error': 1.5.1 + '@swagger-api/apidom-ast': 1.6.0 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-error': 1.6.0 '@tree-sitter-grammars/tree-sitter-yaml': 0.7.1(tree-sitter@0.22.4) '@types/ramda': 0.30.2 ramda: 0.30.1 @@ -35562,39 +39707,42 @@ snapshots: web-tree-sitter: 0.24.5 optional: true - '@swagger-api/apidom-reference@1.5.1': + '@swagger-api/apidom-reference@1.6.0': dependencies: '@babel/runtime-corejs3': 7.29.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-error': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-error': 1.6.0 '@types/ramda': 0.30.2 axios: 1.13.5 - minimatch: 10.2.2 + minimatch: 10.2.3 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optionalDependencies: - '@swagger-api/apidom-json-pointer': 1.5.1 - '@swagger-api/apidom-ns-arazzo-1': 1.5.1 - '@swagger-api/apidom-ns-asyncapi-2': 1.5.1 - '@swagger-api/apidom-ns-openapi-2': 1.5.1 - '@swagger-api/apidom-ns-openapi-3-0': 1.5.1 - '@swagger-api/apidom-ns-openapi-3-1': 1.5.1 - '@swagger-api/apidom-parser-adapter-api-design-systems-json': 1.5.1 - '@swagger-api/apidom-parser-adapter-api-design-systems-yaml': 1.5.1 - '@swagger-api/apidom-parser-adapter-arazzo-json-1': 1.5.1 - '@swagger-api/apidom-parser-adapter-arazzo-yaml-1': 1.5.1 - '@swagger-api/apidom-parser-adapter-asyncapi-json-2': 1.5.1 - '@swagger-api/apidom-parser-adapter-asyncapi-json-3': 1.5.1 - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2': 1.5.1 - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3': 1.5.1 - '@swagger-api/apidom-parser-adapter-json': 1.5.1 - '@swagger-api/apidom-parser-adapter-openapi-json-2': 1.5.1 - '@swagger-api/apidom-parser-adapter-openapi-json-3-0': 1.5.1 - '@swagger-api/apidom-parser-adapter-openapi-json-3-1': 1.5.1 - '@swagger-api/apidom-parser-adapter-openapi-yaml-2': 1.5.1 - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0': 1.5.1 - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1': 1.5.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.5.1 + '@swagger-api/apidom-json-pointer': 1.6.0 + '@swagger-api/apidom-ns-arazzo-1': 1.6.0 + '@swagger-api/apidom-ns-asyncapi-2': 1.6.0 + '@swagger-api/apidom-ns-openapi-2': 1.6.0 + '@swagger-api/apidom-ns-openapi-3-0': 1.6.0 + '@swagger-api/apidom-ns-openapi-3-1': 1.6.0 + '@swagger-api/apidom-ns-openapi-3-2': 1.6.0 + '@swagger-api/apidom-parser-adapter-api-design-systems-json': 1.6.0 + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml': 1.6.0 + '@swagger-api/apidom-parser-adapter-arazzo-json-1': 1.6.0 + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1': 1.6.0 + '@swagger-api/apidom-parser-adapter-asyncapi-json-2': 1.6.0 + '@swagger-api/apidom-parser-adapter-asyncapi-json-3': 1.6.0 + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2': 1.6.0 + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3': 1.6.0 + '@swagger-api/apidom-parser-adapter-json': 1.6.0 + '@swagger-api/apidom-parser-adapter-openapi-json-2': 1.6.0 + '@swagger-api/apidom-parser-adapter-openapi-json-3-0': 1.6.0 + '@swagger-api/apidom-parser-adapter-openapi-json-3-1': 1.6.0 + '@swagger-api/apidom-parser-adapter-openapi-json-3-2': 1.6.0 + '@swagger-api/apidom-parser-adapter-openapi-yaml-2': 1.6.0 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0': 1.6.0 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1': 1.6.0 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-2': 1.6.0 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 transitivePeerDependencies: - debug @@ -35606,51 +39754,51 @@ snapshots: dependencies: apg-lite: 1.0.5 - '@swc/core-darwin-arm64@1.15.11': + '@swc/core-darwin-arm64@1.15.18': optional: true - '@swc/core-darwin-x64@1.15.11': + '@swc/core-darwin-x64@1.15.18': optional: true - '@swc/core-linux-arm-gnueabihf@1.15.11': + '@swc/core-linux-arm-gnueabihf@1.15.18': optional: true - '@swc/core-linux-arm64-gnu@1.15.11': + '@swc/core-linux-arm64-gnu@1.15.18': optional: true - '@swc/core-linux-arm64-musl@1.15.11': + '@swc/core-linux-arm64-musl@1.15.18': optional: true - '@swc/core-linux-x64-gnu@1.15.11': + '@swc/core-linux-x64-gnu@1.15.18': optional: true - '@swc/core-linux-x64-musl@1.15.11': + '@swc/core-linux-x64-musl@1.15.18': optional: true - '@swc/core-win32-arm64-msvc@1.15.11': + '@swc/core-win32-arm64-msvc@1.15.18': optional: true - '@swc/core-win32-ia32-msvc@1.15.11': + '@swc/core-win32-ia32-msvc@1.15.18': optional: true - '@swc/core-win32-x64-msvc@1.15.11': + '@swc/core-win32-x64-msvc@1.15.18': optional: true - '@swc/core@1.15.11(@swc/helpers@0.5.19)': + '@swc/core@1.15.18(@swc/helpers@0.5.19)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.25 optionalDependencies: - '@swc/core-darwin-arm64': 1.15.11 - '@swc/core-darwin-x64': 1.15.11 - '@swc/core-linux-arm-gnueabihf': 1.15.11 - '@swc/core-linux-arm64-gnu': 1.15.11 - '@swc/core-linux-arm64-musl': 1.15.11 - '@swc/core-linux-x64-gnu': 1.15.11 - '@swc/core-linux-x64-musl': 1.15.11 - '@swc/core-win32-arm64-msvc': 1.15.11 - '@swc/core-win32-ia32-msvc': 1.15.11 - '@swc/core-win32-x64-msvc': 1.15.11 + '@swc/core-darwin-arm64': 1.15.18 + '@swc/core-darwin-x64': 1.15.18 + '@swc/core-linux-arm-gnueabihf': 1.15.18 + '@swc/core-linux-arm64-gnu': 1.15.18 + '@swc/core-linux-arm64-musl': 1.15.18 + '@swc/core-linux-x64-gnu': 1.15.18 + '@swc/core-linux-x64-musl': 1.15.18 + '@swc/core-win32-arm64-msvc': 1.15.18 + '@swc/core-win32-ia32-msvc': 1.15.18 + '@swc/core-win32-x64-msvc': 1.15.18 '@swc/helpers': 0.5.19 '@swc/counter@0.1.3': {} @@ -35677,25 +39825,24 @@ snapshots: '@tanstack/query-core@5.77.1': {} - '@tanstack/query-core@5.90.20': {} - '@tanstack/query-persist-client-core@4.27.0': dependencies: '@tanstack/query-core': 4.27.0 + '@tanstack/query-persist-client-core@5.77.1': + dependencies: + '@tanstack/query-core': 5.77.1 + '@tanstack/react-query-persist-client@4.28.0(@tanstack/react-query@4.28.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': dependencies: '@tanstack/query-persist-client-core': 4.27.0 '@tanstack/react-query': 4.28.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tanstack/react-query@4.0.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@tanstack/react-query-persist-client@5.77.1(@tanstack/react-query@5.77.1(react@18.2.0))(react@18.2.0)': dependencies: - '@tanstack/query-core': 4.43.0 - '@types/use-sync-external-store': 0.0.3 + '@tanstack/query-persist-client-core': 5.77.1 + '@tanstack/react-query': 5.77.1(react@18.2.0) react: 18.2.0 - use-sync-external-store: 1.6.0(react@18.2.0) - optionalDependencies: - react-dom: 18.2.0(react@18.2.0) '@tanstack/react-query@4.0.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: @@ -35729,19 +39876,19 @@ snapshots: '@tanstack/query-core': 5.77.1 react: 18.2.0 - '@tanstack/react-virtual@3.13.18(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@tanstack/react-virtual@3.13.21(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@tanstack/virtual-core': 3.13.18 + '@tanstack/virtual-core': 3.13.21 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@tanstack/react-virtual@3.13.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-virtual@3.13.21(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@tanstack/virtual-core': 3.13.18 + '@tanstack/virtual-core': 3.13.21 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@tanstack/virtual-core@3.13.18': {} + '@tanstack/virtual-core@3.13.21': {} '@testing-library/dom@10.4.0': dependencies: @@ -35754,17 +39901,6 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/dom@10.4.1': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/runtime': 7.28.6 - '@types/aria-query': 5.0.4 - aria-query: 5.3.0 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - picocolors: 1.1.1 - pretty-format: 27.5.1 - '@testing-library/jest-dom@6.5.0': dependencies: '@adobe/css-tools': 4.4.4 @@ -35775,20 +39911,20 @@ snapshots: lodash: 4.17.23 redent: 3.0.0 - '@testing-library/jest-dom@6.6.4': + '@testing-library/jest-dom@6.6.3': dependencies: '@adobe/css-tools': 4.4.4 aria-query: 5.3.2 + chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 lodash: 4.17.23 - picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@testing-library/react@16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.28.6 - '@testing-library/dom': 10.4.1 + '@testing-library/dom': 10.4.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) optionalDependencies: @@ -35828,33 +39964,36 @@ snapshots: dependencies: '@textlint/ast-node-types': 15.5.2 - '@tokenizer/token@0.3.0': {} + '@tokenizer/inflate@0.4.1': + dependencies: + debug: 4.4.3(supports-color@8.1.1) + token-types: 6.1.2 + transitivePeerDependencies: + - supports-color - '@tootallnate/once@1.1.2': {} + '@tokenizer/token@0.3.0': {} - '@tootallnate/once@2.0.0': {} + '@tootallnate/once@3.0.1': {} '@tree-sitter-grammars/tree-sitter-yaml@0.7.1(tree-sitter@0.22.4)': dependencies: - node-addon-api: 8.5.0 + node-addon-api: 8.6.0 node-gyp-build: 4.8.4 optionalDependencies: tree-sitter: 0.22.4 optional: true - '@trysound/sax@0.2.0': {} - '@ts-morph/common@0.23.0': dependencies: fast-glob: 3.3.3 - minimatch: 9.0.6 + minimatch: 9.0.7 mkdirp: 3.0.1 path-browserify: 1.0.1 '@ts-morph/common@0.27.0': dependencies: fast-glob: 3.3.3 - minimatch: 10.2.2 + minimatch: 10.2.3 path-browserify: 1.0.1 '@tsconfig/node10@1.0.12': {} @@ -35865,6 +40004,23 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@twbs/fantasticon@3.0.0': + dependencies: + case: 1.6.3 + commander: 11.1.0 + figures: 3.2.0 + glob: 7.2.3 + handlebars: 4.7.8 + picocolors: 1.1.1 + slugify: 1.6.6 + svg2ttf: 6.0.3 + svgicons2svgfont: 12.0.0 + ttf2eot: 3.1.0 + ttf2woff: 3.0.0 + ttf2woff2: 5.0.0 + transitivePeerDependencies: + - supports-color + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 @@ -35898,21 +40054,21 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 + + '@types/braces@3.0.5': {} '@types/byline@4.2.36': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 - '@types/chai@4.3.20': {} + '@types/chai@4.3.9': {} - '@types/classnames@2.3.4': - dependencies: - classnames: 2.5.1 + '@types/classnames@2.2.9': {} '@types/codemirror@0.0.90': dependencies: @@ -35922,20 +40078,26 @@ snapshots: dependencies: '@types/tern': 0.23.9 + '@types/color-convert@2.0.4': + dependencies: + '@types/color-name': 1.1.5 + + '@types/color-name@1.1.5': {} + '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.19.8 - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/connect@3.4.38': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/cross-spawn@6.0.6': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 - '@types/dagre@0.7.53': {} + '@types/dagre@0.7.52': {} '@types/debug@4.1.12': dependencies: @@ -35975,12 +40137,14 @@ snapshots: '@types/estree@0.0.51': {} + '@types/estree@1.0.7': {} + '@types/estree@1.0.8': {} '@types/express-serve-static-core@4.19.8': dependencies: - '@types/node': 22.15.35 - '@types/qs': 6.14.0 + '@types/node': 22.15.24 + '@types/qs': 6.15.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -35988,29 +40152,36 @@ snapshots: dependencies: '@types/body-parser': 1.19.6 '@types/express-serve-static-core': 4.19.8 - '@types/qs': 6.14.0 + '@types/qs': 6.15.0 '@types/serve-static': 1.15.10 '@types/find-cache-dir@3.2.1': {} + '@types/fs-extra@11.0.1': + dependencies: + '@types/jsonfile': 6.1.4 + '@types/node': 22.15.24 + '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.15.35 + '@types/node': 22.15.24 + + '@types/glob-base@0.3.2': {} '@types/glob@7.2.0': dependencies: - '@types/minimatch': 6.0.0 - '@types/node': 22.15.35 + '@types/minimatch': 5.1.2 + '@types/node': 16.18.126 - '@types/glob@8.1.0': + '@types/glob@8.0.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/handlebars@4.1.0': dependencies: @@ -36039,7 +40210,7 @@ snapshots: '@types/http-proxy@1.17.17': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/is-function@1.0.3': {} @@ -36073,11 +40244,13 @@ snapshots: expect: 30.2.0 pretty-format: 30.2.0 + '@types/js-yaml@4.0.5': {} + '@types/js-yaml@4.0.9': {} '@types/jsdom@20.0.1': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/tough-cookie': 4.0.5 parse5: 7.3.0 @@ -36087,15 +40260,21 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 + + '@types/katex@0.16.8': {} '@types/linkify-it@5.0.0': {} - '@types/lodash.camelcase@4.3.9': + '@types/lodash.camelcase@4.3.0': + dependencies: + '@types/lodash': 4.17.17 + + '@types/lodash.clonedeep@4.5.6': dependencies: '@types/lodash': 4.17.17 - '@types/lodash.clonedeep@4.5.9': + '@types/lodash.debounce@4.0.6': dependencies: '@types/lodash': 4.17.17 @@ -36103,8 +40282,18 @@ snapshots: dependencies: '@types/lodash': 4.17.17 + '@types/lodash@4.14.189': {} + + '@types/lodash@4.14.198': {} + + '@types/lodash@4.14.199': {} + + '@types/lodash@4.14.200': {} + '@types/lodash@4.14.202': {} + '@types/lodash@4.17.15': {} + '@types/lodash@4.17.16': {} '@types/lodash@4.17.17': {} @@ -36114,6 +40303,10 @@ snapshots: '@types/linkify-it': 5.0.0 '@types/mdurl': 2.0.0 + '@types/markdown-to-jsx@6.11.3': + dependencies: + '@types/react': 18.2.0 + '@types/mdast@3.0.15': dependencies: '@types/unist': 2.0.11 @@ -36126,50 +40319,64 @@ snapshots: '@types/mdx@2.0.13': {} + '@types/micromatch@4.0.10': + dependencies: + '@types/braces': 3.0.5 + '@types/mime-types@2.1.4': {} '@types/mime@1.3.5': {} '@types/minimatch@5.1.2': {} - '@types/minimatch@6.0.0': - dependencies: - minimatch: 10.2.2 - '@types/minimist@1.2.5': {} - '@types/mocha@10.0.10': {} + '@types/mocha@10.0.1': {} + + '@types/mocha@10.0.3': {} + + '@types/mousetrap@1.6.11': {} '@types/mousetrap@1.6.15': {} '@types/ms@2.1.0': {} + '@types/mustache@4.2.5': {} + '@types/mustache@4.2.6': {} '@types/node-fetch@2.6.13': dependencies: - '@types/node': 22.15.35 + '@types/node': 16.18.126 form-data: 4.0.5 + '@types/node@14.18.63': {} + '@types/node@16.18.126': {} - '@types/node@18.19.130': + '@types/node@18.11.19': {} + + '@types/node@18.18.7': dependencies: undici-types: 5.26.5 - '@types/node@20.19.33': + '@types/node@20.10.6': dependencies: - undici-types: 6.21.0 + undici-types: 5.26.5 '@types/node@22.15.18': dependencies: undici-types: 6.21.0 + '@types/node@22.15.19': + dependencies: + undici-types: 6.21.0 + '@types/node@22.15.21': dependencies: undici-types: 6.21.0 - '@types/node@22.15.35': + '@types/node@22.15.24': dependencies: undici-types: 6.21.0 @@ -36177,7 +40384,9 @@ snapshots: '@types/npmlog@4.1.6': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 + + '@types/overlayscrollbars@1.12.5': {} '@types/parse-json@4.0.2': {} @@ -36189,11 +40398,11 @@ snapshots: '@types/pretty-hrtime@1.0.3': {} - '@types/prismjs@1.26.6': {} + '@types/prismjs@1.26.5': {} '@types/prop-types@15.7.15': {} - '@types/qs@6.14.0': {} + '@types/qs@6.15.0': {} '@types/ramda@0.30.2': dependencies: @@ -36201,15 +40410,15 @@ snapshots: '@types/range-parser@1.2.7': {} - '@types/react-collapse@5.0.4': + '@types/reach__router@1.3.15': dependencies: '@types/react': 18.2.0 - '@types/react-dom@17.0.14': + '@types/react-collapse@5.0.4': dependencies: '@types/react': 18.2.0 - '@types/react-dom@17.0.26(@types/react@18.2.0)': + '@types/react-dom@17.0.14': dependencies: '@types/react': 18.2.0 @@ -36221,6 +40430,10 @@ snapshots: dependencies: '@types/react': 18.2.0 + '@types/react-lottie@1.2.5': + dependencies: + '@types/react': 18.2.0 + '@types/react-split-pane@0.1.67(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: react-split-pane: 0.1.92(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -36236,7 +40449,7 @@ snapshots: dependencies: '@types/react': 18.2.0 - '@types/react-test-renderer@19.1.0': + '@types/react-test-renderer@18.3.0': dependencies: '@types/react': 18.2.0 @@ -36246,10 +40459,10 @@ snapshots: '@types/scheduler': 0.16.8 csstype: 3.2.3 - '@types/react@17.0.91': + '@types/react@17.0.37': dependencies: '@types/prop-types': 15.7.15 - '@types/scheduler': 0.16.8 + '@types/scheduler': 0.26.0 csstype: 3.2.3 '@types/react@18.2.0': @@ -36260,7 +40473,7 @@ snapshots: '@types/resolve@1.17.1': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/resolve@1.20.2': {} @@ -36276,19 +40489,19 @@ snapshots: '@types/selenium-webdriver@4.35.5': dependencies: - '@types/node': 22.15.35 - '@types/ws': 8.18.1 + '@types/node': 22.15.24 + '@types/ws': 8.2.1 '@types/semver@7.7.1': {} '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/send@1.2.1': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/serve-index@1.9.4': dependencies: @@ -36297,12 +40510,12 @@ snapshots: '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/send': 0.17.6 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/source-list-map@0.1.6': {} @@ -36316,7 +40529,7 @@ snapshots: '@types/tapable@1.0.12': {} - '@types/tcp-port-used@1.0.4': {} + '@types/tcp-port-used@1.0.3': {} '@types/tern@0.23.9': dependencies: @@ -36341,7 +40554,7 @@ snapshots: '@types/unzipper@0.10.11': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/use-sync-external-store@0.0.3': {} @@ -36351,46 +40564,46 @@ snapshots: '@types/uuid@9.0.8': {} - '@types/vscode-notebook-renderer@1.72.4': {} + '@types/vscode-notebook-renderer@1.72.2': {} + + '@types/vscode-webview@1.57.2': {} + + '@types/vscode-webview@1.57.3': {} '@types/vscode-webview@1.57.5': {} - '@types/vscode@1.109.0': {} + '@types/vscode@1.100.0': {} + + '@types/vscode@1.104.0': {} + + '@types/vscode@1.63.0': {} + + '@types/vscode@1.81.0': {} + + '@types/vscode@1.84.0': {} '@types/webpack-env@1.18.8': {} '@types/webpack-sources@3.2.3': dependencies: - '@types/node': 22.15.35 + '@types/node': 16.18.126 '@types/source-list-map': 0.1.6 source-map: 0.7.6 '@types/webpack@4.41.40': dependencies: - '@types/node': 22.15.35 + '@types/node': 16.18.126 '@types/tapable': 1.0.12 '@types/uglify-js': 3.17.5 '@types/webpack-sources': 3.2.3 anymatch: 3.1.3 source-map: 0.6.1 - '@types/webpack@5.28.5': - dependencies: - '@types/node': 22.15.35 - tapable: 2.3.0 - webpack: 5.105.2(webpack-cli@5.1.4) - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - webpack-cli - optional: true - - '@types/webpack@5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.19))': + '@types/webpack@5.28.5(@swc/core@1.15.18(@swc/helpers@0.5.19))': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 tapable: 2.3.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) transitivePeerDependencies: - '@swc/core' - esbuild @@ -36398,11 +40611,11 @@ snapshots: - webpack-cli optional: true - '@types/webpack@5.28.5(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1)': + '@types/webpack@5.28.5(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1)': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 tapable: 2.3.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) transitivePeerDependencies: - '@swc/core' - esbuild @@ -36411,9 +40624,9 @@ snapshots: '@types/webpack@5.28.5(webpack-cli@4.10.0)': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 tapable: 2.3.0 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -36423,9 +40636,9 @@ snapshots: '@types/webpack@5.28.5(webpack-cli@5.1.4)': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 tapable: 2.3.0 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -36436,11 +40649,19 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 + + '@types/ws@8.2.1': + dependencies: + '@types/node': 22.15.24 + + '@types/xml2js@0.4.12': + dependencies: + '@types/node': 16.18.126 '@types/xml2js@0.4.14': dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@types/yargs-parser@21.0.3': {} @@ -36452,11 +40673,11 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@2.34.0(@typescript-eslint/parser@2.34.0(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10))(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10)': + '@typescript-eslint/eslint-plugin@2.34.0(@typescript-eslint/parser@2.34.0(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10))(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10)': dependencies: - '@typescript-eslint/experimental-utils': 2.34.0(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10) - '@typescript-eslint/parser': 2.34.0(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10) - eslint: 9.39.3(jiti@2.6.1) + '@typescript-eslint/experimental-utils': 2.34.0(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10) + '@typescript-eslint/parser': 2.34.0(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10) + eslint: 9.39.4(jiti@2.6.1) functional-red-black-tree: 1.0.1 regexpp: 3.2.0 tsutils: 3.21.0(typescript@3.9.10) @@ -36465,15 +40686,49 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/type-utils': 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.32.1 + eslint: 9.39.4(jiti@2.6.1) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.4.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/parser': 8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.32.1 - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.4.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.33.0 + '@typescript-eslint/type-utils': 8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.33.0 + eslint: 9.39.4(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -36482,41 +40737,62 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/experimental-utils@2.34.0(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10)': + '@typescript-eslint/experimental-utils@2.34.0(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10)': dependencies: '@types/json-schema': 7.0.15 '@typescript-eslint/typescript-estree': 2.34.0(typescript@3.9.10) - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) eslint-scope: 5.1.1 eslint-utils: 2.1.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/parser@2.34.0(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10)': + '@typescript-eslint/parser@2.34.0(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10)': dependencies: '@types/eslint-visitor-keys': 1.0.0 - '@typescript-eslint/experimental-utils': 2.34.0(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10) + '@typescript-eslint/experimental-utils': 2.34.0(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10) '@typescript-eslint/typescript-estree': 2.34.0(typescript@3.9.10) - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) eslint-visitor-keys: 1.3.0 optionalDependencies: typescript: 3.9.10 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)': + '@typescript-eslint/parser@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.32.1 '@typescript-eslint/types': 8.32.1 '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.32.1 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.33.0 + '@typescript-eslint/types': 8.33.0 + '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.33.0 + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.39.4(jiti@2.6.1) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.33.0(typescript@5.8.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3) + '@typescript-eslint/types': 8.33.0 + debug: 4.4.3(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + - typescript + '@typescript-eslint/scope-manager@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 @@ -36527,12 +40803,32 @@ snapshots: '@typescript-eslint/types': 8.32.1 '@typescript-eslint/visitor-keys': 8.32.1 - '@typescript-eslint/type-utils@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)': + '@typescript-eslint/scope-manager@8.33.0': + dependencies: + '@typescript-eslint/types': 8.33.0 + '@typescript-eslint/visitor-keys': 8.33.0 + + '@typescript-eslint/tsconfig-utils@8.33.0(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@typescript-eslint/type-utils@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) + ts-api-utils: 2.4.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.39.4(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -36542,6 +40838,8 @@ snapshots: '@typescript-eslint/types@8.32.1': {} + '@typescript-eslint/types@8.33.0': {} + '@typescript-eslint/typescript-estree@2.34.0(typescript@3.9.10)': dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -36577,35 +40875,62 @@ snapshots: debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 - minimatch: 9.0.6 + minimatch: 9.0.7 semver: 7.7.4 ts-api-utils: 2.4.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.62.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.33.0(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) + '@typescript-eslint/project-service': 8.33.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3) + '@typescript-eslint/types': 8.33.0 + '@typescript-eslint/visitor-keys': 8.33.0 + debug: 4.4.3(supports-color@8.1.1) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.7 + semver: 7.7.4 + ts-api-utils: 2.4.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@5.62.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) '@types/json-schema': 7.0.15 '@types/semver': 7.7.1 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.3) - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) eslint-scope: 5.1.1 semver: 7.7.4 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)': + '@typescript-eslint/utils@8.32.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.32.1 '@typescript-eslint/types': 8.32.1 '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.33.0 + '@typescript-eslint/types': 8.33.0 + '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3) + eslint: 9.39.4(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -36620,7 +40945,12 @@ snapshots: '@typescript-eslint/types': 8.32.1 eslint-visitor-keys: 4.2.1 - '@typespec/ts-http-runtime@0.3.3': + '@typescript-eslint/visitor-keys@8.33.0': + dependencies: + '@typescript-eslint/types': 8.33.0 + eslint-visitor-keys: 4.2.1 + + '@typespec/ts-http-runtime@0.3.4': dependencies: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -36628,24 +40958,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@uiw/codemirror-extensions-basic-setup@4.23.14(@codemirror/lint@6.8.5)': + '@uiw/codemirror-extensions-basic-setup@4.23.12(@codemirror/lint@6.8.5)': dependencies: '@codemirror/autocomplete': 6.19.1 - '@codemirror/commands': 6.10.2 + '@codemirror/commands': 6.10.0 '@codemirror/language': 6.11.3 '@codemirror/lint': 6.8.5 '@codemirror/search': 6.6.0 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 - '@uiw/react-codemirror@4.23.14(@codemirror/lint@6.8.5)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.38.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@uiw/react-codemirror@4.23.12(@codemirror/lint@6.8.5)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.38.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.28.6 - '@codemirror/commands': 6.10.2 - '@codemirror/state': 6.5.4 - '@codemirror/theme-one-dark': 6.1.3 + '@codemirror/commands': 6.10.0 + '@codemirror/state': 6.5.2 + '@codemirror/theme-one-dark': 6.1.2 '@codemirror/view': 6.38.8 - '@uiw/codemirror-extensions-basic-setup': 4.23.14(@codemirror/lint@6.8.5) + '@uiw/codemirror-extensions-basic-setup': 4.23.12(@codemirror/lint@6.8.5) codemirror: 6.0.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -36713,6 +41043,8 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true + '@vercel/oidc@3.0.3': {} + '@vercel/oidc@3.1.0': {} '@vitest/expect@2.0.5': @@ -36780,7 +41112,25 @@ snapshots: transitivePeerDependencies: - tslib - '@vscode/iconv-lite-umd@0.7.1': {} + '@vscode/iconv-lite-umd@0.7.0': {} + + '@vscode/test-electron@2.3.2': + dependencies: + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + jszip: 3.10.1 + semver: 7.7.4 + transitivePeerDependencies: + - supports-color + + '@vscode/test-electron@2.3.4': + dependencies: + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + jszip: 3.10.1 + semver: 7.7.4 + transitivePeerDependencies: + - supports-color '@vscode/test-electron@2.5.2': dependencies: @@ -36847,11 +41197,47 @@ snapshots: leven: 3.1.0 markdown-it: 12.3.2 mime: 1.6.0 - minimatch: 3.1.3 + minimatch: 3.1.4 parse-semver: 1.1.1 read: 1.0.7 semver: 7.7.4 - tmp: 0.2.5 + tmp: 0.2.4 + typed-rest-client: 1.8.11 + url-join: 4.0.1 + xml2js: 0.5.0 + yauzl: 2.10.0 + yazl: 2.5.1 + optionalDependencies: + keytar: 7.9.0 + transitivePeerDependencies: + - supports-color + + '@vscode/vsce@3.7.0': + dependencies: + '@azure/identity': 4.13.0 + '@secretlint/node': 10.2.2 + '@secretlint/secretlint-formatter-sarif': 10.2.2 + '@secretlint/secretlint-rule-no-dotenv': 10.2.2 + '@secretlint/secretlint-rule-preset-recommend': 10.2.2 + '@vscode/vsce-sign': 2.0.9 + azure-devops-node-api: 12.5.0 + chalk: 4.1.2 + cheerio: 1.2.0 + cockatiel: 3.2.1 + commander: 12.1.0 + form-data: 4.0.5 + glob: 11.1.0 + hosted-git-info: 4.1.0 + jsonc-parser: 3.3.1 + leven: 3.1.0 + markdown-it: 14.1.1 + mime: 1.6.0 + minimatch: 3.1.4 + parse-semver: 1.1.1 + read: 1.0.7 + secretlint: 10.2.2 + semver: 7.7.4 + tmp: 0.2.4 typed-rest-client: 1.8.11 url-join: 4.0.1 xml2js: 0.5.0 @@ -36860,9 +41246,6 @@ snapshots: optionalDependencies: keytar: 7.9.0 transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - supports-color '@vscode/vsce@3.7.1': @@ -36885,12 +41268,12 @@ snapshots: leven: 3.1.0 markdown-it: 14.1.1 mime: 1.6.0 - minimatch: 3.1.3 + minimatch: 3.1.4 parse-semver: 1.1.1 read: 1.0.7 secretlint: 10.2.2 semver: 7.7.4 - tmp: 0.2.5 + tmp: 0.2.4 typed-rest-client: 1.8.11 url-join: 4.0.1 xml2js: 0.5.0 @@ -36899,11 +41282,22 @@ snapshots: optionalDependencies: keytar: 7.9.0 transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - supports-color + '@vscode/webview-ui-toolkit@1.2.0(react@18.2.0)': + dependencies: + '@microsoft/fast-element': 1.14.0 + '@microsoft/fast-foundation': 2.50.0 + '@microsoft/fast-react-wrapper': 0.1.48(react@18.2.0) + react: 18.2.0 + + '@vscode/webview-ui-toolkit@1.2.0(react@19.1.0)': + dependencies: + '@microsoft/fast-element': 1.14.0 + '@microsoft/fast-foundation': 2.50.0 + '@microsoft/fast-react-wrapper': 0.1.48(react@19.1.0) + react: 19.1.0 + '@vscode/webview-ui-toolkit@1.4.0(react@18.2.0)': dependencies: '@microsoft/fast-element': 1.14.0 @@ -36925,12 +41319,34 @@ snapshots: '@webassemblyjs/helper-numbers': 1.13.2 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ast@1.9.0': + dependencies: + '@webassemblyjs/helper-module-context': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/wast-parser': 1.9.0 + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + '@webassemblyjs/floating-point-hex-parser@1.9.0': {} + '@webassemblyjs/helper-api-error@1.13.2': {} + '@webassemblyjs/helper-api-error@1.9.0': {} + '@webassemblyjs/helper-buffer@1.14.1': {} + '@webassemblyjs/helper-buffer@1.9.0': {} + + '@webassemblyjs/helper-code-frame@1.9.0': + dependencies: + '@webassemblyjs/wast-printer': 1.9.0 + + '@webassemblyjs/helper-fsm@1.9.0': {} + + '@webassemblyjs/helper-module-context@1.9.0': + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-numbers@1.13.2': dependencies: '@webassemblyjs/floating-point-hex-parser': 1.13.2 @@ -36939,6 +41355,8 @@ snapshots: '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + '@webassemblyjs/helper-wasm-bytecode@1.9.0': {} + '@webassemblyjs/helper-wasm-section@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 @@ -36946,16 +41364,33 @@ snapshots: '@webassemblyjs/helper-wasm-bytecode': 1.13.2 '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/helper-wasm-section@1.9.0': + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-buffer': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/wasm-gen': 1.9.0 + '@webassemblyjs/ieee754@1.13.2': dependencies: '@xtuc/ieee754': 1.2.0 + '@webassemblyjs/ieee754@1.9.0': + dependencies: + '@xtuc/ieee754': 1.2.0 + '@webassemblyjs/leb128@1.13.2': dependencies: '@xtuc/long': 4.2.2 + '@webassemblyjs/leb128@1.9.0': + dependencies: + '@xtuc/long': 4.2.2 + '@webassemblyjs/utf8@1.13.2': {} + '@webassemblyjs/utf8@1.9.0': {} + '@webassemblyjs/wasm-edit@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 @@ -36967,6 +41402,17 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 '@webassemblyjs/wast-printer': 1.14.1 + '@webassemblyjs/wasm-edit@1.9.0': + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-buffer': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/helper-wasm-section': 1.9.0 + '@webassemblyjs/wasm-gen': 1.9.0 + '@webassemblyjs/wasm-opt': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + '@webassemblyjs/wast-printer': 1.9.0 + '@webassemblyjs/wasm-gen@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 @@ -36975,6 +41421,14 @@ snapshots: '@webassemblyjs/leb128': 1.13.2 '@webassemblyjs/utf8': 1.13.2 + '@webassemblyjs/wasm-gen@1.9.0': + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/ieee754': 1.9.0 + '@webassemblyjs/leb128': 1.9.0 + '@webassemblyjs/utf8': 1.9.0 + '@webassemblyjs/wasm-opt@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 @@ -36982,6 +41436,13 @@ snapshots: '@webassemblyjs/wasm-gen': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wasm-opt@1.9.0': + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-buffer': 1.9.0 + '@webassemblyjs/wasm-gen': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + '@webassemblyjs/wasm-parser@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 @@ -36991,86 +41452,110 @@ snapshots: '@webassemblyjs/leb128': 1.13.2 '@webassemblyjs/utf8': 1.13.2 + '@webassemblyjs/wasm-parser@1.9.0': + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-api-error': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/ieee754': 1.9.0 + '@webassemblyjs/leb128': 1.9.0 + '@webassemblyjs/utf8': 1.9.0 + + '@webassemblyjs/wast-parser@1.9.0': + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/floating-point-hex-parser': 1.9.0 + '@webassemblyjs/helper-api-error': 1.9.0 + '@webassemblyjs/helper-code-frame': 1.9.0 + '@webassemblyjs/helper-fsm': 1.9.0 + '@xtuc/long': 4.2.2 + '@webassemblyjs/wast-printer@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.105.2)': + '@webassemblyjs/wast-printer@1.9.0': + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/wast-parser': 1.9.0 + '@xtuc/long': 4.2.2 + + '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.104.1) - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.105.2)': + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.104.1) - '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.105.2)': + '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.104.1) '@webpack-cli/info@1.5.0(webpack-cli@4.10.0)': dependencies: envinfo: 7.21.0 - webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.104.1) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.105.2)': + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.104.1) - '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.105.2)': + '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.104.1) '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0)': dependencies: - webpack-cli: 4.10.0(webpack@5.105.2) + webpack-cli: 4.10.0(webpack@5.104.1) '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0)(webpack-dev-server@5.2.3)': dependencies: - webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.104.1) optionalDependencies: - webpack-dev-server: 5.2.3(webpack-cli@4.10.0)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@4.10.0)(webpack@5.104.1) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack@5.105.2)': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) optionalDependencies: - webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.105.2)': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.104.1) - '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.3)(webpack@5.105.2)': + '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.3)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.104.1) optionalDependencies: - webpack-dev-server: 5.2.3(webpack-cli@6.0.1)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@6.0.1)(webpack@5.104.1) - '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.105.2)': + '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.104.1)': dependencies: - webpack: 5.105.2(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.104.1) '@xmldom/xmldom@0.7.13': {} - '@xmldom/xmldom@0.8.11': {} + '@xmldom/xmldom@0.8.10': {} '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} - '@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.25.12)': + '@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.18.20)': dependencies: - esbuild: 0.25.12 + esbuild: 0.18.20 tslib: 2.8.1 '@yarnpkg/fslib@2.10.3': @@ -37091,10 +41576,6 @@ snapshots: abbrev@1.1.1: {} - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - accepts@1.3.8: dependencies: mime-types: 2.1.35 @@ -37105,6 +41586,10 @@ snapshots: mime-types: 3.0.2 negotiator: 1.0.0 + acorn-dynamic-import@2.0.2: + dependencies: + acorn: 4.0.13 + acorn-globals@3.1.0: dependencies: acorn: 4.0.13 @@ -37151,8 +41636,12 @@ snapshots: address@1.0.3: {} + address@1.1.2: {} + address@1.2.2: {} + adm-zip@0.5.14: {} + adm-zip@0.5.16: {} agent-base@5.1.1: {} @@ -37179,21 +41668,21 @@ snapshots: clean-stack: 4.2.0 indent-string: 5.0.0 - ai@5.0.131(zod@3.25.76): + ai@5.0.76(zod@4.1.11): dependencies: - '@ai-sdk/gateway': 2.0.37(zod@3.25.76) - '@ai-sdk/provider': 2.0.1 - '@ai-sdk/provider-utils': 3.0.21(zod@3.25.76) + '@ai-sdk/gateway': 2.0.0(zod@4.1.11) + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.12(zod@4.1.11) '@opentelemetry/api': 1.9.0 - zod: 3.25.76 + zod: 4.1.11 - ai@6.0.86(zod@4.1.11): + ai@6.0.103(zod@4.1.8): dependencies: - '@ai-sdk/gateway': 3.0.46(zod@4.1.11) + '@ai-sdk/gateway': 3.0.57(zod@4.1.8) '@ai-sdk/provider': 3.0.8 - '@ai-sdk/provider-utils': 4.0.15(zod@4.1.11) + '@ai-sdk/provider-utils': 4.0.15(zod@4.1.8) '@opentelemetry/api': 1.9.0 - zod: 4.1.11 + zod: 4.1.8 airbnb-js-shims@2.2.1: dependencies: @@ -37215,6 +41704,10 @@ snapshots: string.prototype.padstart: 3.1.7 symbol.prototype.description: 1.0.7 + ajv-errors@1.0.1(ajv@6.14.0): + dependencies: + ajv: 6.14.0 + ajv-formats@2.1.1: dependencies: ajv: 8.17.1 @@ -37223,6 +41716,10 @@ snapshots: optionalDependencies: ajv: 8.17.1 + ajv-keywords@2.1.1(ajv@5.5.2): + dependencies: + ajv: 5.5.2 + ajv-keywords@3.5.2(ajv@6.14.0): dependencies: ajv: 6.14.0 @@ -37253,6 +41750,12 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + align-text@0.1.4: + dependencies: + kind-of: 3.2.2 + longest: 1.0.1 + repeat-string: 1.6.1 + alphanum-sort@1.0.2: {} amdefine@0.1.1: {} @@ -37276,6 +41779,8 @@ snapshots: ansi-colors@3.2.4: {} + ansi-colors@4.1.1: {} + ansi-colors@4.1.3: {} ansi-escapes@1.4.0: {} @@ -37292,6 +41797,8 @@ snapshots: ansi-html-community@0.0.8: {} + ansi-html@0.0.7: {} + ansi-html@0.0.9: {} ansi-regex@2.1.1: {} @@ -37412,6 +41919,8 @@ snapshots: array-flatten@1.1.1: {} + array-flatten@2.1.2: {} + array-includes@3.1.9: dependencies: call-bind: 1.0.8 @@ -37513,6 +42022,12 @@ snapshots: asap@2.0.6: {} + asn1.js@4.10.1: + dependencies: + bn.js: 4.12.3 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + asn1@0.2.6: dependencies: safer-buffer: 2.1.2 @@ -37525,6 +42040,11 @@ snapshots: assert-plus@1.0.0: {} + assert@1.5.1: + dependencies: + object.assign: 4.1.7 + util: 0.10.4 + assertion-error@1.1.0: {} assertion-error@2.0.1: {} @@ -37580,19 +42100,30 @@ snapshots: dependencies: tslib: 2.8.1 - autoprefixer@10.4.24(postcss@8.5.6): + autoprefixer@10.4.19(postcss@8.5.3): + dependencies: + browserslist: 4.28.1 + caniuse-lite: 1.0.30001777 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + autoprefixer@10.4.21(postcss@8.5.4): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001772 - fraction.js: 5.3.4 + caniuse-lite: 1.0.30001777 + fraction.js: 4.3.7 + normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 autoprefixer@6.7.7: dependencies: browserslist: 1.7.7 - caniuse-db: 1.0.30001772 + caniuse-db: 1.0.30001777 normalize-range: 0.1.2 num2fraction: 1.2.2 postcss: 5.2.18 @@ -37601,7 +42132,7 @@ snapshots: autoprefixer@7.1.6: dependencies: browserslist: 2.11.3 - caniuse-lite: 1.0.30001772 + caniuse-lite: 1.0.30001777 normalize-range: 0.1.2 num2fraction: 1.2.2 postcss: 6.0.23 @@ -37610,7 +42141,7 @@ snapshots: autoprefixer@9.8.8: dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001772 + caniuse-lite: 1.0.30001777 normalize-range: 0.1.2 num2fraction: 1.2.2 picocolors: 0.2.1 @@ -37633,7 +42164,7 @@ snapshots: axios@1.13.5: dependencies: - follow-redirects: 1.15.11 + follow-redirects: 1.15.11(debug@3.2.7) form-data: 4.0.5 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -37646,8 +42177,6 @@ snapshots: tunnel: 0.0.6 typed-rest-client: 1.8.11 - b4a@1.7.4: {} - babel-code-frame@6.26.0: dependencies: chalk: 1.1.3 @@ -37670,23 +42199,27 @@ snapshots: debug: 2.6.9 json5: 0.5.1 lodash: 4.17.23 - minimatch: 3.1.3 + minimatch: 3.1.4 path-is-absolute: 1.0.1 private: 0.1.8 slash: 1.0.0 source-map: 0.5.7 - babel-core@7.0.0-bridge.0(@babel/core@7.27.7): + babel-core@7.0.0-bridge.0(@babel/core@7.27.1): + dependencies: + '@babel/core': 7.27.1 + + babel-core@7.0.0-bridge.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 - babel-eslint@10.1.0(eslint@9.39.3(jiti@2.6.1)): + babel-eslint@10.1.0(eslint@9.39.4(jiti@2.6.1)): dependencies: '@babel/code-frame': 7.29.0 '@babel/parser': 7.29.0 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) eslint-visitor-keys: 1.3.0 resolve: 1.22.11 transitivePeerDependencies: @@ -37792,104 +42325,130 @@ snapshots: babel-plugin-istanbul: 4.1.6 babel-preset-jest: 20.0.3 - babel-jest@25.5.1(@babel/core@7.27.7): + babel-jest@25.5.1(@babel/core@7.27.1): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@jest/transform': 25.5.1 '@jest/types': 25.5.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 25.5.0(@babel/core@7.27.7) + babel-preset-jest: 25.5.0(@babel/core@7.27.1) chalk: 3.0.0 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color - babel-jest@29.7.0(@babel/core@7.27.7): + babel-jest@29.7.0(@babel/core@7.27.1): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.27.7) + babel-preset-jest: 29.6.3(@babel/core@7.27.1) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color - babel-jest@30.0.0(@babel/core@7.27.7): + babel-jest@30.0.0(@babel/core@7.27.1): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@jest/transform': 30.0.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 7.0.1 - babel-preset-jest: 30.0.0(@babel/core@7.27.7) + babel-preset-jest: 30.0.0(@babel/core@7.27.1) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color - babel-jest@30.2.0(@babel/core@7.27.7): + babel-jest@30.0.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.27.7 - '@jest/transform': 30.2.0 + '@babel/core': 7.29.0 + '@jest/transform': 30.0.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 7.0.1 - babel-preset-jest: 30.2.0(@babel/core@7.27.7) + babel-preset-jest: 30.0.0(@babel/core@7.29.0) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color - babel-loader@10.0.0(@babel/core@7.27.7)(webpack@5.105.2): + babel-loader@10.0.0(@babel/core@7.27.1)(webpack@5.104.1): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 find-up: 5.0.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + + babel-loader@7.1.2(babel-core@7.0.0-bridge.0(@babel/core@7.27.1))(webpack@3.8.1): + dependencies: + babel-core: 7.0.0-bridge.0(@babel/core@7.27.1) + find-cache-dir: 1.0.0 + loader-utils: 1.4.2 + mkdirp: 0.5.6 + webpack: 3.8.1 - babel-loader@7.1.2(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(webpack@5.105.2): + babel-loader@7.1.2(babel-core@7.0.0-bridge.0(@babel/core@7.29.0))(webpack@3.8.1): dependencies: - babel-core: 7.0.0-bridge.0(@babel/core@7.27.7) + babel-core: 7.0.0-bridge.0(@babel/core@7.29.0) find-cache-dir: 1.0.0 loader-utils: 1.4.2 mkdirp: 0.5.6 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 3.8.1 + + babel-loader@8.4.1(@babel/core@7.27.1)(webpack@4.47.0(webpack-cli@4.10.0)): + dependencies: + '@babel/core': 7.27.1 + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 4.47.0(webpack-cli@4.10.0) - babel-loader@8.4.1(@babel/core@7.27.7)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + babel-loader@8.4.1(@babel/core@7.27.1)(webpack@4.47.0(webpack-cli@6.0.1)): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 4.47.0(webpack-cli@6.0.1) - babel-loader@8.4.1(@babel/core@7.27.7)(webpack@5.105.2): + babel-loader@8.4.1(@babel/core@7.27.1)(webpack@4.47.0): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 4.47.0 - babel-loader@9.2.1(@babel/core@7.27.7)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + babel-loader@8.4.1(@babel/core@7.27.1)(webpack@5.104.1): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + + babel-loader@9.2.1(@babel/core@7.27.1)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))): + dependencies: + '@babel/core': 7.27.1 find-cache-dir: 4.0.0 schema-utils: 4.3.3 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) - babel-loader@9.2.1(@babel/core@7.27.7)(webpack@5.105.2): + babel-loader@9.2.1(@babel/core@7.27.1)(webpack@5.104.1): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 find-cache-dir: 4.0.0 schema-utils: 4.3.3 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) babel-messages@6.23.0: dependencies: @@ -37897,9 +42456,9 @@ snapshots: babel-plugin-add-react-displayname@0.0.5: {} - babel-plugin-annotate-pure-calls@0.4.0(@babel/core@7.27.7): + babel-plugin-annotate-pure-calls@0.4.0(@babel/core@7.27.1): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 babel-plugin-apply-mdx-type-prop@1.6.22(@babel/core@7.12.9): dependencies: @@ -37911,9 +42470,9 @@ snapshots: dependencies: babel-runtime: 6.26.0 - babel-plugin-dev-expression@0.2.3(@babel/core@7.27.7): + babel-plugin-dev-expression@0.2.3(@babel/core@7.27.1): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 babel-plugin-dynamic-import-node@1.1.0: dependencies: @@ -37921,6 +42480,21 @@ snapshots: babel-template: 6.26.0 babel-types: 6.26.0 + babel-plugin-emotion@10.2.2: + dependencies: + '@babel/helper-module-imports': 7.28.6 + '@emotion/hash': 0.8.0 + '@emotion/memoize': 0.7.4 + '@emotion/serialize': 0.11.16 + babel-plugin-macros: 2.8.0 + babel-plugin-syntax-jsx: 6.18.0 + convert-source-map: 1.9.0 + escape-string-regexp: 1.0.5 + find-root: 1.1.0 + source-map: 0.5.7 + transitivePeerDependencies: + - supports-color + babel-plugin-extract-import-names@1.6.22: dependencies: '@babel/helper-plugin-utils': 7.10.4 @@ -37975,10 +42549,6 @@ snapshots: '@babel/types': 7.29.0 '@types/babel__core': 7.20.5 - babel-plugin-jest-hoist@30.2.0: - dependencies: - '@types/babel__core': 7.20.5 - babel-plugin-macros@2.8.0: dependencies: '@babel/runtime': 7.28.6 @@ -37991,44 +42561,76 @@ snapshots: cosmiconfig: 7.1.0 resolve: 1.22.11 + babel-plugin-named-asset-import@0.3.8(@babel/core@7.27.1): + dependencies: + '@babel/core': 7.27.1 + + babel-plugin-named-asset-import@0.3.8(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + babel-plugin-named-exports-order@0.0.2: {} - babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.27.7): + babel-plugin-polyfill-corejs2@0.4.16(@babel/core@7.27.1): + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/core': 7.27.1 + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.27.1) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs2@0.4.16(@babel/core@7.29.0): dependencies: '@babel/compat-data': 7.29.0 - '@babel/core': 7.27.7 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.27.7) + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.1.7(@babel/core@7.27.7): + babel-plugin-polyfill-corejs3@0.1.7(@babel/core@7.27.1): + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-define-polyfill-provider': 0.1.5(@babel/core@7.27.1) + core-js-compat: 3.48.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.1): dependencies: - '@babel/core': 7.27.7 - '@babel/helper-define-polyfill-provider': 0.1.5(@babel/core@7.27.7) + '@babel/core': 7.27.1 + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.27.1) core-js-compat: 3.48.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.7): + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.29.0): dependencies: - '@babel/core': 7.27.7 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.27.7) + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) core-js-compat: 3.48.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.0.4(@babel/core@7.27.7): + babel-plugin-polyfill-regenerator@0.0.4(@babel/core@7.27.1): + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-define-polyfill-provider': 0.0.3(@babel/core@7.27.1) + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.7(@babel/core@7.27.1): dependencies: - '@babel/core': 7.27.7 - '@babel/helper-define-polyfill-provider': 0.0.3(@babel/core@7.27.7) + '@babel/core': 7.27.1 + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.27.1) transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.27.7): + babel-plugin-polyfill-regenerator@0.6.7(@babel/core@7.29.0): dependencies: - '@babel/core': 7.27.7 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.27.7) + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -38248,39 +42850,58 @@ snapshots: babel-runtime: 6.26.0 babel-types: 6.26.0 - babel-preset-current-node-syntax@0.1.4(@babel/core@7.27.7): - dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.27.7) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.27.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.27.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.27.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.7) - - babel-preset-current-node-syntax@1.2.0(@babel/core@7.27.7): - dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.27.7) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.27.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.27.7) - '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.27.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.27.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.27.7) + babel-preset-current-node-syntax@0.1.4(@babel/core@7.27.1): + dependencies: + '@babel/core': 7.27.1 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.27.1) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.27.1) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.1) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.27.1) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.27.1) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.1) + + babel-preset-current-node-syntax@1.2.0(@babel/core@7.27.1): + dependencies: + '@babel/core': 7.27.1 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.27.1) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.27.1) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.27.1) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.1) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.27.1) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.27.1) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.1) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.27.1) + + babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.0) babel-preset-env@1.6.1: dependencies: @@ -38328,29 +42949,29 @@ snapshots: babel-plugin-jest-hoist: 22.4.4 babel-plugin-syntax-object-rest-spread: 6.13.0 - babel-preset-jest@25.5.0(@babel/core@7.27.7): + babel-preset-jest@25.5.0(@babel/core@7.27.1): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 babel-plugin-jest-hoist: 25.5.0 - babel-preset-current-node-syntax: 0.1.4(@babel/core@7.27.7) + babel-preset-current-node-syntax: 0.1.4(@babel/core@7.27.1) - babel-preset-jest@29.6.3(@babel/core@7.27.7): + babel-preset-jest@29.6.3(@babel/core@7.27.1): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.7) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.1) - babel-preset-jest@30.0.0(@babel/core@7.27.7): + babel-preset-jest@30.0.0(@babel/core@7.27.1): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 babel-plugin-jest-hoist: 30.0.0 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.7) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.1) - babel-preset-jest@30.2.0(@babel/core@7.27.7): + babel-preset-jest@30.0.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.27.7 - babel-plugin-jest-hoist: 30.2.0 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.7) + '@babel/core': 7.29.0 + babel-plugin-jest-hoist: 30.0.0 + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) babel-preset-react-app@3.1.2(babel-runtime@6.26.0): dependencies: @@ -38434,44 +43055,6 @@ snapshots: balanced-match@4.0.4: {} - bare-events@2.8.2: {} - - bare-fs@4.5.4: - dependencies: - bare-events: 2.8.2 - bare-path: 3.0.0 - bare-stream: 2.8.0(bare-events@2.8.2) - bare-url: 2.3.2 - fast-fifo: 1.3.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true - - bare-os@3.6.2: - optional: true - - bare-path@3.0.0: - dependencies: - bare-os: 3.6.2 - optional: true - - bare-stream@2.8.0(bare-events@2.8.2): - dependencies: - streamx: 2.23.0 - teex: 1.0.1 - optionalDependencies: - bare-events: 2.8.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true - - bare-url@2.3.2: - dependencies: - bare-path: 3.0.0 - optional: true - base16@1.0.0: {} base64-js@1.5.1: {} @@ -38482,6 +43065,8 @@ snapshots: dependencies: safe-buffer: 5.1.2 + batch-processor@1.0.0: {} + batch@0.6.1: {} bcrypt-pbkdf@1.0.2: @@ -38502,6 +43087,8 @@ snapshots: big.js@5.2.2: {} + bignumber.js@9.3.1: {} + binary-extensions@1.13.1: {} binary-extensions@2.3.0: {} @@ -38519,6 +43106,11 @@ snapshots: dependencies: file-uri-to-path: 1.0.0 + bl@1.2.3: + dependencies: + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + bl@4.1.0: dependencies: buffer: 5.7.1 @@ -38535,6 +43127,10 @@ snapshots: blueimp-md5@2.19.0: {} + bn.js@4.12.3: {} + + bn.js@5.2.3: {} + body-parser@1.20.4: dependencies: bytes: 3.1.2 @@ -38569,6 +43165,15 @@ snapshots: fast-deep-equal: 3.1.3 multicast-dns: 7.2.5 + bonjour@3.5.1: + dependencies: + array-flatten: 2.1.2 + deep-equal: 1.1.2 + dns-equal: 1.0.0 + dns-txt: 2.0.2 + multicast-dns: 7.2.5 + multicast-dns-service-types: 1.1.0 + boolbase@1.0.0: {} boundary@2.0.0: {} @@ -38585,6 +43190,17 @@ snapshots: term-size: 1.2.0 widest-line: 2.0.1 + boxen@4.2.0: + dependencies: + ansi-align: 3.0.1 + camelcase: 5.3.1 + chalk: 3.0.0 + cli-boxes: 2.2.1 + string-width: 4.2.3 + term-size: 2.2.1 + type-fest: 0.8.1 + widest-line: 3.1.0 + boxen@5.1.2: dependencies: ansi-align: 3.0.1 @@ -38614,7 +43230,7 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.3: + brace-expansion@5.0.4: dependencies: balanced-match: 4.0.4 @@ -38622,6 +43238,8 @@ snapshots: dependencies: fill-range: 7.1.1 + brorand@1.1.0: {} + browser-assert@1.2.1: {} browser-process-hrtime@1.0.0: {} @@ -38632,26 +43250,77 @@ snapshots: browser-stdout@1.3.1: {} + browserify-aes@1.2.0: + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.7 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + browserify-cipher@1.0.1: + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + + browserify-des@1.0.2: + dependencies: + cipher-base: 1.0.7 + des.js: 1.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + browserify-rsa@4.1.1: + dependencies: + bn.js: 4.12.3 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + + browserify-sign@4.2.5: + dependencies: + bn.js: 5.2.3 + browserify-rsa: 4.1.1 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.6.1 + inherits: 2.0.4 + parse-asn1: 5.1.9 + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + browserify-zlib@0.1.4: dependencies: pako: 0.2.9 + browserify-zlib@0.2.0: + dependencies: + pako: 1.0.11 + browserslist@1.7.7: dependencies: - caniuse-db: 1.0.30001772 - electron-to-chromium: 1.5.302 + caniuse-db: 1.0.30001777 + electron-to-chromium: 1.5.307 browserslist@2.11.3: dependencies: - caniuse-lite: 1.0.30001772 - electron-to-chromium: 1.5.302 + caniuse-lite: 1.0.30001777 + electron-to-chromium: 1.5.307 + + browserslist@4.14.2: + dependencies: + caniuse-lite: 1.0.30001777 + electron-to-chromium: 1.5.307 + escalade: 3.2.0 + node-releases: 1.1.77 browserslist@4.28.1: dependencies: baseline-browser-mapping: 2.10.0 - caniuse-lite: 1.0.30001772 - electron-to-chromium: 1.5.302 - node-releases: 2.0.27 + caniuse-lite: 1.0.30001777 + electron-to-chromium: 1.5.307 + node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.28.1) bs-logger@0.2.6: @@ -38666,14 +43335,33 @@ snapshots: dependencies: node-int64: 0.4.0 + buffer-alloc-unsafe@1.1.0: {} + + buffer-alloc@1.2.0: + dependencies: + buffer-alloc-unsafe: 1.1.0 + buffer-fill: 1.0.0 + buffer-crc32@0.2.13: {} buffer-equal-constant-time@1.0.1: {} + buffer-fill@1.0.0: {} + buffer-from@1.1.2: {} buffer-indexof-polyfill@1.0.2: {} + buffer-indexof@1.1.1: {} + + buffer-xor@1.0.3: {} + + buffer@4.9.2: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + isarray: 1.0.0 + buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -38698,6 +43386,8 @@ snapshots: builtin-modules@3.3.0: {} + builtin-status-codes@3.0.0: {} + bundle-name@4.1.0: dependencies: run-applescript: 7.1.0 @@ -38757,6 +43447,24 @@ snapshots: unique-filename: 1.1.1 y18n: 4.0.3 + cacache@12.0.4: + dependencies: + bluebird: 3.7.2 + chownr: 1.1.4 + figgy-pudding: 3.5.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + infer-owner: 1.0.4 + lru-cache: 5.1.1 + mississippi: 3.0.0 + mkdirp: 0.5.6 + move-concurrently: 1.0.1 + promise-inflight: 1.0.1 + rimraf: 2.7.1 + ssri: 6.0.2 + unique-filename: 1.1.1 + y18n: 4.0.3 + cacache@15.3.0: dependencies: '@npmcli/fs': 1.1.1 @@ -38821,10 +43529,10 @@ snapshots: normalize-url: 8.1.1 responselike: 3.0.0 - cacheable@2.3.2: + cacheable@2.3.3: dependencies: - '@cacheable/memory': 2.0.7 - '@cacheable/utils': 2.3.4 + '@cacheable/memory': 2.0.8 + '@cacheable/utils': 2.4.0 hookified: 1.15.1 keyv: 5.6.0 qified: 0.6.0 @@ -38878,6 +43586,8 @@ snapshots: quick-lru: 5.1.1 type-fest: 1.4.0 + camelcase@1.2.1: {} + camelcase@2.1.1: {} camelcase@3.0.0: {} @@ -38891,29 +43601,25 @@ snapshots: caniuse-api@1.6.1: dependencies: browserslist: 1.7.7 - caniuse-db: 1.0.30001772 + caniuse-db: 1.0.30001777 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 caniuse-api@3.0.0: dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001772 + caniuse-lite: 1.0.30001777 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-db@1.0.30001772: {} + caniuse-db@1.0.30001777: {} - caniuse-lite@1.0.30001772: {} + caniuse-lite@1.0.30001777: {} canvas@3.2.1: dependencies: node-addon-api: 7.1.1 prebuild-install: 7.1.3 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a optional: true capture-exit@2.0.0: @@ -38934,7 +43640,12 @@ snapshots: ccount@2.0.1: {} - chai@4.5.0: + center-align@0.1.3: + dependencies: + align-text: 0.1.4 + lazy-cache: 1.0.4 + + chai@4.3.10: dependencies: assertion-error: 1.1.0 check-error: 1.0.3 @@ -39026,7 +43737,7 @@ snapshots: parse5: 7.3.0 parse5-htmlparser2-tree-adapter: 7.1.0 parse5-parser-stream: 7.1.2 - undici: 7.21.0 + undici: 7.22.0 whatwg-mimetype: 4.0.0 chokidar@1.7.0: @@ -39042,6 +43753,34 @@ snapshots: optionalDependencies: fsevents: 1.2.13 + chokidar@2.1.8: + dependencies: + anymatch: 2.0.0 + async-each: 1.0.6 + braces: 3.0.3 + glob-parent: 3.1.0 + inherits: 2.0.4 + is-binary-path: 1.0.1 + is-glob: 4.0.3 + normalize-path: 3.0.0 + path-is-absolute: 1.0.1 + readdirp: 2.2.1 + upath: 1.2.0 + optionalDependencies: + fsevents: 1.2.13 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -39072,6 +43811,12 @@ snapshots: ci-info@4.4.0: {} + cipher-base@1.0.7: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + to-buffer: 1.2.2 + citty@0.1.6: dependencies: consola: 3.4.2 @@ -39088,6 +43833,8 @@ snapshots: dependencies: clsx: 2.1.1 + classnames@2.2.6: {} + classnames@2.5.1: {} clean-css@4.2.4: @@ -39110,14 +43857,6 @@ snapshots: cli-boxes@2.2.1: {} - cli-color@2.0.4: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-iterator: 2.0.3 - memoizee: 0.4.17 - timers-ext: 0.1.8 - cli-cursor@2.1.0: dependencies: restore-cursor: 2.0.0 @@ -39134,16 +43873,23 @@ snapshots: cli-spinners@2.9.2: {} + cli-table3@0.6.0: + dependencies: + object-assign: 4.1.1 + string-width: 4.2.3 + optionalDependencies: + colors: 1.4.0 + cli-table3@0.6.5: dependencies: string-width: 4.2.3 optionalDependencies: '@colors/colors': 1.5.0 - cli-truncate@5.1.1: + cli-truncate@4.0.0: dependencies: - slice-ansi: 7.1.2 - string-width: 8.1.1 + slice-ansi: 5.0.0 + string-width: 7.2.0 cli-width@2.2.1: {} @@ -39158,18 +43904,24 @@ snapshots: clipboardy@4.0.0: dependencies: execa: 8.0.1 - is-wsl: 3.1.0 + is-wsl: 3.1.1 is64bit: 2.0.0 - clipboardy@5.3.0: + clipboardy@5.3.1: dependencies: clipboard-image: 0.1.0 execa: 9.6.1 is-wayland: 0.1.0 - is-wsl: 3.1.0 + is-wsl: 3.1.1 is64bit: 2.0.0 powershell-utils: 0.2.0 + cliui@2.1.0: + dependencies: + center-align: 0.1.3 + right-align: 0.1.3 + wordwrap: 0.0.2 + cliui@3.2.0: dependencies: string-width: 1.0.2 @@ -39222,10 +43974,10 @@ snapshots: clsx@2.1.1: {} - cm6-theme-basic-light@0.2.0(@codemirror/language@6.11.3)(@codemirror/state@6.5.4)(@codemirror/view@6.38.8)(@lezer/highlight@1.2.3): + cm6-theme-basic-light@0.2.0(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.8)(@lezer/highlight@1.2.3): dependencies: '@codemirror/language': 6.11.3 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 '@lezer/highlight': 1.2.3 @@ -39253,24 +44005,24 @@ snapshots: code-point-at@1.1.0: {} - codemirror-graphql@2.2.4(@codemirror/language@6.11.3)(codemirror@5.65.21)(graphql@16.12.0): + codemirror-graphql@2.2.4(@codemirror/language@6.11.3)(codemirror@5.65.21)(graphql@16.11.0): dependencies: '@codemirror/language': 6.11.3 '@types/codemirror': 0.0.90 codemirror: 5.65.21 - graphql: 16.12.0 - graphql-language-service: 5.5.0(graphql@16.12.0) + graphql: 16.11.0 + graphql-language-service: 5.5.0(graphql@16.11.0) codemirror@5.65.21: {} codemirror@6.0.2: dependencies: '@codemirror/autocomplete': 6.19.1 - '@codemirror/commands': 6.10.2 + '@codemirror/commands': 6.10.0 '@codemirror/language': 6.11.3 '@codemirror/lint': 6.8.5 '@codemirror/search': 6.6.0 - '@codemirror/state': 6.5.4 + '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.8 collapse-white-space@1.0.6: {} @@ -39348,8 +44100,6 @@ snapshots: commander@13.1.0: {} - commander@14.0.3: {} - commander@2.13.0: {} commander@2.17.1: {} @@ -39388,6 +44138,8 @@ snapshots: safe-buffer: 5.2.1 vary: 1.1.2 + compute-scroll-into-view@1.0.20: {} + compute-scroll-into-view@2.0.4: {} concat-map@0.0.1: {} @@ -39425,10 +44177,14 @@ snapshots: confusing-browser-globals@1.0.11: {} + connect-history-api-fallback@1.6.0: {} + connect-history-api-fallback@2.0.0: {} consola@3.4.2: {} + console-browserify@1.2.0: {} + console-control-strings@1.1.0: {} constants-browserify@1.0.0: {} @@ -39473,19 +44229,19 @@ snapshots: dependencies: toggle-selection: 1.0.6 - copy-webpack-plugin@13.0.1(webpack@5.105.2): + copy-webpack-plugin@13.0.0(webpack@5.104.1): dependencies: glob-parent: 6.0.2 normalize-path: 3.0.0 schema-utils: 4.3.3 - serialize-javascript: 6.0.2 + serialize-javascript: 7.0.3 tinyglobby: 0.2.15 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) copyfiles@2.4.1: dependencies: glob: 7.2.3 - minimatch: 3.1.3 + minimatch: 3.1.4 mkdirp: 1.0.4 noms: 0.0.0 through2: 2.0.5 @@ -39508,7 +44264,7 @@ snapshots: cors-anywhere@0.4.4: dependencies: - http-proxy: 1.18.1 + http-proxy: 1.18.1(debug@3.2.7) proxy-from-env: 0.0.1 transitivePeerDependencies: - debug @@ -39555,7 +44311,7 @@ snapshots: optionalDependencies: typescript: 5.8.3 - cosmiconfig@9.0.0(typescript@5.8.3): + cosmiconfig@9.0.1(typescript@5.8.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 @@ -39578,7 +44334,7 @@ snapshots: duplexer: 0.1.2 glob: 7.2.3 glob2base: 0.0.12 - minimatch: 3.1.3 + minimatch: 3.1.4 mkdirp: 0.5.6 resolve: 1.6.0 safe-buffer: 5.2.1 @@ -39597,17 +44353,54 @@ snapshots: p-filter: 2.1.0 p-map: 3.0.0 + create-ecdh@4.0.4: + dependencies: + bn.js: 4.12.3 + elliptic: 6.6.1 + create-error-class@3.0.2: dependencies: capture-stack-trace: 1.0.2 - create-jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)): + create-hash@1.2.0: + dependencies: + cipher-base: 1.0.7 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.3 + sha.js: 2.4.12 + + create-hmac@1.1.7: + dependencies: + cipher-base: 1.0.7 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.3 + safe-buffer: 5.2.1 + sha.js: 2.4.12 + + create-jest@29.7.0(@types/node@22.15.19)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.15.19)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-jest@29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -39616,9 +44409,16 @@ snapshots: - supports-color - ts-node + create-react-context@0.3.0(prop-types@15.8.1)(react@18.2.0): + dependencies: + gud: 1.0.0 + prop-types: 15.8.1 + react: 18.2.0 + warning: 4.0.3 + create-require@1.1.1: {} - create-storybook@8.6.15: + create-storybook@8.6.14: dependencies: recast: 0.23.11 semver: 7.7.4 @@ -39657,12 +44457,33 @@ snapshots: shebang-command: 1.2.0 which: 1.3.1 + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + crypto-browserify@3.12.1: + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.5 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + hash-base: 3.0.5 + inherits: 2.0.4 + pbkdf2: 3.1.5 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + crypto-js@4.2.0: {} crypto-random-string@1.0.0: {} @@ -39675,9 +44496,9 @@ snapshots: css-color-names@0.0.4: {} - css-declaration-sorter@6.4.1(postcss@8.5.6): + css-declaration-sorter@6.4.1(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 css-functions-list@3.3.3: {} @@ -39698,7 +44519,24 @@ snapshots: postcss-value-parser: 3.3.1 source-list-map: 2.0.1 - css-loader@3.6.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + css-loader@3.6.0(webpack@4.47.0(webpack-cli@4.10.0)): + dependencies: + camelcase: 5.3.1 + cssesc: 3.0.0 + icss-utils: 4.1.1 + loader-utils: 1.4.2 + normalize-path: 3.0.0 + postcss: 7.0.39 + postcss-modules-extract-imports: 2.0.0 + postcss-modules-local-by-default: 3.0.3 + postcss-modules-scope: 2.2.0 + postcss-modules-values: 3.0.0 + postcss-value-parser: 4.2.0 + schema-utils: 2.7.1 + semver: 6.3.1 + webpack: 4.47.0(webpack-cli@4.10.0) + + css-loader@3.6.0(webpack@4.47.0(webpack-cli@6.0.1)): dependencies: camelcase: 5.3.1 cssesc: 3.0.0 @@ -39713,9 +44551,9 @@ snapshots: postcss-value-parser: 4.2.0 schema-utils: 2.7.1 semver: 6.3.1 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 4.47.0(webpack-cli@6.0.1) - css-loader@3.6.0(webpack@5.105.2): + css-loader@3.6.0(webpack@4.47.0): dependencies: camelcase: 5.3.1 cssesc: 3.0.0 @@ -39730,73 +44568,73 @@ snapshots: postcss-value-parser: 4.2.0 schema-utils: 2.7.1 semver: 6.3.1 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 4.47.0 - css-loader@5.2.7(webpack@5.105.2): + css-loader@5.2.7(webpack@5.104.1): dependencies: - icss-utils: 5.1.0(postcss@8.5.6) + icss-utils: 5.1.0(postcss@8.5.4) loader-utils: 2.0.4 - postcss: 8.5.6 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) - postcss-modules-scope: 3.2.1(postcss@8.5.6) - postcss-modules-values: 4.0.0(postcss@8.5.6) + postcss: 8.5.4 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.4) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.4) + postcss-modules-scope: 3.2.1(postcss@8.5.4) + postcss-modules-values: 4.0.0(postcss@8.5.4) postcss-value-parser: 4.2.0 schema-utils: 3.3.0 semver: 7.7.4 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) - css-loader@6.11.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)): + css-loader@6.11.0(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)): dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) - postcss-modules-scope: 3.2.1(postcss@8.5.6) - postcss-modules-values: 4.0.0(postcss@8.5.6) + icss-utils: 5.1.0(postcss@8.5.4) + postcss: 8.5.4 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.4) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.4) + postcss-modules-scope: 3.2.1(postcss@8.5.4) + postcss-modules-values: 4.0.0(postcss@8.5.4) postcss-value-parser: 4.2.0 semver: 7.7.4 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12) - css-loader@6.11.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + css-loader@6.11.0(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))): dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) - postcss-modules-scope: 3.2.1(postcss@8.5.6) - postcss-modules-values: 4.0.0(postcss@8.5.6) + icss-utils: 5.1.0(postcss@8.5.4) + postcss: 8.5.4 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.4) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.4) + postcss-modules-scope: 3.2.1(postcss@8.5.4) + postcss-modules-values: 4.0.0(postcss@8.5.4) postcss-value-parser: 4.2.0 semver: 7.7.4 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) - css-loader@6.11.0(webpack@5.105.2): + css-loader@6.11.0(webpack@5.104.1): dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) - postcss-modules-scope: 3.2.1(postcss@8.5.6) - postcss-modules-values: 4.0.0(postcss@8.5.6) + icss-utils: 5.1.0(postcss@8.5.4) + postcss: 8.5.4 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.4) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.4) + postcss-modules-scope: 3.2.1(postcss@8.5.4) + postcss-modules-values: 4.0.0(postcss@8.5.4) postcss-value-parser: 4.2.0 semver: 7.7.4 optionalDependencies: - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) - css-loader@7.1.3(webpack@5.105.2): + css-loader@7.1.2(webpack@5.104.1): dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) - postcss-modules-scope: 3.2.1(postcss@8.5.6) - postcss-modules-values: 4.0.0(postcss@8.5.6) + icss-utils: 5.1.0(postcss@8.5.4) + postcss: 8.5.4 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.4) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.4) + postcss-modules-scope: 3.2.1(postcss@8.5.4) + postcss-modules-values: 4.0.0(postcss@8.5.4) postcss-value-parser: 4.2.0 semver: 7.7.4 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) css-select@4.3.0: dependencies: @@ -39824,9 +44662,9 @@ snapshots: mdn-data: 2.0.14 source-map: 0.6.1 - css-tree@3.1.0: + css-tree@3.2.1: dependencies: - mdn-data: 2.12.2 + mdn-data: 2.27.1 source-map-js: 1.2.1 css-what@6.2.2: {} @@ -39835,42 +44673,42 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-default@5.2.14(postcss@8.5.6): - dependencies: - css-declaration-sorter: 6.4.1(postcss@8.5.6) - cssnano-utils: 3.1.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-calc: 8.2.4(postcss@8.5.6) - postcss-colormin: 5.3.1(postcss@8.5.6) - postcss-convert-values: 5.1.3(postcss@8.5.6) - postcss-discard-comments: 5.1.2(postcss@8.5.6) - postcss-discard-duplicates: 5.1.0(postcss@8.5.6) - postcss-discard-empty: 5.1.1(postcss@8.5.6) - postcss-discard-overridden: 5.1.0(postcss@8.5.6) - postcss-merge-longhand: 5.1.7(postcss@8.5.6) - postcss-merge-rules: 5.1.4(postcss@8.5.6) - postcss-minify-font-values: 5.1.0(postcss@8.5.6) - postcss-minify-gradients: 5.1.1(postcss@8.5.6) - postcss-minify-params: 5.1.4(postcss@8.5.6) - postcss-minify-selectors: 5.2.1(postcss@8.5.6) - postcss-normalize-charset: 5.1.0(postcss@8.5.6) - postcss-normalize-display-values: 5.1.0(postcss@8.5.6) - postcss-normalize-positions: 5.1.1(postcss@8.5.6) - postcss-normalize-repeat-style: 5.1.1(postcss@8.5.6) - postcss-normalize-string: 5.1.0(postcss@8.5.6) - postcss-normalize-timing-functions: 5.1.0(postcss@8.5.6) - postcss-normalize-unicode: 5.1.1(postcss@8.5.6) - postcss-normalize-url: 5.1.0(postcss@8.5.6) - postcss-normalize-whitespace: 5.1.1(postcss@8.5.6) - postcss-ordered-values: 5.1.3(postcss@8.5.6) - postcss-reduce-initial: 5.1.2(postcss@8.5.6) - postcss-reduce-transforms: 5.1.0(postcss@8.5.6) - postcss-svgo: 5.1.0(postcss@8.5.6) - postcss-unique-selectors: 5.1.1(postcss@8.5.6) - - cssnano-utils@3.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 + cssnano-preset-default@5.2.14(postcss@8.5.4): + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.5.4) + cssnano-utils: 3.1.0(postcss@8.5.4) + postcss: 8.5.4 + postcss-calc: 8.2.4(postcss@8.5.4) + postcss-colormin: 5.3.1(postcss@8.5.4) + postcss-convert-values: 5.1.3(postcss@8.5.4) + postcss-discard-comments: 5.1.2(postcss@8.5.4) + postcss-discard-duplicates: 5.1.0(postcss@8.5.4) + postcss-discard-empty: 5.1.1(postcss@8.5.4) + postcss-discard-overridden: 5.1.0(postcss@8.5.4) + postcss-merge-longhand: 5.1.7(postcss@8.5.4) + postcss-merge-rules: 5.1.4(postcss@8.5.4) + postcss-minify-font-values: 5.1.0(postcss@8.5.4) + postcss-minify-gradients: 5.1.1(postcss@8.5.4) + postcss-minify-params: 5.1.4(postcss@8.5.4) + postcss-minify-selectors: 5.2.1(postcss@8.5.4) + postcss-normalize-charset: 5.1.0(postcss@8.5.4) + postcss-normalize-display-values: 5.1.0(postcss@8.5.4) + postcss-normalize-positions: 5.1.1(postcss@8.5.4) + postcss-normalize-repeat-style: 5.1.1(postcss@8.5.4) + postcss-normalize-string: 5.1.0(postcss@8.5.4) + postcss-normalize-timing-functions: 5.1.0(postcss@8.5.4) + postcss-normalize-unicode: 5.1.1(postcss@8.5.4) + postcss-normalize-url: 5.1.0(postcss@8.5.4) + postcss-normalize-whitespace: 5.1.1(postcss@8.5.4) + postcss-ordered-values: 5.1.3(postcss@8.5.4) + postcss-reduce-initial: 5.1.2(postcss@8.5.4) + postcss-reduce-transforms: 5.1.0(postcss@8.5.4) + postcss-svgo: 5.1.0(postcss@8.5.4) + postcss-unique-selectors: 5.1.1(postcss@8.5.4) + + cssnano-utils@3.1.0(postcss@8.5.4): + dependencies: + postcss: 8.5.4 cssnano@3.10.0: dependencies: @@ -39907,11 +44745,11 @@ snapshots: postcss-value-parser: 3.3.1 postcss-zindex: 2.2.0 - cssnano@5.1.15(postcss@8.5.6): + cssnano@5.1.15(postcss@8.5.4): dependencies: - cssnano-preset-default: 5.2.14(postcss@8.5.6) + cssnano-preset-default: 5.2.14(postcss@8.5.4) lilconfig: 2.1.0 - postcss: 8.5.6 + postcss: 8.5.4 yaml: 1.10.2 csso@2.3.2: @@ -39941,6 +44779,8 @@ snapshots: dependencies: cssom: 0.3.8 + csstype@2.6.21: {} + csstype@3.2.3: {} cubic2quad@1.2.1: {} @@ -40021,6 +44861,18 @@ snapshots: dependencies: ms: 2.1.2 + debug@4.3.4(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.4.3(supports-color@5.5.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 5.5.0 + debug@4.4.3(supports-color@8.1.1): dependencies: ms: 2.1.3 @@ -40056,7 +44908,7 @@ snapshots: dedent@0.7.0: {} - dedent@1.7.1(babel-plugin-macros@3.1.0): + dedent@1.7.2(babel-plugin-macros@3.1.0): optionalDependencies: babel-plugin-macros: 3.1.0 @@ -40066,6 +44918,15 @@ snapshots: deep-eql@5.0.2: {} + deep-equal@1.1.2: + dependencies: + is-arguments: 1.2.0 + is-date-object: 1.1.0 + is-regex: 1.2.1 + object-is: 1.1.6 + object-keys: 1.1.1 + regexp.prototype.flags: 1.5.4 + deep-equal@2.2.3: dependencies: array-buffer-byte-length: 1.0.2 @@ -40091,6 +44952,8 @@ snapshots: deep-is@0.1.4: {} + deep-object-diff@1.1.9: {} + deepmerge@4.3.1: {} default-browser-id@1.0.4: @@ -40162,6 +45025,15 @@ snapshots: pinkie-promise: 2.0.1 rimraf: 2.7.1 + del@3.0.0: + dependencies: + globby: 6.1.0 + is-path-cwd: 1.0.0 + is-path-in-cwd: 1.0.1 + p-map: 1.2.0 + pify: 3.0.0 + rimraf: 2.7.1 + del@6.1.1: dependencies: globby: 11.1.0 @@ -40204,6 +45076,11 @@ snapshots: dequal@2.0.3: {} + des.js@1.1.0: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + destroy@1.2.0: {} detab@2.0.4: @@ -40230,7 +45107,7 @@ snapshots: detect-port-alt@1.1.6: dependencies: - address: 1.0.3 + address: 1.1.2 debug: 2.6.9 detect-port@1.6.1: @@ -40244,7 +45121,7 @@ snapshots: dependencies: dequal: 2.0.3 - dexie@4.3.0: {} + dexie@4.0.11: {} diagnostic-channel-publishers@0.3.5(diagnostic-channel@0.2.0): dependencies: @@ -40262,6 +45139,12 @@ snapshots: diff@8.0.3: {} + diffie-hellman@5.0.3: + dependencies: + bn.js: 4.12.3 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dir-glob@2.2.2: dependencies: path-type: 3.0.0 @@ -40278,10 +45161,16 @@ snapshots: '@react-dnd/invariant': 4.0.2 redux: 4.2.1 + dns-equal@1.0.0: {} + dns-packet@5.6.1: dependencies: '@leichtgewicht/ip-codec': 2.0.5 + dns-txt@2.0.2: + dependencies: + buffer-indexof: 1.1.1 + doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -40316,6 +45205,8 @@ snapshots: dom-walk@0.1.2: {} + domain-browser@1.2.0: {} + domelementtype@2.3.0: {} domexception@1.0.1: @@ -40334,7 +45225,7 @@ snapshots: dependencies: domelementtype: 2.3.0 - dompurify@3.2.4: + dompurify@3.3.2: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -40359,18 +45250,40 @@ snapshots: dependencies: is-obj: 1.0.1 + dotenv-defaults@1.1.1: + dependencies: + dotenv: 6.2.0 + dotenv-expand@10.0.0: {} dotenv-expand@4.2.0: {} dotenv-expand@5.1.0: {} + dotenv-webpack@1.8.0(webpack@4.47.0): + dependencies: + dotenv-defaults: 1.1.1 + webpack: 4.47.0 + + dotenv@16.0.3: {} + dotenv@16.5.0: {} dotenv@4.0.0: {} + dotenv@6.2.0: {} + dotenv@8.6.0: {} + downshift@6.1.12(react@18.2.0): + dependencies: + '@babel/runtime': 7.28.6 + compute-scroll-into-view: 1.0.20 + prop-types: 15.8.1 + react: 18.2.0 + react-is: 17.0.2 + tslib: 2.8.1 + downshift@7.6.2(react@18.2.0): dependencies: '@babel/runtime': 7.28.6 @@ -40424,7 +45337,21 @@ snapshots: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.302: {} + electron-to-chromium@1.5.307: {} + + element-resize-detector@1.2.4: + dependencies: + batch-processor: 1.0.0 + + elliptic@6.6.1: + dependencies: + bn.js: 4.12.3 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 email-addresses@5.0.0: {} @@ -40444,6 +45371,14 @@ snapshots: emojis-list@3.0.0: {} + emotion-theming@10.3.0(@emotion/core@10.3.1(react@18.2.0))(react@18.2.0): + dependencies: + '@babel/runtime': 7.28.6 + '@emotion/core': 10.3.1(react@18.2.0) + '@emotion/weak-memoize': 0.2.5 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + enabled@2.0.0: {} encodeurl@2.0.0: {} @@ -40475,7 +45410,13 @@ snapshots: object-assign: 4.1.1 tapable: 0.2.9 - enhanced-resolve@5.19.0: + enhanced-resolve@4.5.0: + dependencies: + graceful-fs: 4.2.11 + memory-fs: 0.5.0 + tapable: 1.1.3 + + enhanced-resolve@5.20.0: dependencies: graceful-fs: 4.2.11 tapable: 2.3.0 @@ -40636,7 +45577,7 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - es-toolkit@1.44.0: {} + es-toolkit@1.45.1: {} es5-ext@0.10.64: dependencies: @@ -40653,8 +45594,26 @@ snapshots: es5-ext: 0.10.64 es6-symbol: 3.1.4 + es6-map@0.1.5: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + es6-set: 0.1.6 + es6-symbol: 3.1.4 + event-emitter: 0.3.5 + es6-promise@4.2.8: {} + es6-set@0.1.6: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + event-emitter: 0.3.5 + type: 2.7.3 + es6-shim@0.35.8: {} es6-symbol@3.1.4: @@ -40671,6 +45630,13 @@ snapshots: esbuild-plugin-alias@0.2.1: {} + esbuild-register@3.6.0(esbuild@0.18.20): + dependencies: + debug: 4.4.3(supports-color@8.1.1) + esbuild: 0.18.20 + transitivePeerDependencies: + - supports-color + esbuild-register@3.6.0(esbuild@0.25.12): dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -40678,6 +45644,59 @@ snapshots: transitivePeerDependencies: - supports-color + esbuild@0.18.20: + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + + esbuild@0.24.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 + esbuild@0.25.12: optionalDependencies: '@esbuild/aix-ppc64': 0.25.12 @@ -40747,23 +45766,30 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@6.15.0(eslint@9.39.3(jiti@2.6.1)): + escope@3.6.0: + dependencies: + es6-map: 0.1.5 + es6-weak-map: 2.0.3 + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-config-prettier@6.15.0(eslint@9.39.4(jiti@2.6.1)): dependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) get-stdin: 6.0.0 - eslint-config-react-app@5.2.1(@typescript-eslint/eslint-plugin@2.34.0(@typescript-eslint/parser@2.34.0(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10))(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10))(@typescript-eslint/parser@2.34.0(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10))(babel-eslint@10.1.0(eslint@9.39.3(jiti@2.6.1)))(eslint-plugin-flowtype@3.13.0(eslint@9.39.3(jiti@2.6.1)))(eslint-plugin-import@2.32.0(eslint@9.39.3(jiti@2.6.1)))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.3(jiti@2.6.1)))(eslint-plugin-react-hooks@2.5.1(eslint@9.39.3(jiti@2.6.1)))(eslint-plugin-react@7.37.5(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1)): + eslint-config-react-app@5.2.1(@typescript-eslint/eslint-plugin@2.34.0(@typescript-eslint/parser@2.34.0(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10))(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10))(@typescript-eslint/parser@2.34.0(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10))(babel-eslint@10.1.0(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-flowtype@3.13.0(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-import@2.32.0(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-react-hooks@2.5.1(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)): dependencies: - '@typescript-eslint/eslint-plugin': 2.34.0(@typescript-eslint/parser@2.34.0(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10))(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10) - '@typescript-eslint/parser': 2.34.0(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10) - babel-eslint: 10.1.0(eslint@9.39.3(jiti@2.6.1)) + '@typescript-eslint/eslint-plugin': 2.34.0(@typescript-eslint/parser@2.34.0(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10))(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10) + '@typescript-eslint/parser': 2.34.0(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10) + babel-eslint: 10.1.0(eslint@9.39.4(jiti@2.6.1)) confusing-browser-globals: 1.0.11 - eslint: 9.39.3(jiti@2.6.1) - eslint-plugin-flowtype: 3.13.0(eslint@9.39.3(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(eslint@9.39.3(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.3(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.39.3(jiti@2.6.1)) - eslint-plugin-react-hooks: 2.5.1(eslint@9.39.3(jiti@2.6.1)) + eslint: 9.39.4(jiti@2.6.1) + eslint-plugin-flowtype: 3.13.0(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-react-hooks: 2.5.1(eslint@9.39.4(jiti@2.6.1)) eslint-import-resolver-node@0.3.9: dependencies: @@ -40771,18 +45797,18 @@ snapshots: is-core-module: 2.16.1 resolve: 1.22.11 - eslint-module-utils@2.12.1(eslint@9.39.3(jiti@2.6.1)): + eslint-module-utils@2.12.1(eslint@9.39.4(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) - eslint-plugin-flowtype@3.13.0(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-flowtype@3.13.0(eslint@9.39.4(jiti@2.6.1)): dependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) lodash: 4.17.23 - eslint-plugin-import@2.32.0(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-import@2.32.0(eslint@9.39.4(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -40791,13 +45817,13 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(eslint@9.39.3(jiti@2.6.1)) + eslint-module-utils: 2.12.1(eslint@9.39.4(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 - minimatch: 3.1.3 + minimatch: 3.1.4 object.fromentries: 2.0.8 object.groupby: 1.0.3 object.values: 1.2.1 @@ -40805,7 +45831,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 - eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4(jiti@2.6.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -40815,40 +45841,63 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 - minimatch: 3.1.3 + minimatch: 3.1.4 object.fromentries: 2.0.8 safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-prettier@3.4.1(eslint-config-prettier@6.15.0(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1))(prettier@1.19.1): + eslint-plugin-prettier@3.4.1(eslint-config-prettier@6.15.0(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1))(prettier@1.19.1): dependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) prettier: 1.19.1 prettier-linter-helpers: 1.0.1 optionalDependencies: - eslint-config-prettier: 6.15.0(eslint@9.39.3(jiti@2.6.1)) + eslint-config-prettier: 6.15.0(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-react-hooks@2.5.1(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-react-hooks@2.5.1(eslint@9.39.4(jiti@2.6.1)): dependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) - eslint-plugin-react-hooks@4.6.0(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-react-hooks@4.6.0(eslint@9.39.4(jiti@2.6.1)): dependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) - eslint-plugin-react-hooks@5.2.0(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-react-hooks@5.2.0(eslint@9.39.4(jiti@2.6.1)): dependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) - eslint-plugin-react-refresh@0.4.20(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-react-refresh@0.4.20(eslint@9.39.4(jiti@2.6.1)): dependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) - eslint-plugin-react@7.37.5(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-react-refresh@0.4.4(eslint@9.39.4(jiti@2.6.1)): + dependencies: + eslint: 9.39.4(jiti@2.6.1) + + eslint-plugin-react@7.33.1(eslint@9.39.4(jiti@2.6.1)): + dependencies: + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + eslint: 9.39.4(jiti@2.6.1) + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.4 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.hasown: 1.1.4 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.6 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + + eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.6.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -40856,36 +45905,41 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.2 - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 - minimatch: 3.1.3 + minimatch: 3.1.4 object.entries: 1.1.9 object.fromentries: 2.0.8 object.values: 1.2.1 prop-types: 15.8.1 - resolve: 2.0.0-next.5 + resolve: 2.0.0-next.6 semver: 6.3.1 string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-storybook@0.8.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3): + eslint-plugin-storybook@0.8.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3): dependencies: '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.62.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) - eslint: 9.39.3(jiti@2.6.1) + '@typescript-eslint/utils': 5.62.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + eslint: 9.39.4(jiti@2.6.1) requireindex: 1.2.0 ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1)): dependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.33.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + + eslint-scope@4.0.3: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 eslint-scope@5.1.1: dependencies: @@ -40907,16 +45961,16 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.39.3(jiti@2.6.1): + eslint@9.39.4(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.1 + '@eslint/config-array': 0.21.2 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.3 - '@eslint/js': 9.39.3 - '@eslint/plugin-kit': 0.3.5 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 + '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -40940,7 +45994,7 @@ snapshots: is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 - minimatch: 3.1.3 + minimatch: 3.1.4 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: @@ -41015,18 +46069,10 @@ snapshots: d: 1.0.2 es5-ext: 0.10.64 - event-target-shim@5.0.1: {} - eventemitter3@4.0.7: {} eventemitter3@5.0.4: {} - events-universal@1.0.1: - dependencies: - bare-events: 2.8.2 - transitivePeerDependencies: - - bare-abort-controller - events@3.3.0: {} eventsource-parser@3.0.6: {} @@ -41039,6 +46085,11 @@ snapshots: dependencies: eventsource-parser: 3.0.6 + evp_bytestokey@1.0.3: + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + exec-sh@0.2.2: dependencies: merge: 1.2.1 @@ -41187,10 +46238,10 @@ snapshots: exponential-backoff@3.1.3: {} - express-rate-limit@8.2.1(express@5.2.1): + express-rate-limit@8.2.2(express@5.2.1): dependencies: express: 5.2.1 - ip-address: 10.0.1 + ip-address: 10.1.0 express@4.22.1: dependencies: @@ -41276,12 +46327,12 @@ snapshots: iconv-lite: 0.4.24 tmp: 0.0.33 - extract-text-webpack-plugin@3.0.2(webpack@5.105.2): + extract-text-webpack-plugin@3.0.2(webpack@3.8.1): dependencies: async: 2.6.4 loader-utils: 1.4.2 schema-utils: 0.3.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 3.8.1 webpack-sources: 1.4.3 extract-zip@1.7.0: @@ -41293,30 +46344,12 @@ snapshots: extsprintf@1.3.0: {} - fantasticon@3.0.0: - dependencies: - case: 1.6.3 - cli-color: 2.0.4 - commander: 12.1.0 - glob: 10.5.0 - handlebars: 4.7.8 - slugify: 1.6.6 - svg2ttf: 6.0.3 - svgicons2svgfont: 12.0.0 - ttf2eot: 3.1.0 - ttf2woff: 3.0.0 - ttf2woff2: 5.0.0 - transitivePeerDependencies: - - supports-color - fast-deep-equal@1.1.0: {} fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} - fast-fifo@1.3.2: {} - fast-glob@2.2.7: dependencies: '@mrmlnc/readdir-enhanced': 2.2.1 @@ -41346,9 +46379,9 @@ snapshots: fast-uri@3.1.0: {} - fast-xml-parser@5.3.7: + fast-xml-parser@5.3.8: dependencies: - strnum: 2.1.2 + strnum: 2.2.0 fastest-levenshtein@1.0.16: {} @@ -41366,6 +46399,10 @@ snapshots: dependencies: format: 0.2.2 + faye-websocket@0.10.0: + dependencies: + websocket-driver: 0.7.4 + faye-websocket@0.11.4: dependencies: websocket-driver: 0.7.4 @@ -41419,15 +46456,21 @@ snapshots: fetch-retry@5.0.6: {} + figgy-pudding@3.5.2: {} + figures@2.0.0: dependencies: escape-string-regexp: 1.0.5 + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + figures@6.1.0: dependencies: is-unicode-supported: 2.1.0 - file-entry-cache@11.1.2: + file-entry-cache@10.1.4: dependencies: flat-cache: 6.1.20 @@ -41438,26 +46481,38 @@ snapshots: file-js@0.3.0: dependencies: bluebird: 3.7.2 - minimatch: 3.1.3 + minimatch: 3.1.4 proper-lockfile: 1.2.0 - file-loader@1.1.5(webpack@5.105.2): + file-loader@1.1.5(webpack@3.8.1): dependencies: loader-utils: 1.4.2 schema-utils: 0.3.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 3.8.1 - file-loader@6.2.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + file-loader@6.2.0(webpack@4.47.0(webpack-cli@4.10.0)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 4.47.0(webpack-cli@4.10.0) - file-loader@6.2.0(webpack@5.105.2): + file-loader@6.2.0(webpack@4.47.0(webpack-cli@6.0.1)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 4.47.0(webpack-cli@6.0.1) + + file-loader@6.2.0(webpack@4.47.0): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 4.47.0 + + file-loader@6.2.0(webpack@5.104.1): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) file-system-cache@1.1.0: dependencies: @@ -41469,11 +46524,14 @@ snapshots: fs-extra: 11.1.1 ramda: 0.29.0 - file-type@18.7.0: + file-type@21.3.1: dependencies: - readable-web-to-node-stream: 3.0.4 - strtok3: 7.1.1 - token-types: 5.0.1 + '@tokenizer/inflate': 0.4.1 + strtok3: 10.3.4 + token-types: 6.1.2 + uint8array-extras: 1.5.0 + transitivePeerDependencies: + - supports-color file-uri-to-path@1.0.0: {} @@ -41484,13 +46542,13 @@ snapshots: bluebird: 3.7.2 file-js: 0.3.0 lodash: 4.17.23 - minimatch: 5.1.7 + minimatch: 5.1.8 moment: 2.30.1 unit-compare: 1.0.1 - filelist@1.0.5: + filelist@1.0.6: dependencies: - minimatch: 10.2.2 + minimatch: 5.1.8 filename-reserved-regex@2.0.0: {} @@ -41503,10 +46561,12 @@ snapshots: fileset@2.0.3: dependencies: glob: 7.2.3 - minimatch: 3.1.3 + minimatch: 3.1.4 filesize@3.5.11: {} + filesize@6.1.0: {} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -41557,7 +46617,7 @@ snapshots: find-index@0.1.1: {} - find-process@1.4.11: + find-process@1.4.10: dependencies: chalk: 4.1.2 commander: 12.1.0 @@ -41601,28 +46661,28 @@ snapshots: flat-cache@3.2.0: dependencies: - flatted: 3.3.3 + flatted: 3.4.0 keyv: 4.5.4 rimraf: 3.0.2 flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.4.0 keyv: 4.5.4 flat-cache@6.1.20: dependencies: - cacheable: 2.3.2 - flatted: 3.3.3 + cacheable: 2.3.3 + flatted: 3.4.0 hookified: 1.15.1 flat@5.0.2: {} - flatted@3.3.3: {} + flatted@3.4.0: {} flatten@1.0.3: {} - flow-parser@0.302.0: {} + flow-parser@0.304.0: {} flush-write-stream@1.1.1: dependencies: @@ -41639,7 +46699,9 @@ snapshots: fn.name@1.1.0: {} - follow-redirects@1.15.11: {} + follow-redirects@1.15.11(debug@3.2.7): + optionalDependencies: + debug: 3.2.7 for-each@0.3.5: dependencies: @@ -41657,7 +46719,7 @@ snapshots: forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@0.2.10(typescript@5.8.3)(webpack@5.105.2): + fork-ts-checker-webpack-plugin@0.2.10(typescript@5.8.3)(webpack@3.8.1): dependencies: babel-code-frame: 6.26.0 chalk: 1.1.3 @@ -41666,21 +46728,21 @@ snapshots: lodash.isfunction: 3.0.9 lodash.isstring: 4.0.1 lodash.startswith: 4.2.1 - minimatch: 3.1.3 + minimatch: 3.1.4 typescript: 5.8.3 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 3.8.1 fork-ts-checker-webpack-plugin@4.1.6: dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.10.4 chalk: 2.4.2 micromatch: 4.0.8 - minimatch: 3.1.3 + minimatch: 3.1.4 semver: 5.7.2 tapable: 1.1.3 worker-rpc: 0.1.1 - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.39.3(jiti@2.6.1))(typescript@4.9.5)(webpack@5.105.2): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.39.4(jiti@2.6.1))(typescript@4.9.4)(webpack@4.47.0): dependencies: '@babel/code-frame': 7.29.0 '@types/json-schema': 7.0.15 @@ -41691,16 +46753,16 @@ snapshots: fs-extra: 9.1.0 glob: 7.2.3 memfs: 3.5.3 - minimatch: 3.1.3 + minimatch: 3.1.4 schema-utils: 2.7.0 semver: 7.7.4 tapable: 1.1.3 - typescript: 4.9.5 - webpack: 5.105.2(webpack-cli@5.1.4) + typescript: 4.9.4 + webpack: 4.47.0 optionalDependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)(webpack@4.47.0(webpack-cli@4.10.0)): dependencies: '@babel/code-frame': 7.29.0 '@types/json-schema': 7.0.15 @@ -41711,16 +46773,16 @@ snapshots: fs-extra: 9.1.0 glob: 7.2.3 memfs: 3.5.3 - minimatch: 3.1.3 + minimatch: 3.1.4 schema-utils: 2.7.0 semver: 7.7.4 tapable: 1.1.3 typescript: 5.8.3 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 4.47.0(webpack-cli@4.10.0) optionalDependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)(webpack@5.105.2): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)(webpack@4.47.0(webpack-cli@6.0.1)): dependencies: '@babel/code-frame': 7.29.0 '@types/json-schema': 7.0.15 @@ -41731,16 +46793,56 @@ snapshots: fs-extra: 9.1.0 glob: 7.2.3 memfs: 3.5.3 - minimatch: 3.1.3 + minimatch: 3.1.4 schema-utils: 2.7.0 semver: 7.7.4 tapable: 1.1.3 typescript: 5.8.3 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 4.47.0(webpack-cli@6.0.1) optionalDependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)(webpack@4.47.0): + dependencies: + '@babel/code-frame': 7.29.0 + '@types/json-schema': 7.0.15 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 6.0.0 + deepmerge: 4.3.1 + fs-extra: 9.1.0 + glob: 7.2.3 + memfs: 3.5.3 + minimatch: 3.1.4 + schema-utils: 2.7.0 + semver: 7.7.4 + tapable: 1.1.3 + typescript: 5.8.3 + webpack: 4.47.0 + optionalDependencies: + eslint: 9.39.4(jiti@2.6.1) + + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)(webpack@5.104.1): + dependencies: + '@babel/code-frame': 7.29.0 + '@types/json-schema': 7.0.15 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 6.0.0 + deepmerge: 4.3.1 + fs-extra: 9.1.0 + glob: 7.2.3 + memfs: 3.5.3 + minimatch: 3.1.4 + schema-utils: 2.7.0 + semver: 7.7.4 + tapable: 1.1.3 + typescript: 5.8.3 + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + optionalDependencies: + eslint: 9.39.4(jiti@2.6.1) + + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)): dependencies: '@babel/code-frame': 7.29.0 chalk: 4.1.2 @@ -41749,15 +46851,15 @@ snapshots: deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 - minimatch: 3.1.3 + minimatch: 3.1.4 node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.7.4 tapable: 2.3.0 typescript: 5.8.3 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12) - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))): dependencies: '@babel/code-frame': 7.29.0 chalk: 4.1.2 @@ -41766,15 +46868,15 @@ snapshots: deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 - minimatch: 3.1.3 + minimatch: 3.1.4 node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.7.4 tapable: 2.3.0 typescript: 5.8.3 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.105.2): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.104.1): dependencies: '@babel/code-frame': 7.29.0 chalk: 4.1.2 @@ -41783,15 +46885,15 @@ snapshots: deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 - minimatch: 3.1.3 + minimatch: 3.1.4 node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.7.4 tapable: 2.3.0 typescript: 5.8.3 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) - fork-ts-checker-webpack-plugin@9.1.0(typescript@5.8.3)(webpack@5.105.2): + fork-ts-checker-webpack-plugin@9.1.0(typescript@5.8.3)(webpack@5.104.1): dependencies: '@babel/code-frame': 7.29.0 chalk: 4.1.2 @@ -41800,18 +46902,24 @@ snapshots: deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 - minimatch: 3.1.3 + minimatch: 3.1.4 node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.7.4 tapable: 2.3.0 typescript: 5.8.3 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) form-data-encoder@2.1.4: {} form-data-encoder@4.1.0: {} + form-data@2.3.3: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + form-data@4.0.5: dependencies: asynckit: 0.4.0 @@ -41828,7 +46936,17 @@ snapshots: forwarded@0.2.0: {} - fraction.js@5.3.4: {} + fraction.js@4.3.7: {} + + framer-motion@11.18.2(@emotion/is-prop-valid@1.4.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + motion-dom: 11.18.1 + motion-utils: 11.18.1 + tslib: 2.8.1 + optionalDependencies: + '@emotion/is-prop-valid': 1.4.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) framer-motion@6.5.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: @@ -41856,6 +46974,8 @@ snapshots: inherits: 2.0.4 readable-stream: 2.3.8 + fs-constants@1.0.0: {} + fs-extra@0.30.0: dependencies: graceful-fs: 4.2.11 @@ -41882,7 +47002,13 @@ snapshots: jsonfile: 6.2.0 universalify: 2.0.1 - fs-extra@11.3.3: + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs-extra@11.3.4: dependencies: graceful-fs: 4.2.11 jsonfile: 6.2.0 @@ -41962,6 +47088,8 @@ snapshots: functions-have-names@1.2.3: {} + fuse.js@3.6.1: {} + gauge@2.7.4: dependencies: aproba: 1.2.0 @@ -41996,6 +47124,23 @@ snapshots: strip-ansi: 6.0.1 wide-align: 1.1.5 + gaxios@7.1.3: + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + rimraf: 5.0.5 + transitivePeerDependencies: + - supports-color + + gcp-metadata@8.1.2: + dependencies: + gaxios: 7.1.3 + google-logging-utils: 1.1.3 + json-bigint: 1.0.0 + transitivePeerDependencies: + - supports-color + generator-function@2.0.1: {} generic-names@4.0.0: @@ -42046,11 +47191,11 @@ snapshots: get-stream@4.1.0: dependencies: - pump: 3.0.3 + pump: 3.0.4 get-stream@5.2.0: dependencies: - pump: 3.0.3 + pump: 3.0.4 get-stream@6.0.1: {} @@ -42084,7 +47229,7 @@ snapshots: email-addresses: 5.0.0 filenamify: 4.3.0 find-cache-dir: 3.3.2 - fs-extra: 11.3.3 + fs-extra: 11.3.0 globby: 11.1.0 giget@1.2.5: @@ -42101,6 +47246,11 @@ snapshots: github-slugger@1.5.0: {} + glob-base@0.3.0: + dependencies: + glob-parent: 2.0.0 + is-glob: 2.0.1 + glob-parent@2.0.0: dependencies: is-glob: 2.0.1 @@ -42120,7 +47270,7 @@ snapshots: glob-promise@3.4.0(glob@7.2.3): dependencies: - '@types/glob': 8.1.0 + '@types/glob': 8.0.0 glob: 7.2.3 glob-to-regex.js@1.2.0(tslib@2.8.1): @@ -42139,16 +47289,25 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 - minimatch: 9.0.6 + minimatch: 9.0.7 minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@11.0.2: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.2.3 + minimatch: 10.2.3 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.2 + glob@11.1.0: dependencies: foreground-child: 3.3.1 jackspeak: 4.2.3 - minimatch: 10.2.2 + minimatch: 10.2.3 minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 2.0.2 @@ -42157,7 +47316,16 @@ snapshots: dependencies: inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.3 + minimatch: 3.1.5 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.4 once: 1.4.0 path-is-absolute: 1.0.1 @@ -42166,7 +47334,7 @@ snapshots: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.3 + minimatch: 3.1.4 once: 1.4.0 path-is-absolute: 1.0.1 @@ -42175,7 +47343,7 @@ snapshots: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 5.1.7 + minimatch: 5.1.8 once: 1.4.0 global-dirs@0.1.1: @@ -42222,6 +47390,15 @@ snapshots: globalyzer@0.1.0: {} + globby@11.0.1: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -42257,6 +47434,14 @@ snapshots: pify: 2.3.0 pinkie-promise: 2.0.1 + globby@6.1.0: + dependencies: + array-union: 1.0.2 + glob: 7.2.3 + object-assign: 4.1.1 + pify: 2.3.0 + pinkie-promise: 2.0.1 + globby@9.2.0: dependencies: '@types/glob': 7.2.0 @@ -42272,6 +47457,19 @@ snapshots: globrex@0.1.2: {} + google-auth-library@10.6.1: + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 7.1.3 + gcp-metadata: 8.1.2 + google-logging-utils: 1.1.3 + jws: 4.0.1 + transitivePeerDependencies: + - supports-color + + google-logging-utils@1.1.3: {} + gopd@1.2.0: {} got@13.0.0: @@ -42320,16 +47518,16 @@ snapshots: graphemer@1.4.0: {} - graphiql-explorer@0.9.0(graphql@16.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + graphiql-explorer@0.9.0(graphql@16.11.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - graphql: 16.12.0 + graphql: 16.11.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - graphiql@3.7.0(@codemirror/language@6.11.3)(@types/node@22.15.35)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + graphiql@3.7.0(@codemirror/language@6.11.3)(@types/node@22.15.24)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.11.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@graphiql/react': 0.26.2(@codemirror/language@6.11.3)(@types/node@22.15.35)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - graphql: 16.12.0 + '@graphiql/react': 0.26.2(@codemirror/language@6.11.3)(@types/node@22.15.24)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.11.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + graphql: 16.11.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -42343,17 +47541,19 @@ snapshots: dependencies: lodash: 4.17.23 - graphql-language-service@5.5.0(graphql@16.12.0): + graphql-language-service@5.5.0(graphql@16.11.0): dependencies: debounce-promise: 3.1.2 - graphql: 16.12.0 + graphql: 16.11.0 nullthrows: 1.1.1 vscode-languageserver-types: 3.17.5 - graphql@16.12.0: {} + graphql@16.11.0: {} growly@1.3.0: {} + gud@1.0.0: {} + gunzip-maybe@1.4.2: dependencies: browserify-zlib: 0.1.4 @@ -42367,6 +47567,13 @@ snapshots: dependencies: duplexer: 0.1.2 + gzip-size@5.1.1: + dependencies: + duplexer: 0.1.2 + pify: 4.0.1 + + handle-thing@1.2.5: {} + handle-thing@2.0.1: {} handlebars@4.7.8: @@ -42397,6 +47604,8 @@ snapshots: has-flag@1.0.0: {} + has-flag@2.0.0: {} + has-flag@3.0.0: {} has-flag@4.0.0: {} @@ -42423,6 +47632,23 @@ snapshots: has@1.0.4: {} + hash-base@3.0.5: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + hash-base@3.1.2: + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + to-buffer: 1.2.2 + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + hashery@1.5.0: dependencies: hookified: 1.15.1 @@ -42441,12 +47667,34 @@ snapshots: unist-util-is: 4.1.0 web-namespaces: 1.1.4 + hast-util-from-dom@5.0.1: + dependencies: + '@types/hast': 3.0.4 + hastscript: 9.0.1 + web-namespaces: 2.0.1 + + hast-util-from-html-isomorphic@2.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-dom: 5.0.1 + hast-util-from-html: 2.0.3 + unist-util-remove-position: 5.0.0 + + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 + vfile: 6.0.3 + vfile-message: 4.0.3 + hast-util-from-parse5@6.0.1: dependencies: '@types/parse5': 5.0.3 hastscript: 6.0.0 property-information: 5.6.0 - vfile: 6.0.3 + vfile: 4.2.1 vfile-location: 3.2.0 web-namespaces: 1.1.4 @@ -42456,7 +47704,7 @@ snapshots: '@types/unist': 2.0.11 hastscript: 7.2.0 property-information: 6.5.0 - vfile: 6.0.3 + vfile: 5.3.7 vfile-location: 4.1.0 web-namespaces: 2.0.1 @@ -42471,6 +47719,10 @@ snapshots: vfile-location: 5.0.3 web-namespaces: 2.0.1 + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-parse-selector@2.2.5: {} hast-util-parse-selector@3.1.1: @@ -42489,7 +47741,7 @@ snapshots: html-void-elements: 1.0.5 parse5: 6.0.1 unist-util-position: 3.1.0 - vfile: 6.0.3 + vfile: 4.2.1 web-namespaces: 1.1.4 xtend: 4.0.2 zwitch: 1.0.5 @@ -42504,7 +47756,7 @@ snapshots: parse5: 6.0.1 unist-util-position: 4.0.4 unist-util-visit: 4.1.2 - vfile: 6.0.3 + vfile: 5.3.7 web-namespaces: 2.0.1 zwitch: 2.0.4 @@ -42571,6 +47823,13 @@ snapshots: web-namespaces: 2.0.1 zwitch: 2.0.4 + hast-util-to-text@4.0.2: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + hast-util-whitespace@3.0.0: dependencies: '@types/hast': 3.0.4 @@ -42611,6 +47870,12 @@ snapshots: highlightjs-vue@1.0.0: {} + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 @@ -42624,7 +47889,7 @@ snapshots: dependencies: parse-passwd: 1.0.0 - hono@4.12.1: {} + hono@4.12.7: {} hookified@1.15.1: {} @@ -42647,6 +47912,8 @@ snapshots: hpagent@1.2.0: {} + htm@3.1.1: {} + html-comment-regex@1.1.2: {} html-encoding-sniffer@1.0.2: @@ -42657,6 +47924,8 @@ snapshots: dependencies: whatwg-encoding: 2.0.0 + html-entities@1.4.0: {} + html-entities@2.6.0: {} html-escaper@2.0.2: {} @@ -42703,7 +47972,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@2.29.0(webpack@5.105.2): + html-webpack-plugin@2.29.0(webpack@3.8.1): dependencies: bluebird: 3.7.2 html-minifier: 3.5.21 @@ -42711,9 +47980,22 @@ snapshots: lodash: 4.17.23 pretty-error: 2.1.2 toposort: 1.0.7 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 3.8.1 + + html-webpack-plugin@4.5.2(webpack@4.47.0(webpack-cli@4.10.0)): + dependencies: + '@types/html-minifier-terser': 5.1.2 + '@types/tapable': 1.0.12 + '@types/webpack': 4.41.40 + html-minifier-terser: 5.1.1 + loader-utils: 1.4.2 + lodash: 4.17.23 + pretty-error: 2.1.2 + tapable: 1.1.3 + util.promisify: 1.0.0 + webpack: 4.47.0(webpack-cli@4.10.0) - html-webpack-plugin@4.5.2(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + html-webpack-plugin@4.5.2(webpack@4.47.0(webpack-cli@6.0.1)): dependencies: '@types/html-minifier-terser': 5.1.2 '@types/tapable': 1.0.12 @@ -42724,9 +48006,9 @@ snapshots: pretty-error: 2.1.2 tapable: 1.1.3 util.promisify: 1.0.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 4.47.0(webpack-cli@6.0.1) - html-webpack-plugin@4.5.2(webpack@5.105.2): + html-webpack-plugin@4.5.2(webpack@4.47.0): dependencies: '@types/html-minifier-terser': 5.1.2 '@types/tapable': 1.0.12 @@ -42737,9 +48019,9 @@ snapshots: pretty-error: 2.1.2 tapable: 1.1.3 util.promisify: 1.0.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 4.47.0 - html-webpack-plugin@5.6.6(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)): + html-webpack-plugin@5.6.6(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -42747,9 +48029,9 @@ snapshots: pretty-error: 4.0.0 tapable: 2.3.0 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12) - html-webpack-plugin@5.6.6(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + html-webpack-plugin@5.6.6(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -42757,9 +48039,9 @@ snapshots: pretty-error: 4.0.0 tapable: 2.3.0 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) - html-webpack-plugin@5.6.6(webpack@5.105.2): + html-webpack-plugin@5.6.6(webpack@5.104.1): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -42767,7 +48049,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.3.0 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) htmlparser2@10.1.0: dependencies: @@ -42807,7 +48089,7 @@ snapshots: http-proxy-agent@4.0.1: dependencies: - '@tootallnate/once': 1.1.2 + '@tootallnate/once': 3.0.1 agent-base: 6.0.2 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: @@ -42815,7 +48097,7 @@ snapshots: http-proxy-agent@5.0.0: dependencies: - '@tootallnate/once': 2.0.0 + '@tootallnate/once': 3.0.1 agent-base: 6.0.2 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: @@ -42828,10 +48110,19 @@ snapshots: transitivePeerDependencies: - supports-color + http-proxy-middleware@0.17.4(debug@3.2.7): + dependencies: + http-proxy: 1.18.1(debug@3.2.7) + is-glob: 3.1.0 + lodash: 4.17.23 + micromatch: 4.0.8 + transitivePeerDependencies: + - debug + http-proxy-middleware@2.0.9(@types/express@4.17.25): dependencies: '@types/http-proxy': 1.17.17 - http-proxy: 1.18.1 + http-proxy: 1.18.1(debug@3.2.7) is-glob: 4.0.3 is-plain-obj: 3.0.0 micromatch: 4.0.8 @@ -42840,10 +48131,10 @@ snapshots: transitivePeerDependencies: - debug - http-proxy@1.18.1: + http-proxy@1.18.1(debug@3.2.7): dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.11 + follow-redirects: 1.15.11(debug@3.2.7) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -42855,11 +48146,11 @@ snapshots: corser: 2.0.1 he: 1.2.0 html-encoding-sniffer: 3.0.0 - http-proxy: 1.18.1 + http-proxy: 1.18.1(debug@3.2.7) mime: 1.6.0 minimist: 1.2.8 opener: 1.5.2 - portfinder: 1.0.38 + portfinder: 1.0.37 secure-compare: 3.0.1 union: 0.5.0 url-join: 4.0.1 @@ -42878,6 +48169,8 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 + https-browserify@1.0.0: {} + https-proxy-agent@4.0.0: dependencies: agent-base: 5.1.1 @@ -42946,9 +48239,9 @@ snapshots: dependencies: postcss: 7.0.39 - icss-utils@5.1.0(postcss@8.5.6): + icss-utils@5.1.0(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 identity-obj-proxy@3.0.0: dependencies: @@ -42966,9 +48259,9 @@ snapshots: immediate@3.0.6: {} - immutable@3.8.2: {} + immer@8.0.1: {} - immutable@5.1.4: {} + immutable@3.8.3: {} import-cwd@3.0.0: dependencies: @@ -42985,6 +48278,11 @@ snapshots: import-lazy@2.1.0: {} + import-local@1.0.0: + dependencies: + pkg-dir: 2.0.0 + resolve-cwd: 2.0.0 + import-local@3.2.0: dependencies: pkg-dir: 4.2.0 @@ -43038,6 +48336,10 @@ snapshots: strip-ansi: 4.0.0 through: 2.3.8 + internal-ip@1.2.0: + dependencies: + meow: 3.7.0 + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -43052,11 +48354,11 @@ snapshots: intersection-observer@0.10.0: {} - intl-messageformat@10.7.18: + intl-messageformat@10.7.16: dependencies: - '@formatjs/ecma402-abstract': 2.3.6 + '@formatjs/ecma402-abstract': 2.3.4 '@formatjs/fast-memoize': 2.2.7 - '@formatjs/icu-messageformat-parser': 2.11.4 + '@formatjs/icu-messageformat-parser': 2.11.2 tslib: 2.8.1 invariant@2.2.4: @@ -43065,14 +48367,14 @@ snapshots: invert-kv@1.0.0: {} - ip-address@10.0.1: {} - ip-address@10.1.0: {} ip-regex@2.1.0: {} ip-regex@4.3.0: {} + ip@1.1.9: {} + ip@2.0.1: {} ipaddr.js@1.9.1: {} @@ -43135,6 +48437,8 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 + is-buffer@1.1.6: {} + is-buffer@2.0.5: {} is-builtin-module@1.0.0: @@ -43205,6 +48509,8 @@ snapshots: is-fullwidth-code-point@3.0.0: {} + is-fullwidth-code-point@4.0.0: {} + is-fullwidth-code-point@5.1.0: dependencies: get-east-asian-width: 1.5.0 @@ -43262,7 +48568,7 @@ snapshots: is-negative-zero@2.0.3: {} - is-network-error@1.3.0: {} + is-network-error@1.3.1: {} is-npm@1.0.0: {} @@ -43313,8 +48619,6 @@ snapshots: is-primitive@3.0.1: {} - is-promise@2.2.2: {} - is-promise@4.0.0: {} is-redirect@1.0.0: {} @@ -43334,6 +48638,8 @@ snapshots: is-root@1.0.0: {} + is-root@2.1.0: {} + is-set@2.0.3: {} is-shared-array-buffer@1.0.4: @@ -43406,7 +48712,7 @@ snapshots: dependencies: is-docker: 2.2.1 - is-wsl@3.1.0: + is-wsl@3.1.1: dependencies: is-inside-container: 1.0.0 @@ -43436,7 +48742,7 @@ snapshots: isomorphic-unfetch@3.1.0(encoding@0.1.13): dependencies: - node-fetch: 2.6.13(encoding@0.1.13) + node-fetch: 2.6.7(encoding@0.1.13) unfetch: 4.2.0 transitivePeerDependencies: - encoding @@ -43481,7 +48787,7 @@ snapshots: istanbul-lib-instrument@4.0.3: dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -43490,7 +48796,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/parser': 7.29.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 @@ -43500,7 +48806,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/parser': 7.29.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 @@ -43606,7 +48912,7 @@ snapshots: jake@10.9.4: dependencies: async: 3.2.6 - filelist: 1.0.5 + filelist: 1.0.6 picocolors: 1.1.1 jest-changed-files@20.0.3: {} @@ -43635,10 +48941,10 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.35 + '@types/node': 22.15.24 chalk: 4.1.2 co: 4.6.0 - dedent: 1.7.1(babel-plugin-macros@3.1.0) + dedent: 1.7.2(babel-plugin-macros@3.1.0) is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -43661,10 +48967,10 @@ snapshots: '@jest/expect': 30.0.0 '@jest/test-result': 30.0.0 '@jest/types': 30.0.0 - '@types/node': 22.15.35 + '@types/node': 22.15.24 chalk: 4.1.2 co: 4.6.0 - dedent: 1.7.1(babel-plugin-macros@3.1.0) + dedent: 1.7.2(babel-plugin-macros@3.1.0) is-generator-fn: 2.1.0 jest-each: 30.0.0 jest-matcher-utils: 30.0.0 @@ -43736,16 +49042,35 @@ snapshots: - supports-color - utf-8-validate - jest-cli@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)): + jest-cli@29.7.0(@types/node@22.15.19)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)): + dependencies: + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.15.19)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.15.19)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-cli@29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + create-jest: 29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -43755,15 +49080,15 @@ snapshots: - supports-color - ts-node - jest-cli@30.0.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)): + jest-cli@30.0.0(@types/node@22.15.21)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3)): dependencies: - '@jest/core': 30.0.0(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + '@jest/core': 30.0.0(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3)) '@jest/test-result': 30.0.0 '@jest/types': 30.0.0 chalk: 4.1.2 exit-x: 0.2.2 import-local: 3.2.0 - jest-config: 30.0.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + jest-config: 30.0.0(@types/node@22.15.21)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3)) jest-util: 30.0.0 jest-validate: 30.0.0 yargs: 17.7.2 @@ -43803,10 +49128,10 @@ snapshots: jest-config@25.5.4: dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@jest/test-sequencer': 25.5.4 '@jest/types': 25.5.0 - babel-jest: 25.5.1(@babel/core@7.27.7) + babel-jest: 25.5.1(@babel/core@7.27.1) chalk: 3.0.0 deepmerge: 4.3.1 glob: 7.2.3 @@ -43828,12 +49153,12 @@ snapshots: - supports-color - utf-8-validate - jest-config@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)): + jest-config@29.7.0(@types/node@22.15.19)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.27.7) + babel-jest: 29.7.0(@babel/core@7.27.1) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -43853,20 +49178,116 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.15.35 - ts-node: 10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3) + '@types/node': 22.15.19 + ts-node: 10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@30.0.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)): + jest-config@29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.27.1) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.15.24 + ts-node: 10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)): + dependencies: + '@babel/core': 7.27.1 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.27.1) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.15.24 + ts-node: 10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@30.0.0(@types/node@22.15.21)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3)): + dependencies: + '@babel/core': 7.29.0 + '@jest/get-type': 30.0.0 + '@jest/pattern': 30.0.0 + '@jest/test-sequencer': 30.0.0 + '@jest/types': 30.0.0 + babel-jest: 30.0.0(@babel/core@7.29.0) + chalk: 4.1.2 + ci-info: 4.4.0 + deepmerge: 4.3.1 + glob: 10.5.0 + graceful-fs: 4.2.11 + jest-circus: 30.0.0(babel-plugin-macros@3.1.0) + jest-docblock: 30.0.0 + jest-environment-node: 30.0.0 + jest-regex-util: 30.0.0 + jest-resolve: 30.0.0 + jest-runner: 30.0.0 + jest-util: 30.0.0 + jest-validate: 30.0.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 30.0.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.15.21 + esbuild-register: 3.6.0(esbuild@0.25.12) + ts-node: 10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@30.0.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3)): + dependencies: + '@babel/core': 7.29.0 '@jest/get-type': 30.0.0 '@jest/pattern': 30.0.0 '@jest/test-sequencer': 30.0.0 '@jest/types': 30.0.0 - babel-jest: 30.0.0(@babel/core@7.27.7) + babel-jest: 30.0.0(@babel/core@7.29.0) chalk: 4.1.2 ci-info: 4.4.0 deepmerge: 4.3.1 @@ -43886,9 +49307,9 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 esbuild-register: 3.6.0(esbuild@0.25.12) - ts-node: 10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3) + ts-node: 10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -44004,7 +49425,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 22.15.35 + '@types/node': 22.15.24 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -44037,7 +49458,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.35 + '@types/node': 22.15.24 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -44046,7 +49467,7 @@ snapshots: '@jest/environment': 30.0.0 '@jest/fake-timers': 30.0.0 '@jest/types': 30.0.0 - '@types/node': 22.15.35 + '@types/node': 22.15.24 jest-mock: 30.0.0 jest-util: 30.0.0 jest-validate: 30.0.0 @@ -44087,7 +49508,7 @@ snapshots: dependencies: '@jest/types': 26.6.2 '@types/graceful-fs': 4.1.9 - '@types/node': 22.15.35 + '@types/node': 22.15.24 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -44105,7 +49526,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.15.35 + '@types/node': 22.15.24 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -44120,7 +49541,7 @@ snapshots: jest-haste-map@30.0.0: dependencies: '@jest/types': 30.0.0 - '@types/node': 22.15.35 + '@types/node': 22.15.24 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -44132,21 +49553,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - jest-haste-map@30.2.0: - dependencies: - '@jest/types': 30.2.0 - '@types/node': 22.15.35 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 30.0.1 - jest-util: 30.2.0 - jest-worker: 30.2.0 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - jest-jasmine2@20.0.4: dependencies: chalk: 1.1.3 @@ -44331,19 +49737,19 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.15.35 + '@types/node': 22.15.24 jest-util: 29.7.0 jest-mock@30.0.0: dependencies: '@jest/types': 30.0.0 - '@types/node': 22.15.35 + '@types/node': 22.15.24 jest-util: 30.0.0 jest-mock@30.2.0: dependencies: '@jest/types': 30.2.0 - '@types/node': 22.15.35 + '@types/node': 22.15.24 jest-util: 30.2.0 jest-pnp-resolver@1.2.3(jest-resolve@25.5.1): @@ -44400,7 +49806,7 @@ snapshots: dependencies: browser-resolve: 1.11.3 is-builtin-module: 1.0.0 - resolve: 1.22.11 + resolve: 1.6.0 jest-resolve@22.4.3: dependencies: @@ -44476,7 +49882,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.35 + '@types/node': 22.15.24 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -44502,7 +49908,7 @@ snapshots: '@jest/test-result': 30.0.0 '@jest/transform': 30.0.0 '@jest/types': 30.0.0 - '@types/node': 22.15.35 + '@types/node': 22.15.24 chalk: 4.1.2 emittery: 0.13.1 exit-x: 0.2.2 @@ -44583,7 +49989,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.35 + '@types/node': 22.15.24 chalk: 4.1.2 cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.3 @@ -44610,7 +50016,7 @@ snapshots: '@jest/test-result': 30.0.0 '@jest/transform': 30.0.0 '@jest/types': 30.0.0 - '@types/node': 22.15.35 + '@types/node': 22.15.24 chalk: 4.1.2 cjs-module-lexer: 2.2.0 collect-v8-coverage: 1.0.3 @@ -44634,7 +50040,7 @@ snapshots: jest-serializer@26.6.2: dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 graceful-fs: 4.2.11 jest-snapshot@20.0.3: @@ -44675,15 +50081,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/generator': 7.29.1 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.27.7) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.27.1) '@babel/types': 7.29.0 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.7) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.1) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -44700,17 +50106,17 @@ snapshots: jest-snapshot@30.0.0: dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.29.0 '@babel/generator': 7.29.1 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.27.7) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@babel/types': 7.29.0 '@jest/expect-utils': 30.0.0 '@jest/get-type': 30.0.0 '@jest/snapshot-utils': 30.0.0 '@jest/transform': 30.0.0 '@jest/types': 30.0.0 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.7) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) chalk: 4.1.2 expect: 30.0.0 graceful-fs: 4.2.11 @@ -44755,7 +50161,7 @@ snapshots: jest-util@26.6.2: dependencies: '@jest/types': 26.6.2 - '@types/node': 22.15.35 + '@types/node': 22.15.24 chalk: 4.1.2 graceful-fs: 4.2.11 is-ci: 2.0.0 @@ -44764,7 +50170,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.15.35 + '@types/node': 22.15.24 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -44773,7 +50179,7 @@ snapshots: jest-util@30.0.0: dependencies: '@jest/types': 30.0.0 - '@types/node': 22.15.35 + '@types/node': 22.15.24 chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 @@ -44782,7 +50188,7 @@ snapshots: jest-util@30.2.0: dependencies: '@jest/types': 30.2.0 - '@types/node': 22.15.35 + '@types/node': 22.15.24 chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 @@ -44853,7 +50259,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.35 + '@types/node': 22.15.24 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -44864,7 +50270,7 @@ snapshots: dependencies: '@jest/test-result': 30.0.0 '@jest/types': 30.0.0 - '@types/node': 22.15.35 + '@types/node': 22.15.24 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -44883,39 +50289,31 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 merge-stream: 2.0.0 supports-color: 7.2.0 jest-worker@27.5.1: dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@30.0.0: dependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 '@ungap/structured-clone': 1.3.0 jest-util: 30.0.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest-worker@30.2.0: - dependencies: - '@types/node': 22.15.35 - '@ungap/structured-clone': 1.3.0 - jest-util: 30.2.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - jest@20.0.4: dependencies: jest-cli: 20.0.4 @@ -44931,24 +50329,36 @@ snapshots: - supports-color - utf-8-validate - jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)): + jest@29.7.0(@types/node@22.15.19)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + jest-cli: 29.7.0(@types/node@22.15.19)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jest@30.0.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)): + jest@29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)): dependencies: - '@jest/core': 30.0.0(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest@30.0.0(@types/node@22.15.21)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3)): + dependencies: + '@jest/core': 30.0.0(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3)) '@jest/types': 30.0.0 import-local: 3.2.0 - jest-cli: 30.0.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + jest-cli: 30.0.0(@types/node@22.15.21)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -44968,7 +50378,7 @@ snapshots: '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 - jose@6.1.3: {} + jose@6.2.0: {} jpjs@1.2.1: {} @@ -44988,23 +50398,25 @@ snapshots: jsbn@0.1.1: {} + jschardet@3.0.0: {} + jschardet@3.1.4: {} - jscodeshift@0.15.2(@babel/preset-env@7.27.2(@babel/core@7.27.7)): + jscodeshift@0.15.2(@babel/preset-env@7.27.2(@babel/core@7.27.1)): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/parser': 7.29.0 - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.27.7) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.27.7) - '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/register': 7.28.6(@babel/core@7.27.7) - babel-core: 7.0.0-bridge.0(@babel/core@7.27.7) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.27.1) + '@babel/preset-flow': 7.27.1(@babel/core@7.27.1) + '@babel/preset-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/register': 7.28.6(@babel/core@7.27.1) + babel-core: 7.0.0-bridge.0(@babel/core@7.27.1) chalk: 4.1.2 - flow-parser: 0.302.0 + flow-parser: 0.304.0 graceful-fs: 4.2.11 micromatch: 4.0.8 neo-async: 2.6.2 @@ -45013,7 +50425,34 @@ snapshots: temp: 0.8.4 write-file-atomic: 2.4.3 optionalDependencies: - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) + transitivePeerDependencies: + - supports-color + + jscodeshift@0.15.2(@babel/preset-env@7.27.2(@babel/core@7.29.0)): + dependencies: + '@babel/core': 7.27.1 + '@babel/parser': 7.29.0 + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.27.1) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.27.1) + '@babel/preset-flow': 7.27.1(@babel/core@7.27.1) + '@babel/preset-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/register': 7.28.6(@babel/core@7.27.1) + babel-core: 7.0.0-bridge.0(@babel/core@7.27.1) + chalk: 4.1.2 + flow-parser: 0.304.0 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + neo-async: 2.6.2 + node-dir: 0.1.17 + recast: 0.23.11 + temp: 0.8.4 + write-file-atomic: 2.4.3 + optionalDependencies: + '@babel/preset-env': 7.27.2(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -45037,7 +50476,7 @@ snapshots: pn: 1.1.0 request: 2.88.2 request-promise-native: 1.0.9(request@2.88.2) - sax: 1.4.4 + sax: 1.5.0 symbol-tree: 3.2.4 tough-cookie: 2.5.0 w3c-hr-time: 1.0.2 @@ -45127,7 +50566,7 @@ snapshots: nwmatcher: 1.4.4 parse5: 1.5.1 request: 2.88.2 - sax: 1.4.4 + sax: 1.5.0 symbol-tree: 3.2.4 tough-cookie: 2.5.0 webidl-conversions: 4.0.2 @@ -45141,8 +50580,16 @@ snapshots: jsesc@3.1.0: {} + json-bigint@1.0.0: + dependencies: + bignumber.js: 9.3.1 + json-buffer@3.0.1: {} + json-loader@0.5.7: {} + + json-parse-better-errors@1.0.2: {} + json-parse-even-better-errors@2.3.1: {} json-schema-to-ts@3.1.1: @@ -45207,12 +50654,12 @@ snapshots: jsonix@3.0.0: dependencies: amdefine: 0.1.1 - xmldom: '@xmldom/xmldom@0.8.11' + xmldom: '@xmldom/xmldom@0.8.10' xmlhttprequest: 1.8.0 jsonwebtoken@9.0.3: dependencies: - jws: 3.2.3 + jws: 4.0.1 lodash.includes: 4.3.0 lodash.isboolean: 3.0.3 lodash.isinteger: 4.0.4 @@ -45246,27 +50693,27 @@ snapshots: junk@3.1.0: {} - jwa@1.4.2: + jwa@2.0.1: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - jws@3.2.3: + jws@4.0.1: dependencies: - jwa: 1.4.2 + jwa: 2.0.1 safe-buffer: 5.2.1 jwt-decode@4.0.0: {} + katex@0.16.38: + dependencies: + commander: 8.3.0 + keytar@7.9.0: dependencies: node-addon-api: 4.3.0 prebuild-install: 7.1.3 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a keyv@4.5.4: dependencies: @@ -45281,6 +50728,12 @@ snapshots: get-them-args: 1.3.2 shell-exec: 1.0.2 + killable@1.0.1: {} + + kind-of@3.2.2: + dependencies: + is-buffer: 1.1.6 + kind-of@6.0.3: {} klaw@1.3.1: @@ -45291,7 +50744,7 @@ snapshots: klona@2.0.6: {} - known-css-properties@0.37.0: {} + known-css-properties@0.36.0: {} kuler@2.0.0: {} @@ -45305,11 +50758,13 @@ snapshots: dependencies: package-json: 4.0.1 - launch-editor@2.12.0: + launch-editor@2.13.1: dependencies: picocolors: 1.1.1 shell-quote: 1.8.3 + lazy-cache@1.0.4: {} + lazy-universal-dotenv@3.0.1: dependencies: '@babel/runtime': 7.28.6 @@ -45364,21 +50819,26 @@ snapshots: dependencies: uc.micro: 2.1.0 - lint-staged@16.2.7: + lint-staged@16.0.0: dependencies: - commander: 14.0.3 - listr2: 9.0.5 + chalk: 5.6.2 + commander: 13.1.0 + debug: 4.4.3(supports-color@8.1.1) + lilconfig: 3.1.3 + listr2: 8.3.3 micromatch: 4.0.8 - nano-spawn: 2.0.0 + nano-spawn: 1.0.3 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.8.2 + yaml: 2.8.0 + transitivePeerDependencies: + - supports-color listenercount@1.0.1: {} - listr2@9.0.5: + listr2@8.3.3: dependencies: - cli-truncate: 5.1.1 + cli-truncate: 4.0.0 colorette: 2.0.20 eventemitter3: 5.0.4 log-update: 6.1.0 @@ -45393,6 +50853,15 @@ snapshots: pinkie-promise: 2.0.1 strip-bom: 2.0.0 + load-json-file@2.0.0: + dependencies: + graceful-fs: 4.2.11 + parse-json: 2.2.0 + pify: 2.3.0 + strip-bom: 3.0.0 + + loader-runner@2.4.0: {} + loader-runner@4.3.1: {} loader-utils@0.2.17: @@ -45408,6 +50877,12 @@ snapshots: emojis-list: 3.0.0 json5: 1.0.2 + loader-utils@2.0.0: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + loader-utils@2.0.4: dependencies: big.js: 5.2.2 @@ -45528,7 +51003,7 @@ snapshots: ansi-escapes: 7.3.0 cli-cursor: 5.0.0 slice-ansi: 7.1.2 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 wrap-ansi: 9.0.2 logform@2.7.0: @@ -45552,6 +51027,8 @@ snapshots: longest-streak@3.1.0: {} + longest@1.0.1: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -45603,10 +51080,6 @@ snapshots: lru-cache@7.18.3: {} - lru-queue@0.1.0: - dependencies: - es5-ext: 0.10.64 - lucide-react@0.523.0(react@18.3.1): dependencies: react: 18.3.1 @@ -45710,6 +51183,12 @@ snapshots: markdown-table@3.0.4: {} + markdown-to-jsx@6.11.4(react@18.2.0): + dependencies: + prop-types: 15.8.1 + react: 18.2.0 + unquote: 1.1.1 + markdown-to-jsx@7.7.17(react@18.2.0): optionalDependencies: react: 18.2.0 @@ -45726,6 +51205,12 @@ snapshots: mathml-tag-names@2.1.3: {} + md5.js@1.3.5: + dependencies: + hash-base: 3.0.5 + inherits: 2.0.4 + safe-buffer: 5.2.1 + mdast-squeeze-paragraphs@4.0.0: dependencies: unist-util-remove: 2.1.0 @@ -45840,6 +51325,18 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-math@3.0.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + longest-streak: 3.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + unist-util-remove-position: 5.0.0 + transitivePeerDependencies: + - supports-color + mdast-util-mdx-expression@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 @@ -45942,7 +51439,7 @@ snapshots: mdn-data@2.0.14: {} - mdn-data@2.12.2: {} + mdn-data@2.27.1: {} mdurl@1.0.1: {} @@ -45965,16 +51462,16 @@ snapshots: dependencies: fs-monkey: 1.1.0 - memfs@4.56.10: + memfs@4.56.11: dependencies: - '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-fsa': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-to-fsa': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-print': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-snapshot': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-core': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-fsa': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-to-fsa': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.56.11(tslib@2.8.1) '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) glob-to-regex.js: 1.2.0(tslib@2.8.1) @@ -45982,17 +51479,6 @@ snapshots: tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 - memoizee@0.4.17: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-weak-map: 2.0.3 - event-emitter: 0.3.5 - is-promise: 2.2.2 - lru-queue: 0.1.0 - next-tick: 1.1.0 - timers-ext: 0.1.8 - memoizerific@1.11.3: dependencies: map-or-similar: 1.5.0 @@ -46002,6 +51488,11 @@ snapshots: errno: 0.1.8 readable-stream: 2.3.8 + memory-fs@0.5.0: + dependencies: + errno: 0.1.8 + readable-stream: 2.3.8 + meow@10.1.5: dependencies: '@types/minimist': 1.2.5 @@ -46046,9 +51537,9 @@ snapshots: merge@1.2.1: {} - meros@1.3.2(@types/node@22.15.35): + meros@1.3.2(@types/node@22.15.24): optionalDependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 methods@1.1.2: {} @@ -46150,6 +51641,16 @@ snapshots: micromark-util-combine-extensions: 2.0.1 micromark-util-types: 2.0.2 + micromark-extension-math@3.1.0: + dependencies: + '@types/katex': 0.16.8 + devlop: 1.1.0 + katex: 0.16.38 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + micromark-extension-mdx-expression@3.0.1: dependencies: '@types/estree': 1.0.8 @@ -46342,6 +51843,11 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + miller-rabin@4.0.1: + dependencies: + bn.js: 4.12.3 + brorand: 1.1.0 + mime-db@1.33.0: {} mime-db@1.52.0: {} @@ -46384,11 +51890,11 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.10.0(webpack@5.105.2): + mini-css-extract-plugin@2.9.2(webpack@5.104.1): dependencies: schema-utils: 4.3.3 tapable: 2.3.0 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) minim@0.23.8: dependencies: @@ -46396,29 +51902,27 @@ snapshots: minimalistic-assert@1.0.1: {} - minimatch@10.2.2: - dependencies: - brace-expansion: 5.0.3 + minimalistic-crypto-utils@1.0.1: {} - minimatch@3.0.3: + minimatch@10.2.3: dependencies: - brace-expansion: 1.1.12 + brace-expansion: 5.0.4 - minimatch@3.1.2: + minimatch@3.1.4: dependencies: brace-expansion: 1.1.12 - minimatch@3.1.3: + minimatch@3.1.5: dependencies: brace-expansion: 1.1.12 - minimatch@5.1.7: + minimatch@5.1.8: dependencies: brace-expansion: 2.0.2 - minimatch@9.0.6: + minimatch@9.0.7: dependencies: - brace-expansion: 5.0.3 + brace-expansion: 5.0.4 minimist-options@4.1.0: dependencies: @@ -46478,6 +51982,19 @@ snapshots: stream-each: 1.2.3 through2: 2.0.5 + mississippi@3.0.0: + dependencies: + concat-stream: 1.6.2 + duplexify: 3.7.1 + end-of-stream: 1.4.5 + flush-write-stream: 1.1.1 + from2: 2.3.0 + parallel-transform: 1.2.0 + pump: 3.0.4 + pumpify: 1.5.1 + stream-each: 1.2.3 + through2: 2.0.5 + mkdirp-classic@0.5.3: {} mkdirp@0.5.6: @@ -46488,34 +52005,81 @@ snapshots: mkdirp@3.0.1: {} - mlly@1.8.0: + mlly@1.8.1: dependencies: acorn: 8.16.0 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.6.3 - mocha@10.8.2: + mocha@10.2.0: dependencies: - ansi-colors: 4.1.3 + ansi-colors: 4.1.1 browser-stdout: 1.3.1 - chokidar: 3.6.0 + chokidar: 3.5.3 + debug: 4.3.4(supports-color@8.1.1) + diff: 8.0.3 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + he: 1.2.0 + js-yaml: 4.1.1 + log-symbols: 4.1.0 + minimatch: 5.1.8 + ms: 2.1.3 + nanoid: 3.3.3 + serialize-javascript: 7.0.3 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.2.1 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + mocha@11.2.2: + dependencies: + browser-stdout: 1.3.1 + chokidar: 4.0.3 debug: 4.4.3(supports-color@8.1.1) diff: 8.0.3 escape-string-regexp: 4.0.0 find-up: 5.0.0 - glob: 8.1.0 + glob: 10.5.0 he: 1.2.0 js-yaml: 4.1.1 log-symbols: 4.1.0 - minimatch: 5.1.7 + minimatch: 5.1.8 ms: 2.1.3 - serialize-javascript: 6.0.2 + picocolors: 1.1.1 + serialize-javascript: 7.0.3 strip-json-comments: 3.1.1 supports-color: 8.1.1 workerpool: 6.5.1 - yargs: 16.2.0 - yargs-parser: 20.2.9 + yargs: 17.7.2 + yargs-parser: 21.1.1 + yargs-unparser: 2.0.0 + + mocha@11.4.0: + dependencies: + browser-stdout: 1.3.1 + chokidar: 4.0.3 + debug: 4.4.3(supports-color@8.1.1) + diff: 8.0.3 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 10.5.0 + he: 1.2.0 + js-yaml: 4.1.1 + log-symbols: 4.1.0 + minimatch: 5.1.8 + ms: 2.1.3 + picocolors: 1.1.1 + serialize-javascript: 7.0.3 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.5.1 + yargs: 17.7.2 + yargs-parser: 21.1.1 yargs-unparser: 2.0.0 mocha@11.5.0: @@ -46530,10 +52094,10 @@ snapshots: he: 1.2.0 js-yaml: 4.1.1 log-symbols: 4.1.0 - minimatch: 9.0.6 + minimatch: 9.0.7 ms: 2.1.3 picocolors: 1.1.1 - serialize-javascript: 6.0.2 + serialize-javascript: 7.0.3 strip-json-comments: 3.1.1 supports-color: 8.1.1 workerpool: 6.5.1 @@ -46566,11 +52130,17 @@ snapshots: clipboardy: 4.0.0 clone-deep: 4.0.1 compare-versions: 6.1.1 - fs-extra: 11.3.3 + fs-extra: 11.3.0 selenium-webdriver: 4.41.0 type-fest: 4.41.0 typescript: 5.8.3 + motion-dom@11.18.1: + dependencies: + motion-utils: 11.18.1 + + motion-utils@11.18.1: {} + mousetrap@1.6.5: {} move-concurrently@1.0.1: @@ -46590,6 +52160,8 @@ snapshots: ms@2.1.3: {} + multicast-dns-service-types@1.1.0: {} + multicast-dns@7.2.5: dependencies: dns-packet: 5.6.1 @@ -46609,10 +52181,12 @@ snapshots: nan@2.25.0: {} - nano-spawn@2.0.0: {} + nano-spawn@1.0.3: {} nanoid@3.3.11: {} + nanoid@3.3.3: {} + nanoid@5.1.6: {} nanospinner@1.2.2: @@ -46623,6 +52197,10 @@ snapshots: napi-postinstall@0.3.4: {} + native-url@0.2.6: + dependencies: + querystring: 0.2.1 + natural-compare@1.4.0: {} neatequal@1.0.0: @@ -46665,15 +52243,22 @@ snapshots: node-addon-api@7.1.1: optional: true - node-addon-api@8.5.0: + node-addon-api@8.6.0: optional: true node-dir@0.1.17: dependencies: - minimatch: 3.1.3 + minimatch: 3.1.4 node-domexception@1.0.0: {} + node-exports-info@1.6.0: + dependencies: + array.prototype.flatmap: 1.3.3 + es-errors: 1.3.0 + object.entries: 1.1.9 + semver: 6.3.1 + node-fetch-commonjs@3.3.2: dependencies: node-domexception: 1.0.0 @@ -46681,7 +52266,7 @@ snapshots: node-fetch-native@1.6.7: {} - node-fetch@2.6.13(encoding@0.1.13): + node-fetch@2.6.7(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 optionalDependencies: @@ -46699,6 +52284,8 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 + node-forge@0.10.0: {} + node-gyp-build@4.8.4: optional: true @@ -46735,15 +52322,41 @@ snapshots: node-int64@0.4.0: {} - node-loader@2.0.0(webpack@5.105.2): + node-libs-browser@2.2.1: + dependencies: + assert: 1.5.1 + browserify-zlib: 0.2.0 + buffer: 4.9.2 + console-browserify: 1.2.0 + constants-browserify: 1.0.0 + crypto-browserify: 3.12.1 + domain-browser: 1.2.0 + events: 3.3.0 + https-browserify: 1.0.0 + os-browserify: 0.3.0 + path-browserify: 0.0.1 + process: 0.11.10 + punycode: 1.4.1 + querystring-es3: 0.2.1 + readable-stream: 2.3.8 + stream-browserify: 2.0.2 + stream-http: 2.8.3 + string_decoder: 1.3.0 + timers-browserify: 2.0.12 + tty-browserify: 0.0.0 + url: 0.11.4 + util: 0.11.1 + vm-browserify: 1.1.2 + + node-loader@2.0.0(webpack@5.104.1): dependencies: loader-utils: 2.0.4 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) - node-loader@2.1.0(webpack@5.105.2): + node-loader@2.1.0(webpack@5.104.1): dependencies: loader-utils: 2.0.4 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) node-notifier@5.4.5: dependencies: @@ -46762,12 +52375,14 @@ snapshots: which: 1.3.1 optional: true - node-releases@2.0.27: {} + node-releases@1.1.77: {} + + node-releases@2.0.36: {} node-sarif-builder@3.4.0: dependencies: '@types/sarif': 2.1.7 - fs-extra: 11.3.3 + fs-extra: 11.3.0 node-schedule@2.1.1: dependencies: @@ -46942,6 +52557,12 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.24.1 + object.hasown@1.1.4: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.24.1 + es-object-atoms: 1.1.1 + object.values@1.2.1: dependencies: call-bind: 1.0.8 @@ -47015,6 +52636,10 @@ snapshots: dependencies: is-wsl: 1.1.0 + opn@5.5.0: + dependencies: + is-wsl: 1.1.0 + optionator@0.8.3: dependencies: deep-is: 0.1.4 @@ -47066,7 +52691,7 @@ snapshots: log-symbols: 6.0.0 stdin-discarder: 0.2.2 string-width: 7.2.0 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 orderedmap@2.1.1: {} @@ -47074,6 +52699,8 @@ snapshots: dependencies: url-parse: 1.5.10 + os-browserify@0.3.0: {} + os-homedir@1.0.2: {} os-locale@1.4.0: @@ -47095,6 +52722,8 @@ snapshots: outvariant@1.4.0: {} + overlayscrollbars@1.13.3: {} + own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -47191,7 +52820,7 @@ snapshots: p-retry@6.2.1: dependencies: '@types/retry': 0.12.2 - is-network-error: 1.3.0 + is-network-error: 1.3.1 retry: 0.13.1 p-timeout@3.2.0: @@ -47236,6 +52865,14 @@ snapshots: dependencies: callsites: 3.1.0 + parse-asn1@5.1.9: + dependencies: + asn1.js: 4.10.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + pbkdf2: 3.1.5 + safe-buffer: 5.2.1 + parse-entities@2.0.0: dependencies: character-entities: 1.2.4 @@ -47308,6 +52945,8 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 + path-browserify@0.0.1: {} + path-browserify@1.0.1: {} path-dirname@1.0.2: {} @@ -47360,6 +52999,10 @@ snapshots: pify: 2.3.0 pinkie-promise: 2.0.1 + path-type@2.0.0: + dependencies: + pify: 2.3.0 + path-type@3.0.0: dependencies: pify: 3.0.0 @@ -47388,16 +53031,19 @@ snapshots: pathval@2.0.1: {} + pbkdf2@3.1.5: + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.3 + safe-buffer: 5.2.1 + sha.js: 2.4.12 + to-buffer: 1.2.2 + pdfjs-dist@4.8.69: optionalDependencies: canvas: 3.2.1 path2d: 0.2.2 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - - peek-readable@5.4.2: {} peek-stream@1.1.3: dependencies: @@ -47466,9 +53112,13 @@ snapshots: pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.8.0 + mlly: 1.8.1 pathe: 2.0.3 + pkg-up@3.1.0: + dependencies: + find-up: 3.0.0 + pkijs@3.3.3: dependencies: '@noble/hashes': 1.4.0 @@ -47499,9 +53149,9 @@ snapshots: pn@1.1.0: {} - pnp-webpack-plugin@1.6.4(typescript@4.9.5): + pnp-webpack-plugin@1.6.4(typescript@4.9.4): dependencies: - ts-pnp: 1.2.0(typescript@4.9.5) + ts-pnp: 1.2.0(typescript@4.9.4) transitivePeerDependencies: - typescript @@ -47522,13 +53172,26 @@ snapshots: style-value-types: 5.0.0 tslib: 2.8.1 - portfinder@1.0.38: + portfinder@1.0.32: + dependencies: + async: 2.6.4 + debug: 3.2.7 + mkdirp: 0.5.6 + + portfinder@1.0.37: dependencies: async: 3.2.6 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color + portfinder@1.0.37(supports-color@5.5.0): + dependencies: + async: 3.2.6 + debug: 4.4.3(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + possible-typed-array-names@1.1.0: {} postcss-calc@5.3.1: @@ -47537,9 +53200,9 @@ snapshots: postcss-message-helpers: 2.0.0 reduce-css-calc: 1.3.0 - postcss-calc@8.2.4(postcss@8.5.6): + postcss-calc@8.2.4(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 @@ -47549,12 +53212,12 @@ snapshots: postcss: 5.2.18 postcss-value-parser: 3.3.1 - postcss-colormin@5.3.1(postcss@8.5.6): + postcss-colormin@5.3.1(postcss@8.5.4): dependencies: browserslist: 4.28.1 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 postcss-convert-values@2.6.1: @@ -47562,43 +53225,43 @@ snapshots: postcss: 5.2.18 postcss-value-parser: 3.3.1 - postcss-convert-values@5.1.3(postcss@8.5.6): + postcss-convert-values@5.1.3(postcss@8.5.4): dependencies: browserslist: 4.28.1 - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 postcss-discard-comments@2.0.4: dependencies: postcss: 5.2.18 - postcss-discard-comments@5.1.2(postcss@8.5.6): + postcss-discard-comments@5.1.2(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-discard-duplicates@2.1.0: dependencies: postcss: 5.2.18 - postcss-discard-duplicates@5.1.0(postcss@8.5.6): + postcss-discard-duplicates@5.1.0(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-discard-empty@2.1.0: dependencies: postcss: 5.2.18 - postcss-discard-empty@5.1.1(postcss@8.5.6): + postcss-discard-empty@5.1.1(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-discard-overridden@0.1.1: dependencies: postcss: 5.2.18 - postcss-discard-overridden@5.1.0(postcss@8.5.6): + postcss-discard-overridden@5.1.0(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-discard-unused@2.2.3: dependencies: @@ -47617,17 +53280,17 @@ snapshots: dependencies: postcss: 7.0.39 - postcss-import@15.1.0(postcss@8.5.6): + postcss-import@15.1.0(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.11 - postcss-js@4.1.0(postcss@8.5.6): + postcss-js@4.1.0(postcss@8.5.4): dependencies: camelcase-css: 2.0.1 - postcss: 8.5.6 + postcss: 8.5.4 postcss-load-config@1.2.0: dependencies: @@ -47636,21 +53299,21 @@ snapshots: postcss-load-options: 1.2.0 postcss-load-plugins: 2.3.0 - postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)): + postcss-load-config@3.1.4(postcss@8.5.4)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: - postcss: 8.5.6 - ts-node: 10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3) + postcss: 8.5.4 + ts-node: 10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3) - postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)): + postcss-load-config@4.0.2(postcss@8.5.4)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)): dependencies: lilconfig: 3.1.3 - yaml: 2.8.2 + yaml: 2.8.0 optionalDependencies: - postcss: 8.5.6 - ts-node: 10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3) + postcss: 8.5.4 + ts-node: 10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3) postcss-load-options@1.2.0: dependencies: @@ -47669,7 +53332,7 @@ snapshots: postcss-load-config: 1.2.0 schema-utils: 0.3.0 - postcss-loader@4.3.0(postcss@7.0.39)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + postcss-loader@4.3.0(postcss@7.0.39)(webpack@4.47.0(webpack-cli@4.10.0)): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 @@ -47677,9 +53340,9 @@ snapshots: postcss: 7.0.39 schema-utils: 3.3.0 semver: 7.7.4 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 4.47.0(webpack-cli@4.10.0) - postcss-loader@4.3.0(postcss@7.0.39)(webpack@5.105.2): + postcss-loader@4.3.0(postcss@7.0.39)(webpack@4.47.0(webpack-cli@6.0.1)): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 @@ -47687,16 +53350,37 @@ snapshots: postcss: 7.0.39 schema-utils: 3.3.0 semver: 7.7.4 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 4.47.0(webpack-cli@6.0.1) - postcss-loader@8.2.0(postcss@8.5.6)(typescript@5.8.3)(webpack@5.105.2): + postcss-loader@4.3.0(postcss@7.0.39)(webpack@4.47.0): dependencies: - cosmiconfig: 9.0.0(typescript@5.8.3) - jiti: 2.6.1 - postcss: 8.5.6 + cosmiconfig: 7.1.0 + klona: 2.0.6 + loader-utils: 2.0.4 + postcss: 7.0.39 + schema-utils: 3.3.0 + semver: 7.7.4 + webpack: 4.47.0 + + postcss-loader@8.1.1(postcss@8.5.3)(typescript@5.8.3)(webpack@5.104.1): + dependencies: + cosmiconfig: 9.0.1(typescript@5.8.3) + jiti: 1.21.7 + postcss: 8.5.3 semver: 7.7.4 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 5.104.1(webpack-cli@6.0.1) + transitivePeerDependencies: + - typescript + + postcss-loader@8.1.1(postcss@8.5.4)(typescript@5.8.3)(webpack@5.104.1): + dependencies: + cosmiconfig: 9.0.1(typescript@5.8.3) + jiti: 1.21.7 + postcss: 8.5.4 + semver: 7.7.4 + optionalDependencies: + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) transitivePeerDependencies: - typescript @@ -47710,11 +53394,11 @@ snapshots: dependencies: postcss: 5.2.18 - postcss-merge-longhand@5.1.7(postcss@8.5.6): + postcss-merge-longhand@5.1.7(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 - stylehacks: 5.1.1(postcss@8.5.6) + stylehacks: 5.1.1(postcss@8.5.4) postcss-merge-rules@2.1.2: dependencies: @@ -47724,12 +53408,12 @@ snapshots: postcss-selector-parser: 2.2.3 vendors: 1.0.4 - postcss-merge-rules@5.1.4(postcss@8.5.6): + postcss-merge-rules@5.1.4(postcss@8.5.4): dependencies: browserslist: 4.28.1 caniuse-api: 3.0.0 - cssnano-utils: 3.1.0(postcss@8.5.6) - postcss: 8.5.6 + cssnano-utils: 3.1.0(postcss@8.5.4) + postcss: 8.5.4 postcss-selector-parser: 6.1.2 postcss-message-helpers@2.0.0: {} @@ -47740,9 +53424,9 @@ snapshots: postcss: 5.2.18 postcss-value-parser: 3.3.1 - postcss-minify-font-values@5.1.0(postcss@8.5.6): + postcss-minify-font-values@5.1.0(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 postcss-minify-gradients@1.0.5: @@ -47750,11 +53434,11 @@ snapshots: postcss: 5.2.18 postcss-value-parser: 3.3.1 - postcss-minify-gradients@5.1.1(postcss@8.5.6): + postcss-minify-gradients@5.1.1(postcss@8.5.4): dependencies: colord: 2.9.3 - cssnano-utils: 3.1.0(postcss@8.5.6) - postcss: 8.5.6 + cssnano-utils: 3.1.0(postcss@8.5.4) + postcss: 8.5.4 postcss-value-parser: 4.2.0 postcss-minify-params@1.2.2: @@ -47764,11 +53448,11 @@ snapshots: postcss-value-parser: 3.3.1 uniqs: 2.0.0 - postcss-minify-params@5.1.4(postcss@8.5.6): + postcss-minify-params@5.1.4(postcss@8.5.4): dependencies: browserslist: 4.28.1 - cssnano-utils: 3.1.0(postcss@8.5.6) - postcss: 8.5.6 + cssnano-utils: 3.1.0(postcss@8.5.4) + postcss: 8.5.4 postcss-value-parser: 4.2.0 postcss-minify-selectors@2.1.1: @@ -47778,9 +53462,9 @@ snapshots: postcss: 5.2.18 postcss-selector-parser: 2.2.3 - postcss-minify-selectors@5.2.1(postcss@8.5.6): + postcss-minify-selectors@5.2.1(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-selector-parser: 6.1.2 postcss-modules-extract-imports@1.2.1: @@ -47791,9 +53475,9 @@ snapshots: dependencies: postcss: 7.0.39 - postcss-modules-extract-imports@3.1.0(postcss@8.5.6): + postcss-modules-extract-imports@3.1.0(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-modules-local-by-default@1.2.0: dependencies: @@ -47807,10 +53491,10 @@ snapshots: postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-modules-local-by-default@4.2.0(postcss@8.5.6): + postcss-modules-local-by-default@4.2.0(postcss@8.5.4): dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 + icss-utils: 5.1.0(postcss@8.5.4) + postcss: 8.5.4 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 @@ -47824,9 +53508,9 @@ snapshots: postcss: 7.0.39 postcss-selector-parser: 6.1.2 - postcss-modules-scope@3.2.1(postcss@8.5.6): + postcss-modules-scope@3.2.1(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-selector-parser: 7.1.1 postcss-modules-values@1.3.0: @@ -47839,65 +53523,65 @@ snapshots: icss-utils: 4.1.1 postcss: 7.0.39 - postcss-modules-values@4.0.0(postcss@8.5.6): + postcss-modules-values@4.0.0(postcss@8.5.4): dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 + icss-utils: 5.1.0(postcss@8.5.4) + postcss: 8.5.4 - postcss-modules@4.3.1(postcss@8.5.6): + postcss-modules@4.3.1(postcss@8.5.4): dependencies: generic-names: 4.0.0 icss-replace-symbols: 1.1.0 lodash.camelcase: 4.3.0 - postcss: 8.5.6 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) - postcss-modules-scope: 3.2.1(postcss@8.5.6) - postcss-modules-values: 4.0.0(postcss@8.5.6) + postcss: 8.5.4 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.4) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.4) + postcss-modules-scope: 3.2.1(postcss@8.5.4) + postcss-modules-values: 4.0.0(postcss@8.5.4) string-hash: 1.1.3 - postcss-nested@6.2.0(postcss@8.5.6): + postcss-nested@6.2.0(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-selector-parser: 6.1.2 postcss-normalize-charset@1.1.1: dependencies: postcss: 5.2.18 - postcss-normalize-charset@5.1.0(postcss@8.5.6): + postcss-normalize-charset@5.1.0(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 - postcss-normalize-display-values@5.1.0(postcss@8.5.6): + postcss-normalize-display-values@5.1.0(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 - postcss-normalize-positions@5.1.1(postcss@8.5.6): + postcss-normalize-positions@5.1.1(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@5.1.1(postcss@8.5.6): + postcss-normalize-repeat-style@5.1.1(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 - postcss-normalize-string@5.1.0(postcss@8.5.6): + postcss-normalize-string@5.1.0(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@5.1.0(postcss@8.5.6): + postcss-normalize-timing-functions@5.1.0(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@5.1.1(postcss@8.5.6): + postcss-normalize-unicode@5.1.1(postcss@8.5.4): dependencies: browserslist: 4.28.1 - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 postcss-normalize-url@3.0.8: @@ -47907,15 +53591,15 @@ snapshots: postcss: 5.2.18 postcss-value-parser: 3.3.1 - postcss-normalize-url@5.1.0(postcss@8.5.6): + postcss-normalize-url@5.1.0(postcss@8.5.4): dependencies: normalize-url: 6.1.0 - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@5.1.1(postcss@8.5.6): + postcss-normalize-whitespace@5.1.1(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 postcss-ordered-values@2.2.3: @@ -47923,10 +53607,10 @@ snapshots: postcss: 5.2.18 postcss-value-parser: 3.3.1 - postcss-ordered-values@5.1.3(postcss@8.5.6): + postcss-ordered-values@5.1.3(postcss@8.5.4): dependencies: - cssnano-utils: 3.1.0(postcss@8.5.6) - postcss: 8.5.6 + cssnano-utils: 3.1.0(postcss@8.5.4) + postcss: 8.5.4 postcss-value-parser: 4.2.0 postcss-reduce-idents@2.4.0: @@ -47938,11 +53622,11 @@ snapshots: dependencies: postcss: 5.2.18 - postcss-reduce-initial@5.1.2(postcss@8.5.6): + postcss-reduce-initial@5.1.2(postcss@8.5.4): dependencies: browserslist: 4.28.1 caniuse-api: 3.0.0 - postcss: 8.5.6 + postcss: 8.5.4 postcss-reduce-transforms@1.0.4: dependencies: @@ -47950,16 +53634,16 @@ snapshots: postcss: 5.2.18 postcss-value-parser: 3.3.1 - postcss-reduce-transforms@5.1.0(postcss@8.5.6): + postcss-reduce-transforms@5.1.0(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 postcss-resolve-nested-selector@0.1.6: {} - postcss-safe-parser@7.0.1(postcss@8.5.6): + postcss-safe-parser@7.0.1(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-selector-parser@2.2.3: dependencies: @@ -47984,11 +53668,11 @@ snapshots: postcss-value-parser: 3.3.1 svgo: 0.7.2 - postcss-svgo@5.1.0(postcss@8.5.6): + postcss-svgo@5.1.0(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-value-parser: 4.2.0 - svgo: 2.8.0 + svgo: 2.8.2 postcss-unique-selectors@2.0.2: dependencies: @@ -47996,9 +53680,9 @@ snapshots: postcss: 5.2.18 uniqs: 2.0.0 - postcss-unique-selectors@5.1.1(postcss@8.5.6): + postcss-unique-selectors@5.1.1(postcss@8.5.4): dependencies: - postcss: 8.5.6 + postcss: 8.5.4 postcss-selector-parser: 6.1.2 postcss-value-parser@3.3.1: {} @@ -48029,7 +53713,13 @@ snapshots: picocolors: 0.2.1 source-map: 0.6.1 - postcss@8.5.6: + postcss@8.5.3: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.4: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -48046,15 +53736,11 @@ snapshots: mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 node-abi: 3.87.0 - pump: 3.0.3 + pump: 3.0.4 rc: 1.2.8 simple-get: 4.0.1 - tar-fs: 3.1.1 + tar-fs: 2.1.4 tunnel-agent: 0.6.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a prelude-ls@1.1.2: {} @@ -48070,6 +53756,8 @@ snapshots: prettier@1.19.1: {} + prettier@2.2.1: {} + prettier@2.3.0: {} prettier@2.8.8: {} @@ -48137,7 +53825,7 @@ snapshots: prism-react-renderer@2.4.1(react@18.2.0): dependencies: - '@types/prismjs': 1.26.6 + '@types/prismjs': 1.26.5 clsx: 2.1.1 react: 18.2.0 @@ -48194,6 +53882,11 @@ snapshots: dependencies: asap: 2.0.6 + prompts@2.4.0: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -48225,34 +53918,34 @@ snapshots: prosemirror-commands@1.7.1: dependencies: prosemirror-model: 1.25.4 - prosemirror-state: 1.4.4 + prosemirror-state: 1.4.3 prosemirror-transform: 1.11.0 prosemirror-gapcursor@1.4.0: dependencies: - prosemirror-keymap: 1.2.3 + prosemirror-keymap: 1.2.2 prosemirror-model: 1.25.4 - prosemirror-state: 1.4.4 - prosemirror-view: 1.41.6 + prosemirror-state: 1.4.3 + prosemirror-view: 1.41.3 prosemirror-history@1.5.0: dependencies: - prosemirror-state: 1.4.4 + prosemirror-state: 1.4.3 prosemirror-transform: 1.11.0 - prosemirror-view: 1.41.6 + prosemirror-view: 1.41.3 rope-sequence: 1.3.4 prosemirror-inputrules@1.5.1: dependencies: - prosemirror-state: 1.4.4 + prosemirror-state: 1.4.3 prosemirror-transform: 1.11.0 - prosemirror-keymap@1.2.3: + prosemirror-keymap@1.2.2: dependencies: - prosemirror-state: 1.4.4 + prosemirror-state: 1.4.3 w3c-keyname: 2.2.8 - prosemirror-markdown@1.13.4: + prosemirror-markdown@1.13.2: dependencies: '@types/markdown-it': 14.1.2 markdown-it: 14.1.1 @@ -48262,33 +53955,33 @@ snapshots: dependencies: orderedmap: 2.1.1 - prosemirror-schema-basic@1.2.4: + prosemirror-schema-basic@1.2.2: dependencies: prosemirror-model: 1.25.4 prosemirror-schema-list@1.5.1: dependencies: prosemirror-model: 1.25.4 - prosemirror-state: 1.4.4 + prosemirror-state: 1.4.3 prosemirror-transform: 1.11.0 - prosemirror-state@1.4.4: + prosemirror-state@1.4.3: dependencies: prosemirror-model: 1.25.4 prosemirror-transform: 1.11.0 - prosemirror-view: 1.41.6 + prosemirror-view: 1.41.3 prosemirror-transform@1.11.0: dependencies: prosemirror-model: 1.25.4 - prosemirror-view@1.41.6: + prosemirror-view@1.41.3: dependencies: prosemirror-model: 1.25.4 - prosemirror-state: 1.4.4 + prosemirror-state: 1.4.3 prosemirror-transform: 1.11.0 - protobufjs@7.5.4: + protobufjs@7.2.5: dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 @@ -48300,7 +53993,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.15.35 + '@types/node': 22.15.24 long: 5.3.2 proxy-addr@2.0.7: @@ -48320,12 +54013,26 @@ snapshots: dependencies: punycode: 2.3.1 + public-encrypt@4.0.3: + dependencies: + bn.js: 4.12.3 + browserify-rsa: 4.1.1 + create-hash: 1.2.0 + parse-asn1: 5.1.9 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + + pump@1.0.3: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + pump@2.0.1: dependencies: end-of-stream: 1.4.5 once: 1.4.0 - pump@3.0.3: + pump@3.0.4: dependencies: end-of-stream: 1.4.5 once: 1.4.0 @@ -48379,13 +54086,15 @@ snapshots: dependencies: side-channel: 1.1.0 - qs@6.5.5: {} - query-string@4.3.4: dependencies: object-assign: 4.1.1 strict-uri-encode: 1.1.0 + querystring-es3@0.2.1: {} + + querystring@0.2.1: {} + querystringify@2.2.0: {} queue-microtask@1.2.3: {} @@ -48415,6 +54124,11 @@ snapshots: dependencies: safe-buffer: 5.2.1 + randomfill@1.0.4: + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + range-parser@1.2.0: {} range-parser@1.2.1: {} @@ -48433,19 +54147,25 @@ snapshots: iconv-lite: 0.7.2 unpipe: 1.0.0 - raw-loader@4.0.2(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + raw-loader@4.0.2(webpack@4.47.0(webpack-cli@4.10.0)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 4.47.0(webpack-cli@4.10.0) - raw-loader@4.0.2(webpack@5.105.2): + raw-loader@4.0.2(webpack@4.47.0(webpack-cli@6.0.1)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 4.47.0(webpack-cli@6.0.1) - rc-config-loader@4.1.3: + raw-loader@4.0.2(webpack@4.47.0): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 4.47.0 + + rc-config-loader@4.1.4: dependencies: debug: 4.4.3(supports-color@8.1.1) js-yaml: 4.1.1 @@ -48494,6 +54214,33 @@ snapshots: prop-types: 15.8.1 react: 18.2.0 + react-dev-utils@11.0.4: + dependencies: + '@babel/code-frame': 7.10.4 + address: 1.1.2 + browserslist: 4.14.2 + chalk: 2.4.2 + cross-spawn: 7.0.3 + detect-port-alt: 1.1.6 + escape-string-regexp: 2.0.0 + filesize: 6.1.0 + find-up: 4.1.0 + fork-ts-checker-webpack-plugin: 4.1.6 + global-modules: 2.0.0 + globby: 11.0.1 + gzip-size: 5.1.1 + immer: 8.0.1 + is-root: 2.1.0 + loader-utils: 2.0.0 + open: 7.4.2 + pkg-up: 3.1.0 + prompts: 2.4.0 + react-error-overlay: 6.1.0 + recursive-readdir: 2.2.2 + shell-quote: 1.7.2 + strip-ansi: 6.0.0 + text-table: 0.2.0 + react-dev-utils@5.0.3: dependencies: address: 1.0.3 @@ -48523,7 +54270,7 @@ snapshots: dependencies: dnd-core: 16.0.1 - react-dnd@16.0.1(@types/hoist-non-react-statics@3.3.7(@types/react@18.2.0))(@types/node@22.15.35)(@types/react@18.2.0)(react@18.2.0): + react-dnd@16.0.1(@types/hoist-non-react-statics@3.3.7(@types/react@18.2.0))(@types/node@22.15.21)(@types/react@18.2.0)(react@18.2.0): dependencies: '@react-dnd/invariant': 4.0.2 '@react-dnd/shallowequal': 4.0.2 @@ -48533,12 +54280,12 @@ snapshots: react: 18.2.0 optionalDependencies: '@types/hoist-non-react-statics': 3.3.7(@types/react@18.2.0) - '@types/node': 22.15.35 + '@types/node': 22.15.21 '@types/react': 18.2.0 - react-docgen-typescript@2.4.0(typescript@4.9.5): + react-docgen-typescript@2.4.0(typescript@4.9.4): dependencies: - typescript: 4.9.5 + typescript: 4.9.4 react-docgen-typescript@2.4.0(typescript@5.8.3): dependencies: @@ -48546,7 +54293,7 @@ snapshots: react-docgen@5.4.3: dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/generator': 7.29.1 '@babel/runtime': 7.28.6 ast-types: 0.14.2 @@ -48561,7 +54308,7 @@ snapshots: react-docgen@7.1.1: dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 '@types/babel__core': 7.20.5 @@ -48591,6 +54338,13 @@ snapshots: react: 19.1.0 scheduler: 0.26.0 + react-draggable@4.5.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-element-to-jsx-string@14.3.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@base2/pretty-print-object': 1.0.1 @@ -48628,24 +54382,40 @@ snapshots: '@babel/runtime': 7.28.6 react: 18.2.0 - react-error-boundary@6.0.3(react@18.2.0): + react-error-boundary@6.0.0(react@18.2.0): dependencies: + '@babel/runtime': 7.28.6 react: 18.2.0 - react-error-boundary@6.0.3(react@19.1.0): + react-error-boundary@6.0.0(react@19.1.0): dependencies: + '@babel/runtime': 7.28.6 react: 19.1.0 react-error-overlay@4.0.1: {} - react-hook-form@7.56.3(react@19.1.0): + react-error-overlay@6.1.0: {} + + react-fast-compare@3.2.2: {} + + react-helmet-async@1.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - react: 19.1.0 + '@babel/runtime': 7.28.6 + invariant: 2.2.4 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-fast-compare: 3.2.2 + shallowequal: 1.1.0 react-hook-form@7.56.4(react@18.2.0): dependencies: react: 18.2.0 + react-hook-form@7.56.4(react@19.1.0): + dependencies: + react: 19.1.0 + react-hook-form@7.63.0(react@18.2.0): dependencies: react: 18.2.0 @@ -48669,14 +54439,14 @@ snapshots: dependencies: react: 19.1.0 - react-immutable-proptypes@2.2.0(immutable@3.8.2): + react-immutable-proptypes@2.2.0(immutable@3.8.3): dependencies: - immutable: 3.8.2 + immutable: 3.8.3 invariant: 2.2.4 - react-immutable-pure-component@2.2.2(immutable@3.8.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + react-immutable-pure-component@2.2.2(immutable@3.8.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - immutable: 3.8.2 + immutable: 3.8.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -48695,33 +54465,33 @@ snapshots: dependencies: react: 19.1.0 - react-intl@7.1.14(react@18.2.0)(typescript@5.8.3): + react-intl@7.1.11(react@18.2.0)(typescript@5.8.3): dependencies: - '@formatjs/ecma402-abstract': 2.3.6 - '@formatjs/icu-messageformat-parser': 2.11.4 - '@formatjs/intl': 3.1.8(typescript@5.8.3) + '@formatjs/ecma402-abstract': 2.3.4 + '@formatjs/icu-messageformat-parser': 2.11.2 + '@formatjs/intl': 3.1.6(typescript@5.8.3) '@types/hoist-non-react-statics': 3.3.7(@types/react@18.2.0) '@types/react': 18.2.0 hoist-non-react-statics: 3.3.2 - intl-messageformat: 10.7.18 + intl-messageformat: 10.7.16 react: 18.2.0 tslib: 2.8.1 optionalDependencies: typescript: 5.8.3 - react-intl@7.1.14(react@19.1.0)(typescript@4.9.5): + react-intl@7.1.11(react@19.1.0)(typescript@4.9.4): dependencies: - '@formatjs/ecma402-abstract': 2.3.6 - '@formatjs/icu-messageformat-parser': 2.11.4 - '@formatjs/intl': 3.1.8(typescript@4.9.5) + '@formatjs/ecma402-abstract': 2.3.4 + '@formatjs/icu-messageformat-parser': 2.11.2 + '@formatjs/intl': 3.1.6(typescript@4.9.4) '@types/hoist-non-react-statics': 3.3.7(@types/react@18.2.0) '@types/react': 18.2.0 hoist-non-react-statics: 3.3.2 - intl-messageformat: 10.7.18 + intl-messageformat: 10.7.16 react: 19.1.0 tslib: 2.8.1 optionalDependencies: - typescript: 4.9.5 + typescript: 4.9.4 react-is@16.13.1: {} @@ -48758,13 +54528,18 @@ snapshots: prop-types: 15.8.1 react: 18.2.0 - react-lottie@1.2.10(react@19.1.0): + react-lottie@1.2.3(react@19.1.0): dependencies: babel-runtime: 6.26.0 lottie-web: 5.13.0 - prop-types: 15.8.1 react: 19.1.0 + react-lottie@1.2.4(react@18.2.0): + dependencies: + babel-runtime: 6.26.0 + lottie-web: 5.13.0 + react: 18.2.0 + react-markdown@10.1.0(@types/react@18.2.0)(react@18.2.0): dependencies: '@types/hast': 3.0.4 @@ -48783,7 +54558,7 @@ snapshots: transitivePeerDependencies: - supports-color - react-markdown@9.0.3(@types/react@18.2.0)(react@18.2.0): + react-markdown@9.0.1(@types/react@18.2.0)(react@18.2.0): dependencies: '@types/hast': 3.0.4 '@types/react': 18.2.0 @@ -48820,10 +54595,22 @@ snapshots: warning: 4.0.3 optionalDependencies: '@types/react': 18.2.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a + + react-popper-tooltip@3.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@babel/runtime': 7.28.6 + '@popperjs/core': 2.11.8 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-popper: 2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + + react-popper@2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@popperjs/core': 2.11.8 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-fast-compare: 3.2.2 + warning: 4.0.3 react-redux@9.2.0(@types/react@18.2.0)(react@18.2.0)(redux@5.0.1): dependencies: @@ -48836,6 +54623,8 @@ snapshots: react-refresh@0.11.0: {} + react-refresh@0.8.3: {} + react-remove-scroll-bar@2.3.8(@types/react@18.2.0)(react@18.2.0): dependencies: react: 18.2.0 @@ -48904,22 +54693,22 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 - react-scripts-ts@3.1.0(@swc/core@1.15.11(@swc/helpers@0.5.19))(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(babel-runtime@6.26.0)(typescript@5.8.3)(webpack-cli@6.0.1): + react-scripts-ts@3.1.0(babel-core@7.0.0-bridge.0(@babel/core@7.27.1))(babel-runtime@6.26.0)(typescript@5.8.3): dependencies: autoprefixer: 7.1.6 babel-jest: 20.0.3 - babel-loader: 7.1.2(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(webpack@5.105.2) + babel-loader: 7.1.2(babel-core@7.0.0-bridge.0(@babel/core@7.27.1))(webpack@3.8.1) babel-preset-react-app: 3.1.2(babel-runtime@6.26.0) case-sensitive-paths-webpack-plugin: 2.1.1 chalk: 1.1.3 css-loader: 0.28.7 dotenv: 4.0.0 dotenv-expand: 4.2.0 - extract-text-webpack-plugin: 3.0.2(webpack@5.105.2) - file-loader: 1.1.5(webpack@5.105.2) - fork-ts-checker-webpack-plugin: 0.2.10(typescript@5.8.3)(webpack@5.105.2) + extract-text-webpack-plugin: 3.0.2(webpack@3.8.1) + file-loader: 1.1.5(webpack@3.8.1) + fork-ts-checker-webpack-plugin: 0.2.10(typescript@5.8.3)(webpack@3.8.1) fs-extra: 3.0.1 - html-webpack-plugin: 2.29.0(webpack@5.105.2) + html-webpack-plugin: 2.29.0(webpack@3.8.1) jest: 20.0.4 object-assign: 4.1.1 postcss-flexbugs-fixes: 3.2.0 @@ -48930,7 +54719,7 @@ snapshots: resolve: 1.6.0 source-map-loader: 0.2.4 style-loader: 0.19.0 - sw-precache-webpack-plugin: 0.11.4(webpack@5.105.2) + sw-precache-webpack-plugin: 0.11.4(webpack@3.8.1) ts-jest: 22.0.1(jest@20.0.4)(typescript@5.8.3) ts-loader: 2.3.7 tsconfig-paths-webpack-plugin: 2.0.0 @@ -48938,42 +54727,34 @@ snapshots: tslint-config-prettier: 1.18.0 tslint-react: 3.6.0(tslint@5.20.1(typescript@5.8.3))(typescript@5.8.3) typescript: 5.8.3 - uglifyjs-webpack-plugin: 1.2.5(webpack@5.105.2) - url-loader: 0.6.2(file-loader@1.1.5(webpack@5.105.2)) - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) - webpack-dev-server: 5.2.3(webpack-cli@6.0.1)(webpack@5.105.2) - webpack-manifest-plugin: 1.3.2(webpack@5.105.2) + uglifyjs-webpack-plugin: 1.2.5(webpack@3.8.1) + url-loader: 0.6.2(file-loader@1.1.5(webpack@3.8.1)) + webpack: 3.8.1 + webpack-dev-server: 2.11.3(webpack@3.8.1) + webpack-manifest-plugin: 1.3.2(webpack@3.8.1) whatwg-fetch: 2.0.3 optionalDependencies: fsevents: 1.2.13 transitivePeerDependencies: - - '@swc/core' - babel-core - babel-runtime - - bufferutil - - debug - - esbuild - - supports-color - - uglify-js - - utf-8-validate - - webpack-cli - react-scripts-ts@3.1.0(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(babel-runtime@6.26.0)(typescript@5.8.3): + react-scripts-ts@3.1.0(babel-core@7.0.0-bridge.0(@babel/core@7.29.0))(babel-runtime@6.26.0)(typescript@5.8.3): dependencies: autoprefixer: 7.1.6 babel-jest: 20.0.3 - babel-loader: 7.1.2(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(webpack@5.105.2) + babel-loader: 7.1.2(babel-core@7.0.0-bridge.0(@babel/core@7.29.0))(webpack@3.8.1) babel-preset-react-app: 3.1.2(babel-runtime@6.26.0) case-sensitive-paths-webpack-plugin: 2.1.1 chalk: 1.1.3 css-loader: 0.28.7 dotenv: 4.0.0 dotenv-expand: 4.2.0 - extract-text-webpack-plugin: 3.0.2(webpack@5.105.2) - file-loader: 1.1.5(webpack@5.105.2) - fork-ts-checker-webpack-plugin: 0.2.10(typescript@5.8.3)(webpack@5.105.2) + extract-text-webpack-plugin: 3.0.2(webpack@3.8.1) + file-loader: 1.1.5(webpack@3.8.1) + fork-ts-checker-webpack-plugin: 0.2.10(typescript@5.8.3)(webpack@3.8.1) fs-extra: 3.0.1 - html-webpack-plugin: 2.29.0(webpack@5.105.2) + html-webpack-plugin: 2.29.0(webpack@3.8.1) jest: 20.0.4 object-assign: 4.1.1 postcss-flexbugs-fixes: 3.2.0 @@ -48984,7 +54765,7 @@ snapshots: resolve: 1.6.0 source-map-loader: 0.2.4 style-loader: 0.19.0 - sw-precache-webpack-plugin: 0.11.4(webpack@5.105.2) + sw-precache-webpack-plugin: 0.11.4(webpack@3.8.1) ts-jest: 22.0.1(jest@20.0.4)(typescript@5.8.3) ts-loader: 2.3.7 tsconfig-paths-webpack-plugin: 2.0.0 @@ -48992,31 +54773,36 @@ snapshots: tslint-config-prettier: 1.18.0 tslint-react: 3.6.0(tslint@5.20.1(typescript@5.8.3))(typescript@5.8.3) typescript: 5.8.3 - uglifyjs-webpack-plugin: 1.2.5(webpack@5.105.2) - url-loader: 0.6.2(file-loader@1.1.5(webpack@5.105.2)) - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-dev-server: 5.2.3(webpack@5.105.2) - webpack-manifest-plugin: 1.3.2(webpack@5.105.2) + uglifyjs-webpack-plugin: 1.2.5(webpack@3.8.1) + url-loader: 0.6.2(file-loader@1.1.5(webpack@3.8.1)) + webpack: 3.8.1 + webpack-dev-server: 2.11.3(webpack@3.8.1) + webpack-manifest-plugin: 1.3.2(webpack@3.8.1) whatwg-fetch: 2.0.3 optionalDependencies: fsevents: 1.2.13 transitivePeerDependencies: - - '@swc/core' - babel-core - babel-runtime - - bufferutil - - debug - - esbuild - - supports-color - - uglify-js - - utf-8-validate - - webpack-cli + + react-shallow-renderer@16.15.0(react@18.2.0): + dependencies: + object-assign: 4.1.1 + react: 18.2.0 + react-is: 18.3.1 react-simple-code-editor@0.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + react-sizeme@3.0.2: + dependencies: + element-resize-detector: 1.2.4 + invariant: 2.2.4 + shallowequal: 1.1.0 + throttle-debounce: 3.0.1 + react-split-pane@0.1.92(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: prop-types: 15.8.1 @@ -49053,7 +54839,16 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 - react-syntax-highlighter@15.6.6(react@18.2.0): + react-syntax-highlighter@13.5.3(react@18.2.0): + dependencies: + '@babel/runtime': 7.28.6 + highlight.js: 10.7.3 + lowlight: 1.20.0 + prismjs: 1.30.0 + react: 18.2.0 + refractor: 3.6.0 + + react-syntax-highlighter@15.6.1(react@18.2.0): dependencies: '@babel/runtime': 7.28.6 highlight.js: 10.7.3 @@ -49063,7 +54858,24 @@ snapshots: react: 18.2.0 refractor: 3.6.0 - react-test-renderer@19.1.5(react@18.2.0): + react-syntax-highlighter@15.6.1(react@19.1.0): + dependencies: + '@babel/runtime': 7.28.6 + highlight.js: 10.7.3 + highlightjs-vue: 1.0.0 + lowlight: 1.20.0 + prismjs: 1.30.0 + react: 19.1.0 + refractor: 3.6.0 + + react-test-renderer@18.3.0(react@18.2.0): + dependencies: + react: 18.2.0 + react-is: 18.3.1 + react-shallow-renderer: 16.15.0(react@18.2.0) + scheduler: 0.23.2 + + react-test-renderer@19.1.0(react@18.2.0): dependencies: react: 18.2.0 react-is: 19.2.4 @@ -49102,6 +54914,11 @@ snapshots: find-up: 1.1.2 read-pkg: 1.1.0 + read-pkg-up@2.0.0: + dependencies: + find-up: 2.1.0 + read-pkg: 2.0.0 + read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 @@ -49120,6 +54937,12 @@ snapshots: normalize-package-data: 2.5.0 path-type: 1.1.0 + read-pkg@2.0.0: + dependencies: + load-json-file: 2.0.0 + normalize-package-data: 2.5.0 + path-type: 2.0.0 + read-pkg@5.2.0: dependencies: '@types/normalize-package-data': 2.4.4 @@ -49185,18 +55008,6 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - readable-stream@4.7.0: - dependencies: - abort-controller: 3.0.0 - buffer: 6.0.3 - events: 3.3.0 - process: 0.11.10 - string_decoder: 1.3.0 - - readable-web-to-node-stream@3.0.4: - dependencies: - readable-stream: 4.7.0 - readdirp@2.2.1: dependencies: graceful-fs: 4.2.11 @@ -49233,7 +55044,11 @@ snapshots: recursive-readdir@2.2.1: dependencies: - minimatch: 3.0.3 + minimatch: 3.1.4 + + recursive-readdir@2.2.2: + dependencies: + minimatch: 3.1.4 redent@1.0.0: dependencies: @@ -49260,9 +55075,9 @@ snapshots: dependencies: balanced-match: 1.0.2 - redux-immutable@4.0.0(immutable@3.8.2): + redux-immutable@4.0.0(immutable@3.8.3): dependencies: - immutable: 3.8.2 + immutable: 3.8.3 redux@4.2.1: dependencies: @@ -49352,6 +55167,16 @@ snapshots: dependencies: jsesc: 3.1.0 + rehype-katex@7.0.1: + dependencies: + '@types/hast': 3.0.4 + '@types/katex': 0.16.8 + hast-util-from-html-isomorphic: 2.0.0 + hast-util-to-text: 4.0.2 + katex: 0.16.38 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + rehype-raw@6.1.0: dependencies: '@types/hast': 2.3.10 @@ -49369,7 +55194,7 @@ snapshots: remap-istanbul@0.13.0: dependencies: istanbul: 0.4.5 - minimatch: 3.1.3 + minimatch: 3.1.4 plugin-error: 1.0.1 source-map: 0.6.1 through2: 3.0.0 @@ -49401,6 +55226,15 @@ snapshots: transitivePeerDependencies: - supports-color + remark-math@6.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-math: 3.0.0 + micromark-extension-math: 3.1.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + remark-mdx@1.6.22: dependencies: '@babel/core': 7.12.9 @@ -49515,7 +55349,7 @@ snapshots: combined-stream: 1.0.8 extend: 3.0.2 forever-agent: 0.6.1 - form-data: 4.0.5 + form-data: 2.3.3 har-validator: 5.1.5 http-signature: 1.2.0 is-typedarray: 1.0.0 @@ -49524,7 +55358,7 @@ snapshots: mime-types: 2.1.35 oauth-sign: 0.9.0 performance-now: 2.1.0 - qs: 6.5.5 + qs: 6.14.2 safe-buffer: 5.2.1 tough-cookie: 2.5.0 tunnel-agent: 0.6.0 @@ -49550,6 +55384,10 @@ snapshots: resolve-alpn@1.2.1: {} + resolve-cwd@2.0.0: + dependencies: + resolve-from: 3.0.0 + resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 @@ -49559,6 +55397,8 @@ snapshots: expand-tilde: 2.0.2 global-modules: 1.0.0 + resolve-from@3.0.0: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -49581,9 +55421,12 @@ snapshots: dependencies: path-parse: 1.0.7 - resolve@2.0.0-next.5: + resolve@2.0.0-next.6: dependencies: + es-errors: 1.3.0 is-core-module: 2.16.1 + node-exports-info: 1.6.0 + object-keys: 1.1.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -49618,6 +55461,10 @@ snapshots: rfdc@1.4.1: {} + right-align@0.1.3: + dependencies: + align-text: 0.1.4 + rimraf@2.6.3: dependencies: glob: 7.2.3 @@ -49630,7 +55477,7 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@5.0.10: + rimraf@5.0.5: dependencies: glob: 10.5.0 @@ -49639,26 +55486,31 @@ snapshots: glob: 11.1.0 package-json-from-dist: 1.0.1 - rollup-plugin-import-css@3.5.8(rollup@4.57.1): + ripemd160@2.0.3: + dependencies: + hash-base: 3.1.2 + inherits: 2.0.4 + + rollup-plugin-import-css@3.5.8(rollup@4.41.0): dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) - rollup: 4.57.1 + '@rollup/pluginutils': 5.3.0(rollup@4.41.0) + rollup: 4.41.0 - rollup-plugin-peer-deps-external@2.2.4(rollup@4.57.1): + rollup-plugin-peer-deps-external@2.2.4(rollup@4.41.0): dependencies: - rollup: 4.57.1 + rollup: 4.41.0 - rollup-plugin-postcss@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)): + rollup-plugin-postcss@4.0.2(postcss@8.5.4)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)): dependencies: chalk: 4.1.2 concat-with-sourcemaps: 1.1.0 - cssnano: 5.1.15(postcss@8.5.6) + cssnano: 5.1.15(postcss@8.5.4) import-cwd: 3.0.0 p-queue: 6.6.2 pify: 5.0.0 - postcss: 8.5.6 - postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) - postcss-modules: 4.3.1(postcss@8.5.6) + postcss: 8.5.4 + postcss-load-config: 3.1.4(postcss@8.5.4)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) + postcss-modules: 4.3.1(postcss@8.5.4) promise.series: 0.2.0 resolve: 1.22.11 rollup-pluginutils: 2.8.2 @@ -49671,13 +55523,13 @@ snapshots: dependencies: rollup-pluginutils: 2.8.2 - rollup-plugin-sourcemaps@0.6.3(@types/node@22.15.35)(rollup@1.32.1): + rollup-plugin-sourcemaps@0.6.3(@types/node@22.15.21)(rollup@1.32.1): dependencies: '@rollup/pluginutils': 3.1.0(rollup@1.32.1) rollup: 1.32.1 source-map-resolve: 0.6.0 optionalDependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.21 rollup-plugin-svg@2.0.0: dependencies: @@ -49689,7 +55541,7 @@ snapshots: jest-worker: 24.9.0 rollup: 1.32.1 rollup-pluginutils: 2.8.2 - serialize-javascript: 4.0.0 + serialize-javascript: 7.0.3 terser: 4.8.1 rollup-plugin-typescript2@0.27.3(rollup@1.32.1)(typescript@3.9.10): @@ -49702,12 +55554,12 @@ snapshots: tslib: 2.0.1 typescript: 3.9.10 - rollup-plugin-typescript2@0.36.0(rollup@4.57.1)(typescript@5.8.3): + rollup-plugin-typescript2@0.36.0(rollup@4.41.0)(typescript@5.8.3): dependencies: '@rollup/pluginutils': 4.2.1 find-cache-dir: 3.3.2 fs-extra: 10.1.0 - rollup: 4.57.1 + rollup: 4.41.0 semver: 7.7.4 tslib: 2.8.1 typescript: 5.8.3 @@ -49715,7 +55567,7 @@ snapshots: rollup-pluginutils@1.5.2: dependencies: estree-walker: 0.2.1 - minimatch: 3.1.3 + minimatch: 3.1.4 rollup-pluginutils@2.8.2: dependencies: @@ -49724,38 +55576,33 @@ snapshots: rollup@1.32.1: dependencies: '@types/estree': 1.0.8 - '@types/node': 22.15.35 + '@types/node': 22.15.24 acorn: 7.4.1 - rollup@4.57.1: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.57.1 - '@rollup/rollup-android-arm64': 4.57.1 - '@rollup/rollup-darwin-arm64': 4.57.1 - '@rollup/rollup-darwin-x64': 4.57.1 - '@rollup/rollup-freebsd-arm64': 4.57.1 - '@rollup/rollup-freebsd-x64': 4.57.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 - '@rollup/rollup-linux-arm-musleabihf': 4.57.1 - '@rollup/rollup-linux-arm64-gnu': 4.57.1 - '@rollup/rollup-linux-arm64-musl': 4.57.1 - '@rollup/rollup-linux-loong64-gnu': 4.57.1 - '@rollup/rollup-linux-loong64-musl': 4.57.1 - '@rollup/rollup-linux-ppc64-gnu': 4.57.1 - '@rollup/rollup-linux-ppc64-musl': 4.57.1 - '@rollup/rollup-linux-riscv64-gnu': 4.57.1 - '@rollup/rollup-linux-riscv64-musl': 4.57.1 - '@rollup/rollup-linux-s390x-gnu': 4.57.1 - '@rollup/rollup-linux-x64-gnu': 4.57.1 - '@rollup/rollup-linux-x64-musl': 4.57.1 - '@rollup/rollup-openbsd-x64': 4.57.1 - '@rollup/rollup-openharmony-arm64': 4.57.1 - '@rollup/rollup-win32-arm64-msvc': 4.57.1 - '@rollup/rollup-win32-ia32-msvc': 4.57.1 - '@rollup/rollup-win32-x64-gnu': 4.57.1 - '@rollup/rollup-win32-x64-msvc': 4.57.1 + rollup@4.41.0: + dependencies: + '@types/estree': 1.0.7 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.41.0 + '@rollup/rollup-android-arm64': 4.41.0 + '@rollup/rollup-darwin-arm64': 4.41.0 + '@rollup/rollup-darwin-x64': 4.41.0 + '@rollup/rollup-freebsd-arm64': 4.41.0 + '@rollup/rollup-freebsd-x64': 4.41.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.41.0 + '@rollup/rollup-linux-arm-musleabihf': 4.41.0 + '@rollup/rollup-linux-arm64-gnu': 4.41.0 + '@rollup/rollup-linux-arm64-musl': 4.41.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.41.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.41.0 + '@rollup/rollup-linux-riscv64-gnu': 4.41.0 + '@rollup/rollup-linux-riscv64-musl': 4.41.0 + '@rollup/rollup-linux-s390x-gnu': 4.41.0 + '@rollup/rollup-linux-x64-gnu': 4.41.0 + '@rollup/rollup-linux-x64-musl': 4.41.0 + '@rollup/rollup-win32-arm64-msvc': 4.41.0 + '@rollup/rollup-win32-ia32-msvc': 4.41.0 + '@rollup/rollup-win32-x64-msvc': 4.41.0 fsevents: 2.3.3 rope-sequence@1.3.4: {} @@ -49839,7 +55686,7 @@ snapshots: anymatch: 1.3.2 exec-sh: 0.2.2 fb-watchman: 1.9.2 - minimatch: 3.1.3 + minimatch: 3.1.4 minimist: 1.2.8 walker: 1.0.8 watch: 0.10.0 @@ -49860,31 +55707,32 @@ snapshots: dependencies: truncate-utf8-bytes: 1.0.2 - sass-loader@13.3.3(sass@1.97.3)(webpack@5.105.2): + sass-loader@13.2.0(sass@1.89.0)(webpack@5.104.1): dependencies: + klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) optionalDependencies: - sass: 1.97.3 + sass: 1.89.0 - sass-loader@16.0.7(sass@1.97.3)(webpack@5.105.2): + sass-loader@16.0.5(sass@1.89.0)(webpack@5.104.1): dependencies: neo-async: 2.6.2 optionalDependencies: - sass: 1.97.3 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + sass: 1.89.0 + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) - sass@1.97.3: + sass@1.89.0: dependencies: chokidar: 4.0.3 - immutable: 5.1.4 + immutable: 3.8.3 source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.6 sax@1.2.4: {} - sax@1.4.4: {} + sax@1.5.0: {} saxes@3.1.11: dependencies: @@ -49909,6 +55757,12 @@ snapshots: ajv: 6.14.0 ajv-keywords: 3.5.2(ajv@6.14.0) + schema-utils@1.0.0: + dependencies: + ajv: 6.14.0 + ajv-errors: 1.0.1(ajv@6.14.0) + ajv-keywords: 3.5.2(ajv@6.14.0) + schema-utils@2.7.0: dependencies: '@types/json-schema': 7.0.15 @@ -49960,6 +55814,10 @@ snapshots: - bufferutil - utf-8-validate + selfsigned@1.10.14: + dependencies: + node-forge: 0.10.0 + selfsigned@5.5.0: dependencies: '@peculiar/x509': 1.14.3 @@ -50013,19 +55871,7 @@ snapshots: dependencies: type-fest: 0.20.2 - serialize-javascript@1.9.1: {} - - serialize-javascript@4.0.0: - dependencies: - randombytes: 2.1.0 - - serialize-javascript@5.0.1: - dependencies: - randombytes: 2.1.0 - - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 + serialize-javascript@7.0.3: {} serve-favicon@2.5.1: dependencies: @@ -50040,7 +55886,7 @@ snapshots: bytes: 3.0.0 content-disposition: 0.5.2 mime-types: 2.1.18 - minimatch: 3.1.2 + minimatch: 3.1.4 path-is-inside: 1.0.2 path-to-regexp: 3.3.0 range-parser: 1.2.0 @@ -50139,6 +55985,8 @@ snapshots: array-reduce: 0.0.0 jsonify: 0.0.1 + shell-quote@1.7.2: {} + shell-quote@1.8.3: {} shelljs@0.8.5: @@ -50153,6 +56001,11 @@ snapshots: short-unique-id@5.3.2: {} + shx@0.3.4: + dependencies: + minimist: 1.2.8 + shelljs: 0.8.5 + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -50221,6 +56074,11 @@ snapshots: astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 4.0.0 + slice-ansi@7.1.2: dependencies: ansi-styles: 6.2.3 @@ -50239,6 +56097,11 @@ snapshots: json3: 3.3.3 url-parse: 1.5.10 + sockjs@0.3.19: + dependencies: + faye-websocket: 0.10.0 + uuid: 3.4.0 + sockjs@0.3.24: dependencies: faye-websocket: 0.11.4 @@ -50273,17 +56136,18 @@ snapshots: async: 2.6.4 loader-utils: 1.4.2 - source-map-loader@4.0.2(webpack@5.105.2): + source-map-loader@4.0.1(webpack@5.104.1): dependencies: + abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) - source-map-loader@5.0.0(webpack@5.105.2): + source-map-loader@5.0.0(webpack@5.104.1): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) source-map-resolve@0.6.0: dependencies: @@ -50344,6 +56208,16 @@ snapshots: spdx-license-ids@3.0.23: {} + spdy-transport@2.1.1: + dependencies: + debug: 2.6.9 + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + wbuf: 1.7.3 + spdy-transport@3.0.0: dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -50355,6 +56229,15 @@ snapshots: transitivePeerDependencies: - supports-color + spdy@3.4.7: + dependencies: + debug: 2.6.9 + handle-thing: 1.2.5 + http-deceiver: 1.2.7 + safe-buffer: 5.2.1 + select-hose: 2.0.0 + spdy-transport: 2.1.1 + spdy@4.0.2: dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -50383,6 +56266,10 @@ snapshots: dependencies: safe-buffer: 5.2.1 + ssri@6.0.2: + dependencies: + figgy-pudding: 3.5.2 + ssri@8.0.1: dependencies: minipass: 3.3.6 @@ -50448,9 +56335,9 @@ snapshots: store2@2.14.4: {} - storybook@8.6.15(prettier@3.5.3): + storybook@8.6.13(prettier@3.5.3): dependencies: - '@storybook/core': 8.6.15(prettier@3.5.3)(storybook@8.6.15(prettier@3.5.3)) + '@storybook/core': 8.6.13(prettier@3.5.3)(storybook@8.6.13(prettier@3.5.3)) optionalDependencies: prettier: 3.5.3 transitivePeerDependencies: @@ -50458,11 +56345,34 @@ snapshots: - supports-color - utf-8-validate + storybook@8.6.14(prettier@3.5.3): + dependencies: + '@storybook/core': 8.6.14(prettier@3.5.3)(storybook@8.6.14(prettier@3.5.3)) + optionalDependencies: + prettier: 3.5.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + stream-browserify@2.0.2: + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + stream-each@1.2.3: dependencies: end-of-stream: 1.4.5 stream-shift: 1.0.3 + stream-http@2.8.3: + dependencies: + builtin-status-codes: 3.0.0 + inherits: 2.0.4 + readable-stream: 2.3.8 + to-arraybuffer: 1.0.1 + xtend: 4.0.2 + stream-shift@1.0.3: {} streamroller@3.1.5: @@ -50473,15 +56383,6 @@ snapshots: transitivePeerDependencies: - supports-color - streamx@2.23.0: - dependencies: - events-universal: 1.0.1 - fast-fifo: 1.3.2 - text-decoder: 1.2.5 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - strict-event-emitter@0.4.6: {} strict-uri-encode@1.1.0: {} @@ -50525,18 +56426,13 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 string-width@7.2.0: dependencies: emoji-regex: 10.6.0 get-east-asian-width: 1.5.0 - strip-ansi: 7.1.2 - - string-width@8.1.1: - dependencies: - get-east-asian-width: 1.5.0 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 string.fromcodepoint@0.2.1: {} @@ -50634,11 +56530,15 @@ snapshots: dependencies: ansi-regex: 4.1.1 + strip-ansi@6.0.0: + dependencies: + ansi-regex: 5.0.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.2: + strip-ansi@7.2.0: dependencies: ansi-regex: 6.2.2 @@ -50676,12 +56576,11 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - strnum@2.1.2: {} + strnum@2.2.0: {} - strtok3@7.1.1: + strtok3@10.3.4: dependencies: '@tokenizer/token': 0.3.0 - peek-readable: 5.4.2 structured-source@4.0.0: dependencies: @@ -50694,39 +56593,51 @@ snapshots: loader-utils: 1.4.2 schema-utils: 0.3.0 - style-loader@1.3.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + style-loader@1.3.0(webpack@4.47.0(webpack-cli@4.10.0)): + dependencies: + loader-utils: 2.0.4 + schema-utils: 2.7.1 + webpack: 4.47.0(webpack-cli@4.10.0) + + style-loader@1.3.0(webpack@4.47.0(webpack-cli@6.0.1)): dependencies: loader-utils: 2.0.4 schema-utils: 2.7.1 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 4.47.0(webpack-cli@6.0.1) - style-loader@1.3.0(webpack@5.105.2): + style-loader@1.3.0(webpack@4.47.0): dependencies: loader-utils: 2.0.4 schema-utils: 2.7.1 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 4.47.0 - style-loader@2.0.0(webpack@5.105.2): + style-loader@1.3.0(webpack@5.104.1): + dependencies: + loader-utils: 2.0.4 + schema-utils: 2.7.1 + webpack: 5.104.1(webpack-cli@5.1.4) + + style-loader@2.0.0(webpack@5.104.1): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) - style-loader@3.3.4(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)): + style-loader@3.3.4(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)): dependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12) - style-loader@3.3.4(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + style-loader@3.3.4(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))): dependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) - style-loader@3.3.4(webpack@5.105.2): + style-loader@3.3.4(webpack@5.104.1): dependencies: - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) - style-loader@4.0.0(webpack@5.105.2): + style-loader@4.0.0(webpack@5.104.1): dependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) style-mod@4.1.3: {} @@ -50747,38 +56658,37 @@ snapshots: hey-listen: 1.0.8 tslib: 2.8.1 - stylehacks@5.1.1(postcss@8.5.6): + stylehacks@5.1.1(postcss@8.5.4): dependencies: browserslist: 4.28.1 - postcss: 8.5.6 + postcss: 8.5.4 postcss-selector-parser: 6.1.2 - stylelint-config-recommended@16.0.0(stylelint@16.26.1(typescript@5.8.3)): + stylelint-config-recommended@16.0.0(stylelint@16.19.1(typescript@5.8.3)): dependencies: - stylelint: 16.26.1(typescript@5.8.3) + stylelint: 16.19.1(typescript@5.8.3) - stylelint-config-standard@38.0.0(stylelint@16.26.1(typescript@5.8.3)): + stylelint-config-standard@38.0.0(stylelint@16.19.1(typescript@5.8.3)): dependencies: - stylelint: 16.26.1(typescript@5.8.3) - stylelint-config-recommended: 16.0.0(stylelint@16.26.1(typescript@5.8.3)) + stylelint: 16.19.1(typescript@5.8.3) + stylelint-config-recommended: 16.0.0(stylelint@16.19.1(typescript@5.8.3)) - stylelint@16.26.1(typescript@5.8.3): + stylelint@16.19.1(typescript@5.8.3): dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-syntax-patches-for-csstree': 1.0.27 '@csstools/css-tokenizer': 3.0.4 '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) '@dual-bundle/import-meta-resolve': 4.2.1 balanced-match: 2.0.0 colord: 2.9.3 - cosmiconfig: 9.0.0(typescript@5.8.3) + cosmiconfig: 9.0.1(typescript@5.8.3) css-functions-list: 3.3.3 - css-tree: 3.1.0 + css-tree: 3.2.1 debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 fastest-levenshtein: 1.0.16 - file-entry-cache: 11.1.2 + file-entry-cache: 10.1.4 global-modules: 2.0.0 globby: 11.1.0 globjoin: 0.1.4 @@ -50786,15 +56696,15 @@ snapshots: ignore: 7.0.5 imurmurhash: 0.1.4 is-plain-object: 5.0.0 - known-css-properties: 0.37.0 + known-css-properties: 0.36.0 mathml-tag-names: 2.1.3 meow: 13.2.0 micromatch: 4.0.8 normalize-path: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.6 + postcss: 8.5.4 postcss-resolve-nested-selector: 0.1.6 - postcss-safe-parser: 7.0.1(postcss@8.5.6) + postcss-safe-parser: 7.0.1(postcss@8.5.4) postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 @@ -50834,6 +56744,10 @@ snapshots: dependencies: has-flag: 1.0.0 + supports-color@4.5.0: + dependencies: + has-flag: 2.0.0 + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -50870,10 +56784,10 @@ snapshots: svg-tags@1.0.0: {} - svg-url-loader@8.0.0(webpack@5.105.2): + svg-url-loader@8.0.0(webpack@5.104.1): dependencies: - file-loader: 6.2.0(webpack@5.105.2) - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + file-loader: 6.2.0(webpack@5.104.1) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) svg2ttf@4.3.0: dependencies: @@ -50882,7 +56796,7 @@ snapshots: lodash: 4.17.23 microbuffer: 1.0.0 svgpath: 2.6.0 - xmldom: '@xmldom/xmldom@0.8.11' + xmldom: '@xmldom/xmldom@0.8.10' svg2ttf@6.0.3: dependencies: @@ -50897,7 +56811,7 @@ snapshots: dependencies: commander: 9.5.0 glob: 8.1.0 - sax: 1.4.4 + sax: 1.5.0 svg-pathdata: 6.0.3 svgicons2svgfont@5.0.2: @@ -50905,7 +56819,7 @@ snapshots: commander: 2.20.3 neatequal: 1.0.0 readable-stream: 2.3.8 - sax: 1.4.4 + sax: 1.5.0 string.fromcodepoint: 0.2.1 string.prototype.codepointat: 0.2.1 svg-pathdata: 1.0.4 @@ -50920,24 +56834,24 @@ snapshots: sax: 1.2.4 whet.extend: 0.9.9 - svgo@2.8.0: + svgo@2.8.2: dependencies: - '@trysound/sax': 0.2.0 commander: 7.2.0 css-select: 4.3.0 css-tree: 1.1.3 csso: 4.2.0 picocolors: 1.1.1 + sax: 1.5.0 stable: 0.1.8 svgpath@2.6.0: {} - sw-precache-webpack-plugin@0.11.4(webpack@5.105.2): + sw-precache-webpack-plugin@0.11.4(webpack@3.8.1): dependencies: del: 2.2.2 sw-precache: 5.2.1 uglify-js: 3.19.3 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 3.8.1 sw-precache@5.2.1: dependencies: @@ -50957,15 +56871,16 @@ snapshots: path-to-regexp: 1.9.0 serviceworker-cache-polyfill: 4.0.0 - swagger-client@3.36.2: + swagger-client@3.37.0: dependencies: '@babel/runtime-corejs3': 7.29.0 '@scarf/scarf': 1.4.0 - '@swagger-api/apidom-core': 1.5.1 - '@swagger-api/apidom-error': 1.5.1 - '@swagger-api/apidom-json-pointer': 1.5.1 - '@swagger-api/apidom-ns-openapi-3-1': 1.5.1 - '@swagger-api/apidom-reference': 1.5.1 + '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-error': 1.6.0 + '@swagger-api/apidom-json-pointer': 1.6.0 + '@swagger-api/apidom-ns-openapi-3-1': 1.6.0 + '@swagger-api/apidom-ns-openapi-3-2': 1.6.0 + '@swagger-api/apidom-reference': 1.6.0 '@swaggerexpert/cookie': 2.0.2 deepmerge: 4.3.1 fast-json-patch: 3.1.1 @@ -50988,9 +56903,9 @@ snapshots: classnames: 2.5.1 css.escape: 1.5.1 deep-extend: 0.6.0 - dompurify: 3.2.4 + dompurify: 3.3.2 ieee754: 1.2.1 - immutable: 3.8.2 + immutable: 3.8.3 js-file-download: 0.4.12 js-yaml: 4.1.1 lodash: 4.17.23 @@ -51001,18 +56916,18 @@ snapshots: react-copy-to-clipboard: 5.1.0(react@18.2.0) react-debounce-input: 3.3.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0) - react-immutable-proptypes: 2.2.0(immutable@3.8.2) - react-immutable-pure-component: 2.2.2(immutable@3.8.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-immutable-proptypes: 2.2.0(immutable@3.8.3) + react-immutable-pure-component: 2.2.2(immutable@3.8.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-inspector: 6.0.2(react@18.2.0) react-redux: 9.2.0(@types/react@18.2.0)(react@18.2.0)(redux@5.0.1) - react-syntax-highlighter: 15.6.6(react@18.2.0) + react-syntax-highlighter: 15.6.1(react@18.2.0) redux: 5.0.1 - redux-immutable: 4.0.0(immutable@3.8.2) + redux-immutable: 4.0.0(immutable@3.8.3) remarkable: 2.0.1 reselect: 5.1.1 serialize-error: 8.1.0 sha.js: 2.4.12 - swagger-client: 3.36.2 + swagger-client: 3.37.0 url-parse: 1.5.10 xml: 1.0.1 xml-but-prettier: 1.0.1 @@ -51029,9 +56944,9 @@ snapshots: classnames: 2.5.1 css.escape: 1.5.1 deep-extend: 0.6.0 - dompurify: 3.2.4 + dompurify: 3.3.2 ieee754: 1.2.1 - immutable: 3.8.2 + immutable: 3.8.3 js-file-download: 0.4.12 js-yaml: 4.1.1 lodash: 4.17.23 @@ -51042,18 +56957,18 @@ snapshots: react-copy-to-clipboard: 5.1.0(react@18.2.0) react-debounce-input: 3.3.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0) - react-immutable-proptypes: 2.2.0(immutable@3.8.2) - react-immutable-pure-component: 2.2.2(immutable@3.8.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-immutable-proptypes: 2.2.0(immutable@3.8.3) + react-immutable-pure-component: 2.2.2(immutable@3.8.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-inspector: 6.0.2(react@18.2.0) react-redux: 9.2.0(@types/react@18.2.0)(react@18.2.0)(redux@5.0.1) - react-syntax-highlighter: 15.6.6(react@18.2.0) + react-syntax-highlighter: 15.6.1(react@18.2.0) redux: 5.0.1 - redux-immutable: 4.0.0(immutable@3.8.2) + redux-immutable: 4.0.0(immutable@3.8.3) remarkable: 2.0.1 reselect: 5.1.1 serialize-error: 8.1.0 sha.js: 2.4.12 - swagger-client: 3.36.2 + swagger-client: 3.37.0 url-parse: 1.5.10 xml: 1.0.1 xml-but-prettier: 1.0.1 @@ -51062,17 +56977,17 @@ snapshots: - '@types/react' - debug - swc-loader@0.2.7(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + swc-loader@0.2.7(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))): dependencies: - '@swc/core': 1.15.11(@swc/helpers@0.5.19) + '@swc/core': 1.15.18(@swc/helpers@0.5.19) '@swc/counter': 0.1.3 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) - swc-loader@0.2.7(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2): + swc-loader@0.2.7(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack@5.104.1): dependencies: - '@swc/core': 1.15.11(@swc/helpers@0.5.19) + '@swc/core': 1.15.18(@swc/helpers@0.5.19) '@swc/counter': 0.1.3 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) symbol-tree@3.2.4: {} @@ -51108,7 +57023,7 @@ snapshots: tailwind-merge@2.6.1: {} - tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)): + tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -51124,18 +57039,18 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.6 - postcss-import: 15.1.0(postcss@8.5.6) - postcss-js: 4.1.0(postcss@8.5.6) - postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) - postcss-nested: 6.2.0(postcss@8.5.6) + postcss: 8.5.4 + postcss-import: 15.1.0(postcss@8.5.4) + postcss-js: 4.1.0(postcss@8.5.4) + postcss-load-config: 4.0.2(postcss@8.5.4)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) + postcss-nested: 6.2.0(postcss@8.5.4) postcss-selector-parser: 6.1.2 resolve: 1.22.11 sucrase: 3.35.1 transitivePeerDependencies: - ts-node - tailwindcss@4.1.18: {} + tailwindcss@4.1.7: {} tapable@0.2.9: {} @@ -51143,26 +57058,37 @@ snapshots: tapable@2.3.0: {} - tar-fs@3.1.1: + tar-fs@1.16.6: dependencies: - pump: 3.0.3 - tar-stream: 3.1.7 - optionalDependencies: - bare-fs: 4.5.4 - bare-path: 3.0.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a + chownr: 1.1.4 + mkdirp: 0.5.6 + pump: 1.0.3 + tar-stream: 1.6.2 - tar-stream@3.1.7: + tar-fs@2.1.4: dependencies: - b4a: 1.7.4 - fast-fifo: 1.3.2 - streamx: 2.23.0 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.4 + tar-stream: 2.2.0 + + tar-stream@1.6.2: + dependencies: + bl: 1.2.3 + buffer-alloc: 1.2.0 + end-of-stream: 1.4.5 + fs-constants: 1.0.0 + readable-stream: 2.3.8 + to-buffer: 1.2.2 + xtend: 4.0.2 + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.5 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 tar@2.2.2: dependencies: @@ -51181,11 +57107,7 @@ snapshots: targz@1.0.1: dependencies: - tar-fs: 3.1.1 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a + tar-fs: 1.16.6 tcp-port-used@1.0.2: dependencies: @@ -51194,13 +57116,16 @@ snapshots: transitivePeerDependencies: - supports-color - teex@1.0.1: + telejson@5.3.3: dependencies: - streamx: 2.23.0 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true + '@types/is-function': 1.0.3 + global: 4.4.0 + is-function: 1.0.2 + is-regex: 1.2.1 + is-symbol: 1.1.1 + isobject: 4.0.0 + lodash: 4.17.23 + memoizerific: 1.11.3 telejson@6.0.8: dependencies: @@ -51235,6 +57160,8 @@ snapshots: dependencies: execa: 0.7.0 + term-size@2.2.1: {} + terminal-link@2.1.1: dependencies: ansi-escapes: 4.3.2 @@ -51245,65 +57172,174 @@ snapshots: ansi-escapes: 7.3.0 supports-hyperlinks: 3.2.0 - terser-webpack-plugin@4.2.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + terser-webpack-plugin@1.4.6(webpack@4.47.0(webpack-cli@4.10.0)): + dependencies: + cacache: 12.0.4 + find-cache-dir: 2.1.0 + is-wsl: 1.1.0 + schema-utils: 1.0.0 + serialize-javascript: 7.0.3 + source-map: 0.6.1 + terser: 4.8.1 + webpack: 4.47.0(webpack-cli@4.10.0) + webpack-sources: 1.4.3 + worker-farm: 1.7.0 + + terser-webpack-plugin@1.4.6(webpack@4.47.0(webpack-cli@6.0.1)): + dependencies: + cacache: 12.0.4 + find-cache-dir: 2.1.0 + is-wsl: 1.1.0 + schema-utils: 1.0.0 + serialize-javascript: 7.0.3 + source-map: 0.6.1 + terser: 4.8.1 + webpack: 4.47.0(webpack-cli@6.0.1) + webpack-sources: 1.4.3 + worker-farm: 1.7.0 + + terser-webpack-plugin@1.4.6(webpack@4.47.0): + dependencies: + cacache: 12.0.4 + find-cache-dir: 2.1.0 + is-wsl: 1.1.0 + schema-utils: 1.0.0 + serialize-javascript: 7.0.3 + source-map: 0.6.1 + terser: 4.8.1 + webpack: 4.47.0 + webpack-sources: 1.4.3 + worker-farm: 1.7.0 + + terser-webpack-plugin@4.2.3(webpack@4.47.0(webpack-cli@4.10.0)): dependencies: cacache: 15.3.0 find-cache-dir: 3.3.2 jest-worker: 26.6.2 p-limit: 3.1.0 schema-utils: 3.3.0 - serialize-javascript: 5.0.1 + serialize-javascript: 7.0.3 source-map: 0.6.1 terser: 5.46.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 4.47.0(webpack-cli@4.10.0) webpack-sources: 1.4.3 - terser-webpack-plugin@4.2.3(webpack@5.105.2): + terser-webpack-plugin@4.2.3(webpack@4.47.0(webpack-cli@6.0.1)): dependencies: cacache: 15.3.0 find-cache-dir: 3.3.2 jest-worker: 26.6.2 p-limit: 3.1.0 schema-utils: 3.3.0 - serialize-javascript: 5.0.1 + serialize-javascript: 7.0.3 source-map: 0.6.1 terser: 5.46.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 4.47.0(webpack-cli@6.0.1) webpack-sources: 1.4.3 - terser-webpack-plugin@5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)): + terser-webpack-plugin@4.2.3(webpack@4.47.0): + dependencies: + cacache: 15.3.0 + find-cache-dir: 3.3.2 + jest-worker: 26.6.2 + p-limit: 3.1.0 + schema-utils: 3.3.0 + serialize-javascript: 7.0.3 + source-map: 0.6.1 + terser: 5.46.0 + webpack: 4.47.0 + webpack-sources: 1.4.3 + + terser-webpack-plugin@5.3.10(webpack@5.104.1): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 7.0.3 + terser: 5.46.0 + webpack: 5.104.1(webpack-cli@6.0.1) + + terser-webpack-plugin@5.3.14(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - serialize-javascript: 6.0.2 + serialize-javascript: 7.0.3 terser: 5.46.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12) optionalDependencies: - '@swc/core': 1.15.11(@swc/helpers@0.5.19) + '@swc/core': 1.15.18(@swc/helpers@0.5.19) esbuild: 0.25.12 - terser-webpack-plugin@5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + terser-webpack-plugin@5.3.14(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - serialize-javascript: 6.0.2 + serialize-javascript: 7.0.3 terser: 5.46.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) optionalDependencies: - '@swc/core': 1.15.11(@swc/helpers@0.5.19) + '@swc/core': 1.15.18(@swc/helpers@0.5.19) - terser-webpack-plugin@5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2): + terser-webpack-plugin@5.3.14(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack@5.104.1): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - serialize-javascript: 6.0.2 + serialize-javascript: 7.0.3 terser: 5.46.0 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) optionalDependencies: - '@swc/core': 1.15.11(@swc/helpers@0.5.19) + '@swc/core': 1.15.18(@swc/helpers@0.5.19) + + terser-webpack-plugin@5.3.14(webpack@5.104.1): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + serialize-javascript: 7.0.3 + terser: 5.46.0 + webpack: 5.104.1(webpack-cli@6.0.1) + + terser-webpack-plugin@5.3.17(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.46.0 + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12) + optionalDependencies: + '@swc/core': 1.15.18(@swc/helpers@0.5.19) + esbuild: 0.25.12 + + terser-webpack-plugin@5.3.17(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.46.0 + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) + optionalDependencies: + '@swc/core': 1.15.18(@swc/helpers@0.5.19) + + terser-webpack-plugin@5.3.17(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack@5.104.1): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.46.0 + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + optionalDependencies: + '@swc/core': 1.15.18(@swc/helpers@0.5.19) + + terser-webpack-plugin@5.3.17(webpack@5.104.1): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.46.0 + webpack: 5.104.1(webpack-cli@5.1.4) terser@4.8.1: dependencies: @@ -51330,19 +57366,13 @@ snapshots: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 - minimatch: 3.1.3 + minimatch: 3.1.4 test-exclude@7.0.2: dependencies: '@istanbuljs/schema': 0.1.3 glob: 10.5.0 - minimatch: 10.2.2 - - text-decoder@1.2.5: - dependencies: - b4a: 1.7.4 - transitivePeerDependencies: - - react-native-b4a + minimatch: 10.2.3 text-hex@1.0.0: {} @@ -51368,6 +57398,8 @@ snapshots: throat@5.0.0: {} + throttle-debounce@3.0.1: {} + through2@2.0.5: dependencies: readable-stream: 2.3.8 @@ -51382,12 +57414,13 @@ snapshots: thunky@1.1.0: {} + time-stamp@2.2.0: {} + timed-out@4.0.1: {} - timers-ext@0.1.8: + timers-browserify@2.0.12: dependencies: - es5-ext: 0.10.64 - next-tick: 1.1.0 + setimmediate: 1.0.5 timezone-support@3.1.0: dependencies: @@ -51417,10 +57450,14 @@ snapshots: dependencies: os-tmpdir: 1.0.2 + tmp@0.2.4: {} + tmp@0.2.5: {} tmpl@1.0.5: {} + to-arraybuffer@1.0.1: {} + to-buffer@1.2.2: dependencies: isarray: 2.0.5 @@ -51448,8 +57485,9 @@ snapshots: toidentifier@1.0.1: {} - token-types@5.0.1: + token-types@6.1.2: dependencies: + '@borewit/text-codec': 0.2.1 '@tokenizer/token': 0.3.0 ieee754: 1.2.1 @@ -51495,7 +57533,7 @@ snapshots: tree-sitter-json@0.24.8(tree-sitter@0.21.1): dependencies: - node-addon-api: 8.5.0 + node-addon-api: 8.6.0 node-gyp-build: 4.8.4 optionalDependencies: tree-sitter: 0.21.1 @@ -51503,13 +57541,13 @@ snapshots: tree-sitter@0.21.1: dependencies: - node-addon-api: 8.5.0 + node-addon-api: 8.6.0 node-gyp-build: 4.8.4 optional: true tree-sitter@0.22.4: dependencies: - node-addon-api: 8.5.0 + node-addon-api: 8.6.0 node-gyp-build: 4.8.4 optional: true @@ -51579,12 +57617,12 @@ snapshots: typescript: 3.9.10 yargs-parser: 18.1.3 - ts-jest@29.3.4(@babel/core@7.27.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.7))(jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)))(typescript@5.8.3): + ts-jest@29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(jest@29.7.0(@types/node@22.15.19)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)))(typescript@5.8.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + jest: 29.7.0(@types/node@22.15.19)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -51594,17 +57632,17 @@ snapshots: typescript: 5.8.3 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.27.7) + babel-jest: 29.7.0(@babel/core@7.27.1) - ts-jest@29.3.4(@babel/core@7.27.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@30.2.0(@babel/core@7.27.7))(esbuild@0.25.12)(jest@30.0.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)))(typescript@5.8.3): + ts-jest@29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(jest@29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)))(typescript@5.8.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 30.0.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3)) + jest: 29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -51614,10 +57652,30 @@ snapshots: typescript: 5.8.3 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 30.2.0(@babel/core@7.27.7) + babel-jest: 29.7.0(@babel/core@7.27.1) + + ts-jest@29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@30.0.0(@babel/core@7.27.1))(esbuild@0.25.12)(jest@30.0.0(@types/node@22.15.21)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3)))(typescript@5.8.3): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 30.0.0(@types/node@22.15.21)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.7.4 + type-fest: 4.41.0 + typescript: 5.8.3 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.27.1 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 30.0.0(@babel/core@7.27.1) esbuild: 0.25.12 ts-loader@2.3.7: @@ -51627,15 +57685,53 @@ snapshots: loader-utils: 1.4.2 semver: 5.7.2 - ts-loader@9.5.4(typescript@5.8.3)(webpack@5.105.2): + ts-loader@9.4.1(typescript@5.8.3)(webpack@5.104.1): + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.20.0 + micromatch: 4.0.8 + semver: 7.7.4 + typescript: 5.8.3 + webpack: 5.104.1(webpack-cli@6.0.1) + + ts-loader@9.4.4(typescript@5.8.3)(webpack@5.104.1): dependencies: chalk: 4.1.2 - enhanced-resolve: 5.19.0 + enhanced-resolve: 5.20.0 + micromatch: 4.0.8 + semver: 7.7.4 + typescript: 5.8.3 + webpack: 5.104.1(webpack-cli@5.1.4) + + ts-loader@9.5.0(typescript@5.8.3)(webpack@5.104.1): + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.20.0 micromatch: 4.0.8 semver: 7.7.4 source-map: 0.7.6 typescript: 5.8.3 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) + + ts-loader@9.5.2(typescript@5.8.3)(webpack@5.104.1): + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.20.0 + micromatch: 4.0.8 + semver: 7.7.4 + source-map: 0.7.6 + typescript: 5.8.3 + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + + ts-loader@9.5.4(typescript@5.8.3)(webpack@5.104.1): + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.20.0 + micromatch: 4.0.8 + semver: 7.7.4 + source-map: 0.7.6 + typescript: 5.8.3 + webpack: 5.104.1(webpack-cli@6.0.1) ts-mixer@6.0.4: {} @@ -51649,7 +57745,7 @@ snapshots: '@ts-morph/common': 0.27.0 code-block-writer: 13.0.3 - ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.18)(typescript@5.8.3): + ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.18)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 @@ -51667,16 +57763,16 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.15.11(@swc/helpers@0.5.19) + '@swc/core': 1.15.18(@swc/helpers@0.5.19) - ts-node@10.9.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(@types/node@22.15.35)(typescript@5.8.3): + ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.19)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.15.35 + '@types/node': 22.15.19 acorn: 8.16.0 acorn-walk: 8.3.5 arg: 4.1.3 @@ -51687,12 +57783,54 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.15.11(@swc/helpers@0.5.19) + '@swc/core': 1.15.18(@swc/helpers@0.5.19) optional: true - ts-pnp@1.2.0(typescript@4.9.5): + ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.21)(typescript@5.8.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.12 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.15.21 + acorn: 8.16.0 + acorn-walk: 8.3.5 + arg: 4.1.3 + create-require: 1.1.1 + diff: 8.0.3 + make-error: 1.3.6 + typescript: 5.8.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 optionalDependencies: - typescript: 4.9.5 + '@swc/core': 1.15.18(@swc/helpers@0.5.19) + optional: true + + ts-node@10.9.2(@swc/core@1.15.18(@swc/helpers@0.5.19))(@types/node@22.15.24)(typescript@5.8.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.12 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.15.24 + acorn: 8.16.0 + acorn-walk: 8.3.5 + arg: 4.1.3 + create-require: 1.1.1 + diff: 8.0.3 + make-error: 1.3.6 + typescript: 5.8.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.15.18(@swc/helpers@0.5.19) + optional: true + + ts-pnp@1.2.0(typescript@4.9.4): + optionalDependencies: + typescript: 4.9.4 ts-pnp@1.2.0(typescript@5.8.3): optionalDependencies: @@ -51718,42 +57856,42 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tsdx@0.14.1(@types/babel__core@7.20.5)(@types/node@22.15.35)(jiti@2.6.1): + tsdx@0.14.1(@types/babel__core@7.20.5)(@types/node@22.15.21)(jiti@2.6.1): dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.27.1 '@babel/helper-module-imports': 7.28.6 '@babel/parser': 7.29.0 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) - '@babel/preset-env': 7.27.2(@babel/core@7.27.7) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) '@babel/traverse': 7.29.0 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.27.7)(@types/babel__core@7.20.5)(rollup@1.32.1) + '@rollup/plugin-babel': 5.3.1(@babel/core@7.27.1)(@types/babel__core@7.20.5)(rollup@1.32.1) '@rollup/plugin-commonjs': 11.1.0(rollup@1.32.1) '@rollup/plugin-json': 4.1.0(rollup@1.32.1) '@rollup/plugin-node-resolve': 9.0.0(rollup@1.32.1) '@rollup/plugin-replace': 2.4.2(rollup@1.32.1) '@types/jest': 25.2.3 - '@typescript-eslint/eslint-plugin': 2.34.0(@typescript-eslint/parser@2.34.0(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10))(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10) - '@typescript-eslint/parser': 2.34.0(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10) + '@typescript-eslint/eslint-plugin': 2.34.0(@typescript-eslint/parser@2.34.0(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10))(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10) + '@typescript-eslint/parser': 2.34.0(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10) ansi-escapes: 4.3.2 asyncro: 3.0.0 - babel-eslint: 10.1.0(eslint@9.39.3(jiti@2.6.1)) - babel-plugin-annotate-pure-calls: 0.4.0(@babel/core@7.27.7) - babel-plugin-dev-expression: 0.2.3(@babel/core@7.27.7) + babel-eslint: 10.1.0(eslint@9.39.4(jiti@2.6.1)) + babel-plugin-annotate-pure-calls: 0.4.0(@babel/core@7.27.1) + babel-plugin-dev-expression: 0.2.3(@babel/core@7.27.1) babel-plugin-macros: 2.8.0 - babel-plugin-polyfill-regenerator: 0.0.4(@babel/core@7.27.7) + babel-plugin-polyfill-regenerator: 0.0.4(@babel/core@7.27.1) babel-plugin-transform-rename-import: 2.3.0 camelcase: 6.3.0 chalk: 4.1.2 enquirer: 2.4.1 - eslint: 9.39.3(jiti@2.6.1) - eslint-config-prettier: 6.15.0(eslint@9.39.3(jiti@2.6.1)) - eslint-config-react-app: 5.2.1(@typescript-eslint/eslint-plugin@2.34.0(@typescript-eslint/parser@2.34.0(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10))(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10))(@typescript-eslint/parser@2.34.0(eslint@9.39.3(jiti@2.6.1))(typescript@3.9.10))(babel-eslint@10.1.0(eslint@9.39.3(jiti@2.6.1)))(eslint-plugin-flowtype@3.13.0(eslint@9.39.3(jiti@2.6.1)))(eslint-plugin-import@2.32.0(eslint@9.39.3(jiti@2.6.1)))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.3(jiti@2.6.1)))(eslint-plugin-react-hooks@2.5.1(eslint@9.39.3(jiti@2.6.1)))(eslint-plugin-react@7.37.5(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1)) - eslint-plugin-flowtype: 3.13.0(eslint@9.39.3(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(eslint@9.39.3(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.3(jiti@2.6.1)) - eslint-plugin-prettier: 3.4.1(eslint-config-prettier@6.15.0(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1))(prettier@1.19.1) - eslint-plugin-react: 7.37.5(eslint@9.39.3(jiti@2.6.1)) - eslint-plugin-react-hooks: 2.5.1(eslint@9.39.3(jiti@2.6.1)) + eslint: 9.39.4(jiti@2.6.1) + eslint-config-prettier: 6.15.0(eslint@9.39.4(jiti@2.6.1)) + eslint-config-react-app: 5.2.1(@typescript-eslint/eslint-plugin@2.34.0(@typescript-eslint/parser@2.34.0(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10))(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10))(@typescript-eslint/parser@2.34.0(eslint@9.39.4(jiti@2.6.1))(typescript@3.9.10))(babel-eslint@10.1.0(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-flowtype@3.13.0(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-import@2.32.0(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-react-hooks@2.5.1(eslint@9.39.4(jiti@2.6.1)))(eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-flowtype: 3.13.0(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-prettier: 3.4.1(eslint-config-prettier@6.15.0(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1))(prettier@1.19.1) + eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-react-hooks: 2.5.1(eslint@9.39.4(jiti@2.6.1)) execa: 4.1.0 fs-extra: 9.1.0 jest: 25.5.4 @@ -51766,7 +57904,7 @@ snapshots: progress-estimator: 0.2.2 regenerator-runtime: 0.13.11 rollup: 1.32.1 - rollup-plugin-sourcemaps: 0.6.3(@types/node@22.15.35)(rollup@1.32.1) + rollup-plugin-sourcemaps: 0.6.3(@types/node@22.15.21)(rollup@1.32.1) rollup-plugin-terser: 5.3.1(rollup@1.32.1) rollup-plugin-typescript2: 0.27.3(rollup@1.32.1)(typescript@3.9.10) sade: 1.8.1 @@ -51789,14 +57927,23 @@ snapshots: tslib@2.0.1: {} + tslib@2.1.0: {} + + tslib@2.5.0: {} + tslib@2.8.1: {} tslint-config-prettier@1.18.0: {} - tslint-react-hooks@2.2.2(tslint@6.1.3(typescript@4.9.5))(typescript@4.9.5): + tslint-react-hooks@2.2.2(tslint@6.1.3(typescript@4.2.4))(typescript@4.2.4): + dependencies: + tslint: 6.1.3(typescript@4.2.4) + typescript: 4.2.4 + + tslint-react-hooks@2.2.2(tslint@6.1.3(typescript@4.9.4))(typescript@4.9.4): dependencies: - tslint: 6.1.3(typescript@4.9.5) - typescript: 4.9.5 + tslint: 6.1.3(typescript@4.9.4) + typescript: 4.9.4 tslint-react-hooks@2.2.2(tslint@6.1.3(typescript@5.8.3))(typescript@5.8.3): dependencies: @@ -51809,17 +57956,17 @@ snapshots: tsutils: 2.29.0(typescript@5.8.3) typescript: 5.8.3 - tslint-react@4.2.0(tslint@6.1.3(typescript@4.9.5))(typescript@4.9.5): + tslint-react@4.2.0(tslint@6.1.3(typescript@4.9.4))(typescript@4.9.4): dependencies: - tslint: 6.1.3(typescript@4.9.5) - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 + tslint: 6.1.3(typescript@4.9.4) + tsutils: 3.21.0(typescript@4.9.4) + typescript: 4.9.4 - tslint-react@5.0.0(tslint@6.1.3(typescript@4.9.5))(typescript@4.9.5): + tslint-react@5.0.0(tslint@6.1.3(typescript@4.2.4))(typescript@4.2.4): dependencies: - tslint: 6.1.3(typescript@4.9.5) - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 + tslint: 6.1.3(typescript@4.2.4) + tsutils: 3.21.0(typescript@4.2.4) + typescript: 4.2.4 tslint-react@5.0.0(tslint@6.1.3(typescript@5.8.3))(typescript@5.8.3): dependencies: @@ -51836,7 +57983,7 @@ snapshots: diff: 8.0.3 glob: 7.2.3 js-yaml: 4.1.1 - minimatch: 3.1.3 + minimatch: 3.1.4 mkdirp: 0.5.6 resolve: 1.6.0 semver: 5.7.2 @@ -51844,7 +57991,24 @@ snapshots: tsutils: 2.29.0(typescript@5.8.3) typescript: 5.8.3 - tslint@6.1.3(typescript@4.9.5): + tslint@6.1.3(typescript@4.2.4): + dependencies: + '@babel/code-frame': 7.29.0 + builtin-modules: 1.1.1 + chalk: 2.4.2 + commander: 2.20.3 + diff: 8.0.3 + glob: 7.2.3 + js-yaml: 4.1.1 + minimatch: 3.1.4 + mkdirp: 0.5.6 + resolve: 1.22.11 + semver: 5.7.2 + tslib: 1.14.1 + tsutils: 2.29.0(typescript@4.2.4) + typescript: 4.2.4 + + tslint@6.1.3(typescript@4.9.4): dependencies: '@babel/code-frame': 7.29.0 builtin-modules: 1.1.1 @@ -51853,13 +58017,13 @@ snapshots: diff: 8.0.3 glob: 7.2.3 js-yaml: 4.1.1 - minimatch: 3.1.3 + minimatch: 3.1.4 mkdirp: 0.5.6 resolve: 1.22.11 semver: 5.7.2 tslib: 1.14.1 - tsutils: 2.29.0(typescript@4.9.5) - typescript: 4.9.5 + tsutils: 2.29.0(typescript@4.9.4) + typescript: 4.9.4 tslint@6.1.3(typescript@5.8.3): dependencies: @@ -51870,7 +58034,7 @@ snapshots: diff: 8.0.3 glob: 7.2.3 js-yaml: 4.1.1 - minimatch: 3.1.3 + minimatch: 3.1.4 mkdirp: 0.5.6 resolve: 1.22.11 semver: 5.7.2 @@ -51878,10 +58042,15 @@ snapshots: tsutils: 2.29.0(typescript@5.8.3) typescript: 5.8.3 - tsutils@2.29.0(typescript@4.9.5): + tsutils@2.29.0(typescript@4.2.4): dependencies: tslib: 1.14.1 - typescript: 4.9.5 + typescript: 4.2.4 + + tsutils@2.29.0(typescript@4.9.4): + dependencies: + tslib: 1.14.1 + typescript: 4.9.4 tsutils@2.29.0(typescript@5.8.3): dependencies: @@ -51893,10 +58062,15 @@ snapshots: tslib: 1.14.1 typescript: 3.9.10 - tsutils@3.21.0(typescript@4.9.5): + tsutils@3.21.0(typescript@4.2.4): dependencies: tslib: 1.14.1 - typescript: 4.9.5 + typescript: 4.2.4 + + tsutils@3.21.0(typescript@4.9.4): + dependencies: + tslib: 1.14.1 + typescript: 4.9.4 tsutils@3.21.0(typescript@5.8.3): dependencies: @@ -51943,6 +58117,8 @@ snapshots: argparse: 2.0.1 pako: 1.0.11 + tty-browserify@0.0.0: {} + tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 @@ -52043,7 +58219,9 @@ snapshots: typescript@3.9.10: {} - typescript@4.9.5: {} + typescript@4.2.4: {} + + typescript@4.9.4: {} typescript@5.8.3: {} @@ -52060,6 +58238,13 @@ snapshots: commander: 2.13.0 source-map: 0.6.1 + uglify-js@2.8.29: + dependencies: + source-map: 0.5.7 + yargs: 3.10.0 + optionalDependencies: + uglify-to-browserify: 1.0.2 + uglify-js@3.19.3: {} uglify-js@3.4.10: @@ -52067,18 +58252,30 @@ snapshots: commander: 2.19.0 source-map: 0.6.1 - uglifyjs-webpack-plugin@1.2.5(webpack@5.105.2): + uglify-to-browserify@1.0.2: + optional: true + + uglifyjs-webpack-plugin@0.4.6(webpack@3.8.1): + dependencies: + source-map: 0.5.7 + uglify-js: 2.8.29 + webpack: 3.8.1 + webpack-sources: 1.4.3 + + uglifyjs-webpack-plugin@1.2.5(webpack@3.8.1): dependencies: cacache: 10.0.4 find-cache-dir: 1.0.0 schema-utils: 0.4.7 - serialize-javascript: 1.9.1 + serialize-javascript: 7.0.3 source-map: 0.6.1 uglify-es: 3.3.9 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 3.8.1 webpack-sources: 1.4.3 worker-farm: 1.7.0 + uint8array-extras@1.5.0: {} + unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -52092,7 +58289,7 @@ snapshots: undici-types@6.21.0: {} - undici@7.21.0: {} + undici@7.22.0: {} unfetch@4.2.0: {} @@ -52128,7 +58325,7 @@ snapshots: is-buffer: 2.0.5 is-plain-obj: 4.1.0 trough: 2.2.0 - vfile: 6.0.3 + vfile: 5.3.7 unified@11.0.5: dependencies: @@ -52147,7 +58344,7 @@ snapshots: is-buffer: 2.0.5 is-plain-obj: 2.1.0 trough: 1.0.5 - vfile: 6.0.3 + vfile: 4.2.1 union@0.5.0: dependencies: @@ -52187,6 +58384,11 @@ snapshots: unist-builder@2.0.3: {} + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-generated@1.1.6: {} unist-util-is@4.1.0: {} @@ -52217,10 +58419,23 @@ snapshots: dependencies: unist-util-visit: 2.0.3 + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + unist-util-remove@2.1.0: dependencies: unist-util-is: 4.1.0 + unist-util-stringify-position@2.0.3: + dependencies: + '@types/unist': 2.0.11 + + unist-util-stringify-position@3.0.3: + dependencies: + '@types/unist': 2.0.11 + unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.3 @@ -52275,6 +58490,8 @@ snapshots: acorn: 8.16.0 webpack-virtual-modules: 0.6.2 + unquote@1.1.1: {} + unraw@3.0.0: {} unrs-resolver@1.11.1: @@ -52327,10 +58544,12 @@ snapshots: dependencies: bluebird: 3.7.2 duplexer2: 0.1.4 - fs-extra: 11.3.3 + fs-extra: 11.3.0 graceful-fs: 4.2.11 node-int64: 0.4.0 + upath@1.2.0: {} + upath@2.0.1: {} update-browserslist-db@1.2.3(browserslist@4.28.1): @@ -52364,30 +58583,39 @@ snapshots: url-join@4.0.1: {} - url-loader@0.6.2(file-loader@1.1.5(webpack@5.105.2)): + url-loader@0.6.2(file-loader@1.1.5(webpack@3.8.1)): dependencies: - file-loader: 1.1.5(webpack@5.105.2) + file-loader: 1.1.5(webpack@3.8.1) loader-utils: 1.4.2 mime: 1.6.0 schema-utils: 0.3.0 - url-loader@4.1.1(file-loader@6.2.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))))(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + url-loader@4.1.1(file-loader@6.2.0(webpack@4.47.0(webpack-cli@4.10.0)))(webpack@4.47.0(webpack-cli@4.10.0)): + dependencies: + loader-utils: 2.0.4 + mime-types: 2.1.35 + schema-utils: 3.3.0 + webpack: 4.47.0(webpack-cli@4.10.0) + optionalDependencies: + file-loader: 6.2.0(webpack@4.47.0(webpack-cli@4.10.0)) + + url-loader@4.1.1(file-loader@6.2.0(webpack@4.47.0))(webpack@4.47.0): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 4.47.0 optionalDependencies: - file-loader: 6.2.0(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + file-loader: 6.2.0(webpack@4.47.0) - url-loader@4.1.1(file-loader@6.2.0(webpack@5.105.2))(webpack@5.105.2): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.104.1))(webpack@4.47.0(webpack-cli@6.0.1)): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 4.47.0(webpack-cli@6.0.1) optionalDependencies: - file-loader: 6.2.0(webpack@5.105.2) + file-loader: 6.2.0(webpack@5.104.1) url-parse-lax@1.0.0: dependencies: @@ -52500,6 +58728,10 @@ snapshots: dependencies: inherits: 2.0.3 + util@0.11.1: + dependencies: + inherits: 2.0.3 + util@0.12.5: dependencies: inherits: 2.0.4 @@ -52562,38 +58794,61 @@ snapshots: vfile-location@4.1.0: dependencies: '@types/unist': 2.0.11 - vfile: 6.0.3 + vfile: 5.3.7 vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 vfile: 6.0.3 + vfile-message@2.0.4: + dependencies: + '@types/unist': 2.0.11 + unist-util-stringify-position: 2.0.3 + + vfile-message@3.1.4: + dependencies: + '@types/unist': 2.0.11 + unist-util-stringify-position: 3.0.3 + vfile-message@4.0.3: dependencies: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 + vfile@4.2.1: + dependencies: + '@types/unist': 2.0.11 + is-buffer: 2.0.5 + unist-util-stringify-position: 2.0.3 + vfile-message: 2.0.4 + + vfile@5.3.7: + dependencies: + '@types/unist': 2.0.11 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + vfile@6.0.3: dependencies: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2): + vite@6.0.7(@types/node@22.15.24)(jiti@2.6.1)(sass@1.89.0)(terser@5.46.0)(yaml@2.8.0): dependencies: - esbuild: 0.25.12 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.57.1 - tinyglobby: 0.2.15 + esbuild: 0.24.2 + postcss: 8.5.4 + rollup: 4.41.0 optionalDependencies: - '@types/node': 22.15.35 + '@types/node': 22.15.24 fsevents: 2.3.3 jiti: 2.6.1 - sass: 1.97.3 + sass: 1.89.0 terser: 5.46.0 - yaml: 2.8.2 + yaml: 2.8.0 + + vm-browserify@1.1.2: {} vscode-debugadapter-testsupport@1.51.0: dependencies: @@ -52615,18 +58870,18 @@ snapshots: monaco-page-objects: 3.14.1(selenium-webdriver@4.41.0)(typescript@5.8.3) selenium-webdriver: 4.41.0 - vscode-extension-tester@5.10.0(mocha@10.8.2)(typescript@5.8.3): + vscode-extension-tester@5.10.0(mocha@10.2.0)(typescript@5.8.3): dependencies: '@types/selenium-webdriver': 4.35.5 '@vscode/vsce': 2.32.0 commander: 11.1.0 compare-versions: 6.1.1 - fs-extra: 11.3.3 + fs-extra: 11.3.0 glob: 10.5.0 got: 13.0.0 hpagent: 1.2.0 js-yaml: 4.1.1 - mocha: 10.8.2 + mocha: 10.2.0 monaco-page-objects: 3.14.1(selenium-webdriver@4.41.0)(typescript@5.8.3) sanitize-filename: 1.6.3 selenium-webdriver: 4.41.0 @@ -52635,24 +58890,48 @@ snapshots: unzipper: 0.10.14 vscode-extension-tester-locators: 3.12.2(monaco-page-objects@3.14.1(selenium-webdriver@4.41.0)(typescript@5.8.3))(selenium-webdriver@4.41.0) transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - bufferutil - - react-native-b4a + - supports-color + - utf-8-validate + + vscode-extension-tester@8.14.1(mocha@11.4.0)(typescript@5.8.3): + dependencies: + '@redhat-developer/locators': 1.19.1(@redhat-developer/page-objects@1.19.1(selenium-webdriver@4.41.0)(typescript@5.8.3))(selenium-webdriver@4.41.0) + '@redhat-developer/page-objects': 1.19.1(selenium-webdriver@4.41.0)(typescript@5.8.3) + '@types/selenium-webdriver': 4.35.5 + '@vscode/vsce': 3.7.1 + c8: 10.1.3 + commander: 13.1.0 + compare-versions: 6.1.1 + find-up: 7.0.0 + fs-extra: 11.3.0 + glob: 11.1.0 + got: 14.4.7 + hpagent: 1.2.0 + js-yaml: 4.1.1 + mocha: 11.4.0 + sanitize-filename: 1.6.3 + selenium-webdriver: 4.41.0 + targz: 1.0.1 + typescript: 5.8.3 + unzipper: 0.12.3 + transitivePeerDependencies: + - bufferutil + - monocart-coverage-reports - supports-color - utf-8-validate vscode-extension-tester@8.14.1(mocha@11.5.0)(typescript@5.8.3): dependencies: - '@redhat-developer/locators': 1.19.0(@redhat-developer/page-objects@1.19.0(selenium-webdriver@4.41.0)(typescript@5.8.3))(selenium-webdriver@4.41.0) - '@redhat-developer/page-objects': 1.19.0(selenium-webdriver@4.41.0)(typescript@5.8.3) + '@redhat-developer/locators': 1.19.1(@redhat-developer/page-objects@1.19.1(selenium-webdriver@4.41.0)(typescript@5.8.3))(selenium-webdriver@4.41.0) + '@redhat-developer/page-objects': 1.19.1(selenium-webdriver@4.41.0)(typescript@5.8.3) '@types/selenium-webdriver': 4.35.5 '@vscode/vsce': 3.7.1 c8: 10.1.3 commander: 13.1.0 compare-versions: 6.1.1 find-up: 7.0.0 - fs-extra: 11.3.3 + fs-extra: 11.3.0 glob: 11.1.0 got: 14.4.7 hpagent: 1.2.0 @@ -52664,11 +58943,8 @@ snapshots: typescript: 5.8.3 unzipper: 0.12.3 transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - bufferutil - monocart-coverage-reports - - react-native-b4a - supports-color - utf-8-validate @@ -52682,19 +58958,19 @@ snapshots: vscode-languageclient@7.0.0: dependencies: - minimatch: 3.1.3 + minimatch: 3.1.4 semver: 7.7.4 vscode-languageserver-protocol: 3.16.0 vscode-languageclient@8.1.0: dependencies: - minimatch: 5.1.7 + minimatch: 5.1.8 semver: 7.7.4 vscode-languageserver-protocol: 3.17.3 vscode-languageclient@9.0.1: dependencies: - minimatch: 5.1.7 + minimatch: 5.1.8 semver: 7.7.4 vscode-languageserver-protocol: 3.17.5 @@ -52750,9 +59026,11 @@ snapshots: transitivePeerDependencies: - supports-color + vscode-uri@3.0.8: {} + vscode-uri@3.1.0: {} - vscode-ws-jsonrpc@3.5.0: + vscode-ws-jsonrpc@3.4.0: dependencies: vscode-jsonrpc: 8.2.1 @@ -52784,6 +59062,19 @@ snapshots: watch@0.10.0: {} + watchpack-chokidar2@2.0.1: + dependencies: + chokidar: 2.1.8 + optional: true + + watchpack@1.7.5: + dependencies: + graceful-fs: 4.2.11 + neo-async: 2.6.2 + optionalDependencies: + chokidar: 3.6.0 + watchpack-chokidar2: 2.0.1 + watchpack@2.5.1: dependencies: glob-to-regexp: 0.4.1 @@ -52825,10 +59116,10 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-cli@4.10.0(webpack-dev-server@5.2.3)(webpack@5.105.2): + webpack-cli@4.10.0(webpack-dev-server@5.2.3)(webpack@5.104.1): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.105.2) + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.104.1) '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0) '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0)(webpack-dev-server@5.2.3) colorette: 2.0.20 @@ -52838,15 +59129,15 @@ snapshots: import-local: 3.2.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) webpack-merge: 5.10.0 optionalDependencies: - webpack-dev-server: 5.2.3(webpack-cli@4.10.0)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@4.10.0)(webpack@5.104.1) - webpack-cli@4.10.0(webpack@5.105.2): + webpack-cli@4.10.0(webpack@5.104.1): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.105.2) + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.104.1) '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0) '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0) colorette: 2.0.20 @@ -52856,15 +59147,15 @@ snapshots: import-local: 3.2.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.105.2(webpack-cli@4.10.0) + webpack: 5.104.1(webpack-cli@4.10.0) webpack-merge: 5.10.0 - webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.105.2): + webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.105.2) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.105.2) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack@5.105.2) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.104.1) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.104.1) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack@5.104.1) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.6 @@ -52873,17 +59164,17 @@ snapshots: import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) webpack-merge: 5.10.0 optionalDependencies: - webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1) - webpack-cli@5.1.4(webpack@5.105.2): + webpack-cli@5.1.4(webpack@5.104.1): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.105.2) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.105.2) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.105.2) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.104.1) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.104.1) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.104.1) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.6 @@ -52892,15 +59183,15 @@ snapshots: import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) webpack-merge: 5.10.0 - webpack-cli@6.0.1(webpack-dev-server@5.2.3)(webpack@5.105.2): + webpack-cli@6.0.1(webpack-dev-server@5.2.3)(webpack@5.104.1): dependencies: '@discoveryjs/json-ext': 0.6.3 - '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.2) - '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.2) - '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.3)(webpack@5.105.2) + '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.104.1) + '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.104.1) + '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.3)(webpack@5.104.1) colorette: 2.0.20 commander: 12.1.0 cross-spawn: 7.0.6 @@ -52909,17 +59200,17 @@ snapshots: import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) webpack-merge: 6.0.1 optionalDependencies: - webpack-dev-server: 5.2.3(webpack-cli@6.0.1)(webpack@5.105.2) + webpack-dev-server: 5.2.3(webpack-cli@6.0.1)(webpack@5.104.1) - webpack-cli@6.0.1(webpack@5.105.2): + webpack-cli@6.0.1(webpack@5.104.1): dependencies: '@discoveryjs/json-ext': 0.6.3 - '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.2) - '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.2) - '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.2) + '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.104.1) + '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.104.1) + '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.104.1) colorette: 2.0.20 commander: 12.1.0 cross-spawn: 7.0.6 @@ -52928,28 +59219,46 @@ snapshots: import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.105.2(webpack-cli@6.0.1) + webpack: 5.104.1(webpack-cli@6.0.1) webpack-merge: 6.0.1 - webpack-dev-middleware@3.7.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + webpack-dev-middleware@1.12.2(webpack@3.8.1): + dependencies: + memory-fs: 0.4.1 + mime: 1.6.0 + path-is-absolute: 1.0.1 + range-parser: 1.2.1 + time-stamp: 2.2.0 + webpack: 3.8.1 + + webpack-dev-middleware@3.7.3(webpack@4.47.0(webpack-cli@4.10.0)): + dependencies: + memory-fs: 0.4.1 + mime: 2.6.0 + mkdirp: 0.5.6 + range-parser: 1.2.1 + webpack: 4.47.0(webpack-cli@4.10.0) + webpack-log: 2.0.0 + + webpack-dev-middleware@3.7.3(webpack@4.47.0(webpack-cli@6.0.1)): dependencies: memory-fs: 0.4.1 mime: 2.6.0 mkdirp: 0.5.6 range-parser: 1.2.1 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 4.47.0(webpack-cli@6.0.1) webpack-log: 2.0.0 - webpack-dev-middleware@3.7.3(webpack@5.105.2): + webpack-dev-middleware@3.7.3(webpack@4.47.0): dependencies: memory-fs: 0.4.1 mime: 2.6.0 mkdirp: 0.5.6 range-parser: 1.2.1 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 4.47.0 webpack-log: 2.0.0 - webpack-dev-middleware@4.3.0(webpack@5.105.2): + webpack-dev-middleware@4.3.0(webpack@5.104.1): dependencies: colorette: 1.4.0 mem: 8.1.1 @@ -52957,9 +59266,9 @@ snapshots: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 3.3.0 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) - webpack-dev-middleware@6.1.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)): + webpack-dev-middleware@6.1.3(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -52967,9 +59276,9 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12) - webpack-dev-middleware@6.1.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + webpack-dev-middleware@6.1.3(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -52977,9 +59286,9 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) - webpack-dev-middleware@6.1.3(webpack@5.105.2): + webpack-dev-middleware@6.1.3(webpack@5.104.1): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -52987,72 +59296,63 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) - webpack-dev-middleware@7.4.5(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + webpack-dev-middleware@7.4.5(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))): dependencies: colorette: 2.0.20 - memfs: 4.56.10 + memfs: 4.56.11 mime-types: 3.0.2 on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) optional: true - webpack-dev-middleware@7.4.5(webpack@5.105.2): + webpack-dev-middleware@7.4.5(webpack@5.104.1): dependencies: colorette: 2.0.20 - memfs: 4.56.10 + memfs: 4.56.11 mime-types: 3.0.2 on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(webpack-cli@5.1.4) - webpack-dev-server@5.2.3(webpack-cli@4.10.0)(webpack@5.105.2): + webpack-dev-server@2.11.3(webpack@3.8.1): dependencies: - '@types/bonjour': 3.5.13 - '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.25 - '@types/express-serve-static-core': 4.19.8 - '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.10 - '@types/sockjs': 0.3.36 - '@types/ws': 8.18.1 - ansi-html-community: 0.0.8 - bonjour-service: 1.3.0 - chokidar: 3.6.0 - colorette: 2.0.20 + ansi-html: 0.0.7 + array-includes: 3.1.9 + bonjour: 3.5.1 + chokidar: 2.1.8 compression: 1.8.1 - connect-history-api-fallback: 2.0.0 + connect-history-api-fallback: 1.6.0 + debug: 3.2.7 + del: 3.0.0 express: 4.22.1 - graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.9(@types/express@4.17.25) - ipaddr.js: 2.3.0 - launch-editor: 2.12.0 - open: 10.2.0 - p-retry: 6.2.1 - schema-utils: 4.3.3 - selfsigned: 5.5.0 + html-entities: 1.4.0 + http-proxy-middleware: 0.17.4(debug@3.2.7) + import-local: 1.0.0 + internal-ip: 1.2.0 + ip: 1.1.9 + killable: 1.0.1 + loglevel: 1.9.2 + opn: 5.5.0 + portfinder: 1.0.37(supports-color@5.5.0) + selfsigned: 1.10.14 serve-index: 1.9.2 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(webpack@5.105.2) - ws: 8.19.0 - optionalDependencies: - webpack: 5.105.2(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.105.2) - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - optional: true + sockjs: 0.3.19 + sockjs-client: 1.1.5 + spdy: 3.4.7 + strip-ansi: 3.0.1 + supports-color: 5.5.0 + webpack: 3.8.1 + webpack-dev-middleware: 1.12.2(webpack@3.8.1) + yargs: 6.6.0 - webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.105.2): + webpack-dev-server@5.2.3(webpack-cli@4.10.0)(webpack@5.104.1): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -53072,7 +59372,7 @@ snapshots: graceful-fs: 4.2.11 http-proxy-middleware: 2.0.9(@types/express@4.17.25) ipaddr.js: 2.3.0 - launch-editor: 2.12.0 + launch-editor: 2.13.1 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 @@ -53080,18 +59380,19 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(webpack@5.105.2) + webpack-dev-middleware: 7.4.5(webpack@5.104.1) ws: 8.19.0 optionalDependencies: - webpack: 5.105.2(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate + optional: true - webpack-dev-server@5.2.3(webpack-cli@6.0.1)(webpack@5.105.2): + webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -53111,7 +59412,7 @@ snapshots: graceful-fs: 4.2.11 http-proxy-middleware: 2.0.9(@types/express@4.17.25) ipaddr.js: 2.3.0 - launch-editor: 2.12.0 + launch-editor: 2.13.1 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 @@ -53119,18 +59420,18 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(webpack@5.105.2) + webpack-dev-middleware: 7.4.5(webpack@5.104.1) ws: 8.19.0 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack: 5.104.1(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-dev-server@5.2.3(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + webpack-dev-server@5.2.3(webpack-cli@6.0.1)(webpack@5.104.1): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -53150,7 +59451,7 @@ snapshots: graceful-fs: 4.2.11 http-proxy-middleware: 2.0.9(@types/express@4.17.25) ipaddr.js: 2.3.0 - launch-editor: 2.12.0 + launch-editor: 2.13.1 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 @@ -53158,18 +59459,18 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + webpack-dev-middleware: 7.4.5(webpack@5.104.1) ws: 8.19.0 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - optional: true - webpack-dev-server@5.2.3(webpack@5.105.2): + webpack-dev-server@5.2.3(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -53189,7 +59490,7 @@ snapshots: graceful-fs: 4.2.11 http-proxy-middleware: 2.0.9(@types/express@4.17.25) ipaddr.js: 2.3.0 - launch-editor: 2.12.0 + launch-editor: 2.13.1 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 @@ -53197,23 +59498,28 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(webpack@5.105.2) + webpack-dev-middleware: 7.4.5(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))) ws: 8.19.0 optionalDependencies: - webpack: 5.105.2(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate + optional: true + + webpack-filter-warnings-plugin@1.2.1(webpack@4.47.0(webpack-cli@4.10.0)): + dependencies: + webpack: 4.47.0(webpack-cli@4.10.0) - webpack-filter-warnings-plugin@1.2.1(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))): + webpack-filter-warnings-plugin@1.2.1(webpack@4.47.0(webpack-cli@6.0.1)): dependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)) + webpack: 4.47.0(webpack-cli@6.0.1) - webpack-filter-warnings-plugin@1.2.1(webpack@5.105.2): + webpack-filter-warnings-plugin@1.2.1(webpack@4.47.0): dependencies: - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 4.47.0 webpack-hot-middleware@2.26.1: dependencies: @@ -53226,11 +59532,11 @@ snapshots: ansi-colors: 3.2.4 uuid: 3.4.0 - webpack-manifest-plugin@1.3.2(webpack@5.105.2): + webpack-manifest-plugin@1.3.2(webpack@3.8.1): dependencies: fs-extra: 0.30.0 lodash: 4.17.23 - webpack: 5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1) + webpack: 3.8.1 webpack-merge@5.10.0: dependencies: @@ -53248,12 +59554,16 @@ snapshots: dependencies: filehound: 1.17.6 + webpack-permissions-plugin@1.0.9: + dependencies: + filehound: 1.17.6 + webpack-sources@1.4.3: dependencies: source-list-map: 2.0.1 source-map: 0.6.1 - webpack-sources@3.3.3: {} + webpack-sources@3.3.4: {} webpack-virtual-modules@0.2.2: dependencies: @@ -53265,7 +59575,114 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19)): + webpack@3.8.1: + dependencies: + acorn: 5.7.4 + acorn-dynamic-import: 2.0.2 + ajv: 5.5.2 + ajv-keywords: 2.1.1(ajv@5.5.2) + async: 2.6.4 + enhanced-resolve: 3.4.1 + escope: 3.6.0 + interpret: 1.4.0 + json-loader: 0.5.7 + json5: 0.5.1 + loader-runner: 2.4.0 + loader-utils: 1.4.2 + memory-fs: 0.4.1 + mkdirp: 0.5.6 + node-libs-browser: 2.2.1 + source-map: 0.5.7 + supports-color: 4.5.0 + tapable: 0.2.9 + uglifyjs-webpack-plugin: 0.4.6(webpack@3.8.1) + watchpack: 1.7.5 + webpack-sources: 1.4.3 + yargs: 8.0.2 + + webpack@4.47.0: + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-module-context': 1.9.0 + '@webassemblyjs/wasm-edit': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + acorn: 6.4.2 + ajv: 6.14.0 + ajv-keywords: 3.5.2(ajv@6.14.0) + chrome-trace-event: 1.0.4 + enhanced-resolve: 4.5.0 + eslint-scope: 4.0.3 + json-parse-better-errors: 1.0.2 + loader-runner: 2.4.0 + loader-utils: 1.4.2 + memory-fs: 0.4.1 + micromatch: 4.0.8 + mkdirp: 0.5.6 + neo-async: 2.6.2 + node-libs-browser: 2.2.1 + schema-utils: 1.0.0 + tapable: 1.1.3 + terser-webpack-plugin: 1.4.6(webpack@4.47.0) + watchpack: 1.7.5 + webpack-sources: 1.4.3 + + webpack@4.47.0(webpack-cli@4.10.0): + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-module-context': 1.9.0 + '@webassemblyjs/wasm-edit': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + acorn: 6.4.2 + ajv: 6.14.0 + ajv-keywords: 3.5.2(ajv@6.14.0) + chrome-trace-event: 1.0.4 + enhanced-resolve: 4.5.0 + eslint-scope: 4.0.3 + json-parse-better-errors: 1.0.2 + loader-runner: 2.4.0 + loader-utils: 1.4.2 + memory-fs: 0.4.1 + micromatch: 4.0.8 + mkdirp: 0.5.6 + neo-async: 2.6.2 + node-libs-browser: 2.2.1 + schema-utils: 1.0.0 + tapable: 1.1.3 + terser-webpack-plugin: 1.4.6(webpack@4.47.0(webpack-cli@4.10.0)) + watchpack: 1.7.5 + webpack-sources: 1.4.3 + optionalDependencies: + webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.104.1) + + webpack@4.47.0(webpack-cli@6.0.1): + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-module-context': 1.9.0 + '@webassemblyjs/wasm-edit': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + acorn: 6.4.2 + ajv: 6.14.0 + ajv-keywords: 3.5.2(ajv@6.14.0) + chrome-trace-event: 1.0.4 + enhanced-resolve: 4.5.0 + eslint-scope: 4.0.3 + json-parse-better-errors: 1.0.2 + loader-runner: 2.4.0 + loader-utils: 1.4.2 + memory-fs: 0.4.1 + micromatch: 4.0.8 + mkdirp: 0.5.6 + neo-async: 2.6.2 + node-libs-browser: 2.2.1 + schema-utils: 1.0.0 + tapable: 1.1.3 + terser-webpack-plugin: 1.4.6(webpack@4.47.0(webpack-cli@6.0.1)) + watchpack: 1.7.5 + webpack-sources: 1.4.3 + optionalDependencies: + webpack-cli: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.104.1) + + webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19)): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -53277,7 +59694,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.19.0 + enhanced-resolve: 5.20.0 es-module-lexer: 2.0.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -53289,15 +59706,15 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))) + terser-webpack-plugin: 5.3.17(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))) watchpack: 2.5.1 - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12): + webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -53309,7 +59726,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.19.0 + enhanced-resolve: 5.20.0 es-module-lexer: 2.0.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -53321,15 +59738,15 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)(webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(esbuild@0.25.12)) + terser-webpack-plugin: 5.3.17(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(esbuild@0.25.12)) watchpack: 2.5.1 - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@5.1.4): + webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -53341,7 +59758,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.19.0 + enhanced-resolve: 5.20.0 es-module-lexer: 2.0.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -53353,17 +59770,17 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2) + terser-webpack-plugin: 5.3.17(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack@5.104.1) watchpack: 2.5.1 - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 optionalDependencies: - webpack-cli: 5.1.4(webpack@5.105.2) + webpack-cli: 5.1.4(webpack@5.104.1) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.105.2(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack-cli@6.0.1): + webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack-cli@6.0.1): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -53375,7 +59792,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.19.0 + enhanced-resolve: 5.20.0 es-module-lexer: 2.0.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -53387,17 +59804,17 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2) + terser-webpack-plugin: 5.3.17(@swc/core@1.15.18(@swc/helpers@0.5.19))(webpack@5.104.1) watchpack: 2.5.1 - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 optionalDependencies: - webpack-cli: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack-cli: 6.0.1(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.105.2(webpack-cli@4.10.0): + webpack@5.104.1(webpack-cli@4.10.0): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -53409,7 +59826,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.19.0 + enhanced-resolve: 5.20.0 es-module-lexer: 2.0.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -53421,17 +59838,17 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2) + terser-webpack-plugin: 5.3.17(webpack@5.104.1) watchpack: 2.5.1 - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 optionalDependencies: - webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.105.2) + webpack-cli: 4.10.0(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.105.2(webpack-cli@5.1.4): + webpack@5.104.1(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -53443,7 +59860,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.19.0 + enhanced-resolve: 5.20.0 es-module-lexer: 2.0.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -53455,17 +59872,17 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2) + terser-webpack-plugin: 5.3.17(webpack@5.104.1) watchpack: 2.5.1 - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 optionalDependencies: - webpack-cli: 5.1.4(webpack@5.105.2) + webpack-cli: 5.1.4(webpack@5.104.1) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.105.2(webpack-cli@6.0.1): + webpack@5.104.1(webpack-cli@6.0.1): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -53477,7 +59894,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.19.0 + enhanced-resolve: 5.20.0 es-module-lexer: 2.0.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -53489,11 +59906,11 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(@swc/core@1.15.11(@swc/helpers@0.5.19))(webpack@5.105.2) + terser-webpack-plugin: 5.3.17(webpack@5.104.1) watchpack: 2.5.1 - webpack-sources: 3.3.3 + webpack-sources: 3.3.4 optionalDependencies: - webpack-cli: 6.0.1(webpack@5.105.2) + webpack-cli: 6.0.1(webpack@5.104.1) transitivePeerDependencies: - '@swc/core' - esbuild @@ -53627,6 +60044,8 @@ snapshots: wildcard@2.0.1: {} + window-size@0.1.0: {} + winston-transport@4.6.0: dependencies: logform: 2.7.0 @@ -53649,6 +60068,8 @@ snapshots: word-wrap@1.2.5: {} + wordwrap@0.0.2: {} + wordwrap@1.0.0: {} worker-farm@1.7.0: @@ -53659,6 +60080,8 @@ snapshots: dependencies: microevent.ts: 0.1.1 + workerpool@6.2.1: {} + workerpool@6.5.1: {} wrap-ansi@2.1.0: @@ -53687,13 +60110,13 @@ snapshots: dependencies: ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 string-width: 7.2.0 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 wrappy@1.0.2: {} @@ -53734,7 +60157,7 @@ snapshots: wsl-utils@0.1.0: dependencies: - is-wsl: 3.1.0 + is-wsl: 3.1.1 x-default-browser@0.4.0: optionalDependencies: @@ -53748,7 +60171,7 @@ snapshots: xml-js@1.6.11: dependencies: - sax: 1.4.4 + sax: 1.5.0 xml-name-validator@2.0.1: {} @@ -53758,12 +60181,12 @@ snapshots: xml2js@0.5.0: dependencies: - sax: 1.4.4 + sax: 1.5.0 xmlbuilder: 11.0.1 xml2js@0.6.2: dependencies: - sax: 1.4.4 + sax: 1.5.0 xmlbuilder: 11.0.1 xml@1.0.1: {} @@ -53799,22 +60222,34 @@ snapshots: yaml@1.10.2: {} - yaml@2.8.2: {} + yaml@2.6.0: {} + + yaml@2.8.0: {} yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 + yargs-parser@20.2.4: {} + yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} + yargs-parser@4.2.1: + dependencies: + camelcase: 3.0.0 + yargs-parser@5.0.1: dependencies: camelcase: 3.0.0 object.assign: 4.1.7 + yargs-parser@7.0.0: + dependencies: + camelcase: 4.1.0 + yargs-parser@8.1.0: dependencies: camelcase: 4.1.0 @@ -53875,6 +60310,29 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yargs@3.10.0: + dependencies: + camelcase: 1.2.1 + cliui: 2.1.0 + decamelize: 1.2.0 + window-size: 0.1.0 + + yargs@6.6.0: + dependencies: + camelcase: 3.0.0 + cliui: 3.2.0 + decamelize: 1.2.0 + get-caller-file: 1.0.3 + os-locale: 1.4.0 + read-pkg-up: 1.0.1 + require-directory: 2.1.1 + require-main-filename: 1.0.1 + set-blocking: 2.0.0 + string-width: 1.0.2 + which-module: 1.0.0 + y18n: 3.2.2 + yargs-parser: 4.2.1 + yargs@7.1.2: dependencies: camelcase: 3.0.0 @@ -53891,7 +60349,23 @@ snapshots: y18n: 3.2.2 yargs-parser: 5.0.1 - yarn@1.22.22: {} + yargs@8.0.2: + dependencies: + camelcase: 4.1.0 + cliui: 3.2.0 + decamelize: 1.2.0 + get-caller-file: 1.0.3 + os-locale: 2.1.0 + read-pkg-up: 2.0.0 + require-directory: 2.1.1 + require-main-filename: 1.0.1 + set-blocking: 2.0.0 + string-width: 2.1.1 + which-module: 2.0.1 + y18n: 3.2.2 + yargs-parser: 7.0.0 + + yarn@1.22.19: {} yauzl@2.10.0: dependencies: @@ -53926,21 +60400,31 @@ snapshots: zenscroll@4.0.2: {} - zod-to-json-schema@3.25.1(zod@3.25.76): + zod-to-json-schema@3.25.1(zod@4.1.11): dependencies: - zod: 3.25.76 + zod: 4.1.11 + + zod@3.22.4: {} zod@3.25.76: {} zod@4.1.11: {} - zustand@5.0.11(@types/react@18.2.0)(react@18.2.0)(use-sync-external-store@1.6.0(react@18.2.0)): + zod@4.1.8: {} + + zustand@5.0.4(@types/react@18.2.0)(react@18.2.0)(use-sync-external-store@1.6.0(react@18.2.0)): + optionalDependencies: + '@types/react': 18.2.0 + react: 18.2.0 + use-sync-external-store: 1.6.0(react@18.2.0) + + zustand@5.0.5(@types/react@18.2.0)(react@18.2.0)(use-sync-external-store@1.6.0(react@18.2.0)): optionalDependencies: '@types/react': 18.2.0 react: 18.2.0 use-sync-external-store: 1.6.0(react@18.2.0) - zustand@5.0.11(@types/react@18.2.0)(react@19.1.0)(use-sync-external-store@1.6.0(react@19.1.0)): + zustand@5.0.5(@types/react@18.2.0)(react@19.1.0)(use-sync-external-store@1.6.0(react@19.1.0)): optionalDependencies: '@types/react': 18.2.0 react: 19.1.0 diff --git a/common/config/rush/repo-state.json b/common/config/rush/repo-state.json index a757ff003cb..0e7b144099d 100644 --- a/common/config/rush/repo-state.json +++ b/common/config/rush/repo-state.json @@ -1,4 +1,4 @@ // DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush. { - "preferredVersionsHash": "44915d299b520d57a3ac8e149acc86ae20a338f9" + "preferredVersionsHash": "bf21a9e8fbc5a3846fb05b4fa0859e0917b2202f" } diff --git a/common/scripts/install-git-hooks.js b/common/scripts/install-git-hooks.js new file mode 100755 index 00000000000..b4d1aac6e41 --- /dev/null +++ b/common/scripts/install-git-hooks.js @@ -0,0 +1,41 @@ +#!/usr/bin/env node + +/** + * This script initializes Husky git hooks after Rush installation. + * It should be run as part of the postRushInstall event hook. + */ + +const { execSync } = require('child_process'); +const path = require('path'); +const fs = require('fs'); + +const repoRoot = path.resolve(__dirname, '../..'); +const huskyPath = path.join(repoRoot, 'node_modules', 'husky', 'bin.js'); + +console.log('Initializing Husky git hooks...'); + +// Check if husky is installed +if (!fs.existsSync(huskyPath)) { + console.log('Installing root dependencies first...'); + try { + execSync('pnpm install --ignore-workspace', { + cwd: repoRoot, + stdio: 'inherit' + }); + } catch (error) { + console.error('Failed to install root dependencies:', error.message); + process.exit(1); + } +} + +// Now initialize husky +try { + execSync(`node "${huskyPath}" install`, { + cwd: repoRoot, + stdio: 'inherit' + }); + console.log('✅ Husky git hooks initialized successfully'); +} catch (error) { + console.error('❌ Failed to initialize Husky:', error.message); + process.exit(1); +} diff --git a/common/scripts/run-diagram-tests.js b/common/scripts/run-diagram-tests.js new file mode 100755 index 00000000000..478ed653034 --- /dev/null +++ b/common/scripts/run-diagram-tests.js @@ -0,0 +1,218 @@ +#!/usr/bin/env node + +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +const { execSync } = require('child_process'); +const path = require('path'); + +// ANSI color codes +const colors = { + reset: '\x1b[0m', + bright: '\x1b[1m', + green: '\x1b[32m', + red: '\x1b[31m', + yellow: '\x1b[33m', + cyan: '\x1b[36m', + gray: '\x1b[90m', +}; + +const diagram_packages = [ + { name: 'bi-diagram', path: 'workspaces/ballerina/bi-diagram' }, + { name: 'sequence-diagram', path: 'workspaces/ballerina/sequence-diagram' }, + { name: 'component-diagram', path: 'workspaces/ballerina/component-diagram' }, + { name: 'type-diagram', path: 'workspaces/ballerina/type-diagram' }, + { name: 'mi-diagram', path: 'workspaces/mi/mi-diagram' }, +]; + +function parseTestResults(output) { + const results = { + testSuites: { passed: 0, failed: 0, total: 0 }, + tests: { passed: 0, failed: 0, total: 0 }, + snapshots: { passed: 0, failed: 0, updated: 0, total: 0 }, + time: 'N/A', + failedTests: [], + }; + + // Parse test suites + const testSuitesMatch = output.match(/Test Suites:\s+(?:(\d+)\s+failed,\s*)?(\d+)\s+passed,\s*(\d+)\s+total/); + if (testSuitesMatch) { + results.testSuites.failed = parseInt(testSuitesMatch[1] || '0'); + results.testSuites.passed = parseInt(testSuitesMatch[2] || '0'); + results.testSuites.total = parseInt(testSuitesMatch[3] || '0'); + } + + // Parse tests + const testsMatch = output.match(/Tests:\s+(?:(\d+)\s+failed,\s*)?(\d+)\s+passed,\s*(\d+)\s+total/); + if (testsMatch) { + results.tests.failed = parseInt(testsMatch[1] || '0'); + results.tests.passed = parseInt(testsMatch[2] || '0'); + results.tests.total = parseInt(testsMatch[3] || '0'); + } + + // Parse snapshots + const snapshotsMatch = output.match(/Snapshots:\s+(?:(\d+)\s+failed,\s*)?(?:(\d+)\s+updated,\s*)?(\d+)\s+passed,\s*(\d+)\s+total/); + if (snapshotsMatch) { + results.snapshots.failed = parseInt(snapshotsMatch[1] || '0'); + results.snapshots.updated = parseInt(snapshotsMatch[2] || '0'); + results.snapshots.passed = parseInt(snapshotsMatch[3] || '0'); + results.snapshots.total = parseInt(snapshotsMatch[4] || '0'); + } + + // Parse time + const timeMatch = output.match(/Time:\s+([\d.]+\s*s)/); + if (timeMatch) { + results.time = timeMatch[1]; + } + + // Extract failed test names + const failPattern = /●\s+(.+?)(?:\n|$)/g; + let match; + while ((match = failPattern.exec(output)) !== null) { + if (match[1] && !match[1].includes('expect(')) { + results.failedTests.push(match[1].trim()); + } + } + + return results; +} + +function runTest(packageInfo) { + const { name, path: packagePath } = packageInfo; + + console.log(`\n${colors.cyan}${colors.bright}Running tests for ${name}...${colors.reset}`); + console.log(`${colors.gray}Location: ${packagePath}${colors.reset}\n`); + + let output = ''; + let success = true; + + try { + output = execSync('pnpm run test 2>&1', { + cwd: path.join(process.cwd(), packagePath), + encoding: 'utf-8', + maxBuffer: 10 * 1024 * 1024, // 10MB buffer + }); + } catch (error) { + // Jest returns non-zero exit code when tests fail, but output is still valid + output = error.stdout || error.output?.join('') || ''; + success = false; + } + + const results = parseTestResults(output); + + // Determine success based on actual test results, not just exit code + const actualSuccess = results.tests.failed === 0 && results.testSuites.failed === 0; + + return { name, success: actualSuccess, results, output }; +} + +function printResult(result) { + const { name, success, results } = result; + const icon = success ? `${colors.green}✓${colors.reset}` : `${colors.red}✗${colors.reset}`; + + console.log(`${icon} ${colors.bright}${name}${colors.reset}`); + console.log(` Test Suites: ${formatCount(results.testSuites.passed, results.testSuites.failed, results.testSuites.total)}`); + console.log(` Tests: ${formatCount(results.tests.passed, results.tests.failed, results.tests.total)}`); + console.log(` Snapshots: ${formatCount(results.snapshots.passed, results.snapshots.failed, results.snapshots.total, results.snapshots.updated)}`); + console.log(` Time: ${results.time}`); + + if (results.failedTests.length > 0) { + console.log(` ${colors.red}Failed tests:${colors.reset}`); + results.failedTests.slice(0, 5).forEach(test => { + console.log(` ${colors.red}â€ĸ${colors.reset} ${test}`); + }); + if (results.failedTests.length > 5) { + console.log(` ${colors.gray}... and ${results.failedTests.length - 5} more${colors.reset}`); + } + } +} + +function formatCount(passed, failed, total, updated) { + let result = ''; + + if (failed > 0) { + result += `${colors.red}${failed} failed${colors.reset}, `; + } + if (updated && updated > 0) { + result += `${colors.yellow}${updated} updated${colors.reset}, `; + } + result += `${colors.green}${passed} passed${colors.reset}`; + result += `, ${total} total`; + + return result; +} + +function printSummary(allResults) { + console.log(`\n${colors.bright}${'='.repeat(60)}${colors.reset}`); + console.log(`${colors.bright}${colors.cyan}SUMMARY${colors.reset}`); + console.log(`${colors.bright}${'='.repeat(60)}${colors.reset}\n`); + + const totals = { + testSuites: { passed: 0, failed: 0, total: 0 }, + tests: { passed: 0, failed: 0, total: 0 }, + snapshots: { passed: 0, failed: 0, updated: 0, total: 0 }, + }; + + allResults.forEach(result => { + printResult(result); + console.log(''); + + // Accumulate totals + totals.testSuites.passed += result.results.testSuites.passed; + totals.testSuites.failed += result.results.testSuites.failed; + totals.testSuites.total += result.results.testSuites.total; + + totals.tests.passed += result.results.tests.passed; + totals.tests.failed += result.results.tests.failed; + totals.tests.total += result.results.tests.total; + + totals.snapshots.passed += result.results.snapshots.passed; + totals.snapshots.failed += result.results.snapshots.failed; + totals.snapshots.updated += result.results.snapshots.updated; + totals.snapshots.total += result.results.snapshots.total; + }); + + console.log(`${colors.bright}OVERALL TOTALS:${colors.reset}`); + console.log(` Test Suites: ${formatCount(totals.testSuites.passed, totals.testSuites.failed, totals.testSuites.total)}`); + console.log(` Tests: ${formatCount(totals.tests.passed, totals.tests.failed, totals.tests.total)}`); + console.log(` Snapshots: ${formatCount(totals.snapshots.passed, totals.snapshots.failed, totals.snapshots.total, totals.snapshots.updated)}`); + + const allPassed = allResults.every(r => r.success); + console.log(`\n${colors.bright}${'='.repeat(60)}${colors.reset}`); + + if (allPassed) { + console.log(`${colors.green}${colors.bright}✓ All diagram tests passed!${colors.reset}\n`); + process.exit(0); + } else { + console.log(`${colors.red}${colors.bright}✗ Some diagram tests failed!${colors.reset}\n`); + process.exit(1); + } +} + +// Main execution +console.log(`${colors.bright}${colors.cyan}Running Diagram Snapshot Tests${colors.reset}`); +console.log(`${colors.gray}Testing ${diagram_packages.length} diagram packages...${colors.reset}`); + +const allResults = []; + +for (const pkg of diagram_packages) { + const result = runTest(pkg); + allResults.push(result); +} + +printSummary(allResults); diff --git a/common/scripts/validate-package-versions.js b/common/scripts/validate-package-versions.js new file mode 100755 index 00000000000..573ec2bdcfe --- /dev/null +++ b/common/scripts/validate-package-versions.js @@ -0,0 +1,132 @@ +#!/usr/bin/env node + +/** + * This script validates that all package.json files use strict versioning + * (no ^ or ~ prefixes) for dependencies. + * + * Usage: node validate-package-versions.js [files...] + * + * Exit codes: + * - 0: All package.json files use strict versioning + * - 1: One or more package.json files have non-strict versions + */ + +const fs = require('fs'); +const path = require('path'); + +/** + * Validates if a version string uses strict versioning (no ^ or ~ prefixes) + */ +function isStrictVersion(version) { + if (!version || typeof version !== 'string') { + return true; // Skip non-string values + } + + // Allow workspace protocol, file protocol, git urls, etc. + if (version.startsWith('workspace:') || + version.startsWith('file:') || + version.startsWith('link:') || + version.startsWith('git+') || + version.startsWith('http://') || + version.startsWith('https://') || + version.startsWith('npm:') || + version === '*' || + version === 'latest') { + return true; + } + + // Check for ^ or ~ prefixes + return !version.startsWith('^') && !version.startsWith('~'); +} + +/** + * Validates dependencies in a package.json object + */ +function validateDependencies(packageJson, filePath) { + const errors = []; + const sections = [ + 'dependencies', + 'devDependencies', + 'peerDependencies', + 'optionalDependencies' + ]; + + for (const section of sections) { + if (packageJson[section]) { + for (const [pkg, version] of Object.entries(packageJson[section])) { + if (!isStrictVersion(version)) { + errors.push({ + file: filePath, + section, + package: pkg, + version + }); + } + } + } + } + + return errors; +} + +/** + * Main function to validate package.json files + */ +function main() { + const args = process.argv.slice(2); + + // Filter to only process package.json files + const packageJsonFiles = args.filter(file => { + return file.endsWith('package.json') && fs.existsSync(file); + }); + + if (packageJsonFiles.length === 0) { + console.log('No package.json files to validate.'); + process.exit(0); + } + + let allErrors = []; + + for (const file of packageJsonFiles) { + try { + const content = fs.readFileSync(file, 'utf8'); + const packageJson = JSON.parse(content); + const errors = validateDependencies(packageJson, file); + allErrors = allErrors.concat(errors); + } catch (error) { + console.error(`Error processing ${file}: ${error.message}`); + process.exit(1); + } + } + + if (allErrors.length > 0) { + console.error('\n❌ Found non-strict version declarations:\n'); + + // Group errors by file + const errorsByFile = {}; + for (const error of allErrors) { + if (!errorsByFile[error.file]) { + errorsByFile[error.file] = []; + } + errorsByFile[error.file].push(error); + } + + for (const [file, errors] of Object.entries(errorsByFile)) { + console.error(`📄 ${file}:`); + for (const error of errors) { + console.error(` - ${error.section}: "${error.package}": "${error.version}"`); + } + console.error(''); + } + + console.error('âš ī¸ All dependencies must use strict versioning (without ^ or ~ prefixes).'); + console.error(' Replace versions like "^1.2.3" or "~1.2.3" with "1.2.3".\n'); + + process.exit(1); + } + + console.log('✅ All package.json files use strict versioning.'); + process.exit(0); +} + +main(); diff --git a/docs/git-hooks.md b/docs/git-hooks.md new file mode 100644 index 00000000000..399d65480d1 --- /dev/null +++ b/docs/git-hooks.md @@ -0,0 +1,139 @@ +# Git Pre-Commit Hooks + +This repository uses [Husky](https://typicode.github.io/husky/) to manage git hooks and enforce code quality standards before commits. + +## Current Checks + +### Strict Version Validation + +All `package.json` files must use **strict versioning** for npm dependencies. This means: + +- ❌ **Not allowed**: `^1.2.3`, `~1.2.3` (caret and tilde prefixes) +- ✅ **Allowed**: `1.2.3` (exact version) + +Special version formats that are allowed: +- `workspace:*`, `workspace:^`, `workspace:~` (pnpm workspace protocol) +- `file:../path/to/package` (local file dependencies) +- `link:../path/to/package` (symlinked packages) +- `npm:package@version` (npm alias) +- `git+https://...` (git URLs) +- `http://...`, `https://...` (tarball URLs) +- `*`, `latest` (special version keywords) + +### How It Works + +When you attempt to commit changes that include modifications to any `package.json` file, the pre-commit hook will: + +1. Identify all staged `package.json` files +2. Validate that all dependency versions use strict versioning +3. Block the commit if non-strict versions are found +4. Display which files and dependencies need to be fixed + +## Example + +### ❌ This will be blocked: + +```json +{ + "dependencies": { + "express": "^4.18.0", + "lodash": "~4.17.21" + } +} +``` + +### ✅ This will pass: + +```json +{ + "dependencies": { + "express": "4.18.0", + "lodash": "4.17.21" + } +} +``` + +## Manual Validation + +You can manually run the validation script at any time: + +```bash +node common/scripts/validate-package-versions.js path/to/package.json +``` + +Or validate multiple files: + +```bash +node common/scripts/validate-package-versions.js workspaces/*/package.json +``` + +## Bypassing the Hook (Not Recommended) + +In exceptional circumstances, you can bypass the pre-commit hook: + +```bash +git commit --no-verify -m "your message" +``` + +**Warning**: Bypassing hooks should only be done when absolutely necessary and with good reason. + +## Setup for Contributors + +The hooks are automatically installed when you run: + +```bash +pnpm install +``` + +This triggers the `prepare` script which initializes Husky. + +## Troubleshooting + +### Hook not running + +If the pre-commit hook isn't running: + +1. Ensure you're in a git repository: `git status` +2. Check that Husky is installed: `ls .husky` +3. Reinstall hooks: `pnpm run prepare` +4. Verify git hooks are enabled: `git config core.hooksPath` + +### Permission issues + +If you get permission errors: + +```bash +chmod +x .husky/pre-commit +chmod +x common/scripts/validate-package-versions.js +``` + +## Adding More Checks + +To add additional pre-commit checks: + +1. Edit `.husky/pre-commit` +2. Add your validation logic +3. Ensure the script exits with code 1 on failure, 0 on success + +Example: + +```bash +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +# Existing validation... + +# Add new validation +echo "🔍 Running lint checks..." +pnpm run lint +if [ $? -ne 0 ]; then + echo "❌ Lint failed" + exit 1 +fi +``` + +## Related Tools + +- [Husky](https://typicode.github.io/husky/) - Git hooks management +- [Rush](https://rushjs.io/) - Monorepo build orchestrator +- [pnpm](https://pnpm.io/) - Package manager diff --git a/package.json b/package.json index 9b616ea1216..20cb7467f6b 100644 --- a/package.json +++ b/package.json @@ -1,62 +1,41 @@ { - "name": "ballerina-vscode-extensions-mono-repo", - "pnpm": { - "overrides": { - "@modelcontextprotocol/sdk": "^1.26.0", - "@isaacs/brace-expansion": "5.0.2", - "axios": "^1.13.5", - "http-proxy": "^1.18.1", - "prismjs": "^1.30.0", - "webpack": "^5.94.0", - "webpack-dev-server": "^5.2.1", - "braces": "^3.0.3", - "js-yaml": "^4.1.1", - "micromatch": "^4.0.8", - "esbuild": "^0.25.0", - "xmldom": "npm:@xmldom/xmldom@^0.8.10", - "@eslint/plugin-kit": "^0.3.4", - "on-headers": "^1.1.0", - "form-data": "^4.0.4", - "tmp": "^0.2.4", - "express": "^4.22.1", - "qs": "^6.14.2", - "diff": "^8.0.3", - "undici": "^7.18.2", - "lodash": "4.17.23", - "hono": "^4.11.7", - "fast-xml-parser": "5.3.7" - } - }, - "scripts": { - "prebuild": "pnpm run init-submodules && rush install", - "init-submodules": "git submodule update --init --recursive && git submodule foreach git pull origin master", - "build:wso2PlatformWebviews": "rush build -o @wso2/wso2-platform-vscode-webviews", - "build:choreoWebviews": "rush build -o @wso2/choreo-vscode-webviews", - "build:dataMapper": "rush build -o @wso2/ballerina-data-mapper", - "build:graphql": "rush build -o graphqlview-lib", - "build:lcd": "rush build -o @wso2/ballerina-low-code-diagram", - "build:visualizer": "rush build -o @wso2/ballerina-visualizer", - "build:overview": "rush build -o @wso2/overview-view", - "build:lcec": "rush build -o @wso2/ballerina-low-code-edtior-commons", - "build:lcTests": "rush build -o @wso2/ballerina-low-code-integration-tests", - "build:lceUi": "rush build -o @wso2/ballerina-low-code-edtior-ui-components", - "build:syntaxTree": "rush build -o @wso2/syntax-tree", - "build:se": "rush build -o @wso2/ballerina-statement-editor", - "build:perf": "rush build -o perf", - "build:designDiagram": "rush build -o project-design-diagrams", - "build:swagger": "rush build -o swaggerview-lib", - "build:variableView": "rush build -o variableview-lib", - "build:choreoExtention": "rush build -o choreo", - "build:wso2-platform-ext": "rush build -o wso2-platform", - "build:ballerinExtension": "rush build -o ballerina", - "build:fhirToolsExtension": "rush build -o fhir-tools", - "build": "rush build", - "build:ballerina": "rush build --to ballerina", - "build:choreo": "rush build --to choreo", - "build:wso2-platform": "rush build --to wso2-platform", - "build:mi": "rush build --to micro-integrator", - "build:api-designer": "rush build --to api-designer", - "setup-e2e-test-debug": "workspaces/ballerina/ballerina-extension/node_modules/vscode-extension-tester/out/cli.js get-vscode && workspaces/ballerina/ballerina-extension/node_modules/vscode-extension-tester/out/cli.js get-chromedriver", - "ui-toolkit-stories": "npm run --prefix ./workspaces/common-libs/ui-toolkit serve-storybook" - } + "name": "ballerina-vscode-extensions-mono-repo", + "scripts": { + "prebuild": "pnpm run init-submodules && rush install", + "init-submodules": "git submodule update --init --recursive && git submodule foreach git pull origin master", + "build:wso2PlatformWebviews": "rush build -o @wso2/wso2-platform-vscode-webviews", + "build:choreoWebviews": "rush build -o @wso2/choreo-vscode-webviews", + "build:dataMapper": "rush build -o @wso2/ballerina-data-mapper", + "build:graphql": "rush build -o graphqlview-lib", + "build:lcd": "rush build -o @wso2/ballerina-low-code-diagram", + "build:visualizer": "rush build -o @wso2/ballerina-visualizer", + "build:overview": "rush build -o @wso2/overview-view", + "build:lcec": "rush build -o @wso2/ballerina-low-code-edtior-commons", + "build:lcTests": "rush build -o @wso2/ballerina-low-code-integration-tests", + "build:lceUi": "rush build -o @wso2/ballerina-low-code-edtior-ui-components", + "build:syntaxTree": "rush build -o @wso2/syntax-tree", + "build:se": "rush build -o @wso2/ballerina-statement-editor", + "build:perf": "rush build -o perf", + "build:designDiagram": "rush build -o project-design-diagrams", + "build:swagger": "rush build -o swaggerview-lib", + "build:variableView": "rush build -o variableview-lib", + "build:choreoExtention": "rush build -o choreo", + "build:wso2-platform-ext": "rush build -o wso2-platform", + "build:ballerinExtension": "rush build -o ballerina", + "build:fhirToolsExtension": "rush build -o fhir-tools", + "build": "rush build", + "build:ballerina": "rush build --to ballerina", + "build:choreo": "rush build --to choreo", + "build:wso2-platform": "rush build --to wso2-platform", + "build:mi": "rush build --to micro-integrator", + "build:api-designer": "rush build --to api-designer", + "test:diagrams": "node common/scripts/run-diagram-tests.js", + "test:updateDiagramsSnapshots": "cd workspaces/ballerina/bi-diagram && npm run test:updateSnapshots && cd ../sequence-diagram && npm run test:updateSnapshots && cd ../component-diagram && npm run test:updateSnapshots && cd ../type-diagram && npm run test:updateSnapshots", + "setup-e2e-test-debug": "workspaces/ballerina/ballerina-extension/node_modules/vscode-extension-tester/out/cli.js get-vscode && workspaces/ballerina/ballerina-extension/node_modules/vscode-extension-tester/out/cli.js get-chromedriver", + "ui-toolkit-stories": "npm run --prefix ./workspaces/common-libs/ui-toolkit serve-storybook", + "prepare": "husky" + }, + "devDependencies": { + "husky": "9.1.7" + } } diff --git a/rush.json b/rush.json index 33a7790dbd0..906772b44fa 100644 --- a/rush.json +++ b/rush.json @@ -232,7 +232,9 @@ /** * The list of shell commands to run after the Rush installation finishes */ - "postRushInstall": [], + "postRushInstall": [ + "node common/scripts/install-git-hooks.js" + ], /** * The list of shell commands to run before the Rush build command starts */ diff --git a/workspaces/api-designer/api-designer-core/package.json b/workspaces/api-designer/api-designer-core/package.json index ae549f7b49f..2bd6d2f016f 100644 --- a/workspaces/api-designer/api-designer-core/package.json +++ b/workspaces/api-designer/api-designer-core/package.json @@ -18,8 +18,8 @@ "eslint": "9.27.0" }, "dependencies": { - "@types/vscode-webview": "^1.57.3", - "vscode-messenger-common": "^0.4.5" + "@types/vscode-webview": "1.57.3", + "vscode-messenger-common": "0.4.5" }, "repository": { "type": "git", diff --git a/workspaces/api-designer/api-designer-extension/package.json b/workspaces/api-designer/api-designer-extension/package.json index 8913558fba7..7cf55d39eb9 100644 --- a/workspaces/api-designer/api-designer-extension/package.json +++ b/workspaces/api-designer/api-designer-extension/package.json @@ -98,44 +98,44 @@ "postbuild": "pnpm run copyVSIX" }, "devDependencies": { - "@types/vscode": "^1.81.0", + "@types/vscode": "1.81.0", "@types/node": "16.x", "@typescript-eslint/eslint-plugin": "8.32.1", "@typescript-eslint/parser": "8.32.1", "eslint": "9.27.0", "typescript": "5.8.3", - "ts-loader": "^9.4.4", - "webpack": "^5.88.2", - "webpack-cli": "^5.1.4", - "@vscode/test-electron": "^2.3.4", - "rimraf": "~5.0.5", - "@types/js-yaml": "~4.0.9" + "ts-loader": "9.4.4", + "webpack": "5.104.1", + "webpack-cli": "5.1.4", + "@vscode/test-electron": "2.3.4", + "rimraf": "5.0.5", + "@types/js-yaml": "4.0.9" }, "dependencies": { - "copyfiles": "^2.4.1", - "@vscode/vsce": "^3.7.0", - "vscode-messenger": "^0.4.5", - "vscode-messenger-common": "^0.4.5", + "copyfiles": "2.4.1", + "@vscode/vsce": "3.7.0", + "vscode-messenger": "0.4.5", + "vscode-messenger-common": "0.4.5", "@wso2/api-designer-core": "workspace:*", "@wso2/api-designer-rpc-client": "workspace:*", "@wso2/api-designer-visualizer": "workspace:*", "@wso2/font-wso2-vscode": "workspace:*", - "@types/xml2js": "~0.4.12", - "jsonix": "~3.0.0", + "@types/xml2js": "0.4.12", + "jsonix": "3.0.0", "lodash": "4.17.23", - "axios": "~1.12.0", - "@types/lodash": "~4.14.199", - "xstate": "^4.38.3", - "node-fetch": "~2.6.2", - "node-loader": "~2.0.0", + "axios": "1.13.5", + "@types/lodash": "4.14.199", + "xstate": "4.38.3", + "node-fetch": "2.6.7", + "node-loader": "2.0.0", "to-json-schema": "0.2.5", - "@babel/core": "^7.24.4", + "@babel/core": "7.24.4", "@types/json-schema": "7.0.15", "json-schema": "0.4.0", - "portfinder": "^1.0.32", - "cors-anywhere": "^0.4.4", + "portfinder": "1.0.32", + "cors-anywhere": "0.4.4", "@apidevtools/json-schema-ref-parser": "11.6.1", - "adm-zip": "~0.5.14", - "js-yaml": "~4.1.1" + "adm-zip": "0.5.14", + "js-yaml": "4.1.1" } } diff --git a/workspaces/api-designer/api-designer-rpc-client/package.json b/workspaces/api-designer/api-designer-rpc-client/package.json index e89db7812a1..29f80631861 100644 --- a/workspaces/api-designer/api-designer-rpc-client/package.json +++ b/workspaces/api-designer/api-designer-rpc-client/package.json @@ -20,9 +20,9 @@ "eslint": "9.27.0" }, "dependencies": { - "@types/vscode-webview": "^1.57.3", - "vscode-messenger-common": "^0.4.5", - "vscode-messenger-webview": "^0.4.5", + "@types/vscode-webview": "1.57.3", + "vscode-messenger-common": "0.4.5", + "vscode-messenger-webview": "0.4.5", "@wso2/api-designer-core": "workspace:*", "react": "18.2.0", "react-dom": "18.2.0" diff --git a/workspaces/api-designer/api-designer-visualizer/package.json b/workspaces/api-designer/api-designer-visualizer/package.json index 48eae5014a5..f1a0c8cb822 100644 --- a/workspaces/api-designer/api-designer-visualizer/package.json +++ b/workspaces/api-designer/api-designer-visualizer/package.json @@ -15,52 +15,52 @@ "author": "wso2", "license": "Apache-2.0", "dependencies": { - "@emotion/css": "^11.10.5", - "@emotion/react": "^11.9.3", - "@emotion/styled": "^11.11.0", - "@vscode/webview-ui-toolkit": "^1.2.0", + "@emotion/css": "11.10.5", + "@emotion/react": "11.9.3", + "@emotion/styled": "11.11.0", + "@vscode/webview-ui-toolkit": "1.2.0", "@wso2/api-designer-core": "workspace:*", "@wso2/api-designer-rpc-client": "workspace:*", "@wso2/ui-toolkit": "workspace:*", "react": "18.2.0", "@wso2/font-wso2-vscode": "workspace:*", "react-dom": "18.2.0", - "react-markdown": "~9.0.1", - "js-yaml": "~4.1.1", - "process": "~0.11.10", - "path": "~0.12.7", - "@hookform/resolvers": "~3.3.4", - "yup": "~1.4.0", + "react-markdown": "9.0.1", + "js-yaml": "4.1.1", + "process": "0.11.10", + "path": "0.12.7", + "@hookform/resolvers": "3.3.4", + "yup": "1.4.0", "react-hook-form": "7.56.4", "lodash": "4.17.23", - "@tanstack/react-query": "4.0.10", - "@tanstack/query-core": "^4.0.0-beta.1", - "@mdxeditor/editor": "~3.14.0" + "@tanstack/react-query": "5.77.1", + "@tanstack/query-core": "5.77.1", + "@mdxeditor/editor": "3.14.0" }, "devDependencies": { - "@storybook/addon-actions": "~7.4.0", - "@storybook/addon-essentials": "~7.4.0", - "@storybook/cli": "^7.6.10", - "@storybook/react": "~7.4.0", - "@storybook/react-webpack5": "~7.4.0", - "webpack": "~5.88.2", - "webpack-cli": "~5.1.4", - "webpack-dev-server": "~4.15.1", - "@babel/preset-typescript": "~7.22.11", - "@babel/plugin-syntax-flow": "~7.22.5", - "@types/lodash": "~4.14.198", - "@types/vscode-webview": "~1.57.2", - "@types/js-yaml": "~4.0.9", - "css-loader": "^5.2.7", - "sass-loader": "^13.2.0", - "source-map-loader": "^4.0.1", - "style-loader": "^1.3.0", - "ts-loader": "^9.5.0", + "@storybook/addon-actions": "7.4.0", + "@storybook/addon-essentials": "7.4.0", + "@storybook/cli": "7.6.10", + "@storybook/react": "7.4.0", + "@storybook/react-webpack5": "7.4.0", + "webpack": "5.104.1", + "webpack-cli": "5.1.4", + "webpack-dev-server": "5.2.3", + "@babel/preset-typescript": "7.22.11", + "@babel/plugin-syntax-flow": "7.22.5", + "@types/lodash": "4.14.198", + "@types/vscode-webview": "1.57.2", + "@types/js-yaml": "4.0.9", + "css-loader": "5.2.7", + "sass-loader": "13.2.0", + "source-map-loader": "4.0.1", + "style-loader": "1.3.0", + "ts-loader": "9.5.0", "typescript": "5.8.3", - "@types/node": "^20.10.6", + "@types/node": "20.10.6", "@types/react": "18.2.0", "@types/react-dom": "18.2.0", "@vscode/codicons": "0.0.44", - "copyfiles": "^2.4.1" + "copyfiles": "2.4.1" } } diff --git a/workspaces/api-designer/api-designer-visualizer/src/index.tsx b/workspaces/api-designer/api-designer-visualizer/src/index.tsx index 8d1f05837f3..763b183f9be 100644 --- a/workspaces/api-designer/api-designer-visualizer/src/index.tsx +++ b/workspaces/api-designer/api-designer-visualizer/src/index.tsx @@ -27,7 +27,7 @@ const queryClient = new QueryClient({ retry: false, refetchOnWindowFocus: false, staleTime: 1000, - cacheTime: 1000, + gcTime: 1000, }, }, }); diff --git a/workspaces/api-designer/api-designer-visualizer/webpack.config.js b/workspaces/api-designer/api-designer-visualizer/webpack.config.js index 0128d5dafcb..0e5a268a9e1 100644 --- a/workspaces/api-designer/api-designer-visualizer/webpack.config.js +++ b/workspaces/api-designer/api-designer-visualizer/webpack.config.js @@ -16,7 +16,8 @@ module.exports = { 'react': path.resolve(__dirname, 'node_modules/react'), 'react-dom': path.resolve(__dirname, 'node_modules/react-dom') }, - fallback: { 'process/browser': require.resolve('process/browser'), } + fallback: { 'process/browser': require.resolve('process/browser'), }, + fullySpecified: false }, module: { rules: [ @@ -25,6 +26,12 @@ module.exports = { loader: "ts-loader", exclude: '/node_modules/', }, + { + test: /\.m?js$/, + resolve: { + fullySpecified: false + } + }, { enforce: "pre", test: /\.js$/, diff --git a/workspaces/apk/apk-extension/package.json b/workspaces/apk/apk-extension/package.json index 970d889c9a1..6169eaccbf5 100644 --- a/workspaces/apk/apk-extension/package.json +++ b/workspaces/apk/apk-extension/package.json @@ -57,19 +57,20 @@ "copyVSIXToRoot": "copyfiles -f ./vsix/* ../../.." }, "devDependencies": { - "@types/glob": "^8.0.0", - "@types/mocha": "^10.0.1", - "@types/node": "^18.11.19", - "@types/vscode": "^1.63.0", + "@types/glob": "8.0.0", + "@types/minimatch": "5.1.2", + "@types/mocha": "10.0.1", + "@types/node": "18.11.19", + "@types/vscode": "1.63.0", "@typescript-eslint/eslint-plugin": "8.32.1", "@typescript-eslint/parser": "8.32.1", - "@vscode/test-electron": "^2.3.2", + "@vscode/test-electron": "2.3.2", "eslint": "9.27.0", - "glob": "^11.1.0", - "mocha": "^10.2.0", + "glob": "11.1.0", + "mocha": "10.2.0", "typescript": "5.8.3", - "copyfiles": "^2.4.1", - "@vscode/vsce": "^3.7.0" + "copyfiles": "2.4.1", + "@vscode/vsce": "3.7.0" } } diff --git a/workspaces/apk/apk-extension/tsconfig.json b/workspaces/apk/apk-extension/tsconfig.json index b695825b2c7..012e73be4bc 100644 --- a/workspaces/apk/apk-extension/tsconfig.json +++ b/workspaces/apk/apk-extension/tsconfig.json @@ -6,7 +6,9 @@ "lib": [ "ES2020" ], + "skipLibCheck": true, "sourceMap": true, + "skipLibCheck": true, "rootDir": "src", "strict": true /* enable all strict type-checking options */ /* Additional Checks */ diff --git a/workspaces/ballerina/ballerina-core/package.json b/workspaces/ballerina/ballerina-core/package.json index e57eb2e1ec9..030b9c7a377 100644 --- a/workspaces/ballerina/ballerina-core/package.json +++ b/workspaces/ballerina/ballerina-core/package.json @@ -14,28 +14,29 @@ }, "dependencies": { "@wso2/syntax-tree": "workspace:*", - "vscode-languageserver-protocol": "^3.17.5", - "vscode-languageserver-types": "^3.17.5", - "vscode-messenger-common": "^0.5.1", - "vscode-ws-jsonrpc": "^3.4.0", - "isomorphic-ws": "^5.0.0", - "vscode-jsonrpc": "^8.2.1", - "@types/vscode-webview": "^1.57.3", - "handlebars": "~4.7.8", - "mousetrap": "^1.6.5", + "vscode-languageserver-protocol": "3.17.5", + "vscode-languageserver-types": "3.17.5", + "vscode-messenger-common": "0.5.1", + "vscode-ws-jsonrpc": "3.4.0", + "isomorphic-ws": "5.0.0", + "vscode-jsonrpc": "8.2.1", + "@types/vscode-webview": "1.57.3", + "handlebars": "4.7.8", + "mousetrap": "1.6.5", "react": "18.2.0", - "tree-kill": "^1.2.2", - "vscode-uri": "^3.0.8", - "@types/mousetrap": "~1.6.11", - "@types/ws": "^8.2.1" + "@wso2/wso2-platform-core": "workspace:*", + "tree-kill": "1.2.2", + "vscode-uri": "3.0.8", + "@types/mousetrap": "1.6.11", + "@types/ws": "8.2.1" }, "devDependencies": { - "@types/node": "^22.15.21", - "@types/vscode": "^1.83.1", + "@types/node": "22.15.21", + "@types/vscode": "1.100.0", "@typescript-eslint/eslint-plugin": "8.32.1", "@typescript-eslint/parser": "8.32.1", "@types/react": "18.2.0", - "copyfiles": "^2.4.1", + "copyfiles": "2.4.1", "eslint": "9.27.0", "typescript": "5.8.3" }, diff --git a/workspaces/ballerina/ballerina-core/src/index.ts b/workspaces/ballerina/ballerina-core/src/index.ts index df051da1cae..78ad207855a 100644 --- a/workspaces/ballerina/ballerina-core/src/index.ts +++ b/workspaces/ballerina/ballerina-core/src/index.ts @@ -91,6 +91,7 @@ export * from "./rpc-types/icp-service/rpc-type"; export * from "./rpc-types/agent-chat"; export * from "./rpc-types/agent-chat/interfaces"; export * from "./rpc-types/agent-chat/rpc-type"; +export * from "./rpc-types/platform-ext"; // ------ History class and interface --------> diff --git a/workspaces/ballerina/ballerina-core/src/interfaces/bi.ts b/workspaces/ballerina/ballerina-core/src/interfaces/bi.ts index dc30f1f89da..bedc09fe726 100644 --- a/workspaces/ballerina/ballerina-core/src/interfaces/bi.ts +++ b/workspaces/ballerina/ballerina-core/src/interfaces/bi.ts @@ -20,6 +20,7 @@ import { NodePosition } from "@wso2/syntax-tree"; import { LinePosition } from "./common"; import { Diagnostic as VSCodeDiagnostic } from "vscode-languageserver-types"; import { ValueTypeConstraint } from "../rpc-types/ai-agent/interfaces"; +import { Type } from "./extended-lang-client"; export type { NodePosition }; @@ -126,6 +127,7 @@ export type Imports = { export type FormFieldInputType = "TEXT" | "BOOLEAN" | "IDENTIFIER" | + "AUTOCOMPLETE" | "SINGLE_SELECT" | "MULTIPLE_SELECT" | "TEXTAREA" | @@ -148,13 +150,28 @@ export type FormFieldInputType = "TEXT" | "ai:Prompt" | "FIXED_PROPERTY" | "REPEATABLE_PROPERTY" | - "MAPPING_EXPRESSION_SET" | - "MAPPING_EXPRESSION" | "ENUM" | "DM_JOIN_CLAUSE_RHS_EXPRESSION" | "RECORD_MAP_EXPRESSION" | + "REPEATABLE_MAP" | "PROMPT" | - "SQL_QUERY"; + "RECORD_FIELD_SELECTOR" | + "SQL_QUERY" | + "CLAUSE_EXPRESSION" | + "SLIDER" | + "HEADER_SET" | + "DROPDOWN_CHOICE" | + "CUSTOM_DROPDOWN" | + "ACTION_TYPE" | + "ACTION_EXPRESSION" | + "VIEW" | + "SERVICE_PATH" | + "ACTION_PATH" | + "NUMBER" | + "REPEATABLE_LIST" | + "CONDITIONAL_FIELDS" | + "DOC_TEXT" + ; export interface BaseType { fieldType: FormFieldInputType; @@ -186,11 +203,23 @@ export interface IdentifierType extends BaseType { scope: FieldScope; } +export interface RecordFieldSelectorType extends BaseType { + fieldType: "RECORD_FIELD_SELECTOR"; + recordSelectorType: RecordSelectorType; +} + +export interface RecordSelectorType { + rootType: Type; + referencedTypes: Type[]; +} + + export type InputType = | BaseType | DropdownType | TemplateType - | IdentifierType; + | IdentifierType + | RecordFieldSelectorType; export type Property = { metadata: Metadata; @@ -349,6 +378,7 @@ export interface ProjectStructure { projectName: string; projectPath?: string; projectTitle?: string; + isLibrary?: boolean; directoryMap: ProjectDirectoryMap; } @@ -445,6 +475,7 @@ export type NodePropertyKey = | "store" | "systemPrompt" | "targetType" + | "testConfigValue" | "toolKitName" | "tools" | "type" @@ -465,8 +496,10 @@ export type FieldScope = "Global" | "Local" | "Object"; export type NodeKind = | "ACTION_OR_EXPRESSION" + | "AGENTS" | "AGENT" | "AGENT_CALL" + | "AGENT_RUN" | "ASSIGN" | "AUTOMATION" | "BODY" @@ -480,6 +513,7 @@ export type NodeKind = | "CONTINUE" | "DATA_MAPPER_CALL" | "DATA_MAPPER_DEFINITION" + | "DATA_MAPPER_CREATION" | "DRAFT" | "ELSE" | "EMPTY" @@ -492,6 +526,7 @@ export type NodeKind = | "FUNCTION" | "FUNCTION_CALL" | "FUNCTION_DEFINITION" + | "FUNCTION_CREATION" | "IF" | "INCLUDED_FIELD" | "LOCK" diff --git a/workspaces/ballerina/ballerina-core/src/interfaces/common.ts b/workspaces/ballerina/ballerina-core/src/interfaces/common.ts index dff221f99f2..68b6a2d1c5e 100644 --- a/workspaces/ballerina/ballerina-core/src/interfaces/common.ts +++ b/workspaces/ballerina/ballerina-core/src/interfaces/common.ts @@ -2,6 +2,7 @@ import { STNode } from "@wso2/syntax-tree"; import { FlowNode, RecordTypeField } from "./bi"; +import { MACHINE_VIEW } from ".."; /** * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. @@ -35,12 +36,17 @@ export enum SubPanelView { UNDEFINED = undefined, } -export enum DataMapperDisplayMode { +export enum EditorDisplayMode { NONE = "none", POPUP = "popup", VIEW = "view", } +export interface EditorConfig { + view: MACHINE_VIEW; + displayMode: EditorDisplayMode; +} + export interface DocumentIdentifier { uri: string; } diff --git a/workspaces/ballerina/ballerina-core/src/interfaces/constants.ts b/workspaces/ballerina/ballerina-core/src/interfaces/constants.ts index 41ed5834e5d..a0b7cf6ff8c 100644 --- a/workspaces/ballerina/ballerina-core/src/interfaces/constants.ts +++ b/workspaces/ballerina/ballerina-core/src/interfaces/constants.ts @@ -48,7 +48,9 @@ export const BI_COMMANDS = { ADD_DATA_MAPPER: 'BI.project-explorer.add-data-mapper', BI_EDIT_TEST_FUNCTION: 'BI.test.edit.function', BI_ADD_TEST_FUNCTION: 'BI.test.add.function', + BI_ADD_AI_EVALUATION: 'BI.test.add.ai.evaluation', BI_EDIT_TEST_FUNCTION_DEF: 'BI.test.edit.function.def', + BI_DELETE_TEST_FUNCTION: 'BI.test.delete.function', ADD_NATURAL_FUNCTION: 'BI.project-explorer.add-natural-function', TOGGLE_TRACE_LOGS: 'BI.toggle.trace.logs', DEVANT_PUSH_TO_CLOUD: 'BI.devant.push.cloud', diff --git a/workspaces/ballerina/ballerina-core/src/interfaces/data-mapper.ts b/workspaces/ballerina/ballerina-core/src/interfaces/data-mapper.ts index d003b56b632..686bf3eb939 100644 --- a/workspaces/ballerina/ballerina-core/src/interfaces/data-mapper.ts +++ b/workspaces/ballerina/ballerina-core/src/interfaces/data-mapper.ts @@ -40,7 +40,8 @@ export enum TypeKind { Unknown = "$CompilationError$", Anydata = "anydata", Byte = "byte", - Json = "json" + Json = "json", + Xml = "xml", } export enum InputCategory { @@ -50,7 +51,8 @@ export enum InputCategory { Enum = "enum", Parameter = "parameter", Variable = "variable", - LocalVariable = "local-variable" + LocalVariable = "local-variable", + ConvertedVariable = "converted-variable" } export enum IntermediateClauseType { @@ -91,6 +93,7 @@ export interface IOType { isDeepNested?: boolean; ref?: string; typeInfo?: TypeInfo; + convertedField?: IOType; } export interface Mapping { @@ -172,6 +175,7 @@ export interface IOTypeField { isIterationVariable?: boolean; isGroupingKey?: boolean; typeInfo?: TypeInfo; + convertedVariable?: IORoot; } export interface EnumMember { diff --git a/workspaces/ballerina/ballerina-core/src/interfaces/extended-lang-client.ts b/workspaces/ballerina/ballerina-core/src/interfaces/extended-lang-client.ts index ebb2a08d09d..e6318029a3a 100644 --- a/workspaces/ballerina/ballerina-core/src/interfaces/extended-lang-client.ts +++ b/workspaces/ballerina/ballerina-core/src/interfaces/extended-lang-client.ts @@ -29,7 +29,7 @@ import { SqFlow } from "../rpc-types/sequence-diagram/interfaces"; import { FieldType, FunctionModel, ListenerModel, ServiceClassModel, ServiceInitModel, ServiceModel } from "./service"; import { CDModel } from "./component-diagram"; import { DMModel, ExpandedDMModel, IntermediateClause, Mapping, VisualizableField, FnMetadata, ResultClauseType, IOType } from "./data-mapper"; -import { DataMapperMetadata, SCOPE } from "../state-machine-types"; +import { ArtifactData, DataMapperMetadata, SCOPE } from "../state-machine-types"; import { ToolParameters } from "../rpc-types/ai-agent/interfaces"; export interface DidOpenParams { @@ -497,15 +497,31 @@ export interface ClausePositionResponse { } export interface ConvertExpressionRequest { - outputType: string; - expression: string; - expressionType: string; + outputType: string; + expression: string; + expressionType: string; } export interface ConvertExpressionResponse { convertedExpression: string; } +export interface CreateConvertedVariableRequest { + // Data Mapper related + filePath: string; + codedata: CodeData; + varName: string; + targetField: string; + subMappingName?: string; + + // Converting variable related + variableName: string; + isInput: boolean; + typeName: string; + parentTypeName?: string; + imports?: Imports; +} + export interface GraphqlDesignServiceParams { filePath: string; startLine: LinePosition; @@ -836,6 +852,7 @@ export interface BIFlowModelRequest { startLine?: LinePosition; endLine?: LinePosition; forceAssign?: boolean; + useFileSchema?: boolean; } export interface BISuggestedFlowModelRequest extends BIFlowModelRequest { @@ -855,17 +872,21 @@ export interface BISourceCodeRequest { isConnector?: boolean; isFunctionNodeUpdate?: boolean; isHelperPaneChange?: boolean; + artifactData?: ArtifactData; } export type BISourceCodeResponse = { - textEdits: { + textEdits?: { [key: string]: TextEdit[]; }; + errorMsg?: string; + stacktrace?: string; }; export type BIDeleteByComponentInfoRequest = { filePath: string; component: ComponentInfo; + nodeType?: string; } export type BIDeleteByComponentInfoResponse = { @@ -968,6 +989,7 @@ export type BIGetEnclosedFunctionRequest = { filePath: string; position: LinePosition; findClass?: boolean; + useFileSchema?: boolean; } export type BIGetEnclosedFunctionResponse = { @@ -1058,6 +1080,7 @@ export interface BICopilotContextResponse { export interface BIDesignModelRequest { projectPath?: string; + useFileSchema?: boolean; } export type BIDesignModelResponse = { @@ -1297,6 +1320,7 @@ export interface ListenersRequest { orgName?: string; pkgName?: string; listenerTypeName?: string; + removeDeprecated?: boolean; } export interface ListenersResponse { hasListeners: boolean; @@ -1311,6 +1335,7 @@ export interface ListenerModelRequest { type?: string; }; filePath: string; + removeDeprecated?: boolean; } export interface ListenerModelResponse { listener: ListenerModel; @@ -1445,6 +1470,11 @@ export interface Type { allowAdditionalFields?: boolean; } +export interface SimpleType { + name: string; + imports?: Imports; +} + type ServiceFunctionKind = "RESOURCE" | "REMOTE" | "FUNCTION"; export interface TypeFunctionModel { @@ -1494,6 +1524,8 @@ export interface Member { optional?: boolean; imports?: Imports; readonly?: boolean; + selected?: boolean; + typeName?: string; isGraphqlId?: boolean; } @@ -1509,6 +1541,7 @@ export interface GetGraphqlTypeResponse { export interface GetTypesRequest { filePath: string; + useFileSchema?: boolean; } export interface GetTypeRequest { @@ -1567,6 +1600,16 @@ export interface GetTypeResponse { type: Type; } +export interface GetSimpleTypeOfExpressionRequest { + filePath: string; + position: LinePosition; + expression: string; +} + +export interface GetSimpleTypeOfExpressionResponse { + type: SimpleType; +} + export interface JsonToTypeRequest { jsonString: string; typeName: string; @@ -1861,6 +1904,12 @@ export type OpenAPIClientDeleteResponse = { // <-------- Deployment Related -------> +export interface ProjectScopeMapping { + projectPath: string; + projectTitle: string; + integrationTypes?: SCOPE[]; +} + export interface DeploymentRequest { integrationTypes: SCOPE[]; } @@ -1869,6 +1918,10 @@ export interface DeploymentResponse { isCompleted: boolean; } +export interface WorkspaceDeploymentRequest { + projectScopes: ProjectScopeMapping[]; + rootDirectory: string; +} // 2201.12.3 -> New Project Component Artifacts Tree @@ -2008,6 +2061,7 @@ export interface BIInterface extends BaseLangClientInterface { getDesignModel: (params: BIDesignModelRequest) => Promise; getType: (params: GetTypeRequest) => Promise; getTypes: (params: GetTypesRequest) => Promise; + getSimpleTypeOfExpression: (params: GetSimpleTypeOfExpressionRequest) => Promise; updateType: (params: UpdateTypeRequest) => Promise; updateImports: (params: UpdateImportsRequest) => Promise; addFunction: (params: AddFunctionRequest) => Promise; @@ -2050,5 +2104,6 @@ export interface ExtendedLangClientInterface extends BIInterface { getDidOpenParams(): DidOpenParams; getProjectArtifacts(params: ProjectArtifactsRequest): Promise; getProjectInfo(params: ProjectInfoRequest): Promise; + getSimpleTypeOfExpression(params: GetSimpleTypeOfExpressionRequest): Promise; openConfigToml(params: OpenConfigTomlRequest): Promise; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/index.ts index cafce784a40..b46c7372b21 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/index.ts @@ -16,16 +16,17 @@ * under the License. */ -import { ChatReqMessage, ChatRespMessage, TraceInput, TraceStatus, ChatHistoryResponse, AgentStatusResponse, ClearChatResponse } from "./interfaces"; +import { ChatReqMessage, ChatRespMessage, TraceInput, TraceStatus, ChatHistoryResponse, AgentStatusResponse, ClearChatResponse, ExecutionStep, SessionInput } from "./interfaces"; export interface AgentChatAPI { getChatMessage: (params: ChatReqMessage) => Promise; abortChatRequest: () => void; getTracingStatus: () => Promise; showTraceView: (params: TraceInput) => Promise; + showSessionOverview: (params: SessionInput) => Promise; getChatHistory: () => Promise; clearChatHistory: () => Promise; getAgentStatus: () => Promise; } -export type { ChatReqMessage, ChatRespMessage, TraceInput, TraceStatus, ChatHistoryResponse, AgentStatusResponse, ClearChatResponse }; +export type { ChatReqMessage, ChatRespMessage, TraceInput, TraceStatus, ChatHistoryResponse, AgentStatusResponse, ClearChatResponse, ExecutionStep, SessionInput }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/interfaces.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/interfaces.ts index c6880ffae53..ca6143f8fda 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/interfaces.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/interfaces.ts @@ -22,6 +22,19 @@ export interface ChatReqMessage { export interface ChatRespMessage { message: string; + traceId?: string; + executionSteps?: ExecutionStep[]; +} + +export interface ExecutionStep { + spanId: string; + operationType: 'invoke' | 'chat' | 'tool' | 'other'; + name: string; + fullName: string; + duration: number; + startTime?: string; + endTime?: string; + hasError?: boolean; } export interface TraceStatus { @@ -29,7 +42,10 @@ export interface TraceStatus { } export interface TraceInput { - message: string; + message?: string; + traceId?: string; + focusSpanId?: string; + sessionId?: string; } export interface ChatHistoryMessage { @@ -37,6 +53,7 @@ export interface ChatHistoryMessage { text: string; isUser: boolean; traceId?: string; + executionSteps?: ExecutionStep[]; } export interface ChatHistoryResponse { @@ -51,3 +68,7 @@ export interface AgentStatusResponse { export interface ClearChatResponse { newSessionId: string; } + +export interface SessionInput { + sessionId?: string; +} diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/rpc-type.ts index 932beb1c1a3..b3f92098658 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/rpc-type.ts @@ -17,7 +17,7 @@ * * THIS FILE INCLUDES AUTO GENERATED CODE */ -import { ChatReqMessage, ChatRespMessage, TraceInput, TraceStatus, ChatHistoryResponse, AgentStatusResponse, ClearChatResponse } from "./interfaces"; +import { ChatReqMessage, ChatRespMessage, TraceInput, TraceStatus, ChatHistoryResponse, AgentStatusResponse, ClearChatResponse, SessionInput } from "./interfaces"; import { RequestType, NotificationType } from "vscode-messenger-common"; const _preFix = "agent-chat"; @@ -25,6 +25,7 @@ export const getChatMessage: RequestType = { me export const abortChatRequest: NotificationType = { method: `${_preFix}/abortChatRequest` }; export const getTracingStatus: RequestType = { method: `${_preFix}/getTracingStatus` }; export const showTraceView: NotificationType = { method: `${_preFix}/showTraceView` }; +export const showSessionOverview: NotificationType = { method: `${_preFix}/showSessionOverview` }; export const getChatHistory: RequestType = { method: `${_preFix}/getChatHistory` }; export const clearChatHistory: RequestType = { method: `${_preFix}/clearChatHistory` }; export const getAgentStatus: RequestType = { method: `${_preFix}/getAgentStatus` }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/index.ts index 3235186fc43..463994f9215 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/index.ts @@ -39,9 +39,12 @@ import { TaskDeclineRequest, ConnectorSpecRequest, ConnectorSpecCancelRequest, + ConfigurationProvideRequest, + ConfigurationCancelRequest, UIChatMessage, CheckpointInfo, AbortAIGenerationRequest, + UsageResponse, } from "./interfaces"; export interface AIPanelAPI { @@ -49,6 +52,7 @@ export interface AIPanelAPI { // General Functions // ================================== getLoginMethod: () => Promise; + isPlatformExtensionAvailable: () => Promise; getDefaultPrompt: () => Promise; //starting args getAIMachineSnapshot: () => Promise; //login state machine clearInitialPrompt: () => void; //starting args @@ -77,7 +81,6 @@ export interface AIPanelAPI { addFilesToProject: (params: AddFilesToProjectRequest) => Promise; isUserAuthenticated: () => Promise; openAIPanel: (params: AIPanelPrompt) => Promise; - isPlanModeFeatureEnabled: () => Promise; // AI schema related functions getSemanticDiff: (params: SemanticDiffRequest) => Promise; getAffectedPackages: () => Promise; @@ -93,6 +96,8 @@ export interface AIPanelAPI { declineTask: (params: TaskDeclineRequest) => Promise; provideConnectorSpec: (params: ConnectorSpecRequest) => Promise; cancelConnectorSpec: (params: ConnectorSpecCancelRequest) => Promise; + provideConfiguration: (params: ConfigurationProvideRequest) => Promise; + cancelConfiguration: (params: ConfigurationCancelRequest) => Promise; // ================================== // Chat State Management // ================================== @@ -102,4 +107,5 @@ export interface AIPanelAPI { clearChat: () => Promise; updateChatMessage: (params: UpdateChatMessageRequest) => Promise; getActiveTempDir: () => Promise; + getUsage: () => Promise; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/interfaces.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/interfaces.ts index 85f647e0fce..a8b9b1971f1 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/interfaces.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/interfaces.ts @@ -28,7 +28,7 @@ import { ComponentInfo, DataMapperMetadata, Diagnostics, DMModel, ImportStatemen // ================================== export type AIPanelPrompt = | { type: 'command-template'; command: Command; templateId: TemplateId; text?: string; params?: Record; metadata?: Record } - | { type: 'text'; text: string; planMode: boolean; codeContext?: CodeContext } + | { type: 'text'; text: string; planMode: boolean; codeContext?: CodeContext; autoSubmit?: boolean } | undefined; export interface AIMachineSnapshot { @@ -306,7 +306,7 @@ export interface GenerateAgentCodeRequest { codeContext?: CodeContext; } -export type LibraryMode = "CORE" | "HEALTHCARE"; +export type LibraryMode = "CORE" | "HEALTHCARE" | "ALL"; export interface CopilotAllLibrariesRequest { mode: LibraryMode; @@ -321,13 +321,20 @@ export interface CopilotCompactLibrariesResponse { export interface CopilotFilterLibrariesRequest { libNames: string[]; - mode: LibraryMode; } export interface CopilotFilterLibrariesResponse { libraries: any[]; } +export interface CopilotSearchLibrariesBySearchRequest { + keywords: string[]; +} + +export interface CopilotSearchLibrariesBySearchResponse { + libraries: MinifiedLibrary[]; +} + // ================================== // Doc Generation Related Interfaces // ================================== @@ -377,8 +384,9 @@ export interface SemanticDiffRequest { // Numeric enum values from the API export enum ChangeTypeEnum { ADDITION = 0, - MODIFICATION = 1, - DELETION = 2 + DELETION = 1, + MODIFICATION = 2, + } export type ChangeType = "ADDITION" | "MODIFICATION" | "DELETION"; @@ -429,6 +437,16 @@ export interface ConnectorSpecCancelRequest { comment?: string; } +export interface ConfigurationProvideRequest { + requestId: string; + configValues: Record; +} + +export interface ConfigurationCancelRequest { + requestId: string; + comment?: string; +} + export type ErrorCode = { code: number; message: string; @@ -468,3 +486,8 @@ export interface AbortAIGenerationRequest { /** Thread identifier (defaults to 'default') */ threadId?: string; } + +export interface UsageResponse { + remainingUsagePercentage: number; + resetsIn: number; // in seconds +} diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/rpc-type.ts index 6742364ca36..5c38c36835a 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/rpc-type.ts @@ -41,14 +41,18 @@ import { TaskDeclineRequest, ConnectorSpecRequest, ConnectorSpecCancelRequest, + ConfigurationProvideRequest, + ConfigurationCancelRequest, UIChatMessage, CheckpointInfo, AbortAIGenerationRequest, + UsageResponse, } from "./interfaces"; import { RequestType, NotificationType } from "vscode-messenger-common"; const _preFix = "ai-panel"; export const getLoginMethod: RequestType = { method: `${_preFix}/getLoginMethod` }; +export const isPlatformExtensionAvailable: RequestType = { method: `${_preFix}/isPlatformExtensionAvailable` }; export const getDefaultPrompt: RequestType = { method: `${_preFix}/getDefaultPrompt` }; export const getAIMachineSnapshot: RequestType = { method: `${_preFix}/getAIMachineSnapshot` }; export const clearInitialPrompt: NotificationType = { method: `${_preFix}/clearInitialPrompt` }; @@ -73,9 +77,8 @@ export const getGeneratedDocumentation: RequestType export const addFilesToProject: RequestType = { method: `${_preFix}/addFilesToProject` }; export const isUserAuthenticated: RequestType = { method: `${_preFix}/isUserAuthenticated` }; export const openAIPanel: RequestType = { method: `${_preFix}/openAIPanel` }; -export const isPlanModeFeatureEnabled: RequestType = { method: `${_preFix}/isPlanModeFeatureEnabled` }; export const getSemanticDiff: RequestType = { method: `${_preFix}/getSemanticDiff` }; -export const getAffectedPackages: RequestType = { method: `${_preFix}/getAffectedPackages` }; +export const getAffectedPackages: NotificationType = { method: `${_preFix}/getAffectedPackages` }; export const isWorkspaceProject: RequestType = { method: `${_preFix}/isWorkspaceProject` }; export const acceptChanges: RequestType = { method: `${_preFix}/acceptChanges` }; export const declineChanges: RequestType = { method: `${_preFix}/declineChanges` }; @@ -85,9 +88,12 @@ export const approveTask: RequestType = { method: `${_ export const declineTask: RequestType = { method: `${_preFix}/declineTask` }; export const provideConnectorSpec: RequestType = { method: `${_preFix}/provideConnectorSpec` }; export const cancelConnectorSpec: RequestType = { method: `${_preFix}/cancelConnectorSpec` }; +export const provideConfiguration: RequestType = { method: `${_preFix}/provideConfiguration` }; +export const cancelConfiguration: RequestType = { method: `${_preFix}/cancelConfiguration` }; export const getChatMessages: NotificationType = { method: `${_preFix}/getChatMessages` }; export const getCheckpoints: NotificationType = { method: `${_preFix}/getCheckpoints` }; export const restoreCheckpoint: RequestType = { method: `${_preFix}/restoreCheckpoint` }; export const clearChat: RequestType = { method: `${_preFix}/clearChat` }; export const updateChatMessage: RequestType = { method: `${_preFix}/updateChatMessage` }; export const getActiveTempDir: RequestType = { method: `${_preFix}/getActiveTempDir` }; +export const getUsage: RequestType = { method: `${_preFix}/getUsage` }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/index.ts index 117e6ef986f..3a8fe21c895 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/index.ts @@ -73,6 +73,7 @@ import { UpdateTypesRequest, UpdateTypesResponse, DeploymentRequest, + WorkspaceDeploymentRequest, DeploymentResponse, OpenAPIClientGenerationRequest, OpenAPIGeneratedModulesRequest, @@ -97,7 +98,9 @@ import { BISearchNodesRequest, BISearchNodesResponse, BIDesignModelRequest, - BIFlowModelRequest + BIFlowModelRequest, + GetSimpleTypeOfExpressionRequest, + GetSimpleTypeOfExpressionResponse } from "../../interfaces/extended-lang-client"; import { ProjectRequest, @@ -118,6 +121,7 @@ import { RecordsInWorkspaceMentions, BuildMode, DevantMetadata, + WorkspaceDevantMetadata, GeneratedClientSaveResponse, AddProjectToWorkspaceRequest, DeleteProjectRequest, @@ -132,6 +136,7 @@ export interface BIDiagramAPI { deleteFlowNode: (params: BISourceCodeRequest) => Promise; deleteByComponentInfo: (params: BIDeleteByComponentInfoRequest) => Promise; getAvailableNodes: (params: BIAvailableNodesRequest) => Promise; + getAvailableAgents: (params: BIAvailableNodesRequest) => Promise; getAvailableModelProviders: (params: BIAvailableNodesRequest) => Promise; getAvailableVectorStores: (params: BIAvailableNodesRequest) => Promise; getAvailableEmbeddingProviders: (params: BIAvailableNodesRequest) => Promise; @@ -162,6 +167,7 @@ export interface BIDiagramAPI { openReadme: (params: OpenReadmeRequest) => void; renameIdentifier: (params: RenameIdentifierRequest) => Promise; deployProject: (params: DeploymentRequest) => Promise; + deployWorkspace: (params: WorkspaceDeploymentRequest) => Promise; openAIChat: (params: AIChatRequest) => void; getSignatureHelp: (params: SignatureHelpRequest) => Promise; buildProject: (mode: BuildMode) => void; @@ -177,6 +183,7 @@ export interface BIDiagramAPI { getDesignModel: (params: BIDesignModelRequest) => Promise; getTypes: (params: GetTypesRequest) => Promise; getType: (params: GetTypeRequest) => Promise; + getSimpleTypeOfExpression: (params: GetSimpleTypeOfExpressionRequest) => Promise; updateType: (params: UpdateTypeRequest) => Promise; updateTypes: (params: UpdateTypesRequest) => Promise; deleteType: (params: DeleteTypeRequest) => Promise; @@ -200,6 +207,7 @@ export interface BIDiagramAPI { getRecordNames: () => Promise; getFunctionNames: () => Promise; getDevantMetadata: () => Promise; + getWorkspaceDevantMetadata: () => Promise; generateOpenApiClient: (params: OpenAPIClientGenerationRequest) => Promise; getOpenApiGeneratedModules: (params: OpenAPIGeneratedModulesRequest) => Promise; deleteOpenApiGeneratedModules: (params: OpenAPIClientDeleteRequest) => Promise; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/interfaces.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/interfaces.ts index 69509acac1b..0c18cf9a9bf 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/interfaces.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/interfaces.ts @@ -31,6 +31,7 @@ export interface ProjectRequest { workspaceName?: string; orgName?: string; version?: string; + isLibrary?: boolean; } export interface AddProjectToWorkspaceRequest { @@ -41,6 +42,7 @@ export interface AddProjectToWorkspaceRequest { workspaceName?: string; orgName?: string; version?: string; + isLibrary?: boolean; } export interface WorkspacesResponse { @@ -190,6 +192,20 @@ export interface DevantMetadata { hasLocalChanges?: boolean; } +export interface WorkspaceDevantMetadata { + isLoggedIn?: boolean; + hasAnyComponent?: boolean; + hasLocalChanges?: boolean; + projectsMetadata?: ProjectDevantMetadata[]; +} + +export interface ProjectDevantMetadata { + projectPath: string; + projectName?: string; + hasComponent?: boolean; + hasLocalChanges?: boolean; +} + export interface GeneratedClientSaveResponse { errorMessage?: string; } @@ -202,6 +218,7 @@ export interface ValidateProjectFormRequest { projectPath: string; projectName: string; createDirectory: boolean; + createAsWorkspace?: boolean; } export interface ValidateProjectFormResponse { diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/rpc-type.ts index 18b39538b8b..7b2e115cb0e 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/rpc-type.ts @@ -74,6 +74,7 @@ import { UpdateTypesRequest, UpdateTypesResponse, DeploymentRequest, + WorkspaceDeploymentRequest, DeploymentResponse, OpenAPIClientGenerationRequest, OpenAPIGeneratedModulesRequest, @@ -99,7 +100,9 @@ import { BISearchNodesResponse, BIDesignModelRequest, BIFlowModelRequest, - ExpressionTokensRequest + ExpressionTokensRequest, + GetSimpleTypeOfExpressionRequest, + GetSimpleTypeOfExpressionResponse } from "../../interfaces/extended-lang-client"; import { ProjectRequest, @@ -120,6 +123,7 @@ import { RecordsInWorkspaceMentions, BuildMode, DevantMetadata, + WorkspaceDevantMetadata, GeneratedClientSaveResponse, AddProjectToWorkspaceRequest, DeleteProjectRequest, @@ -135,6 +139,7 @@ export const getSourceCode: RequestType = { method: `${_preFix}/deleteFlowNode` }; export const deleteByComponentInfo: RequestType = { method: `${_preFix}/deleteByComponentInfo` }; export const getAvailableNodes: RequestType = { method: `${_preFix}/getAvailableNodes` }; +export const getAvailableAgents: RequestType = { method: `${_preFix}/getAvailableAgents` }; export const getAvailableModelProviders: RequestType = { method: `${_preFix}/getAvailableModelProviders` }; export const getAvailableVectorStores: RequestType = { method: `${_preFix}/getAvailableVectorStores` }; export const getAvailableEmbeddingProviders: RequestType = { method: `${_preFix}/getAvailableEmbeddingProviders` }; @@ -165,6 +170,7 @@ export const getReadmeContent: RequestType = { method: `${_preFix}/openReadme` }; export const renameIdentifier: NotificationType = { method: `${_preFix}/renameIdentifier` }; export const deployProject: RequestType = { method: `${_preFix}/deployProject` }; +export const deployWorkspace: RequestType = { method: `${_preFix}/deployWorkspace` }; export const openAIChat: NotificationType = { method: `${_preFix}/openAIChat` }; export const getSignatureHelp: RequestType = { method: `${_preFix}/getSignatureHelp` }; export const buildProject: NotificationType = { method: `${_preFix}/buildProject` }; @@ -180,6 +186,7 @@ export const formDidClose: RequestType = { method: `${ export const getDesignModel: RequestType = { method: `${_preFix}/getDesignModel` }; export const getTypes: RequestType = { method: `${_preFix}/getTypes` }; export const getType: RequestType = { method: `${_preFix}/getType` }; +export const getSimpleTypeOfExpression: RequestType = { method: `${_preFix}/getSimpleTypeOfExpression` }; export const updateType: RequestType = { method: `${_preFix}/updateType` }; export const updateTypes: RequestType = { method: `${_preFix}/updateTypes` }; export const deleteType: RequestType = { method: `${_preFix}/deleteType` }; @@ -203,6 +210,7 @@ export const searchNodes: RequestType = { method: `${_preFix}/getRecordNames` }; export const getFunctionNames: RequestType = { method: `${_preFix}/getFunctionNames` }; export const getDevantMetadata: RequestType = { method: `${_preFix}/getDevantMetadata` }; +export const getWorkspaceDevantMetadata: RequestType = { method: `${_preFix}/getWorkspaceDevantMetadata` }; export const generateOpenApiClient: RequestType = { method: `${_preFix}/generateOpenApiClient` }; export const getOpenApiGeneratedModules: RequestType = { method: `${_preFix}/getOpenApiGeneratedModules` }; export const deleteOpenApiGeneratedModules: RequestType = { method: `${_preFix}/deleteOpenApiGeneratedModules` }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/common/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/common/index.ts index a98708821c9..4124e8601c8 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/common/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/common/index.ts @@ -16,6 +16,7 @@ * under the License. */ +import { QuickPickItem } from "vscode"; import { BallerinaDiagnosticsRequest, BallerinaDiagnosticsResponse, @@ -33,7 +34,12 @@ import { WorkspaceRootResponse, ShowErrorMessageRequest, WorkspaceTypeResponse, - SampleDownloadRequest + SetWebviewCacheRequestParam, + ShowInfoModalRequest, + SampleDownloadRequest, + ShowQuickPickRequest, + DefaultOrgNameResponse, + PublishToCentralResponse } from "./interfaces"; export interface CommonRPCAPI { @@ -50,7 +56,15 @@ export interface CommonRPCAPI { isNPSupported: () => Promise; getWorkspaceRoot: () => Promise; showErrorMessage: (params: ShowErrorMessageRequest) => void; + showInformationModal: (params: ShowInfoModalRequest) => Promise; + showQuickPick: (params: ShowQuickPickRequest) => Promise; getCurrentProjectTomlValues: () => Promise>; getWorkspaceType: () => Promise; + setWebviewCache: (params: SetWebviewCacheRequestParam) => void; + restoreWebviewCache: (params: IDBValidKey) => unknown; + clearWebviewCache: (params: IDBValidKey) => void; downloadSelectedSampleFromGithub: (params: SampleDownloadRequest) => Promise; + getDefaultOrgName: () => Promise; + publishToCentral: () => Promise; + hasCentralPATConfigured: () => Promise; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/common/interfaces.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/common/interfaces.ts index 26ffcf79e1d..1129944e02d 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/common/interfaces.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/common/interfaces.ts @@ -20,6 +20,7 @@ import { Diagnostic } from "vscode-languageserver-types"; import { Completion } from "../../interfaces/extended-lang-client"; import { NodePosition } from "@wso2/syntax-tree"; +import { QuickPickItem, QuickPickOptions } from "vscode"; export interface TypeResponse { data: Completion[]; @@ -91,6 +92,16 @@ export interface ShowErrorMessageRequest { message: string; } +export interface ShowInfoModalRequest { + message: string; + items?: string[]; +} + +export interface ShowQuickPickRequest { + items: QuickPickItem[]; + options?: QuickPickOptions; +} + export interface TomlWorkspace { packages: string[]; } @@ -100,6 +111,7 @@ export interface TomlPackage { name: string; version: string; title: string; + library?: boolean; } export interface WorkspaceTomlValues { @@ -108,12 +120,38 @@ export interface WorkspaceTomlValues { export interface PackageTomlValues { package: TomlPackage; + tool?: { + openapi?: { + id: string; + targetModule: string; + filePath: string; + }[]; + } +} + +export interface SettingsTomlValues { + central: { + accesstoken: string; + }; } export interface WorkspaceTypeResponse { type: "SINGLE_PROJECT" | "MULTIPLE_PROJECTS" | "BALLERINA_WORKSPACE" | "VSCODE_WORKSPACE" | "UNKNOWN" } +export interface SetWebviewCacheRequestParam { + cacheKey: IDBValidKey; + data: unknown; +} export interface SampleDownloadRequest { zipFileName: string; } + +export interface DefaultOrgNameResponse { + orgName: string; +} + +export interface PublishToCentralResponse { + success: boolean; + message?: string; +} diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/common/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/common/rpc-type.ts index 9b7379b10d7..0e18954e544 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/common/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/common/rpc-type.ts @@ -17,6 +17,7 @@ * * THIS FILE INCLUDES AUTO GENERATED CODE */ +import { QuickPickItem } from "vscode"; import { BallerinaDiagnosticsRequest, BallerinaDiagnosticsResponse, @@ -34,7 +35,11 @@ import { WorkspaceRootResponse, ShowErrorMessageRequest, WorkspaceTypeResponse, - SampleDownloadRequest + SetWebviewCacheRequestParam, + ShowInfoModalRequest, + SampleDownloadRequest, + ShowQuickPickRequest, + PublishToCentralResponse } from "./interfaces"; import { RequestType, NotificationType } from "vscode-messenger-common"; @@ -52,6 +57,14 @@ export const experimentalEnabled: RequestType = { method: `${_pre export const isNPSupported: RequestType = { method: `${_preFix}/isNPSupported` }; export const getWorkspaceRoot: RequestType = { method: `${_preFix}/getWorkspaceRoot` }; export const showErrorMessage: NotificationType = { method: `${_preFix}/showErrorMessage` }; +export const showInformationModal: RequestType = { method: `${_preFix}/showInformationModal` }; +export const showQuickPick: RequestType = { method: `${_preFix}/showQuickPick` }; export const getCurrentProjectTomlValues: RequestType = { method: `${_preFix}/getCurrentProjectTomlValues` }; export const getWorkspaceType: RequestType = { method: `${_preFix}/getWorkspaceType` }; +export const SetWebviewCache: RequestType = { method: `${_preFix}/setWebviewCache` }; +export const RestoreWebviewCache: RequestType = { method: `${_preFix}/restoreWebviewCache` }; +export const ClearWebviewCache: RequestType = { method: `${_preFix}/clearWebviewCache` }; export const downloadSelectedSampleFromGithub: RequestType = { method: `${_preFix}/downloadSelectedSampleFromGithub` }; +export const getDefaultOrgName: RequestType = { method: `${_preFix}/getDefaultOrgName` }; +export const publishToCentral: RequestType = { method: `${_preFix}/publishToCentral` }; +export const hasCentralPATConfigured: RequestType = { method: `${_preFix}/hasCentralPATConfigured` }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/connector-wizard/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/connector-wizard/index.ts index e2ded2bcde2..aaa5146adb1 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/connector-wizard/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/connector-wizard/index.ts @@ -26,7 +26,9 @@ import { PersistClientGenerateResponse, IntrospectDatabaseRequest, WSDLApiClientGenerationRequest, - WSDLApiClientGenerationResponse + WSDLApiClientGenerationResponse, + IntrospectCredentialsRequest, + IntrospectCredentialsResponse } from "./interfaces"; export interface ConnectorWizardAPI { @@ -35,4 +37,5 @@ export interface ConnectorWizardAPI { introspectDatabase: (params: IntrospectDatabaseRequest) => Promise; persistClientGenerate: (params: PersistClientGenerateRequest) => Promise; generateWSDLApiClient: (params: WSDLApiClientGenerationRequest) => Promise; + introspectCredentials: (params: IntrospectCredentialsRequest) => Promise; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/connector-wizard/interfaces.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/connector-wizard/interfaces.ts index b2a7fce447f..0470ce307b0 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/connector-wizard/interfaces.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/connector-wizard/interfaces.ts @@ -17,7 +17,9 @@ */ import { BallerinaConnectorInfo, BallerinaConnectorsRequest, BallerinaConnector } from "../../interfaces/ballerina"; +import { Metadata } from "../../interfaces/bi"; import { TextEdit } from "../../interfaces/extended-lang-client"; +import { PropertyModel } from "../../interfaces/service"; export interface ConnectorRequest { id?: string @@ -43,38 +45,46 @@ export interface ConnectorsResponse { error?: string; } -export interface IntrospectDatabaseRequest { +export interface IntrospectCredentialsRequest { + connection?: string; projectPath: string; - dbSystem: string; - host: string; - port: number; - database: string; - user: string; - password: string; } -export interface IntrospectDatabaseResponse { - tables?: string[]; - errorMsg?: string; +export interface IntrospectCredentialsResponse { + data: { + metadata: Metadata; + properties: { [key: string]: PropertyModel }; + targetModule?: string; + modelFilePath?: string; + }; } -export interface PersistClientGenerateRequest { +export interface IntrospectDatabaseRequest { projectPath: string; - name: string; - dbSystem: string; - host: string; - port: number; - user: string; - password: string; - database: string; - selectedTables: string[]; - module?: string; + metadata: Metadata; + properties?: { [key: string]: PropertyModel }; + targetModule?: string; + modelFilePath?: string; } -export interface PersistClientGenerateResponse { - source?: PersistSource; +export interface IntrospectDatabaseResponse { + tables?: TableInfo[]; + targetModule?: string; + modelFilePath?: string; errorMsg?: string; - stackTrace?: string; +} +export interface TableInfo { + table: string; + selected: boolean; + existing: boolean; +} +export interface PersistClientGenerateRequest { + projectPath: string; + targetModule?: string; + modelFilePath?: string; + connection?: string; + properties?: { [key: string]: PropertyModel }; + tables: TableInfo[]; } export interface PersistSource { @@ -83,6 +93,11 @@ export interface PersistSource { [key: string]: TextEdit[]; }; } +export interface PersistClientGenerateResponse { + source?: PersistSource; + errorMsg?: string; + stackTrace?: string; +} export interface WSDLApiClientGenerationRequest { projectPath: string; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/connector-wizard/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/connector-wizard/rpc-type.ts index 3c7e971302c..9e8fd87c372 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/connector-wizard/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/connector-wizard/rpc-type.ts @@ -27,7 +27,9 @@ import { PersistClientGenerateResponse, IntrospectDatabaseRequest, WSDLApiClientGenerationRequest, - WSDLApiClientGenerationResponse + WSDLApiClientGenerationResponse, + IntrospectCredentialsRequest, + IntrospectCredentialsResponse } from "./interfaces"; import { RequestType } from "vscode-messenger-common"; @@ -37,3 +39,4 @@ export const getConnectors: RequestType = export const introspectDatabase: RequestType = { method: `${_preFix}/introspectDatabase` }; export const persistClientGenerate: RequestType = { method: `${_preFix}/persistClientGenerate` }; export const generateWSDLApiClient: RequestType = { method: `${_preFix}/generateWSDLApiClient` }; +export const introspectCredentials: RequestType = { method: `${_preFix}/introspectCredentials` }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/index.ts index 66b208400b1..4e6ab5cf1fa 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/index.ts @@ -47,7 +47,8 @@ import { ClausePositionRequest, ClausePositionResponse, ConvertExpressionRequest, - ConvertExpressionResponse + ConvertExpressionResponse, + CreateConvertedVariableRequest } from "../../interfaces/extended-lang-client"; export interface DataMapperAPI { @@ -72,5 +73,6 @@ export interface DataMapperAPI { getExpandedDMFromDMModel: (params: DMModelRequest) => Promise; getProcessTypeReference: (params: ProcessTypeReferenceRequest) => Promise; getConvertedExpression: (params: ConvertExpressionRequest) => Promise; + createConvertedVariable: (params: CreateConvertedVariableRequest) => Promise; clearTypeCache: () => Promise; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/rpc-type.ts index 04643f0a2d0..35fae7784f1 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/rpc-type.ts @@ -49,7 +49,8 @@ import { ClausePositionRequest, ClausePositionResponse, ConvertExpressionRequest, - ConvertExpressionResponse + ConvertExpressionResponse, + CreateConvertedVariableRequest } from "../../interfaces/extended-lang-client"; import { RequestType } from "vscode-messenger-common"; @@ -75,4 +76,5 @@ export const getClausePosition: RequestType = { method: `${_preFix}/getExpandedDMFromDMModel` }; export const getProcessTypeReference: RequestType = { method: `${_preFix}/getProcessTypeReference` }; export const getConvertedExpression: RequestType = { method: `${_preFix}/getConvertedExpression` }; +export const createConvertedVariable: RequestType = { method: `${_preFix}/createConvertedVariable` }; export const clearTypeCache: RequestType = { method: `${_preFix}/clearTypeCache` }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/platform-ext/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/platform-ext/index.ts new file mode 100644 index 00000000000..4c84147a36b --- /dev/null +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/platform-ext/index.ts @@ -0,0 +1,58 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { GetMarketplaceListReq,MarketplaceListResp, GetMarketplaceIdlReq, MarketplaceIdlResp, ConnectionListItem, GetConnectionsReq, DeleteLocalConnectionsConfigReq, GetMarketplaceItemReq, MarketplaceItem, GetConnectionItemReq, ConnectionDetailed, CreateLocalConnectionsConfigReq, CreateThirdPartyConnectionReq, CreateComponentConnectionReq, GetComponentsReq, ComponentKind, GetDatabaseServerReq, DatabaseAdminCredential, DatabaseServer, MarketplaceDatabaseListResp, DatabaseCredential, GetProjectEnvsReq, Environment, CreateDatabaseConnectionReq, GetDatabaseItemReq, ResolveConnectionSecretsReq, ResolveConnectionSecretsResp } from "@wso2/wso2-platform-core" +import { DeleteDevantTempConfigReq, GenerateCustomConnectorFromOASReq, GenerateCustomConnectorFromOASResp, AddDevantTempConfigReq, AddDevantTempConfigResp, ReplaceDevantTempConfigValuesReq, RegisterDevantMarketplaceServiceReq, InitializeDevantOASConnectionReq, InitializeDevantOASConnectionResp } from "./interfaces"; +export * from "./rpc-type" +export * from "./utils" + +// TODO: check if we can directly use the wso2-extension api interface +export interface PlatformExtAPI { + // BI ext handlers + generateCustomConnectorFromOAS: (params: GenerateCustomConnectorFromOASReq) => Promise + initializeDevantOASConnection: (params: InitializeDevantOASConnectionReq) => Promise + addDevantTempConfig: (params: AddDevantTempConfigReq) => Promise + deleteDevantTempConfigs: (params: DeleteDevantTempConfigReq) => Promise + replaceDevantTempConfigValues: (params: ReplaceDevantTempConfigValuesReq) => Promise + setConnectedToDevant: (connected: boolean) => void; + setSelectedComponent: (componentId: string) => void; + setSelectedEnv: (envId: string) => void; + // Platform ext proxies + createThirdPartyConnection: (params: CreateThirdPartyConnectionReq) => Promise + createInternalConnection: (params: CreateComponentConnectionReq) => Promise + registerDevantMarketplaceService: (params: RegisterDevantMarketplaceServiceReq) => Promise + getMarketplaceItems: (params: GetMarketplaceListReq) => Promise; + getMarketplaceDatabases: (params: { orgId: string }) => Promise; + getMarketplaceDatabaseItem: (params: GetDatabaseItemReq) => Promise; + getDatabaseServer: (params: GetDatabaseServerReq) => Promise; + getDatabaseAdminCredential: (params: GetDatabaseServerReq) => Promise; + getDatabaseCredentials: (params: GetDatabaseServerReq) => Promise; + createDatabaseConnection: (params: CreateDatabaseConnectionReq) => Promise; + getMarketplaceItem: (params: GetMarketplaceItemReq) => Promise; + getMarketplaceIdl: (params: GetMarketplaceIdlReq) => Promise; + getConnections: (params: GetConnectionsReq) => Promise; + getConnection: (params: GetConnectionItemReq) => Promise; + getComponentList: (params: GetComponentsReq) => Promise; + deleteLocalConnectionsConfig: (params: DeleteLocalConnectionsConfigReq) => void; + getDevantConsoleUrl: () => Promise; + refreshConnectionList: () => Promise; + getProjectEnvs: (params: GetProjectEnvsReq) => Promise; + resolveConnectionSecrets: (params: ResolveConnectionSecretsReq) => Promise; + deployIntegrationInDevant: () => void; + createConnectionConfig: (params: CreateLocalConnectionsConfigReq) => Promise; +} diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/platform-ext/interfaces.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/platform-ext/interfaces.ts new file mode 100644 index 00000000000..35539c4cdb5 --- /dev/null +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/platform-ext/interfaces.ts @@ -0,0 +1,114 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + ComponentKind, + ConnectionConfigurations, + ConnectionDetailed, + ConnectionListItem, + ContextItemEnriched, + Environment, + MarketplaceIdlTypes, + MarketplaceItem, + MarketplaceServiceTypes, + UserInfo, +} from "@wso2/wso2-platform-core"; +import { AvailableNode } from "../../interfaces/bi"; +import { ModuleVarDecl } from "@wso2/syntax-tree/lib/syntax-tree-interfaces"; + +export interface GenerateCustomConnectorFromOASReq { + connectionName: string; + marketplaceItem: MarketplaceItem; + securityType?: "" | "oauth" | "apikey"; +} + +export interface GenerateCustomConnectorFromOASResp { + connectionNode?: AvailableNode; +} + +export interface InitializeDevantOASConnectionReq { + name: string; + visibility: string; + securityType: "" | "oauth" | "apikey"; + marketplaceItem: MarketplaceItem; + configurations: ConnectionConfigurations; + devantConfigs: DevantTempConfig[]; +} + +export interface InitializeDevantOASConnectionResp { + connectionName?: string; +} + +export interface RegisterDevantMarketplaceServiceReq { + name: string; + idlType: MarketplaceIdlTypes; + serviceType: MarketplaceServiceTypes; + idlFilePath?: string; + + configs: DevantTempConfig[]; +} + +export interface AddDevantTempConfigReq { + name: string; + newLine?: boolean; +} + +export interface AddDevantTempConfigResp { + configNode: ModuleVarDecl; +} + +export interface DeleteDevantTempConfigReq { + nodes: ModuleVarDecl[]; +} + +export interface ReplaceDevantTempConfigValuesReq { + createdConnection: ConnectionDetailed; + configs: DevantTempConfig[]; +} + +export interface PlatformExtConnectionState { + loading?: boolean; + list?: ConnectionListItem[]; + connectedToDevant?: boolean; +} + +export interface PlatformExtState { + isExtInstalled?: boolean; + isLoggedIn: boolean; + userInfo: UserInfo | null; + hasPossibleComponent?: boolean; + hasLocalChanges?: boolean; + components: ComponentKind[]; + selectedComponent?: ComponentKind; + selectedContext?: ContextItemEnriched; + envs?: Environment[]; + selectedEnv?: Environment; + devantConns?: PlatformExtConnectionState; +} + +export interface DevantTempConfig { + /** The id matching the key in devant side */ + id: string; + /** The unique identifier in ballerina code */ + name: string; + value: string; + isSecret: boolean; + node?: ModuleVarDecl; + description?: string; + type?: "string" | "int"; +} diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/platform-ext/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/platform-ext/rpc-type.ts new file mode 100644 index 00000000000..c1ed8573ece --- /dev/null +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/platform-ext/rpc-type.ts @@ -0,0 +1,60 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentKind, ConnectionDetailed, ConnectionListItem, CreateComponentConnectionReq, CreateDatabaseConnectionReq, CreateLocalConnectionsConfigReq, CreateThirdPartyConnectionReq, DatabaseCredential, DeleteLocalConnectionsConfigReq, Environment, GetComponentsReq, GetConnectionItemReq, GetConnectionsReq, GetDatabaseItemReq, GetDatabaseServerReq, GetMarketplaceIdlReq, GetMarketplaceItemReq, GetMarketplaceListReq,GetProjectEnvsReq,MarketplaceDatabaseListResp,MarketplaceIdlResp,MarketplaceItem,MarketplaceListResp, ResolveConnectionSecretsReq, ResolveConnectionSecretsResp } from "@wso2/wso2-platform-core" +import { NotificationType, RequestType } from "vscode-messenger-common"; +import { AddDevantTempConfigReq, AddDevantTempConfigResp, DeleteDevantTempConfigReq, GenerateCustomConnectorFromOASReq, GenerateCustomConnectorFromOASResp, InitializeDevantOASConnectionReq, InitializeDevantOASConnectionResp, PlatformExtState, RegisterDevantMarketplaceServiceReq, ReplaceDevantTempConfigValuesReq } from "./interfaces"; + +const _preFix = "platform-ext"; +// BI ext handlers +export const generateCustomConnectorFromOAS: RequestType = { method: `${_preFix}/generateCustomConnectorFromOAS` }; +export const initializeDevantOASConnection: RequestType = { method: `${_preFix}/initializeDevantOASConnection` }; +export const addDevantTempConfig: RequestType = { method: `${_preFix}/addDevantTempConfig` }; +export const deleteDevantTempConfigs: RequestType = { method: `${_preFix}/deleteDevantTempConfigs` }; +export const replaceDevantTempConfigValues: RequestType = { method: `${_preFix}/replaceDevantTempConfigValues` }; +export const getPlatformStore: RequestType = { method: `${_preFix}/getPlatformStore` }; +export const setConnectedToDevant: RequestType = { method: `${_preFix}/setConnectedToDevant` }; +export const setSelectedComponent: RequestType = { method: `${_preFix}/setSelectedComponent` }; +export const setSelectedEnv: RequestType = { method: `${_preFix}/setSelectedEnv` }; + +// Platform ext proxies +export const registerDevantMarketplaceService: RequestType = { method: `${_preFix}/registerDevantMarketplaceService` }; +export const createThirdPartyConnection: RequestType = { method: `${_preFix}/createThirdPartyConnection` }; +export const createInternalConnection: RequestType = { method: `${_preFix}/createInternalConnection` }; +export const getMarketplaceItems: RequestType = { method: `${_preFix}/getMarketplaceItems` }; +export const getMarketplaceDatabases: RequestType<{ orgId: string }, MarketplaceDatabaseListResp> = { method: `${_preFix}/getMarketplaceDatabases` }; +export const getMarketplaceDatabaseItem: RequestType = { method: `${_preFix}/getMarketplaceDatabaseItem` }; +export const getDatabaseServer: RequestType = { method: `${_preFix}/getDatabaseServer` }; +export const getDatabaseAdminCredential: RequestType = { method: `${_preFix}/getDatabaseAdminCredential` }; +export const getDatabaseCredentials: RequestType = { method: `${_preFix}/getDatabaseCredentials` }; +export const createDatabaseConnection: RequestType = { method: `${_preFix}/createDatabaseConnection` }; +export const getMarketplaceItem: RequestType = { method: `${_preFix}/getMarketplaceItem` }; +export const getMarketplaceIdl: RequestType = { method: `${_preFix}/getMarketplaceIdl` }; +export const getConnections: RequestType = { method: `${_preFix}/getConnections` }; +export const getConnection: RequestType = { method: `${_preFix}/getConnection` }; +export const getComponentList: RequestType = { method: `${_preFix}/getComponentList` }; +export const deleteLocalConnectionsConfig: RequestType = { method: `${_preFix}/deleteLocalConnectionsConfig` }; +export const getDevantConsoleUrl: RequestType = { method: `${_preFix}/getDevantConsoleUrl` }; +export const refreshConnectionList: RequestType = { method: `${_preFix}/refreshConnectionList` }; +export const getProjectEnvs: RequestType = { method: `${_preFix}/getProjectEnvs` }; +export const deployIntegrationInDevant: RequestType = { method: `${_preFix}/deployIntegrationInDevant` }; +export const createConnectionConfig: RequestType = { method: `${_preFix}/createConnectionConfig` }; +export const resolveConnectionSecrets: RequestType = { method: `${_preFix}/resolveConnectionSecrets` }; + +// Notifications +export const onPlatformExtStoreStateChange: NotificationType = { method: `${_preFix}/onPlatformExtStoreStateChange` }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/platform-ext/utils.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/platform-ext/utils.ts new file mode 100644 index 00000000000..a8f41e3275d --- /dev/null +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/platform-ext/utils.ts @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { DevantScopes } from "@wso2/wso2-platform-core"; + +const INTEGRATION_API_MODULES = ["http", "graphql", "tcp"]; +const EVENT_INTEGRATION_MODULES = ["kafka", "rabbitmq", "salesforce", "trigger.github", "mqtt", "asb"]; +const FILE_INTEGRATION_MODULES = ["ftp", "file"]; +const AI_AGENT_MODULE = "ai"; + +export function findDevantScopeByModule(moduleName: string): DevantScopes | undefined { + if (AI_AGENT_MODULE === moduleName) { + return DevantScopes.AI_AGENT; + } else if (INTEGRATION_API_MODULES.includes(moduleName)) { + return DevantScopes.INTEGRATION_AS_API; + } else if (EVENT_INTEGRATION_MODULES.includes(moduleName)) { + return DevantScopes.EVENT_INTEGRATION; + } else if (FILE_INTEGRATION_MODULES.includes(moduleName)) { + return DevantScopes.FILE_INTEGRATION; + } +} \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/test-manager/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/test-manager/index.ts index 041654b7922..3d1363d4d94 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/test-manager/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/test-manager/index.ts @@ -18,9 +18,11 @@ import { GetTestFunctionRequest, GetTestFunctionResponse, AddOrUpdateTestFunctionRequest } from "../../interfaces/extended-lang-client"; import { SourceUpdateResponse } from "../service-designer/interfaces"; +import { GetEvalsetsRequest, GetEvalsetsResponse } from "./rpc-type"; -export interface TestManagerServiceAPI { +export interface TestManagerServiceAPI { updateTestFunction: (params: AddOrUpdateTestFunctionRequest) => Promise; addTestFunction: (params: AddOrUpdateTestFunctionRequest) => Promise; getTestFunction: (params: GetTestFunctionRequest) => Promise; + getEvalsets: (params: GetEvalsetsRequest) => Promise; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/test-manager/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/test-manager/rpc-type.ts index 2b2b93031b3..606be83b1c2 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/test-manager/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/test-manager/rpc-type.ts @@ -20,9 +20,28 @@ import { RequestType } from "vscode-messenger-common"; import { SourceUpdateResponse } from "../service-designer/interfaces"; const _preFix = "test-manager"; -export const getTestFunction: RequestType = +export const getTestFunction: RequestType = { method: `${_preFix}/getTestFunction` }; -export const addTestFunction: RequestType = +export const addTestFunction: RequestType = { method: `${_preFix}/addTestFunction` }; -export const updateTestFunction: RequestType = +export const updateTestFunction: RequestType = { method: `${_preFix}/updateTestFunction` }; + +export interface EvalsetItem { + id: string; + name: string; + filePath: string; + threadCount: number; + description?: string; +} + +export interface GetEvalsetsRequest { + projectPath?: string; +} + +export interface GetEvalsetsResponse { + evalsets: EvalsetItem[]; +} + +export const getEvalsets: RequestType = +{ method: `${_preFix}/getEvalsets` }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/index.ts index cbfefe9d229..9ae748d13e5 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/index.ts @@ -19,13 +19,13 @@ import { HistoryEntry } from "../../history"; import { ProjectStructureArtifactResponse, UpdatedArtifactsResponse } from "../../interfaces/bi"; import { ColorThemeKind } from "../../state-machine-types"; -import { AddToUndoStackRequest, JoinProjectPathRequest, JoinProjectPathResponse, OpenViewRequest, UndoRedoStateResponse } from "./interfaces"; +import { AddToUndoStackRequest, HandleApprovalPopupCloseRequest, JoinProjectPathRequest, JoinProjectPathResponse, OpenViewRequest, ReopenApprovalViewRequest, UndoRedoStateResponse, SaveEvalThreadRequest, SaveEvalThreadResponse, GoBackRequest } from "./interfaces"; export interface VisualizerAPI { openView: (params: OpenViewRequest) => void; getHistory: () => Promise; addToHistory: (entry: HistoryEntry) => void; - goBack: () => void; + goBack: (params: GoBackRequest) => void; goHome: () => void; goSelected: (index: number) => void; undo: (count: number) => Promise; @@ -37,4 +37,7 @@ export interface VisualizerAPI { getThemeKind: () => Promise; updateCurrentArtifactLocation: (params: UpdatedArtifactsResponse) => Promise; reviewAccepted: () => void; + handleApprovalPopupClose: (params: HandleApprovalPopupCloseRequest) => void; + reopenApprovalView: (params: ReopenApprovalViewRequest) => void; + saveEvalThread: (params: SaveEvalThreadRequest) => Promise; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/interfaces.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/interfaces.ts index dd0301a1fec..d1c22cfe2c6 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/interfaces.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/interfaces.ts @@ -17,7 +17,7 @@ */ import { CodeData } from "../../interfaces/bi"; -import { EVENT_TYPE, PopupVisualizerLocation, VisualizerLocation } from "../../state-machine-types"; +import { EVENT_TYPE, EvalSet, PopupVisualizerLocation, VisualizerLocation } from "../../state-machine-types"; export interface UpdateUndoRedoMangerRequest { filePath: string; @@ -53,9 +53,32 @@ export interface AddToUndoStackRequest { export interface JoinProjectPathRequest { segments: string | string[]; codeData?: CodeData; + checkExists?: boolean; } export interface JoinProjectPathResponse { filePath: string; projectPath: string; + exists?: boolean; +} + +export interface HandleApprovalPopupCloseRequest { + requestId: string; +} + +export interface ReopenApprovalViewRequest { + requestId: string; +} + +export interface SaveEvalThreadRequest { + filePath: string; + updatedEvalSet: EvalSet; +} + +export interface SaveEvalThreadResponse { + success: boolean; + error?: string; +} +export interface GoBackRequest { + identifier?: string; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/rpc-type.ts index ba0722f647e..696f97d3f5a 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/rpc-type.ts @@ -19,8 +19,8 @@ */ import { HistoryEntry } from "../../history"; import { ProjectStructureArtifactResponse, UpdatedArtifactsResponse } from "../../interfaces/bi"; -import { ColorThemeKind } from "../../state-machine-types"; -import { AddToUndoStackRequest, JoinProjectPathRequest, JoinProjectPathResponse, OpenViewRequest, UndoRedoStateResponse } from "./interfaces"; +import { ColorThemeKind, EvalSet } from "../../state-machine-types"; +import { AddToUndoStackRequest, HandleApprovalPopupCloseRequest, JoinProjectPathRequest, JoinProjectPathResponse, OpenViewRequest, ReopenApprovalViewRequest, UndoRedoStateResponse, SaveEvalThreadRequest, SaveEvalThreadResponse } from "./interfaces"; import { NotificationType, RequestType } from "vscode-messenger-common"; const _preFix = "visualizer"; @@ -40,3 +40,6 @@ export const getThemeKind: RequestType = { method: `${_pre export const updateCurrentArtifactLocation: RequestType = { method: `${_preFix}/updateCurrentArtifactLocation` }; export const reviewAccepted: NotificationType = { method: `${_preFix}/reviewAccepted` }; export const refreshReviewMode: NotificationType = { method: `${_preFix}/refreshReviewMode` }; +export const handleApprovalPopupClose: NotificationType = { method: `${_preFix}/handleApprovalPopupClose` }; +export const reopenApprovalView: NotificationType = { method: `${_preFix}/reopenApprovalView` }; +export const saveEvalThread: RequestType = { method: `${_preFix}/saveEvalThread` }; diff --git a/workspaces/ballerina/ballerina-core/src/state-machine-types.ts b/workspaces/ballerina/ballerina-core/src/state-machine-types.ts index 465de5ecf14..b99f92f019c 100644 --- a/workspaces/ballerina/ballerina-core/src/state-machine-types.ts +++ b/workspaces/ballerina/ballerina-core/src/state-machine-types.ts @@ -57,6 +57,7 @@ export enum SCOPE { EVENT_INTEGRATION = "event-integration", FILE_INTEGRATION = "file-integration", AI_AGENT = "ai-agent", + LIBRARY = "library", ANY = "any" } @@ -90,6 +91,7 @@ export enum MACHINE_VIEW { BIFunctionForm = "Add Function SKIP", BINPFunctionForm = "Add Natural Function SKIP", BITestFunctionForm = "Add Test Function SKIP", + BIAIEvaluationForm = "AI Evaluation SKIP", BIServiceWizard = "Service Wizard SKIP", BIServiceConfigView = "Service Config View", BIListenerConfigView = "Listener Config View", @@ -101,7 +103,9 @@ export enum MACHINE_VIEW { ResolveMissingDependencies = "Resolve Missing Dependencies", ServiceFunctionForm = "Service Function Form", BISamplesView = "BI Samples View", - ReviewMode = "Review Mode SKIP" + ReviewMode = "Review Mode SKIP", + EvalsetViewer = "Evalset Viewer SKIP", + ConfigurationCollector = "Configuration Collector" } export interface MachineEvent { @@ -141,6 +145,7 @@ export interface VisualizerLocation { isGraphql?: boolean; rootDiagramId?: string; metadata?: VisualizerMetadata; + agentMetadata?: AgentMetadata; scope?: SCOPE; projectStructure?: ProjectStructureResponse; org?: string; @@ -150,6 +155,7 @@ export interface VisualizerLocation { dataMapperMetadata?: DataMapperMetadata; artifactInfo?: ArtifactInfo; reviewData?: ReviewModeData; + evalsetData?: EvalsetData; } export interface ArtifactInfo { @@ -164,12 +170,37 @@ export interface ArtifactData { identifier?: string; } +export interface ConfigurationCollectorMetadata { + requestId: string; + variables: Array<{ + name: string; + description: string; + type?: "string" | "int"; + secret?: boolean; + }>; + existingValues?: Record; + message: string; + isTestConfig?: boolean; +} + +export interface AgentMetadata { + configurationCollector?: ConfigurationCollectorMetadata; +} + +export interface ApprovalOverlayState { + show: boolean; + message?: string; +} + export interface VisualizerMetadata { haveLS?: boolean; isBISupported?: boolean; recordFilePath?: string; enableSequenceDiagram?: boolean; // Enable sequence diagram view target?: LinePosition; + featureSupport?: { + aiEvaluation?: boolean; + }; } export interface DataMapperMetadata { @@ -192,6 +223,88 @@ export interface ReviewModeData { onReject?: string; } +// --- Evalset Trace Types --- +export type EvalRole = 'system' | 'user' | 'assistant' | 'function'; + +export interface EvalChatUserMessage { + role: 'user'; + content: string | any; + name?: string; +} + +export interface EvalChatSystemMessage { + role: 'system'; + content: string | any; + name?: string; +} + +export interface EvalChatAssistantMessage { + role: 'assistant'; + content?: string | null; + name?: string; + toolCalls?: EvalFunctionCall[]; +} + +export interface EvalChatFunctionMessage { + role: 'function'; + content?: string | null; + name: string; + id?: string; +} + +export type EvalChatMessage = EvalChatUserMessage | EvalChatSystemMessage | EvalChatAssistantMessage | EvalChatFunctionMessage; + +export interface EvalFunctionCall { + name: string; + arguments?: { [key: string]: any }; + id?: string; +} + +export interface EvalToolSchema { + name: string; + description: string; + parametersSchema?: { [key: string]: any }; +} + +export interface EvalIteration { + history: EvalChatMessage[]; + output: EvalChatAssistantMessage | EvalChatFunctionMessage | any; + startTime: string; + endTime: string; +} + +export interface EvalsetTrace { + id: string; + userMessage: EvalChatUserMessage; + iterations: EvalIteration[]; + output: EvalChatAssistantMessage | any; + tools: EvalToolSchema[]; + toolCalls?: EvalFunctionCall[]; + startTime: string; + endTime: string; +} + +export interface EvalThread { + id: string; + name: string; + traces: EvalsetTrace[]; + created_on: string; +} + +export interface EvalSet { + id: string; + name?: string; + description?: string; + threads: EvalThread[]; + created_on: string; +} + +export interface EvalsetData { + filePath: string; + content: EvalSet; + threadId?: string; +} + export interface PopupVisualizerLocation extends VisualizerLocation { recentIdentifier?: string; artifactType?: DIRECTORY_MAP; @@ -229,6 +342,7 @@ export type ChatNotify = | TaskApprovalRequest | GeneratedSourcesEvent | ConnectorGenerationNotification + | ConfigurationCollectionEvent | CodeReviewActions | PlanUpdated; @@ -283,12 +397,14 @@ export interface ToolCall { type: "tool_call"; toolName: string; toolInput?: any; + toolCallId?: string; } export interface ToolResult { type: "tool_result"; toolName: string; toolOutput?: any; + toolCallId?: string; } export interface EvalsToolResult { @@ -347,6 +463,25 @@ export interface ConnectorGenerationNotification { message: string; } +export interface ConfigurationCollectionEvent { + type: "configuration_collection_event"; + requestId: string; + stage: "creating_file" | "collecting" | "done" | "skipped" | "error"; + variables?: Array<{ + name: string; + description: string; + type?: "string" | "int"; + secret?: boolean; + }>; + existingValues?: Record; + message: string; + isTestConfig?: boolean; + error?: { + message: string; + code: string; + }; +} + export interface CodeReviewActions { type: "review_actions"; } @@ -379,12 +514,13 @@ export const popupStateChanged: NotificationType = { met export const getPopupVisualizerState: RequestType = { method: 'getPopupVisualizerState' }; export const breakpointChanged: NotificationType = { method: 'breakpointChanged' }; +export const approvalOverlayState: NotificationType = { method: 'approvalOverlayState' }; // ------------------> AI Related state types <----------------------- export type AIMachineStateValue = | 'Initialize' // (checking auth, first load) | 'Unauthenticated' // (show login window) - | { Authenticating: 'determineFlow' | 'ssoFlow' | 'apiKeyFlow' | 'validatingApiKey' | 'awsBedrockFlow' | 'validatingAwsCredentials' } // hierarchical substates + | { Authenticating: 'determineFlow' | 'ssoFlow' | 'apiKeyFlow' | 'validatingApiKey' | 'awsBedrockFlow' | 'validatingAwsCredentials' | 'vertexAiFlow' | 'validatingVertexAiCredentials' } // hierarchical substates | 'Authenticated' // (ready, main view) | 'Disabled'; // (optional: if AI Chat is globally unavailable) @@ -395,6 +531,8 @@ export enum AIMachineEventType { SUBMIT_API_KEY = 'SUBMIT_API_KEY', AUTH_WITH_AWS_BEDROCK = 'AUTH_WITH_AWS_BEDROCK', SUBMIT_AWS_CREDENTIALS = 'SUBMIT_AWS_CREDENTIALS', + AUTH_WITH_VERTEX_AI = 'AUTH_WITH_VERTEX_AI', + SUBMIT_VERTEX_AI_CREDENTIALS = 'SUBMIT_VERTEX_AI_CREDENTIALS', LOGOUT = 'LOGOUT', SILENT_LOGOUT = "SILENT_LOGOUT", COMPLETE_AUTH = 'COMPLETE_AUTH', @@ -415,6 +553,13 @@ export type AIMachineEventMap = { region: string; sessionToken?: string; }; + [AIMachineEventType.AUTH_WITH_VERTEX_AI]: undefined; + [AIMachineEventType.SUBMIT_VERTEX_AI_CREDENTIALS]: { + projectId: string; + location: string; + clientEmail: string; + privateKey: string; + }; [AIMachineEventType.LOGOUT]: undefined; [AIMachineEventType.SILENT_LOGOUT]: undefined; [AIMachineEventType.COMPLETE_AUTH]: undefined; @@ -558,7 +703,8 @@ export enum TaskStatus { export enum TaskTypes { SERVICE_DESIGN = "service_design", CONNECTIONS_INIT = "connections_init", - IMPLEMENTATION = "implementation" + IMPLEMENTATION = "implementation", + TESTING = "testing" } /** @@ -567,7 +713,7 @@ export enum TaskTypes { export interface Task { description: string; status: TaskStatus; - type : TaskTypes; + type: TaskTypes; } export interface Plan { @@ -594,24 +740,19 @@ export type OperationType = "CODE_FOR_USER_REQUIREMENT" | "TESTS_FOR_USER_REQUIR export enum LoginMethod { BI_INTEL = 'biIntel', ANTHROPIC_KEY = 'anthropic_key', - DEVANT_ENV = 'devant_env', - AWS_BEDROCK = 'aws_bedrock' + AWS_BEDROCK = 'aws_bedrock', + VERTEX_AI = 'vertex_ai' } export interface BIIntelSecrets { accessToken: string; - refreshToken: string; + expiresAt?: number; // Unix timestamp in milliseconds } export interface AnthropicKeySecrets { apiKey: string; } -export interface DevantEnvSecrets { - accessToken: string; - expiresAt: number; -} - interface AwsBedrockSecrets { accessKeyId: string; secretAccessKey: string; @@ -619,6 +760,13 @@ interface AwsBedrockSecrets { sessionToken?: string; } +export interface VertexAiSecrets { + projectId: string; + location: string; + clientEmail: string; + privateKey: string; +} + export type AuthCredentials = | { loginMethod: LoginMethod.BI_INTEL; @@ -628,13 +776,13 @@ export type AuthCredentials = loginMethod: LoginMethod.ANTHROPIC_KEY; secrets: AnthropicKeySecrets; } - | { - loginMethod: LoginMethod.DEVANT_ENV; - secrets: DevantEnvSecrets; - } | { loginMethod: LoginMethod.AWS_BEDROCK; secrets: AwsBedrockSecrets; + } + | { + loginMethod: LoginMethod.VERTEX_AI; + secrets: VertexAiSecrets; }; export interface AIUserToken { diff --git a/workspaces/ballerina/ballerina-extension/.env.example b/workspaces/ballerina/ballerina-extension/.env.example index f50f4148a2b..272c41e7e71 100644 --- a/workspaces/ballerina/ballerina-extension/.env.example +++ b/workspaces/ballerina/ballerina-extension/.env.example @@ -1,13 +1,2 @@ -# Prod Copilot -BALLERINA_ROOT_URL=https://dev-tools.wso2.com/ballerina-copilot -BALLERINA_AUTH_ORG= -BALLERINA_AUTH_CLIENT_ID= -BALLERINA_AUTH_REDIRECT_URL=https://eae690d5-80c3-4fb7-9bc5-e8d747cca11b.e1-us-east-azure.choreoapps.dev -BALLERINA_DEFAULT_COPLIOT_CODE_API_KEY= -BALLERINA_DEFAULT_COPLIOT_ASK_API_KEY= - -# Dev Copilot -BALLERINA_DEV_COPLIOT_ROOT_URL= -BALLERINA_DEV_COPLIOT_AUTH_ORG= -BALLERINA_DEV_COPLIOT_AUTH_CLIENT_ID= -BALLERINA_DEV_COPLIOT_AUTH_REDIRECT_URL= +COPILOT_ROOT_URL=https://7eff1239-64bb-4663-b256-30a00d187a5c-prod.e1-us-east-azure.choreoapis.dev/copilot +COPILOT_DEV_ROOT_URL=https://7eff1239-64bb-4663-b256-30a00d187a5c-dev.e1-us-east-azure.choreoapis.dev/copilot diff --git a/workspaces/ballerina/ballerina-extension/CHANGELOG.md b/workspaces/ballerina/ballerina-extension/CHANGELOG.md index 070f18f63bc..c449f14e658 100644 --- a/workspaces/ballerina/ballerina-extension/CHANGELOG.md +++ b/workspaces/ballerina/ballerina-extension/CHANGELOG.md @@ -4,6 +4,31 @@ All notable changes to the **Ballerina** extension will be documented in this fi The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project adheres to [Semantic Versioning](https://semver.org/). + +## [Unreleased] + +### Added + +- **Persist Database Support** — Added support for persist database workflows in BI, including multiple database connections. +- **Library Projects** — Added end-to-end support for library projects, including creation improvements, new overview page, `lib.bal` validator import, publishing to Ballerina Central, and deployment enforcement when deploying workspaces to Devant. +- **BI Copilot** — Added new agent capabilities including library search/get tools, ConfigCollector, test-runner integration, plan-mode toggle, new/old review preview, telemetry insights, and support for agent evaluations. +- **Data Mapper** — Added support for JSON/XML mappings, DSS query input/output mapping generation, module-level construct consolidation, and diagnostics support in clause forms. +- **Developer Experience** — Added support for Devant connections in BI and remote server debugging improvements. + +### Changed + +- **Copilot Authentication & Config** — Migrated Copilot to the Devant auth flow, updated environment keys and pipeline inputs, and improved BI Copilot configuration handling. +- **Editor & Forms** — Implemented new array/map editor experience, introduced dependent type editor behavior for persist forms, and improved record configuration modal UX and layout. +- **Service Designer & Connectors** — Updated FTP service-designer flows and reordered Devant marketplace placement in connector selection views. + +### Fixed + +- **Forms & Validation** — Fixed project create-form validation regressions, if/match form behavior, response editor checkbox issues, loader styling, and form diagnostics handling edge cases. +- **Expression & Type Editing** — Fixed SQL editor rendering for query fields, imported-type import insertion, user-defined type visibility in non-workspace projects, and function-call related create-function action visibility. +- **Service & Resource Flows** — Fixed service designer/configurable view issues, resource header value handling, path sanitization for `.` resource paths, and XML corruption during data-service editing. +- **Copilot & Agent Flow** — Fixed multi-turn chat state persistence, chat agent creation with listener support, config-collector placeholder handling, and login notification issues for default model provider configuration. +- **Security** — Applied vulnerability and dependency security fixes across BI extension components. + ## [5.8.1](https://github.com/wso2/vscode-extensions/compare/ballerina-integrator-1.7.0...ballerina-5.8.1) - 2026-02-25 ### Fixed diff --git a/workspaces/ballerina/ballerina-extension/grammar/ballerina-grammar b/workspaces/ballerina/ballerina-extension/grammar/ballerina-grammar index 9c1bee1e9f4..43dc73a0efa 160000 --- a/workspaces/ballerina/ballerina-extension/grammar/ballerina-grammar +++ b/workspaces/ballerina/ballerina-extension/grammar/ballerina-grammar @@ -1 +1 @@ -Subproject commit 9c1bee1e9f48c03a8ad8760b0053ca5687460354 +Subproject commit 43dc73a0eface1f88b287790ccc247b8efc4f93f diff --git a/workspaces/ballerina/ballerina-extension/package.json b/workspaces/ballerina/ballerina-extension/package.json index da945f16dab..3f6a3cc14ae 100644 --- a/workspaces/ballerina/ballerina-extension/package.json +++ b/workspaces/ballerina/ballerina-extension/package.json @@ -2,7 +2,7 @@ "name": "ballerina", "displayName": "Ballerina", "description": "Ballerina Language support, debugging, graphical visualization, AI-based data-mapping and many more.", - "version": "5.8.1", + "version": "5.9.26022015", "publisher": "wso2", "icon": "resources/images/ballerina.png", "homepage": "https://wso2.com/ballerina/vscode/docs", @@ -15,7 +15,7 @@ "theme": "light" }, "engines": { - "vscode": "^1.83.1" + "vscode": "^1.100.0" }, "categories": [ "Programming Languages", @@ -30,8 +30,7 @@ "onUri" ], "extensionDependencies": [ - "anweber.httpbook", - "WSO2.wso2-platform" + "anweber.httpbook" ], "contributes": { "languages": [ @@ -212,11 +211,6 @@ "default": true, "description": "Enable AI suggestions in the Flow Diagram View." }, - "ballerina.ai.planMode": { - "type": "boolean", - "default": false, - "description": "Enable the option for the Plan mode in Copilot." - }, "ballerina.showAdvancedAiNodes": { "type": "boolean", "default": false, @@ -328,6 +322,9 @@ ], "default": "integrated", "description": "Indicates the terminal kind to launch the debugging process in." + }, + "choreoConnect": { + "description": "Connect with Choreo/Devant when launching the app" } } }, @@ -379,6 +376,11 @@ } ], "commands": [ + { + "command": "BI.project.createBIProjectPure", + "title": "Create New Project", + "category": "Ballerina" + }, { "command": "ballerina.project.build", "title": "Build", @@ -412,23 +414,23 @@ { "command": "ballerina.newFileExplorerTree", "title": "New File", - "icon": "$(distro-new-file)" + "icon": "$(ballerina-new-file)" }, { "command": "ballerina.newFolderExplorerTree", "title": "New Folder", - "icon": "$(distro-new-folder)" + "icon": "$(ballerina-new-folder)" }, { "command": "ballerina.showVisualizer", "title": "Show Visualizer", - "icon": "$(distro-design-view)", + "icon": "$(ballerina-design-view)", "category": "Ballerina" }, { "command": "ballerina.force.update.artifacts", "title": "Refresh Artifacts", - "icon": "$(distro-refresh)", + "icon": "$(ballerina-refresh)", "category": "Ballerina", "enablement": "isSupportedProject" }, @@ -452,7 +454,7 @@ { "command": "ballerina.source.debug", "title": "Debug", - "icon": "$(distro-debug)", + "icon": "$(ballerina-debug)", "category": "Ballerina" }, { @@ -494,7 +496,7 @@ { "command": "ballerina.notebook.restartNotebook", "title": "Restart Notebook", - "icon": "$(distro-refresh)", + "icon": "$(ballerina-refresh)", "category": "Ballerina", "when": "notebookType == 'ballerina-notebook'" }, @@ -521,7 +523,7 @@ { "command": "ballerina.notebook.refreshVariableView", "title": "Refresh Notebook Variables", - "icon": "$(distro-refresh)", + "icon": "$(ballerina-refresh)", "category": "Ballerina", "enablement": "isNotebookVariableViewEnabled" }, @@ -534,7 +536,7 @@ { "command": "ballerina.view.entityDiagram", "title": "Entity Relationship Diagram", - "icon": "$(distro-persist-diagram)", + "icon": "$(ballerina-persist-diagram)", "category": "Ballerina" }, { @@ -588,7 +590,7 @@ { "command": "BI.test.edit.function", "title": "View test flow", - "icon": "$(distro-design-view)", + "icon": "$(type-hierarchy)", "category": "BI" }, { @@ -599,11 +601,23 @@ }, { "command": "BI.test.add.function", - "title": "Add test case", + "title": "Add New Test", "icon": "$(add)", "category": "BI", "enablement": "isSupportedProject" }, + { + "command": "BI.test.add.ai.evaluation", + "title": "Add AI Evaluation", + "category": "BI", + "enablement": "isSupportedProject" + }, + { + "command": "BI.test.delete.function", + "title": "Delete test function", + "icon": "$(trash)", + "category": "BI" + }, { "command": "BI.view.typeDiagram", "title": "Type Diagram", @@ -646,7 +660,7 @@ { "command": "BI.project-explorer.view-type-diagram", "title": "View Type Diagram", - "icon": "$(distro-design-view)", + "icon": "$(ballerina-design-view)", "group": "navigation", "category": "BI" }, @@ -667,13 +681,13 @@ { "command": "BI.project-explorer.view-configuration", "title": "View Configurations", - "icon": "$(distro-design-view)", + "icon": "$(ballerina-design-view)", "group": "navigation", "category": "BI" }, { "command": "BI.project-explorer.add", - "title": "Add Project", + "title": "Add Integration or Library", "icon": "$(add)", "group": "navigation", "category": "BI", @@ -682,7 +696,7 @@ { "command": "BI.project-explorer.overview", "title": "Show Overview", - "icon": "$(distro-design-view)", + "icon": "$(ballerina-design-view)", "group": "navigation", "category": "BI" }, @@ -722,27 +736,58 @@ }, { "command": "ballerina.enableTracing", - "title": "Enable Tracing (Experimental)", + "title": "Enable Tracing", "category": "Ballerina", "enablement": "isSupportedProject" }, { "command": "ballerina.disableTracing", - "title": "Disable Tracing (Experimental)", + "title": "Disable Tracing", "category": "Ballerina", "icon": "$(circle-slash)", "enablement": "isSupportedProject" }, { "command": "ballerina.clearTraces", - "title": "Clear Traces (Experimental)", + "title": "Clear Traces", "category": "Ballerina", "icon": "$(clear-all)", "hidden": true, "enablement": "isSupportedProject" + }, + { + "command": "ballerina.createNewEvalset", + "title": "Create New Evalset", + "category": "Ballerina", + "icon": "$(add)" + }, + { + "command": "ballerina.createNewThread", + "title": "Add Thread", + "category": "Ballerina", + "icon": "$(add)" + }, + { + "command": "ballerina.deleteEvalset", + "title": "Delete Evalset", + "category": "Ballerina", + "icon": "$(trash)" + }, + { + "command": "ballerina.deleteThread", + "title": "Delete Thread", + "category": "Ballerina", + "icon": "$(trash)" } ], "views": { + "test": [ + { + "id": "ballerina-evalsets", + "name": "Evalsets", + "when": "isBIProject || isBallerinaProject" + } + ], "ballerina-traceView": [ { "id": "ballerina-traceView", @@ -776,6 +821,11 @@ "view": "testing", "contents": "[Add Unit Test](command:BI.test.add.function)", "when": "isBIProject || isBallerinaProject" + }, + { + "view": "testing", + "contents": "[Add AI Evaluation](command:BI.test.add.ai.evaluation)", + "when": "isBIProject || isBallerinaProject" } ], "viewsContainers": { @@ -793,6 +843,13 @@ } ] }, + "submenus": [ + { + "id": "BI.test.add.submenu", + "label": "Add Test", + "icon": "$(add)" + } + ], "menus": { "testing/item/context": [ { @@ -806,9 +863,9 @@ "when": "testId not in testGroups" }, { - "command": "BI.test.add.function", + "command": "BI.test.delete.function", "group": "inline", - "when": "testId in testGroups" + "when": "testId not in testGroups" } ], "view/title": [ @@ -818,7 +875,7 @@ "group": "navigation" }, { - "command": "BI.test.add.function", + "submenu": "BI.test.add.submenu", "when": "(isBIProject || isBallerinaProject) && view == workbench.view.testing", "group": "navigation" }, @@ -833,6 +890,38 @@ "when": "view == ballerina-traceView && ballerina.tracingEnabled && !ballerina.tracesEmpty", "group": "navigation", "title": "Clear Traces" + }, + { + "command": "ballerina.createNewEvalset", + "when": "view == ballerina-evalsets", + "group": "navigation" + } + ], + "view/item/context": [ + { + "command": "ballerina.createNewThread", + "when": "view == ballerina-evalsets && viewItem == evalsetFile", + "group": "inline" + }, + { + "command": "ballerina.deleteEvalset", + "when": "view == ballerina-evalsets && viewItem == evalsetFile", + "group": "inline" + }, + { + "command": "ballerina.deleteThread", + "when": "view == ballerina-evalsets && viewItem == evalsetThread", + "group": "inline" + } + ], + "BI.test.add.submenu": [ + { + "command": "BI.test.add.function", + "group": "1@1" + }, + { + "command": "BI.test.add.ai.evaluation", + "group": "1@2" } ], "editor/title": [ @@ -942,6 +1031,10 @@ } ], "commandPalette": [ + { + "command": "BI.project.createBIProjectPure", + "when": "false" + }, { "command": "BI.test.edit.function.def", "when": "false" @@ -950,6 +1043,10 @@ "command": "BI.test.edit.function", "when": "false" }, + { + "command": "BI.test.delete.function", + "when": "false" + }, { "command": "BI.project-explorer.delete", "when": "false" @@ -1000,172 +1097,172 @@ } ], "icons": { - "distro-new-module": { + "ballerina-new-module": { "description": "new-module", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f135" } }, - "distro-refresh": { + "ballerina-refresh": { "description": "refresh", "default": { "fontPath": "./resources/codicons/codicon.ttf", "fontCharacter": "\\eb37" } }, - "distro-new-file": { + "ballerina-new-file": { "description": "new-file", "default": { "fontPath": "./resources/codicons/codicon.ttf", "fontCharacter": "\\ea7f" } }, - "distro-new-folder": { + "ballerina-new-folder": { "description": "new-folder", "default": { "fontPath": "./resources/codicons/codicon.ttf", "fontCharacter": "\\ea80" } }, - "distro-delete": { + "ballerina-delete": { "description": "delete", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f114" } }, - "distro-agent-view": { + "ballerina-agent-view": { "description": "agent-view", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f175" } }, - "distro-start": { + "ballerina-start": { "description": "start", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", - "fontCharacter": "\\f11c" + "fontCharacter": "\\f21f" } }, - "distro-debug": { + "ballerina-debug": { "description": "debug", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f17a" } }, - "distro-source-view": { + "ballerina-source-view": { "description": "source-view", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f149" } }, - "distro-persist-diagram": { + "ballerina-persist-diagram": { "description": "persist-diagram", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", - "fontCharacter": "\\f136" + "fontCharacter": "\\f1f9" } }, - "distro-cached-rounded": { + "ballerina-cached-rounded": { "description": "cached-rounded", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f106" } }, - "distro-cached-round": { + "ballerina-cached-round": { "description": "cached-round", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f107" } }, - "distro-fit-to-screen": { + "ballerina-fit-to-screen": { "description": "fit-to-screen", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f120" } }, - "distro-explicit-outlined": { + "ballerina-explicit-outlined": { "description": "explicit-outlined", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f11f" } }, - "distro-error-icon": { + "ballerina-error-icon": { "description": "error-icon", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f11c" } }, - "distro-error-outline": { + "ballerina-error-outline": { "description": "error-outline", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f11d" } }, - "distro-symbol-struct-icon": { + "ballerina-symbol-struct-icon": { "description": "symbol-struct-icon", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f13d" } }, - "distro-add-circle-outline": { + "ballerina-add-circle-outline": { "description": "add-circle-outline", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f102" } }, - "distro-radio-button-checked": { + "ballerina-radio-button-checked": { "description": "radio-button-checked", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f134" } }, - "distro-radio-button-unchecked": { + "ballerina-radio-button-unchecked": { "description": "radio-button-unchecked", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f135" } }, - "distro-file-upload": { + "ballerina-file-upload": { "description": "file-upload", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", "fontCharacter": "\\f11f" } }, - "distro-file-submodule": { + "ballerina-file-submodule": { "description": "file-submodule", "default": { "fontPath": "./resources/codicons/codicon.ttf", "fontCharacter": "\\eaec" } }, - "distro-switch-project": { + "ballerina-switch-project": { "description": "switch-project", "default": { "fontPath": "./resources/codicons/codicon.ttf", "fontCharacter": "\\ea77" } }, - "distro-design-view": { + "ballerina-design-view": { "description": "design-view", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", - "fontCharacter": "\\f177" + "fontCharacter": "\\f1bf" } } }, @@ -1200,7 +1297,7 @@ "test": "pnpm run test-compile && node ./out/test/runTest.js", "test:ai": "pnpm run test-compile && node ./out/test/runAiTest.js", "test:libs-integration": "pnpm run test-compile && node ./out/test/runLibsIntegrationTest.js", - "e2e-test-setup": "npx extest get-vscode -c 1.83.1 && npx extest get-chromedriver -c 1.83.1 && npx extest install-vsix -f $(ls vsix/*.vsix)", + "e2e-test-setup": "npx extest get-vscode -c 1.100.0 && npx extest get-chromedriver -c 1.100.0 && npx extest install-vsix -f $(ls vsix/*.vsix)", "preui-test": "node -e \"const fs = require('fs'); if (fs.existsSync('test-resou')) { fs.unlinkSync('test-resou'); }\"", "e2e-test": "pnpm run test-compile && npx extest run-tests 'out/ui-test/*.test.js' --mocha_config ui-test/.mocharc.js -o ui-test/settings.json", "test-coverage": "cross-env COVER_CONFIG=html pnpm run test", @@ -1214,88 +1311,89 @@ "download-ls:prerelease": "node scripts/download-ls.js --prerelease --replace", "build": "pnpm run compile && pnpm run lint && pnpm run postbuild", "rebuild": "pnpm run clean && pnpm run compile && pnpm run postbuild", - "postbuild": "if [ \"$isPreRelease\" = \"true\" ]; then pnpm run download-ls --prerelease; else pnpm run download-ls; fi && pnpm run copyFonts && pnpm run copyJSLibs && pnpm run package && pnpm run copyVSIX", + "postbuild": "pnpm run download-ls && pnpm run copyFonts && pnpm run copyJSLibs && pnpm run package && pnpm run copyVSIX", "copyJSLibs": "copyfiles -f ../ballerina-visualizer/build/*.js resources/jslibs && copyfiles -f ../trace-visualizer/build/*.js resources/jslibs" }, "dependencies": { - "@ai-sdk/amazon-bedrock": "^4.0.4", - "@ai-sdk/anthropic": "^3.0.2", - "@iarna/toml": "^2.2.5", - "@types/lodash": "^4.14.200", - "@vscode/test-electron": "^2.5.2", - "@vscode/vsce": "^3.7.0", + "@ai-sdk/amazon-bedrock": "4.0.67", + "@ai-sdk/anthropic": "3.0.48", + "@ai-sdk/google-vertex": "4.0.66", + "@iarna/toml": "2.2.5", + "@types/lodash": "4.14.200", + "@vscode/test-electron": "2.5.2", + "@vscode/vsce": "3.7.1", "@wso2/ballerina-core": "workspace:*", "@wso2/ballerina-visualizer": "workspace:*", "@wso2/font-wso2-vscode": "workspace:*", "@wso2/syntax-tree": "workspace:*", "@wso2/trace-visualizer": "workspace:*", "@wso2/wso2-platform-core": "workspace:*", - "ai": "^6.0.7", - "cors-anywhere": "^0.4.4", - "del-cli": "^5.1.0", - "dotenv": "~16.5.0", - "file-uri-to-path": "^2.0.0", - "glob": "^11.1.0", - "handlebars": "~4.7.8", - "jwt-decode": "^4.0.0", + "ai": "6.0.103", + "cors-anywhere": "0.4.4", + "del-cli": "5.1.0", + "dotenv": "16.5.0", + "file-uri-to-path": "2.0.0", + "glob": "11.1.0", + "handlebars": "4.7.8", + "jwt-decode": "4.0.0", "lodash": "4.17.23", "monaco-languageclient": "0.13.1-next.9", - "node-fetch": "^3.3.2", - "node-schedule": "^2.1.1", - "portfinder": "^1.0.32", - "protobufjs": "^7.2.5", - "source-map-support": "^0.5.21", - "unzipper": "~0.12.3", - "uuid": "^11.1.0", - "vscode-debugadapter": "^1.51.0", - "vscode-debugprotocol": "^1.51.0", - "vscode-extension-telemetry": "^0.1.7", - "vscode-languageclient": "^8.1.0", - "vscode-languageserver-protocol": "^3.17.5", - "vscode-languageserver-types": "^3.17.5", - "vscode-messenger": "^0.4.5", - "vscode-messenger-common": "^0.4.5", - "vscode-test": "^1.6.1", - "vscode-uri": "^3.0.8", - "xml-js": "^1.6.11", - "xstate": "^4.38.3", - "zod": "^4.1.8" + "zustand": "5.0.5", + "node-fetch": "3.3.2", + "node-schedule": "2.1.1", + "portfinder": "1.0.32", + "protobufjs": "7.2.5", + "source-map-support": "0.5.21", + "unzipper": "0.12.3", + "uuid": "11.1.0", + "vscode-debugadapter": "1.51.0", + "vscode-debugprotocol": "1.51.0", + "vscode-extension-telemetry": "0.1.7", + "vscode-languageclient": "8.1.0", + "vscode-languageserver-protocol": "3.17.5", + "vscode-languageserver-types": "3.17.5", + "vscode-messenger": "0.4.5", + "vscode-messenger-common": "0.4.5", + "vscode-test": "1.6.1", + "vscode-uri": "3.0.8", + "xml-js": "1.6.11", + "xstate": "4.38.3", + "zod": "4.1.8" }, "devDependencies": { - "@sentry/webpack-plugin": "^1.20.1", - "@types/chai": "^4.3.9", - "@types/mocha": "~10.0.3", - "@types/node": "^18.18.7", - "@types/tcp-port-used": "^1.0.3", - "@types/vscode": "^1.83.1", - "@types/vscode-notebook-renderer": "~1.72.2", - "adm-zip": "^0.5.16", - "axios": "^1.12.0", - "chai": "^4.3.10", - "copyfiles": "^2.4.1", - "cross-env": "^7.0.3", - "decache": "^4.6.2", - "express": "^4.22.1", - "istanbul": "^0.4.5", - "js-yaml": "^4.1.1", - "jwt-decode": "^3.1.2", - "keytar": "^7.9.0", + "@sentry/webpack-plugin": "1.20.1", + "@types/chai": "4.3.9", + "@types/mocha": "10.0.3", + "@types/node": "18.18.7", + "@types/tcp-port-used": "1.0.3", + "@types/vscode": "1.100.0", + "@types/vscode-notebook-renderer": "1.72.2", + "adm-zip": "0.5.16", + "axios": "1.13.5", + "chai": "4.3.10", + "copyfiles": "2.4.1", + "cross-env": "7.0.3", + "decache": "4.6.2", + "express": "4.22.1", + "istanbul": "0.4.5", + "js-yaml": "4.1.1", + "keytar": "7.9.0", "kill-port": "2.0.1", - "mocha": "^10.2.0", - "pako": "^2.1.0", - "pkce-challenge": "^3.1.0", - "remap-istanbul": "^0.13.0", - "rimraf": "^3.0.2", - "tcp-port-used": "^1.0.2", - "ts-loader": "^9.5.0", - "tslint": "^6.1.3", + "mocha": "10.2.0", + "pako": "2.1.0", + "pkce-challenge": "3.1.0", + "remap-istanbul": "0.13.0", + "rimraf": "3.0.2", + "tcp-port-used": "1.0.2", + "ts-loader": "9.5.0", + "tslint": "6.1.3", "typescript": "5.8.3", - "vscode-debugadapter-testsupport": "^1.51.0", - "vscode-extension-tester": "^5.10.0", - "vscode-messenger": "^0.4.4", - "webpack": "^5.89.0", - "webpack-cli": "^6.0.1", - "yarn": "^1.22.19" + "@types/js-yaml": "4.0.9", + "vscode-debugadapter-testsupport": "1.51.0", + "vscode-extension-tester": "5.10.0", + "webpack": "5.104.1", + "webpack-cli": "6.0.1", + "yarn": "1.22.19" }, "extensionPack": [ "be5invis.toml" diff --git a/workspaces/ballerina/ballerina-extension/src/RPCLayer.ts b/workspaces/ballerina/ballerina-extension/src/RPCLayer.ts index a43b3b1cfeb..ed6e9336a7b 100644 --- a/workspaces/ballerina/ballerina-extension/src/RPCLayer.ts +++ b/workspaces/ballerina/ballerina-extension/src/RPCLayer.ts @@ -19,7 +19,7 @@ import { WebviewView, WebviewPanel, window } from 'vscode'; import { Messenger } from 'vscode-messenger'; import { StateMachine } from './stateMachine'; -import { stateChanged, getVisualizerLocation, VisualizerLocation, projectContentUpdated, aiStateChanged, sendAIStateEvent, popupStateChanged, getPopupVisualizerState, PopupVisualizerLocation, breakpointChanged, AIMachineEventType, ArtifactData, onArtifactUpdatedNotification, onArtifactUpdatedRequest, currentThemeChanged, AIMachineSendableEvent, checkpointCaptured, CheckpointCapturedPayload, promptUpdated } from '@wso2/ballerina-core'; +import { stateChanged, getVisualizerLocation, VisualizerLocation, projectContentUpdated, aiStateChanged, sendAIStateEvent, popupStateChanged, getPopupVisualizerState, PopupVisualizerLocation, breakpointChanged, AIMachineEventType, ArtifactData, onArtifactUpdatedNotification, onArtifactUpdatedRequest, currentThemeChanged, AIMachineSendableEvent, checkpointCaptured, CheckpointCapturedPayload, promptUpdated, approvalOverlayState, ApprovalOverlayState } from '@wso2/ballerina-core'; import { VisualizerWebview } from './views/visualizer/webview'; import { registerVisualizerRpcHandlers } from './rpc-managers/visualizer/rpc-handler'; import { registerLangClientRpcHandlers } from './rpc-managers/lang-client/rpc-handler'; @@ -45,6 +45,7 @@ import { extension } from './BalExtensionContext'; import { registerAgentChatRpcHandlers } from './rpc-managers/agent-chat/rpc-handler'; import { ArtifactsUpdated, ArtifactNotificationHandler } from './utils/project-artifacts-handler'; import { registerMigrateIntegrationRpcHandlers } from './rpc-managers/migrate-integration/rpc-handler'; +import { registerPlatformExtRpcHandlers } from './rpc-managers/platform-ext/rpc-handler'; export class RPCLayer { static _messenger: Messenger = new Messenger(); @@ -92,6 +93,7 @@ export class RPCLayer { registerAiAgentRpcHandlers(RPCLayer._messenger); registerIcpServiceRpcHandlers(RPCLayer._messenger); registerAgentChatRpcHandlers(RPCLayer._messenger); + registerPlatformExtRpcHandlers(RPCLayer._messenger); // ----- AI Webview RPC Methods registerAiPanelRpcHandlers(RPCLayer._messenger); @@ -132,6 +134,7 @@ async function getContext(): Promise { isBI: context.isBI, isInDevant: context.isInDevant, projectPath: context.projectPath, + workspacePath: context.workspacePath, serviceType: context.serviceType, type: context.type, isGraphql: context.isGraphql, @@ -143,14 +146,17 @@ async function getContext(): Promise { haveLS: StateMachine.langClient() && true, recordFilePath: context.projectPath ? path.join(context.projectPath, "types.bal") : undefined, enableSequenceDiagram: extension.ballerinaExtInstance.enableSequenceDiagramView(), - target: context.metadata?.target + target: context.metadata?.target, + featureSupport: context.metadata?.featureSupport }, scope: context.scope, org: context.org, package: context.package, dataMapperMetadata: context.dataMapperMetadata, artifactInfo: context.artifactInfo, - reviewData: context.reviewData + reviewData: context.reviewData, + agentMetadata: context.agentMetadata, + evalsetData: context.evalsetData }); }); } @@ -164,6 +170,7 @@ async function getPopupContext(): Promise { recentIdentifier: context.recentIdentifier, identifier: context.identifier, metadata: context.metadata, + agentMetadata: context.agentMetadata, dataMapperMetadata: context.dataMapperMetadata }); }); @@ -193,3 +200,7 @@ export function notifyBreakpointChange() { export function notifyCheckpointCaptured(payload: CheckpointCapturedPayload) { RPCLayer._messenger.sendNotification(checkpointCaptured, { type: 'webview', webviewType: AiPanelWebview.viewType }, payload); } + +export function notifyApprovalOverlayState(state: ApprovalOverlayState) { + RPCLayer._messenger.sendNotification(approvalOverlayState, { type: 'webview', webviewType: AiPanelWebview.viewType }, state); +} diff --git a/workspaces/ballerina/ballerina-extension/src/core/extended-language-client.ts b/workspaces/ballerina/ballerina-extension/src/core/extended-language-client.ts index 6838b76d00f..7ca54d4e6a5 100644 --- a/workspaces/ballerina/ballerina-extension/src/core/extended-language-client.ts +++ b/workspaces/ballerina/ballerina-extension/src/core/extended-language-client.ts @@ -227,7 +227,6 @@ import { DeleteConfigVariableRequestV2, DeleteConfigVariableResponseV2, ResourceReturnTypesRequest, - ResourceReturnTypesResponse, JsonToTypeRequest, JsonToTypeResponse, McpToolsRequest, @@ -283,7 +282,14 @@ import { PersistClientGenerateRequest, PersistClientGenerateResponse, WSDLApiClientGenerationRequest, - WSDLApiClientGenerationResponse + WSDLApiClientGenerationResponse, + CopilotSearchLibrariesBySearchRequest, + CopilotSearchLibrariesBySearchResponse, + CreateConvertedVariableRequest, + IntrospectCredentialsRequest, + IntrospectCredentialsResponse, + GetSimpleTypeOfExpressionResponse, + GetSimpleTypeOfExpressionRequest } from "@wso2/ballerina-core"; import { BallerinaExtension } from "./index"; import { debug, handlePullModuleProgress } from "../utils"; @@ -353,6 +359,7 @@ enum EXTENDED_APIS { BI_VERIFY_TYPE_DELETE = 'typesManager/verifyTypeDelete', BI_DELETE_TYPE = 'typesManager/deleteType', BI_AVAILABLE_NODES = 'flowDesignService/getAvailableNodes', + BI_AVAILABLE_AGENTS = 'flowDesignService/getAvailableAgents', BI_AVAILABLE_MODEL_PROVIDERS = 'flowDesignService/getAvailableModelProviders', BI_AVAILABLE_VECTOR_STORES = 'flowDesignService/getAvailableVectorStores', BI_AVAILABLE_EMBEDDING_PROVIDERS = 'flowDesignService/getAvailableEmbeddingProviders', @@ -386,6 +393,7 @@ enum EXTENDED_APIS { DATA_MAPPER_CLAUSE_POSITION = 'dataMapper/clausePosition', DATA_MAPPER_CLEAR_TYPE_CACHE = 'dataMapper/clearTypeCache', DATA_MAPPER_CONVERT_EXPRESSION = 'dataMapper/convertExpression', + DATA_MAPPER_CREATE_CONVERTED_VARIABLE = 'dataMapper/convertType', VIEW_CONFIG_VARIABLES_V2 = 'configEditorV2/getConfigVariables', UPDATE_CONFIG_VARIABLES_V2 = 'configEditorV2/updateConfigVariable', DELETE_CONFIG_VARIABLE_V2 = 'configEditorV2/deleteConfigVariable', @@ -408,6 +416,7 @@ enum EXTENDED_APIS { BI_TRIGGER_UPDATE_FUNCTION = 'triggerDesignService/updateTriggerFunction', BI_GET_TYPES = 'typesManager/getTypes', BI_GET_TYPE = 'typesManager/getType', + BI_GET_SIMPLE_TYPE_OF_EXPRESSION = 'typesManager/getTypeOfExpression', BI_UPDATE_TYPE = 'typesManager/updateType', BI_UPDATE_TYPES = 'typesManager/updateTypes', BI_GET_GRAPHQL_TYPE = 'typesManager/getGraphqlType', @@ -468,6 +477,7 @@ enum EXTENDED_APIS { OPEN_API_GENERATED_MODULES = 'openAPIService/getModules', OPEN_API_CLIENT_DELETE = 'openAPIService/deleteModule', PERSIST_DATABASE_INTROSPECTION = 'persistService/introspectDatabase', + PERSIST_CREDENTIALS_INTROSPECTION = 'persistService/introspectCredentials', PERSIST_CLIENT_GENERATE = 'persistService/generatePersistClient', WSDL_API_CLIENT_GENERATE = 'wsdlService/genClient', GET_PROJECT_INFO = 'designModelService/projectInfo', @@ -475,6 +485,7 @@ enum EXTENDED_APIS { PUBLISH_ARTIFACTS = 'designModelService/publishArtifacts', COPILOT_ALL_LIBRARIES = 'copilotLibraryManager/getLibrariesList', COPILOT_FILTER_LIBRARIES = 'copilotLibraryManager/getFilteredLibraries', + COPILOT_SEARCH_LIBRARIES = 'copilotLibraryManager/getLibrariesBySearch', GET_MIGRATION_TOOLS = 'projectService/getMigrationTools', TIBCO_TO_BI = 'projectService/importTibco', MULE_TO_BI = 'projectService/importMule', @@ -717,6 +728,10 @@ export class ExtendedLangClient extends LanguageClient implements ExtendedLangCl return this.sendRequest(EXTENDED_APIS.PERSIST_CLIENT_GENERATE, params); } + async introspectCredentials(params: IntrospectCredentialsRequest): Promise { + return this.sendRequest(EXTENDED_APIS.PERSIST_CREDENTIALS_INTROSPECTION, params); + } + async generateWSDLApiClient(params: WSDLApiClientGenerationRequest): Promise { return this.sendRequest(EXTENDED_APIS.WSDL_API_CLIENT_GENERATE, params); } @@ -885,6 +900,10 @@ export class ExtendedLangClient extends LanguageClient implements ExtendedLangCl return this.sendRequest(EXTENDED_APIS.DATA_MAPPER_CONVERT_EXPRESSION, params); } + async createConvertedVariable(params: CreateConvertedVariableRequest): Promise { + return this.sendRequest(EXTENDED_APIS.DATA_MAPPER_CREATE_CONVERTED_VARIABLE, params); + } + async clearTypeCache(): Promise { return this.sendRequest(EXTENDED_APIS.DATA_MAPPER_CLEAR_TYPE_CACHE); } @@ -1089,6 +1108,10 @@ export class ExtendedLangClient extends LanguageClient implements ExtendedLangCl return this.sendRequest(EXTENDED_APIS.BI_AVAILABLE_NODES, params); } + async getAvailableAgents(params: BIAvailableNodesRequest): Promise { + return this.sendRequest(EXTENDED_APIS.BI_AVAILABLE_AGENTS, params); + } + async getAvailableModelProviders(params: BIAvailableNodesRequest): Promise { return this.sendRequest(EXTENDED_APIS.BI_AVAILABLE_MODEL_PROVIDERS, params); } @@ -1326,6 +1349,10 @@ export class ExtendedLangClient extends LanguageClient implements ExtendedLangCl return this.sendRequest(EXTENDED_APIS.BI_GET_TYPE, params); } + async getSimpleTypeOfExpression(params: GetSimpleTypeOfExpressionRequest): Promise { + return this.sendRequest(EXTENDED_APIS.BI_GET_SIMPLE_TYPE_OF_EXPRESSION, params); + } + async updateType(params: UpdateTypeRequest): Promise { return this.sendRequest(EXTENDED_APIS.BI_UPDATE_TYPE, params); } @@ -1430,6 +1457,10 @@ export class ExtendedLangClient extends LanguageClient implements ExtendedLangCl return this.sendRequest(EXTENDED_APIS.COPILOT_FILTER_LIBRARIES, params); } + async getCopilotLibrariesBySearch(params: CopilotSearchLibrariesBySearchRequest): Promise { + return this.sendRequest(EXTENDED_APIS.COPILOT_SEARCH_LIBRARIES, params); + } + async getMigrationTools(): Promise { return this.sendRequest(EXTENDED_APIS.GET_MIGRATION_TOOLS); } diff --git a/workspaces/ballerina/ballerina-extension/src/core/extension.ts b/workspaces/ballerina/ballerina-extension/src/core/extension.ts index b7a4171974b..ba4e62b2ca1 100644 --- a/workspaces/ballerina/ballerina-extension/src/core/extension.ts +++ b/workspaces/ballerina/ballerina-extension/src/core/extension.ts @@ -40,11 +40,13 @@ import { outputChannel, isWindows, isWSL, + quoteShellPath, isSupportedVersion, VERSION, isSupportedSLVersion, createVersionNumber, - checkIsBallerinaWorkspace + checkIsBallerinaWorkspace, + isInWI } from '../utils'; import { AssertionError } from "assert"; import { @@ -1693,14 +1695,21 @@ export class BallerinaExtension { debug("[VERSION] Starting Ballerina version detection..."); debug(`[VERSION] Input parameters - ballerinaHome: '${ballerinaHome}', overrideBallerinaHome: ${overrideBallerinaHome}`); - try { - // Initialize with fresh environment - debug("[VERSION] Syncing environment variables..."); - await this.syncEnvironment(); - debug("[VERSION] Environment sync completed"); - } catch (error) { - debug(`[VERSION] Warning: Failed to sync environment: ${error}`); - // Continue anyway, don't fail the whole process + // Use BALLERINA_HOME in WSO2 Integrator if set, otherwise fallback to system PATH + if (process.env.WSO2_INTEGRATOR_RUNTIME && process.env.BALLERINA_HOME) { + debug(`[VERSION] Detected WSO2 Integrator environment with BALLERINA_HOME: ${process.env.BALLERINA_HOME}`); + ballerinaHome = process.env.BALLERINA_HOME; + overrideBallerinaHome = true; + } else { + try { + // Initialize with fresh environment + debug("[VERSION] Syncing environment variables..."); + await this.syncEnvironment(); + debug("[VERSION] Environment sync completed"); + } catch (error) { + debug(`[VERSION] Warning: Failed to sync environment: ${error}`); + // Continue anyway, don't fail the whole process + } } // Log current environment for debugging @@ -1824,7 +1833,8 @@ export class BallerinaExtension { debug("[VERSION] Non-Windows platform detected, no extension needed"); } - let ballerinaCommand = distPath + 'bal' + exeExtension + ' version'; + // Build the executable path separately so we can quote it for shell execution + let balExecutablePath = distPath + 'bal' + exeExtension; // Handle WSL environment - prefer native Linux installation over Windows .bat files if (isWSL()) { @@ -1834,26 +1844,28 @@ export class BallerinaExtension { // Check if 'bal' command is available in PATH execSync('which bal', { encoding: 'utf8', timeout: 5000 }); // If we get here, 'bal' is available, use it instead of .bat - ballerinaCommand = 'bal version'; + balExecutablePath = 'bal'; debug("[VERSION] WSL detected native 'bal' command, using it instead of .bat file"); } catch (error) { debug("[VERSION] No native 'bal' command found in WSL, will try .bat file"); // If the path contains Windows-style paths, we need to handle them properly - if (ballerinaCommand.includes('\\') || ballerinaCommand.match(/^[A-Za-z]:/)) { + if (balExecutablePath.includes('\\') || balExecutablePath.match(/^[A-Za-z]:/)) { debug("[VERSION] WSL detected with Windows path, attempting to convert to WSL path"); // Try to convert Windows path to WSL path - const wslPath = ballerinaCommand.replace(/^([A-Za-z]):/, '/mnt/$1').replace(/\\/g, '/').toLowerCase(); - debug(`[VERSION] Converted Windows path to WSL path: ${wslPath}`); - ballerinaCommand = wslPath; + balExecutablePath = balExecutablePath.replace(/^([A-Za-z]):/, '/mnt/$1').replace(/\\/g, '/').toLowerCase(); + debug(`[VERSION] Converted Windows path to WSL path: ${balExecutablePath}`); } } } else { // We have a native Linux installation, use it directly - ballerinaCommand = 'bal version'; + balExecutablePath = 'bal'; debug("[VERSION] WSL detected with native Linux installation, using 'bal version'"); } } + // Quote the executable path to handle spaces in directory names + let ballerinaCommand = `${quoteShellPath(balExecutablePath)} version`; + debug(`[VERSION] Executing command: '${ballerinaCommand}'`); let ballerinaExecutor = ''; @@ -2304,6 +2316,11 @@ export class BallerinaExtension { private checkMultipleBallerinaInstallations(): void { debug("[MULTI_BAL_CHECK] Checking for multiple Ballerina installations in PATH..."); + if (isInWI()) { + debug("[MULTI_BAL_CHECK] Skipping multiple installation warning in WSO2 Integrator environment"); + return; + } + const MULTIPLE_INSTALLATIONS_WARNING = 'Multiple Ballerina installations detected. This may cause unpredictable behavior.'; const RESOLUTION_ADVICE = 'Consider removing duplicate installations or adjusting your PATH to avoid version conflicts.'; diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/activator.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/activator.ts index 2f94ce15d58..e7cc97a483f 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/activator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/activator.ts @@ -29,7 +29,8 @@ import { SIGN_IN_BI_COPILOT } from './constants'; import { - REFRESH_TOKEN_NOT_AVAILABLE_ERROR_MESSAGE, + TOKEN_NOT_AVAILABLE_ERROR_MESSAGE, + NO_AUTH_CREDENTIALS_FOUND, TOKEN_REFRESH_ONLY_SUPPORTED_FOR_BI_INTEL } from '../..//utils/ai/auth'; import { AIStateMachine } from '../../views/ai-panel/aiMachine'; @@ -60,6 +61,12 @@ export interface GenerateAgentForTestResult { export let langClient: ExtendedLangClient; +/** Tracks the active post-login auth subscription so it can be cleaned up before creating a new one. */ +let lastAuthSubscription: { unsubscribe: () => void } | null = null; + +/** How long (ms) to wait for the user to complete login before auto-cancelling the subscription. */ +const AUTH_SUBSCRIPTION_TIMEOUT_MS = 5 * 60 * 1000; + export function activateAIFeatures(ballerinaExternalInstance: BallerinaExtension) { langClient = ballerinaExternalInstance.langClient; @@ -116,12 +123,12 @@ export function activateAIFeatures(ballerinaExternalInstance: BallerinaExtension getSelectedLibraries, getRelevantLibrariesAndFunctions, GenerationType - } = require('./utils/libraries'); + } = require('./utils/libs/libraries'); const { selectRequiredFunctions, getMaximizedSelectedLibs, toMaximizedLibrariesFromLibJson - } = require('./utils/function-registry'); + } = require('./utils/libs/function-registry'); commands.registerCommand('ballerina.test.ai.getAllLibraries', async (generationType: typeof GenerationType) => { return await getAllLibraries(generationType); @@ -163,9 +170,55 @@ export function activateAIFeatures(ballerinaExternalInstance: BallerinaExtension window.showInformationMessage(DEFAULT_PROVIDER_ADDED); } } catch (error) { - if ((error as Error).message === REFRESH_TOKEN_NOT_AVAILABLE_ERROR_MESSAGE || (error as Error).message === TOKEN_REFRESH_ONLY_SUPPORTED_FOR_BI_INTEL) { + if ((error as Error).message === TOKEN_NOT_AVAILABLE_ERROR_MESSAGE || (error as Error).message === TOKEN_REFRESH_ONLY_SUPPORTED_FOR_BI_INTEL || (error as Error).message === NO_AUTH_CREDENTIALS_FOUND) { window.showWarningMessage(LOGIN_REQUIRED_WARNING_FOR_DEFAULT_MODEL, SIGN_IN_BI_COPILOT).then(selection => { if (selection === SIGN_IN_BI_COPILOT) { + // Dispose any previous subscription before creating a new one + if (lastAuthSubscription) { + lastAuthSubscription.unsubscribe(); + lastAuthSubscription = null; + } + + let timeoutHandle: ReturnType | null = null; + + // Subscribe to state changes to auto-retry after successful login + const subscription = AIStateMachine.service().subscribe((state) => { + if (state.value === 'Authenticated') { + // Clear timeout and module-scoped reference, then unsubscribe + if (timeoutHandle !== null) { + clearTimeout(timeoutHandle); + timeoutHandle = null; + } + lastAuthSubscription = null; + subscription.unsubscribe(); + // Retry the configuration automatically + addConfigFile(configPath).then(result => { + if (result) { + window.showInformationMessage(DEFAULT_PROVIDER_ADDED); + } + }).catch(retryError => { + window.showErrorMessage(`Failed to configure default model: ${(retryError as Error).message}`); + }); + } + }); + + lastAuthSubscription = subscription; + + // Guard against the user never completing login + timeoutHandle = setTimeout(() => { + if (lastAuthSubscription === subscription) { + lastAuthSubscription = null; + } + subscription.unsubscribe(); + }, AUTH_SUBSCRIPTION_TIMEOUT_MS); + + // If stuck in Authenticating from a previous cancelled login, reset it to allow a new login attempt + const currentState = AIStateMachine.state(); + if (typeof currentState === 'object' && 'Authenticating' in currentState) { + AIStateMachine.service().send(AIMachineEventType.CANCEL_LOGIN); + } + + // Trigger the login flow AIStateMachine.service().send(AIMachineEventType.LOGIN); } }); diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/AgentExecutor.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/AgentExecutor.ts index b2aa831b853..9095126e5c7 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/AgentExecutor.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/AgentExecutor.ts @@ -17,23 +17,36 @@ */ import { AICommandExecutor, AICommandConfig, AIExecutionResult } from '../executors/base/AICommandExecutor'; -import { Command, GenerateAgentCodeRequest, ProjectSource, EVENT_TYPE, MACHINE_VIEW, refreshReviewMode, ExecutionContext } from '@wso2/ballerina-core'; +import { Command, GenerateAgentCodeRequest, ProjectSource, MACHINE_VIEW, refreshReviewMode, ExecutionContext } from '@wso2/ballerina-core'; import { ModelMessage, stepCountIs, streamText, TextStreamPart } from 'ai'; import { getAnthropicClient, getProviderCacheControl, ANTHROPIC_SONNET_4 } from '../utils/ai-client'; import { populateHistoryForAgent, getErrorMessage } from '../utils/ai-utils'; import { sendAgentDidOpenForFreshProjects } from '../utils/project/ls-schema-notifications'; import { getSystemPrompt, getUserPrompt } from './prompts'; -import { GenerationType, getAllLibraries } from '../utils/libs/libraries'; +import { GenerationType } from '../utils/libs/libraries'; import { createToolRegistry } from './tool-registry'; import { getProjectSource, cleanupTempProject } from '../utils/project/temp-project'; import { StreamContext } from './stream-handlers/stream-context'; import { checkCompilationErrors } from './tools/diagnostics-utils'; import { updateAndSaveChat } from '../utils/events'; import { chatStateStorage } from '../../../views/ai-panel/chatStateStorage'; -import { openView } from '../../../stateMachine'; import { RPCLayer } from '../../../RPCLayer'; import { VisualizerWebview } from '../../../views/visualizer/webview'; import * as path from 'path'; +import { approvalViewManager } from '../state/ApprovalViewManager'; +import { + sendTelemetryEvent, + sendTelemetryException, + TM_EVENT_BALLERINA_AI_GENERATION_COMPLETED, + TM_EVENT_BALLERINA_AI_GENERATION_ABORTED, + TM_EVENT_BALLERINA_AI_GENERATION_FAILED, + CMP_BALLERINA_AI_GENERATION +} from "../../telemetry"; +import { extension } from "../../../BalExtensionContext"; +import { getProjectMetrics } from "../../telemetry/common/project-metrics"; +import { getHashedProjectId } from "../../telemetry/common/project-id"; +import { workspace } from 'vscode'; +import { runningServicesManager } from './tools/running-service-manager'; /** * Determines which packages have been affected by analyzing modified files @@ -70,7 +83,7 @@ function determineAffectedPackages( for (const project of projects) { if (project.packagePath === "") { // Root package in workspace (edge case) - if (!modifiedFile.includes('/') || + if (!modifiedFile.includes('/') || !projects.some(p => p.packagePath && modifiedFile.startsWith(p.packagePath + '/'))) { // Root package is at the temp project path directly affectedPackages.add(tempProjectPath); @@ -80,7 +93,7 @@ function determineAffectedPackages( } } else { // Package with a specific path in workspace - if (modifiedFile.startsWith(project.packagePath + '/') || + if (modifiedFile.startsWith(project.packagePath + '/') || modifiedFile === project.packagePath) { // Map to temp package path: tempProjectPath + relative package path const tempPackagePath = path.join(tempProjectPath, project.packagePath); @@ -136,6 +149,8 @@ export class AgentExecutor extends AICommandExecutor { const tempProjectPath = this.config.executionContext.tempProjectPath!; const params = this.config.params; // Access params from config const modifiedFiles: string[] = []; + const generationStartTime = Date.now(); + const projectId = await getHashedProjectId(this.config.executionContext.projectPath); try { // 1. Get project sources from temp directory @@ -181,27 +196,21 @@ export class AgentExecutor extends AICommandExecutor { }, ]; - // Get libraries for library provider tool - const allLibraries = await getAllLibraries(GenerationType.CODE_GENERATION); - const libraryDescriptions = allLibraries.length > 0 - ? allLibraries.map((lib) => `- ${lib.name}: ${lib.description}`).join("\n") - : "- No libraries available"; - // Create tools const tools = createToolRegistry({ eventHandler: this.config.eventHandler, tempProjectPath, modifiedFiles, projects, - libraryDescriptions, generationType: GenerationType.CODE_GENERATION, workspaceId: this.config.executionContext.projectPath, generationId: this.config.generationId, threadId: 'default', + runningServices: runningServicesManager, }); // Stream LLM response - const { fullStream, response } = streamText({ + const { fullStream, response, usage } = streamText({ model: await getAnthropicClient(ANTHROPIC_SONNET_4), maxOutputTokens: 8192, temperature: 0, @@ -223,7 +232,10 @@ export class AgentExecutor extends AICommandExecutor { messageId: this.config.generationId, userMessageContent, response, + usage, ctx: this.config.executionContext, + generationStartTime, + projectId, }; // Process stream events - NATIVE V6 PATTERN @@ -279,6 +291,21 @@ Generation stopped by user. The last in-progress task was not saved. Files have chatStateStorage.declineAllReviews(workspaceId, threadId); } + // Send telemetry for generation abort + const abortTime = Date.now(); + sendTelemetryEvent( + extension.ballerinaExtInstance, + TM_EVENT_BALLERINA_AI_GENERATION_ABORTED, + CMP_BALLERINA_AI_GENERATION, + { + 'message.id': this.config.generationId, + 'project.id': projectId, + 'generation.start_time': generationStartTime.toString(), + 'generation.abort_time': abortTime.toString(), + 'generation.modified_files_count': modifiedFiles.length.toString(), + } + ); + // Note: Abort event is sent by base class handleExecutionError() } @@ -298,7 +325,7 @@ Generation stopped by user. The last in-progress task was not saved. Files have this.config.eventHandler({ type: "error", - content: "An error occurred during agent execution. Plese check the logs for details." + content: "An error occurred during agent execution. Please check the logs for details." }); // For other errors, return result with error @@ -307,6 +334,9 @@ Generation stopped by user. The last in-progress task was not saved. Files have modifiedFiles, error: error as Error, }; + } finally { + // Stop all services started during this agent loop + runningServicesManager.stopAll(); } } @@ -373,6 +403,25 @@ Generation stopped by user. The last in-progress task was not saved. Files have }); } + // Send telemetry for generation failed + const errorTime = Date.now(); + sendTelemetryException( + extension.ballerinaExtInstance, + error, + CMP_BALLERINA_AI_GENERATION, + { + 'event.name': TM_EVENT_BALLERINA_AI_GENERATION_FAILED, + 'message.id': context.messageId, + 'project.id': context.projectId, + 'error.message': getErrorMessage(error), + 'error.type': error.name || 'Unknown', + 'error.code': (error as any)?.code || 'N/A', + 'generation.start_time': context.generationStartTime.toString(), + 'generation.error_time': errorTime.toString(), + 'generation.duration_ms': (errorTime - context.generationStartTime).toString(), + } + ); + context.eventHandler({ type: "error", content: getErrorMessage(error) @@ -394,6 +443,37 @@ Generation stopped by user. The last in-progress task was not saved. Files have diagnostics: finalDiagnostics.diagnostics }); + // Send telemetry for generation completion + const generationEndTime = Date.now(); + const isPlanModeEnabled = workspace.getConfiguration('ballerina.ai').get('planMode', false); + const finalProjectMetrics = await getProjectMetrics(tempProjectPath); + + // Get token usage from streamText result + const tokenUsage = await context.usage; + const inputTokens = tokenUsage.inputTokens || 0; + const outputTokens = tokenUsage.outputTokens || 0; + const totalTokens = tokenUsage.totalTokens || 0; + + // Send telemetry for generation complete + sendTelemetryEvent( + extension.ballerinaExtInstance, + TM_EVENT_BALLERINA_AI_GENERATION_COMPLETED, + CMP_BALLERINA_AI_GENERATION, + { + 'message.id': context.messageId, + 'project.id': context.projectId, + 'generation.modified_files_count': context.modifiedFiles.length.toString(), + 'generation.start_time': context.generationStartTime.toString(), + 'generation.end_time': generationEndTime.toString(), + 'plan_mode': isPlanModeEnabled.toString(), + 'project.files_after': finalProjectMetrics.fileCount.toString(), + 'project.lines_after': finalProjectMetrics.lineCount.toString(), + 'tokens.input': inputTokens.toString(), + 'tokens.output': outputTokens.toString(), + 'tokens.total': totalTokens.toString(), + } + ); + // Update chat state storage await this.updateChatState(context, assistantMessages, tempProjectPath); @@ -456,9 +536,8 @@ Generation stopped by user. The last in-progress task was not saved. Files have affectedPackagePaths: affectedPackagePaths, }); - // Automatically open review mode - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.ReviewMode }); - console.log("[AgentExecutor] Automatically opened review mode"); + // Open ReviewMode + approvalViewManager.openView(MACHINE_VIEW.ReviewMode); // Notify ReviewMode component to refresh its data setTimeout(() => { diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/index.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/index.ts index a4178bce660..94222509d10 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/index.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/index.ts @@ -21,6 +21,14 @@ import { chatStateStorage } from '../../../views/ai-panel/chatStateStorage'; import { AICommandConfig } from "../executors/base/AICommandExecutor"; import { createWebviewEventHandler } from "../utils/events"; import { AgentExecutor } from './AgentExecutor'; +import { + sendTelemetryEvent, + TM_EVENT_BALLERINA_AI_GENERATION_SUBMITTED, + CMP_BALLERINA_AI_GENERATION +} from "../../telemetry"; +import { extension } from "../../../BalExtensionContext"; +import { getProjectMetrics } from "../../telemetry/common/project-metrics"; +import { getHashedProjectId } from "../../telemetry/common/project-id"; // ================================== // Agent Generation Functions @@ -83,6 +91,29 @@ export async function generateAgent(params: GenerateAgentCodeRequest): Promise 0).toString(), + 'chat.has_history': (chatHistory.length > 0).toString(), + 'chat.history_length': chatHistory.length.toString(), + } + ); + await new AgentExecutor(config).run(); return true; diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/np/prompts.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/np/prompts.ts index 5a74ec2e419..f241e52f691 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/np/prompts.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/np/prompts.ts @@ -14,6 +14,8 @@ // specific language governing permissions and limitations // under the License. +import { CONFIG_COLLECTOR_TOOL } from "../tools/config-collector"; + export const REQUIREMENTS_DOCUMENT_KEY: string = "user_requirements_file"; export function getRequirementAnalysisCodeGenPrefix(requirementAnalysisDocument: string) { @@ -93,6 +95,12 @@ You are an expert test automation engineer specializing in generating test artif 2. Create Ballerina test module with: - Network client configurations (if required, e.g., HTTP, GraphQL, WebSocket, etc.) + - Setup test configuration (if main code uses it): + * If main code uses configuration values (API keys, tokens, passwords), use ${CONFIG_COLLECTOR_TOOL} + * Set mode: "collect", isTestConfig: true + * Tell user: "Setting up test configuration based on main configuration" + * The tool will automatically handle reading from main config and saving to tests/Config.toml + * Example: { mode: "collect", variables: [{ name: "API_KEY", description: "Stripe API key", type: "string" }], isTestConfig: true } - Test data factories - Reusable validation functions diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/prompts.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/prompts.ts index af8bb6f8bf0..257f1405d80 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/prompts.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/prompts.ts @@ -15,10 +15,13 @@ // under the License. import { DIAGNOSTICS_TOOL_NAME } from "./tools/diagnostics"; -import { LIBRARY_PROVIDER_TOOL } from "../utils/libs/libraries"; +import { LIBRARY_GET_TOOL } from "./tools/library-get"; +import { LIBRARY_SEARCH_TOOL } from "./tools/library-search"; import { TASK_WRITE_TOOL_NAME } from "./tools/task-writer"; import { FILE_BATCH_EDIT_TOOL_NAME, FILE_SINGLE_EDIT_TOOL_NAME, FILE_WRITE_TOOL_NAME } from "./tools/text-editor"; import { CONNECTOR_GENERATOR_TOOL } from "./tools/connector-generator"; +import { CONFIG_COLLECTOR_TOOL } from "./tools/config-collector"; +import { TEST_RUNNER_TOOL_NAME } from "./tools/test-runner"; import { getLanglibInstructions } from "../utils/libs/langlibs"; import { formatCodebaseStructure, formatCodeContext } from "./utils"; import { GenerateAgentCodeRequest, OperationType, ProjectSource } from "@wso2/ballerina-core"; @@ -70,6 +73,9 @@ This plan will be visible to the user and the execution will be guided on the ta - This step should only contain the Client initialization. 3. 'implementation' - for all the other implementations. Have resource function implementations in its own task. +4. 'testing' +- Responsible for writing test cases that cover the core logic of the implementation. +- Include this task only if the user has explicitly asked for tests. Skip it otherwise. #### Task Breakdown Example 1. Create the HTTP service contract @@ -83,24 +89,24 @@ This plan will be visible to the user and the execution will be guided on the ta **Execution Flow**: 1. Think about and explain your high-level design plan to the user -2. After explaining the plan, output: Planning... -3. Then immediately call ${TASK_WRITE_TOOL_NAME} with the broken down tasks (DO NOT write any text after the toolcall tag) +2. Immediately call ${TASK_WRITE_TOOL_NAME} with ALL tasks and **isPlanApproval: true** 4. The tool will wait for PLAN APPROVAL from the user -5. Once plan is APPROVED (success: true in tool response), IMMEDIATELY start the execution cycle: +5. If the user requests changes, revise the task list and call ${TASK_WRITE_TOOL_NAME} again with **isPlanApproval: true** +6. Once plan is APPROVED (success: true in tool response), IMMEDIATELY start the execution cycle: **For each task:** - - Mark task as in_progress using ${TASK_WRITE_TOOL_NAME} and immediately start implementation in parallel (single message with multiple tool calls) + - Mark task as in_progress using ${TASK_WRITE_TOOL_NAME} and immediately start implementation in parallel (single message with multiple tool calls). **IMPORTANT: ${TASK_WRITE_TOOL_NAME} MUST always be the FIRST tool call in the message — place it before any other parallel tool calls.** - Implement the task completely (write the Ballerina code) - When implementing external API integrations: - - First check ${LIBRARY_PROVIDER_TOOL} for known services (Stripe, GitHub, etc.) - - If NOT available, call ${CONNECTOR_GENERATOR_TOOL} to generate connector from OpenAPI spec - - Before marking the task as completed, use the ${DIAGNOSTICS_TOOL_NAME} tool to check for compilation errors and fix them. Introduce a a new subtask if needed to fix errors. - - Mark task as completed using ${TASK_WRITE_TOOL_NAME} (send ALL tasks) - - The tool will wait for TASK COMPLETION APPROVAL from the user - - Once approved (success: true), immediately start the next task + - First use ${LIBRARY_SEARCH_TOOL} with relevant keywords to discover available libraries + - Then use ${LIBRARY_GET_TOOL} to fetch full details for the discovered libraries + - If NO suitable library is found, call ${CONNECTOR_GENERATOR_TOOL} to generate connector from OpenAPI spec + - Before marking the task as completed, use ${DIAGNOSTICS_TOOL_NAME} to check for compilation errors and fix them. + - Mark task as completed using ${TASK_WRITE_TOOL_NAME} (send ALL tasks, no approval flags) — the agent continues automatically. **IMPORTANT: When marking a task as completed in a message with other tool calls, ${TASK_WRITE_TOOL_NAME} MUST always be the LAST tool call in the message.** + - After completing a logical unit of work (a set of related tasks), set **requestReview: true** on the TaskWrite call to let the user review before continuing. Do NOT set this after every single task. - Repeat until ALL tasks are done -6. **Critical**: After each approval (both plan and task completions), immediately proceed to the next step without any delay or additional prompting +7. **Critical**: Unless requestReview is set, immediately proceed to the next task after each completion without delay or prompting **User Communication**: - Using the task_write tool will automatically show progress to the user via a task list @@ -111,18 +117,18 @@ This plan will be visible to the user and the execution will be guided on the ta In the tags, you will see if Edit mode is enabled. When its enabled, you must follow the below instructions strictly. ### Step 1: Create High-Level Design -Create a very high-level and concise design plan for the given user requirement. Avoid using ${TASK_WRITE_TOOL_NAME} tool in this mode. +Plan the implementation approach in your reasoning. Keep output minimal — no design explanations or step-by-step plans. Avoid using ${TASK_WRITE_TOOL_NAME} tool in this mode. -### Step 2: Identify nescessary libraries -Identify the libraries required to implement the user requirement. Use the ${LIBRARY_PROVIDER_TOOL} tool to get the information about the libraries. +### Step 2: Identify necessary libraries +Identify the libraries required to implement the user requirement. Use ${LIBRARY_SEARCH_TOOL} to discover relevant libraries, then use ${LIBRARY_GET_TOOL} to fetch their full details. ### Step 3: Write the code Write/modify the Ballerina code to implement the user requirement. Use the ${FILE_BATCH_EDIT_TOOL_NAME}, ${FILE_SINGLE_EDIT_TOOL_NAME}, ${FILE_WRITE_TOOL_NAME} tools to write/modify the code. ### Step 4: Validate the code -Once the task is done, Always use ${DIAGNOSTICS_TOOL_NAME} tool to check for compilation errors and fix them. -You can use this tool multiple times after making changes to ensure there are no compilation errors. -If you think you can't fix the error after multiple attempts, make sure to keep bring the code into a good state and finish off the task. +Once the code is written, always use ${DIAGNOSTICS_TOOL_NAME} to check for compilation errors and fix them. You may call it multiple times after making changes. +If errors cannot be resolved after multiple attempts, bring the code to a good state and finish the task. +Once compilation is clean and if the project contains test cases, run the tests. ### Step 5: Provide a consise summary Once the code is written and validated, provide a very concise summary of the overall changes made. Avoid adding detailed explanations and NEVER create documentations files via ${FILE_WRITE_TOOL_NAME}. @@ -131,8 +137,8 @@ Once the code is written and validated, provide a very concise summary of the ov When generating Ballerina code strictly follow these syntax and structure guidelines: ## Library Usage and Importing libraries -- Only use the libraries received from user query or the ${LIBRARY_PROVIDER_TOOL} tool or langlibs. -- Examine the library API documentation provided by the ${LIBRARY_PROVIDER_TOOL} carefully. Strictly follow the type definitions, function signatures, and all the other details provided when writing the code. +- Only use the libraries received from user query or discovered via ${LIBRARY_SEARCH_TOOL} and fetched via ${LIBRARY_GET_TOOL}, or langlibs. +- Examine the library API documentation provided by ${LIBRARY_GET_TOOL} carefully. Strictly follow the type definitions, function signatures, and all the other details provided when writing the code. - Each .bal file must include its own import statements for any external library references. - Do not import default langlibs (lang.string, lang.boolean, lang.float, lang.decimal, lang.int, lang.map). - For packages with dots in names, use aliases: \`import org/package.one as one;\` @@ -141,7 +147,7 @@ When generating Ballerina code strictly follow these syntax and structure guidel - In the library API documentation, if the service type is specified as generic, adhere to the instructions specified there on writing the service. - For GraphQL service related queries, if the user hasn't specified their own GraphQL Schema, write the proposed GraphQL schema for the user query right after the explanation before generating the Ballerina code. Use the same names as the GraphQL Schema when defining record types. - Some libaries has instructions field in their API documentation. Follow those instructions strictly when using those libraries. -- You should only generate tests if the user explicitly asks for them in the query. You must use the 'ballerina/test' and whatever services associated when writing tests. Respect the instructions field in ballerina/test library and testGenerationInstruction field in whatever library associated with the service in the library API documentation when writing tests. +- When writing tests, use the 'ballerina/test' module and any service-specific test libraries. Respect the instructions field in ballerina/test library and the testGenerationInstruction field in the associated service library API documentation when writing tests. ${getLanglibInstructions()} @@ -149,7 +155,7 @@ ${getLanglibInstructions()} - If the codebase structure shows connector modules in generated/moduleName, import using: import packageName.moduleName ## Code Structure -- Define required configurables for the query. Use only string, int, decimal, boolean types in configurable variables. +- Define required configurables for the query. Use only string, int, decimal, boolean types in configurable variables. Never assign hardcoded default values to configurables. - Initialize any necessary clients with the correct configuration based on the retrieved libraries at the module level (before any function or service declarations). - Implement the main function OR service to address the query requirements. @@ -169,7 +175,7 @@ ${getLanglibInstructions()} - Mention types EXPLICITLY in variable declarations and foreach statements. - To narrow down a union type(or optional type), always declare a separate variable and then use that variable in the if condition. -# File modifications +## File modifications - You must apply changes to the existing source code using the provided ${[ FILE_BATCH_EDIT_TOOL_NAME, FILE_SINGLE_EDIT_TOOL_NAME, @@ -179,9 +185,22 @@ ${getLanglibInstructions()} )} tools. The complete existing source code will be provided in the section of the user prompt. - When making replacements inside an existing file, provide the **exact old string** and the **exact new string** with all newlines, spaces, and indentation, being mindful to replace nearby occurrences together to minimize the number of tool calls. - Do NOT create a new markdown file to document each change or summarize your work unless specifically requested by the user. -- Do not add/modify toml files (Config.toml/Ballerina.toml/Dependencies.toml) as you don't have access to those files. +- Do not manually add/modify toml files (Ballerina.toml/Dependencies.toml). +- NEVER read Config.toml or tests/Config.toml directly as it contains sensitive values. - Prefer modifying existing bal files over creating new files unless explicitly asked to create a new file in the query. +# Running, invoking and tests +- You should only Run or write tests if the user explicitly asks to do so. +- Providing values to configurables is a runtime task and should only do it before running or executing the tests. +- For Config.toml configuration value management, use ${CONFIG_COLLECTOR_TOOL} to request for values. Check the different modes of the tool for various usecases. +- Make sure to stop service once you are done using it. + +## Test Runner +When running tests: +1. Tell the user what is being tested in one line. +2. Use ${TEST_RUNNER_TOOL_NAME} to run the test suite. +3. Only if there are failures or errors, briefly mention what failed and fix them, then re-run. + ${getNPSuffix(projects, op)} `; } diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/stream-handlers/stream-context.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/stream-handlers/stream-context.ts index d78bd5d737d..21b2e74abff 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/stream-handlers/stream-context.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/stream-handlers/stream-context.ts @@ -38,6 +38,13 @@ export interface StreamContext { // Response promise (for message history and abort/finish handling) response: StreamTextResult['response']; + // Token usage promise (for telemetry) + usage: StreamTextResult['usage']; + // Execution context (for workspace integration) ctx: ExecutionContext; + + // Telemetry tracking + generationStartTime: number; + projectId: string; } diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tool-registry.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tool-registry.ts index 9de1be76dd7..0c7527bd735 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tool-registry.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tool-registry.ts @@ -35,25 +35,33 @@ import { FILE_SINGLE_EDIT_TOOL_NAME, FILE_WRITE_TOOL_NAME } from './tools/text-editor'; -import { getLibraryProviderTool } from './tools/library-provider'; -import { LIBRARY_PROVIDER_TOOL, GenerationType } from '../utils/libs/libraries'; +import { getLibraryGetTool, LIBRARY_GET_TOOL } from './tools/library-get'; +import { GenerationType } from '../utils/libs/libraries'; import { getHealthcareLibraryProviderTool, HEALTHCARE_LIBRARY_PROVIDER_TOOL } from './tools/healthcare-library'; import { createConnectorGeneratorTool, CONNECTOR_GENERATOR_TOOL } from './tools/connector-generator'; +import { LIBRARY_SEARCH_TOOL, getLibrarySearchTool } from './tools/library-search'; +import { createConfigCollectorTool, CONFIG_COLLECTOR_TOOL } from './tools/config-collector'; +import { createTestRunnerTool, TEST_RUNNER_TOOL_NAME } from './tools/test-runner'; +import { createCurlTool, CURL_TOOL_NAME } from './tools/curl-tool'; +import { createBallerinaRunTool, BALLERINA_RUN_TOOL_NAME } from './tools/ballerina-run'; +import { createBallerinaGetLogsTool, BALLERINA_GET_LOGS_TOOL_NAME } from './tools/ballerina-get-logs'; +import { createBallerinaStopTool, BALLERINA_STOP_TOOL_NAME } from './tools/ballerina-stop'; +import { RunningServicesManager } from './tools/running-service-manager'; export interface ToolRegistryOptions { eventHandler: CopilotEventHandler; tempProjectPath: string; modifiedFiles: string[]; projects: ProjectSource[]; - libraryDescriptions: string; generationType: GenerationType; workspaceId: string; generationId: string; threadId?: string; + runningServices: RunningServicesManager; } export function createToolRegistry(opts: ToolRegistryOptions) { - const { eventHandler, tempProjectPath, modifiedFiles, projects, libraryDescriptions, generationType, workspaceId, generationId, threadId } = opts; + const { eventHandler, tempProjectPath, modifiedFiles, projects, generationType, workspaceId, generationId, threadId } = opts; return { [TASK_WRITE_TOOL_NAME]: createTaskWriteTool( eventHandler, @@ -63,13 +71,14 @@ export function createToolRegistry(opts: ToolRegistryOptions) { generationId, threadId || 'default' ), - [LIBRARY_PROVIDER_TOOL]: getLibraryProviderTool( - libraryDescriptions, + [LIBRARY_GET_TOOL]: getLibraryGetTool( generationType, eventHandler ), + [LIBRARY_SEARCH_TOOL]: getLibrarySearchTool( + eventHandler + ), [HEALTHCARE_LIBRARY_PROVIDER_TOOL]: getHealthcareLibraryProviderTool( - libraryDescriptions, eventHandler ), [CONNECTOR_GENERATOR_TOOL]: createConnectorGeneratorTool( @@ -78,6 +87,14 @@ export function createToolRegistry(opts: ToolRegistryOptions) { projects[0].projectName, modifiedFiles ), + [CONFIG_COLLECTOR_TOOL]: createConfigCollectorTool( + eventHandler, + { + tempPath: tempProjectPath, + workspacePath: workspaceId + }, + modifiedFiles + ), [FILE_WRITE_TOOL_NAME]: createWriteTool( createWriteExecute(eventHandler, tempProjectPath, modifiedFiles) ), @@ -91,5 +108,10 @@ export function createToolRegistry(opts: ToolRegistryOptions) { createReadExecute(eventHandler, tempProjectPath) ), [DIAGNOSTICS_TOOL_NAME]: createDiagnosticsTool(tempProjectPath, eventHandler), + [TEST_RUNNER_TOOL_NAME]: createTestRunnerTool(tempProjectPath, eventHandler), + [CURL_TOOL_NAME]: createCurlTool(eventHandler), + [BALLERINA_RUN_TOOL_NAME]: createBallerinaRunTool(tempProjectPath, opts.runningServices, eventHandler), + [BALLERINA_GET_LOGS_TOOL_NAME]: createBallerinaGetLogsTool(opts.runningServices, eventHandler), + [BALLERINA_STOP_TOOL_NAME]: createBallerinaStopTool(opts.runningServices, eventHandler), }; } diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/ballerina-get-logs.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/ballerina-get-logs.ts new file mode 100644 index 00000000000..046402d8b39 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/ballerina-get-logs.ts @@ -0,0 +1,103 @@ +// Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import { tool } from 'ai'; +import { z } from 'zod'; +import { CopilotEventHandler } from '../../utils/events'; +import { RunningServicesManager } from './running-service-manager'; +import { BALLERINA_RUN_TOOL_NAME } from './ballerina-run'; + +export const BALLERINA_GET_LOGS_TOOL_NAME = "getServiceLogs"; + +const BallerinaGetLogsInputSchema = z.object({ + taskId: z.string().describe(`The taskId returned by ${BALLERINA_RUN_TOOL_NAME}.`), + waitTime: z.number().optional().describe("Seconds to wait before reading logs, allowing the service to produce output. Default: 2."), +}); + +export function createBallerinaGetLogsTool( + runningServices: RunningServicesManager, + eventHandler: CopilotEventHandler +) { + return tool({ + description: `Retrieves new log output from a running Ballerina service or program. + +**Usage:** After starting a service with \`${BALLERINA_RUN_TOOL_NAME}\`, use this tool with the returned \`taskId\` to read its output. Each call returns only **new** output since the last call. +`, + inputSchema: BallerinaGetLogsInputSchema, + execute: async (input, context?: { toolCallId?: string }) => { + const toolCallId = context?.toolCallId || `fallback-${Date.now()}`; + + eventHandler({ + type: "tool_call", + toolName: BALLERINA_GET_LOGS_TOOL_NAME, + toolCallId, + }); + + const result = await getLogs(input, runningServices); + + eventHandler({ + type: "tool_result", + toolName: BALLERINA_GET_LOGS_TOOL_NAME, + toolCallId, + toolOutput: { status: result.status }, + }); + + return result; + } + }); +} + +async function getLogs( + input: z.infer, + runningServices: RunningServicesManager +): Promise> { + const service = runningServices.get(input.taskId); + if (!service) { + return { + status: "not_found", + message: `No running service with taskId '${input.taskId}'. Use ${BALLERINA_RUN_TOOL_NAME} first.`, + }; + } + + const waitTime = (input.waitTime ?? 2) * 1000; + await new Promise(resolve => setTimeout(resolve, waitTime)); + + const newLogs = service.logs.slice(service.logCursor).join(''); + service.logCursor = service.logs.length; + + if (service.exited) { + return { + status: "exited", + exitCode: service.exitCode, + logs: newLogs, + message: `Service has exited with code ${service.exitCode}.`, + }; + } + + if (newLogs.length === 0) { + return { + status: "running", + logs: "", + message: "No new output since last check.", + }; + } + + return { + status: "running", + logs: newLogs, + message: `${newLogs.split('\n').length} new log lines.`, + }; +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/ballerina-run.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/ballerina-run.ts new file mode 100644 index 00000000000..d7533432fe5 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/ballerina-run.ts @@ -0,0 +1,224 @@ +// Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import * as path from 'path'; +import * as crypto from 'crypto'; +import { tool } from 'ai'; +import { z } from 'zod'; +import { CopilotEventHandler } from '../../utils/events'; +import { extension } from '../../../../BalExtensionContext'; +import { RunningServicesManager, createProcessTerminal, killProcessGroup } from './running-service-manager'; +import { DIAGNOSTICS_TOOL_NAME } from './diagnostics'; +import { getRunCommand } from '../../../project/cmds/cmd-runner'; + +export const BALLERINA_RUN_TOOL_NAME = "runBallerinaPackage"; + +const BallerinaRunInputSchema = z.object({ + runType: z.enum(["main", "service"]), + packagePath: z.string().optional().describe("Relative path to the package directory from the project root. Leave empty for the default/root package."), + timeout: z.number().optional().describe("Timeout in milliseconds for main programs. Default: 120000. Ignored for services."), +}); + +const DEFAULT_MAIN_TIMEOUT = 120000; +const DEFAULT_SERVICE_READY_TIMEOUT = 60000; + +export function createBallerinaRunTool( + tempProjectPath: string, + runningServices: RunningServicesManager, + eventHandler: CopilotEventHandler +) { + return tool({ + description: `Runs a Ballerina package using \`bal run\` in a VS Code terminal. + +**Prerequisites:** The project must compile cleanly. Always run \`${DIAGNOSTICS_TOOL_NAME}\` first and resolve all compilation errors before invoking this tool. + +**Modes:** +- \`service\`: Starts a long-running service. Returns immediately with a \`taskId\`. Use \`getServiceLogs\` to check output and \`stopBallerinaService\` to stop it. +- \`main\`: Runs a main function to completion. Waits for the program to exit and returns its output. + +**REQUIRED before calling this tool:** You MUST tell the user what you are about to run and why. +`, + inputSchema: BallerinaRunInputSchema, + execute: async (input, context?: { toolCallId?: string }) => { + const toolCallId = context?.toolCallId || `fallback-${Date.now()}`; + + eventHandler({ + type: "tool_call", + toolName: BALLERINA_RUN_TOOL_NAME, + toolCallId, + }); + + const result = await executeRun(input, tempProjectPath, runningServices); + + eventHandler({ + type: "tool_result", + toolName: BALLERINA_RUN_TOOL_NAME, + toolCallId, + toolOutput: { status: result.status }, + }); + + return result; + } + }); +} + +async function executeRun( + input: z.infer, + tempProjectPath: string, + runningServices: RunningServicesManager +): Promise> { + const cwd = input.packagePath + ? path.resolve(tempProjectPath, input.packagePath) + : tempProjectPath; + + const balCmd = extension.ballerinaExtInstance.getBallerinaCmd(); + const runCmd = getRunCommand(); + const taskId = crypto.randomUUID().slice(0, 4); + const packageName = input.packagePath || path.basename(tempProjectPath); + + const logs: string[] = []; + const { terminal, process: proc } = createProcessTerminal( + `Bal: ${packageName}`, + balCmd, + [runCmd], + cwd, + logs + ); + terminal.show(true); + + const service = { + taskId, + terminal, + process: proc, + logs, + logCursor: 0, + packagePath: cwd, + startedAt: Date.now(), + exited: false, + exitCode: null as number | null, + }; + + // Track process exit + proc.on('close', (code) => { + service.exited = true; + service.exitCode = code ?? null; + }); + + runningServices.register(service); + + if (input.runType === "service") { + const readyResult = await waitForServiceReady(service, DEFAULT_SERVICE_READY_TIMEOUT); + + if (!readyResult.ready) { + killProcessGroup(proc, 'SIGTERM'); + terminal.dispose(); + runningServices.remove(taskId); + return { + status: "error", + exitCode: service.exitCode, + output: readyResult.logs, + message: readyResult.timedOut + ? "Service did not become ready within the timeout. Check output for details." + : "Service exited before becoming ready. Check output for details.", + }; + } + + return { + status: "started", + taskId, + output: readyResult.logs, + message: "Service is running. Use getServiceLogs to check further output, stopBallerinaService to stop it.", + }; + } + + // Main mode: wait for completion + const timeout = input.timeout ?? DEFAULT_MAIN_TIMEOUT; + const completionResult = await waitForCompletion(service, timeout); + + if (completionResult.timedOut) { + killProcessGroup(proc, 'SIGTERM'); + terminal.dispose(); + runningServices.remove(taskId); + return { + status: "timeout", + output: completionResult.logs, + message: `Program did not complete within ${timeout}ms. It may be a long-running service — use runType "service" instead.`, + }; + } + + runningServices.remove(taskId); + return { + status: service.exitCode === 0 ? "completed" : "error", + exitCode: service.exitCode, + output: completionResult.logs, + message: service.exitCode === 0 + ? "Program completed successfully." + : "Build or runtime error. Check output for details.", + }; +} + +async function waitForServiceReady( + service: { exited: boolean; exitCode: number | null; logs: string[] }, + timeout: number +): Promise<{ ready: boolean; logs: string; timedOut: boolean }> { + const startTime = Date.now(); + const pollInterval = 200; + + return new Promise((resolve) => { + const check = () => { + const logs = service.logs.join(''); + + if (logs.includes('Running executable')) { + resolve({ ready: true, logs, timedOut: false }); + return; + } + + if (service.exited) { + resolve({ ready: false, logs, timedOut: false }); + return; + } + + if (Date.now() - startTime >= timeout) { + resolve({ ready: false, logs, timedOut: true }); + return; + } + + setTimeout(check, pollInterval); + }; + + check(); + }); +} + +async function waitForCompletion( + service: { exited: boolean; exitCode: number | null; logs: string[] }, + timeout: number +): Promise<{ logs: string; timedOut: boolean }> { + const startTime = Date.now(); + const pollInterval = 500; + + while (!service.exited && (Date.now() - startTime) < timeout) { + await new Promise(resolve => setTimeout(resolve, pollInterval)); + } + + const logs = service.logs.join(''); + + if (!service.exited) { + return { logs, timedOut: true }; + } + + return { logs, timedOut: false }; +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/ballerina-stop.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/ballerina-stop.ts new file mode 100644 index 00000000000..0e7cd3d1612 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/ballerina-stop.ts @@ -0,0 +1,97 @@ +// Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import { tool } from 'ai'; +import { z } from 'zod'; +import { CopilotEventHandler } from '../../utils/events'; +import { RunningServicesManager, waitForExit, killProcessGroup } from './running-service-manager'; +import { BALLERINA_RUN_TOOL_NAME } from './ballerina-run'; + +export const BALLERINA_STOP_TOOL_NAME = "stopBallerinaService"; + +const BallerinaStopInputSchema = z.object({ + taskId: z.string().describe(`The taskId returned by ${BALLERINA_RUN_TOOL_NAME}.`), +}); + +export function createBallerinaStopTool( + runningServices: RunningServicesManager, + eventHandler: CopilotEventHandler +) { + return tool({ + description: `Stops a running Ballerina service or program by disposing its terminal. + +**Usage:** Pass the \`taskId\` from \`${BALLERINA_RUN_TOOL_NAME}\` to stop the service and close its terminal. +`, + inputSchema: BallerinaStopInputSchema, + execute: async (input, context?: { toolCallId?: string }) => { + const toolCallId = context?.toolCallId || `fallback-${Date.now()}`; + + eventHandler({ + type: "tool_call", + toolName: BALLERINA_STOP_TOOL_NAME, + toolCallId, + }); + + const result = await stopService(input, runningServices); + + eventHandler({ + type: "tool_result", + toolName: BALLERINA_STOP_TOOL_NAME, + toolCallId, + toolOutput: { status: result.status }, + }); + + return result; + } + }); +} + +async function stopService( + input: z.infer, + runningServices: RunningServicesManager +): Promise> { + const service = runningServices.get(input.taskId); + if (!service) { + return { + status: "not_found", + message: `No running service with taskId '${input.taskId}'.`, + }; + } + + if (service.exited) { + service.terminal.dispose(); + runningServices.remove(input.taskId); + return { + status: "already_exited", + exitCode: service.exitCode, + message: `Service had already exited with code ${service.exitCode}.`, + }; + } + + if (!service.process.killed) { + killProcessGroup(service.process, 'SIGTERM'); + } + + await waitForExit(service.process); + + service.terminal.dispose(); + runningServices.remove(input.taskId); + + return { + status: "stopped", + message: "Service stopped and terminal closed.", + }; +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/config-collector.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/config-collector.ts new file mode 100644 index 00000000000..f9ff1914c20 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/config-collector.ts @@ -0,0 +1,416 @@ +// Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import { tool } from "ai"; +import * as crypto from "crypto"; +import * as fs from "fs"; +import * as path from "path"; +import { z } from "zod"; +import { CopilotEventHandler } from "../../utils/events"; +import { approvalManager } from "../../state/ApprovalManager"; +import { + ConfigVariable, + getAllConfigStatus, + validateVariableName, + writeConfigValuesToConfig, + createStatusMetadata, + readExistingConfigValues, +} from "../../../../utils/toml-utils"; + +export const CONFIG_COLLECTOR_TOOL = "ConfigCollector"; + +// Constants for config file paths +const CONFIG_FILE_PATH = "Config.toml"; +const TEST_CONFIG_FILE_PATH = "tests/Config.toml"; + +const ConfigVariableSchema = z.object({ + name: z.string().describe("Variable name in camelCase — must match the Ballerina configurable identifier exactly"), + description: z.string().describe("Human-readable description"), + type: z.enum(["string", "int"]).optional().describe("Data type: string (default) or int"), + secret: z.boolean().optional().describe("Mark as true for sensitive values (API keys, passwords, tokens) to render as a masked input"), +}); + +const ConfigCollectorSchema = z.object({ + mode: z.enum(["collect", "check"]).describe("Operation mode"), + filePath: z.string().optional().describe("Path to config file (for check mode)"), + variables: z.array(ConfigVariableSchema).optional().describe("Configuration variables"), + variableNames: z.array(z.string()).optional().describe("Variable names for check mode"), + isTestConfig: z.boolean().optional().describe("Set to true when collecting configuration for tests. Tool will automatically read from Config.toml and write to tests/Config.toml"), +}); + +interface ConfigCollectorInput { + mode: "collect" | "check"; + filePath?: string; + variables?: ConfigVariable[]; + variableNames?: string[]; + isTestConfig?: boolean; +} + +export interface ConfigCollectorResult { + success: boolean; + message: string; + status?: Record; + error?: string; + errorCode?: string; +} + +export interface ConfigCollectorPaths { + tempPath: string; + workspacePath: string; +} + +// Helper functions +function getConfigPath(basePath: string, isTestConfig?: boolean): string { + return isTestConfig + ? path.join(basePath, "tests", "Config.toml") + : path.join(basePath, "Config.toml"); +} + +function getConfigFileName(isTestConfig?: boolean): string { + return isTestConfig ? TEST_CONFIG_FILE_PATH : CONFIG_FILE_PATH; +} + +function validateConfigVariables( + variables: ConfigVariable[] +): ConfigCollectorResult | null { + for (const variable of variables) { + if (!validateVariableName(variable.name)) { + return createErrorResult( + "INVALID_VARIABLE_NAME", + `Invalid variable name: ${variable.name}. Use camelCase alphanumeric names (e.g., apiKey)` + ); + } + } + return null; // Valid +} + +function createErrorResult(errorCode: string, message: string): ConfigCollectorResult { + return { + success: false, + message, + error: message, + errorCode, + }; +} + +export function createConfigCollectorTool( + eventHandler: CopilotEventHandler, + paths: ConfigCollectorPaths, + modifiedFiles?: string[] +) { + return tool({ + description: ` +Manages configuration values in Config.toml for Ballerina integrations securely. + +IMPORTANT: Only call COLLECT mode immediately before executing the project (running or testing). Do NOT call it during code writing or implementation — even if the code has sensitive configurables. Write the code first, then collect config only when you are about to run or test. + +Operation Modes: +1. COLLECT: Collect configuration values from the user + - Call ONLY immediately before running or testing the project — never during code writing + - Shows a form; nothing is written until the user confirms. If skipped, no file is created or modified + - Pre-populates from existing Config.toml if it exists + - When running tests, use isTestConfig: true — this is the only collect call needed; writes to tests/Config.toml after user confirms + - Example: { mode: "collect", variables: [{ name: "stripeApiKey", description: "Stripe API key", secret: true }] } + - Example (test): { mode: "collect", variables: [...], isTestConfig: true } + +2. CHECK: Inspect which values are filled or missing — can be called at any time + - Returns status only, never actual values + - Example: { mode: "check", variableNames: ["dbPassword", "apiKey"], filePath: "Config.toml" } + - Returns: { status: { dbPassword: "filled", apiKey: "missing" } } + +VARIABLE NAMING: +Use camelCase names that match exactly the Ballerina configurable identifier. The name is written as-is to Config.toml. + +SECURITY: +- You NEVER see actual configuration values +- Tool returns only status: { dbPassword: "filled" } +- NEVER hardcode configuration values in code`, + inputSchema: ConfigCollectorSchema, + execute: async (input) => { + return await ConfigCollectorTool( + input as ConfigCollectorInput, + eventHandler, + paths, + modifiedFiles + ); + }, + }); +} + +/** + * Analyze existing configuration values to determine their status and appropriate UI message + */ +function analyzeExistingConfig( + existingValues: Record, + variableNames: string[] +): { + hasActualValues: boolean; + hasPlaceholders: boolean; + filledCount: number; + message: string; +} { + let filledCount = 0; + let placeholderCount = 0; + + for (const name of variableNames) { + const value = existingValues[name]; + if (value && !value.startsWith('${')) { + filledCount++; + } else { + placeholderCount++; + } + } + + let message = ""; + if (filledCount === 0) { + message = "Configuration values needed"; + } else if (placeholderCount === 0) { + message = "Found existing values. You can reuse or update them."; + } else { + message = "Complete the remaining configuration values"; + } + + return { + hasActualValues: filledCount > 0, + hasPlaceholders: placeholderCount > 0, + filledCount, + message + }; +} + +export async function ConfigCollectorTool( + input: ConfigCollectorInput, + eventHandler: CopilotEventHandler, + paths: ConfigCollectorPaths, + modifiedFiles?: string[] +): Promise { + if (!eventHandler) { + return createErrorResult("INVALID_INPUT", "Event handler is required"); + } + + const requestId = crypto.randomUUID(); + + try { + switch (input.mode) { + case "collect": + return await handleCollectMode( + input.variables, + paths, + eventHandler, + requestId, + input.isTestConfig, + modifiedFiles + ); + + case "check": + return await handleCheckMode( + input.variableNames, + input.filePath, + paths, + input.isTestConfig + ); + + default: + // TypeScript should prevent this with discriminated unions + return createErrorResult("INVALID_MODE", `Unknown mode: ${(input as any).mode}`); + } + } catch (error: any) { + return handleError(error, requestId, eventHandler); + } +} + +async function handleCollectMode( + variables: ConfigVariable[], + paths: ConfigCollectorPaths, + eventHandler: CopilotEventHandler, + requestId: string, + isTestConfig?: boolean, + modifiedFiles?: string[] +): Promise { + // Validate variable names + const validationError = validateConfigVariables(variables); + if (validationError) { return validationError; } + + // Determine paths based on isTestConfig flag + const configPath = getConfigPath(paths.tempPath, isTestConfig); + + // Priority: tests/Config.toml → Config.toml → empty + const mainConfigPath = path.join(paths.tempPath, "Config.toml"); + const sourceConfigPath = isTestConfig + ? (fs.existsSync(configPath) ? configPath : mainConfigPath) + : configPath; + + // Read existing configuration values from source config (if they exist) for pre-populating the form + const existingValues = readExistingConfigValues( + sourceConfigPath, + variables.map(v => v.name) + ); + + // Analyze existing values to determine appropriate messaging + const analysis = analyzeExistingConfig( + existingValues, + variables.map(v => v.name) + ); + + console.log(`[ConfigCollector] ${isTestConfig ? 'Test' : 'Main'} configuration: ${analysis.filledCount} filled`); + + // Determine the message to show to user + const userMessage = isTestConfig + ? (analysis.hasActualValues + ? "Found values from main config. You can reuse or update them for testing." + : "Test configuration values needed") + : (analysis.hasActualValues + ? "Update configuration values" + : "Configuration values needed"); + + // Request configuration values from user via ApprovalManager + // This returns ACTUAL values (not exposed to agent) + const userResponse = await approvalManager.requestConfiguration( + requestId, + variables, + existingValues, + eventHandler, + isTestConfig, + userMessage + ); + + if (!userResponse.provided) { + eventHandler({ + type: "configuration_collection_event", + requestId, + stage: "skipped", + message: `Configuration collection skipped${userResponse.comment ? ": " + userResponse.comment : ""}`, + isTestConfig, + }); + + return { + success: false, + message: `User skipped configuration collection${userResponse.comment ? ": " + userResponse.comment : ""}. You can ask user to provide values later using collect mode.`, + error: `User skipped${userResponse.comment ? ": " + userResponse.comment : ""}`, + errorCode: "USER_CANCELLED", + }; + } + + // Write actual configuration values to determined config path + writeConfigValuesToConfig(configPath, userResponse.configValues!, variables); + + // Track modified file for syncing to workspace + if (modifiedFiles) { + const configFileName = getConfigFileName(isTestConfig); + if (!modifiedFiles.includes(configFileName)) { + modifiedFiles.push(configFileName); + } + } + + // Convert to status metadata (filled/missing) - NEVER return actual values to agent + const statusMetadata = createStatusMetadata(userResponse.configValues!); + + // Clear values from memory + userResponse.configValues = undefined; + + // Success - configuration values were collected and written + const configFileName = getConfigFileName(isTestConfig); + eventHandler({ + type: "configuration_collection_event", + requestId, + stage: "done", + message: isTestConfig + ? "Test configuration saved to tests/Config.toml" + : "Configuration saved to Config.toml", + isTestConfig, + }); + + return { + success: true, + message: `Successfully collected ${variables.length} configuration value(s) and saved to ${configFileName}${userResponse.comment ? ". User note: " + userResponse.comment : ""}`, + status: statusMetadata, + }; +} + +async function handleCheckMode( + variableNames: string[], + filePath: string | undefined, + paths: ConfigCollectorPaths, + isTestConfig?: boolean +): Promise { + let configPath: string; + let configFileName: string; + if (filePath) { + configPath = path.join(paths.tempPath, filePath); + configFileName = path.basename(filePath); + } else { + configPath = getConfigPath(paths.tempPath, isTestConfig); + configFileName = getConfigFileName(isTestConfig); + } + + if (!fs.existsSync(configPath)) { + return { + success: false, + message: `${configFileName} not found. Use collect mode to create it.`, + error: "FILE_NOT_FOUND", + errorCode: "FILE_NOT_FOUND", + }; + } + + // Read all variables from the file + const status = getAllConfigStatus(configPath); + + // Any requested variable names not found in file → mark as missing + for (const name of variableNames) { + if (!(name in status)) { + status[name] = "missing"; + } + } + + const filledCount = Object.values(status).filter((s) => s === "filled").length; + const missingCount = Object.values(status).filter((s) => s === "missing").length; + const totalCount = filledCount + missingCount; + + return { + success: true, + message: `${configFileName} has ${totalCount} variable(s): ${filledCount} filled, ${missingCount} with placeholder`, + status, + }; +} + +function handleError( + error: any, + requestId: string, + eventHandler: CopilotEventHandler +): ConfigCollectorResult { + const message = (error && typeof error.message === "string" && error.message) || String(error) || "Unknown error"; + const code = (error && error.code) || "UNKNOWN_ERROR"; + + console.error("[ConfigCollector] Error:", error); + + eventHandler({ + type: "configuration_collection_event", + requestId, + stage: "error", + message: `Error: ${message}`, + error: { + message, + code, + }, + }); + + return { + success: false, + message: `Failed to manage configuration: ${message}`, + error: message, + errorCode: code, + }; +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/connector-generator.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/connector-generator.ts index c87a4f64a11..f7c32f1089a 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/connector-generator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/connector-generator.ts @@ -32,9 +32,10 @@ import { import { CopilotEventHandler } from "../../utils/events"; import { langClient } from "../../activator"; import { applyTextEdits } from "../utils"; -import { LIBRARY_PROVIDER_TOOL } from "../../utils/libs/libraries"; +import { LIBRARY_GET_TOOL } from "./library-get"; import { approvalManager } from '../../state/ApprovalManager'; import { sendAiSchemaDidOpen } from "../../utils/project/ls-schema-notifications"; +import { LIBRARY_SEARCH_TOOL } from "./library-search"; export const CONNECTOR_GENERATOR_TOOL = "ConnectorGeneratorTool"; @@ -43,14 +44,21 @@ const SpecFetcherInputSchema = z.object({ serviceDescription: z.string().optional().describe("Optional description of what the service is for"), }); + + export function createConnectorGeneratorTool(eventHandler: CopilotEventHandler, tempProjectPath: string, projectName?: string, modifiedFiles?: string[]) { return tool({ + // TODO: Verify that the agent invokes LIBRARY_SEARCH_TOOL before LIBRARY_GET_TOOL and only falls back to this tool when no suitable library is found; update the tool description or agent prompt if the ordering is incorrect description: ` -Generates a connector for an external service by deriving the service contract from user-provided specifications. Use this tool only when the service contract is unclear or missing, and the target service is not a well-established platform with an existing SDK or connector +Generates a connector for an external service by deriving the service contract from user-provided OpenAPI specifications. Use this tool when: -1. The target service is custom, internal, or niche, and unlikely to be covered by existing libraries. -2. When the ${LIBRARY_PROVIDER_TOOL} does not have a connector for the target service. +1. Target service is custom, internal, or niche +2. User request is ambiguous and needs a SaaS connector +3. User explicitly requests to create a SaaS connector +4. After searching with ${LIBRARY_SEARCH_TOOL}, no suitable connector is found + +**CRITICAL: Do NOT call this tool again for the same service if the user has already skipped it (errorCode: USER_SKIPPED). Accept the skip and proceed without the connector.** The tool will: 1. Request OpenAPI spec from user (supports JSON and YAML formats) @@ -179,7 +187,7 @@ function handleUserSkip( return { success: false, - message: `User skipped providing OpenAPI specification for ${serviceName}. Proceed without generating connector or ask user to provide the spec later.`, + message: `User skipped providing OpenAPI specification for ${serviceName}. Do NOT call this tool again for ${serviceName} — proceed with the implementation without this connector.`, error: `User skipped providing spec for ${serviceName}${comment ? ": " + comment : ""}`, errorCode: "USER_SKIPPED", details: "User chose not to provide the OpenAPI specification", diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/curl-tool.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/curl-tool.ts new file mode 100644 index 00000000000..af39fd65043 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/curl-tool.ts @@ -0,0 +1,267 @@ +// Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import { tool } from 'ai'; +import { z } from 'zod'; +import axios, { AxiosError, AxiosResponse } from 'axios'; +import { CopilotEventHandler } from '../../utils/events'; + +export const CURL_TOOL_NAME = "curlRequest"; + +const CURL_REQUEST_TIMEOUT_MS = 30_000; + + +export const HTTPInputSchema = z.object({ + curlCommand: z.string().describe("The curl command to execute, including the URL, method, headers, and body. For example: `curl -X POST https://api.example.com/data -H 'Content-Type: application/json' -d '{\"key\":\"value\"}'`"), + testScenario: z.string().max(30).optional().describe("An optional identifier (max 30 chars) to group requests belonging to the same test scenario.") +}); + +export type HTTPInput = z.infer; + +type HTTPResponse = { + data: unknown; + status: number; + statusText: string; + headers: Record; +}; +type HTTPErrorResponse = { + error: true; + message: string; + code?: string; + response?: HTTPResponse +}; + +function createSuccessResponse(response: AxiosResponse): HTTPResponse { + const headers: Record = {}; + for (const [key, value] of Object.entries(response.headers)) { + if (typeof value === 'string') { + headers[key] = value; + } else if (Array.isArray(value)) { + headers[key] = value.join(', '); + } + } + return { + data: response.data, + status: response.status, + statusText: response.statusText, + headers + }; +} + +function createErrorResponse(error: AxiosError): HTTPErrorResponse { + return { + error: true, + message: error.message, + code: error.code, + response: error.response ? createSuccessResponse(error.response) : undefined + }; +} + +export function createCurlTool(eventHandler: CopilotEventHandler) { + return tool({ + description: `A tool to make requests to a given API endpoint. Provide the endpoint URL and request details to get a response. Use this tool for testing and debugging HTTP endpoints.`, + inputSchema: HTTPInputSchema, + execute: async (input): Promise => await executeCurlRequest(input, eventHandler) + }); +} + +/** + * Parse a curl command string into components + * Handles quoted strings and various curl options + */ +function parseCurl(curl: string): { + method: string; + url: string; + headers: Record; + data: unknown; +} { + // Remove line breaks and continuations + const cleanCurl = curl.replace(/\\\s*\n/g, ' ').trim(); + + let method = 'GET'; + let methodExplicitlySet = false; + let url = ''; + const headers: Record = {}; + let body = ''; + + // Parse the curl string while respecting quoted values + const tokens = tokenizeCurl(cleanCurl); + + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i]; + + if (token === 'curl') { + continue; + } + + if (token === '-X' || token === '--request') { + if (i + 1 < tokens.length) { + method = tokens[i + 1]; + methodExplicitlySet = true; + i++; + } + } else if (token === '-H' || token === '--header') { + if (i + 1 < tokens.length) { + const headerStr = tokens[i + 1]; + const colonIndex = headerStr.indexOf(':'); + if (colonIndex !== -1) { + const key = headerStr.substring(0, colonIndex).trim(); + const value = headerStr.substring(colonIndex + 1).trim(); + headers[key] = value; + } + i++; + } + } else if (token === '-d' || token === '--data' || token === '--data-raw') { + if (i + 1 < tokens.length) { + body = tokens[i + 1]; + i++; + } + } else if (token.startsWith('http://') || token.startsWith('https://')) { + url = token; + } + } + + // Parse body based on Content-Type + let data: unknown = body; + let contentType: string | undefined; + + for (const key in headers) { + if (key.toLowerCase() === 'content-type') { + contentType = headers[key]; + break; + } + } + + if (contentType && body) { + if (contentType.toLowerCase().includes('application/json')) { + try { + data = JSON.parse(body); + } catch (error) { + console.warn('Failed to parse JSON body:', error); + // Keep as string if parsing fails + data = body; + } + } + } + + // curl defaults to POST when a body is supplied and no method is explicitly set + if (body && !methodExplicitlySet) { + method = 'POST'; + } + + return { method, url, headers, data }; +} + +/** + * Tokenize curl command while respecting quoted strings + */ +enum TokenScope { + Plain = "Plain", + InSingleQuotes = "InSingleQuotes", + InDoubleQuotes = "InDoubleQuotes", +} + +function tokenizeCurl(curl: string): string[] { + const tokens: string[] = []; + let current = ''; + let scope = TokenScope.Plain; + + for (let i = 0; i < curl.length; i++) { + const char = curl[i]; + + // Handle escape sequences inside quotes: \\ → \, \" → " (double quotes), \' → ' (single quotes) + if (scope !== TokenScope.Plain && char === '\\' && i + 1 < curl.length) { + const nextChar = curl[i + 1]; + if (nextChar === '\\' || + (scope === TokenScope.InSingleQuotes && nextChar === "'") || + (scope === TokenScope.InDoubleQuotes && nextChar === '"')) { + current += nextChar; + i++; + continue; + } + } + + if (char === "'" && scope === TokenScope.Plain) { + scope = TokenScope.InSingleQuotes; + } else if (char === "'" && scope === TokenScope.InSingleQuotes) { + scope = TokenScope.Plain; + } else if (char === '"' && scope === TokenScope.Plain) { + scope = TokenScope.InDoubleQuotes; + } else if (char === '"' && scope === TokenScope.InDoubleQuotes) { + scope = TokenScope.Plain; + } else if (char === ' ' && scope === TokenScope.Plain) { + if (current) { + tokens.push(current); + current = ''; + } + } else { + current += char; + } + } + + if (current) { + tokens.push(current); + } + + return tokens; +} + +export const executeCurlRequest = async (input: HTTPInput, eventHandler: CopilotEventHandler, context?: { toolCallId?: string }): Promise => { + const toolCallId = context?.toolCallId || `fallback-${Date.now()}`; + const parsedRequest = parseCurl(input.curlCommand); + try { + eventHandler({ + type: "tool_call", + toolName: CURL_TOOL_NAME, + toolInput: { request: parsedRequest, scenario: input.testScenario }, + toolCallId + }); + const response = await axios.request({ ...parsedRequest, timeout: CURL_REQUEST_TIMEOUT_MS }); + const requestOutput = createSuccessResponse(response); + const toolOutput = { request: parsedRequest, scenario: input.testScenario, output: requestOutput }; + eventHandler({ + type: "tool_result", + toolName: CURL_TOOL_NAME, + toolOutput: toolOutput, + toolCallId + }); + return requestOutput; + } catch (error) { + if (axios.isAxiosError(error)) { + const errorOutput = createErrorResponse(error); + const toolOutput = { request: parsedRequest, scenario: input.testScenario, output: errorOutput }; + eventHandler({ + type: "tool_result", + toolName: CURL_TOOL_NAME, + toolOutput: toolOutput, + toolCallId + }); + return errorOutput; + } + const genericErrorOutput: HTTPErrorResponse = { + error: true, + message: error instanceof Error ? error.message : String(error), + }; + const toolOutput = { request: parsedRequest, scenario: input.testScenario, output: genericErrorOutput }; + eventHandler({ + type: "tool_result", + toolName: CURL_TOOL_NAME, + toolOutput: toolOutput, + toolCallId + }); + return genericErrorOutput; + } +}; diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/diagnostics-utils.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/diagnostics-utils.ts index 283a599c056..34fd8abe831 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/diagnostics-utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/diagnostics-utils.ts @@ -4,6 +4,8 @@ import { StateMachine } from '../../../../stateMachine'; import * as path from 'path'; import { Uri } from 'vscode'; +export const DIAGNOSTICS_TOOL_NAME = "getCompilationErrors"; + /** * Diagnostic entry enriched with resolving hints */ @@ -98,6 +100,24 @@ export async function checkCompilationErrors( let diagnostics: Diagnostics[] = []; try { diagnostics = await checkProjectDiagnostics(langClient, tempProjectPath, true); + // HACK: When the generated code includes `import ballerinax/client.config;` (without the quoted + // identifier), the language server returns diagnostics with the module name stripped to + // `ballerinax/.config` — omitting "client". As a workaround, we detect this and + // instruct the agent to use the correct quoted form `import ballerinax/'client.config;` + // instead of attempting to resolve the dependency automatically. + const enrichedDiagnosticsTry = transformDiagnosticsToEnriched(diagnostics); + const hasInvalidClientModuleImport = enrichedDiagnosticsTry.some( + d => d.code === "BCE2003" && d.message.includes("ballerinax/.config") + ); + if (hasInvalidClientModuleImport) { + console.log(`[DiagnosticsUtils] Detected invalid client module import 'ballerinax/client.config'.`); + return { + diagnostics: enrichedDiagnosticsTry, + message: `Found a module resolution error: the import 'import ballerinax/client.config;' is invalid. ` + + `Fix this by replacing the import statement with 'import ballerinax/'client.config;'. ` + + `After applying the fix, call the ${DIAGNOSTICS_TOOL_NAME} tool again to verify there are no remaining errors.` + }; + } } catch (diagError) { // Resolve module dependencies using ai scheme const aiUri = Uri.file(tempProjectPath).with({ scheme: 'ai' }).toString(); diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/healthcare-library.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/healthcare-library.ts index 1f6047caee3..61cb3c7aa1b 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/healthcare-library.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/healthcare-library.ts @@ -15,7 +15,8 @@ // under the License. import { generateObject, ModelMessage, tool } from "ai"; -import { GenerationType, getAllLibraries, LIBRARY_PROVIDER_TOOL } from "../../utils/libs/libraries"; +import { GenerationType, getAllLibraries } from "../../utils/libs/libraries"; +import { LIBRARY_GET_TOOL } from "./library-get"; import { jsonSchema } from "ai"; import { Library } from "../../utils/libs/library-types"; import { selectRequiredFunctions } from "../../utils/libs/function-registry"; @@ -95,14 +96,13 @@ export async function HealthcareLibraryProviderTool( //TODO: Improve this description export function getHealthcareLibraryProviderTool( - _libraryDescriptions: string, eventHandler: CopilotEventHandler ) { return tool({ description: `Fetches detailed information about healthcare-specific Ballerina libraries along with their API documentation, including services, clients, functions, and filtered type definitions. ** NOTE: -1. This Tool only has knowledge on healthcare libraries, you want general libraries, use ${LIBRARY_PROVIDER_TOOL} to retrieve those. +1. This Tool only has knowledge on healthcare libraries, you want general libraries, use ${LIBRARY_GET_TOOL} to retrieve those. This tool is specifically designed for healthcare integration use cases (FHIR, HL7v2, etc.) and provides: 1. **Automatically includes mandatory healthcare libraries** (FHIR R4, HL7v2 commons, etc.) even if not explicitly requested @@ -163,8 +163,8 @@ export async function getRelevantLibrariesAndFunctions( return relevantTrimmedFuncs; } -export async function getSelectedLibraries(prompt: string, generationType: GenerationType): Promise { - const allLibraries = await getAllLibraries(generationType); +export async function getSelectedLibraries(prompt: string, libraryType: GenerationType): Promise { + const allLibraries = await getAllLibraries(libraryType); if (allLibraries.length === 0) { return []; } diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/library-provider.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/library-get.ts similarity index 63% rename from workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/library-provider.ts rename to workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/library-get.ts index 49b85d1da8e..ad80cc2a92d 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/library-provider.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/library-get.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. +// Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. // WSO2 LLC. licenses this file to you under the Apache License, // Version 2.0 (the "License"); you may not use this file except @@ -20,16 +20,18 @@ import { jsonSchema } from "ai"; import { Library } from "../../utils/libs/library-types"; import { selectRequiredFunctions } from "../../utils/libs/function-registry"; import { CopilotEventHandler } from "../../utils/events"; -import { LIBRARY_PROVIDER_TOOL } from "../../utils/libs/libraries"; + +export const LIBRARY_GET_TOOL = "LibraryGetTool"; /** - * Emits tool_result event for library provider with filtering + * Emits tool_result event for library get with filtering */ function emitLibraryToolResult( eventHandler: CopilotEventHandler, toolName: string, libraries: Library[], - requestedLibraryNames: string[] + requestedLibraryNames: string[], + toolCallId: string ): void { const libraryNames = libraries.map(lib => lib.name); const filteredNames = libraryNames.filter(name => requestedLibraryNames.includes(name)); @@ -37,11 +39,12 @@ function emitLibraryToolResult( eventHandler({ type: "tool_result", toolName, - toolOutput: filteredNames + toolOutput: filteredNames, + toolCallId }); } -const LibraryProviderToolSchema = jsonSchema<{ +const LibraryGetToolSchema = jsonSchema<{ libraryNames: string[]; userPrompt: string; }>({ @@ -60,46 +63,48 @@ const LibraryProviderToolSchema = jsonSchema<{ required: ["libraryNames", "userPrompt"], }); -export async function LibraryProviderTool( +export async function LibraryGetTool( params: { libraryNames: string[]; userPrompt: string }, generationType: GenerationType, - eventHandler: CopilotEventHandler + eventHandler: CopilotEventHandler, + toolCallId: string ): Promise { try { - // Emit tool_call event + // Emit tool_call event with ID from AI SDK eventHandler({ type: "tool_call", - toolName: LIBRARY_PROVIDER_TOOL, + toolName: LIBRARY_GET_TOOL, + toolCallId }); const startTime = Date.now(); const libraries = await selectRequiredFunctions(params.userPrompt, params.libraryNames, generationType); console.log( - `[LibraryProviderTool] Fetched ${libraries.length} libraries: ${libraries + `[LibraryGetTool] Fetched ${libraries.length} libraries: ${libraries .map((lib) => lib.name) .join(", ")}, took ${(Date.now() - startTime) / 1000}s` ); - // Emit tool_result event with filtered library names - emitLibraryToolResult(eventHandler, LIBRARY_PROVIDER_TOOL, libraries, params.libraryNames); + // Emit tool_result event with filtered library names and ID + emitLibraryToolResult(eventHandler, LIBRARY_GET_TOOL, libraries, params.libraryNames, toolCallId); return libraries; } catch (error) { - console.error(`[LibraryProviderTool] Error fetching libraries: ${error}`); + console.error(`[LibraryGetTool] Error fetching libraries: ${error}`); - // Emit error result + // Emit error result with same ID eventHandler({ type: "tool_result", - toolName: LIBRARY_PROVIDER_TOOL, - toolOutput: [] + toolName: LIBRARY_GET_TOOL, + toolOutput: [], + toolCallId }); return []; } } -export function getLibraryProviderTool( - libraryDescriptions: string, +export function getLibraryGetTool( generationType: GenerationType, eventHandler: CopilotEventHandler ) { @@ -107,34 +112,33 @@ export function getLibraryProviderTool( description: `Fetches detailed information about Ballerina libraries along with their API documentation, including services, clients, functions, and types. This tool analyzes a user query and returns **only the relevant** services, clients, functions, and types from the selected Ballerina libraries based on the provided user prompt. -Available libraries: - -${libraryDescriptions} - - Before calling this tool: -- Review all library names and their descriptions. -- Analyze the user query provided in the user message to identify the relevant Ballerina libraries which can be utilized to fulfill the query. -- Select the minimal set of libraries that can fulfill the query based on their descriptions. +- First use LibrarySearchTool to discover available libraries based on keywords +- Review the library names and descriptions returned from the search +- Analyze the user query to identify the relevant Ballerina libraries which can be utilized to fulfill the query +- Select the minimal set of libraries that can fulfill the query based on their descriptions # Example **Query**: Write an integration to read GitHub issues, summarize them, and post the summary to a Slack channel. -**Tool Call**: Call with libraryNames: ["ballerinax/github", "ballerinax/slack", "ballerinax/azure.openai.chat"] - +**Step 1**: Call LibrarySearchTool with keywords: ["GitHub", "Slack", "OpenAI"] +**Step 2**: Call this tool with libraryNames: ["ballerinax/github", "ballerinax/slack", "ballerinax/azure.openai.chat"] Tool Response: Tool responds with the following information about the requested libraries: name, description, type definitions (records, objects, enums, type aliases), clients (if any), functions and services (if any). `, - inputSchema: LibraryProviderToolSchema, - execute: async (input: { libraryNames: string[]; userPrompt: string }) => { + inputSchema: LibraryGetToolSchema, + execute: async (input: { libraryNames: string[]; userPrompt: string }, context?: { toolCallId?: string }) => { + // Extract toolCallId from AI SDK context + const toolCallId = context?.toolCallId || `fallback-${Date.now()}`; + console.log( - `[LibraryProviderTool] Called with ${input.libraryNames.length} libraries: ${input.libraryNames.join( + `[LibraryGetTool] Called with ${input.libraryNames.length} libraries: ${input.libraryNames.join( ", " - )} and prompt: ${input.userPrompt}` + )} and prompt: ${input.userPrompt} [toolCallId: ${toolCallId}]` ); - return await LibraryProviderTool(input, generationType, eventHandler); + return await LibraryGetTool(input, generationType, eventHandler, toolCallId); }, }); } diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/library-search.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/library-search.ts new file mode 100644 index 00000000000..e47a3b00672 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/library-search.ts @@ -0,0 +1,210 @@ +// Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import { tool, jsonSchema } from "ai"; +import { CopilotEventHandler } from "../../utils/events"; +import { langClient } from "../../activator"; +import { CopilotSearchLibrariesBySearchRequest, CopilotSearchLibrariesBySearchResponse, MinifiedLibrary } from "@wso2/ballerina-core"; + +export const LIBRARY_SEARCH_TOOL = "LibrarySearchTool"; + +// Maximum number of keywords allowed for library search +const MAX_SEARCH_KEYWORDS = 10; + +const LibrarySearchToolSchema = jsonSchema<{ + keywords: string[]; + searchDescription?: string; +}>({ + type: "object", + properties: { + keywords: { + type: "array", + items: { type: "string" }, + description: `Array of search keywords to find relevant Ballerina libraries. Keywords are weighted by order - first keyword has highest weight, subsequent keywords have decreasing weight. Maximum ${MAX_SEARCH_KEYWORDS} keywords allowed. Examples: ["GitHub", "API", "integration"], ["Stripe", "payment", "gateway"], ["HTTP", "REST", "service"]`, + minItems: 1, + maxItems: MAX_SEARCH_KEYWORDS, + }, + searchDescription: { + type: "string", + description: "Optional user-friendly description of what libraries are being searched for (e.g., 'payment processing libraries', 'GitHub API connectors', 'email sending services'). This will be shown to the user during the search to provide context about what is being looked for.", + }, + }, + required: ["keywords"], +}); + +function emitLibrarySearchResult( + eventHandler: CopilotEventHandler, + toolName: string, + libraries: MinifiedLibrary[], + toolCallId: string, + searchDescription?: string +): void { + const libraryNames = libraries.map(lib => lib.name); + eventHandler({ + type: "tool_result", + toolName, + toolOutput: { + libraries: libraryNames, + searchDescription + }, + toolCallId + }); +} + +export async function LibrarySearchTool( + params: { keywords: string[]; searchDescription?: string }, + eventHandler: CopilotEventHandler, + toolCallId: string +): Promise { + try { + // Emit tool_call event with ID and description + eventHandler({ + type: "tool_call", + toolName: LIBRARY_SEARCH_TOOL, + toolInput: { + keywords: params.keywords, + searchDescription: params.searchDescription + }, + toolCallId + }); + + const startTime = Date.now(); + + // Validate keyword count + const keywords = params.keywords.slice(0, MAX_SEARCH_KEYWORDS); + if (keywords.length === 0) { + console.warn(`[LibrarySearchTool] No keywords provided`); + return { libraries: [] }; + } + + const request: CopilotSearchLibrariesBySearchRequest = { + keywords + }; + + const response: CopilotSearchLibrariesBySearchResponse = + await langClient.getCopilotLibrariesBySearch(request); + + const libraryNames = response.libraries.map(lib => lib.name); + console.log( + `[LibrarySearchTool] Searched with keywords: [${keywords.join(", ")}], found ${response.libraries.length} libraries: ${libraryNames.join( + ", " + )}, took ${(Date.now() - startTime) / 1000}s` + ); + + // Emit tool_result event with same ID and description + emitLibrarySearchResult(eventHandler, LIBRARY_SEARCH_TOOL, response.libraries, toolCallId, params.searchDescription); + + return { libraries: response.libraries }; + } catch (error) { + console.error(`[LibrarySearchTool] Error searching libraries: ${error}`); + + // Emit error result with same ID and description + eventHandler({ + type: "tool_result", + toolName: LIBRARY_SEARCH_TOOL, + toolOutput: { + libraries: [], + searchDescription: params.searchDescription + }, + toolCallId + }); + + return { libraries: [] }; + } +} + +export function getLibrarySearchTool( + eventHandler: CopilotEventHandler +) { + return tool({ + description: `Searches for Ballerina libraries from Ballerina Central based on weighted keywords. + +**Purpose:** +This tool discovers relevant Ballerina libraries using keyword-based search. It searches against library names, descriptions, and function names. Keywords are weighted by order - the first keyword has the highest weight, with decreasing weight for subsequent keywords. + +**Scope - ALL Ballerina Libraries:** +- **ballerina/*** - Standard/core libraries (e.g., ballerina/http, ballerina/io, ballerina/sql) +- **ballerinax/*** - Extended/connector packages (e.g., ballerinax/stripe, ballerinax/aws.s3, ballerinax/github) +- **xlibb/*** - C library bindings (e.g., xlibb/docreader) +- Other organization packages available in Ballerina Central + +**Keyword Guidelines:** +- Provide 1-${MAX_SEARCH_KEYWORDS} keywords ordered by importance +- First keyword = most important (highest weight in search) +- Subsequent keywords = less important (decreasing weight) +- Use specific terms (e.g., "Stripe", "GitHub", "PostgreSQL") before generic ones (e.g., "payment", "API", "database") + +**When to use this tool:** +- To discover which libraries are available for a specific use case or integration +- Before calling LibraryProviderTool to retrieve full library details +- When the user query mentions integrations, services, connectors, or specific functionality +- Whenever you need to find relevant libraries but don't know the exact library names + +**Important - Two-Step Workflow:** +1. First, call THIS tool (LibrarySearchTool) with weighted keywords to discover relevant libraries +2. Review the returned library names and descriptions +3. Select the most appropriate libraries (typically 1-5 libraries) +4. Then, call LibraryProviderTool with the selected library names to get detailed API documentation (functions, types, clients, services, etc.) + +**Example Workflows:** + +Example 1 - Stripe Integration: +User query: "I need to integrate with Stripe payment gateway" +Keywords: ["Stripe", "payment", "gateway"] // "Stripe" has highest weight +Call LibrarySearchTool with keywords: ["Stripe", "payment", "gateway"] +→ Returns: [ + { name: "ballerinax/stripe", description: "Connects to Stripe API for payment processing" } + ] +Then call LibraryProviderTool with libraryNames: ["ballerinax/stripe"] + +Example 2 - GitHub API: +User query: "Create a GitHub integration to list issues" +Keywords: ["GitHub", "API", "issues"] // "GitHub" has highest weight +Call LibrarySearchTool with keywords: ["GitHub", "API", "issues"] +→ Returns: [ + { name: "ballerinax/github", description: "GitHub API connector for repository management" } + ] +Then call LibraryProviderTool with libraryNames: ["ballerinax/github"] + +Example 3 - HTTP Service: +User query: "Create a REST API" +Keywords: ["HTTP", "REST", "API"] // "HTTP" has highest weight +Call LibrarySearchTool with keywords: ["HTTP", "REST", "API"] +→ Returns: [ + { name: "ballerina/http", description: "HTTP client and server implementation" } + ] +Then call LibraryProviderTool with libraryNames: ["ballerina/http"] + +**Tool Response Format:** +Returns an array of library objects, each containing name and description: +[ + { name: "ballerinax/stripe", description: "Stripe payment connector for processing payments..." }, + { name: "ballerinax/aws.s3", description: "AWS S3 connector for object storage operations..." }, + { name: "ballerina/http", description: "HTTP client and server implementation..." } +] +`, + inputSchema: LibrarySearchToolSchema, + execute: async (input: { keywords: string[]; searchDescription?: string }, context?: { toolCallId?: string }) => { + // Extract toolCallId from AI SDK context + const toolCallId = context?.toolCallId || `fallback-${Date.now()}`; + + console.log( + `[LibrarySearchTool] Called with keywords: [${input.keywords.join(", ")}] [toolCallId: ${toolCallId}] [description: ${input.searchDescription || 'none'}]` + ); + return await LibrarySearchTool(input, eventHandler, toolCallId); + }, + }); +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/running-service-manager.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/running-service-manager.ts new file mode 100644 index 00000000000..6482e121606 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/running-service-manager.ts @@ -0,0 +1,202 @@ +// Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import * as vscode from 'vscode'; +import * as child_process from 'child_process'; + +const isWindows = process.platform === 'win32'; + +export interface RunningService { + taskId: string; + terminal: vscode.Terminal; + process: child_process.ChildProcess; + logs: string[]; + logCursor: number; + packagePath: string; + startedAt: number; + exited: boolean; + exitCode: number | null; +} + +/** + * Creates a VS Code terminal backed by a child process via Pseudoterminal. + * Output from the child process is both displayed in the terminal AND buffered + * in `logs` for LLM consumption — no proposed API required. + */ +export function createProcessTerminal( + name: string, + command: string, + args: string[], + cwd: string, + logs: string[] +): { terminal: vscode.Terminal; process: child_process.ChildProcess } { + const writeEmitter = new vscode.EventEmitter(); + const closeEmitter = new vscode.EventEmitter(); + + const proc = child_process.spawn(command, args, { + cwd, + shell: true, + detached: !isWindows, + stdio: ['pipe', 'pipe', 'pipe'], + }); + + let processExited = false; + + const handleData = (data: Buffer) => { + const text = data.toString(); + // Buffer clean text for LLM consumption + logs.push(removeAnsiEscapeCodes(text)); + // Write raw text to terminal for user (convert \n to \r\n for terminal display) + writeEmitter.fire(text.replace(/\n/g, '\r\n')); + }; + + proc.stdout?.on('data', handleData); + proc.stderr?.on('data', handleData); + + proc.on('error', (err) => { + processExited = true; + const msg = `Failed to start process: ${err.message}`; + logs.push(msg); + writeEmitter.fire(`\r\n\r\n[${msg}]\r\n`); + }); + + // When the process exits, write a message but keep the terminal open + // so the user can inspect the output. + proc.on('close', (code) => { + processExited = true; + writeEmitter.fire(`\r\n\r\n[Process exited with code ${code ?? 'unknown'}]\r\n`); + }); + + const pty: vscode.Pseudoterminal = { + onDidWrite: writeEmitter.event, + onDidClose: closeEmitter.event, + open: () => { }, + close: () => { + // Called when the user closes the terminal tab + if (!proc.killed) { + killProcessGroup(proc, 'SIGTERM'); + } + }, + handleInput: (data: string) => { + if (processExited) { + // Process is done; close the terminal on any keypress + closeEmitter.fire(undefined); + return; + } + if (data === '\x03') { + killProcessGroup(proc, 'SIGINT'); + } else { + proc.stdin?.write(data); + } + }, + }; + + const terminal = vscode.window.createTerminal({ name, pty }); + + return { terminal, process: proc }; +} + +/** + * Kills the entire process group (shell + child processes). + * Falls back to killing just the process if the group kill fails. + */ +export function killProcessGroup(proc: child_process.ChildProcess, signal: NodeJS.Signals = 'SIGTERM'): void { + if (proc.pid == null) { + return; + } + + if (isWindows) { + // On Windows, use taskkill with /T to kill the entire process tree + try { + child_process.execSync(`taskkill /T /F /PID ${proc.pid}`, { stdio: 'ignore' }); + } catch { + // Process may already be gone + try { proc.kill(signal); } catch { /* already dead */ } + } + } else { + // On Unix, kill the process group via negative PID + try { + process.kill(-proc.pid, signal); + } catch { + // Process group may already be gone; try killing just the process + try { proc.kill(signal); } catch { /* already dead */ } + } + } +} + +const STOP_TIMEOUT_MS = 5000; + +export function waitForExit(proc: child_process.ChildProcess, timeoutMs: number = STOP_TIMEOUT_MS): Promise { + return new Promise((resolve) => { + if (proc.exitCode !== null) { + resolve(); + return; + } + + const timeout = setTimeout(() => { + proc.removeListener('close', onClose); + if (proc.exitCode === null) { + killProcessGroup(proc, 'SIGKILL'); + } + resolve(); + }, timeoutMs); + + function onClose() { + clearTimeout(timeout); + resolve(); + } + + proc.once('close', onClose); + }); +} + +export class RunningServicesManager { + private services = new Map(); + + get(taskId: string): RunningService | undefined { + return this.services.get(taskId); + } + + register(service: RunningService): void { + this.services.set(service.taskId, service); + } + + remove(taskId: string): boolean { + return this.services.delete(taskId); + } + + stopAll(): void { + for (const service of this.services.values()) { + if (!service.process.killed) { + killProcessGroup(service.process, 'SIGTERM'); + } + // Best-effort SIGKILL fallback — fire-and-forget for teardown + waitForExit(service.process); + service.terminal.dispose(); + } + this.services.clear(); + } + + dispose(): void { + this.stopAll(); + } +} + +function removeAnsiEscapeCodes(text: string): string { + return text.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, ''); +} + +export const runningServicesManager = new RunningServicesManager(); diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/task-writer.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/task-writer.ts index 904baf62023..ed84a0cca60 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/task-writer.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/task-writer.ts @@ -36,11 +36,21 @@ export interface TaskWriteResult { export const TaskInputSchema = z.object({ description: z.string().min(1).describe("Clear, actionable description of the task to be implemented"), status: z.enum([TaskStatus.PENDING, TaskStatus.IN_PROGRESS, TaskStatus.COMPLETED]).describe("Current status of the task. Use 'pending' for tasks not started, 'in_progress' when actively working on it, 'completed' when work is finished."), - type: z.enum([TaskTypes.SERVICE_DESIGN, TaskTypes.CONNECTIONS_INIT, TaskTypes.IMPLEMENTATION]).describe("Type of the implementation task. service_design will only generate the http service contract. not the implementation. connections_init will only generate the connection initializations. All of the other tasks will be of type implementation.") + type: z.enum([TaskTypes.SERVICE_DESIGN, TaskTypes.CONNECTIONS_INIT, TaskTypes.IMPLEMENTATION, TaskTypes.TESTING]).describe("Type of the implementation task. service_design: creates the HTTP service contract only (no implementation). connections_init: creates connection/client initializations only. implementation: all other implementation tasks. testing: writing test cases for the implemented logic — include only if the user has explicitly asked for tests.") }); const TaskWriteInputSchema = z.object({ - tasks: z.array(TaskInputSchema).min(1).describe("ALL TASKS - EVERY SINGLE ONE. This tool is stateless. Always send the COMPLETE list of tasks with their current statuses.") + tasks: z.array(TaskInputSchema).min(1).describe("ALL TASKS - EVERY SINGLE ONE. This tool is stateless. Always send the COMPLETE list of tasks with their current statuses."), + isPlanApproval: z.boolean().optional().describe( + "Set to true when submitting the initial plan or a revised plan. " + + "This shows the full task list to the user and waits for plan approval before execution begins. " + + "Use this on the very first TaskWrite call, and again if the user requests plan changes." + ), + requestReview: z.boolean().optional().describe( + "Set to true after completing a meaningful milestone (e.g. finishing a logical unit of work) " + + "when you want the user to review the current state before continuing. " + + "Do NOT use after every single task — only at significant checkpoints." + ) }); export type TaskWriteInput = z.infer; @@ -129,61 +139,71 @@ After approval, start task 2 - Send ALL: ] Rules: -- Send ALL tasks every single call (tool will reject partial lists) +- Send ALL tasks on every call - Only ONE task "in_progress" at a time -- After plan approval, start first task immediately -- Wait for approval after each task completion before starting next -- Continue autonomously through all tasks with approval checkpoints`, +- Set isPlanApproval: true on the first call (and when revising the plan) +- Set requestReview: true only at meaningful milestones, not after every task +- After plan approval, start tasks immediately and continue autonomously unless requestReview is set`, inputSchema: TaskWriteInputSchema, execute: async (input: TaskWriteInput): Promise => { try { - const generation = chatStateStorage.getGeneration(workspaceId, threadId, generationId); - const existingPlan = generation?.plan; const allTasks = mapInputToTasks(input); - console.log(`[TaskWrite Tool] Received ${allTasks.length} task(s)`); + console.log(`[TaskWrite Tool] Received ${allTasks.length} task(s), isPlanApproval=${input.isPlanApproval}, requestReview=${input.requestReview}`); const taskCategories = categorizeTasks(allTasks); - // TODO: Add tests for plan modification detection in the middle of execution - // Fixed: Plan state is now preserved in the state machine across chat continuations, - // preventing unnecessary approval requests when agent continues with existing plan. - // Still need comprehensive tests for: mid-execution plan modifications, task reordering, - // task additions/removals, and edge cases where plan changes should trigger re-approval. - const isNewPlan = !existingPlan || existingPlan.tasks.length === 0; - const isPlanRemodification = existingPlan && ( - allTasks.length !== existingPlan.tasks.length || - allTasks.some(task => !existingPlan.tasks.find(t => t.description === task.description)) - ); - - if (!isNewPlan && !isPlanRemodification) { - const missingTasksError = validateAllTasksIncluded(input, existingPlan); - if (missingTasksError) { return missingTasksError; } - } - let approvalResult: { approved: boolean; comment?: string; approvedTaskDescription?: string } | undefined; let approvalType: "plan" | "completion" | undefined; if (eventHandler) { - const needsPlanApproval = (isNewPlan || isPlanRemodification) && taskCategories.inProgress.length === 0; - if (needsPlanApproval) { + if (input.isPlanApproval === true) { + // Explicit plan approval gate — show full task list to user and wait for approval approvalType = "plan"; - approvalResult = await handlePlanApproval(allTasks, isPlanRemodification, eventHandler, workspaceId, generationId, threadId); - } else if (taskCategories.completed.length > 0 && taskCategories.inProgress.length === 0) { - const newlyCompletedTasks = detectNewlyCompletedTasks(taskCategories.completed, existingPlan); - - if (newlyCompletedTasks.length > 0) { - approvalType = "completion"; - approvalResult = await handleTaskCompletion( - allTasks, - newlyCompletedTasks, - eventHandler, - tempProjectPath, - modifiedFiles - ); - } + approvalResult = await handlePlanApproval(allTasks, eventHandler, workspaceId, generationId, threadId); + } else if (input.requestReview === true) { + // TODO: Re-enable approval gate (handleTaskCompletion) when review flow is ready + // Skip review gate — mark as completed and continue autonomously + eventHandler({ + type: "tool_result", + toolName: TASK_WRITE_TOOL_NAME, + toolOutput: { + success: true, + message: `Completed: ${taskCategories.completed[taskCategories.completed.length - 1]?.description ?? "tasks"}`, + tasks: allTasks + } + }); } else if (taskCategories.inProgress.length > 0) { + // Task started — emit progress event, no user gate console.log(`[TaskWrite Tool] Task in progress: ${taskCategories.inProgress[0].description}`); + eventHandler({ + type: "tool_result", + toolName: TASK_WRITE_TOOL_NAME, + toolOutput: { + success: true, + message: `Started working on: ${taskCategories.inProgress[0].description}`, + tasks: allTasks + } + }); + } else if (taskCategories.completed.length > 0) { + // Task(s) completed without requestReview — integrate code silently, no user gate + // TODO: Re-enable workspace integration when ready + // if (tempProjectPath && modifiedFiles) { + // const modifiedFilesSet = new Set(modifiedFiles); + // const ctx = createExecutionContextFromStateMachine(); + // await integrateCodeToWorkspace(tempProjectPath, modifiedFilesSet, ctx); + // } + // Emit completion event so the visualizer knows execution is done + // and can render subsequent content (agent's closing text) normally + eventHandler({ + type: "tool_result", + toolName: TASK_WRITE_TOOL_NAME, + toolOutput: { + success: true, + message: `Completed: ${taskCategories.completed[taskCategories.completed.length - 1].description}`, + tasks: allTasks + } + }); } } @@ -222,27 +242,6 @@ function mapInputToTasks(input: TaskWriteInput): Task[] { })); } -function validateAllTasksIncluded(input: TaskWriteInput, existingPlan: Plan | undefined): TaskWriteResult | null { - if (!existingPlan || existingPlan.tasks.length === 0) { - return null; - } - - const existingDescriptions = new Set(existingPlan.tasks.map(t => t.description)); - const receivedDescriptions = new Set(input.tasks.map(t => t.description)); - const missingDescriptions = [...existingDescriptions].filter(desc => !receivedDescriptions.has(desc)); - - if (missingDescriptions.length > 0) { - console.error(`[TaskWrite Tool] Missing ${missingDescriptions.length} task(s)`); - return { - success: false, - message: `ERROR: Missing ${missingDescriptions.length} task(s). Missing: ${missingDescriptions.map(d => `"${d}"`).join(', ')}`, - tasks: existingPlan.tasks - }; - } - //TOOD: Add diagnostics check - return null; -} - function categorizeTasks(allTasks: Task[]) { return { completed: allTasks.filter(t => t.status === TaskStatus.COMPLETED), @@ -251,16 +250,6 @@ function categorizeTasks(allTasks: Task[]) { }; } -function detectNewlyCompletedTasks(completedTasks: Task[], existingPlan: Plan | undefined): Task[] { - if (!existingPlan) { - return completedTasks; - } - - return completedTasks.filter(task => { - const existingTask = existingPlan.tasks.find(t => t.description === task.description); - return existingTask && existingTask.status !== TaskStatus.COMPLETED; - }); -} function createPlan(allTasks: Task[]): Plan { return { @@ -273,22 +262,18 @@ function createPlan(allTasks: Task[]): Plan { async function handlePlanApproval( allTasks: Task[], - isPlanRemodification: boolean, eventHandler: CopilotEventHandler, workspaceId: string, generationId: string, threadId: string ): Promise<{ approved: boolean; comment?: string }> { - console.log(`[TaskWrite Tool] ${isPlanRemodification ? 'Plan remodified' : 'Plan created'}`); + console.log(`[TaskWrite Tool] Plan approval requested`); const plan = createPlan(allTasks); // Store plan in ChatStateStorage with the generation chatStateStorage.updateGeneration(workspaceId, threadId, generationId, { plan }); - // Notify visualizer of plan update - eventHandler({ type: 'plan_updated', plan }); - // Use ApprovalManager for plan approval (replaces state machine subscription) const requestId = `plan-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`; @@ -311,18 +296,18 @@ async function handleTaskCompletion( const lastCompletedTask = newlyCompletedTasks[newlyCompletedTasks.length - 1]; console.log(`[TaskWrite Tool] Detected ${newlyCompletedTasks.length} newly completed task(s)`); - const diagnosticResult = await checkCompilationErrors(tempProjectPath); + // const diagnosticResult = await checkCompilationErrors(tempProjectPath); - if (diagnosticResult.diagnostics.length > 0) { - const errorCount = diagnosticResult.diagnostics.length; - console.error(`[TaskWrite Tool] Found ${errorCount} compilation error(s), blocking task completion`); + // if (diagnosticResult.diagnostics.length > 0) { + // const errorCount = diagnosticResult.diagnostics.length; + // console.error(`[TaskWrite Tool] Found ${errorCount} compilation error(s), blocking task completion`); - return { - approved: false, - comment: `Cannot complete task: ${errorCount} compilation error(s) detected. Use the ${DIAGNOSTICS_TOOL_NAME} tool to check the errors and fix them before marking the task as completed.`, - approvedTaskDescription: lastCompletedTask.description - }; - } + // return { + // approved: false, + // comment: `Cannot complete task: ${errorCount} compilation error(s) detected. Use the ${DIAGNOSTICS_TOOL_NAME} tool to check the errors and fix them before marking the task as completed.`, + // approvedTaskDescription: lastCompletedTask.description + // }; + // } if (tempProjectPath && modifiedFiles) { const modifiedFilesSet = new Set(modifiedFiles); diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/test-runner.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/test-runner.ts new file mode 100644 index 00000000000..a3b566b1512 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/test-runner.ts @@ -0,0 +1,132 @@ +// Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import * as path from 'path'; +import { tool } from 'ai'; +import { z } from 'zod'; +import { CopilotEventHandler } from '../../utils/events'; +import { extension } from '../../../../BalExtensionContext'; +import { createProcessTerminal, killProcessGroup } from './running-service-manager'; +import { BALLERINA_COMMANDS } from '../../../project/cmds/cmd-runner'; +import { DIAGNOSTICS_TOOL_NAME } from './diagnostics'; + +export const TEST_RUNNER_TOOL_NAME = "runTests"; + +export interface TestRunResult { + output: string; +} + +const TestRunnerInputSchema = z.object({}); + +const DEFAULT_TEST_TIMEOUT = 120000; + +export function createTestRunnerTool( + tempProjectPath: string, + eventHandler: CopilotEventHandler +) { + return tool({ + description: `Runs \`bal test\` in the current Ballerina project and returns the raw output. + +**Prerequisites:** The project must compile cleanly. Always run \`${DIAGNOSTICS_TOOL_NAME}\` first and resolve all compilation errors before invoking this tool — tests cannot run on code that does not compile. + +**REQUIRED before calling this tool:** You MUST tell the user what is being tested (e.g. which functions or scenarios the test cases cover). Do NOT invoke this tool without first informing the user. + +**When to use:** +- After compilation is clean and the project contains test cases +- After modifying existing code, to confirm tests still pass +- After writing new test cases, to validate them + +**Output:** Returns the full raw \`bal test\` output. Read the output carefully to identify which tests passed or failed, then fix any failures before marking the task as complete. +`, + inputSchema: TestRunnerInputSchema, + execute: async (_input: Record, context?: { toolCallId?: string }): Promise => { + const toolCallId = context?.toolCallId || `fallback-${Date.now()}`; + + eventHandler({ + type: "tool_call", + toolName: TEST_RUNNER_TOOL_NAME, + toolCallId, + }); + + const result = await runBallerinaTests(tempProjectPath); + + eventHandler({ + type: "tool_result", + toolName: TEST_RUNNER_TOOL_NAME, + toolCallId, + toolOutput: { summary: parseTestSummary(result.output) } + }); + + return result; + } + }); +} + +function parseTestSummary(output: string): string { + const passingMatch = output.match(/(\d+)\s+passing/); + const failingMatch = output.match(/(\d+)\s+failing/); + if (passingMatch) { + const passing = parseInt(passingMatch[1]); + const failing = failingMatch ? parseInt(failingMatch[1]) : 0; + const total = passing + failing; + return `Tests completed: ${passing}/${total} passing`; + } + return "Tests completed"; +} + +async function runBallerinaTests(cwd: string): Promise { + const balCmd = extension.ballerinaExtInstance.getBallerinaCmd(); + const packageName = path.basename(cwd); + + const logs: string[] = []; + const { terminal, process: proc } = createProcessTerminal( + `Bal Test: ${packageName}`, + balCmd, + [BALLERINA_COMMANDS.TEST], + cwd, + logs + ); + terminal.show(true); + + let exited = false; + proc.on('close', () => { + exited = true; + }); + proc.on('error', (err) => { + logs.push(`\nFailed to start process: ${err.message}\n`); + exited = true; + }); + + // Wait for completion + const startTime = Date.now(); + const pollInterval = 500; + + while (!exited && (Date.now() - startTime) < DEFAULT_TEST_TIMEOUT) { + await new Promise(resolve => setTimeout(resolve, pollInterval)); + } + + const output = logs.join(''); + + if (!exited) { + killProcessGroup(proc, 'SIGTERM'); + terminal.dispose(); + return { + output: output + `\n\nTest execution timed out after ${DEFAULT_TEST_TIMEOUT}ms.`, + }; + } + + return { output }; +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/text-editor.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/text-editor.ts index 1ed9c089ea6..4343fd2874a 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/text-editor.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/agent/tools/text-editor.ts @@ -50,14 +50,16 @@ function emitFileToolCall( function emitFileToolResult( eventHandler: CopilotEventHandler, toolName: string, - result: TextEditorResult + result: TextEditorResult, + file_path?: string ): void { eventHandler({ type: "tool_result", toolName, toolOutput: { success: result.success, - action: result.action + action: result.action, + fileName: file_path } }); } @@ -86,6 +88,8 @@ const VALID_FILE_EXTENSIONS = [ '.bal', '.toml', '.md', '.sql' ]; +const RESTRICTED_READ_FILES = ['Config.toml']; + const MAX_LINE_LENGTH = 2000; const PREVIEW_LENGTH = 200; @@ -105,6 +109,7 @@ const ErrorMessages = { INVALID_LINE_RANGE: 'Invalid line range', EDIT_FAILED: 'Edit operation failed', NO_EDITS: 'No edits provided', + FILE_READ_NOT_PERMITTED: 'File read not permitted', }; // ============================================================================ @@ -275,7 +280,7 @@ export function createWriteExecute( message: pathValidation.error!, error: `Error: ${ErrorMessages.INVALID_FILE_PATH}` }; - emitFileToolResult(eventHandler, FILE_WRITE_TOOL_NAME, result); + emitFileToolResult(eventHandler, FILE_WRITE_TOOL_NAME, result, file_path); return result; } @@ -287,7 +292,7 @@ export function createWriteExecute( message: 'Content cannot be empty when writing a file.', error: `Error: ${ErrorMessages.EMPTY_CONTENT}` }; - emitFileToolResult(eventHandler, FILE_WRITE_TOOL_NAME, result); + emitFileToolResult(eventHandler, FILE_WRITE_TOOL_NAME, result, file_path); return result; } @@ -306,7 +311,7 @@ export function createWriteExecute( message: `File '${file_path}' already exists with content. Use file_edit or file_multi_edit to modify it instead.`, error: `Error: ${ErrorMessages.FILE_ALREADY_EXISTS}` }; - emitFileToolResult(eventHandler, FILE_WRITE_TOOL_NAME, result); + emitFileToolResult(eventHandler, FILE_WRITE_TOOL_NAME, result, file_path); return result; } } @@ -342,7 +347,7 @@ export function createWriteExecute( }; // Emit tool_result event - emitFileToolResult(eventHandler, FILE_WRITE_TOOL_NAME, result); + emitFileToolResult(eventHandler, FILE_WRITE_TOOL_NAME, result, file_path); return result; }; @@ -379,7 +384,7 @@ export function createEditExecute( message: pathValidation.error!, error: `Error: ${ErrorMessages.INVALID_FILE_PATH}` }; - emitFileToolResult(eventHandler, FILE_SINGLE_EDIT_TOOL_NAME, result); + emitFileToolResult(eventHandler, FILE_SINGLE_EDIT_TOOL_NAME, result, file_path); return result; } @@ -395,7 +400,7 @@ export function createEditExecute( message: 'old_string and new_string are identical. No changes to make.', error: `Error: ${ErrorMessages.IDENTICAL_STRINGS}` }; - emitFileToolResult(eventHandler, FILE_SINGLE_EDIT_TOOL_NAME, result); + emitFileToolResult(eventHandler, FILE_SINGLE_EDIT_TOOL_NAME, result, file_path); return result; } @@ -409,7 +414,7 @@ export function createEditExecute( message: `File '${file_path}' not found. Use file_write to create new files.`, error: `Error: ${ErrorMessages.FILE_NOT_FOUND}` }; - emitFileToolResult(eventHandler, FILE_SINGLE_EDIT_TOOL_NAME, result); + emitFileToolResult(eventHandler, FILE_SINGLE_EDIT_TOOL_NAME, result, file_path); return result; } @@ -446,7 +451,7 @@ export function createEditExecute( message: `String to replace was not found in '${file_path}'. Please verify the exact text to replace, including whitespace and indentation. \n File Preview: \n${preview + (content.length > PREVIEW_LENGTH ? '...' : '')}`, error: `Error: ${ErrorMessages.NO_MATCH_FOUND}`, }; - emitFileToolResult(eventHandler, FILE_SINGLE_EDIT_TOOL_NAME, result); + emitFileToolResult(eventHandler, FILE_SINGLE_EDIT_TOOL_NAME, result, file_path); return result; } @@ -458,7 +463,7 @@ export function createEditExecute( message: `Found ${occurrenceCount} occurrences of the text in '${file_path}'. Either make old_string more specific to match exactly one occurrence, or set replace_all to true to replace all occurrences.`, error: `Error: ${ErrorMessages.MULTIPLE_MATCHES}`, }; - emitFileToolResult(eventHandler, FILE_SINGLE_EDIT_TOOL_NAME, result); + emitFileToolResult(eventHandler, FILE_SINGLE_EDIT_TOOL_NAME, result, file_path); return result; } @@ -492,7 +497,7 @@ export function createEditExecute( }; // Emit tool_result event - emitFileToolResult(eventHandler, FILE_SINGLE_EDIT_TOOL_NAME, result); + emitFileToolResult(eventHandler, FILE_SINGLE_EDIT_TOOL_NAME, result, file_path); return result; }; @@ -531,7 +536,7 @@ export function createMultiEditExecute( message: pathValidation.error!, error: `Error: ${ErrorMessages.INVALID_FILE_PATH}` }; - emitFileToolResult(eventHandler, FILE_BATCH_EDIT_TOOL_NAME, result); + emitFileToolResult(eventHandler, FILE_BATCH_EDIT_TOOL_NAME, result, file_path); return result; } @@ -543,7 +548,7 @@ export function createMultiEditExecute( message: 'No edits provided. At least one edit is required.', error: `Error: ${ErrorMessages.NO_EDITS}` }; - emitFileToolResult(eventHandler, FILE_BATCH_EDIT_TOOL_NAME, result); + emitFileToolResult(eventHandler, FILE_BATCH_EDIT_TOOL_NAME, result, file_path); return result; } @@ -557,7 +562,7 @@ export function createMultiEditExecute( message: `File '${file_path}' not found. Use file_write to create new files.`, error: `Error: ${ErrorMessages.FILE_NOT_FOUND}` }; - emitFileToolResult(eventHandler, FILE_BATCH_EDIT_TOOL_NAME, result); + emitFileToolResult(eventHandler, FILE_BATCH_EDIT_TOOL_NAME, result, file_path); return result; } @@ -639,7 +644,7 @@ export function createMultiEditExecute( message: `Multi-edit validation failed:\n${validationErrors.join('\n')}`, error: `Error: ${ErrorMessages.EDIT_FAILED}`, }; - emitFileToolResult(eventHandler, FILE_BATCH_EDIT_TOOL_NAME, result); + emitFileToolResult(eventHandler, FILE_BATCH_EDIT_TOOL_NAME, result, file_path); return result; } @@ -661,7 +666,7 @@ export function createMultiEditExecute( }; // Emit tool_result event - emitFileToolResult(eventHandler, FILE_BATCH_EDIT_TOOL_NAME, result); + emitFileToolResult(eventHandler, FILE_BATCH_EDIT_TOOL_NAME, result, file_path); return result; }; @@ -693,6 +698,17 @@ export function createReadExecute( }; } + // Block reads of restricted files (e.g. Config.toml) in any path + const fileName = (file_path.replace(/\\/g, '/').split('/').pop() ?? '').toLowerCase(); + if (RESTRICTED_READ_FILES.some(f => f.toLowerCase() === fileName)) { + console.error(`[FileReadTool] Blocked read of restricted file: ${file_path}`); + return { + success: false, + message: `Reading '${file_path}' is not permitted.`, + error: `Error: ${ErrorMessages.FILE_READ_NOT_PERMITTED}` + }; + } + const fullPath = path.join(tempProjectPath, file_path); // Check if file exists @@ -705,16 +721,18 @@ export function createReadExecute( }; } + // Emit tool_call event now that we know the file exists + emitFileToolCall(eventHandler, FILE_READ_TOOL_NAME, file_path); + // Read file content const content = fs.readFileSync(fullPath, 'utf-8'); // Handle empty file if (content.trim().length === 0) { console.log(`[FileReadTool] File is empty: ${file_path}`); - return { - success: true, - message: `File '${file_path}' is empty.`, - }; + const result = { success: true, message: `File '${file_path}' is empty.` }; + emitFileToolResult(eventHandler, FILE_READ_TOOL_NAME, result, file_path); + return result; } // Split content into lines @@ -726,11 +744,13 @@ export function createReadExecute( const validation = validateLineRange(offset, limit, totalLines); if (!validation.valid) { console.error(`[FileReadTool] Invalid line range for file: ${file_path}, offset: ${offset}, limit: ${limit}`); - return { + const result = { success: false, message: validation.error!, error: `Error: ${ErrorMessages.INVALID_LINE_RANGE}` }; + emitFileToolResult(eventHandler, FILE_READ_TOOL_NAME, result, file_path); + return result; } const startIndex = offset - 1; // Convert to 0-based index @@ -739,20 +759,24 @@ export function createReadExecute( const rangedContent = truncateLongLines(rangedLines.join('\n')); console.log(`[FileReadTool] Read lines ${offset} to ${endIndex} from file: ${file_path}`); - return { + const result = { success: true, message: `Read lines ${offset} to ${endIndex} from '${file_path}' (${endIndex - startIndex} lines). \nContent:${rangedContent}`, }; + emitFileToolResult(eventHandler, FILE_READ_TOOL_NAME, result, file_path); + return result; } // Return full content const truncatedContent = truncateLongLines(content); console.log(`[FileReadTool] Read entire file: ${file_path}, total lines: ${totalLines}`); - return { + const result = { success: true, message: `Read entire file '${file_path}' (${totalLines} lines).\nContent:${truncatedContent}`, }; + emitFileToolResult(eventHandler, FILE_READ_TOOL_NAME, result, file_path); + return result; }; } @@ -889,7 +913,8 @@ export function createBatchEditTool(execute: MultiEditExecute) { export function createReadTool(execute: ReadExecute) { return tool({ description: `Reads a file from the local filesystem. - ALWAYS prefer reading files mentioned in the ser’s message in the chat history first. Only use this tool if you need to read a file that is not present in the chat history. + ALWAYS prefer reading files mentioned in the user’s message in the chat history first. Only use this tool if you need to read a file that is not present in the chat history. + NOTE: The following files are restricted and cannot be read: ${RESTRICTED_READ_FILES.join(", ")}. Usage: - The file_path parameter must be an filename only, do not include any directories unless the user specifically requests it. - You can optionally specify a line offset and limit (especially handy for long files). diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/ask/index.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/ask/index.ts index 1901e191edc..96962a9c66b 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/ask/index.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/ask/index.ts @@ -94,7 +94,7 @@ async function extractLearnPages(query: string): Promise { async function fetchDocumentationFromVectorStore(query: string): Promise { try { - const response = await fetchWithAuth(`${BACKEND_URL}/learn-docs-api/v1.0/topK`, { + const response = await fetchWithAuth(`${BACKEND_URL}/ask-api/v1.0/topK`, { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/constants.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/constants.ts index b076633d1d6..226c8c56b63 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/constants.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/constants.ts @@ -28,3 +28,4 @@ export const ERROR_NO_BALLERINA_SOURCES = "No Ballerina sources"; export const LOGIN_REQUIRED_WARNING = "Please sign in to BI Copilot to use this feature."; export const LOGIN_REQUIRED_WARNING_FOR_DEFAULT_MODEL = "Please sign in to BI Copilot to configure the WSO2 default model provider."; export const DEFAULT_PROVIDER_ADDED = "WSO2 default model provider configuration values were added to the Config.toml file."; +export const LLM_API_BASE_PATH = "/llm-api/v1.0"; diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/state/ApprovalManager.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/state/ApprovalManager.ts index c61dcf4d2f5..e17a36db7dc 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/state/ApprovalManager.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/state/ApprovalManager.ts @@ -16,8 +16,11 @@ * under the License. */ -import { Task } from '@wso2/ballerina-core/lib/state-machine-types'; -import { CopilotEventHandler } from '../utils/events'; +import { Task, MACHINE_VIEW } from "@wso2/ballerina-core/lib/state-machine-types"; +import { CopilotEventHandler } from "../utils/events"; +import { ConfigVariable } from "../../../utils/toml-utils"; +import { StateMachine } from "../../../stateMachine"; +import { approvalViewManager } from './ApprovalViewManager'; /** * Plan approval response @@ -45,6 +48,15 @@ export interface ConnectorSpecResponse { comment?: string; } +/** + * Configuration response containing actual values (converted to metadata before exposing to agent) + */ +export interface ConfigurationResponse { + provided: boolean; + configValues?: Record; + comment?: string; +} + /** * Generic promise resolver for approval requests */ @@ -67,6 +79,7 @@ export class ApprovalManager { private planApprovals = new Map>(); private taskApprovals = new Map>(); private connectorSpecs = new Map>(); + private configurationRequests = new Map>(); // Default timeout for abandoned approvals (30 minutes) private readonly DEFAULT_TIMEOUT_MS = 30 * 60 * 1000; @@ -98,7 +111,7 @@ export class ApprovalManager { requestPlanApproval( requestId: string, tasks: Task[], - eventHandler: CopilotEventHandler + eventHandler: CopilotEventHandler, ): Promise { console.log(`[ApprovalManager] Requesting plan approval: ${requestId}`); @@ -108,7 +121,7 @@ export class ApprovalManager { requestId: requestId, approvalType: "plan", tasks: tasks, - message: "Please review the implementation plan" + message: "Please review the implementation plan", }); // Create promise that will be resolved by resolvePlanApproval() @@ -168,7 +181,7 @@ export class ApprovalManager { requestId: string, taskDescription: string, tasks: Task[], - eventHandler: CopilotEventHandler + eventHandler: CopilotEventHandler, ): Promise { console.log(`[ApprovalManager] Requesting task approval: ${requestId}`); @@ -179,7 +192,7 @@ export class ApprovalManager { approvalType: "completion", tasks: tasks, taskDescription: taskDescription, - message: `Please verify the completed work for: ${taskDescription}` + message: `Please verify the completed work for: ${taskDescription}`, }); // Create promise that will be resolved by resolveTaskApproval() @@ -205,7 +218,7 @@ export class ApprovalManager { requestId: string, approved: boolean, comment?: string, - approvedTaskDescription?: string + approvedTaskDescription?: string, ): void { const resolver = this.taskApprovals.get(requestId); if (!resolver) { @@ -239,10 +252,7 @@ export class ApprovalManager { * @param eventHandler - Event handler to emit spec request * @returns Promise that resolves when user provides/cancels spec */ - requestConnectorSpec( - requestId: string, - eventHandler: CopilotEventHandler - ): Promise { + requestConnectorSpec(requestId: string, eventHandler: CopilotEventHandler): Promise { console.log(`[ApprovalManager] Requesting connector spec: ${requestId}`); // Emit event to frontend @@ -250,7 +260,7 @@ export class ApprovalManager { type: "connector_generation_notification", requestId: requestId, stage: "requesting_input", - message: "Please provide the OpenAPI specification" + message: "Please provide the OpenAPI specification", }); // Create promise that will be resolved by resolveConnectorSpec() @@ -272,12 +282,7 @@ export class ApprovalManager { * @param spec - The OpenAPI spec (if provided) * @param comment - Optional comment from user */ - resolveConnectorSpec( - requestId: string, - provided: boolean, - spec?: any, - comment?: string - ): void { + resolveConnectorSpec(requestId: string, provided: boolean, spec?: any, comment?: string): void { const resolver = this.connectorSpecs.get(requestId); if (!resolver) { console.warn(`[ApprovalManager] No pending connector spec request for: ${requestId}`); @@ -298,6 +303,107 @@ export class ApprovalManager { this.connectorSpecs.delete(requestId); } + // ============================================ + // Configuration Collection + // ============================================ + + /** + * Request configuration values from user + * Returns actual configuration values to tool (tool converts to metadata for agent) + * Opens a popup in the BI Visualizer for user input + * + * @param isTestConfig - Flag to indicate this is for test configuration (affects UI messaging) + * @param message - Custom message from configuration collector (includes smart analysis for test mode) + */ + requestConfiguration( + requestId: string, + variables: ConfigVariable[], + existingValues: Record, + eventHandler: CopilotEventHandler, + isTestConfig?: boolean, + message?: string + ): Promise { + console.log(`[ApprovalManager] Requesting ${isTestConfig ? 'test ' : ''}configuration: ${requestId}`); + + // Use provided message or generate default + const displayMessage = message || `Please provide ${variables.length} configuration value(s)`; + + // Emit collecting stage to AI Panel + eventHandler({ + type: "configuration_collection_event", + requestId, + stage: "collecting", + variables, + existingValues, + message: displayMessage, + isTestConfig, + }); + + const { projectPath } = StateMachine.context(); + + // Open configuration collector view + approvalViewManager.openApprovalViewPopup( + requestId, + 'configuration', + { + view: MACHINE_VIEW.ConfigurationCollector, + projectPath, + agentMetadata: { + configurationCollector: { + requestId, + variables, + existingValues, + message: displayMessage, + isTestConfig, + }, + }, + } + ); + + // Create promise that will be resolved by resolveConfiguration() + return new Promise((resolve, reject) => { + const timeoutId = setTimeout(() => { + this.configurationRequests.delete(requestId); + reject(new Error(`Configuration request timeout for request ${requestId}`)); + }, this.DEFAULT_TIMEOUT_MS); + + this.configurationRequests.set(requestId, { resolve, reject, timeoutId }); + }); + } + + /** + * Resolve configuration request (called by RPC method when user responds) + * Contains actual configuration values - tool will convert to metadata for agent + */ + resolveConfiguration( + requestId: string, + provided: boolean, + configValues?: Record, + comment?: string, + ): void { + const resolver = this.configurationRequests.get(requestId); + if (!resolver) { + console.warn(`[ApprovalManager] No pending configuration request for: ${requestId}`); + return; + } + + console.log(`[ApprovalManager] Resolving configuration request: ${requestId}, provided: ${provided}`); + + // Clear timeout + if (resolver.timeoutId) { + clearTimeout(resolver.timeoutId); + } + + // Resolve promise with actual configuration values (tool will sanitize before returning to agent) + resolver.resolve({ provided, configValues, comment }); + + // Cleanup + this.configurationRequests.delete(requestId); + + // Cleanup view and clear state machine metadata + approvalViewManager.cleanupView(requestId, true); + } + // ============================================ // Cleanup // ============================================ @@ -310,6 +416,9 @@ export class ApprovalManager { cancelAllPending(reason: string): void { console.log(`[ApprovalManager] Cancelling all pending approvals: ${reason}`); + // Cleanup all approval views + approvalViewManager.cleanupAllViews(); + const error = new Error(reason); // Cancel plan approvals @@ -338,16 +447,26 @@ export class ApprovalManager { resolver.reject(error); } this.connectorSpecs.clear(); + + // Resolve configuration requests as skipped so callers handle it as a normal skip + for (const [, resolver] of this.configurationRequests.entries()) { + if (resolver.timeoutId) { + clearTimeout(resolver.timeoutId); + } + resolver.resolve({ provided: false, comment: reason }); + } + this.configurationRequests.clear(); } /** * Get count of pending approvals (useful for debugging) */ - getPendingCount(): { plans: number; tasks: number; connectorSpecs: number } { + getPendingCount(): { plans: number; tasks: number; connectorSpecs: number; configurations: number } { return { plans: this.planApprovals.size, tasks: this.taskApprovals.size, - connectorSpecs: this.connectorSpecs.size + connectorSpecs: this.connectorSpecs.size, + configurations: this.configurationRequests.size, }; } } diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/state/ApprovalViewManager.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/state/ApprovalViewManager.ts new file mode 100644 index 00000000000..f88f14010f5 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/state/ApprovalViewManager.ts @@ -0,0 +1,336 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { MACHINE_VIEW, EVENT_TYPE, VisualizerLocation, PopupVisualizerLocation, AgentMetadata } from '@wso2/ballerina-core'; +import { AiPanelWebview } from '../../../views/ai-panel/webview'; +import { VisualizerWebview } from '../../../views/visualizer/webview'; +import { openView as openMainView, StateMachine } from '../../../stateMachine'; +import { openPopupView, StateMachinePopup } from '../../../stateMachinePopup'; +import { notifyApprovalOverlayState } from '../../../RPCLayer'; + +export type ApprovalType = 'configuration' | 'task' | 'plan' | 'connector_spec'; + +interface OpenedApprovalView { + requestId: string; + viewType: 'popup' | 'main' | 'inline'; + approvalType: ApprovalType; + machineView: MACHINE_VIEW | null; + isAutoOpened: boolean; + hadExistingVisualizer: boolean; + timestamp: number; + isClosed?: boolean; + projectPath?: string; + agentMetadata?: AgentMetadata; +} + +/** + * Centralized manager for approval view lifecycles. + * Handles opening, tracking, and cleanup of approval views with chat overlay coordination. + */ +export class ApprovalViewManager { + private static instance: ApprovalViewManager; + private openedViews = new Map(); + + private constructor() {} + + static getInstance(): ApprovalViewManager { + if (!this.instance) { + this.instance = new ApprovalViewManager(); + } + return this.instance; + } + + /** + * Register an inline approval shown in chat without opening a separate view. + */ + registerInlineApproval( + requestId: string, + approvalType: ApprovalType + ): void { + console.log(`[ApprovalViewManager] Registering inline ${approvalType} approval:`, requestId); + + this.openedViews.set(requestId, { + requestId, + viewType: 'inline', + approvalType, + machineView: null, + isAutoOpened: true, + hadExistingVisualizer: false, + timestamp: Date.now() + }); + } + + /** + * Open an approval view as popup (or main view if no visualizer exists). + */ + openApprovalViewPopup( + requestId: string, + approvalType: ApprovalType, + viewLocation: VisualizerLocation | PopupVisualizerLocation + ): void { + const isAutoOpened = true; + const machineView = viewLocation.view!; + const projectPath = viewLocation.projectPath; + const agentMetadata = 'agentMetadata' in viewLocation ? viewLocation.agentMetadata : undefined; + + const { viewType, hadExistingVisualizer } = this._openApprovalViewPopup( + machineView, + projectPath, + agentMetadata + ); + + console.log(`[ApprovalViewManager] Opening ${approvalType} view:`, { + requestId, + machineView, + viewType, + isAutoOpened, + hadExistingVisualizer + }); + + this.openedViews.set(requestId, { + requestId, + viewType, + approvalType, + machineView, + isAutoOpened, + hadExistingVisualizer, + timestamp: Date.now(), + projectPath, + agentMetadata + }); + + const overlayMessage = this.getOverlayMessage(approvalType); + this.sendChatOverlayNotification(true, overlayMessage); + } + + private sendChatOverlayNotification(show: boolean, message?: string): void { + try { + notifyApprovalOverlayState({ show, message }); + console.log(`[ApprovalViewManager] Chat overlay ${show ? 'enabled' : 'disabled'}`, message ? `with message: ${message}` : ''); + } catch (error) { + console.error('[ApprovalViewManager] Failed to send chat overlay notification:', error); + } + } + + private getOverlayMessage(approvalType: ApprovalType): string { + const messages: Record = { + 'configuration': 'Waiting for configuration...', + 'task': 'Waiting for task approval...', + 'plan': 'Waiting for plan approval...', + 'connector_spec': 'Waiting for connector spec approval...' + }; + return messages[approvalType]; + } + + getView(requestId: string): OpenedApprovalView | undefined { + return this.openedViews.get(requestId); + } + + /** + * Check if there are any active approval views requiring chat overlay. + */ + hasActiveApprovals(): boolean { + return Array.from(this.openedViews.values()).some(view => !view.isClosed); + } + + /** + * Handle popup close by user. Preserves metadata for reopening and manages navigation. + */ + handlePopupClosed(requestId: string): void { + const view = this.openedViews.get(requestId); + if (!view) { return; } + + console.log(`[ApprovalViewManager] Popup closed by user:`, { + requestId, + hadExistingVisualizer: view.hadExistingVisualizer + }); + + view.isClosed = true; + + if (!this.hasActiveApprovals()) { + this.sendChatOverlayNotification(false); + } + + if (!view.hadExistingVisualizer) { + const ctx = StateMachine.context(); + openMainView(EVENT_TYPE.OPEN_VIEW, { + view: MACHINE_VIEW.PackageOverview, + projectPath: ctx.projectPath + }); + } + } + + cleanupView(requestId: string, clearMetadata: boolean = true): void { + const view = this.openedViews.get(requestId); + if (!view) { return; } + + console.log(`[ApprovalViewManager] Cleaning up ${view.approvalType} view:`, requestId); + + if (clearMetadata) { + this.clearViewMetadata(view); + } + + this.openedViews.delete(requestId); + this.sendChatOverlayNotification(false); + } + + cleanupAllViews(): void { + console.log('[ApprovalViewManager] Cleaning up all approval views'); + + const allViews = Array.from(this.openedViews.values()); + + for (const view of allViews) { + this.clearViewMetadata(view); + } + + this.openedViews.clear(); + this.sendChatOverlayNotification(false); + } + + private clearViewMetadata(view: OpenedApprovalView): void { + console.log(`[ApprovalViewManager] Clearing metadata for ${view.approvalType}:`, view.requestId); + + if (view.viewType === 'inline') { + return; + } + + if (view.viewType === 'popup') { + const ctx = StateMachinePopup.context(); + + if (ctx.view === view.machineView) { + StateMachinePopup.sendEvent(EVENT_TYPE.CLOSE_VIEW, { + view: null, + agentMetadata: undefined + }); + } + } else if (view.viewType === 'main') { + const ctx = StateMachine.context(); + + if (ctx.view === view.machineView) { + openMainView(EVENT_TYPE.OPEN_VIEW, { + view: MACHINE_VIEW.PackageOverview, + projectPath: ctx.projectPath + }); + } + } + } + + onVisualizerClosed(): void { + if (!this.hasActiveApprovals()) { + return; + } + + console.log('[ApprovalViewManager] VisualizerWebview closed, marking all views as closed'); + + for (const view of this.openedViews.values()) { + view.isClosed = true; + } + + this.sendChatOverlayNotification(false); + } + + getOpenViews(): OpenedApprovalView[] { + return Array.from(this.openedViews.values()); + } + + /** + * Opens approval view as popup if visualizer exists, otherwise as main view. + */ + private _openApprovalViewPopup( + machineView: MACHINE_VIEW, + projectPath: string, + agentMetadata?: AgentMetadata + ): { viewType: 'popup' | 'main', hadExistingVisualizer: boolean } { + const hadExistingVisualizer = !!VisualizerWebview.currentPanel; + const viewType: 'popup' | 'main' = hadExistingVisualizer ? 'popup' : 'main'; + + if (viewType === 'popup') { + openPopupView(EVENT_TYPE.OPEN_VIEW, { + view: machineView, + projectPath, + agentMetadata + }); + } else { + openMainView(EVENT_TYPE.OPEN_VIEW, { + view: machineView, + projectPath, + agentMetadata + }); + } + + return { viewType, hadExistingVisualizer }; + } + + /** + * Reopen a previously closed approval view. + */ + reopenApprovalViewPopup(requestId: string): void { + const view = this.openedViews.get(requestId); + + if (!view) { + console.error('[ApprovalViewManager] Cannot reopen - approval view not found:', requestId); + return; + } + + if (view.viewType === 'inline') { + console.log('[ApprovalViewManager] Inline approval - no view to reopen'); + return; + } + + if (!view.projectPath || !view.machineView) { + console.error('[ApprovalViewManager] Cannot reopen - missing required metadata:', requestId); + return; + } + + console.log(`[ApprovalViewManager] Reopening ${view.approvalType} view:`, { + requestId, + wasClosed: view.isClosed, + viewType: view.viewType + }); + + view.isClosed = false; + view.isAutoOpened = false; + + const overlayMessage = this.getOverlayMessage(view.approvalType); + this.sendChatOverlayNotification(true, overlayMessage); + + const { viewType, hadExistingVisualizer } = this._openApprovalViewPopup( + view.machineView, + view.projectPath, + view.agentMetadata + ); + view.viewType = viewType; + view.hadExistingVisualizer = hadExistingVisualizer; + } + + /** + * Open a view in main view (not as popup, no tracking). + * Only opens if AI panel is active. + */ + openView(machineView: MACHINE_VIEW): void { + if (!AiPanelWebview.currentPanel) { + console.log(`[ApprovalViewManager] Skipping ${machineView} open (AI panel closed)`); + return; + } + + console.log(`[ApprovalViewManager] Opening ${machineView} in main view`); + openMainView(EVENT_TYPE.OPEN_VIEW, { view: machineView }); + } +} + +export const approvalViewManager = ApprovalViewManager.getInstance(); diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/utils.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/utils.ts index c2210f2296f..cd4f4930646 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/utils.ts @@ -21,35 +21,29 @@ import path from "path"; import vscode, { Uri, workspace } from 'vscode'; import { StateMachine } from "../../stateMachine"; -import { getRefreshedAccessToken, REFRESH_TOKEN_NOT_AVAILABLE_ERROR_MESSAGE } from '../../utils/ai/auth'; +import { + getRefreshedAccessToken, + TOKEN_NOT_AVAILABLE_ERROR_MESSAGE, + getAuthCredentials, + isPlatformExtensionAvailable, + isDevantUserLoggedIn, + getPlatformStsToken, + exchangeStsToCopilotToken, + storeAuthCredentials, + NO_AUTH_CREDENTIALS_FOUND +} from '../../utils/ai/auth'; import { AIStateMachine } from '../../views/ai-panel/aiMachine'; import { AIMachineEventType } from '@wso2/ballerina-core/lib/state-machine-types'; -import { CONFIG_FILE_NAME, ERROR_NO_BALLERINA_SOURCES, PROGRESS_BAR_MESSAGE_FROM_WSO2_DEFAULT_MODEL } from './constants'; +import { CONFIG_FILE_NAME, ERROR_NO_BALLERINA_SOURCES, LLM_API_BASE_PATH, PROGRESS_BAR_MESSAGE_FROM_WSO2_DEFAULT_MODEL } from './constants'; import { getCurrentBallerinaProjectFromContext } from '../config-generator/configGenerator'; -import { BallerinaProject, LoginMethod } from '@wso2/ballerina-core'; +import { BallerinaProject, LoginMethod, AuthCredentials } from '@wso2/ballerina-core'; import { BallerinaExtension } from 'src/core'; -import { getAuthCredentials } from '../../utils/ai/auth'; const config = workspace.getConfiguration('ballerina'); const isDevantDev = process.env.CLOUD_ENV === "dev"; -export const BACKEND_URL: string = config.get('rootUrl') || isDevantDev ? process.env.BALLERINA_DEV_COPLIOT_ROOT_URL : process.env.BALLERINA_ROOT_URL; -export const AUTH_ORG: string = config.get('authOrg') || isDevantDev ? process.env.BALLERINA_DEV_COPLIOT_AUTH_ORG : process.env.BALLERINA_AUTH_ORG; -export const AUTH_CLIENT_ID: string = config.get('authClientID') || isDevantDev ? process.env.BALLERINA_DEV_COPLIOT_AUTH_CLIENT_ID : process.env.BALLERINA_AUTH_CLIENT_ID; -export const AUTH_REDIRECT_URL: string = config.get('authRedirectURL') || isDevantDev ? process.env.BALLERINA_DEV_COPLIOT_AUTH_REDIRECT_URL : process.env.BALLERINA_AUTH_REDIRECT_URL; +export const BACKEND_URL: string = config.get('rootUrl') || (isDevantDev ? process.env.COPILOT_DEV_ROOT_URL : process.env.COPILOT_ROOT_URL); -export const DEVANT_STS_TOKEN_CONFIG: string = config.get('cloudStsToken') || process.env.CLOUD_STS_TOKEN; - -//TODO: Move to configs after custom URL approved -const DEVANT_DEV_EXCHANGE_URL = 'https://e95488c8-8511-4882-967f-ec3ae2a0f86f-dev.e1-us-east-azure.choreoapis.dev/ballerina-copilot/devant-token-exchange-ser/v1.0/exchange'; -const DEVANT_PROD_EXCHANGE_URL = 'https://e95488c8-8511-4882-967f-ec3ae2a0f86f-prod.e1-us-east-azure.choreoapis.dev/ballerina-copilot/devant-token-exchange-ser/v1.0/exchange'; - -export function getDevantExchangeUrl(): string { - if (isDevantDev) { - return DEVANT_DEV_EXCHANGE_URL; - } else { - return DEVANT_PROD_EXCHANGE_URL; - } -} +export const DEVANT_TOKEN_EXCHANGE_URL: string = BACKEND_URL + "/auth-api/v1.0/auth/token-exchange"; // This refers to old backend before FE Migration. We need to eventually remove this. export const OLD_BACKEND_URL: string = BACKEND_URL + "/v2.0"; @@ -145,36 +139,44 @@ export async function getConfigFilePath(ballerinaExtInstance: BallerinaExtension } export async function getTokenForDefaultModel() { - try { - const credentials = await getAuthCredentials(); + // Priority 1: Check stored credentials + const credentials = await getAuthCredentials(); + if (credentials) { if (!credentials) { - throw new Error('No authentication credentials found.'); + throw new Error(NO_AUTH_CREDENTIALS_FOUND); } // Check login method and handle accordingly if (credentials.loginMethod === LoginMethod.BI_INTEL) { - // Keep existing behavior for BI Intel - refresh token + // Re-exchange STS token to get a fresh token const token = await getRefreshedAccessToken(); return token; - } else if (credentials.loginMethod === LoginMethod.DEVANT_ENV) { - // For Devant, return stored access token - return credentials.secrets.accessToken; } else { - // For anything else, show error const errorMessage = 'This feature is only available for BI Intelligence users.'; vscode.window.showErrorMessage(errorMessage); throw new Error(errorMessage); } - } catch (error) { - throw error; } -} -export async function getBackendURL(): Promise { - return new Promise(async (resolve) => { - resolve(OLD_BACKEND_URL); - }); + // Priority 2: No stored credentials — check Devant Platform extension + if (isPlatformExtensionAvailable()) { + const isLoggedIn = await isDevantUserLoggedIn(); + if (isLoggedIn) { + const stsToken = await getPlatformStsToken(); + if (stsToken) { + const secrets = await exchangeStsToCopilotToken(stsToken); + const newCredentials: AuthCredentials = { + loginMethod: LoginMethod.BI_INTEL, + secrets + }; + await storeAuthCredentials(newCredentials); + return secrets.accessToken; + } + } + } + + throw new Error(TOKEN_NOT_AVAILABLE_ERROR_MESSAGE); } // Function to find a file in a case-insensitive way @@ -272,9 +274,17 @@ export async function addConfigFile(configPath: string): Promise { const token: string | null = await getTokenForDefaultModel(); if (token === null) { AIStateMachine.service().send(AIMachineEventType.LOGOUT); - throw new Error(REFRESH_TOKEN_NOT_AVAILABLE_ERROR_MESSAGE); + throw new Error(TOKEN_NOT_AVAILABLE_ERROR_MESSAGE); + } + const openAiEpUrl = BACKEND_URL + LLM_API_BASE_PATH + "/openai"; + const success = addDefaultModelConfig(configPath, token, openAiEpUrl); + + // Also update tests/Config.toml if a tests folder exists + const testsDir = path.join(configPath, 'tests'); + if (fs.existsSync(testsDir) && fs.statSync(testsDir).isDirectory()) { + addDefaultModelConfig(testsDir, token, openAiEpUrl); } - const success = addDefaultModelConfig(configPath, token, await getBackendURL()); + if (success) { return true; } diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/utils/ai-client.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/utils/ai-client.ts index dd1ecc17da5..53ae9b0393b 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/utils/ai-client.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/utils/ai-client.ts @@ -16,12 +16,14 @@ import { createAnthropic } from "@ai-sdk/anthropic"; import { createAmazonBedrock } from "@ai-sdk/amazon-bedrock"; -import { getAccessToken, getLoginMethod, getRefreshedAccessToken, getAwsBedrockCredentials, refreshDevantToken } from "../../../utils/ai/auth"; +import { createVertexAnthropic } from "@ai-sdk/google-vertex/anthropic"; +import { getAccessToken, getLoginMethod, getRefreshedAccessToken, getAwsBedrockCredentials, getVertexAiCredentials } from "../../../utils/ai/auth"; import { AIStateMachine } from "../../../views/ai-panel/aiMachine"; import { BACKEND_URL } from "../utils"; -import { AIMachineEventType, AnthropicKeySecrets, LoginMethod, BIIntelSecrets, DevantEnvSecrets } from "@wso2/ballerina-core"; +import { LLM_API_BASE_PATH } from "../constants"; +import { AIMachineEventType, AnthropicKeySecrets, LoginMethod, BIIntelSecrets } from "@wso2/ballerina-core"; -export const ANTHROPIC_HAIKU = "claude-3-5-haiku-20241022"; +export const ANTHROPIC_HAIKU = "claude-haiku-4-5-20251001"; export const ANTHROPIC_SONNET_4 = "claude-sonnet-4-5-20250929"; type AnthropicModel = @@ -56,7 +58,11 @@ let cachedAnthropic: ReturnType | null = null; let cachedAuthMethod: LoginMethod | null = null; /** - * Reusable fetch function that handles authentication with token refresh + * Reusable fetch function that handles authentication with token refresh. + * Uses tiered refresh strategy for BI_INTEL: + * 1. Try STS token re-exchange via platform extension + * 2. If both fail, logout the user + * * @param input - The URL, Request object, or string to fetch * @param options - Fetch options * @returns Promise @@ -70,17 +76,12 @@ export async function fetchWithAuth(input: string | URL | Request, options: Requ "Content-Type": "application/json", 'User-Agent': 'Ballerina-VSCode-Plugin', 'Connection': 'keep-alive', + 'x-product': 'bi', + 'x-usage-context': 'copilot', + 'x-metadata': JSON.stringify({ isCloudEditor: !!process.env.CLOUD_ENV }), }; - if (credentials && loginMethod === LoginMethod.DEVANT_ENV) { - // For DEVANT_ENV, use Bearer token (exchanged from STS token) - const secrets = credentials.secrets as DevantEnvSecrets; - if (secrets.accessToken && secrets.accessToken.trim() !== "") { - headers["Authorization"] = `Bearer ${secrets.accessToken}`; - } else { - console.warn("DevantEnv access token missing, this may cause authentication issues"); - } - } else if (credentials && loginMethod === LoginMethod.BI_INTEL) { + if (credentials && loginMethod === LoginMethod.BI_INTEL) { // For BI_INTEL, use Bearer token const secrets = credentials.secrets as BIIntelSecrets; headers["Authorization"] = `Bearer ${secrets.accessToken}`; @@ -95,38 +96,36 @@ export async function fetchWithAuth(input: string | URL | Request, options: Requ let response = await fetch(input, options); console.log("Response status: ", response.status); - // Handle token expiration for both BI_INTEL and DEVANT_ENV methods + // Handle token expiration for BI_INTEL method with tiered refresh if (response.status === 401) { if (loginMethod === LoginMethod.BI_INTEL) { - console.log("Token expired. Refreshing BI_INTEL token..."); - const newToken = await getRefreshedAccessToken(); - if (newToken) { - options.headers = { - ...options.headers, - 'Authorization': `Bearer ${newToken}`, - }; - response = await fetch(input, options); - } else { - AIStateMachine.service().send(AIMachineEventType.LOGOUT); - return; - } - } else if (loginMethod === LoginMethod.DEVANT_ENV) { - console.log("Token expired. Refreshing DEVANT_ENV token..."); + console.log("Token expired. Attempting tiered refresh for BI_INTEL..."); + try { - const newToken = await refreshDevantToken(); + // Tiered refresh: STS token re-exchange via platform extension + const newToken = await getRefreshedAccessToken(); if (newToken) { + console.log("Token refreshed via STS exchange"); options.headers = { ...options.headers, 'Authorization': `Bearer ${newToken}`, }; response = await fetch(input, options); + + // If still 401 after refresh, logout + if (response.status === 401) { + console.log("Still unauthorized after token refresh. Logging out."); + AIStateMachine.service().send(AIMachineEventType.SILENT_LOGOUT); + return; + } } else { - AIStateMachine.service().send(AIMachineEventType.LOGOUT); + console.log("Token refresh returned null. Logging out."); + AIStateMachine.service().send(AIMachineEventType.SILENT_LOGOUT); return; } - } catch (error) { - console.error("Failed to refresh Devant token:", error); - AIStateMachine.service().send(AIMachineEventType.LOGOUT); + } catch (refreshError) { + console.error("Token refresh failed:", refreshError); + AIStateMachine.service().send(AIMachineEventType.SILENT_LOGOUT); return; } } @@ -135,7 +134,7 @@ export async function fetchWithAuth(input: string | URL | Request, options: Requ // Handle usage limit exceeded if (response.status === 429) { console.log("Usage limit exceeded (429)"); - const error = new Error("Usage limit exceeded. Please try again later."); + const error = new Error("Usage limit exceeded."); error.name = "UsageLimitError"; (error as any).statusCode = 429; throw error; @@ -144,7 +143,7 @@ export async function fetchWithAuth(input: string | URL | Request, options: Requ return response; } catch (error: any) { if (error?.message === "TOKEN_EXPIRED") { - AIStateMachine.service().send(AIMachineEventType.LOGOUT); + AIStateMachine.service().send(AIMachineEventType.SILENT_LOGOUT); } else { throw error; } @@ -160,8 +159,8 @@ export const getAnthropicClient = async (model: AnthropicModel): Promise => // Recreate client if login method has changed or no cached instance if (!cachedAnthropic || cachedAuthMethod !== loginMethod) { - let url = BACKEND_URL + "/intelligence-api/v1.0/claude"; - if (loginMethod === LoginMethod.BI_INTEL || loginMethod === LoginMethod.DEVANT_ENV) { + let url = BACKEND_URL + LLM_API_BASE_PATH + "/claude"; + if (loginMethod === LoginMethod.BI_INTEL) { cachedAnthropic = createAnthropic({ baseURL: url, apiKey: "xx", // dummy value; real auth is via fetchWithAuth @@ -203,6 +202,34 @@ export const getAnthropicClient = async (model: AnthropicModel): Promise => const bedrockModelId = `${regionalPrefix}.${baseModelId}`; return bedrock(bedrockModelId); + } else if (loginMethod === LoginMethod.VERTEX_AI) { + const vertexCredentials = await getVertexAiCredentials(); + if (!vertexCredentials) { + throw new Error('Vertex AI credentials not found'); + } + + const vertexAnthropic = createVertexAnthropic({ + project: vertexCredentials.projectId, + location: vertexCredentials.location, + googleAuthOptions: { + credentials: { + client_email: vertexCredentials.clientEmail, + private_key: vertexCredentials.privateKey, + }, + }, + }); + + const vertexModelMap: Record = { + [ANTHROPIC_HAIKU]: "claude-3-5-haiku@20241022", + [ANTHROPIC_SONNET_4]: "claude-sonnet-4-5@20250929", + }; + + const vertexModelId = vertexModelMap[model]; + if (!vertexModelId) { + throw new Error(`Unsupported model for Vertex AI: ${model}`); + } + + return vertexAnthropic(vertexModelId); } else { throw new Error(`Unsupported login method: ${loginMethod}`); } @@ -231,6 +258,7 @@ export const getProviderCacheControl = async (): Promise = switch (loginMethod) { case LoginMethod.AWS_BEDROCK: return { bedrock: { cachePoint: { type: 'default' } } }; + case LoginMethod.VERTEX_AI: case LoginMethod.ANTHROPIC_KEY: case LoginMethod.BI_INTEL: default: diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/utils/ai-utils.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/utils/ai-utils.ts index 9a1c1c0aa18..7227d2ea4a0 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/utils/ai-utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/utils/ai-utils.ts @@ -233,20 +233,22 @@ export function sendIntermidateStateNotification(intermediaryState: Documentatio sendAIPanelNotification(msg); } -export function sendToolCallNotification(toolName: string, toolInput?: any): void { +export function sendToolCallNotification(toolName: string, toolInput?: any, toolCallId?: string): void { const msg: ToolCall = { type: "tool_call", toolName: toolName, toolInput: toolInput, + toolCallId: toolCallId, }; sendAIPanelNotification(msg); } -export function sendToolResultNotification(toolName: string, toolOutput?: any): void { +export function sendToolResultNotification(toolName: string, toolOutput?: any, toolCallId?: string): void { const msg: ToolResult = { type: "tool_result", toolName: toolName, toolOutput: toolOutput, + toolCallId: toolCallId, }; sendAIPanelNotification(msg); } @@ -292,6 +294,10 @@ export function sendConnectorGenerationNotification(event: ChatNotify & { type: sendAIPanelNotification(event); } +export function sendConfigurationCollectionNotification(event: ChatNotify & { type: "configuration_collection_event" }): void { + sendAIPanelNotification(event); +} + function sendAIPanelNotification(msg: ChatNotify): void { RPCLayer._messenger.sendNotification(onChatNotify, { type: "webview", webviewType: AiPanelWebview.viewType }, msg); } @@ -307,7 +313,7 @@ export function getErrorMessage(error: unknown): string { if (error instanceof Error) { // Standard Error objects have a .message property if (error.name === "UsageLimitError") { - return "Usage limit exceeded. Please try again later."; + return "Usage limit exceeded."; } if (error.name === "AI_RetryError") { return "An error occured connecting with the AI service. Please try again later."; @@ -327,7 +333,7 @@ export function getErrorMessage(error: unknown): string { ) { // Check if it has a statusCode property indicating 429 if ("statusCode" in error && (error as any).statusCode === 429) { - return "Usage limit exceeded. Please try again later."; + return "Usage limit exceeded."; } return (error as { message: string }).message; } diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/utils/events.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/utils/events.ts index f4893ac6c28..e2d68b3c377 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/utils/events.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/utils/events.ts @@ -30,6 +30,7 @@ import { sendAbortNotification, sendSaveChatNotification, sendConnectorGenerationNotification, + sendConfigurationCollectionNotification, sendReviewActionsNotification, } from "./ai-utils"; @@ -75,10 +76,10 @@ export function createWebviewEventHandler(command: Command): CopilotEventHandler sendMessagesNotification(event.messages); break; case "tool_call": - sendToolCallNotification(event.toolName, event.toolInput); + sendToolCallNotification(event.toolName, event.toolInput, event.toolCallId); break; case "tool_result": - sendToolResultNotification(event.toolName, event.toolOutput); + sendToolResultNotification(event.toolName, event.toolOutput, event.toolCallId); break; case "task_approval_request": console.log("[Event Handler] Task approval request received:", event); @@ -103,6 +104,9 @@ export function createWebviewEventHandler(command: Command): CopilotEventHandler case "connector_generation_notification": sendConnectorGenerationNotification(event); break; + case "configuration_collection_event": + sendConfigurationCollectionNotification(event); + break; default: console.warn(`Unhandled event type: ${event}`); break; diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/utils/feedback.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/utils/feedback.ts new file mode 100644 index 00000000000..3f4bfe6ce4b --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/utils/feedback.ts @@ -0,0 +1,52 @@ +// Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import { SubmitFeedbackRequest } from "@wso2/ballerina-core"; +import { extension } from "../../../BalExtensionContext"; +import { StateMachine } from "../../../stateMachine"; +import { sendTelemetryEvent, TM_EVENT_BALLERINA_AI_GENERATION_FEEDBACK, CMP_BALLERINA_AI_GENERATION } from "../../telemetry"; +import { getHashedProjectId } from "../../telemetry/common/project-id"; + +/** + * Submits user feedback for AI-generated content to the backend. + * + * @param content - The feedback request payload + * @returns True if feedback was submitted successfully, false otherwise + */ +export async function submitFeedback(content: SubmitFeedbackRequest): Promise { + try { + const projectPath = StateMachine.context()?.projectPath || ''; + const projectId = await getHashedProjectId(projectPath); + + sendTelemetryEvent( + extension.ballerinaExtInstance, + TM_EVENT_BALLERINA_AI_GENERATION_FEEDBACK, + CMP_BALLERINA_AI_GENERATION, + { + 'project.id': projectId, + 'feedback.type': content.positive ? 'positive' : 'negative', + 'feedback.message': content.feedbackText || '', + 'feedback.has_text': content.feedbackText ? 'true' : 'false', + 'feedback.text_length': content.feedbackText?.length.toString() || '0', + 'chat.has_thread': content.messages.length > 0 ? 'true' : 'false', + 'chat.thread': JSON.stringify(content.messages), + } + ); + } catch (error) { + console.error("Error submitting feedback:", error); + return false; + } +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/utils/generation-response.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/utils/generation-response.ts new file mode 100644 index 00000000000..9db4adb1a2f --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/utils/generation-response.ts @@ -0,0 +1,65 @@ +// Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import { extension } from "../../../BalExtensionContext"; +import { StateMachine } from "../../../stateMachine"; +import { + sendTelemetryEvent, + TM_EVENT_BALLERINA_AI_GENERATION_KEPT, + TM_EVENT_BALLERINA_AI_GENERATION_DISCARD, + CMP_BALLERINA_AI_GENERATION +} from "../../telemetry"; +import { getHashedProjectId } from "../../telemetry/common/project-id"; + +/** + * Sends a telemetry event when the user keeps an AI-generated response. + * + * @param messageId - The message identifier for the kept generation + */ +export async function sendGenerationKeptTelemetry(messageId: string): Promise { + const projectPath = StateMachine.context()?.projectPath || ''; + const projectId = await getHashedProjectId(projectPath); + + sendTelemetryEvent( + extension.ballerinaExtInstance, + TM_EVENT_BALLERINA_AI_GENERATION_KEPT, + CMP_BALLERINA_AI_GENERATION, + { + 'message.id': messageId, + 'project.id': projectId, + } + ); +} + +/** + * Sends a telemetry event when the user discard an AI-generated response. + * + * @param messageId - The message identifier for the discarded generation + */ +export async function sendGenerationDiscardTelemetry(messageId: string): Promise { + const projectPath = StateMachine.context()?.projectPath || ''; + const projectId = await getHashedProjectId(projectPath); + + sendTelemetryEvent( + extension.ballerinaExtInstance, + TM_EVENT_BALLERINA_AI_GENERATION_DISCARD, + CMP_BALLERINA_AI_GENERATION, + { + 'message.id': messageId, + 'project.id': projectId, + } + ); +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/utils/libs/function-registry.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/utils/libs/function-registry.ts index ef6c86198d1..6b22595c509 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/utils/libs/function-registry.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/utils/libs/function-registry.ts @@ -32,14 +32,13 @@ import { getAnthropicClient, ANTHROPIC_HAIKU } from "../ai-client"; import { GenerationType } from "./libraries"; // import { getRequiredTypesFromLibJson } from "../healthcare/healthcare"; import { langClient } from "../../activator"; -import { getGenerationMode } from "../ai-utils"; // Constants for type definitions const TYPE_RECORD = 'Record'; const TYPE_CONSTRUCTOR = 'Constructor'; export async function selectRequiredFunctions(prompt: string, selectedLibNames: string[], generationType: GenerationType): Promise { - const selectedLibs: Library[] = await getMaximizedSelectedLibs(selectedLibNames, generationType); + const selectedLibs: Library[] = await getMaximizedSelectedLibs(selectedLibNames); const functionsResponse: GetFunctionResponse[] = await getRequiredFunctions(selectedLibNames, prompt, selectedLibs, generationType); let typeLibraries: Library[] = []; if (generationType === GenerationType.HEALTHCARE_GENERATION) { @@ -201,9 +200,11 @@ async function getSuggestedFunctions( const getLibSystemPrompt = `You are an AI assistant tasked with filtering and removing unwanted functions and clients from a provided set of libraries and clients based on a user query. The provided libraries are a subset of the full requirements for the query. Your goal is to return ONLY the relevant libraries, clients, and functions from the provided context that match the user's needs. -Rules: -1. Use ONLY the libraries listed in Library_Context_JSON. -2. Do NOT create or infer new libraries or functions.`; +CRITICAL RULES: +1. Use ONLY items from Library_Context_JSON - do not create or infer new ones. +2. Your ONLY task is selection - include or exclude items, NEVER modify field values. +3. Copy all field values EXACTLY as provided - preserve every character including backslashes and special characters. +4. For resource functions: "accessor" and "paths" are SEPARATE fields - NEVER combine them.`; const getLibUserPrompt = `You will be provided with a list of libraries, clients, and their functions, and a user query. @@ -221,9 +222,16 @@ To process the user query and filter the libraries, clients, and functions, foll 2. Review the provided libraries, clients, and functions in Library_Context_JSON. 3. Select only the libraries, clients, and functions that directly match the query's needs. 4. Exclude any irrelevant libraries, clients, or functions. -5. If no relevant functions are found, return an empty array for the libraries. +5. If no relevant functions are found, return an empty array for libraries. 6. Organize the remaining relevant information. +CRITICAL - Field Preservation: +- For resource functions: "accessor" contains ONLY the HTTP method (e.g., "post", "get") - do NOT put path info in it. +- The "paths" field is separate - do NOT merge with accessor. +- Copy all values exactly - preserve backslashes, dots, and special characters. + +Return the filtered subset with IDENTICAL field values. + Now, based on the provided libraries, clients, and functions, and the user query, please filter and return the relevant information. `; @@ -239,6 +247,9 @@ Now, based on the provided libraries, clients, and functions, and the user query messages: messages, schema: getFunctionsResponseSchema, abortSignal: new AbortController().signal, + providerOptions: { + anthropic: { structuredOutputMode: 'jsonTool' }, + }, }); const libList = object as GetFunctionsResponse; @@ -329,12 +340,22 @@ function filteredNormalFunctions(functions?: RemoteFunction[], generationType?: })); } -export async function getMaximizedSelectedLibs(libNames: string[], generationType: GenerationType): Promise { +export async function getMaximizedSelectedLibs(libNames: string[]): Promise { const result = (await langClient.getCopilotFilteredLibraries({ - libNames: libNames, - mode: getGenerationMode(generationType), + libNames: libNames })) as { libraries: Library[] }; - return result.libraries as Library[]; + const normalizedLibraries: Library[] = result.libraries.map(lib => { + return { + name: lib.name, + description: lib.description, + clients: lib.clients ? lib.clients : [], + functions: lib.functions ? lib.functions : [], + typeDefs: lib.typeDefs ? lib.typeDefs : [], + services: lib.services ? lib.services : [], + }; + }); + + return normalizedLibraries; } export async function toMaximizedLibrariesFromLibJson( @@ -708,8 +729,7 @@ async function getExternalRecords( if (!library) { console.warn(`Library ${libName} is not found in the context. Fetching library details.`); const result = (await langClient.getCopilotFilteredLibraries({ - libNames: [libName], - mode: getGenerationMode(GenerationType.CODE_GENERATION), + libNames: [libName] })) as { libraries: Library[] }; if (result.libraries && result.libraries.length > 0) { library = result.libraries[0]; @@ -819,6 +839,9 @@ Think step-by-step to choose the required types in order to solve the given ques messages: messages, schema: getTypesResponseSchema, abortSignal: new AbortController().signal, + providerOptions: { + anthropic: { structuredOutputMode: 'jsonTool' }, + }, }); const libList = object as GetTypesResponse; diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/utils/libs/libraries.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/utils/libs/libraries.ts index ce9be84388b..f380a729e56 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/utils/libs/libraries.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/utils/libs/libraries.ts @@ -14,14 +14,11 @@ // specific language governing permissions and limitations // under the License. -import { MinifiedLibrary } from "@wso2/ballerina-core"; +import { LibraryMode, MinifiedLibrary } from "@wso2/ballerina-core"; import { langClient } from "../../activator"; import { getGenerationMode } from "../ai-utils"; - -export const LIBRARY_PROVIDER_TOOL = "LibraryProviderTool"; - // export async function getRelevantLibs(params: GenerateCodeParams): Promise { // // const prompt = getReadmeQuery(params); // const selectedLibs: string[] = await getSelectedLibraries(prompt); @@ -31,11 +28,24 @@ export const LIBRARY_PROVIDER_TOOL = "LibraryProviderTool"; export enum GenerationType { CODE_GENERATION = "CODE_GENERATION", HEALTHCARE_GENERATION = "HEALTHCARE_GENERATION", + ALL = "ALL" +} + +export function getLibraryModeFromGenerationType(generationType: GenerationType): LibraryMode { + switch (generationType) { + case GenerationType.CODE_GENERATION: + return "CORE"; + case GenerationType.HEALTHCARE_GENERATION: + return "HEALTHCARE"; + case GenerationType.ALL: + default: + return "ALL"; + } } export async function getAllLibraries(generationType: GenerationType): Promise { const result = (await langClient.getCopilotCompactLibraries({ - mode: getGenerationMode(generationType), + mode: getLibraryModeFromGenerationType(generationType), })) as { libraries: MinifiedLibrary[] }; return result.libraries as MinifiedLibrary[]; } diff --git a/workspaces/ballerina/ballerina-extension/src/features/bi/activator.ts b/workspaces/ballerina/ballerina-extension/src/features/bi/activator.ts index 94c158ff4c3..bffd1304ab5 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/bi/activator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/bi/activator.ts @@ -156,12 +156,12 @@ export function activate(context: BallerinaExtension) { commands.registerCommand(BI_COMMANDS.TOGGLE_TRACE_LOGS, toggleTraceLogs); - commands.registerCommand(BI_COMMANDS.CREATE_BI_PROJECT, (params) => { + commands.registerCommand(BI_COMMANDS.CREATE_BI_PROJECT, async (params) => { let path: string; if (params.createAsWorkspace) { - path = createBIWorkspace(params); + path = await createBIWorkspace(params); } else { - path = createBIProjectPure(params); + path = await createBIProjectPure(params); } return path; }); @@ -285,14 +285,14 @@ async function handleDebugCommandWithContext() { } /** - * Prompts user to select a package and starts debugging. + * Prompts user to select an integration and starts debugging. * @param projectInfo - The project info * @returns void */ async function handleDebugCommandWithPackageSelection(projectInfo: ProjectInfo) { const availablePackages = projectInfo?.children.map((child: ProjectInfo) => child.projectPath) ?? []; - const selectedPackage = await selectPackageOrPrompt(availablePackages, "Select a package to debug"); + const selectedPackage = await selectPackageOrPrompt(availablePackages, "Select an integration to debug"); if (!selectedPackage) { return; } diff --git a/workspaces/ballerina/ballerina-extension/src/features/config-generator/configGenerator.ts b/workspaces/ballerina/ballerina-extension/src/features/config-generator/configGenerator.ts index 5b55eceaffa..2b4a9cf1eda 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/config-generator/configGenerator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/config-generator/configGenerator.ts @@ -53,7 +53,7 @@ export async function prepareAndGenerateConfig( const packages = StateMachine.context().projectInfo?.children; const packageList = packages?.map((child) => child.projectPath) ?? []; - const selectedPackage = await selectPackageOrPrompt(packageList, "Select a package to run"); + const selectedPackage = await selectPackageOrPrompt(packageList, "Select an integration to run"); if (!selectedPackage) { return; } @@ -75,7 +75,7 @@ export async function prepareAndGenerateConfig( ); } } catch (error) { - console.error("Error selecting package:", error); + console.error("Error selecting integration:", error); return; } } else { diff --git a/workspaces/ballerina/ballerina-extension/src/features/debugger/config-provider.ts b/workspaces/ballerina/ballerina-extension/src/features/debugger/config-provider.ts index 44b15bd0046..03941c2a0d3 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/debugger/config-provider.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/debugger/config-provider.ts @@ -48,6 +48,7 @@ import { createVersionNumber } from "../../utils"; import { getProjectWorkingDirectory } from "../../utils/file-utils"; +import { quoteShellPath } from "../../utils/config"; import { decimal, ExecutableOptions } from 'vscode-languageclient/node'; import { BAL_NOTEBOOK, getTempFile, NOTEBOOK_CELL_SCHEME } from '../../views/notebook'; import fileUriToPath from 'file-uri-to-path'; @@ -69,6 +70,7 @@ import { prepareAndGenerateConfig, cleanAndValidateProject } from '../config-gen import { extension } from '../../BalExtensionContext'; import * as fs from 'fs'; import { findHighestVersionJdk } from '../../utils/server/server'; +import { PlatformExtRpcManager } from '../../rpc-managers/platform-ext/rpc-manager'; const BALLERINA_COMMAND = "ballerina.command"; const EXTENDED_CLIENT_CAPABILITIES = "capabilities"; @@ -94,7 +96,11 @@ class DebugConfigProvider implements DebugConfigurationProvider { if (config.noDebug && (extension.ballerinaExtInstance.enabledRunFast() || StateMachine.context().isBI)) { await handleMainFunctionParams(config); } - return getModifiedConfigs(_folder, config); + const configs = await getModifiedConfigs(_folder, config); + + // connect to Devant if applicable + await new PlatformExtRpcManager().setupDevantProxyForDebugging(configs); + return configs; } } @@ -598,7 +604,8 @@ class BallerinaDebugAdapterDescriptorFactory implements DebugAdapterDescriptorFa } getScriptPath(args: string[]): string { args.push('start-debugger-adapter'); - return extension.ballerinaExtInstance.getBallerinaCmd(); + // Quote the path to handle spaces in directory names (used with shell: true) + return quoteShellPath(extension.ballerinaExtInstance.getBallerinaCmd()); } getCurrentWorkingDir(): string { return path.join(extension.ballerinaExtInstance.ballerinaHome, "bin"); @@ -657,7 +664,7 @@ class BIRunAdapter extends LoggingDebugSession { task: 'run' }; - let runCommand: string = `${extension.ballerinaExtInstance.getBallerinaCmd()} run`; + let runCommand: string = `${quoteShellPath(extension.ballerinaExtInstance.getBallerinaCmd())} run`; const programArgs = (args as any).programArgs; if (programArgs && programArgs.length > 0) { @@ -669,7 +676,7 @@ class BIRunAdapter extends LoggingDebugSession { } // Use the current process environment which should have the updated PATH - const env = process.env; + const env = { ...process.env, ...((args as any)?.env || {}) }; debugLog(`[BIRunAdapter] Creating shell execution with env. PATH length: ${env.PATH?.length || 0}`); // Determine the correct working directory for the task diff --git a/workspaces/ballerina/ballerina-extension/src/features/devant/activator.ts b/workspaces/ballerina/ballerina-extension/src/features/devant/activator.ts index 29450ad8354..87fd2b96d74 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/devant/activator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/devant/activator.ts @@ -18,22 +18,22 @@ import { BI_COMMANDS, DIRECTORY_MAP, EVENT_TYPE, MACHINE_VIEW, SCOPE, findScopeByModule } from "@wso2/ballerina-core"; import { - CommandIds as PlatformCommandIds, - IWso2PlatformExtensionAPI, - ICommitAndPuhCmdParams, - ICreateComponentCmdParams, + WICommandIds, + ICommitAndPushCmdParams, + ICreateNewIntegrationCmdParams, } from "@wso2/wso2-platform-core"; import { BallerinaExtension } from "../../core"; import { openView, StateMachine } from "../../stateMachine"; -import { commands, extensions, window } from "vscode"; +import { commands, window } from "vscode"; import * as path from "path"; import * as fs from "fs"; import { debug } from "../../utils"; +import { getPlatformExtensionAPI } from "../../utils/ai/auth"; export function activateDevantFeatures(_ballerinaExtInstance: BallerinaExtension) { const cloudToken = process.env.CLOUD_STS_TOKEN; if (cloudToken) { - // Set the connection token context + // Set the connection token context for Devant UI features commands.executeCommand("setContext", "devant.editor", true); } @@ -46,19 +46,15 @@ const handleComponentPushToDevant = async () => { return; } - const platformExt = extensions.getExtension("wso2.wso2-platform"); - if (!platformExt) { + const platformExtAPI = await getPlatformExtensionAPI(); + if (!platformExtAPI) { return; } - if (!platformExt.isActive) { - await platformExt.activate(); - } - const platformExtAPI: IWso2PlatformExtensionAPI = platformExt.exports; if (isGitRepo(projectRoot)) { // push changes to repo if component for the directory already exists - await commands.executeCommand(PlatformCommandIds.CommitAndPushToGit, { + await commands.executeCommand(WICommandIds.CommitAndPushToGit, { componentPath: projectRoot, - } as ICommitAndPuhCmdParams); + } as ICommitAndPushCmdParams); } else if (platformExtAPI.getDirectoryComponents(projectRoot)?.length) { debug(`project url: ${projectRoot}`); // push changes to repo if component for the directory already exists @@ -67,9 +63,9 @@ const handleComponentPushToDevant = async () => { window.showInformationMessage("There are no new changes to push to cloud"); return; } - await commands.executeCommand(PlatformCommandIds.CommitAndPushToGit, { + await commands.executeCommand(WICommandIds.CommitAndPushToGit, { componentPath: projectRoot, - } as ICommitAndPuhCmdParams); + } as ICommitAndPushCmdParams); } else { // create a new component if it doesn't exist for the directory if (!StateMachine.context().projectStructure) { @@ -121,13 +117,12 @@ const handleComponentPushToDevant = async () => { integrationType = selectedScope as SCOPE; } - const deployementParams: ICreateComponentCmdParams = { - integrationType: integrationType as any, - buildPackLang: "ballerina", - componentDir: StateMachine.context().projectPath, - extName: "Devant", + const deployementParams: ICreateNewIntegrationCmdParams = { + buildPackLang:"ballerina", + workspaceDir: StateMachine.context().workspacePath || StateMachine.context().projectPath, + integrations: [{ fsPath: StateMachine.context().projectPath, supportedIntegrationTypes: [integrationType] }] }; - commands.executeCommand(PlatformCommandIds.CreateNewComponent, deployementParams); + commands.executeCommand(WICommandIds.CreateNewComponent, deployementParams); } }; @@ -148,20 +143,3 @@ function isGitRepo(dir: string): boolean { } return false; } - -// TODO: -// need to move all platform ext api calls to separate client. -// after that, delete this function -export const getDevantStsToken = async (): Promise => { - try { - const platformExt = extensions.getExtension("wso2.wso2-platform"); - if (!platformExt) { - return ""; - } - const platformExtAPI: IWso2PlatformExtensionAPI = await platformExt.activate(); - const stsToken = await platformExtAPI.getStsToken(); - return stsToken; - } catch (err) { - return ""; - } -}; \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/src/features/natural-programming/utils.ts b/workspaces/ballerina/ballerina-extension/src/features/natural-programming/utils.ts index 587e15e1496..93e1d95de1c 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/natural-programming/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/natural-programming/utils.ts @@ -39,13 +39,14 @@ import { import { isNumber } from 'lodash'; import { HttpStatusCode } from 'axios'; import { AIMachineEventType, BallerinaProject, BIIntelSecrets, LoginMethod } from '@wso2/ballerina-core'; -import { isBallerinaProjectAsync, OLD_BACKEND_URL } from '../ai/utils'; +import { BACKEND_URL, isBallerinaProjectAsync } from '../ai/utils'; import { getCurrentBallerinaProjectFromContext } from '../config-generator/configGenerator'; import { BallerinaExtension } from 'src/core'; -import { getAccessToken as getAccesstokenFromUtils, getLoginMethod, getRefreshedAccessToken, REFRESH_TOKEN_NOT_AVAILABLE_ERROR_MESSAGE, TOKEN_REFRESH_ONLY_SUPPORTED_FOR_BI_INTEL } from '../../utils/ai/auth'; +import { getAccessToken as getAccesstokenFromUtils, getLoginMethod, getRefreshedAccessToken, TOKEN_NOT_AVAILABLE_ERROR_MESSAGE, TOKEN_REFRESH_ONLY_SUPPORTED_FOR_BI_INTEL } from '../../utils/ai/auth'; import { AIStateMachine } from '../../views/ai-panel/aiMachine'; import { performApiDocsDriftCheck, performDocumentationDriftCheck } from './drift-check'; import { ApiDocsDriftResponse, DocumentationDriftResponse } from './drift-check/schemas'; +import { LLM_API_BASE_PATH } from '../ai/constants'; export async function getLLMDiagnostics(projectPath: string, diagnosticCollection : vscode.DiagnosticCollection): Promise { @@ -463,12 +464,6 @@ export function getPluginConfig(): BallerinaPluginConfig { return vscode.workspace.getConfiguration('ballerina'); } -export async function getBackendURL(): Promise { - return new Promise(async (resolve) => { - resolve(OLD_BACKEND_URL); - }); -} - export async function getAccessToken(): Promise { return new Promise(async (resolve) => { let token: string; @@ -586,7 +581,7 @@ export async function getTokenForNaturalFunction() { } return token; } catch (error) { - if ((error as Error).message === REFRESH_TOKEN_NOT_AVAILABLE_ERROR_MESSAGE || (error as Error).message === TOKEN_REFRESH_ONLY_SUPPORTED_FOR_BI_INTEL) { + if ((error as Error).message === TOKEN_NOT_AVAILABLE_ERROR_MESSAGE || (error as Error).message === TOKEN_REFRESH_ONLY_SUPPORTED_FOR_BI_INTEL) { vscode.window.showWarningMessage(LOGIN_REQUIRED_WARNING); } throw error; @@ -675,8 +670,8 @@ export async function addConfigFile(configPath: string, isNaturalFunctionsAvaila AIStateMachine.service().send(AIMachineEventType.LOGOUT); return; } - - addDefaultModelConfigForNaturalFunctions(configPath, token, await getBackendURL(), isNaturalFunctionsAvailableInBallerinaOrg); + const openAiEpUrl = BACKEND_URL + LLM_API_BASE_PATH + "/openai"; + addDefaultModelConfigForNaturalFunctions(configPath, token, openAiEpUrl, isNaturalFunctionsAvailableInBallerinaOrg); } catch (error) { AIStateMachine.service().send(AIMachineEventType.LOGOUT); return; diff --git a/workspaces/ballerina/ballerina-extension/src/features/project/cmds/add.ts b/workspaces/ballerina/ballerina-extension/src/features/project/cmds/add.ts index 202876e26e9..4e7d2664736 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/project/cmds/add.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/project/cmds/add.ts @@ -100,11 +100,11 @@ function activateAddCommand() { export { activateAddCommand }; -// Prompts user to select a package +// Prompts user to select an integration. async function getPackage(projectInfo: ProjectInfo): Promise { const packages = projectInfo?.children.map((child) => child.projectPath) ?? []; - const selectedPackage = await selectPackageOrPrompt(packages, "Select a package to add the module to"); + const selectedPackage = await selectPackageOrPrompt(packages, "Select an integration to add the module to"); if (!selectedPackage) { return undefined; } diff --git a/workspaces/ballerina/ballerina-extension/src/features/project/cmds/cmd-runner.ts b/workspaces/ballerina/ballerina-extension/src/features/project/cmds/cmd-runner.ts index ec8018823d2..52383dae9fe 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/project/cmds/cmd-runner.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/project/cmds/cmd-runner.ts @@ -18,7 +18,7 @@ import { BallerinaProject } from "@wso2/ballerina-core"; import { Terminal, window, workspace } from "vscode"; -import { isSupportedSLVersion, isWindows, createVersionNumber } from "../../../utils"; +import { isSupportedSLVersion, isWindows, createVersionNumber, quoteShellPath } from "../../../utils"; import { extension } from "../../../BalExtensionContext"; import { TracerMachine } from "../../../features/tracing"; @@ -128,7 +128,7 @@ export function runCommandWithConf(file: BallerinaProject | string, executor: st } let commandText; if (cmd === BALLERINA_COMMANDS.OTHER) { - commandText = `${executor} ${argsList}`; + commandText = `${quoteShellPath(executor)} ${argsList}`; terminal = window.createTerminal({ name: TERMINAL_NAME }); } else { let env = {}; @@ -164,7 +164,7 @@ export function runCommandWithConf(file: BallerinaProject | string, executor: st } } - commandText = `${executor} ${cmd} ${argsList}`; + commandText = `${quoteShellPath(executor)} ${cmd} ${argsList}`; if (confPath !== '') { const configs = env['BAL_CONFIG_FILES'] ? `${env['BAL_CONFIG_FILES']}:${confPath}` : confPath; Object.assign(env, { BAL_CONFIG_FILES: configs }); diff --git a/workspaces/ballerina/ballerina-extension/src/features/project/cmds/doc.ts b/workspaces/ballerina/ballerina-extension/src/features/project/cmds/doc.ts index 8363930607f..c24e436f301 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/project/cmds/doc.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/project/cmds/doc.ts @@ -70,7 +70,7 @@ function activateDocCommand() { const availablePackages = projectInfo?.children.map((child: any) => child.projectPath) ?? []; const selectedPackage = await selectPackageOrPrompt( availablePackages, - "Select a package to build documentation" + "Select an integration to build documentation" ); if (!selectedPackage) { return; diff --git a/workspaces/ballerina/ballerina-extension/src/features/telemetry/activator.ts b/workspaces/ballerina/ballerina-extension/src/features/telemetry/activator.ts index 6b989cf1e25..c6b18be8998 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/telemetry/activator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/telemetry/activator.ts @@ -35,25 +35,28 @@ export function activate(ballerinaExtInstance: BallerinaExtension) { const langClient = ballerinaExtInstance.langClient; // Start listening telemtry events from language server - langClient.onNotification('telemetry/event', (event: LSTelemetryEvent) => { + langClient.onNotification('telemetry/event', async (event: LSTelemetryEvent) => { let props: { [key: string]: string; }; switch (event.type) { case TM_EVENT_TYPE_ERROR: const errorEvent: LSErrorTelemetryEvent = event; - props = getTelemetryProperties(ballerinaExtInstance, event.component, getMessageObject(TM_EVENT_TYPE_ERROR)); + props = await getTelemetryProperties(ballerinaExtInstance, event.component, + getMessageObject(TM_EVENT_TYPE_ERROR)); props["ballerina.langserver.error.description"] = errorEvent.message; props["ballerina.langserver.error.stacktrace"] = errorEvent.errorStackTrace; props["ballerina.langserver.error.message"] = errorEvent.errorMessage; - reporter.sendTelemetryEvent(TM_ERROR_LANG_SERVER, props); + // TODO: Enable once when the language server telemerty complete + // reporter.sendTelemetryEvent(TM_ERROR_LANG_SERVER, props); break; case TM_EVENT_TYPE_FEATURE_USAGE: const usageEvent: LSFeatureUsageTelemetryEvent = event; - props = getTelemetryProperties(ballerinaExtInstance, event.component, + props = await getTelemetryProperties(ballerinaExtInstance, event.component, getMessageObject(TM_EVENT_TYPE_FEATURE_USAGE)); props["ballerina.langserver.feature.name"] = usageEvent.featureName; props["ballerina.langserver.feature.class"] = usageEvent.featureClass; props["ballerina.langserver.feature.message"] = usageEvent.featureMessage; - reporter.sendTelemetryEvent(TM_FEATURE_USAGE_LANG_SERVER, props); + // TODO: Enable once when the language server telemerty complete + // reporter.sendTelemetryEvent(TM_FEATURE_USAGE_LANG_SERVER, props); break; default: // Do nothing diff --git a/workspaces/ballerina/ballerina-extension/src/features/telemetry/common/project-id.ts b/workspaces/ballerina/ballerina-extension/src/features/telemetry/common/project-id.ts new file mode 100644 index 00000000000..f228b7bae9b --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/telemetry/common/project-id.ts @@ -0,0 +1,61 @@ +// Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import * as crypto from 'crypto'; +import * as fs from 'fs'; +import * as path from 'path'; +import { parseTomlToConfig } from '../../config-generator/utils'; +import { BALLERINA_TOML } from '../../../utils/project-utils'; + +const projectIdCache = new Map(); + +/** + * Generates a stable, anonymized project identifier by hashing + * the project path combined with the package name from Ballerina.toml. + * + * @param projectPath - Absolute path to the Ballerina project + * @returns SHA-256 hashed project ID, or empty string if projectPath is falsy + */ +export async function getHashedProjectId(projectPath: string): Promise { + if (!projectPath) { + return ''; + } + + const cached = projectIdCache.get(projectPath); + if (cached) { + return cached; + } + + let packageName = ''; + const ballerinaTomlPath = path.join(projectPath, 'Ballerina.toml'); + + try { + if (fs.existsSync(ballerinaTomlPath)) { + const tomlContent = await fs.promises.readFile(ballerinaTomlPath, 'utf-8'); + const tomlObj: BALLERINA_TOML = parseTomlToConfig(tomlContent) as BALLERINA_TOML; + packageName = tomlObj?.package?.name || ''; + } + } catch (error) { + console.warn(`[project-id] Failed to read Ballerina.toml from ${projectPath}:`, error); + } + + const hashInput = projectPath + packageName; + const hashedId = crypto.createHash('sha256').update(hashInput).digest('hex'); + + projectIdCache.set(projectPath, hashedId); + + return hashedId; +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/telemetry/common/project-metrics.ts b/workspaces/ballerina/ballerina-extension/src/features/telemetry/common/project-metrics.ts new file mode 100644 index 00000000000..ecd8378a4e6 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/telemetry/common/project-metrics.ts @@ -0,0 +1,49 @@ +// Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import * as vscode from 'vscode'; +import * as fs from 'fs'; + +export interface ProjectMetrics { + fileCount: number; + lineCount: number; +} + +export async function getProjectMetrics(workspacePath?: string): Promise { + const includePattern = workspacePath + ? new vscode.RelativePattern(workspacePath, '**/*.bal') + : '**/*.bal'; + const excludePattern = workspacePath + ? new vscode.RelativePattern(workspacePath, '**/target/**') + : '**/target/**'; + + const files = await vscode.workspace.findFiles(includePattern, excludePattern); + + let totalLineCount = 0; + for (const fileUri of files) { + try { + const fileContent = await fs.promises.readFile(fileUri.fsPath, 'utf8'); + totalLineCount += fileContent.split('\n').length; + } catch (error) { + console.warn(`Failed to read file ${fileUri.fsPath}:`, error); + } + } + + return { + fileCount: files.length, + lineCount: totalLineCount + }; +} \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/src/features/telemetry/components.ts b/workspaces/ballerina/ballerina-extension/src/features/telemetry/components.ts index d4bd5337dca..58446de600e 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/telemetry/components.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/telemetry/components.ts @@ -45,3 +45,5 @@ export const CMP_CHOREO_AUTHENTICATION = "component.choreo.authentication"; export const CMP_PERF_ANALYZER = "component.perf.analyzer"; export const CMP_NOTEBOOK = "component.notebook"; export const CMP_OPEN_VSCODE_URL = "component.open.vscode.url"; + +export const CMP_BALLERINA_AI_GENERATION = "ballerina.ai.generation"; \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/src/features/telemetry/events.ts b/workspaces/ballerina/ballerina-extension/src/features/telemetry/events.ts index 0fd9cb3b98b..a9e7168dbdb 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/telemetry/events.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/telemetry/events.ts @@ -122,3 +122,13 @@ export const TM_EVENT_OPEN_REPO_CHANGE_PATH = "vscode.open.repo.change.path"; export const TM_EVENT_OPEN_REPO_CANCELED = "vscode.open.repo.canceled"; export const TM_EVENT_OPEN_REPO_NEW_FOLDER = "vscode.open.exist.repo.new.folder"; export const TM_EVENT_OPEN_REPO_SAME_FOLDER = "vscode.open.exist.repo.same.folder"; + + +// events for AI features +export const TM_EVENT_BALLERINA_AI_GENERATION_SUBMITTED = "ballerina.ai.generation.submitted"; +export const TM_EVENT_BALLERINA_AI_GENERATION_COMPLETED = "ballerina.ai.generation.completed"; +export const TM_EVENT_BALLERINA_AI_GENERATION_FAILED = "ballerina.ai.generation.failed"; +export const TM_EVENT_BALLERINA_AI_GENERATION_ABORTED = "ballerina.ai.generation.aborted"; +export const TM_EVENT_BALLERINA_AI_GENERATION_KEPT = "ballerina.ai.generation.kept"; +export const TM_EVENT_BALLERINA_AI_GENERATION_DISCARD = "ballerina.ai.generation.discard"; +export const TM_EVENT_BALLERINA_AI_GENERATION_FEEDBACK = "ballerina.ai.generation.feedback"; \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/src/features/telemetry/index.ts b/workspaces/ballerina/ballerina-extension/src/features/telemetry/index.ts index 1b7ebd0bb55..0fb1e8d3eb1 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/telemetry/index.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/telemetry/index.ts @@ -18,10 +18,9 @@ import TelemetryReporter from "vscode-extension-telemetry"; import { BallerinaExtension } from "../../core"; +import { getLoginMethod, getBiIntelId } from "../../utils/ai/auth"; -//Ballerina-VSCode-Extention repo key as default -const DEFAULT_KEY = "3a82b093-5b7b-440c-9aa2-3b8e8e5704e7"; -const INSTRUMENTATION_KEY = process.env.CODE_SERVER_ENV && process.env.VSCODE_CHOREO_INSTRUMENTATION_KEY ? process.env.VSCODE_CHOREO_INSTRUMENTATION_KEY : DEFAULT_KEY; +const INSTRUMENTATION_KEY = process.env.CODE_SERVER_ENV && process.env.VSCODE_CHOREO_INSTRUMENTATION_KEY ? process.env.VSCODE_CHOREO_INSTRUMENTATION_KEY : process.env.APPINSIGHTS_INSTRUMENTATION_KEY; const isWSO2User = process.env.VSCODE_CHOREO_USER_EMAIL ? process.env.VSCODE_CHOREO_USER_EMAIL.endsWith('@wso2.com') : false; const isAnonymous = process.env.VSCODE_CHOREO_USER_EMAIL ? process.env.VSCODE_CHOREO_USER_EMAIL.endsWith('@choreo.dev') : false; const CORRELATION_ID = process.env.VSCODE_CHOREO_CORRELATION_ID ? process.env.VSCODE_CHOREO_CORRELATION_ID : ''; @@ -29,6 +28,20 @@ const CHOREO_COMPONENT_ID = process.env.VSCODE_CHOREO_COMPONENT_ID ? process.env const CHOREO_PROJECT_ID = process.env.VSCODE_CHOREO_PROJECT_ID ? process.env.VSCODE_CHOREO_PROJECT_ID : ''; const CHOREO_ORG_ID = process.env.VSCODE_CHOREO_ORG_ID ? process.env.VSCODE_CHOREO_ORG_ID : ''; +// Whitelist of component names +const WHITELISTED_COMPONENTS = new Set([ + 'ballerina.ai.generation', +]); + +// Whitelist of specific event names +const WHITELISTED_EVENTS = new Set([ + 'editor-workspace-ballerina-extension-activate', +]); + +export function shouldSendToAppInsights(eventName: string, componentName: string): boolean { + return WHITELISTED_EVENTS.has(eventName) || WHITELISTED_COMPONENTS.has(componentName); +} + export function createTelemetryReporter(ext: BallerinaExtension): TelemetryReporter { const reporter = new TelemetryReporter(ext.getID(), ext.getVersion(), INSTRUMENTATION_KEY); if (ext.context) { @@ -37,26 +50,36 @@ export function createTelemetryReporter(ext: BallerinaExtension): TelemetryRepor return reporter; } -export function sendTelemetryEvent(extension: BallerinaExtension, eventName: string, componentName: string, +export async function sendTelemetryEvent(extension: BallerinaExtension, eventName: string, componentName: string, customDimensions: { [key: string]: string; } = {}, measurements: { [key: string]: number; } = {}) { // temporarily disabled in codeserver due to GDPR issue if (extension.isTelemetryEnabled() && !extension.getCodeServerContext().codeServerEnv) { - extension.telemetryReporter.sendTelemetryEvent(eventName, getTelemetryProperties(extension, componentName, - customDimensions), measurements); + // Only send whitelisted AI telemetry events to Application Insights + if (shouldSendToAppInsights(eventName, componentName)) { + extension.telemetryReporter.sendTelemetryEvent(eventName, await getTelemetryProperties(extension, componentName, + customDimensions), measurements); + } } } -export function sendTelemetryException(extension: BallerinaExtension, error: Error, componentName: string, +export async function sendTelemetryException(extension: BallerinaExtension, error: Error, componentName: string, params: { [key: string]: string } = {}) { // temporarily disabled in codeserver due to GDPR issue if (extension.isTelemetryEnabled() && !extension.getCodeServerContext().codeServerEnv) { - extension.telemetryReporter.sendTelemetryException(error, getTelemetryProperties(extension, componentName, - params)); + // Only send whitelisted AI telemetry exceptions to Application Insights + if (shouldSendToAppInsights('', componentName)) { + extension.telemetryReporter.sendTelemetryException(error, await getTelemetryProperties(extension, componentName, + params)); + } } } -export function getTelemetryProperties(extension: BallerinaExtension, component: string, params: { [key: string]: string; } = {}) - : { [key: string]: string; } { +export async function getTelemetryProperties(extension: BallerinaExtension, component: string, params: { [key: string]: string; } = {}) + : Promise<{ [key: string]: string; }> { + + const userType = await getLoginMethod(); + const biIntelId = await getBiIntelId(); + return { ...params, 'ballerina.version': extension ? extension.ballerinaVersion : '', @@ -69,6 +92,8 @@ export function getTelemetryProperties(extension: BallerinaExtension, component: 'component': CHOREO_COMPONENT_ID, 'project': CHOREO_PROJECT_ID, 'org': CHOREO_ORG_ID, + 'user.login_method': userType ?? '', + 'user.bi_intel_id': biIntelId ?? '', }; } diff --git a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/activator.ts b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/activator.ts index ce5727aed37..6ca3ec97975 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/activator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/activator.ts @@ -17,18 +17,72 @@ * under the License. */ -import { tests, workspace, TestRunProfileKind, TestController, Uri } from "vscode"; +import { tests, workspace, TestRunProfileKind, TestController, Uri, window, commands } from "vscode"; import { BallerinaExtension } from "../../core"; import { runHandler } from "./runner"; import { activateEditBiTest } from "./commands"; +import { createNewEvalset, createNewThread, deleteEvalset, deleteThread } from "./evalset-commands"; import { discoverTestFunctionsInProject, handleFileChange as handleTestFileUpdate, handleFileDelete as handleTestFileDelete } from "./discover"; import { getCurrentBallerinaProject, getWorkspaceRoot } from "../../utils/project-utils"; import { checkIsBallerinaPackage, checkIsBallerinaWorkspace } from "../../utils"; import { PROJECT_TYPE } from "../project"; +import { EvalsetTreeDataProvider } from "./evalset-tree-view"; +import { openView } from "../../stateMachine"; +import { EvalSet, EVENT_TYPE, MACHINE_VIEW } from "@wso2/ballerina-core"; +import * as fs from 'fs'; export let testController: TestController; +export const EVALUATION_GROUP = 'evaluations'; + export async function activate(ballerinaExtInstance: BallerinaExtension) { + // Register command to open evalset viewer + const openEvalsetCommand = commands.registerCommand('ballerina.openEvalsetViewer', async (uri: Uri, threadId?: string) => { + try { + const content = await fs.promises.readFile(uri.fsPath, 'utf-8'); + const evalsetData = JSON.parse(content) as EvalSet; + + openView(EVENT_TYPE.OPEN_VIEW, { + view: MACHINE_VIEW.EvalsetViewer, + evalsetData: { + filePath: uri.fsPath, + content: evalsetData, + threadId: threadId + } + }); + } catch (error) { + console.error('Error opening evalset:', error); + window.showErrorMessage(`Failed to open evalset: ${error}`); + } + }); + + // Register command to save evalset changes + const saveEvalThreadCommand = commands.registerCommand('ballerina.saveEvalThread', async (data: { filePath: string, updatedEvalSet: EvalSet }) => { + try { + const { filePath, updatedEvalSet } = data; + + // Write the updated evalset back to the file + await fs.promises.writeFile( + filePath, + JSON.stringify(updatedEvalSet, null, 2), + 'utf-8' + ); + + window.showInformationMessage('Evalset saved successfully'); + return { success: true }; + } catch (error) { + console.error('Error saving evalset:', error); + window.showErrorMessage(`Failed to save evalset: ${error}`); + return { success: false, error: String(error) }; + } + }); + + // Register commands for creating evalsets and threads + const createEvalsetCommand = commands.registerCommand('ballerina.createNewEvalset', createNewEvalset); + const createThreadCommand = commands.registerCommand('ballerina.createNewThread', createNewThread); + const deleteEvalsetCommand = commands.registerCommand('ballerina.deleteEvalset', deleteEvalset); + const deleteThreadCommand = commands.registerCommand('ballerina.deleteThread', deleteThread); + testController = tests.createTestController('ballerina-integrator-tests', 'WSO2 Integrator: BI Tests'); const workspaceRoot = getWorkspaceRoot(); @@ -46,6 +100,13 @@ export async function activate(ballerinaExtInstance: BallerinaExtension) { return; } + // Create and register Evalset TreeView + const evalsetTreeDataProvider = new EvalsetTreeDataProvider(); + const evalsetTreeView = window.createTreeView('ballerina-evalsets', { + treeDataProvider: evalsetTreeDataProvider, + showCollapseAll: true + }); + // Create test profiles to display. testController.createRunProfile('Run Tests', TestRunProfileKind.Run, runHandler, true); testController.createRunProfile('Debug Tests', TestRunProfileKind.Debug, runHandler, true); @@ -62,9 +123,9 @@ export async function activate(ballerinaExtInstance: BallerinaExtension) { discoverTestFunctionsInProject(ballerinaExtInstance, testController); // Register the test controller and file watcher with the extension context - ballerinaExtInstance.context?.subscriptions.push(testController, fileWatcher); + ballerinaExtInstance.context?.subscriptions.push(testController, fileWatcher, evalsetTreeView, evalsetTreeDataProvider, openEvalsetCommand, saveEvalThreadCommand, createEvalsetCommand, createThreadCommand, deleteEvalsetCommand, deleteThreadCommand); - activateEditBiTest(); + activateEditBiTest(ballerinaExtInstance); } diff --git a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/commands.ts b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/commands.ts index 10c7126cea6..651ba96e546 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/commands.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/commands.ts @@ -17,9 +17,9 @@ * under the License. */ -import { commands, TestItem, window } from "vscode"; +import { commands, TestItem, window, workspace, WorkspaceEdit, Uri, Range } from "vscode"; import { openView, StateMachine, history } from "../../stateMachine"; -import { BI_COMMANDS, EVENT_TYPE, MACHINE_VIEW } from "@wso2/ballerina-core"; +import { BI_COMMANDS, EVENT_TYPE, MACHINE_VIEW, Annotation, ValueProperty, GetTestFunctionResponse, ComponentInfo } from "@wso2/ballerina-core"; import { isTestFunctionItem } from "./discover"; import path from "path"; import { promises as fs } from 'fs'; @@ -28,9 +28,19 @@ import { VisualizerWebview } from "../../views/visualizer/webview"; import { getCurrentProjectRoot, tryGetCurrentBallerinaFile } from "../../utils/project-utils"; import { findBallerinaPackageRoot } from "../../utils"; import { MESSAGES } from "../project"; -import { findWorkspaceTypeFromWorkspaceFolders } from "../../rpc-managers/common/utils"; +import { BallerinaExtension } from "../../core"; +import { isSupportedSLVersion, createVersionNumber } from "../../utils/config"; +import { EVALUATION_GROUP } from "./activator"; -export function activateEditBiTest() { +export function activateEditBiTest(ballerinaExtInstance: BallerinaExtension) { + // Check if AI Evaluation features are supported + const isAIEvaluationSupported = isSupportedSLVersion( + ballerinaExtInstance, + createVersionNumber(2201, 13, 2) + ); + + // Set VS Code context for UI visibility control + commands.executeCommand('setContext', 'ballerina.ai.evaluationSupported', isAIEvaluationSupported); // register run project tests handler commands.registerCommand(BI_COMMANDS.BI_EDIT_TEST_FUNCTION, async (entry: TestItem) => { const projectPath = await findProjectPath(entry.uri?.fsPath); @@ -44,15 +54,21 @@ export function activateEditBiTest() { return; } - const fileName = entry.id.split(":")[1]; + const fileName = entry.id.split(":")[2]; const fileUri = path.resolve(projectPath, `tests`, fileName); if (fileUri) { const range = entry.range; - openView(EVENT_TYPE.OPEN_VIEW, { documentUri: fileUri, - position: { startLine: range.start.line, startColumn: range.start.character, - endLine: range.end.line, endColumn: range.end.character } }); + openView(EVENT_TYPE.OPEN_VIEW, { + view: MACHINE_VIEW.BIDiagram, + documentUri: fileUri, + identifier: entry.label, + position: { + startLine: range.start.line, startColumn: range.start.character, + endLine: range.end.line, endColumn: range.end.character + } + }); history.clear(); - } + } }); commands.registerCommand(BI_COMMANDS.BI_ADD_TEST_FUNCTION, async (entry?: TestItem) => { @@ -65,8 +81,33 @@ export function activateEditBiTest() { const fileUri = path.resolve(projectPath, `tests`, `tests.bal`); ensureFileExists(fileUri); - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BITestFunctionForm, - documentUri: fileUri, identifier: '', serviceType: 'ADD_NEW_TEST' }); + openView(EVENT_TYPE.OPEN_VIEW, { + view: MACHINE_VIEW.BITestFunctionForm, + documentUri: fileUri, identifier: '', serviceType: 'ADD_NEW_TEST' + }); + }); + + commands.registerCommand(BI_COMMANDS.BI_ADD_AI_EVALUATION, async (entry?: TestItem) => { + const projectPath = await findProjectPath(entry?.uri?.fsPath); + + if (!projectPath) { + window.showErrorMessage(MESSAGES.NO_PROJECT_FOUND); + return; + } + + const fileUri = path.resolve(projectPath, `tests`, `tests.bal`); + ensureFileExists(fileUri); + openView(EVENT_TYPE.OPEN_VIEW, { + view: MACHINE_VIEW.BIAIEvaluationForm, + documentUri: fileUri, + identifier: '', + serviceType: 'ADD_NEW_TEST', + metadata: { + featureSupport: { + aiEvaluation: isAIEvaluationSupported + } + } + }); }); commands.registerCommand(BI_COMMANDS.BI_EDIT_TEST_FUNCTION_DEF, async (entry: TestItem) => { @@ -81,21 +122,211 @@ export function activateEditBiTest() { return; } - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BITestFunctionForm, - documentUri: fileUri, identifier: entry.label, serviceType: 'UPDATE_TEST' }); + if (fileUri) { + const range = entry.range; + + // Fetch the test function to check if it belongs to the "evaluations" group + let viewToOpen = MACHINE_VIEW.BITestFunctionForm; // Default to regular test form + + try { + const response = await ballerinaExtInstance.langClient?.getTestFunction({ + functionName: entry.label, + filePath: fileUri + }); + if (response && isValidTestFunctionResponse(response) && response.function) { + const isEvaluation = hasEvaluationGroup(response.function); + if (isEvaluation) { + viewToOpen = MACHINE_VIEW.BIAIEvaluationForm; + } + } + } catch (error) { + console.warn('Failed to fetch test function, defaulting to regular test form:', error); + // Continue with default form if fetching fails + } + + openView(EVENT_TYPE.OPEN_VIEW, { + view: viewToOpen, + documentUri: fileUri, + identifier: entry.label, + position: { + startLine: range.start.line, + startColumn: range.start.character, + endLine: range.end.line, + endColumn: range.end.character + }, + serviceType: 'UPDATE_TEST', + metadata: { + featureSupport: { + aiEvaluation: isAIEvaluationSupported + } + } + }); + } }); + + commands.registerCommand(BI_COMMANDS.BI_DELETE_TEST_FUNCTION, async (entry: TestItem) => { + const projectPath = await findProjectPath(entry.uri?.fsPath); + + if (!projectPath) { + window.showErrorMessage(MESSAGES.NO_PROJECT_FOUND); + return; + } + + if (!isTestFunctionItem(entry)) { + window.showErrorMessage('Invalid test item. Please select a test function to delete.'); + return; + } + + // Parse test ID: test:${projectPath}:${fileName}:${functionName} + const idParts = entry.id.split(":"); + if (idParts.length < 4) { + window.showErrorMessage('Unable to parse test item ID.'); + return; + } + + const fileName = idParts[2]; + const functionName = idParts[3]; + const fileUri = path.resolve(projectPath, `tests`, fileName); + + // Determine test type for confirmation message + let testType = "test function"; + try { + const response = await ballerinaExtInstance.langClient?.getTestFunction({ + functionName: entry.label, + filePath: fileUri + }); + + if (response && isValidTestFunctionResponse(response) && response.function) { + const isEvaluation = hasEvaluationGroup(response.function); + if (isEvaluation) { + testType = "AI evaluation test"; + } + } + } catch (error) { + console.warn('Failed to determine test type, proceeding with default:', error); + } + + // Confirmation dialog + const confirmation = await window.showWarningMessage( + `Are you sure you want to delete ${testType} '${functionName}'?`, + { modal: true }, + 'Delete' + ); + + if (confirmation !== 'Delete') { + return; + } + + try { + if (!entry.range) { + window.showErrorMessage('Test function range not available. Cannot delete.'); + return; + } + + // Create ComponentInfo from TestItem range + const component: ComponentInfo = { + name: functionName, + filePath: fileUri, + startLine: entry.range.start.line, + startColumn: entry.range.start.character, + endLine: entry.range.end.line, + endColumn: entry.range.end.character + }; + + // Call language server to delete the component + const response = await ballerinaExtInstance.langClient?.deleteByComponentInfo({ + filePath: fileUri, + component: component + }); + + if (!response || !response.textEdits) { + window.showErrorMessage('Failed to delete test function. No response from language server.'); + return; + } + + // Apply the text edits returned by language server + const edit = new WorkspaceEdit(); + + for (const [filePath, edits] of Object.entries(response.textEdits)) { + const uri = Uri.file(filePath); + for (const textEdit of edits) { + edit.replace( + uri, + new Range( + textEdit.range.start.line, + textEdit.range.start.character, + textEdit.range.end.line, + textEdit.range.end.character + ), + textEdit.newText + ); + } + } + + const success = await workspace.applyEdit(edit); + + if (success) { + window.showInformationMessage(`Test function '${functionName}' deleted successfully.`); + // File watcher automatically triggers test rediscovery + } else { + window.showErrorMessage(`Failed to apply deletion edits for test function '${functionName}'.`); + } + } catch (error) { + window.showErrorMessage(`Error deleting test function: ${error}`); + console.error('Delete test function error:', error); + } + }); +} + +/** + * Type guard to check if response is a valid GetTestFunctionResponse + * @param response The response to check + * @returns true if response is GetTestFunctionResponse, false if NOT_SUPPORTED_TYPE + */ +function isValidTestFunctionResponse(response: any): response is GetTestFunctionResponse { + return 'function' in response || 'errorMsg' in response || 'stacktrace' in response; +} + +/** + * Check if a test function belongs to the "evaluations" group + * @param testFunction The test function to check + * @returns true if the function has "evaluations" in its groups, false otherwise + */ +function hasEvaluationGroup(testFunction: any): boolean { + if (!testFunction?.annotations) { return false; } + + // Find the Config annotation + const configAnnotation = testFunction.annotations.find( + (annotation: Annotation) => annotation.name === 'Config' + ); + + if (!configAnnotation?.fields) { return false; } + + // Find the groups field + const groupsField = configAnnotation.fields.find( + (field: ValueProperty) => field.originalName === 'groups' + ); + + if (!groupsField?.value) { return false; } + if (!Array.isArray(groupsField.value)) { return false; } + + // Check if "evaluations" is in the groups array + const hasEvaluation = groupsField.value.some((group: string) => { + return group.replace(/^"|"$/g, '') === EVALUATION_GROUP; + }); + return hasEvaluation; } async function ensureFileExists(filePath: string) { - try { - await fs.access(filePath); - } catch { - // Ensure the directory exists - await fs.mkdir(path.dirname(filePath), { recursive: true }); - - await fs.writeFile(filePath, '', 'utf8'); - console.log('File created:', filePath); - } + try { + await fs.access(filePath); + } catch { + // Ensure the directory exists + await fs.mkdir(path.dirname(filePath), { recursive: true }); + + await fs.writeFile(filePath, '', 'utf8'); + console.log('File created:', filePath); + } } async function findProjectPath(filePath?: string): Promise { diff --git a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/discover.ts b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/discover.ts index 98d80744175..cfffe73c28e 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/discover.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/discover.ts @@ -119,6 +119,8 @@ function createTests(response: TestsDiscoveryResponse, testController: TestContr // Iterate over the result map (test groups) for (const [group, testFunctions] of entries) { let groupItem: TestItem | undefined; + // Remove leading/trailing quotes from group name for display + const cleanedGroupName = group.replace(/^["']|["']$/g, ''); // For workspace context with DEFAULT_GROUP, skip the group level and add tests directly to project if (isWorkspaceContext && group === 'DEFAULT_GROUP' && projectGroupItem) { @@ -128,7 +130,7 @@ function createTests(response: TestsDiscoveryResponse, testController: TestContr const groupId = `group:${path.basename(projectPath)}:${group}`; groupItem = projectGroupItem.children.get(groupId); if (!groupItem) { - groupItem = testController.createTestItem(groupId, group); + groupItem = testController.createTestItem(groupId, cleanedGroupName); projectGroupItem.children.add(groupItem); groups.push(groupId); } @@ -137,7 +139,7 @@ function createTests(response: TestsDiscoveryResponse, testController: TestContr const groupId = `group:${group}`; groupItem = testController.items.get(groupId); if (!groupItem) { - groupItem = testController.createTestItem(groupId, group); + groupItem = testController.createTestItem(groupId, cleanedGroupName); testController.items.add(groupItem); groups.push(groupId); } diff --git a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/evalset-commands.ts b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/evalset-commands.ts new file mode 100644 index 00000000000..42a909dddc9 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/evalset-commands.ts @@ -0,0 +1,267 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as vscode from 'vscode'; +import * as path from 'path'; +import * as crypto from 'crypto'; +import * as fs from 'fs'; +import { EvalSet, EvalThread, EvalsetTrace } from '@wso2/ballerina-core'; +import { ensureEvalsetsDirectory, validateEvalsetName, validateThreadName } from './evalset-utils'; + +export async function createNewEvalset(): Promise { + try { + // 1. Ensure evalsets directory exists + const evalsetsDir = await ensureEvalsetsDirectory(); + + // 2. Prompt for name + const name = await vscode.window.showInputBox({ + prompt: 'Enter evalset name', + placeHolder: 'my-evalset', + validateInput: (value) => validateEvalsetName(value, evalsetsDir) + }); + + if (!name) { return; } // User cancelled + + // 3. Create EvalSet with empty threads array + const evalset: EvalSet = { + id: crypto.randomUUID(), + name: name, + threads: [], + created_on: new Date().toISOString() + }; + + // 4. Write file + const filePath = path.join(evalsetsDir, `${name}.evalset.json`); + const jsonContent = JSON.stringify(evalset, null, 2); + const fileUri = vscode.Uri.file(filePath); + + await vscode.workspace.fs.writeFile(fileUri, new TextEncoder().encode(jsonContent)); + + // 5. Success message with Open option + const action = await vscode.window.showInformationMessage( + `Evalset created: ${name}.evalset.json`, + 'Open' + ); + + if (action === 'Open') { + vscode.commands.executeCommand('ballerina.openEvalsetViewer', fileUri); + } + + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + vscode.window.showErrorMessage(`Failed to create evalset: ${errorMessage}`); + } +} + +export async function createNewThread(evalsetFileNode?: any, autoRefresh?: boolean): Promise { + try { + // Validate that this was called from tree view with proper node + if (!evalsetFileNode || !evalsetFileNode.uri) { + vscode.window.showErrorMessage('Please use the + button next to an evalset in the tree view'); + return; + } + + const filePath = evalsetFileNode.uri.fsPath; + + // 1. Read existing evalset file + const fileContent = await fs.promises.readFile(filePath, 'utf8'); + let evalset: EvalSet; + + try { + evalset = JSON.parse(fileContent); + } catch (parseError) { + vscode.window.showErrorMessage('Failed to parse evalset file: Invalid JSON'); + return; + } + + // 2. Validate evalset structure + if (!evalset.threads || !Array.isArray(evalset.threads)) { + vscode.window.showErrorMessage('Invalid evalset file: missing threads array'); + return; + } + + // 3. Prompt for thread name + const threadCount = evalset.threads.length; + const defaultName = `Thread ${threadCount + 1}`; + + const threadName = await vscode.window.showInputBox({ + prompt: 'Enter thread name', + placeHolder: defaultName, + value: defaultName, + validateInput: (value) => validateThreadName(value) + }); + + if (!threadName) { return; } // User cancelled + + // 4. Create default trace with empty message turn + const now = new Date().toISOString(); + const defaultTrace: EvalsetTrace = { + id: crypto.randomUUID(), + userMessage: { + role: 'user', + content: 'User message' + }, + iterations: [], + output: { + role: 'assistant', + content: 'Agent response' + }, + tools: [], + startTime: now, + endTime: now + }; + + // 5. Create new thread with default trace + const newThread: EvalThread = { + id: crypto.randomUUID(), + name: threadName, + traces: [defaultTrace], + created_on: new Date().toISOString() + }; + + // 6. Add to evalset and write file + evalset.threads.push(newThread); + const jsonContent = JSON.stringify(evalset, null, 2); + const fileUri = vscode.Uri.file(filePath); + + await vscode.workspace.fs.writeFile(fileUri, new TextEncoder().encode(jsonContent)); + + // 7. Handle UI refresh based on where the command was called from + if (autoRefresh) { + // Called from evalset viewer - refresh immediately to show new thread in list + vscode.commands.executeCommand('ballerina.openEvalsetViewer', fileUri); + + // Show non-blocking notification + vscode.window.showInformationMessage( + `Thread "${threadName}" added to evalset`, + 'Open' + ).then((action) => { + if (action === 'Open') { + vscode.commands.executeCommand('ballerina.openEvalsetViewer', fileUri, newThread.id); + } + }); + } else { + // Called from tree view - use original behavior with blocking notification + const action = await vscode.window.showInformationMessage( + `Thread "${threadName}" added to evalset`, + 'Open' + ); + + if (action === 'Open') { + vscode.commands.executeCommand('ballerina.openEvalsetViewer', fileUri, newThread.id); + } + } + + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + vscode.window.showErrorMessage(`Failed to create thread: ${errorMessage}`); + } +} + +export async function deleteEvalset(evalsetFileNode?: any): Promise { + try { + // Validate that this was called from tree view with proper node + if (!evalsetFileNode || !evalsetFileNode.uri) { + vscode.window.showErrorMessage('Please use the delete button on an evalset in the tree view'); + return; + } + + const filePath = evalsetFileNode.uri.fsPath; + const fileName = path.basename(filePath); + + // Confirm deletion + const confirmation = await vscode.window.showWarningMessage( + `Are you sure you want to delete "${fileName}"? This action cannot be undone.`, + { modal: true }, + 'Delete' + ); + + if (confirmation !== 'Delete') { + return; // User cancelled + } + + // Delete the file + await vscode.workspace.fs.delete(evalsetFileNode.uri); + + vscode.window.showInformationMessage(`Evalset "${fileName}" deleted successfully`); + + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + vscode.window.showErrorMessage(`Failed to delete evalset: ${errorMessage}`); + } +} + +export async function deleteThread(threadNode?: any, autoRefresh?: boolean): Promise { + try { + // Validate that this was called from tree view with proper node + if (!threadNode || !threadNode.parentUri || !threadNode.threadId) { + vscode.window.showErrorMessage('Please use the delete button on a thread in the tree view'); + return; + } + + const filePath = threadNode.parentUri.fsPath; + const threadId = threadNode.threadId; + + // Read existing evalset file + const fileContent = await fs.promises.readFile(filePath, 'utf8'); + let evalset: EvalSet; + + try { + evalset = JSON.parse(fileContent); + } catch (parseError) { + vscode.window.showErrorMessage('Failed to parse evalset file: Invalid JSON'); + return; + } + + // Find the thread to get its name for confirmation + const threadToDelete = evalset.threads.find(t => t.id === threadId); + if (!threadToDelete) { + vscode.window.showErrorMessage('Thread not found in evalset'); + return; + } + + // Confirm deletion + const confirmation = await vscode.window.showWarningMessage( + `Are you sure you want to delete thread "${threadToDelete.name}"? This action cannot be undone.`, + { modal: true }, + 'Delete' + ); + + if (confirmation !== 'Delete') { + return; // User cancelled + } + + // Remove the thread from evalset + evalset.threads = evalset.threads.filter(t => t.id !== threadId); + + // Write updated evalset back to file + const jsonContent = JSON.stringify(evalset, null, 2); + const fileUri = vscode.Uri.file(filePath); + await vscode.workspace.fs.writeFile(fileUri, new TextEncoder().encode(jsonContent)); + + // Handle UI refresh based on where the command was called from + if (autoRefresh) { + vscode.commands.executeCommand('ballerina.openEvalsetViewer', fileUri); + } + vscode.window.showInformationMessage(`Thread "${threadToDelete.name}" deleted successfully`); + + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + vscode.window.showErrorMessage(`Failed to delete thread: ${errorMessage}`); + } +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/evalset-tree-view.ts b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/evalset-tree-view.ts new file mode 100644 index 00000000000..9c73b33d07a --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/evalset-tree-view.ts @@ -0,0 +1,229 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as vscode from 'vscode'; +import * as fs from 'fs'; +import * as path from 'path'; + +// Interface matching the EvalThread object structure +interface EvalThreadJson { + id: string; + name: string; + traces: any[]; +} + +// Interface matching the new EvalSet JSON structure +interface EvalSetJson { + id: string; + name?: string; + description?: string; + threads: EvalThreadJson[]; // Array of Thread objects + created_on?: number; +} + +/** + * Represents an evalset file node in the tree view + */ +class EvalsetFileNode { + constructor( + public readonly uri: vscode.Uri, + public readonly label: string, + public readonly threadCount: number, + public readonly description?: string + ) { } +} + +/** + * Represents a single thread within an evalset + */ +class EvalsetThreadNode { + constructor( + public readonly parentUri: vscode.Uri, + public readonly threadIndex: number, + public readonly label: string, + public readonly threadId: string, + public readonly traceCount: number + ) { } +} + +type EvalsetNode = EvalsetFileNode | EvalsetThreadNode; + +/** + * TreeDataProvider for displaying evalsets + */ +export class EvalsetTreeDataProvider implements vscode.TreeDataProvider { + private _onDidChangeTreeData: vscode.EventEmitter = + new vscode.EventEmitter(); + readonly onDidChangeTreeData: vscode.Event = + this._onDidChangeTreeData.event; + + private fileWatcher: vscode.FileSystemWatcher | undefined; + + constructor() { + this.setupFileWatcher(); + } + + private setupFileWatcher(): void { + const workspaceFolders = vscode.workspace.workspaceFolders; + if (!workspaceFolders || workspaceFolders.length === 0) { + return; + } + + // Watch all evalset files in workspace + const pattern = '**/evalsets/**/*.evalset.json'; + this.fileWatcher = vscode.workspace.createFileSystemWatcher(pattern); + + // Refresh on file changes + this.fileWatcher.onDidCreate(() => this.refresh()); + this.fileWatcher.onDidChange(() => this.refresh()); + this.fileWatcher.onDidDelete(() => this.refresh()); + } + + refresh(): void { + this._onDidChangeTreeData.fire(); + } + + getTreeItem(element: EvalsetNode): vscode.TreeItem { + if (element instanceof EvalsetFileNode) { + const item = new vscode.TreeItem( + element.label, + vscode.TreeItemCollapsibleState.Collapsed + ); + item.tooltip = element.description || `EvalSet with ${element.threadCount} threads`; + item.description = `${element.threadCount} thread${element.threadCount !== 1 ? 's' : ''}`; + item.iconPath = new vscode.ThemeIcon('collection'); + item.contextValue = 'evalsetFile'; + item.resourceUri = element.uri; + item.command = { + command: 'ballerina.openEvalsetViewer', + title: 'Open Evalset', + arguments: [element.uri] + }; + return item; + } else { + const item = new vscode.TreeItem( + element.label, + vscode.TreeItemCollapsibleState.None + ); + item.tooltip = `Thread ID: ${element.threadId} (${element.traceCount} traces)`; + + item.iconPath = new vscode.ThemeIcon('file-text'); + item.contextValue = 'evalsetThread'; + item.resourceUri = element.parentUri; + + item.command = { + command: 'ballerina.openEvalsetViewer', + title: 'Open Evalset Thread', + arguments: [element.parentUri, element.threadId] + }; + return item; + } + } + + async getChildren(element?: EvalsetNode): Promise { + if (!element) { + // Root level - return all evalset files + return this.getEvalsetFiles(); + } else if (element instanceof EvalsetFileNode) { + // Return threads for this evalset file + return this.getThreadsForFile(element.uri); + } + + return []; + } + + /** + * Get all evalset files in the workspace + */ + private async getEvalsetFiles(): Promise { + const workspaceFolders = vscode.workspace.workspaceFolders; + if (!workspaceFolders || workspaceFolders.length === 0) { + return []; + } + + const evalsetFiles = await vscode.workspace.findFiles('**/evalsets/**/*.evalset.json'); + const nodes: EvalsetFileNode[] = []; + + for (const uri of evalsetFiles) { + try { + const content = await fs.promises.readFile(uri.fsPath, 'utf-8'); + const evalsetData: EvalSetJson = JSON.parse(content); + + // Validation for new format + if (!evalsetData.threads || !Array.isArray(evalsetData.threads)) { + continue; + } + + const threadCount = evalsetData.threads.length; + const label = evalsetData.name || path.basename(uri.fsPath, '.evalset.json'); + const description = evalsetData.description || ''; + + nodes.push(new EvalsetFileNode(uri, label, threadCount, description)); + } catch (error) { + console.error(`Failed to parse evalset file ${uri.fsPath}:`, error); + } + } + + return nodes; + } + + /** + * Get threads for a specific evalset file + */ + private async getThreadsForFile(uri: vscode.Uri): Promise { + try { + const content = await fs.promises.readFile(uri.fsPath, 'utf-8'); + const evalsetData: EvalSetJson = JSON.parse(content); + const nodes: EvalsetThreadNode[] = []; + + if (!evalsetData.threads || !Array.isArray(evalsetData.threads)) { + return []; + } + + evalsetData.threads.forEach((threadObj: EvalThreadJson, index: number) => { + // Ensure traces is an array + const traceCount = Array.isArray(threadObj.traces) ? threadObj.traces.length : 0; + + // Use the name defined in the thread object, fallback to generated name + const label = threadObj.name || `Thread ${index + 1}`; + const threadId = threadObj.id || `thread-${index + 1}`; + + nodes.push(new EvalsetThreadNode( + uri, + index, + label, + threadId, + traceCount + )); + }); + + return nodes; + } catch (error) { + console.error(`Failed to get threads for ${uri.fsPath}:`, error); + return []; + } + } + + /** + * Dispose resources + */ + dispose(): void { + this.fileWatcher?.dispose(); + this._onDidChangeTreeData.dispose(); + } +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/evalset-utils.ts b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/evalset-utils.ts new file mode 100644 index 00000000000..30f26f60b41 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/evalset-utils.ts @@ -0,0 +1,90 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as vscode from 'vscode'; +import * as path from 'path'; +import * as fs from 'fs'; +import { getCurrentProjectRoot } from '../../utils/project-utils'; + +export async function ensureEvalsetsDirectory(): Promise { + // Check if workspace is open + if (!vscode.workspace.workspaceFolders || vscode.workspace.workspaceFolders.length === 0) { + throw new Error('Please open a workspace first'); + } + + let projectRoot: string; + try { + projectRoot = await getCurrentProjectRoot(); + } catch (error) { + // Fallback to workspace root if project root cannot be determined + projectRoot = vscode.workspace.workspaceFolders[0].uri.fsPath; + } + + const evalsetsDir = path.join(projectRoot, 'evalsets'); + const evalsetsDirUri = vscode.Uri.file(evalsetsDir); + + try { + await vscode.workspace.fs.createDirectory(evalsetsDirUri); + } catch (e) { + // Directory might exist, ignore + } + + return evalsetsDir; +} + +export function validateEvalsetName(name: string, evalsetsDir: string): string | null { + if (!name || name.trim().length === 0) { + return 'Evalset name cannot be empty'; + } + if (!/^[a-zA-Z0-9-_]+$/.test(name)) { + return 'Name can only contain letters, numbers, hyphens, and underscores'; + } + if (name.length > 100) { + return 'Name is too long (max 100 characters)'; + } + const filePath = path.join(evalsetsDir, `${name}.evalset.json`); + if (fs.existsSync(filePath)) { + return 'An evalset with this name already exists'; + } + return null; // Valid +} + +export function validateThreadName(name: string): string | null { + if (!name || name.trim().length === 0) { + return 'Thread name cannot be empty'; + } + if (name.length > 100) { + return 'Thread name is too long (max 100 characters)'; + } + return null; // Valid +} + +export async function findExistingEvalsets(evalsetsDir: string): Promise> { + const pattern = new vscode.RelativePattern(evalsetsDir, '*.evalset.json'); + const files = await vscode.workspace.findFiles(pattern); + + return files.map(uri => ({ + label: path.basename(uri.fsPath, '.evalset.json'), + description: uri.fsPath, + filePath: uri.fsPath + })); +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/runner.ts b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/runner.ts index c1d6aafd496..5c8ba4341b4 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/runner.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/runner.ts @@ -18,14 +18,15 @@ */ import { exec } from 'child_process'; -import { CancellationToken, TestRunRequest, TestMessage, TestRun, TestItem, debug, Uri, WorkspaceFolder, DebugConfiguration, workspace, TestRunProfileKind } from 'vscode'; -import { testController } from './activator'; +import { CancellationToken, TestRunRequest, TestMessage, TestRun, TestItem, debug, Uri, WorkspaceFolder, DebugConfiguration, workspace, TestRunProfileKind, commands, window } from 'vscode'; +import { EVALUATION_GROUP, testController } from './activator'; import { StateMachine } from "../../stateMachine"; import { isTestFunctionItem, isTestGroupItem, isProjectGroupItem } from './discover'; import { extension } from '../../BalExtensionContext'; import { constructDebugConfig } from "../debugger"; const fs = require('fs'); import path from 'path'; +import { EvaluationReportWebview } from '../../views/evaluation-report/webview'; /** * Extract project path from a test item @@ -35,7 +36,7 @@ function getProjectPathFromTestItem(test: TestItem): string | undefined { if (isTestFunctionItem(test)) { // Extract from test ID: test:${projectPath}:${fileName}:${functionName} const parts = test.id.split(':'); - if (parts.length >= 2 && parts[0] === 'test') { + if (parts.length >= 2 && parts[0] === 'test') { return parts[1]; } } else if (isProjectGroupItem(test)) { @@ -84,6 +85,50 @@ function getProjectNameIfWorkspace(projectPath: string): string | undefined { return undefined; } +function isAiEvaluations(test: TestItem): boolean { + // Check if the test item itself is the evaluations group + if (isTestGroupItem(test) && test.label === EVALUATION_GROUP) { + return true; + } + + // Check if the test function's parent is the evaluations group + if (isTestFunctionItem(test) && test.parent && test.parent.label === EVALUATION_GROUP) { + return true; + } + + // Check if the project group contains only evaluations groups + if (isProjectGroupItem(test)) { + // Return true only if all children are evaluation groups + let allChildrenAreEvaluations = true; + let hasChildren = false; + + test.children.forEach((child) => { + hasChildren = true; + if (!isTestGroupItem(child) || child.label !== EVALUATION_GROUP) { + allChildrenAreEvaluations = false; + } + }); + + return hasChildren && allChildrenAreEvaluations; + } + + return false; +} + +function buildTestCommand(test: TestItem, executor: string, projectName: string | undefined, testCaseNames?: string[]): string { + if (isAiEvaluations(test)) { + // Evaluations tests use group-based execution with test report + const testsPart = testCaseNames && testCaseNames.length > 0 ? ` --tests ${testCaseNames.join(',')}` : ''; + const projectPart = projectName ? ` ${projectName}` : ''; + return `${executor} test --groups ${EVALUATION_GROUP} --test-report --test-report-dir=evaluation-reports${testsPart}${projectPart}`; + } else { + // Standard tests use code coverage and optional test filtering + const testsPart = testCaseNames && testCaseNames.length > 0 ? ` --tests ${testCaseNames.join(',')}` : ''; + const projectPart = projectName ? ` ${projectName}` : ''; + return `${executor} test --code-coverage${testsPart}${projectPart}`; + } +} + export async function runHandler(request: TestRunRequest, token: CancellationToken) { if (!request.include) { return; @@ -153,17 +198,7 @@ export async function runHandler(request: TestRunRequest, token: CancellationTok } }); - if (projectName) { - // Workspace context - include project name in command - command = testCaseNames.length > 0 - ? `${executor} test --code-coverage --tests ${testCaseNames.join(',')} ${projectName}` - : `${executor} test --code-coverage ${projectName}`; - } else { - // Single project context - command = testCaseNames.length > 0 - ? `${executor} test --code-coverage --tests ${testCaseNames.join(',')}` - : `${executor} test --code-coverage`; - } + command = buildTestCommand(test, executor, projectName, testCaseNames.length > 0 ? testCaseNames : undefined); const startTime = Date.now(); // For workspace, run from workspace root; for single project, run from project path @@ -172,7 +207,13 @@ export async function runHandler(request: TestRunRequest, token: CancellationTok const endTime = Date.now(); const timeElapsed = calculateTimeElapsed(startTime, endTime, testItems); - reportTestResults(run, testItems, timeElapsed, projectPath).then(() => { + reportTestResults(run, testItems, timeElapsed, projectPath).then(async () => { + if (isAiEvaluations(test)) { + const reportUri = await findLatestEvaluationReport(workingDirectory); + if (reportUri) { + await openEvaluationReport(reportUri); + } + } endGroup(test, true, run); }).catch(() => { endGroup(test, false, run); @@ -181,7 +222,13 @@ export async function runHandler(request: TestRunRequest, token: CancellationTok const endTime = Date.now(); const timeElapsed = calculateTimeElapsed(startTime, endTime, testItems); - reportTestResults(run, testItems, timeElapsed, projectPath).then(() => { + reportTestResults(run, testItems, timeElapsed, projectPath).then(async () => { + if (isAiEvaluations(test)) { + const reportUri = await findLatestEvaluationReport(workingDirectory); + if (reportUri) { + await openEvaluationReport(reportUri); + } + } endGroup(test, true, run); }).catch(() => { endGroup(test, false, run); @@ -197,13 +244,7 @@ export async function runHandler(request: TestRunRequest, token: CancellationTok run.started(child); }); - if (projectName) { - // Workspace context - include project name in command - command = `${executor} test --code-coverage --tests ${testCaseNames.join(',')} ${projectName}`; - } else { - // Single project context - command = `${executor} test --code-coverage --tests ${testCaseNames.join(',')}`; - } + command = buildTestCommand(test, executor, projectName, testCaseNames); const startTime = Date.now(); // For workspace, run from workspace root; for single project, run from project path @@ -212,7 +253,13 @@ export async function runHandler(request: TestRunRequest, token: CancellationTok const endTime = Date.now(); const timeElapsed = calculateTimeElapsed(startTime, endTime, testItems); - reportTestResults(run, testItems, timeElapsed, projectPath).then(() => { + reportTestResults(run, testItems, timeElapsed, projectPath).then(async () => { + if (isAiEvaluations(test)) { + const reportUri = await findLatestEvaluationReport(workingDirectory); + if (reportUri) { + await openEvaluationReport(reportUri); + } + } endGroup(test, true, run); }).catch(() => { endGroup(test, false, run); @@ -221,20 +268,20 @@ export async function runHandler(request: TestRunRequest, token: CancellationTok const endTime = Date.now(); const timeElapsed = calculateTimeElapsed(startTime, endTime, testItems); - reportTestResults(run, testItems, timeElapsed, projectPath).then(() => { + reportTestResults(run, testItems, timeElapsed, projectPath).then(async () => { + if (isAiEvaluations(test)) { + const reportUri = await findLatestEvaluationReport(workingDirectory); + if (reportUri) { + await openEvaluationReport(reportUri); + } + } endGroup(test, true, run); }).catch(() => { endGroup(test, false, run); }); }); } else if (isTestFunctionItem(test)) { - if (projectName) { - // Workspace context - include project name in command - command = `${executor} test --code-coverage --tests ${test.label} ${projectName}`; - } else { - // Single project context - command = `${executor} test --code-coverage --tests ${test.label}`; - } + command = buildTestCommand(test, executor, projectName, [test.label]); const parentGroup = test.parent; let testItems: TestItem[] = []; @@ -253,7 +300,13 @@ export async function runHandler(request: TestRunRequest, token: CancellationTok const endTime = Date.now(); const timeElapsed = calculateTimeElapsed(startTime, endTime, testItems); - reportTestResults(run, testItems, timeElapsed, projectPath, true).then(() => { + reportTestResults(run, testItems, timeElapsed, projectPath, true).then(async () => { + if (isAiEvaluations(test)) { + const reportUri = await findLatestEvaluationReport(workingDirectory); + if (reportUri) { + await openEvaluationReport(reportUri); + } + } endGroup(test, true, run); }).catch(() => { endGroup(test, false, run); @@ -262,13 +315,17 @@ export async function runHandler(request: TestRunRequest, token: CancellationTok const endTime = Date.now(); const timeElapsed = calculateTimeElapsed(startTime, endTime, testItems); - reportTestResults(run, testItems, timeElapsed, projectPath, true).then(() => { + reportTestResults(run, testItems, timeElapsed, projectPath, true).then(async () => { + if (isAiEvaluations(test)) { + const reportUri = await findLatestEvaluationReport(workingDirectory); + if (reportUri) { + await openEvaluationReport(reportUri); + } + } endGroup(test, true, run); }).catch(() => { endGroup(test, false, run); }); - }).finally(() => { - run.end(); }); } }); @@ -394,6 +451,47 @@ export async function readTestJson(file): Promise { } } +async function findLatestEvaluationReport(workingDirectory: string): Promise { + const reportsDir = path.join(workingDirectory, 'evaluation-reports'); + + if (!fs.existsSync(reportsDir)) { + return undefined; + } + + try { + const files = fs.readdirSync(reportsDir); + const htmlFiles = files + .filter((file: string) => file.endsWith('.html')) + .map((file: string) => ({ + name: file, + path: path.join(reportsDir, file), + mtime: fs.statSync(path.join(reportsDir, file)).mtime + })) + .sort((a: { mtime: Date }, b: { mtime: Date }) => b.mtime.getTime() - a.mtime.getTime()); + + if (htmlFiles.length > 0) { + return Uri.file(htmlFiles[0].path); + } + } catch (error) { + console.error('Error finding evaluation report:', error); + } + + return undefined; +} + +async function openEvaluationReport(reportUri: Uri): Promise { + try { + // Show notification (non-blocking, no button) + window.showInformationMessage('Evaluation report generated'); + + // Open report in webview + await EvaluationReportWebview.createOrShow(reportUri); + } catch (error) { + console.error('Failed to open evaluation report:', error); + window.showErrorMessage('Failed to open evaluation report'); + } +} + function endGroup(test: TestItem, allPassed: boolean, run: TestRun) { if (allPassed) { run.passed(test); diff --git a/workspaces/ballerina/ballerina-extension/src/features/testing/runner.ts b/workspaces/ballerina/ballerina-extension/src/features/testing/runner.ts index b136c9560ae..877f05992d2 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/testing/runner.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/testing/runner.ts @@ -34,6 +34,7 @@ import { BALLERINA_COMMANDS } from "../project"; import { discoverTests, gatherTestItems } from "./discover"; import { testController, projectRoot } from "./activator"; import { extension } from "../../BalExtensionContext"; +import { quoteShellPath } from "../../utils/config"; enum EXEC_ARG { TESTS = '--tests', @@ -72,7 +73,7 @@ export function runHandler(request: TestRunRequest, cancellation: CancellationTo try { // execute test const executor = extension.ballerinaExtInstance.getBallerinaCmd(); - const commandText = `${executor} ${BALLERINA_COMMANDS.TEST} ${EXEC_ARG.TESTS} ${testNames} ${EXEC_ARG.COVERAGE}`; + const commandText = `${quoteShellPath(executor)} ${BALLERINA_COMMANDS.TEST} ${EXEC_ARG.TESTS} ${testNames} ${EXEC_ARG.COVERAGE}`; await runCommand(commandText, projectRoot); } catch { diff --git a/workspaces/ballerina/ballerina-extension/src/features/tracing/activate.ts b/workspaces/ballerina/ballerina-extension/src/features/tracing/activate.ts index d33bf3c59f6..1d4d8f85def 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/tracing/activate.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/tracing/activate.ts @@ -65,7 +65,7 @@ export function activateTracing(ballerinaExtInstance: BallerinaExtension) { }); const enableTracingCommand = vscode.commands.registerCommand(ENABLE_TRACING_COMMAND, async () => { - const targetPath = await resolveTracingTargetPath("Select a package to enable tracing"); + const targetPath = await resolveTracingTargetPath("Select an integration to enable tracing"); if (!targetPath) { return; } @@ -76,7 +76,7 @@ export function activateTracing(ballerinaExtInstance: BallerinaExtension) { }); const disableTracingCommand = vscode.commands.registerCommand(DISABLE_TRACING_COMMAND, async () => { - const targetPath = await resolveTracingTargetPath("Select a package to disable tracing"); + const targetPath = await resolveTracingTargetPath("Select an integration to disable tracing"); if (!targetPath) { return; } @@ -92,8 +92,8 @@ export function activateTracing(ballerinaExtInstance: BallerinaExtension) { const showTraceDetailsCommand = vscode.commands.registerCommand( SHOW_TRACE_DETAILS_COMMAND, - (trace: Trace) => { - showTraceDetails(trace); + (trace: Trace, focusSpanId?: string) => { + showTraceDetails(trace, focusSpanId); } ); @@ -111,8 +111,8 @@ export function activateTracing(ballerinaExtInstance: BallerinaExtension) { /** * Resolves the target project path for tracing operations. - * Handles package selection when required and updates the state machine accordingly. - * @param promptMessage - The message to display when prompting for package selection + * Handles integration selection when required and updates the state machine accordingly. + * @param promptMessage - The message to display when prompting for integration selection * @returns The resolved target path, or undefined if the user cancelled the selection */ async function resolveTracingTargetPath(promptMessage: string): Promise { @@ -192,9 +192,9 @@ async function showTraceWindow(): Promise { /** * Show trace details in a webview */ -function showTraceDetails(trace: Trace): void { +function showTraceDetails(trace: Trace, focusSpanId?: string): void { try { - TraceDetailsWebview.show(trace); + TraceDetailsWebview.show(trace, false, focusSpanId); } catch (error) { const message = error instanceof Error ? error.message : String(error); vscode.window.showErrorMessage(`Failed to show trace details: ${message}`); diff --git a/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-converter.ts b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-converter.ts new file mode 100644 index 00000000000..777a69c73c6 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-converter.ts @@ -0,0 +1,329 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + EvalChatUserMessage as ChatUserMessage, + EvalChatAssistantMessage as ChatAssistantMessage, + EvalChatMessage as ChatMessage, + EvalToolSchema as ToolSchema, + EvalIteration as Iteration, + EvalsetTrace, + EvalFunctionCall +} from '@wso2/ballerina-core'; + +// TraceData interface (from trace-details-webview.ts) +interface TraceData { + traceId: string; + spans: SpanData[]; + resource: ResourceData; + scope: ScopeData; + firstSeen: string; + lastSeen: string; +} + +interface SpanData { + spanId: string; + traceId: string; + parentSpanId: string; + name: string; + kind: string | number; + startTime?: string; + endTime?: string; + attributes?: AttributeData[]; +} + +interface ResourceData { + name: string; + attributes: AttributeData[]; +} + +interface ScopeData { + name: string; + version?: string; + attributes?: AttributeData[]; +} + +interface AttributeData { + key: string; + value: string; +} + +// --- Helper Functions --- + +/** + * Helper to extract a value from the span's attribute list by key. + */ +function getAttribute(span: SpanData, key: string): string | null { + if (!span.attributes) { return null; } + const attr = span.attributes.find((a: AttributeData) => a.key === key); + return attr ? attr.value : null; +} + +/** + * Parses a JSON string safely, returning null or a default if parsing fails. + */ +function safeJsonParse(jsonString: string | null): any { + if (!jsonString) { return null; } + try { + return JSON.parse(jsonString); + } catch (e) { + // If it's not JSON, return the raw string or handle appropriately + return jsonString; + } +} + +// --- Main Conversion Logic --- + +/** + * Converts a TraceData object to an EvalsetTrace format. + */ +export function convertTraceToEvalset(traceData: TraceData): EvalsetTrace { + const spans = traceData.spans; + const rootSpan = spans.find((s: SpanData) => s.kind === 2 || s.kind === '2'); + + // Find all chat spans that contain conversation history + const chatSpans = spans.filter((s: SpanData) => + s.name.startsWith('chat') && s.attributes?.some((a: AttributeData) => a.key === 'gen_ai.input.messages') + ); + + // Find all tool spans in the trace + const toolSpans = spans.filter((s: SpanData) => + s.name.startsWith('execute_tool') + ); + + // Sort tool spans by start time to process in order + toolSpans.sort((a, b) => { + const timeA = a.startTime || ''; + const timeB = b.startTime || ''; + return timeA.localeCompare(timeB); + }); + + // Sort chat spans by start time to process in order + chatSpans.sort((a, b) => { + const timeA = a.startTime || ''; + const timeB = b.startTime || ''; + return timeA.localeCompare(timeB); + }); + + if (!rootSpan || chatSpans.length === 0) { + throw new Error("Could not find required Root span or chat spans in trace."); + } + + // Extract Data + const traceId = traceData.traceId; + const startTime = rootSpan.startTime || traceData.firstSeen; + const endTime = rootSpan.endTime || traceData.lastSeen; + + // Extract Tools (look in any span that has gen_ai.input.tools) + const toolSpan = spans.find((s: SpanData) => + s.attributes?.some((a: AttributeData) => a.key === 'gen_ai.input.tools') + ); + const tools: ToolSchema[] = []; + + if (toolSpan) { + const toolsStr = getAttribute(toolSpan, 'gen_ai.input.tools'); + if (toolsStr && toolsStr.trim() !== '') { + const toolsData = safeJsonParse(toolsStr); + if (Array.isArray(toolsData)) { + toolsData.forEach((t: any) => { + tools.push({ + name: t.name, + description: t.description, + parametersSchema: t.parameters + }); + }); + } + } + } + + // Helper function to parse messages + const parseMessages = (messagesStr: string | null): ChatMessage[] => { + if (!messagesStr) { + return []; + } + + let rawMessages = safeJsonParse(messagesStr); + + // Handle case where messages might be a single string + if (typeof rawMessages === 'string') { + rawMessages = [{ role: 'user', content: rawMessages }]; + } + + // Ensure we have an array + if (!Array.isArray(rawMessages)) { + console.warn('Expected array of messages, got:', typeof rawMessages); + return []; + } + + // Map raw OpenAI-style messages to our ChatMessage types + return rawMessages.map((msg: any) => { + const base: any = { + role: msg.role, + content: msg.content ?? null + }; + + if (msg.name) { base.name = msg.name; } + + // Only include toolCalls for assistant messages + if (msg.role === 'assistant') { + if (msg.tool_calls) { + base.toolCalls = msg.tool_calls.map((tc: any) => ({ + id: tc.id, + name: tc.function?.name || tc.name, + arguments: typeof tc.function?.arguments === 'string' + ? safeJsonParse(tc.function.arguments) + : tc.function?.arguments || tc.arguments + })); + } else if (msg.toolCalls) { + base.toolCalls = msg.toolCalls; + } else { + base.toolCalls = null; + } + } + + if (msg.id) { base.id = msg.id; } + + return base as ChatMessage; + }); + }; + + // Helper function to parse a single output message + const parseOutputMessage = (messageStr: string | null): ChatMessage => { + if (!messageStr) { + return { + role: 'assistant', + content: 'No output available', + toolCalls: null + }; + } + + const rawMessage = safeJsonParse(messageStr); + + // If it's already a properly formatted message object + if (rawMessage && typeof rawMessage === 'object' && rawMessage.role) { + const base: any = { + role: rawMessage.role, + content: rawMessage.content ?? null + }; + + if (rawMessage.name) { base.name = rawMessage.name; } + + // Only include toolCalls for assistant messages + if (rawMessage.role === 'assistant') { + if (rawMessage.tool_calls) { + base.toolCalls = rawMessage.tool_calls.map((tc: any) => ({ + id: tc.id, + name: tc.function?.name || tc.name, + arguments: typeof tc.function?.arguments === 'string' + ? safeJsonParse(tc.function.arguments) + : tc.function?.arguments || tc.arguments + })); + } else if (rawMessage.toolCalls) { + base.toolCalls = rawMessage.toolCalls; + } else { + base.toolCalls = null; + } + } + + if (rawMessage.id) { base.id = rawMessage.id; } + + return base as ChatMessage; + } + + // Fallback: treat as plain content + return { + role: 'assistant', + content: typeof rawMessage === 'string' ? rawMessage : JSON.stringify(rawMessage), + toolCalls: null + }; + }; + + // Build iterations from chat spans + const iterations: Iteration[] = []; + + for (let i = 0; i < chatSpans.length; i++) { + const chatSpan = chatSpans[i]; + const isLastSpan = i === chatSpans.length - 1; + + const inputMessagesStr = getAttribute(chatSpan, 'gen_ai.input.messages'); + const outputMessageStr = getAttribute(chatSpan, 'gen_ai.output.messages'); + + const inputMessages = parseMessages(inputMessagesStr); + const iterationHistory = [...inputMessages]; + + // Parse output message (single object) + const output = parseOutputMessage(outputMessageStr); + + if (!isLastSpan) { + iterationHistory.push(output); + } + + // Create iteration + iterations.push({ + history: iterationHistory, + output: output as ChatAssistantMessage, + startTime: chatSpan.startTime || startTime, + endTime: chatSpan.endTime || endTime + }); + } + + // Determine User Message (Trigger) + const firstChatInputStr = getAttribute(chatSpans[0], 'gen_ai.input.messages'); + const firstInputMessages = parseMessages(firstChatInputStr); + const lastUserMsg = [...firstInputMessages].reverse().find(m => m.role === 'user'); + const userMessage: ChatUserMessage = lastUserMsg + ? (lastUserMsg as ChatUserMessage) + : { role: 'user', content: 'Unknown input' }; + + const lastIteration = iterations[iterations.length - 1]; + const finalOutputToolCalls: EvalFunctionCall[] = []; + + for (let i = 0; i < toolSpans.length; i++) { + const toolSpan = toolSpans[i]; + const toolCallsStr = getAttribute(toolSpan, 'gen_ai.tool.arguments'); + const toolCallsData = safeJsonParse(toolCallsStr); + finalOutputToolCalls.push({ + name: getAttribute(toolSpan, 'gen_ai.tool.name') || 'unknown_tool', + arguments: toolCallsData + }); + } + + // Final output is the last iteration's output + const finalOutput: ChatAssistantMessage = lastIteration.output; + + // Assemble Final Trace Object + const evalsetTrace: EvalsetTrace = { + id: traceId, + userMessage: userMessage, + iterations: iterations, + output: finalOutput, + tools: tools, + ...(finalOutputToolCalls.length > 0 && { toolCalls: finalOutputToolCalls }), + startTime: startTime, + endTime: endTime + }; + + return evalsetTrace; +} + +/** + * Converts multiple TraceData objects to a combined evalset format. + */ +export function convertTracesToEvalset(traces: TraceData[]): EvalsetTrace[] { + return traces.map(trace => convertTraceToEvalset(trace)); +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-details-webview.ts b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-details-webview.ts index 4d80bdb88fd..bddd5a0fcba 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-details-webview.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-details-webview.ts @@ -18,10 +18,17 @@ import * as vscode from 'vscode'; import * as path from 'path'; +import * as os from 'os'; +import * as fs from 'fs'; +import * as crypto from 'crypto'; import { Uri, ViewColumn, Webview } from 'vscode'; import { extension } from '../../BalExtensionContext'; -import { Trace } from './trace-server'; +import { Trace, TraceServer } from './trace-server'; import { getLibraryWebViewContent, getComposerWebViewOptions, WebViewOptions } from '../../utils/webview-utils'; +import { convertTraceToEvalset, convertTracesToEvalset } from './trace-converter'; +import { EvalThread, EvalSet } from '@wso2/ballerina-core'; +import { getCurrentProjectRoot } from '../../utils/project-utils'; +import { ensureEvalsetsDirectory, validateEvalsetName, findExistingEvalsets } from '../test-explorer/evalset-utils'; // TraceData interface matching the trace-visualizer component interface TraceData { @@ -66,11 +73,15 @@ export class TraceDetailsWebview { private _disposables: vscode.Disposable[] = []; private _trace: Trace | undefined; private _isAgentChat: boolean = false; + private _focusSpanId: string | undefined; + private _sessionId: string | undefined; + private _traceUpdateUnsubscribe: (() => void) | undefined; private constructor() { this._panel = TraceDetailsWebview.createWebview(); this._panel.onDidDispose(() => this.dispose(), null, this._disposables); this.setupMessageHandler(); + this.subscribeToTraceUpdates(); } private setupMessageHandler(): void { @@ -79,7 +90,7 @@ export class TraceDetailsWebview { } this._panel.webview.onDidReceiveMessage( - (message) => { + async (message) => { switch (message.command) { case 'requestTraceData': if (this._trace) { @@ -88,9 +99,36 @@ export class TraceDetailsWebview { command: 'traceData', data: traceData, isAgentChat: this._isAgentChat, + focusSpanId: this._focusSpanId, + sessionId: this._sessionId, }); } break; + case 'exportTrace': + if (message.data) { + await this.exportTrace(message.data); + } + break; + case 'requestSessionTraces': + if (message.sessionId) { + await this.handleSessionTracesRequest(message.sessionId); + } + break; + case 'exportSession': + if (message.data) { + await this.exportSession(message.data.sessionTraces, message.data.sessionId); + } + break; + case 'exportTraceAsEvalset': + if (message.data) { + await this.exportTraceAsEvalset(message.data); + } + break; + case 'exportSessionAsEvalset': + if (message.data) { + await this.exportSessionAsEvalset(message.data.sessionTraces, message.data.sessionId); + } + break; } }, null, @@ -98,11 +136,41 @@ export class TraceDetailsWebview { ); } + private subscribeToTraceUpdates(): void { + this._traceUpdateUnsubscribe = TraceServer.onTracesUpdated(() => { + if (!this._trace && this._sessionId && this._panel) { + this.refreshSessionTraces(); + } + }); + } + + private async refreshSessionTraces(): Promise { + if (!this._sessionId || !this._panel) { + return; + } + + try { + const sessionTraces = TraceServer.getTracesBySessionId(this._sessionId); + const traces = sessionTraces.map(trace => this.convertTraceToTraceData(trace)); + + // Send updated traces to the webview with isUpdate flag + // This prevents forcing the view mode change on updates + this._panel.webview.postMessage({ + command: 'sessionTraces', + traces, + sessionId: this._sessionId, + isUpdate: true + }); + } catch (error) { + console.error('Failed to refresh session traces:', error); + } + } + private static createWebview(): vscode.WebviewPanel { const panel = vscode.window.createWebviewPanel( 'ballerina.trace-details', 'Trace Details', - ViewColumn.Active, + ViewColumn.One, { enableScripts: true, localResourceRoots: [ @@ -119,7 +187,7 @@ export class TraceDetailsWebview { return panel; } - public static show(trace: Trace, isAgentChat: boolean = false): void { + public static show(trace: Trace, isAgentChat: boolean = false, focusSpanId?: string, sessionId?: string): void { if (!TraceDetailsWebview.instance || !TraceDetailsWebview.instance._panel) { // Create new instance if it doesn't exist or was disposed TraceDetailsWebview.instance = new TraceDetailsWebview(); @@ -129,18 +197,39 @@ export class TraceDetailsWebview { const instance = TraceDetailsWebview.instance; instance._trace = trace; instance._isAgentChat = isAgentChat; + instance._focusSpanId = focusSpanId; + instance._sessionId = sessionId; // Update title based on isAgentChat flag if (instance._panel) { - instance._panel.title = isAgentChat ? 'Agent Chat Logs' : 'Trace Details'; + instance._panel.title = 'Trace Logs'; + } + + vscode.commands.executeCommand('workbench.action.closeSidebar'); + + instance._panel!.reveal(ViewColumn.One); + instance.updateWebview(); + } + + public static async showSessionOverview(sessionId: string): Promise { + // Create or reuse webview instance + if (!TraceDetailsWebview.instance || !TraceDetailsWebview.instance._panel) { + TraceDetailsWebview.instance = new TraceDetailsWebview(); } - instance._panel!.reveal(); + const instance = TraceDetailsWebview.instance; + instance._trace = null; + instance._isAgentChat = true; + instance._sessionId = sessionId; + + vscode.commands.executeCommand('workbench.action.closeSidebar'); + + instance._panel!.reveal(ViewColumn.One); instance.updateWebview(); } private updateWebview(): void { - if (!this._panel || !this._trace) { + if (!this._panel) { return; } @@ -148,11 +237,13 @@ export class TraceDetailsWebview { // Send trace data immediately after updating HTML (in case webview is already loaded) // The webview will also request it if needed - const traceData = this.convertTraceToTraceData(this._trace); + const traceData = this._trace ? this.convertTraceToTraceData(this._trace) : null; this._panel.webview.postMessage({ command: 'traceData', data: traceData, isAgentChat: this._isAgentChat, + focusSpanId: this._focusSpanId, + sessionId: this._sessionId }); } @@ -183,7 +274,453 @@ export class TraceDetailsWebview { }; } - private getWebviewContent(trace: Trace, webView: Webview): string { + private async exportTrace(traceData: TraceData): Promise { + try { + const fileName = `trace-${traceData.traceId}.json`; + // Default to ./traces inside the first workspace folder; fallback to home directory + const wf = vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders[0]; + let defaultUri: vscode.Uri; + + if (wf) { + const tracesDirPath = path.join(wf.uri.fsPath, 'traces'); + const tracesDirUri = vscode.Uri.file(tracesDirPath); + try { + // Ensure the traces directory exists (create if missing) + await vscode.workspace.fs.createDirectory(tracesDirUri); + } catch (e) { + // Ignore errors and fall back to workspace root below + } + + defaultUri = vscode.Uri.file(path.join(tracesDirPath, fileName)); + } else { + defaultUri = vscode.Uri.file(path.join(os.homedir(), fileName)); + } + + const fileUri = await vscode.window.showSaveDialog({ + defaultUri, + filters: { + 'JSON Files': ['json'], + 'All Files': ['*'] + } + }); + + if (fileUri) { + const jsonContent = JSON.stringify(traceData, null, 2); + await vscode.workspace.fs.writeFile(fileUri, Buffer.from(jsonContent, 'utf8')); + vscode.window.showInformationMessage(`Trace exported to ${fileUri.fsPath}`); + } + } catch (error) { + vscode.window.showErrorMessage(`Failed to export trace: ${error}`); + } + } + + private async handleSessionTracesRequest(sessionId: string): Promise { + try { + const sessionTraces = TraceServer.getTracesBySessionId(sessionId); + + // Convert to TraceData format + const traces = sessionTraces.map(trace => this.convertTraceToTraceData(trace)); + + // Send to webview + this._panel?.webview.postMessage({ + command: 'sessionTraces', + traces, + sessionId + }); + } catch (error) { + vscode.window.showErrorMessage(`Failed to fetch session traces: ${error}`); + } + } + + private async exportSession(sessionTraces: TraceData[], sessionId: string): Promise { + try { + const fileName = `session-${sessionId}.json`; + const wf = vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders[0]; + let defaultUri: vscode.Uri; + + if (wf) { + const tracesDirPath = path.join(wf.uri.fsPath, 'traces'); + const tracesDirUri = vscode.Uri.file(tracesDirPath); + try { + await vscode.workspace.fs.createDirectory(tracesDirUri); + } catch (e) { + // Ignore errors + } + + defaultUri = vscode.Uri.file(path.join(tracesDirPath, fileName)); + } else { + defaultUri = vscode.Uri.file(path.join(os.homedir(), fileName)); + } + + const fileUri = await vscode.window.showSaveDialog({ + defaultUri, + filters: { + 'JSON Files': ['json'], + 'All Files': ['*'] + } + }); + + if (fileUri) { + const jsonContent = JSON.stringify({ + sessionId, + traces: sessionTraces + }, null, 2); + await vscode.workspace.fs.writeFile(fileUri, Buffer.from(jsonContent, 'utf8')); + vscode.window.showInformationMessage(`Session exported to ${fileUri.fsPath}`); + } + } catch (error) { + vscode.window.showErrorMessage(`Failed to export session: ${error}`); + } + } + + private async exportTraceAsEvalset(traceData: TraceData): Promise { + const mode = await this.promptExportMode(); + if (!mode) { return; } + + if (mode === 'new') { + await this.createNewEvalsetFromTrace(traceData); + } else { + await this.appendTraceToExistingEvalset(traceData); + } + } + + /** + * Creates thread from traces + */ + private createThreadFromTraces( + sessionTraces: TraceData[], + sessionId: string, + threadName?: string + ): EvalThread { + const evalsetTraces = convertTracesToEvalset(sessionTraces); + + return { + id: crypto.randomUUID(), + name: threadName || `Thread - ${sessionId.substring(0, 8)}`, + traces: evalsetTraces, + created_on: new Date().toISOString() + }; + } + + /** + * Creates thread from a single trace + */ + private createThreadFromTrace( + traceData: TraceData, + threadName?: string + ): EvalThread { + const evalsetTrace = convertTraceToEvalset(traceData); + + return { + id: crypto.randomUUID(), + name: threadName || `Thread - ${traceData.traceId.substring(0, 8)}`, + traces: [evalsetTrace], + created_on: new Date().toISOString() + }; + } + + /** + * Prompt for export mode (new vs append) + */ + private async promptExportMode(): Promise<'new' | 'append' | undefined> { + const mode = await vscode.window.showQuickPick([ + { label: 'Create new evalset', value: 'new' as const }, + { label: 'Append to existing evalset', value: 'append' as const } + ], { + placeHolder: 'How would you like to export this session?' + }); + + return mode?.value; + } + + /** + * Creates a new evalset + */ + private async createNewEvalset( + sessionTraces: TraceData[], + sessionId: string + ): Promise { + try { + // 1. Ensure evalsets directory exists + const evalsetsDir = await ensureEvalsetsDirectory(); + + // 2. Prompt for name + const name = await vscode.window.showInputBox({ + prompt: 'Enter evalset name', + placeHolder: `session-${sessionId.substring(0, 8)}`, + value: `session-${sessionId.substring(0, 8)}`, + validateInput: (value) => validateEvalsetName(value, evalsetsDir) + }); + + if (!name) { return; } // User cancelled + + // 3. Create EvalSet with single thread + const thread = this.createThreadFromTraces(sessionTraces, sessionId); + const evalset: EvalSet = { + id: crypto.randomUUID(), + name: name, + description: `Session export`, + threads: [thread], + created_on: new Date().toISOString() + }; + + // 4. Write file + const filePath = path.join(evalsetsDir, `${name}.evalset.json`); + const jsonContent = JSON.stringify(evalset, null, 2); + const fileUri = vscode.Uri.file(filePath); + + await vscode.workspace.fs.writeFile(fileUri, Buffer.from(jsonContent, 'utf8')); + + // 5. Success message with View option + const action = await vscode.window.showInformationMessage( + `Evalset created: ${name}.evalset.json`, + 'View' + ); + + if (action === 'View') { + vscode.commands.executeCommand('ballerina.openEvalsetViewer', fileUri, thread.id); + } + + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + vscode.window.showErrorMessage(`Failed to create evalset: ${errorMessage}`); + } + } + + /** + * Creates a new evalset from a single trace + */ + private async createNewEvalsetFromTrace( + traceData: TraceData + ): Promise { + try { + // 1. Ensure evalsets directory exists + const evalsetsDir = await ensureEvalsetsDirectory(); + + // 2. Prompt for name + const name = await vscode.window.showInputBox({ + prompt: 'Enter evalset name', + placeHolder: `trace-${traceData.traceId.substring(0, 8)}`, + value: `trace-${traceData.traceId.substring(0, 8)}`, + validateInput: (value) => validateEvalsetName(value, evalsetsDir) + }); + + if (!name) { return; } // User cancelled + + // 3. Create EvalSet with single thread + const thread = this.createThreadFromTrace(traceData); + const evalset: EvalSet = { + id: crypto.randomUUID(), + name: name, + description: `Single trace export`, + threads: [thread], + created_on: new Date().toISOString() + }; + + // 4. Write file + const filePath = path.join(evalsetsDir, `${name}.evalset.json`); + const jsonContent = JSON.stringify(evalset, null, 2); + const fileUri = vscode.Uri.file(filePath); + + await vscode.workspace.fs.writeFile(fileUri, Buffer.from(jsonContent, 'utf8')); + + // 5. Success message with View option + const action = await vscode.window.showInformationMessage( + `Evalset created: ${name}.evalset.json`, + 'View' + ); + + if (action === 'View') { + vscode.commands.executeCommand('ballerina.openEvalsetViewer', fileUri, thread.id); + } + + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + vscode.window.showErrorMessage(`Failed to create evalset: ${errorMessage}`); + } + } + + /** + * Appends a single trace to an existing evalset as a new thread + */ + private async appendTraceToExistingEvalset( + traceData: TraceData + ): Promise { + try { + // 1. Ensure evalsets directory and find files + const evalsetsDir = await ensureEvalsetsDirectory(); + const existingEvalsets = await findExistingEvalsets(evalsetsDir); + + if (existingEvalsets.length === 0) { + vscode.window.showErrorMessage('No evalsets found. Create a new one first.'); + return; + } + + // 2. Select evalset + const selected = await vscode.window.showQuickPick(existingEvalsets, { + placeHolder: 'Select an evalset to append to' + }); + + if (!selected) { return; } // User cancelled + + // 3. Prompt for thread name (quick pick: auto vs custom) + const nameChoice = await vscode.window.showQuickPick([ + { label: 'Auto-generate thread name', value: 'auto' as const }, + { label: 'Enter custom thread name', value: 'custom' as const } + ], { + placeHolder: 'How would you like to name the new thread?' + }); + + if (!nameChoice) { return; } // User cancelled + + let threadName: string | undefined; + if (nameChoice.value === 'custom') { + threadName = await vscode.window.showInputBox({ + prompt: 'Enter thread name', + value: `Thread - ${traceData.traceId.substring(0, 8)}`, + placeHolder: `Thread - ${traceData.traceId.substring(0, 8)}` + }); + + if (!threadName) { return; } // User cancelled + } + + // 4. Read existing evalset + const fileUri = vscode.Uri.file(selected.filePath); + let evalset: EvalSet; + + try { + const content = await vscode.workspace.fs.readFile(fileUri); + evalset = JSON.parse(Buffer.from(content).toString('utf8')); + } catch (parseError) { + throw new Error('Invalid evalset file: corrupted or invalid JSON'); + } + + // Validate schema + if (!evalset.threads || !Array.isArray(evalset.threads)) { + throw new Error('Invalid evalset format: missing threads array'); + } + + // 5. Add new thread + const newThread = this.createThreadFromTrace(traceData, threadName); + evalset.threads.push(newThread); + + // 6. Write back + const jsonContent = JSON.stringify(evalset, null, 2); + await vscode.workspace.fs.writeFile(fileUri, Buffer.from(jsonContent, 'utf8')); + + // 7. Success message with View option + const action = await vscode.window.showInformationMessage( + `Thread added to ${selected.label}.evalset.json`, + 'View' + ); + + if (action === 'View') { + vscode.commands.executeCommand('ballerina.openEvalsetViewer', fileUri, newThread.id); + } + + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + vscode.window.showErrorMessage(`Failed to append to evalset: ${errorMessage}`); + } + } + + /** + * Appends traces to an existing evalset as a new thread + */ + private async appendToExistingEvalset( + sessionTraces: TraceData[], + sessionId: string + ): Promise { + try { + // 1. Ensure evalsets directory and find files + const evalsetsDir = await ensureEvalsetsDirectory(); + const existingEvalsets = await findExistingEvalsets(evalsetsDir); + + if (existingEvalsets.length === 0) { + vscode.window.showErrorMessage('No evalsets found. Create a new one first.'); + return; + } + + // 2. Select evalset + const selected = await vscode.window.showQuickPick(existingEvalsets, { + placeHolder: 'Select an evalset to append to' + }); + + if (!selected) { return; } // User cancelled + + // 3. Prompt for thread name (quick pick: auto vs custom) + const nameChoice = await vscode.window.showQuickPick([ + { label: 'Auto-generate thread name', value: 'auto' }, + { label: 'Enter custom thread name', value: 'custom' } + ], { + placeHolder: 'How would you like to name the new thread?' + }); + + if (!nameChoice) { return; } // User cancelled + + let threadName: string | undefined; + if (nameChoice.value === 'custom') { + threadName = await vscode.window.showInputBox({ + prompt: 'Enter thread name', + value: `Thread - ${sessionId.substring(0, 8)}`, + placeHolder: `Thread - ${sessionId.substring(0, 8)}` + }); + + if (!threadName) { return; } // User cancelled + } + + // 4. Read existing evalset + const fileUri = vscode.Uri.file(selected.filePath); + let evalset: EvalSet; + + try { + const content = await vscode.workspace.fs.readFile(fileUri); + evalset = JSON.parse(Buffer.from(content).toString('utf8')); + } catch (parseError) { + throw new Error('Invalid evalset file: corrupted or invalid JSON'); + } + + // Validate schema + if (!evalset.threads || !Array.isArray(evalset.threads)) { + throw new Error('Invalid evalset format: missing threads array'); + } + + // 5. Add new thread + const newThread = this.createThreadFromTraces(sessionTraces, sessionId, threadName); + evalset.threads.push(newThread); + + // 6. Write back + const jsonContent = JSON.stringify(evalset, null, 2); + await vscode.workspace.fs.writeFile(fileUri, Buffer.from(jsonContent, 'utf8')); + + // 7. Success message with View option + const action = await vscode.window.showInformationMessage( + `Thread added to ${selected.label}.evalset.json`, + 'View' + ); + + if (action === 'View') { + vscode.commands.executeCommand('ballerina.openEvalsetViewer', fileUri, newThread.id); + } + + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + vscode.window.showErrorMessage(`Failed to append to evalset: ${errorMessage}`); + } + } + + private async exportSessionAsEvalset(sessionTraces: TraceData[], sessionId: string): Promise { + const mode = await this.promptExportMode(); + if (!mode) { return; } + + if (mode === 'new') { + await this.createNewEvalset(sessionTraces, sessionId); + } else { + await this.appendToExistingEvalset(sessionTraces, sessionId); + } + } + + private getWebviewContent(trace: Trace | null, webView: Webview): string { const body = `
`; const bodyCss = ``; const styles = ` @@ -195,17 +732,54 @@ export class TraceDetailsWebview { `; const scripts = ` const vscode = acquireVsCodeApi(); + window.vscode = vscode; // Make vscode API available globally let traceData = null; let isAgentChat = false; + let focusSpanId = undefined; + let sessionId = false; + + // Expose API for React components to communicate with extension + window.traceVisualizerAPI = { + requestSessionTraces: (sessionId) => { + vscode.postMessage({ + command: 'requestSessionTraces', + sessionId: sessionId + }); + }, + exportSession: (sessionTraces, sessionId) => { + vscode.postMessage({ + command: 'exportSession', + data: { sessionTraces, sessionId } + }); + }, + exportTrace: (traceData) => { + vscode.postMessage({ + command: 'exportTrace', + data: traceData + }); + }, + exportTraceAsEvalset: (traceData) => { + vscode.postMessage({ + command: 'exportTraceAsEvalset', + data: traceData + }); + }, + exportSessionAsEvalset: (sessionTraces, sessionId) => { + vscode.postMessage({ + command: 'exportSessionAsEvalset', + data: { sessionTraces, sessionId } + }); + } + }; function renderTraceDetails() { - if (window.traceVisualizer && window.traceVisualizer.renderWebview && traceData) { + if (window.traceVisualizer && window.traceVisualizer.renderWebview) { const container = document.getElementById("webview-container"); if (container) { - window.traceVisualizer.renderWebview(traceData, isAgentChat, container); + window.traceVisualizer.renderWebview(traceData, isAgentChat, container, focusSpanId, sessionId); } - } else if (!traceData) { - // Request trace data from extension + } else if (!traceData && !sessionId) { + // Request trace data from extension only if we don't have sessionId vscode.postMessage({ command: 'requestTraceData' }); } else { console.error("TraceVisualizer not loaded"); @@ -220,11 +794,59 @@ export class TraceDetailsWebview { case 'traceData': traceData = message.data; isAgentChat = message.isAgentChat || false; + focusSpanId = message.focusSpanId; + sessionId = message.sessionId || false; renderTraceDetails(); break; } }); + // Listen for export requests from React component + window.addEventListener('exportTrace', (event) => { + if (event.detail && event.detail.traceData) { + vscode.postMessage({ + command: 'exportTrace', + data: event.detail.traceData + }); + } + }); + + // Listen for session export requests from React component + window.addEventListener('exportSession', (event) => { + if (event.detail && event.detail.sessionTraces && event.detail.currentSessionId) { + vscode.postMessage({ + command: 'exportSession', + data: { + sessionTraces: event.detail.sessionTraces, + sessionId: event.detail.currentSessionId + } + }); + } + }); + + // Listen for evalset export requests from React component + window.addEventListener('exportTraceAsEvalset', (event) => { + if (event.detail && event.detail.traceData) { + vscode.postMessage({ + command: 'exportTraceAsEvalset', + data: event.detail.traceData + }); + } + }); + + // Listen for session evalset export requests from React component + window.addEventListener('exportSessionAsEvalset', (event) => { + if (event.detail && event.detail.sessionTraces && event.detail.currentSessionId) { + vscode.postMessage({ + command: 'exportSessionAsEvalset', + data: { + sessionTraces: event.detail.sessionTraces, + sessionId: event.detail.currentSessionId + } + }); + } + }); + function loadedScript() { // Request trace data when script is loaded vscode.postMessage({ command: 'requestTraceData' }); @@ -244,6 +866,12 @@ export class TraceDetailsWebview { public dispose(): void { + // Unsubscribe from trace updates + if (this._traceUpdateUnsubscribe) { + this._traceUpdateUnsubscribe(); + this._traceUpdateUnsubscribe = undefined; + } + this._panel?.dispose(); while (this._disposables.length) { @@ -255,11 +883,10 @@ export class TraceDetailsWebview { this._panel = undefined; this._trace = undefined; - + // Clear the static instance when disposed if (TraceDetailsWebview.instance === this) { TraceDetailsWebview.instance = undefined; } } } - diff --git a/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-server.ts b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-server.ts index d29a8fb1f8f..f73e3d4a9bf 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-server.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-server.ts @@ -70,6 +70,8 @@ export interface TraceServer { getTraceByLastSeen(lastSeen: Date): Trace; onTracesUpdated(callback: () => void): () => void; onTracesCleared(callback: () => void): () => void; + getTracesBySessionId(sessionId: string): Trace[]; + getSessionIds(): string[]; } @@ -339,7 +341,7 @@ app.post('/v1/traces', async (req, res) => { const extractResourceName = (resource: any): string => { if (resource.name) { return resource.name; } if (resource.attributes) { - const serviceNameAttr = resource.attributes.find((attr: any) => + const serviceNameAttr = resource.attributes.find((attr: any) => attr.key === 'service.name' || attr.key === 'service_name' ); if (serviceNameAttr) { @@ -350,7 +352,7 @@ app.post('/v1/traces', async (req, res) => { }; // Helper function to process resource attributes - const processAttributes = (attributes: any[]): Array<{key: string; value: string}> => { + const processAttributes = (attributes: any[]): Array<{ key: string; value: string }> => { if (!attributes || !Array.isArray(attributes)) { return []; } return attributes.map((attr: any) => ({ key: attr.key || '', @@ -369,7 +371,7 @@ app.post('/v1/traces', async (req, res) => { // Process resource and scope const resourceName = extractResourceName(resourceSpan.resource); const scopeName = scopeSpan.scope?.name || 'Unknown Scope'; - + traceMap.set(traceId, { spans: [], resource: { @@ -465,7 +467,7 @@ export const TraceServer: TraceServer = { resolve(); return; } - + server = app.listen(port, () => { resolve(); }); @@ -522,5 +524,29 @@ export const TraceServer: TraceServer = { onTracesCleared: (callback: () => void) => { traceEvents.on('tracesCleared', callback); return () => traceEvents.off('tracesCleared', callback); + }, + getTracesBySessionId: (sessionId: string) => { + return Array.from(traceStore.values()).filter(trace => + trace.spans.some(span => { + const conversationId = span.attributes?.find( + attr => attr.key === 'gen_ai.conversation.id' + )?.value; + return conversationId === sessionId; + }) + ); + }, + getSessionIds: () => { + const sessionIds = new Set(); + for (const trace of traceStore.values()) { + for (const span of trace.spans) { + const conversationId = span.attributes?.find( + attr => attr.key === 'gen_ai.conversation.id' + )?.value; + if (conversationId) { + sessionIds.add(conversationId); + } + } + } + return Array.from(sessionIds); } }; \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-tree-view.ts b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-tree-view.ts index aa2bee9098f..86e8cd2cafd 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-tree-view.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-tree-view.ts @@ -120,6 +120,18 @@ export class TraceTreeDataProvider implements vscode.TreeDataProvider t.traceId === element.traceId); + if (trace) { + item.command = { + command: 'ballerina.showTraceDetails', + title: 'Show Trace Details', + arguments: [trace, element.span.spanId] + }; + } + return item; } } diff --git a/workspaces/ballerina/ballerina-extension/src/features/tryit/activator.ts b/workspaces/ballerina/ballerina-extension/src/features/tryit/activator.ts index a6e97d9bf65..02132b2b7ab 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/tryit/activator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/tryit/activator.ts @@ -89,7 +89,7 @@ async function openTryItView(withNotice: boolean = false, resourceMetadata?: Res // Check if service is already running BEFORE we potentially start it // This will be used to determine if we should reuse the session ID for AI Agent service - const wasServiceAlreadyRunning = await isServiceAlreadyRunning(projectPath); + let wasServiceAlreadyRunning = await isServiceAlreadyRunning(projectPath); if (withNotice) { const selection = await vscode.window.showInformationMessage( @@ -101,6 +101,8 @@ async function openTryItView(withNotice: boolean = false, resourceMetadata?: Res if (selection !== "Test") { return; } + + wasServiceAlreadyRunning = false; } else { const processesRunning = await checkBallerinaProcessRunning(projectPath); if (!processesRunning) { diff --git a/workspaces/ballerina/ballerina-extension/src/features/tryit/utils.ts b/workspaces/ballerina/ballerina-extension/src/features/tryit/utils.ts index 4e54f775559..9087135951a 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/tryit/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/tryit/utils.ts @@ -28,8 +28,8 @@ export const TRYIT_TEMPLATE = `/* {{#each paths}} {{#each this}} -/* -{{#unless ../../isResourceMode}}#### {{uppercase @key}} {{@../key}}{{/unless}} +{{#unless ../../isResourceMode}}/* +#### {{uppercase @key}} {{@../key}} {{#if parameters}} {{#with (groupParams parameters)}} @@ -56,6 +56,7 @@ export const TRYIT_TEMPLATE = `/* {{/with}} {{/if}} */ +{{/unless}} ### {{uppercase @key}} http://localhost:{{../../port}}{{trim ../../basePath}}{{{@../key}}}{{queryParams parameters}}{{#if parameters}}{{headerParams parameters}}{{/if}} {{#if requestBody}}Content-Type: {{getContentType requestBody}} diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-handler.ts index b92592eb749..458cec8ffb3 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-handler.ts @@ -23,7 +23,9 @@ import { getChatMessage, getTracingStatus, showTraceView, + showSessionOverview, TraceInput, + SessionInput, getChatHistory, clearChatHistory, getAgentStatus @@ -37,6 +39,7 @@ export function registerAgentChatRpcHandlers(messenger: Messenger) { messenger.onNotification(abortChatRequest, () => rpcManger.abortChatRequest()); messenger.onRequest(getTracingStatus, () => rpcManger.getTracingStatus()); messenger.onNotification(showTraceView, (args: TraceInput) => rpcManger.showTraceView(args)); + messenger.onNotification(showSessionOverview, (args: SessionInput) => rpcManger.showSessionOverview(args)); messenger.onRequest(getChatHistory, () => rpcManger.getChatHistory()); messenger.onRequest(clearChatHistory, () => rpcManger.clearChatHistory()); messenger.onRequest(getAgentStatus, () => rpcManger.getAgentStatus()); diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-manager.ts index 031e10b92eb..4e019e1a629 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-manager.ts @@ -20,12 +20,14 @@ import { AgentChatAPI, ChatReqMessage, ChatRespMessage, + ExecutionStep, TraceInput, TraceStatus, ChatHistoryMessage, ChatHistoryResponse, AgentStatusResponse, - ClearChatResponse + ClearChatResponse, + SessionInput } from "@wso2/ballerina-core"; import * as vscode from 'vscode'; import { extension } from '../../BalExtensionContext'; @@ -66,7 +68,6 @@ export class AgentChatRpcManager implements AgentChatAPI { this.currentAbortController = new AbortController(); const payload = { sessionId: extension.agentChatContext.chatSessionId, ...params }; - console.log('[Agent Chat] Sending message with session ID:', payload.sessionId); const response = await this.fetchTestData( extension.agentChatContext.chatEp, @@ -75,21 +76,23 @@ export class AgentChatRpcManager implements AgentChatAPI { ); if (response && response.message) { // Find trace and extract tool calls and execution steps - const trace = this.findTraceForMessage(params.message); - - const chatResponse: ChatRespMessage = { - message: response.message - }; + const trace = this.findTraceForMessage(extension.agentChatContext.chatSessionId, params.message); + const executionSteps = trace ? this.extractExecutionSteps(trace) : undefined; // Store agent response in history this.addMessageToHistory(sessionId, { type: 'message', text: response.message, isUser: false, - traceId: trace?.traceId + traceId: trace?.traceId, + executionSteps }); - resolve(chatResponse); + resolve({ + message: response.message, + traceId: trace?.traceId, + executionSteps + } as ChatRespMessage); } else { reject(new Error("Invalid response format:", response)); } @@ -101,15 +104,31 @@ export class AgentChatRpcManager implements AgentChatAPI { : "An unknown error occurred"; const sessionId = extension.agentChatContext?.chatSessionId; + let traceId: string | undefined; + let executionSteps: ExecutionStep[] | undefined; + if (sessionId) { + const trace = this.findTraceForMessage(extension.agentChatContext.chatSessionId, params.message); + traceId = trace?.traceId; + executionSteps = trace ? this.extractExecutionSteps(trace) : undefined; + this.addMessageToHistory(sessionId, { type: 'error', text: errorMessage, - isUser: false + isUser: false, + traceId, + executionSteps }); } - reject(error); + // Embed trace information in the error for RPC transmission + const traceInfo = { traceId, executionSteps }; + const errorWithTrace = new Error(JSON.stringify({ + message: errorMessage, + traceInfo: traceInfo + })); + + reject(errorWithTrace); } finally { this.currentAbortController = null; } @@ -152,6 +171,7 @@ export class AgentChatRpcManager implements AgentChatAPI { }); if (!response.ok) { + const errorData = await response.json(); switch (response.status) { case 400: throw new Error("Bad Request: The server could not understand the request."); @@ -203,13 +223,23 @@ export class AgentChatRpcManager implements AgentChatAPI { /** * Find the trace that corresponds to a chat message by matching span attributes + * @param sessionId The chat session ID * @param userMessage The user's input message * @returns The matching trace or undefined if not found */ - findTraceForMessage(userMessage: string): Trace | undefined { + findTraceForMessage(sessionId: string, userMessage: string): Trace | undefined { // Get all traces from the TraceServer const traces = TraceServer.getTraces(); + // Sort traces from most recent to least recent based on lastSeen timestamp + traces.sort((a, b) => { + const timeA = a.lastSeen.getTime(); + const timeB = b.lastSeen.getTime(); + + // Sort in descending order (most recent first) + return timeB - timeA; + }); + // Helper function to extract string value from attribute value const extractValue = (value: any): string => { if (typeof value === 'string') { @@ -229,6 +259,7 @@ export class AgentChatRpcManager implements AgentChatAPI { // 1. span.type === "ai" // 2. gen_ai.operation.name === "invoke_agent" // 3. gen_ai.input.messages matches the user message + // 4. gen_ai.output.messages matches the agent response (if provided) const attributes = span.attributes || []; @@ -236,6 +267,8 @@ export class AgentChatRpcManager implements AgentChatAPI { let spanType: string | undefined; let operationName: string | undefined; let inputMessages: string | undefined; + let outputMessages: string | undefined; + let conversationId: string | undefined; for (const attr of attributes) { const attrValue = extractValue(attr.value); @@ -246,6 +279,10 @@ export class AgentChatRpcManager implements AgentChatAPI { operationName = attrValue; } else if (attr.key === 'gen_ai.input.messages') { inputMessages = attrValue; + } else if (attr.key === 'gen_ai.output.messages') { + outputMessages = attrValue; + } else if (attr.key === 'gen_ai.conversation.id') { + conversationId = attrValue; } } @@ -253,11 +290,13 @@ export class AgentChatRpcManager implements AgentChatAPI { if (spanType === 'ai' && operationName === 'invoke_agent' && inputMessages) { + + // If sessionId doesn't match, skip + if (conversationId != sessionId) { continue; } + // Check if the input message matches - // inputMessages might be JSON or contain the message - if (inputMessages.includes(userMessage)) { - return trace; - } + const inputMatches = inputMessages.includes(userMessage); + if (inputMatches) { return trace; } } } } @@ -266,24 +305,128 @@ export class AgentChatRpcManager implements AgentChatAPI { } /** - * Show trace details webview for a given chat message - * Finds the trace matching the message and opens it in the trace details webview - * @param userMessage The user's input message - * @throws Error if no trace is found for the message + * Remove operation prefixes from span names + * @param name The span name to clean + * @returns The cleaned span name + */ + private stripSpanPrefix(name: string): string { + const prefixes = ['invoke_agent ', 'execute_tool ', 'chat ']; + for (const prefix of prefixes) { + if (name.startsWith(prefix)) { + return name.substring(prefix.length); + } + } + return name; + } + + /** + * Extract execution steps from a trace + * @param trace The trace to extract execution steps from + * @returns Array of execution steps sorted chronologically */ - async showTraceDetailsForMessage(userMessage: string): Promise { + private extractExecutionSteps(trace: Trace): ExecutionStep[] { + const steps: ExecutionStep[] = []; + + // Helper function to extract string value from attribute value + const extractValue = (value: any): string => { + if (typeof value === 'string') { + return value; + } + if (value && typeof value === 'object' && 'stringValue' in value) { + return String(value.stringValue); + } + return ''; + }; + + // Iterate through all spans in the trace + for (const span of trace.spans || []) { + const attributes = span.attributes || []; + + let operationName = ''; + let toolName = ''; + let hasError = false; + + // Extract relevant attributes + for (const attr of attributes) { + const value = extractValue(attr.value); + + if (attr.key === 'gen_ai.operation.name') { + operationName = value; + } else if (attr.key === 'gen_ai.tool.name') { + toolName = value; + } else if (attr.key === 'error.message') { + hasError = true; + } + } + + // Determine operation type based on operation name + let operationType: 'invoke' | 'chat' | 'tool' | 'other' = 'other'; + let displayName = operationName; + + if (operationName.startsWith('invoke_agent')) { + operationType = 'invoke'; + displayName = this.stripSpanPrefix(span.name); + } else if (operationName.startsWith('chat')) { + operationType = 'chat'; + displayName = this.stripSpanPrefix(span.name); + } else if (operationName.startsWith('execute_tool')) { + operationType = 'tool'; + displayName = toolName || this.stripSpanPrefix(span.name); + } else { + // Skip spans that don't match our criteria + continue; + } + + // Calculate duration from ISO timestamps + const startTimeISO = span.startTime; + const endTimeISO = span.endTime; + let duration = 0; + + if (startTimeISO && endTimeISO) { + const startMs = new Date(startTimeISO).getTime(); + const endMs = new Date(endTimeISO).getTime(); + duration = endMs - startMs; + } + + steps.push({ + spanId: span.spanId, + operationType, + name: displayName, + fullName: operationName, + duration, + startTime: startTimeISO, + endTime: endTimeISO, + hasError + }); + } + + // Sort by start time chronologically + steps.sort((a, b) => { + if (!a.startTime || !b.startTime) { return 0; } + return a.startTime.localeCompare(b.startTime); + }); + + return steps; + } + + async showTraceView(params: TraceInput): Promise { try { - // Find the trace that matches the user message - const trace = this.findTraceForMessage(userMessage); + let trace: Trace | undefined; + + // Support direct trace lookup by traceId + if (params.traceId) { + const traces = TraceServer.getTraces(); + trace = traces.find(t => t.traceId === params.traceId); + } if (!trace) { - const errorMessage = 'No trace found for the given message. Make sure tracing is enabled and the agent has processed this message.'; + const errorMessage = 'No trace found. Make sure tracing is enabled and the agent has processed this message.'; vscode.window.showErrorMessage(errorMessage); throw new Error(errorMessage); } - // Open the trace details webview with isAgentChat=true - TraceDetailsWebview.show(trace, true); + // Open the trace details webview with isAgentChat=true and optional focusSpanId + TraceDetailsWebview.show(trace, true, params.focusSpanId, extension.agentChatContext?.chatSessionId); } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Failed to show trace details'; vscode.window.showErrorMessage(`Error: ${errorMessage}`); @@ -291,8 +434,23 @@ export class AgentChatRpcManager implements AgentChatAPI { } } - async showTraceView(params: TraceInput): Promise { - await this.showTraceDetailsForMessage(params.message); + async showSessionOverview(params: SessionInput): Promise { + try { + // Use provided sessionId or fall back to current session + const sessionId = params.sessionId || extension.agentChatContext?.chatSessionId; + + if (!sessionId) { + const errorMessage = 'No active session found'; + vscode.window.showErrorMessage(errorMessage); + throw new Error(errorMessage); + } + + await TraceDetailsWebview.showSessionOverview(sessionId); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Failed to show session overview'; + vscode.window.showErrorMessage(`Error: ${errorMessage}`); + throw error; + } } async getChatHistory(): Promise { diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-agent/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-agent/rpc-manager.ts index 0ca219219f4..c900abee837 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-agent/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-agent/rpc-manager.ts @@ -451,6 +451,8 @@ export class AiAgentRpcManager implements AIAgentAPI { } else { toolsValue = `[${mcpToolKitVarName}]`; } + } else { + toolsValue = `[${mcpToolKitVarName}]`; } // Set the updated tools value diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/repair-utils.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/repair-utils.ts index d9d3ffe0272..7d666219433 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/repair-utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/repair-utils.ts @@ -91,7 +91,12 @@ export async function isModuleNotFoundDiagsExist(diagnosticsResult: Diagnostics[ // Process each unique diagnostic only once let projectModified = false; - for (const [_, { uri }] of uniqueDiagnosticMap.entries()) { + for (const [message, { uri }] of uniqueDiagnosticMap.entries()) { + // Skip resolving dependencies for the invalid config import pattern + if (message.includes("ballerinax/.config as config")) { + continue; + } + const dependenciesResponse = await langClient.resolveModuleDependencies({ documentIdentifier: { uri: uri diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-handler.ts index 06868551057..3fae8821180 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-handler.ts @@ -28,10 +28,13 @@ import { approveTask, ApproveTaskRequest, cancelConnectorSpec, + cancelConfiguration, clearChat, clearInitialPrompt, ConnectorSpecCancelRequest, ConnectorSpecRequest, + ConfigurationCancelRequest, + ConfigurationProvideRequest, createTestDirecoryIfNotExists, declineChanges, declinePlan, @@ -45,6 +48,7 @@ import { generateOpenAPI, GenerateOpenAPIRequest, getActiveTempDir, + getAffectedPackages, getAIMachineSnapshot, getChatMessages, getCheckpoints, @@ -54,12 +58,11 @@ import { getGeneratedDocumentation, getLoginMethod, getSemanticDiff, - getAffectedPackages, - isWorkspaceProject, getServiceNames, isCopilotSignedIn, - isPlanModeFeatureEnabled, + isPlatformExtensionAvailable, isUserAuthenticated, + isWorkspaceProject, markAlertShown, MetadataWithAttachments, openAIPanel, @@ -69,6 +72,7 @@ import { ProcessMappingParametersRequest, promptGithubAuthorize, provideConnectorSpec, + provideConfiguration, RequirementSpecification, restoreCheckpoint, RestoreCheckpointRequest, @@ -79,7 +83,8 @@ import { TaskDeclineRequest, updateChatMessage, UpdateChatMessageRequest, - updateRequirementSpecification + updateRequirementSpecification, + getUsage } from "@wso2/ballerina-core"; import { Messenger } from "vscode-messenger"; import { AiPanelRpcManager } from "./rpc-manager"; @@ -87,6 +92,7 @@ import { AiPanelRpcManager } from "./rpc-manager"; export function registerAiPanelRpcHandlers(messenger: Messenger) { const rpcManger = new AiPanelRpcManager(); messenger.onRequest(getLoginMethod, () => rpcManger.getLoginMethod()); + messenger.onRequest(isPlatformExtensionAvailable, () => rpcManger.isPlatformExtensionAvailable()); messenger.onRequest(getDefaultPrompt, () => rpcManger.getDefaultPrompt()); messenger.onRequest(getAIMachineSnapshot, () => rpcManger.getAIMachineSnapshot()); messenger.onNotification(clearInitialPrompt, () => rpcManger.clearInitialPrompt()); @@ -111,7 +117,6 @@ export function registerAiPanelRpcHandlers(messenger: Messenger) { messenger.onRequest(addFilesToProject, (args: AddFilesToProjectRequest) => rpcManger.addFilesToProject(args)); messenger.onRequest(isUserAuthenticated, () => rpcManger.isUserAuthenticated()); messenger.onRequest(openAIPanel, (args: AIPanelPrompt) => rpcManger.openAIPanel(args)); - messenger.onRequest(isPlanModeFeatureEnabled, () => rpcManger.isPlanModeFeatureEnabled()); messenger.onRequest(getSemanticDiff, (args: SemanticDiffRequest) => rpcManger.getSemanticDiff(args)); messenger.onRequest(getAffectedPackages, () => rpcManger.getAffectedPackages()); messenger.onRequest(isWorkspaceProject, () => rpcManger.isWorkspaceProject()); @@ -123,10 +128,13 @@ export function registerAiPanelRpcHandlers(messenger: Messenger) { messenger.onRequest(declineTask, (args: TaskDeclineRequest) => rpcManger.declineTask(args)); messenger.onRequest(provideConnectorSpec, (args: ConnectorSpecRequest) => rpcManger.provideConnectorSpec(args)); messenger.onRequest(cancelConnectorSpec, (args: ConnectorSpecCancelRequest) => rpcManger.cancelConnectorSpec(args)); + messenger.onRequest(provideConfiguration, (args: ConfigurationProvideRequest) => rpcManger.provideConfiguration(args)); + messenger.onRequest(cancelConfiguration, (args: ConfigurationCancelRequest) => rpcManger.cancelConfiguration(args)); messenger.onRequest(getChatMessages, () => rpcManger.getChatMessages()); messenger.onRequest(getCheckpoints, () => rpcManger.getCheckpoints()); messenger.onRequest(restoreCheckpoint, (args: RestoreCheckpointRequest) => rpcManger.restoreCheckpoint(args)); messenger.onRequest(clearChat, () => rpcManger.clearChat()); messenger.onRequest(updateChatMessage, (args: UpdateChatMessageRequest) => rpcManger.updateChatMessage(args)); messenger.onRequest(getActiveTempDir, () => rpcManger.getActiveTempDir()); + messenger.onRequest(getUsage, () => rpcManger.getUsage()); } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-manager.ts index 9b46f21f63c..cd81facd743 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-manager.ts @@ -41,12 +41,12 @@ import { SubmitFeedbackRequest, TestGenerationMentions, UIChatMessage, - UpdateChatMessageRequest + UpdateChatMessageRequest, + UsageResponse } from "@wso2/ballerina-core"; import * as fs from 'fs'; import path from "path"; -import { extensions, workspace } from 'vscode'; -import { URI } from "vscode-uri"; +import { workspace } from 'vscode'; import { isNumber } from "lodash"; import { getServiceDeclarationNames } from "../../../src/features/ai/documentation/utils"; @@ -56,21 +56,25 @@ import { extension } from "../../BalExtensionContext"; import { openChatWindowWithCommand } from "../../features/ai/data-mapper/index"; import { generateDocumentationForService } from "../../features/ai/documentation/generator"; import { generateOpenAPISpec } from "../../features/ai/openapi/index"; -import { OLD_BACKEND_URL } from "../../features/ai/utils"; -import { fetchWithAuth } from "../../features/ai/utils/ai-client"; +import { submitFeedback as submitFeedbackUtil } from "../../features/ai/utils/feedback"; +import { sendGenerationKeptTelemetry, sendGenerationDiscardTelemetry } from "../../features/ai/utils/generation-response"; import { getLLMDiagnosticArrayAsString } from "../../features/natural-programming/utils"; import { StateMachine, updateView } from "../../stateMachine"; -import { getLoginMethod, loginGithubCopilot } from "../../utils/ai/auth"; +import { isInWI } from "../../utils"; +import { getLoginMethod, isPlatformExtensionAvailable, loginGithubCopilot } from "../../utils/ai/auth"; import { normalizeCodeContext } from "../../views/ai-panel/codeContextUtils"; import { refreshDataMapper } from "../data-mapper/utils"; import { TEST_DIR_NAME } from "./constants"; +import { fetchWithAuth } from "../../features/ai/utils/ai-client"; +import { BACKEND_URL } from "../../features/ai/utils"; import { addToIntegration, cleanDiagnosticMessages, searchDocumentation } from "./utils"; import { onHideReviewActions } from '@wso2/ballerina-core'; import { createExecutionContextFromStateMachine, createExecutorConfig, generateAgent } from '../../features/ai/agent/index'; import { integrateCodeToWorkspace } from "../../features/ai/agent/utils"; +import { LLM_API_BASE_PATH, WI_EXTENSION_ID } from "../../features/ai/constants"; import { ContextTypesExecutor } from '../../features/ai/executors/datamapper/ContextTypesExecutor'; import { FunctionMappingExecutor } from '../../features/ai/executors/datamapper/FunctionMappingExecutor'; import { InlineMappingExecutor } from '../../features/ai/executors/datamapper/InlineMappingExecutor'; @@ -79,7 +83,6 @@ import { cleanupTempProject } from "../../features/ai/utils/project/temp-project import { RPCLayer } from '../../RPCLayer'; import { chatStateStorage } from '../../views/ai-panel/chatStateStorage'; import { restoreWorkspaceSnapshot } from '../../views/ai-panel/checkpoint/checkpointUtils'; -import { WI_EXTENSION_ID } from "../../features/ai/constants"; export class AiPanelRpcManager implements AIPanelAPI { @@ -90,9 +93,13 @@ export class AiPanelRpcManager implements AIPanelAPI { }); } + async isPlatformExtensionAvailable(): Promise { + return isPlatformExtensionAvailable(); + } + async getDefaultPrompt(): Promise { let defaultPrompt: AIPanelPrompt = extension.aiChatDefaultPrompt; - + // Normalize code context to use relative paths if (defaultPrompt && 'codeContext' in defaultPrompt && defaultPrompt.codeContext) { defaultPrompt = { @@ -100,7 +107,7 @@ export class AiPanelRpcManager implements AIPanelAPI { codeContext: normalizeCodeContext(defaultPrompt.codeContext) }; } - + return new Promise((resolve) => { resolve(defaultPrompt); }); @@ -158,8 +165,8 @@ export class AiPanelRpcManager implements AIPanelAPI { async showSignInAlert(): Promise { // Don't show alert in WI environment (WSO2 Integrator extension is installed) - const isInWI = !!extensions.getExtension(WI_EXTENSION_ID); - if (isInWI) { + const inWI = isInWI(); + if (inWI) { return false; } @@ -236,34 +243,7 @@ export class AiPanelRpcManager implements AIPanelAPI { } async submitFeedback(content: SubmitFeedbackRequest): Promise { - return new Promise(async (resolve) => { - try { - const payload = { - feedback: content.feedbackText, - positive: content.positive, - messages: content.messages, - diagnostics: cleanDiagnosticMessages(content.diagnostics) - }; - - const response = await fetchWithAuth(`${OLD_BACKEND_URL}/feedback`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(payload) - }); - - if (response.ok) { - resolve(true); - } else { - console.error("Failed to submit feedback"); - resolve(false); - } - } catch (error) { - console.error("Error submitting feedback:", error); - resolve(false); - } - }); + return await submitFeedbackUtil(content); } async generateOpenAPI(params: GenerateOpenAPIRequest): Promise { @@ -393,11 +373,6 @@ export class AiPanelRpcManager implements AIPanelAPI { openAIPanelWithPrompt(params); } - async isPlanModeFeatureEnabled(): Promise { - const config = workspace.getConfiguration('ballerina'); - return config.get('ai.planMode', false); - } - async getSemanticDiff(params: SemanticDiffRequest): Promise { const context = StateMachine.context(); console.log(">>> requesting semantic diff from ls", JSON.stringify(params)); @@ -488,6 +463,9 @@ export class AiPanelRpcManager implements AIPanelAPI { chatStateStorage.acceptAllReviews(workspaceId, threadId); console.log("[Review Actions] Marked all under_review generations as accepted"); + // Send telemetry for generation kept + sendGenerationKeptTelemetry(latestReview.id); + // Clear affectedPackagePaths from all completed reviews to prevent stale data for (const generation of underReviewGenerations) { chatStateStorage.updateReviewState(workspaceId, threadId, generation.id, { @@ -540,6 +518,10 @@ export class AiPanelRpcManager implements AIPanelAPI { chatStateStorage.declineAllReviews(workspaceId, threadId); console.log("[Review Actions] Marked all under_review generations as declined"); + // Send telemetry for generation discard + const latestReview = underReviewGenerations[underReviewGenerations.length - 1]; + sendGenerationDiscardTelemetry(latestReview.id); + // Clear affectedPackagePaths from all completed reviews to prevent stale data for (const generation of underReviewGenerations) { chatStateStorage.updateReviewState(workspaceId, threadId, generation.id, { @@ -583,6 +565,14 @@ export class AiPanelRpcManager implements AIPanelAPI { approvalManager.resolveConnectorSpec(params.requestId, false, undefined, params.comment); } + async provideConfiguration(params: { requestId: string; configValues: Record }): Promise { + approvalManager.resolveConfiguration(params.requestId, true, params.configValues); + } + + async cancelConfiguration(params: { requestId: string; comment?: string }): Promise { + approvalManager.resolveConfiguration(params.requestId, false, undefined, params.comment); + } + async restoreCheckpoint(params: RestoreCheckpointRequest): Promise { // Get workspace and thread identifiers const workspaceId = StateMachine.context().projectPath; @@ -708,4 +698,24 @@ export class AiPanelRpcManager implements AIPanelAPI { console.log(">>> active temp project path", projectPath); return projectPath; } + + async getUsage(): Promise { + const loginMethod = await getLoginMethod(); + if (loginMethod !== LoginMethod.BI_INTEL) { + return undefined; + } + try { + const url = BACKEND_URL + LLM_API_BASE_PATH + "/usage"; + const response = await fetchWithAuth(url, { method: "GET" }); + if (response && response.ok) { + const data = await response.json(); + return data as UsageResponse; + } + console.error("Failed to fetch usage: ", response?.status, response?.statusText); + return undefined; + } catch (error) { + console.error("Failed to fetch usage:", error); + return undefined; + } + } } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/utils.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/utils.ts index 537ae35582c..6bd7dfef1ed 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/utils.ts @@ -32,12 +32,6 @@ import { CopilotEventHandler } from "../../features/ai/utils/events"; import { VisualizerRpcManager } from "../visualizer/rpc-manager"; import { renderDatamapper } from "../../../src/views/ai-panel/checkpoint/checkpointUtils"; -// const BACKEND_BASE_URL = BACKEND_URL.replace(/\/v2\.0$/, ""); -//TODO: Temp workaround as custom domain seem to block file uploads -const CONTEXT_UPLOAD_URL_V1 = "https://e95488c8-8511-4882-967f-ec3ae2a0f86f-prod.e1-us-east-azure.choreoapis.dev/ballerina-copilot/context-upload-api/v1.0"; -// const CONTEXT_UPLOAD_URL_V1 = BACKEND_BASE_URL + "/context-api/v1.0"; -// const ASK_API_URL_V1 = BACKEND_BASE_URL + "/ask-api/v1.0"; - // Common functions // Checks if an error object has both 'code' and 'message' properties diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/form-state.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/form-state.ts new file mode 100644 index 00000000000..1b5d4df546e --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/form-state.ts @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +const openFormFilePaths = new Set(); + +export function registerFormOpen(filePath: string): void { + openFormFilePaths.add(filePath); +} + +export function registerFormClose(filePath: string): void { + openFormFilePaths.delete(filePath); +} + +export function hasOpenForm(): boolean { + return openFormFilePaths.size > 0; +} + +/** Clears form state when navigating away (e.g., user chose "Discard and Navigate"). */ +export function clearFormState(): void { + openFormFilePaths.clear(); +} diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-handler.ts index 9bd592a67cd..5edc2b08186 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-handler.ts @@ -56,7 +56,9 @@ import { deleteType, DeleteTypeRequest, DeploymentRequest, + WorkspaceDeploymentRequest, deployProject, + deployWorkspace, EndOfFileRequest, ExpressionCompletionsRequest, ExpressionDiagnosticsRequest, @@ -69,6 +71,7 @@ import { FunctionNodeRequest, generateOpenApiClient, getAiSuggestions, + getAvailableAgents, getAvailableChunkers, getAvailableDataLoaders, getAvailableEmbeddingProviders, @@ -83,6 +86,7 @@ import { getDataMapperCompletions, getDesignModel, getDevantMetadata, + getWorkspaceDevantMetadata, getEnclosedFunction, getEndOfFile, getExpressionCompletions, @@ -106,6 +110,8 @@ import { getRecordSource, getServiceClassModel, getSignatureHelp, + getSimpleTypeOfExpression, + GetSimpleTypeOfExpressionRequest, getSourceCode, getType, getTypeFromJson, @@ -165,6 +171,7 @@ export function registerBiDiagramRpcHandlers(messenger: Messenger) { messenger.onRequest(deleteFlowNode, (args: BISourceCodeRequest) => rpcManger.deleteFlowNode(args)); messenger.onRequest(deleteByComponentInfo, (args: BIDeleteByComponentInfoRequest) => rpcManger.deleteByComponentInfo(args)); messenger.onRequest(getAvailableNodes, (args: BIAvailableNodesRequest) => rpcManger.getAvailableNodes(args)); + messenger.onRequest(getAvailableAgents, (args: BIAvailableNodesRequest) => rpcManger.getAvailableAgents(args)); messenger.onRequest(getAvailableModelProviders, (args: BIAvailableNodesRequest) => rpcManger.getAvailableModelProviders(args)); messenger.onRequest(getAvailableVectorStores, (args: BIAvailableNodesRequest) => rpcManger.getAvailableVectorStores(args)); messenger.onRequest(getAvailableEmbeddingProviders, (args: BIAvailableNodesRequest) => rpcManger.getAvailableEmbeddingProviders(args)); @@ -196,6 +203,7 @@ export function registerBiDiagramRpcHandlers(messenger: Messenger) { messenger.onNotification(openReadme, (args: OpenReadmeRequest) => rpcManger.openReadme(args)); messenger.onRequest(renameIdentifier, (args: RenameIdentifierRequest) => rpcManger.renameIdentifier(args)); messenger.onRequest(deployProject, (args: DeploymentRequest) => rpcManger.deployProject(args)); + messenger.onRequest(deployWorkspace, (args: WorkspaceDeploymentRequest) => rpcManger.deployWorkspace(args)); messenger.onNotification(openAIChat, (args: AIChatRequest) => rpcManger.openAIChat(args)); messenger.onRequest(getSignatureHelp, (args: SignatureHelpRequest) => rpcManger.getSignatureHelp(args)); messenger.onNotification(buildProject, (args: BuildMode) => rpcManger.buildProject(args)); @@ -212,6 +220,7 @@ export function registerBiDiagramRpcHandlers(messenger: Messenger) { messenger.onRequest(getDesignModel, (args: BIDesignModelRequest) => rpcManger.getDesignModel(args)); messenger.onRequest(getTypes, (args: GetTypesRequest) => rpcManger.getTypes(args)); messenger.onRequest(getType, (args: GetTypeRequest) => rpcManger.getType(args)); + messenger.onRequest(getSimpleTypeOfExpression, (args: GetSimpleTypeOfExpressionRequest) => rpcManger.getSimpleTypeOfExpression(args)); messenger.onRequest(updateType, (args: UpdateTypeRequest) => rpcManger.updateType(args)); messenger.onRequest(updateTypes, (args: UpdateTypesRequest) => rpcManger.updateTypes(args)); messenger.onRequest(deleteType, (args: DeleteTypeRequest) => rpcManger.deleteType(args)); @@ -235,6 +244,7 @@ export function registerBiDiagramRpcHandlers(messenger: Messenger) { messenger.onRequest(getRecordNames, () => rpcManger.getRecordNames()); messenger.onRequest(getFunctionNames, () => rpcManger.getFunctionNames()); messenger.onRequest(getDevantMetadata, () => rpcManger.getDevantMetadata()); + messenger.onRequest(getWorkspaceDevantMetadata, () => rpcManger.getWorkspaceDevantMetadata()); messenger.onRequest(generateOpenApiClient, (args: OpenAPIClientGenerationRequest) => rpcManger.generateOpenApiClient(args)); messenger.onRequest(getOpenApiGeneratedModules, (args: OpenAPIGeneratedModulesRequest) => rpcManger.getOpenApiGeneratedModules(args)); messenger.onRequest(deleteOpenApiGeneratedModules, (args: OpenAPIClientDeleteRequest) => rpcManger.deleteOpenApiGeneratedModules(args)); diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-manager.ts index 94d4a80166c..92b169781e8 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-manager.ts @@ -70,8 +70,11 @@ import { ValidateProjectFormRequest, ValidateProjectFormResponse, DeploymentRequest, + WorkspaceDeploymentRequest, DeploymentResponse, DevantMetadata, + WorkspaceDevantMetadata, + ProjectDevantMetadata, Diagnostics, EndOfFileRequest, ExpressionCompletionsRequest, @@ -91,6 +94,8 @@ import { GetRecordConfigResponse, GetRecordModelFromSourceRequest, GetRecordModelFromSourceResponse, + GetSimpleTypeOfExpressionRequest, + GetSimpleTypeOfExpressionResponse, GetTypeRequest, GetTypeResponse, GetTypesRequest, @@ -145,13 +150,18 @@ import { AvailableNode, Item, Category, - NodePosition + NodePosition, + PackageTomlValues } from "@wso2/ballerina-core"; import * as fs from "fs"; import * as path from 'path'; import * as vscode from "vscode"; - -import { ICreateComponentCmdParams, IWso2PlatformExtensionAPI, CommandIds as PlatformExtCommandIds } from "@wso2/wso2-platform-core"; +import { + WICommandIds, + IWso2PlatformExtensionAPI, + ICreateNewIntegrationCmdParams, + ICreateNewIntegrationCmdIntegrations, +} from "@wso2/wso2-platform-core"; import { ShellExecution, Task, @@ -163,7 +173,6 @@ import { } from "vscode"; import { DebugProtocol } from "vscode-debugprotocol"; import { extension } from "../../BalExtensionContext"; -import { notifyBreakpointChange } from "../../RPCLayer"; import { OLD_BACKEND_URL } from "../../features/ai/utils"; import { fetchWithAuth } from "../../features/ai/utils/ai-client"; import { cleanAndValidateProject, getCurrentBIProject } from "../../features/config-generator/configGenerator"; @@ -171,18 +180,60 @@ import { BreakpointManager } from "../../features/debugger/breakpoint-manager"; import { StateMachine, updateView } from "../../stateMachine"; import { getAccessToken, getLoginMethod } from "../../utils/ai/auth"; import { getCompleteSuggestions } from '../../utils/ai/completions'; -import { README_FILE, addProjectToExistingWorkspace, convertProjectToWorkspace, createBIAutomation, createBIFunction, createBIProjectPure, createBIWorkspace, deleteProjectFromWorkspace, openInVSCode, validateProjectPath } from "../../utils/bi"; +import { + addProjectToExistingWorkspace, + convertProjectToWorkspace, + createBIAutomation, + createBIFunction, + createBIProjectPure, + createBIWorkspace, + deleteProjectFromWorkspace, + openInVSCode +, validateProjectPath } from "../../utils/bi"; import { writeBallerinaFileDidOpen } from "../../utils/modification"; import { updateSourceCode } from "../../utils/source-utils"; import { getView } from "../../utils/state-machine-utils"; +import { PlatformExtRpcManager } from "../platform-ext/rpc-manager"; import { openAIPanelWithPrompt } from "../../views/ai-panel/aiMachine"; -import { chatStateStorage } from "../../views/ai-panel/chatStateStorage"; import { checkProjectDiagnostics, removeUnusedImports } from "../ai-panel/repair-utils"; import { getCurrentBallerinaProject } from "../../utils/project-utils"; +import { CommonRpcManager } from "../common/rpc-manager"; +import * as toml from "@iarna/toml"; +import { readOrWriteReadmeContent } from "./utils"; +import { registerFormOpen, registerFormClose } from "./form-state"; +import { chatStateStorage } from "../../views/ai-panel/chatStateStorage"; +import { getRepoRoot } from "../platform-ext/platform-utils"; +import { WI_EXTENSION_ID } from "../../utils"; + export class BiDiagramRpcManager implements BIDiagramAPI { OpenConfigTomlRequest: (params: OpenConfigTomlRequest) => Promise; + private toRawPath(input: string): string { + if (input.includes('://')) { + return Uri.parse(input).fsPath; + } + return input; + } + + private mapTempPathToOriginal(tempFilePath: string): string { + const rawPath = this.toRawPath(tempFilePath); + const context = StateMachine.context(); + const originalRoot = context.workspacePath || context.projectPath; + const workspaceId = context.projectPath; + const threadId = 'default'; + const pendingReview = chatStateStorage.getPendingReviewGeneration(workspaceId, threadId); + if (pendingReview?.reviewState?.tempProjectPath && originalRoot) { + const normalizedTempRoot = pendingReview.reviewState.tempProjectPath.replace(/\\/g, '/'); + const normalizedFilePath = rawPath.replace(/\\/g, '/'); + if (normalizedFilePath.startsWith(normalizedTempRoot)) { + const relativePath = normalizedFilePath.substring(normalizedTempRoot.length); + return originalRoot + relativePath; + } + } + return rawPath; + } + async getFlowModel(params: BIFlowModelRequest): Promise { console.log(">>> requesting bi flow model from ls", params); return new Promise((resolve) => { @@ -191,8 +242,13 @@ export class BiDiagramRpcManager implements BIDiagramAPI { // If params has all required fields, use them directly if (params?.filePath && params?.startLine && params?.endLine) { console.log(">>> using params to create request"); + let filePath = params.filePath; + // When useFileSchema is set, map temp path to original project path + if (params.useFileSchema) { + filePath = this.mapTempPathToOriginal(filePath); + } request = { - filePath: params.filePath, + filePath, startLine: params.startLine, endLine: params.endLine, forceAssign: params.forceAssign ?? true, @@ -201,7 +257,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { // Fall back to context if params are not complete console.log(">>> params incomplete, falling back to context"); const context = StateMachine.context(); - + if (!context.position) { // TODO: check why this hits when we are in review mode console.log(">>> position not found in context, cannot create request"); @@ -240,26 +296,44 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async getSourceCode(params: BISourceCodeRequest): Promise { console.log(">>> requesting bi source code from ls", params); - return new Promise((resolve) => { - StateMachine.langClient() - .getSourceCode(params) - .then(async (model) => { - console.log(">>> bi source code from ls", model); - if (params?.isConnector) { - const artifacts = await updateSourceCode({ textEdits: model.textEdits, description: this.getSourceDescription(params) }); - resolve({ artifacts }); - } else { - const artifacts = await updateSourceCode({ textEdits: model.textEdits, artifactData: this.getArtifactDataFromNodeKind(params.flowNode.codedata.node), description: this.getSourceDescription(params)}, params.isHelperPaneChange); - resolve({ artifacts }); - } - }) - .catch((error) => { - console.log(">>> error fetching source code from ls", error); - return new Promise((resolve) => { - resolve({ artifacts: [], error: error }); - }); - }); - }); + try { + const model = await StateMachine.langClient().getSourceCode(params) as BISourceCodeResponse; + console.log(">>> bi source code from ls", model); + + if (model?.errorMsg) { + const errorMessage = model.errorMsg; + console.error(">>> error generating source code from ls", { errorMessage, stacktrace: model.stacktrace }); + window.showErrorMessage(`Failed to save changes: ${errorMessage}`); + return { artifacts: [], error: errorMessage }; + } + + if (!model?.textEdits) { + const errorMessage = "Failed to save changes: language server returned an empty source update."; + console.error(">>> invalid source code response from ls", model); + window.showErrorMessage(errorMessage); + return { artifacts: [], error: errorMessage }; + } + + if (params?.isConnector) { + const artifacts = await updateSourceCode({ textEdits: model.textEdits, description: this.getSourceDescription(params) }); + return { artifacts }; + } + + const nodeKind = params.flowNode.codedata.node; + const skipFormatting = nodeKind === 'DATA_MAPPER_CREATION' || nodeKind === 'FUNCTION_CREATION'; + const artifactData = params.artifactData || this.getArtifactDataFromNodeKind(nodeKind); + const artifacts = await updateSourceCode( + { textEdits: model.textEdits, artifactData, description: this.getSourceDescription(params) }, + params.isHelperPaneChange, + skipFormatting + ); + return { artifacts }; + } catch (error) { + console.log(">>> error fetching source code from ls", error); + const errorMessage = error instanceof Error ? error.message : String(error); + window.showErrorMessage(`Failed to save changes: ${errorMessage}`); + return { artifacts: [], error: errorMessage }; + } } private capitalizeFirstLetter(name: string): string { @@ -446,7 +520,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { return new Promise((resolve) => { const fileNameOrPath = params.filePath; let filePath = fileNameOrPath; - if (path.basename(fileNameOrPath) === fileNameOrPath) { + if (!path.isAbsolute(fileNameOrPath)) { filePath = path.join(StateMachine.context().projectPath, fileNameOrPath); } StateMachine.langClient() @@ -608,16 +682,16 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async createProject(params: ProjectRequest): Promise { if (params.createAsWorkspace) { - const workspaceRoot = createBIWorkspace(params); + const workspaceRoot = await createBIWorkspace(params); openInVSCode(workspaceRoot); } else { - const projectRoot = createBIProjectPure(params); + const projectRoot = await createBIProjectPure(params); openInVSCode(projectRoot); } } async validateProjectPath(params: ValidateProjectFormRequest): Promise { - return validateProjectPath(params.projectPath, params.projectName, params.createDirectory); + return validateProjectPath(params.projectPath, params.projectName, params.createDirectory, params.createAsWorkspace); } async deleteProject(params: DeleteProjectRequest): Promise { @@ -779,19 +853,8 @@ export class BiDiagramRpcManager implements BIDiagramAPI { // get next suggestion const copilot_token = await extension.context.secrets.get("GITHUB_COPILOT_TOKEN"); if (!copilot_token) { - let token: string; - const loginMethod = await getLoginMethod(); - if (loginMethod === LoginMethod.BI_INTEL) { - const credentials = await getAccessToken(); - const secrets = credentials.secrets as BIIntelSecrets; - token = secrets.accessToken; - } - if (!token) { - //TODO: Do we need to prompt to login here? If so what? Copilot or Ballerina AI? - resolve(undefined); - return; - } - suggestedContent = await this.getCompletionsWithHostedAI(token, copilotContext); + resolve(undefined); + return; } else { const resp = await getCompleteSuggestions({ prefix: copilotContext.prefix, @@ -877,31 +940,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { } async handleReadmeContent(params: ReadmeContentRequest): Promise { - return new Promise((resolve) => { - const projectPath = params.projectPath; - const readmePath = projectPath ? path.join(projectPath, README_FILE) : undefined; - if (!readmePath) { - resolve({ content: "" }); - return; - } - if (params.read) { - if (!fs.existsSync(readmePath)) { - resolve({ content: "" }); - } else { - const content = fs.readFileSync(readmePath, "utf8"); - console.log(">>> Read content:", content); - resolve({ content }); - } - } else { - if (!fs.existsSync(readmePath)) { - fs.writeFileSync(readmePath, params.content); - console.log(">>> Created and saved readme.md with content:", params.content); - } else { - fs.writeFileSync(readmePath, params.content); - console.log(">>> Updated readme.md with content:", params.content); - } - } - }); + return readOrWriteReadmeContent(params); } async getExpressionCompletions(params: ExpressionCompletionsRequest): Promise { @@ -938,7 +977,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { const projectPath = StateMachine.context().projectPath; const showLibraryConfigVariables = extension.ballerinaExtInstance.showLibraryConfigVariables(); - // if params includeLibraries is not set, then use settings + // if params includeLibraries is not set, then use settings const includeLibraries = params?.includeLibraries !== undefined ? params.includeLibraries : showLibraryConfigVariables !== false; @@ -971,7 +1010,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { // Create config.bal if it doesn't exist writeBallerinaFileDidOpen(params.configFilePath, "\n"); } - const response = await StateMachine.langClient().deleteConfigVariableV2(req) as BISourceCodeResponse; + const response = await StateMachine.langClient().deleteConfigVariableV2(req) as DeleteConfigVariableResponseV2; await updateSourceCode({ textEdits: response.textEdits, artifactData: { artifactType: DIRECTORY_MAP.CONFIGURABLE }, description: 'Config Variable Deletion' }); resolve(response); }); @@ -1049,7 +1088,6 @@ export class BiDiagramRpcManager implements BIDiagramAPI { } - async getReadmeContent(params: ReadmeContentRequest): Promise { return new Promise((resolve) => { const projectPath = params.projectPath; @@ -1104,34 +1142,82 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async deployProject(params: DeploymentRequest): Promise { const scopes = params.integrationTypes; - let integrationType: SCOPE; - - if (scopes.length === 1) { - integrationType = scopes[0]; - } else { - // Show a quick pick to select deployment option - const selectedScope = await window.showQuickPick(scopes, { - placeHolder: 'You have different types of artifacts within this integration. Select the artifact type to be deployed' - }); - integrationType = selectedScope as SCOPE; - } + const integrationType = await this.selectIntegrationType(scopes); if (!integrationType) { return { isCompleted: true }; } - const deployementParams: ICreateComponentCmdParams = { - integrationType: integrationType as any, - buildPackLang: "ballerina", // Example language - name: path.basename(StateMachine.context().projectPath), - componentDir: StateMachine.context().projectPath, - extName: "Devant" + const deploymentParams: ICreateNewIntegrationCmdParams = { + buildPackLang:"ballerina", + integrations:[{ fsPath: StateMachine.context().projectPath, supportedIntegrationTypes: [integrationType] }], + workspaceDir: StateMachine.context().workspacePath || StateMachine.context().projectPath, }; - commands.executeCommand(PlatformExtCommandIds.CreateNewComponent, deployementParams); + await commands.executeCommand(WICommandIds.CreateNewComponent, deploymentParams); return { isCompleted: true }; } + async deployWorkspace(params: WorkspaceDeploymentRequest): Promise { + const projectScopes = params.projectScopes; + if (!projectScopes?.length) { + window.showWarningMessage("No deployable projects found in the workspace."); + return { isCompleted: true }; + } + const deploymentParams: ICreateNewIntegrationCmdIntegrations[]= []; + + // If there is only one project in the workspace and it has multiple integration types, + // ask the user to pick the type similar to the single project deploy flow. + if (projectScopes.length === 1) { + const { projectPath, integrationTypes } = projectScopes[0]; + + const integrationType = await this.selectIntegrationType(integrationTypes); + + if (!integrationType) { + return { isCompleted: true }; + } + + deploymentParams.push({fsPath: projectPath, supportedIntegrationTypes: [integrationType] }); + } else { + for (const projectScope of projectScopes) { + const { projectPath, integrationTypes } = projectScope; + if (!integrationTypes?.length) { + window.showWarningMessage(`No integration types found for ${path.basename(projectPath)}.`); + continue; + } + + deploymentParams.push({fsPath: projectPath, supportedIntegrationTypes: integrationTypes }); + } + } + + if (deploymentParams.length === 0) { + return { isCompleted: true }; + } + + await commands.executeCommand( + WICommandIds.CreateNewComponent, + deploymentParams, + params.rootDirectory + ); + return { isCompleted: true }; + } + + private async selectIntegrationType(integrationTypes: SCOPE[]): Promise { + if (!integrationTypes || integrationTypes.length === 0) { + return undefined; + } + + if (integrationTypes.length === 1) { + return integrationTypes[0]; + } + + const selectedScope = await window.showQuickPick(integrationTypes, { + placeHolder: 'You have different types of artifacts within this integration. Select the artifact type to be deployed' + }); + + return selectedScope as SCOPE; + } + openAIChat(params: AIChatRequest): void { if (params.readme) { openAIPanelWithPrompt({ @@ -1325,6 +1411,15 @@ export class BiDiagramRpcManager implements BIDiagramAPI { }); }; + if (params.nodeType === "connection-node") { + // If its a Devant connection, need to delete it from Devant backend as well + await new PlatformExtRpcManager().deleteBiDevantConnection({ + filePath: params.filePath, + ...params.component + }); + } + + // If there are diagnostics, remove unused imports first, then delete component if (projectDiags.length > 0) { return new Promise((resolve, reject) => { @@ -1441,9 +1536,15 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async getEnclosedFunction(params: BIGetEnclosedFunctionRequest): Promise { console.log(">>> requesting parent functin definition", params); + // When useFileSchema is set, map temp path to original project path + let filePath = params.filePath; + if (params.useFileSchema) { + filePath = this.mapTempPathToOriginal(filePath); + } + const request = { filePath, position: params.position, findClass: params.findClass }; return new Promise((resolve) => { StateMachine.langClient() - .getEnclosedFunctionDef(params) + .getEnclosedFunctionDef(request) .then((response) => { if (response?.filePath && response?.startLine && response?.endLine) { console.log(">>> parent function position ", response); @@ -1464,6 +1565,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async formDidOpen(params: FormDidOpenParams): Promise { return new Promise(async (resolve, reject) => { const { filePath } = params; + registerFormOpen(filePath); const fileUri = Uri.file(filePath); const exprFileSchema = fileUri.with({ scheme: 'expr' }); @@ -1497,6 +1599,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { return new Promise(async (resolve, reject) => { try { const { filePath } = params; + registerFormClose(filePath); const fileUri = Uri.file(filePath); const exprFileSchema = fileUri.with({ scheme: 'expr' }); StateMachine.langClient().didClose({ @@ -1517,8 +1620,13 @@ export class BiDiagramRpcManager implements BIDiagramAPI { return new Promise((resolve) => { let projectPath: string; if (params?.projectPath) { - const uri = Uri.file(params.projectPath); - projectPath = uri.with({ scheme: 'ai' }).toString(); + if (params.useFileSchema) { + // Map temp project path to original project raw path + projectPath = this.mapTempPathToOriginal(params.projectPath); + } else { + const uri = Uri.file(params.projectPath); + projectPath = uri.with({ scheme: 'ai' }).toString(); + } } else { projectPath = StateMachine.context().projectPath; } @@ -1543,7 +1651,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async getTypes(params: GetTypesRequest): Promise { let filePath = params.filePath; - if (!filePath && StateMachine.context()?.projectPath){ + if (!filePath && StateMachine.context()?.projectPath) { const projectPath = StateMachine.context().projectPath; const ballerinaFiles = await getBallerinaFiles(Uri.file(projectPath).fsPath); filePath = ballerinaFiles.at(0); @@ -1555,6 +1663,11 @@ export class BiDiagramRpcManager implements BIDiagramAPI { }); } + // When useFileSchema is set, map temp path to original project path + if (params.useFileSchema) { + filePath = this.mapTempPathToOriginal(filePath); + } + return new Promise((resolve, reject) => { StateMachine.langClient() .getTypes({ filePath }) @@ -1600,6 +1713,21 @@ export class BiDiagramRpcManager implements BIDiagramAPI { }); } + async getSimpleTypeOfExpression(params: GetSimpleTypeOfExpressionRequest): Promise { + return new Promise((resolve, reject) => { + StateMachine.langClient() + .getSimpleTypeOfExpression(params) + .then((type) => { + console.log(">>> simple type from ls", type); + resolve(type); + }) + .catch((error) => { + console.log(">>> error fetching simple type from ls", error); + reject(error); + }); + }); + } + async updateImports(params: UpdateImportsRequest): Promise { return new Promise((resolve, reject) => { StateMachine.langClient() @@ -1847,11 +1975,14 @@ export class BiDiagramRpcManager implements BIDiagramAPI { } } - const platformExt = extensions.getExtension("wso2.wso2-platform"); + const platformExt = extensions.getExtension(WI_EXTENSION_ID); if (!platformExt) { return { hasComponent: hasContextYaml, isLoggedIn: false }; } - const platformExtAPI: IWso2PlatformExtensionAPI = await platformExt.activate(); + if (!platformExt.isActive) { + await platformExt.activate(); + } + const platformExtAPI: IWso2PlatformExtensionAPI = platformExt.exports?.cloudAPIs; hasLocalChanges = await platformExtAPI.localRepoHasChanges(projectPath); isLoggedIn = platformExtAPI.isLoggedIn(); if (isLoggedIn) { @@ -1866,6 +1997,89 @@ export class BiDiagramRpcManager implements BIDiagramAPI { } } + async getWorkspaceDevantMetadata(): Promise { + let isLoggedIn = false; + let hasAnyComponent = false; + let hasLocalChanges = false; + const projectsMetadata: ProjectDevantMetadata[] = []; + + try { + // Get workspace structure + const workspaceStructure = await this.getProjectStructure(); + if (!workspaceStructure || !workspaceStructure.workspacePath) { + return { isLoggedIn: false, hasAnyComponent: false, hasLocalChanges: false }; + } + + const repoRoot = getRepoRoot(workspaceStructure.workspacePath); + if (!repoRoot) { + return { isLoggedIn: false, hasAnyComponent: false, hasLocalChanges: false }; + } + + const platformExt = extensions.getExtension(WI_EXTENSION_ID); + if (!platformExt) { + // Check for context.yaml as fallback + const contextYamlPath = path.join(repoRoot, ".choreo", "context.yaml"); + const hasContextYaml = fs.existsSync(contextYamlPath); + return { + isLoggedIn: false, + hasAnyComponent: hasContextYaml, + hasLocalChanges: false + }; + } + + if (!platformExt.isActive) { + await platformExt.activate(); + } + const platformExtAPI: IWso2PlatformExtensionAPI = platformExt.exports?.cloudAPIs; + isLoggedIn = platformExtAPI.isLoggedIn(); + hasLocalChanges = await platformExtAPI.localRepoHasChanges(repoRoot); + + // Check each project in the workspace + for (const project of workspaceStructure.projects) { + const projectPath = project.projectPath; + const projectName = project.projectTitle || project.projectName; + + let projectHasComponent = false; + let projectHasLocalChanges = false; + + if (isLoggedIn) { + const components = platformExtAPI.getDirectoryComponents(projectPath); + projectHasComponent = components.length > 0; + if (projectHasComponent) { + hasAnyComponent = true; + // Only check local changes for deployed projects + projectHasLocalChanges = await platformExtAPI.localRepoHasChanges(projectPath); + } + } + + projectsMetadata.push({ + projectPath, + projectName, + hasComponent: projectHasComponent, + hasLocalChanges: projectHasLocalChanges + }); + } + + // If not logged in, check for context.yaml as fallback + if (!isLoggedIn) { + const contextYamlPath = path.join(repoRoot, ".choreo", "context.yaml"); + if (fs.existsSync(contextYamlPath)) { + hasAnyComponent = true; + } + } + + return { + isLoggedIn, + hasAnyComponent, + hasLocalChanges, + projectsMetadata + }; + } catch (err) { + console.error("failed to call getWorkspaceDevantMetadata: ", err); + return { isLoggedIn, hasAnyComponent, hasLocalChanges }; + } + } + async getRecordConfig(params: GetRecordConfigRequest): Promise { return new Promise((resolve, reject) => { StateMachine.langClient().getRecordConfig(params).then((res) => { @@ -1956,14 +2170,10 @@ export class BiDiagramRpcManager implements BIDiagramAPI { } async generateOpenApiClient(params: OpenAPIClientGenerationRequest): Promise { - return new Promise((resolve, reject) => { - const projectPath = StateMachine.context().projectPath; - const request: OpenAPIClientGenerationRequest = { - openApiContractPath: params.openApiContractPath, - projectPath: projectPath, - module: params.module - }; - StateMachine.langClient().openApiGenerateClient(request).then(async (res) => { + return new Promise(async (resolve, reject) => { + try { + const res = await StateMachine.langClient().openApiGenerateClient(params); + if (!res.source || !res.source.textEditsMap) { console.error("textEditsMap is undefined or null"); reject(new Error("textEditsMap is undefined or null")); @@ -1985,13 +2195,35 @@ export class BiDiagramRpcManager implements BIDiagramAPI { skipPayloadCheck: true }); console.log(">>> Applied text edits for openapi client"); + + // check if params.openApiContractPath is within the project path + if (params.openApiContractPath.startsWith(params.projectPath)) { + const updatedSpecPath = params.openApiContractPath.replace(params.projectPath, '.'); + // Replace the file path of the openapi spec to be relative path in the toml + const tomlValues = await new CommonRpcManager().getCurrentProjectTomlValues(); + const updatedToml: Partial = { + ...tomlValues, + tool: { + ...tomlValues?.tool, + openapi: tomlValues.tool?.openapi?.map((item) => { + if (item.id === params.module) { + return { ...item, filePath: updatedSpecPath }; + } + return item; + }), + }, + }; + const balTomlPath = path.join(params.projectPath, "Ballerina.toml"); + const updatedTomlContent = toml.stringify(JSON.parse(JSON.stringify(updatedToml))); + fs.writeFileSync(balTomlPath, updatedTomlContent, "utf-8"); + } } resolve({}); - }).catch((error) => { + } catch (error) { console.log(">>> error generating openapi client", error); reject(error); - }); + } }); } @@ -2109,19 +2341,21 @@ export class BiDiagramRpcManager implements BIDiagramAPI { }); } -} - -export function getRepoRoot(projectRoot: string): string | undefined { - // traverse up the directory tree until .git directory is found - const gitDir = path.join(projectRoot, ".git"); - if (fs.existsSync(gitDir)) { - return projectRoot; - } - // path is root return undefined - if (projectRoot === path.parse(projectRoot).root) { - return undefined; + async getAvailableAgents(params: BIAvailableNodesRequest): Promise { + console.log(">>> requesting bi available agents from ls", params); + return new Promise((resolve) => { + StateMachine.langClient() + .getAvailableAgents(params) + .then((model) => { + console.log(">>> bi available agents from ls", model); + resolve(model); + }) + .catch((error) => { + console.log(">>> error fetching available agents from ls", error); + resolve(undefined); + }); + }); } - return getRepoRoot(path.join(projectRoot, "..")); } export async function getBallerinaFiles(dir: string): Promise { diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/utils.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/utils.ts index d87771e59b8..76f044e2f3b 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/utils.ts @@ -16,12 +16,15 @@ * under the License. */ -import { NodeProperties } from "@wso2/ballerina-core"; +import { NodeProperties, ReadmeContentRequest, ReadmeContentResponse } from "@wso2/ballerina-core"; import { NodePosition, STNode, traversNode } from "@wso2/syntax-tree"; +import { TextEdit } from "@wso2/ballerina-core"; +import { Position, Range, Uri, workspace, WorkspaceEdit } from "vscode"; +import * as fs from "fs"; +import * as path from 'path'; import { FunctionFindingVisitor } from "../../utils/function-finding-visitor"; -import { Position, Range, Uri, workspace, WorkspaceEdit } from "vscode"; -import { TextEdit } from "@wso2/ballerina-core"; +import { README_FILE } from "../../utils/bi"; export const DATA_MAPPING_FILE_NAME = "data_mappings.bal"; @@ -114,4 +117,58 @@ function findHeaderCommentEndLine(content: string): number { } return headerEndLine; -} \ No newline at end of file +} + +/** + * Resolves the path to the project's README file using case-insensitive matching. + * On case-sensitive filesystems, finds "readme.md", "Readme.md", "README.md", etc. + * @param projectPath - Absolute path to the project directory + * @returns Full path to the existing README file, or undefined if not found + */ +export function resolveReadmePath(projectPath: string): string | undefined { + try { + const entries = fs.readdirSync(projectPath, { withFileTypes: true }); + const match = entries.find( + (e) => e.isFile() && e.name.toLowerCase() === README_FILE.toLowerCase() + ); + return match ? path.join(projectPath, match.name) : undefined; + } catch { + return undefined; + } +} + +/** + * Reads or writes the project's README.md file. + * When `params.read` is true, reads the file at `{projectPath}/README.md` (or any case variant + * such as readme.md) and returns its content. If the file does not exist, returns an empty string. + * When `params.read` is false, writes `params.content` to the README file (creating it if missing + * as README.md) and returns the written content. + * @param params - Request containing `projectPath`, and either `read: true` for read mode + * or `content` for write mode. + * @returns A promise that resolves with `{ content: string }` — the read or written content. + */ +export async function readOrWriteReadmeContent(params: ReadmeContentRequest): Promise { + const projectPath = params.projectPath; + if (!projectPath) { + return { content: "" }; + } + const canonicalPath = path.join(projectPath, README_FILE); + const existingReadmePath = resolveReadmePath(projectPath); + const readmePath = existingReadmePath ?? canonicalPath; + + if (params.read) { + if (!existingReadmePath) { + return { content: "" }; + } + const content = fs.readFileSync(readmePath, "utf8"); + return { content }; + } + + const contentToWrite = params.content ?? ""; + if (!existingReadmePath) { + fs.writeFileSync(canonicalPath, contentToWrite); + } else { + fs.writeFileSync(readmePath, contentToWrite); + } + return { content: contentToWrite }; +} diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-handler.ts index f618654ce4d..1cd026337fb 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-handler.ts @@ -19,30 +19,41 @@ */ import { BallerinaDiagnosticsRequest, + ClearWebviewCache, CommandsRequest, + FileOrDirRequest, + GoToSourceRequest, + OpenExternalUrlRequest, + RestoreWebviewCache, + RunExternalCommandRequest, + SetWebviewCache, + SetWebviewCacheRequestParam, + ShowErrorMessageRequest, + showInformationModal, + WorkspaceFileRequest, downloadSelectedSampleFromGithub, executeCommand, experimentalEnabled, - FileOrDirRequest, getBallerinaDiagnostics, getCurrentProjectTomlValues, + getDefaultOrgName, getTypeCompletions, getWorkspaceFiles, getWorkspaceRoot, getWorkspaceType, goToSource, - GoToSourceRequest, + hasCentralPATConfigured, isNPSupported, openExternalUrl, - OpenExternalUrlRequest, + publishToCentral, runBackgroundTerminalCommand, - RunExternalCommandRequest, SampleDownloadRequest, selectFileOrDirPath, selectFileOrFolderPath, showErrorMessage, - ShowErrorMessageRequest, - WorkspaceFileRequest + ShowInfoModalRequest, + showQuickPick, + ShowQuickPickRequest } from "@wso2/ballerina-core"; import { Messenger } from "vscode-messenger"; import { CommonRpcManager } from "./rpc-manager"; @@ -62,7 +73,15 @@ export function registerCommonRpcHandlers(messenger: Messenger) { messenger.onRequest(isNPSupported, () => rpcManger.isNPSupported()); messenger.onRequest(getWorkspaceRoot, () => rpcManger.getWorkspaceRoot()); messenger.onNotification(showErrorMessage, (args: ShowErrorMessageRequest) => rpcManger.showErrorMessage(args)); + messenger.onRequest(showInformationModal, (params: ShowInfoModalRequest) => rpcManger.showInformationModal(params)); + messenger.onRequest(showQuickPick, (params: ShowQuickPickRequest) => rpcManger.showQuickPick(params)); messenger.onRequest(getCurrentProjectTomlValues, () => rpcManger.getCurrentProjectTomlValues()); messenger.onRequest(getWorkspaceType, () => rpcManger.getWorkspaceType()); + messenger.onRequest(SetWebviewCache, (params: SetWebviewCacheRequestParam) => rpcManger.setWebviewCache(params)); + messenger.onRequest(RestoreWebviewCache, (params: string) => rpcManger.restoreWebviewCache(params)); + messenger.onRequest(ClearWebviewCache, (params: string) => rpcManger.clearWebviewCache(params)); messenger.onRequest(downloadSelectedSampleFromGithub, (args: SampleDownloadRequest) => rpcManger.downloadSelectedSampleFromGithub(args)); + messenger.onRequest(getDefaultOrgName, () => rpcManger.getDefaultOrgName()); + messenger.onRequest(publishToCentral, () => rpcManger.publishToCentral()); + messenger.onRequest(hasCentralPATConfigured, () => rpcManger.hasCentralPATConfigured()); } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-manager.ts index 9dc94adda13..6121d56b860 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-manager.ts @@ -26,44 +26,59 @@ import { CommonRPCAPI, Completion, CompletionParams, + DefaultOrgNameResponse, DiagnosticData, FileOrDirRequest, FileOrDirResponse, GoToSourceRequest, OpenExternalUrlRequest, PackageTomlValues, + PublishToCentralResponse, RunExternalCommandRequest, RunExternalCommandResponse, SampleDownloadRequest, + SettingsTomlValues, ShowErrorMessageRequest, SyntaxTree, TypeResponse, WorkspaceFileRequest, WorkspaceRootResponse, WorkspacesFileResponse, - WorkspaceTypeResponse + WorkspaceTypeResponse, + SetWebviewCacheRequestParam, + ShowInfoModalRequest, + ShowQuickPickRequest, } from "@wso2/ballerina-core"; import child_process from 'child_process'; import path from "path"; import os from "os"; import fs from "fs"; import * as unzipper from 'unzipper'; -import { commands, env, MarkdownString, ProgressLocation, Uri, window, workspace } from "vscode"; +import { commands, env, MarkdownString, ProgressLocation, QuickPickItem, Uri, window, workspace } from "vscode"; import { URI } from "vscode-uri"; +import { parse } from "@iarna/toml"; import { extension } from "../../BalExtensionContext"; import { StateMachine } from "../../stateMachine"; import { getProjectTomlValues, goToSource } from "../../utils"; +import { getUsername } from "../../utils/bi"; import { askFileOrFolderPath, askFilePath, askProjectPath, BALLERINA_INTEGRATOR_ISSUES_URL, findWorkspaceTypeFromWorkspaceFolders, + getFirstBalaPath, + getPublishDescriptionInfo, + getPublishConfirmation, + PublishPackageInfo, + getTargetProjectForPublish, getUpdatedSource, handleDownloadFile, + handlePublishDescriptionSetup, + openPublishDescriptionInEditor, selectSampleDownloadPath } from "./utils"; import { VisualizerWebview } from "../../views/visualizer/webview"; @@ -190,6 +205,28 @@ export class CommonRpcManager implements CommonRPCAPI { resolve({ path: "" }); } else { const filePath = selectedFile[0].fsPath; + const projectPath = StateMachine.context().projectPath; + if (projectPath && !filePath.startsWith(projectPath)) { + const resp = await window.showErrorMessage('The selected file is not within your project. Do you want to move it inside the project?', { modal: true }, 'Yes'); + if (resp === 'Yes') { + // Move the file inside the project + const fileName = path.basename(filePath); + const newFilePath = path.join(projectPath, fileName); + // if newFilePath already exists, append a number to the file name + let counter = 1; + let finalFilePath = newFilePath; + while (fs.existsSync(finalFilePath)) { + const parsedPath = path.parse(newFilePath); + finalFilePath = path.join(parsedPath.dir, `${parsedPath.name}-${counter}${parsedPath.ext}`); + counter++; + } + fs.copyFileSync(filePath, finalFilePath); + resolve({ path: finalFilePath }); + return; + } + resolve({ path: "" }); + return; + } resolve({ path: filePath }); } } else { @@ -258,13 +295,21 @@ export class CommonRpcManager implements CommonRPCAPI { window.showErrorMessage(messageWithLink.value); } + async showInformationModal(params: ShowInfoModalRequest): Promise { + return window.showInformationMessage(params?.message, {modal: true}, ...(params?.items || [])); + } + + async showQuickPick(params: ShowQuickPickRequest): Promise { + return window.showQuickPick(params.items, params?.options); + } + async isNPSupported(): Promise { return extension.ballerinaExtInstance.isNPSupported; } async getCurrentProjectTomlValues(): Promise> { const tomlValues = await getProjectTomlValues(StateMachine.context().projectPath); - return tomlValues ?? {}; + return tomlValues ?? {}; } async getWorkspaceType(): Promise { @@ -415,4 +460,297 @@ export class CommonRpcManager implements CommonRPCAPI { } return isSuccess; } + + async setWebviewCache(params: SetWebviewCacheRequestParam): Promise { + await extension.context.workspaceState.update(params.cacheKey, params.data); + } + + async restoreWebviewCache(cacheKey: string): Promise { + return extension.context.workspaceState.get(cacheKey); + } + + async clearWebviewCache(cacheKey: string): Promise { + await extension.context.workspaceState.update(cacheKey, undefined); + } + + async getDefaultOrgName(): Promise { + return { orgName: getUsername() }; + } + + async publishToCentral(): Promise { + const failResponse = (): PublishToCentralResponse => ({ success: false, message: '' }); + + const project = getTargetProjectForPublish(); + if (!project) { + return failResponse(); + } + + const { projectPath, projectName, artifactType } = project; + let packageInfo = await this.getPublishPackageInfo(projectPath, projectName); + + while (true) { + const descriptionInfo = await getPublishDescriptionInfo(projectPath); + const confirmation = getPublishConfirmation(projectName, artifactType, descriptionInfo, packageInfo); + const actionButtons = ['Edit Package Details']; + if (descriptionInfo.status !== 'missing') { + actionButtons.push('Open Description File'); + } + + const selectedAction = await window.showInformationMessage( + confirmation.message, + { modal: true }, + confirmation.primaryButton, + ...actionButtons + ); + + if (!selectedAction) { + return failResponse(); + } + + if (selectedAction === 'Edit Package Details') { + const updatedDetails = await this.promptForPublishPackageInfo(packageInfo); + if (!updatedDetails) { + continue; + } + + const updated = await this.updateProjectPackageInfo(projectPath, updatedDetails); + if (!updated) { + window.showErrorMessage('Failed to update package details in Ballerina.toml'); + return failResponse(); + } + + packageInfo = updatedDetails; + continue; + } + + if (selectedAction === 'Open Description File') { + await openPublishDescriptionInEditor(descriptionInfo); + continue; + } + + const descriptionHandled = await handlePublishDescriptionSetup(descriptionInfo, projectPath, projectName, artifactType); + if (descriptionHandled) { + return failResponse(); + } + + break; + } + + const result = await this.packAndPushToCentral(projectPath); + this.showPublishResult(result); + return result; + } + + private async getPublishPackageInfo(projectPath: string, fallbackName: string): Promise { + const tomlValues = await getProjectTomlValues(projectPath); + return { + orgName: tomlValues?.package?.org ?? getUsername(), + packageName: tomlValues?.package?.name ?? fallbackName, + version: tomlValues?.package?.version ?? '0.1.0' + }; + } + + private async promptForPublishPackageInfo(current: PublishPackageInfo): Promise { + const orgName = await window.showInputBox({ + title: 'Edit Package Details', + prompt: 'Organization name', + value: current.orgName, + ignoreFocusOut: true, + validateInput: (value) => value.trim() ? undefined : 'Organization name is required' + }); + if (orgName === undefined) { + return undefined; + } + + const packageName = await window.showInputBox({ + title: 'Edit Package Details', + prompt: 'Package name', + value: current.packageName, + ignoreFocusOut: true, + validateInput: (value) => value.trim() ? undefined : 'Package name is required' + }); + if (packageName === undefined) { + return undefined; + } + + const version = await window.showInputBox({ + title: 'Edit Package Version', + prompt: 'Version', + value: current.version, + ignoreFocusOut: true, + validateInput: (value) => value.trim() ? undefined : 'Version is required' + }); + if (version === undefined) { + return undefined; + } + + return { + orgName: orgName.trim(), + packageName: packageName.trim(), + version: version.trim() + }; + } + + private async updateProjectPackageInfo(projectPath: string, details: PublishPackageInfo): Promise { + const ballerinaTomlPath = path.join(projectPath, 'Ballerina.toml'); + if (!fs.existsSync(ballerinaTomlPath)) { + return false; + } + + try { + const tomlContent = await fs.promises.readFile(ballerinaTomlPath, 'utf-8'); + const packageSection = this.getPackageSectionBoundaries(tomlContent); + const updatedPackageSection = this.upsertPackageFields( + packageSection.content, + details + ); + + const updatedToml = tomlContent.slice(0, packageSection.start) + + updatedPackageSection + + tomlContent.slice(packageSection.end); + + await fs.promises.writeFile(ballerinaTomlPath, updatedToml, 'utf-8'); + return true; + } catch (error) { + console.error('Failed to update Ballerina.toml package metadata:', error); + return false; + } + } + + private getPackageSectionBoundaries(content: string): { content: string; start: number; end: number } { + const packageHeaderRegex = /^\s*\[package\]\s*$/m; + const packageHeaderMatch = packageHeaderRegex.exec(content); + + if (!packageHeaderMatch || packageHeaderMatch.index === undefined) { + const start = content.length; + const prefix = content.endsWith('\n') || content.length === 0 ? '' : '\n'; + return { + content: `${prefix}[package]\n`, + start, + end: start + }; + } + + const sectionStart = packageHeaderMatch.index; + const nextSectionRegex = /^\s*\[[^\]]+\]\s*$/gm; + nextSectionRegex.lastIndex = sectionStart + packageHeaderMatch[0].length; + const nextSectionMatch = nextSectionRegex.exec(content); + const sectionEnd = nextSectionMatch ? nextSectionMatch.index : content.length; + + return { + content: content.slice(sectionStart, sectionEnd), + start: sectionStart, + end: sectionEnd + }; + } + + private upsertPackageFields(packageSection: string, details: PublishPackageInfo): string { + let updatedSection = packageSection; + updatedSection = this.upsertTomlField(updatedSection, 'org', details.orgName); + updatedSection = this.upsertTomlField(updatedSection, 'name', details.packageName); + updatedSection = this.upsertTomlField(updatedSection, 'version', details.version); + if (!updatedSection.endsWith('\n')) { + updatedSection = `${updatedSection}\n`; + } + return updatedSection; + } + + private upsertTomlField(section: string, fieldName: string, fieldValue: string): string { + const escapedValue = fieldValue.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); + const escapedFieldName = fieldName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const fieldRegex = new RegExp(`^\\s*${escapedFieldName}\\s*=\\s*.*$`, 'm'); + const fieldLine = `${fieldName} = "${escapedValue}"`; + + if (fieldRegex.test(section)) { + return section.replace(fieldRegex, fieldLine); + } + + const headerLineBreak = section.indexOf('\n'); + if (headerLineBreak === -1) { + return `${section}\n${fieldLine}\n`; + } + + return section.slice(0, headerLineBreak + 1) + + `${fieldLine}\n` + + section.slice(headerLineBreak + 1); + } + + private async packAndPushToCentral(projectPath: string): Promise { + const result: PublishToCentralResponse = { success: false, message: '' }; + + await window.withProgress( + { + location: ProgressLocation.Notification, + title: 'Publishing project to Ballerina Central', + cancellable: false + }, + async (progress) => { + try { + progress.report({ message: 'Packing...' }); + const packResult = await this.runPackCommand(projectPath); + if (packResult.error) { + result.message = packResult.message ?? ''; + return; + } + + progress.report({ message: 'Publishing...' }); + const balaFilePath = getFirstBalaPath(projectPath); + if (!balaFilePath) { + result.message = 'No publishable artifact found at the target/bala directory'; + return; + } + + const pushResult = await this.runPushCommand(balaFilePath); + if (pushResult.error) { + result.message = pushResult.message ?? ''; + return; + } + result.success = true; + } catch (error) { + console.error('Failed to publish project to Ballerina Central:', error); + } + } + ); + + return result; + } + + private async runPackCommand(projectPath: string): Promise { + return this.runBackgroundTerminalCommand({ command: `bal pack "${projectPath}"` }); + } + + private async runPushCommand(balaFilePath: string): Promise { + return this.runBackgroundTerminalCommand({ command: `bal push "${balaFilePath}"` }); + } + + private showPublishResult(result: PublishToCentralResponse): void { + if (result.success) { + window.showInformationMessage('Project published to ballerina central successfully'); + } else { + window.showErrorMessage(result.message || 'Failed to publish project to Ballerina Central'); + } + } + + async hasCentralPATConfigured(): Promise { + // check if the central PAT is configured in the environment variable + const token = process.env.BALLERINA_CENTRAL_ACCESS_TOKEN; + if (token !== undefined && token !== '') { + return true; + } + + // check if the central PAT is configured in the settings.toml + const settingsTomlFilePath = path.join(os.homedir(), '.ballerina', 'settings.toml'); + if (fs.existsSync(settingsTomlFilePath)) { + const tomlContent = await fs.promises.readFile(settingsTomlFilePath, 'utf-8'); + try { + const tomlValues = parse(tomlContent) as Partial; + const token = tomlValues.central?.accesstoken; + return token !== undefined && token !== ''; + } catch (error) { + return false; + } + } + + return false; + } } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/utils.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/utils.ts index d8505f53153..7f0632f0b27 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/utils.ts @@ -18,18 +18,24 @@ import * as os from 'os'; import { NodePosition } from "@wso2/syntax-tree"; -import { Position, Progress, Range, Uri, window, workspace, WorkspaceEdit } from "vscode"; +import { StateMachine } from "../../stateMachine"; +import { Position, Progress, Range, Uri, ViewColumn, window, workspace, WorkspaceEdit } from "vscode"; import { PROJECT_KIND, ProjectInfo, TextEdit, WorkspaceTypeResponse } from "@wso2/ballerina-core"; import axios from 'axios'; import fs from 'fs'; +import * as path from 'path'; + import { checkIsBallerinaPackage, checkIsBallerinaWorkspace, getBallerinaPackages, hasMultipleBallerinaPackages } from '../../utils'; +import { readOrWriteReadmeContent, resolveReadmePath } from '../bi-diagram/utils'; +import { README_FILE } from '../../utils/bi'; export const BALLERINA_INTEGRATOR_ISSUES_URL = "https://github.com/wso2/product-ballerina-integrator/issues"; +const PACKAGE_FILE = "PACKAGE.md"; interface ProgressMessage { message: string; @@ -90,7 +96,7 @@ export async function askFilePath() { canSelectFiles: true, canSelectFolders: false, canSelectMany: false, - defaultUri: Uri.file(os.homedir()), + defaultUri: Uri.file(StateMachine.context().projectPath ?? os.homedir()), filters: { 'Files': ['yaml', 'json', 'yml', 'graphql', 'wsdl'] }, @@ -250,3 +256,167 @@ export async function findWorkspaceTypeFromWorkspaceFolders(): Promise p.projectPath === projectPath); + if (!target) { + return null; + } + const projectName = target.projectTitle || target.projectName; + const artifactType = target.isLibrary ? 'library' : 'integration'; + return { projectPath, projectName, artifactType }; +} + +export type PublishDescriptionStatus = 'missing' | 'empty' | 'ready'; + +export interface PublishDescriptionInfo { + status: PublishDescriptionStatus; + activeDocPath: string; + activeDocName: string; +} + +export interface PublishPackageInfo { + orgName: string; + packageName: string; + version: string; +} + +export async function getPublishDescriptionInfo(projectPath: string): Promise { + const readmePath = resolveReadmePath(projectPath); + const packagePath = resolveDocPath(projectPath, PACKAGE_FILE); + + const readmeContent = readmePath ? readFileContent(readmePath) : undefined; + const packageContent = packagePath ? readFileContent(packagePath) : undefined; + + const hasReadyDescription = [readmeContent, packageContent].some((content) => hasNonEmptyContent(content)); + if (hasReadyDescription) { + const activeDocPath = hasNonEmptyContent(readmeContent) && readmePath + ? readmePath + : hasNonEmptyContent(packageContent) && packagePath + ? packagePath + : path.join(projectPath, README_FILE); + return { + status: 'ready', + activeDocPath, + activeDocName: path.basename(activeDocPath) + }; + } + + const hasAnyDescriptionFile = readmePath !== undefined || packagePath !== undefined; + if (hasAnyDescriptionFile) { + const activeDocPath = readmePath ?? packagePath ?? path.join(projectPath, README_FILE); + return { + status: 'empty', + activeDocPath, + activeDocName: path.basename(activeDocPath) + }; + } + + return { + status: 'missing', + activeDocPath: path.join(projectPath, README_FILE), + activeDocName: README_FILE + }; +} + +export function getPublishConfirmation( + projectName: string, + artifactType: string, + descriptionInfo: PublishDescriptionInfo, + packageInfo: PublishPackageInfo +): { message: string; primaryButton: string } { + const packageDetails = [ + `Organization: ${packageInfo.orgName || ''}`, + `Package: ${packageInfo.packageName || ''}`, + `Version: ${packageInfo.version || ''}`, + `Description file: ${descriptionInfo.activeDocName}` + ].join('\n'); + + if (descriptionInfo.status === 'missing') { + return { + message: `Publish "${projectName}" to Ballerina Central\n\n${packageDetails}\n\nA non-empty README.md file is required before publishing.`, + primaryButton: 'Create Description File' + }; + } + if (descriptionInfo.status === 'empty') { + return { + message: `Publish "${projectName}" to Ballerina Central\n\n${packageDetails}\n\nThe detected description file is empty. Please add a description for your ${artifactType}.`, + primaryButton: 'Edit Description File' + }; + } + return { + message: `Publish "${projectName}" to Ballerina Central\n\n${packageDetails}\n\nYour ${artifactType} will be made available to the Ballerina community.`, + primaryButton: 'Publish to Central' + }; +} + + +export async function handlePublishDescriptionSetup( + descriptionInfo: PublishDescriptionInfo, + projectPath: string, + projectName: string, + artifactType: string +): Promise { + if (descriptionInfo.status === 'missing') { + const content = `# ${projectName} ${artifactType}\n\nAdd your ${artifactType} description here.`; + await readOrWriteReadmeContent({ projectPath, content, read: false }); + await openDescriptionInEditor(path.join(projectPath, README_FILE)); + return true; + } + if (descriptionInfo.status === 'empty') { + await openDescriptionInEditor(descriptionInfo.activeDocPath); + return true; + } + return false; +} + +export async function openPublishDescriptionInEditor(descriptionInfo: PublishDescriptionInfo): Promise { + await openDescriptionInEditor(descriptionInfo.activeDocPath); +} + +async function openDescriptionInEditor(docPath: string): Promise { + try { + const doc = await workspace.openTextDocument(docPath); + await window.showTextDocument(doc, ViewColumn.Beside); + } catch (error) { + window.showErrorMessage(`Failed to open description file "${docPath}": ${error}`); + } +} + +export function getFirstBalaPath(projectPath: string): string | null { + const balaDirPath = path.join(projectPath, 'target', 'bala'); + if (!fs.existsSync(balaDirPath)) { + return null; + } + const files = fs.readdirSync(balaDirPath); + return files.length > 0 ? path.join(balaDirPath, files[0]) : null; +} + +function resolveDocPath(projectPath: string, fileName: string): string | undefined { + try { + const entries = fs.readdirSync(projectPath, { withFileTypes: true }); + const match = entries.find( + (entry) => entry.isFile() && entry.name.toLowerCase() === fileName.toLowerCase() + ); + return match ? path.join(projectPath, match.name) : undefined; + } catch { + return undefined; + } +} + +function readFileContent(filePath: string): string { + try { + return fs.readFileSync(filePath, 'utf8'); + } catch { + return ''; + } +} + +function hasNonEmptyContent(content: string | undefined): boolean { + return content !== undefined && content.trim() !== ''; +} diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/connector-wizard/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/connector-wizard/rpc-handler.ts index 9c6bfb19ba6..4758a0841c7 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/connector-wizard/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/connector-wizard/rpc-handler.ts @@ -23,6 +23,8 @@ import { generateWSDLApiClient, getConnector, getConnectors, + introspectCredentials, + IntrospectCredentialsRequest, introspectDatabase, IntrospectDatabaseRequest, persistClientGenerate, @@ -39,4 +41,5 @@ export function registerConnectorWizardRpcHandlers(messenger: Messenger) { messenger.onRequest(introspectDatabase, (args: IntrospectDatabaseRequest) => rpcManger.introspectDatabase(args)); messenger.onRequest(persistClientGenerate, (args: PersistClientGenerateRequest) => rpcManger.persistClientGenerate(args)); messenger.onRequest(generateWSDLApiClient, (args: WSDLApiClientGenerationRequest) => rpcManger.generateWSDLApiClient(args)); + messenger.onRequest(introspectCredentials, (args: IntrospectCredentialsRequest) => rpcManger.introspectCredentials(args)); } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/connector-wizard/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/connector-wizard/rpc-manager.ts index 5ba006e47d1..abd932208f2 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/connector-wizard/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/connector-wizard/rpc-manager.ts @@ -24,6 +24,8 @@ import { ConnectorWizardAPI, ConnectorsRequest, ConnectorsResponse, + IntrospectCredentialsRequest, + IntrospectCredentialsResponse, IntrospectDatabaseRequest, IntrospectDatabaseResponse, PersistClientGenerateRequest, @@ -135,4 +137,21 @@ export class ConnectorWizardRpcManager implements ConnectorWizardAPI { } }); } + + async introspectCredentials(params: IntrospectCredentialsRequest): Promise { + return new Promise((resolve) => { + console.log(">>> introspect credentials request", params); + StateMachine.langClient() + .introspectCredentials(params) + .then((response) => { + console.log(">>> introspect credentials response", response); + resolve(response as IntrospectCredentialsResponse); + }) + .catch((error) => { + console.log(">>> error introspecting database", error); + resolve(undefined); + }); + }); + + } } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-handler.ts index b77af293c10..5a82b68dc09 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-handler.ts @@ -29,6 +29,8 @@ import { ConvertExpressionRequest, convertToQuery, ConvertToQueryRequest, + createConvertedVariable, + CreateConvertedVariableRequest, DataMapperModelRequest, DataMapperSourceRequest, deleteClause, @@ -87,5 +89,6 @@ export function registerDataMapperRpcHandlers(messenger: Messenger) { messenger.onRequest(getExpandedDMFromDMModel, (args: DMModelRequest) => rpcManger.getExpandedDMFromDMModel(args)); messenger.onRequest(getProcessTypeReference, (args: ProcessTypeReferenceRequest) => rpcManger.getProcessTypeReference(args)); messenger.onRequest(getConvertedExpression, (args: ConvertExpressionRequest) => rpcManger.getConvertedExpression(args)); + messenger.onRequest(createConvertedVariable, (args: CreateConvertedVariableRequest) => rpcManger.createConvertedVariable(args)); messenger.onRequest(clearTypeCache, () => rpcManger.clearTypeCache()); } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-manager.ts index d09867f659b..2a848acb537 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-manager.ts @@ -27,6 +27,7 @@ import { ConvertExpressionRequest, ConvertExpressionResponse, ConvertToQueryRequest, + CreateConvertedVariableRequest, DataMapperAPI, DataMapperModelRequest, DataMapperModelResponse, @@ -428,4 +429,26 @@ export class DataMapperRpcManager implements DataMapperAPI { }); }); } + + async createConvertedVariable(params: CreateConvertedVariableRequest): Promise { + return new Promise(async (resolve) => { + await StateMachine + .langClient() + .createConvertedVariable(params) + .then((resp) => { + console.log(">>> Data mapper create converted variable response", resp); + updateAndRefreshDataMapper( + resp.textEdits, + params.filePath, + params.codedata, + params.varName, + params.targetField, + params.subMappingName + ) + .then(() => { + resolve({ textEdits: resp.textEdits }); + }); + }); + }); + } } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/utils.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/utils.ts index 649e782c2df..777b2072bf5 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/utils.ts @@ -32,7 +32,8 @@ import { ExpandModelOptions, ExpandedDMModel, MACHINE_VIEW, - IntermediateClauseType + IntermediateClauseType, + InputCategory } from "@wso2/ballerina-core"; import { updateSourceCode, UpdateSourceCodeRequest } from "../../utils"; import { StateMachine, updateDataMapperView } from "../../stateMachine"; @@ -114,7 +115,7 @@ export async function updateSourceCodeIteratively(updateSourceCodeRequest: Updat const filePaths = Object.keys(textEdits); if (filePaths.length == 1) { - return await updateSourceCode({ ...updateSourceCodeRequest, description: 'Data Mapper Update' }); + return await updateSourceCode({ ...updateSourceCodeRequest, description: 'Data Mapper Update' }, undefined, true); } // TODO: Remove this once the designModelService/publishArtifacts API supports simultaneous file changes @@ -137,7 +138,7 @@ export async function updateSourceCodeIteratively(updateSourceCodeRequest: Updat let updatedArtifacts: ProjectStructureArtifactResponse[]; for (const request of requests) { - updatedArtifacts = await updateSourceCode({ ...request, description: 'Data Mapper Update' }); + updatedArtifacts = await updateSourceCode({ ...request, description: 'Data Mapper Update' }, undefined, true); } return updatedArtifacts; @@ -215,7 +216,7 @@ export async function updateSubMappingSource( name: string ): Promise { try { - await updateSourceCode({ textEdits: textEdits, description: 'Sub Mapping Update' }); + await updateSourceCode({ textEdits: textEdits, description: 'Sub Mapping Update' }, undefined, true); return await fetchSubMappingCodeData(filePath, codedata, name); } catch (error) { console.error(`Failed to update source for sub mapping "${name}" in ${filePath}:`, error); @@ -481,10 +482,13 @@ export function expandDMModel( */ function processInputRoots(model: DMModel): IOType[] { const inputs: IORoot[] = []; + const moduleLevelInputs: IORoot[] = []; const focusInputs: Record = {}; for (const input of model.inputs) { if (input.focusExpression && (input.isIterationVariable || input.isSeq || input.isGroupingKey)) { focusInputs[input.focusExpression] = input as IOTypeField; + } else if (isModuleLevelInput(input)) { + moduleLevelInputs.push(input); } else { inputs.push(input); } @@ -497,10 +501,45 @@ function processInputRoots(model: DMModel): IOType[] { focusInputs }; - return inputs.map(input => { + const processedInputs = inputs.map(input => { preProcessedModel.traversingRoot = input.name; return processIORoot(input, preProcessedModel); }); + + return moduleLevelInputs.length + ? [buildModuleLevelInputsGroup(moduleLevelInputs, preProcessedModel), ...processedInputs] + : processedInputs; +} + +/** + * Checks if the given input is a module level input + */ +function isModuleLevelInput(input: IORoot): boolean { + return input.category === InputCategory.Constant + || input.category === InputCategory.Configurable + || input.category === InputCategory.ModuleVariable + || input.category === InputCategory.Enum; +} + +/** + * Builds an IOType to group module level inputs + */ +function buildModuleLevelInputsGroup(moduleLevelInputs: IORoot[], model: DMModel): IOType { + + const id = "MODULE_LEVEL_INPUTS_G#"; // Suffix G# to avoid conflicts with user defined names and special case port handling + model.traversingRoot = id; + const fields = moduleLevelInputs.map(input => { + model.focusInputRootMap[input.name] = model.traversingRoot; + return processIORoot(input, model); + }); + + return { + id, + name: id, + displayName: "Global Inputs", + kind: TypeKind.Record, + fields + }; } /** @@ -542,6 +581,17 @@ function processTypeKind( return processTypeReference(type.ref, parentId, model, visitedRefs); } break; + case TypeKind.Json: + case TypeKind.Xml: + if (type.convertedVariable) { + return { + convertedField: processConvertedVariable(type.convertedVariable, model, visitedRefs) + }; + } else if (type.fields) { + return { + fields: processTypeFields(type as RecordType, parentId, model, visitedRefs) + }; + } } return {}; } @@ -682,6 +732,34 @@ function processUnion( }); } +/** + * Processes a converted variable for JSON/XML types + */ +function processConvertedVariable( + convertedVariable: IORoot, + model: DMModel, + visitedRefs: Set +): IOType { + const fieldId = convertedVariable.name; + + if (model.traversingRoot) { + model.focusInputRootMap[fieldId] = model.traversingRoot; + } + + return { + id: fieldId, + name: fieldId, + displayName: convertedVariable.displayName, + typeName: convertedVariable.typeName, + kind: convertedVariable.kind, + category: convertedVariable.category, + isFocused: true, + ...(convertedVariable.optional && { optional: convertedVariable.optional }), + ...(convertedVariable.typeInfo && { typeInfo: convertedVariable.typeInfo }), + ...processTypeKind(convertedVariable, fieldId, model, visitedRefs) + }; +} + /** * Processes a type reference and returns the appropriate IOType structure */ @@ -787,4 +865,3 @@ function processEnum( ...(member.optional && { optional: member.optional }) })); } - diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/icp-service/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/icp-service/rpc-manager.ts index 4f73cf6b2c8..50699876fd1 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/icp-service/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/icp-service/rpc-manager.ts @@ -36,7 +36,7 @@ export class ICPServiceRpcManager implements ICPServiceAPI { return new Promise(async (resolve) => { const context = StateMachine.context(); try { - const projectPath: string = context.projectPath; + const projectPath: string = params.projectPath || context.projectPath; const param = { projectPath }; const res: TestSourceEditResponse = await context.langClient.addICP(param); await updateSourceCode({ textEdits: res.textEdits, description: 'ICP Creation' }); @@ -52,7 +52,7 @@ export class ICPServiceRpcManager implements ICPServiceAPI { return new Promise(async (resolve) => { const context = StateMachine.context(); try { - const projectPath: string = context.projectPath; + const projectPath: string = params.projectPath || context.projectPath; const param = { projectPath }; const res: TestSourceEditResponse = await context.langClient.disableICP(param); await updateSourceCode({ textEdits: res.textEdits, description: 'ICP Disable' }); @@ -69,7 +69,7 @@ export class ICPServiceRpcManager implements ICPServiceAPI { return new Promise(async (resolve) => { const context = StateMachine.context(); try { - const projectPath: string = context.projectPath; + const projectPath: string = params.projectPath || context.projectPath; const param = { projectPath }; const res: ICPEnabledResponse = await context.langClient.isIcpEnabled(param); resolve(res); diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/platform-ext/platform-store.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/platform-ext/platform-store.ts new file mode 100644 index 00000000000..8a3f2cafa6b --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/platform-ext/platform-store.ts @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { createStore } from "zustand"; +import { persist } from "zustand/middleware"; +import { + PlatformExtConnectionState, + PlatformExtState, +} from "@wso2/ballerina-core/lib/rpc-types/platform-ext/interfaces"; +import { getWorkspaceStateStore } from "./platform-utils"; + +interface PlatformExtStore { + state: PlatformExtState; + setState: (params: Partial) => void; + setConnectionState: (params: Partial) => void; +} + +const initialState: PlatformExtState = { + isExtInstalled: false, + isLoggedIn: false, + userInfo: null, + components: [], + devantConns: { list: [], loading: false, connectedToDevant: true }, +}; + +export const platformExtStore = createStore( + persist( + (set, get) => ({ + state: initialState, + setState: (params: Partial) => { + set(({ state }) => ({ state: { ...state, ...params } })); + }, + setConnectionState: (params: Partial) => { + set(({ state }) => ({ state: { ...state, devantConns: { ...state.devantConns, ...params } } })); + }, + }), + getWorkspaceStateStore("bi-platform-storage"), + ), +); diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/platform-ext/platform-utils.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/platform-ext/platform-utils.ts new file mode 100644 index 00000000000..a8bc75f96d3 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/platform-ext/platform-utils.ts @@ -0,0 +1,450 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { SyntaxTree } from "@wso2/ballerina-core"; +import { ModulePart, STKindChecker, CaptureBindingPattern } from "@wso2/syntax-tree"; +import * as vscode from "vscode"; +import * as fs from "fs"; +import * as path from "path"; +import { StateMachine } from "../../stateMachine"; +import { Uri, WorkspaceEdit, workspace } from "vscode"; +import { OpenAPIDefinition } from "./types"; +import * as yaml from "js-yaml"; +import { MarketplaceItem } from "@wso2/wso2-platform-core"; +import { extension } from "../../BalExtensionContext"; +import { PersistOptions, createJSONStorage } from "zustand/middleware"; +import Handlebars from "handlebars"; +import { updateSourceCode } from "../../utils"; + +export const getConfigFileUri = () => { + const configBalFile = path.join(StateMachine.context().projectPath, "config.bal"); + const configBalFileUri = Uri.file(configBalFile); + if (!fs.existsSync(configBalFile)) { + // create new config.bal if it doesn't exist + fs.writeFileSync(configBalFile, ""); + } + return configBalFileUri; +}; + +export const addConfigurable = async ( + configBalFileUri: Uri, + params: { configName: string; configEnvName: string }[], +) => { + const configBalEdits = new WorkspaceEdit(); + + // if import doesn't exist, add it + const syntaxTree = (await StateMachine.context().langClient.getSyntaxTree({ + documentIdentifier: { uri: configBalFileUri.toString() }, + })) as SyntaxTree; + if ( + !(syntaxTree?.syntaxTree as ModulePart)?.imports?.some((item) => item.source?.includes("import ballerina/os")) + ) { + const balOsImportTemplate = Templates.importBalOs(); + configBalEdits.insert(configBalFileUri, new vscode.Position(0, 0), balOsImportTemplate); + } + + const newConfigEditLine = (syntaxTree?.syntaxTree?.position?.endLine ?? 0) + 1; + configBalEdits.insert(configBalFileUri, new vscode.Position(newConfigEditLine, 0), Templates.emptyLine()); + + for (const item of params) { + const newConfigTemplate = Templates.newEnvConfigurable({ + CONFIG_NAME: item.configName, + CONFIG_ENV_NAME: item.configEnvName, + }); + configBalEdits.insert(configBalFileUri, new vscode.Position(newConfigEditLine, 0), newConfigTemplate); + } + + await updateSourceCode({ + textEdits: { [configBalFileUri.toString()]: configBalEdits.get(configBalFileUri) || [] }, + skipPayloadCheck: true, + }); +}; + +export const addProxyConfigurable = async (configBalFileUri: Uri) => { + const configBalEdits = new WorkspaceEdit(); + + const syntaxTree = (await StateMachine.context().langClient.getSyntaxTree({ + documentIdentifier: { uri: configBalFileUri.toString() }, + })) as SyntaxTree; + if ( + !(syntaxTree?.syntaxTree as ModulePart)?.imports?.some((item) => item.source?.includes("import ballerina/http")) + ) { + const importHttpTemplate = Templates.importBalHttp(); + configBalEdits.insert(configBalFileUri, new vscode.Position(0, 0), importHttpTemplate); + } + + if ( + !(syntaxTree?.syntaxTree as ModulePart)?.members?.find( + (member) => + STKindChecker.isModuleVarDecl(member) && + (member.typedBindingPattern?.bindingPattern as CaptureBindingPattern)?.variableName?.value === + "devantProxyConfig", + ) + ) { + const proxyConfigTemplate = Templates.proxyConfigurable(); + const newConfigEditLine = (syntaxTree?.syntaxTree?.position?.endLine ?? 0) + 1; + configBalEdits.insert(configBalFileUri, new vscode.Position(newConfigEditLine, 0), proxyConfigTemplate); + } + + await workspace.applyEdit(configBalEdits); +}; + +export const addConnection = async ( + connectionName: string, + moduleName: string, + securityType: "" | "oauth" | "apikey", + requireProxy: boolean, + configs: { + apiKeyVarName: string; + svsUrlVarName: string; + tokenUrlVarName?: string; + tokenClientIdVarName?: string; + tokenClientSecretVarName?: string; + }, +): Promise<{ connName: string; connFileUri: Uri }> => { + const matchingBalProj = StateMachine.context().projectStructure?.projects?.find( + (item) => item.projectPath === StateMachine.context().projectPath, + ); + if (!matchingBalProj) { + throw new Error(`Failed to find bal project for :${StateMachine.context().projectPath}`); + } + + const packageName = matchingBalProj.projectName; + const connectionBalFile = path.join(StateMachine.context().projectPath, "connections.bal"); + const connectionBalFileUri = Uri.file(connectionBalFile); + if (!fs.existsSync(connectionBalFile)) { + fs.writeFileSync(connectionBalFile, ""); + } + + const connBalEdits = new WorkspaceEdit(); + + // if import doesn't exist, add it + const syntaxTree = (await StateMachine.context().langClient.getSyntaxTree({ + documentIdentifier: { uri: connectionBalFileUri.toString() }, + })) as SyntaxTree; + + if ( + !(syntaxTree?.syntaxTree as ModulePart)?.imports?.some((item) => + item.source?.includes(`import ${packageName}/${moduleName}`), + ) + ) { + const connImportTemplate = Templates.importConnection({ PACKAGE_NAME: packageName, MODULE_NAME: moduleName }); + connBalEdits.insert(connectionBalFileUri, new vscode.Position(0, 0), connImportTemplate); + } + + const newConnEditLine = (syntaxTree?.syntaxTree?.position?.endLine ?? 0) + 1; + connBalEdits.insert(connectionBalFileUri, new vscode.Position(newConnEditLine, 0), Templates.emptyLine()); + + let baseName = connectionName?.replaceAll("-", "_").replaceAll(" ", "_"); + let candidate = baseName; + let counter = 1; + while ( + (syntaxTree.syntaxTree as ModulePart)?.members?.some( + (k) => (k.typedBindingPattern?.bindingPattern as CaptureBindingPattern)?.variableName?.value === candidate, + ) + ) { + candidate = `${baseName}${counter}`; + counter++; + } + + let newConnTemplate = ""; + if (securityType === "") { + newConnTemplate = Templates.newConnectionNoSecurity({ + CONNECTION_NAME: candidate, + MODULE_NAME: moduleName, + SERVICE_URL_VAR_NAME: configs.svsUrlVarName, + }); + } else if (securityType === "oauth") { + newConnTemplate = Templates.newConnectionWithOAuth({ + requireProxy, + API_KEY_VAR_NAME: configs.apiKeyVarName, + CONNECTION_NAME: candidate, + MODULE_NAME: moduleName, + SERVICE_URL_VAR_NAME: configs.svsUrlVarName, + CLIENT_ID: configs.tokenClientIdVarName, + CLIENT_SECRET: configs.tokenClientSecretVarName, + TOKEN_URL: configs.tokenUrlVarName, + }); + } else if (securityType === "apikey") { + newConnTemplate = Templates.newConnectionWithApiKey({ + requireProxy, + API_KEY_VAR_NAME: configs.apiKeyVarName, + CONNECTION_NAME: candidate, + MODULE_NAME: moduleName, + SERVICE_URL_VAR_NAME: configs.svsUrlVarName, + }); + } + + connBalEdits.insert(connectionBalFileUri, new vscode.Position(newConnEditLine, 0), newConnTemplate); + + await workspace.applyEdit(connBalEdits); + return { connName: candidate, connFileUri: connectionBalFileUri }; +}; + +export const getYamlString = (yamlString: string) => { + try { + if (/%[0-9A-Fa-f]{2}/.test(yamlString)) { + const decoded = decodeURIComponent(yamlString); + if ( + decoded !== yamlString && + (decoded.includes("\n") || decoded.includes(":") || /openapi/i.test(decoded)) + ) { + return decoded; + } + } + return yamlString; + } catch { + return yamlString; + } +}; + +export const processOpenApiWithApiKeyAuth = (yamlString: string, securityType: "" | "oauth" | "apikey"): string => { + try { + const openApiDefinition = yaml.load(getYamlString(yamlString)) as OpenAPIDefinition; + const oAuthSchemaName = "DevantOAuth2"; + const apiKeySchemaName = "DevantApiKeyAuth"; + + if (!openApiDefinition) { + throw new Error("Invalid YAML: Unable to parse OpenAPI definition"); + } + + if (!openApiDefinition.components) { + openApiDefinition.components = {}; + } + + if (!openApiDefinition.components.securitySchemes && securityType !== "") { + openApiDefinition.components.securitySchemes = {}; + } + + if (securityType === "oauth") { + openApiDefinition.components.securitySchemes[oAuthSchemaName] = { + type: "oauth2", + flows: { + clientCredentials: { + tokenUrl: "tokenURL", + scopes: {}, + }, + }, + }; + } else if (securityType === "apikey") { + openApiDefinition.components.securitySchemes[apiKeySchemaName] = { + type: "apiKey", + in: "header", + name: "Choreo-API-Key", + "x-ballerina-name": "choreoAPIKey", + }; + } + + if (!openApiDefinition.security && securityType !== "") { + openApiDefinition.security = []; + } + if (securityType === "oauth") { + openApiDefinition.security.push({ [oAuthSchemaName]: [], [apiKeySchemaName]: [] }); + } else if (securityType === "apikey") { + openApiDefinition.security.push({ [apiKeySchemaName]: [] }); + } + + if (openApiDefinition.paths) { + for (const path in openApiDefinition.paths) { + for (const method in openApiDefinition.paths[path]) { + if (openApiDefinition.paths[path]?.[method]?.security) { + if (securityType === "oauth") { + openApiDefinition.paths[path]?.[method]?.security.push({ + [oAuthSchemaName]: [], + [apiKeySchemaName]: [], + }); + } else if (securityType === "apikey") { + openApiDefinition.paths[path]?.[method]?.security.push({ [apiKeySchemaName]: [] }); + } + } + } + } + } + + if (!openApiDefinition.servers || openApiDefinition.servers.length === 0) { + openApiDefinition.servers = [{ url: "http://localhost:8080" }]; + } + + openApiDefinition.servers.forEach((server) => { + if (typeof server.url === "string" && server.url.endsWith("/")) { + server.url = server.url.slice(0, -1); + } + }); + + return yaml.dump(openApiDefinition); + } catch (error) { + throw new Error( + `Failed to process OpenAPI definition: ${error instanceof Error ? error.message : "Unknown error"}`, + ); + } +}; + +export const getWorkspaceStateStore = (storeName: string): PersistOptions => { + const version = "v1"; + return { + name: `${storeName}-${version}`, + storage: createJSONStorage(() => ({ + getItem: async (name) => { + const value = await extension.context.workspaceState.get(name); + return value ? (value as string) : ""; + }, + removeItem: (name) => extension.context.workspaceState.update(name, undefined), + setItem: (name, value) => extension.context.workspaceState.update(name, value), + })), + skipHydration: true, + }; +}; + +export const Templates = { + emptyLine: () => { + const template = Handlebars.compile(`\n`); + return template({}); + }, + newEnvConfigurable: (params: { CONFIG_NAME: string; CONFIG_ENV_NAME: string }) => { + const template = Handlebars.compile( + `configurable string {{CONFIG_NAME}} = os:getEnv("{{CONFIG_ENV_NAME}}");\n`, + ); + return template(params); + }, + newDefaultEnvConfigurable: (params: { CONFIG_NAME: string }) => { + const template = Handlebars.compile(`configurable string {{CONFIG_NAME}} = ?;\n`); + return template(params); + }, + importBalOs: () => { + const template = Handlebars.compile(`import ballerina/os;\n`); + return template({}); + }, + importBalHttp: () => { + const template = Handlebars.compile(`import ballerina/http;\n`); + return template({}); + }, + importConnection: (params: { PACKAGE_NAME: string; MODULE_NAME: string }) => { + const template = Handlebars.compile(`import {{PACKAGE_NAME}}.{{MODULE_NAME}};\n`); + return template(params); + }, + proxyConfigurable: () => { + const template = Handlebars.compile(` +configurable string? devantProxyHost = (); +configurable int? devantProxyPort = (); +http:ProxyConfig? devantProxyConfig = devantProxyHost is string && devantProxyPort is int ? { host: devantProxyHost, port: devantProxyPort } : (); +\n`); + return template({}); + }, + newConnectionNoSecurity: (params: { + MODULE_NAME: string; + CONNECTION_NAME: string; + SERVICE_URL_VAR_NAME: string; + }) => { + return `final ${params.MODULE_NAME}:Client ${params.CONNECTION_NAME} = check new (config = { timeout: 30 }, serviceUrl = ${params.SERVICE_URL_VAR_NAME});\n`; + }, + newConnectionWithApiKey: (params: { + requireProxy: boolean; + MODULE_NAME: string; + CONNECTION_NAME: string; + SERVICE_URL_VAR_NAME: string; + API_KEY_VAR_NAME: string; + }) => { + return `final ${params.MODULE_NAME}:Client ${ + params.CONNECTION_NAME + } = check new (apiKeyConfig = { choreoAPIKey: ${params.API_KEY_VAR_NAME} }, config = { ${ + params.requireProxy ? "proxy: devantProxyConfig, " : "" + }timeout: 60 }, serviceUrl = ${params.SERVICE_URL_VAR_NAME});\n`; + }, + newConnectionWithOAuth: (params: { + requireProxy: boolean; + MODULE_NAME: string; + CONNECTION_NAME: string; + SERVICE_URL_VAR_NAME: string; + API_KEY_VAR_NAME: string; + TOKEN_URL: string; + CLIENT_ID: string; + CLIENT_SECRET: string; + }) => { + // todo: get params from LS + return `final ${params.MODULE_NAME}:Client ${ + params.CONNECTION_NAME + } = check new (config = { auth: { tokenUrl: ${params.TOKEN_URL}, clientId: ${params.CLIENT_ID}, clientSecret: ${ + params.CLIENT_SECRET + } }, ${params.requireProxy ? "proxy: devantProxyConfig, " : ""}timeout: 60 }, serviceUrl = ${ + params.SERVICE_URL_VAR_NAME + });\n`; + }, +}; + +export const hasContextYaml = (projectPath: string): boolean => { + try { + const repoRoot = getRepoRoot(projectPath); + if (repoRoot) { + const contextYamlPath = path.join(repoRoot, ".choreo", "context.yaml"); + if (fs.existsSync(contextYamlPath)) { + return true; + } + } + return false; + } catch { + return false; + } +}; + +export function getRepoRoot(projectRoot: string): string | undefined { + // traverse up the directory tree until .git directory is found + const gitDir = path.join(projectRoot, ".git"); + if (fs.existsSync(gitDir)) { + return projectRoot; + } + // path is root return undefined + if (projectRoot === path.parse(projectRoot).root) { + return undefined; + } + return getRepoRoot(path.join(projectRoot, "..")); +} + +export function getDomain(rawURL: string): string { + try { + const parsedURL = new URL(rawURL); + return parsedURL.hostname; + } catch (error) { + throw new Error(""); + } +} + +/** + * Finds a unique connection name by checking against existing marketplace items. + * If the base name exists, appends a numeric counter until a unique name is found. + * If the initial name is shorter than 3 characters, appends '-connection' to it. + */ +export const findUniqueConnectionName = (name: string, existingMarketplaceItems: MarketplaceItem[]): string => { + // If name is too short, append '-connection' + let baseName = name; + if (baseName.length < 3) { + baseName = `${baseName}-connection`; + } + + const existingNames = new Set(existingMarketplaceItems.map((item) => item.name.toLowerCase())); + + // Check if the base name exists + let uniqueName = baseName; + let counter = 1; + + while (existingNames.has(uniqueName.toLowerCase())) { + uniqueName = `${baseName}${counter}`; + counter++; + } + + return uniqueName; +}; diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/platform-ext/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/platform-ext/rpc-handler.ts new file mode 100644 index 00000000000..bbc758d3dae --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/platform-ext/rpc-handler.ts @@ -0,0 +1,65 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { getMarketplaceItems, getMarketplaceIdl, getConnections, deleteLocalConnectionsConfig, getDevantConsoleUrl, getMarketplaceItem, getConnection, onPlatformExtStoreStateChange, refreshConnectionList, getPlatformStore, setConnectedToDevant, setSelectedComponent, deployIntegrationInDevant, deleteDevantTempConfigs, generateCustomConnectorFromOAS, addDevantTempConfig, setSelectedEnv, createConnectionConfig, replaceDevantTempConfigValues, registerDevantMarketplaceService, createThirdPartyConnection, initializeDevantOASConnection, createInternalConnection, getComponentList, getMarketplaceDatabases, getDatabaseServer, getDatabaseAdminCredential, getDatabaseCredentials, getProjectEnvs, createDatabaseConnection, getMarketplaceDatabaseItem, resolveConnectionSecrets } from "@wso2/ballerina-core"; +import { Messenger } from "vscode-messenger"; +import { PlatformExtRpcManager } from "./rpc-manager"; +import { CreateComponentConnectionReq, CreateDatabaseConnectionReq, CreateLocalConnectionsConfigReq, CreateThirdPartyConnectionReq, DeleteLocalConnectionsConfigReq, GetComponentsReq, GetConnectionItemReq, GetConnectionsReq, GetDatabaseItemReq, GetDatabaseServerReq, GetMarketplaceIdlReq, GetMarketplaceItemReq, GetMarketplaceListReq, GetProjectEnvsReq, ResolveConnectionSecretsReq, } from "@wso2/wso2-platform-core"; +import { AddDevantTempConfigReq, DeleteDevantTempConfigReq, GenerateCustomConnectorFromOASReq, InitializeDevantOASConnectionReq, RegisterDevantMarketplaceServiceReq, ReplaceDevantTempConfigValuesReq } from "@wso2/ballerina-core/lib/rpc-types/platform-ext/interfaces"; +import { platformExtStore } from "./platform-store"; +import { debug } from "../../utils"; + +export function registerPlatformExtRpcHandlers(messenger: Messenger) { + const rpcManger = new PlatformExtRpcManager(); + rpcManger.initStateSubscription(messenger).catch((err) => { + debug(`Failed to init platform ext state: ${err?.message}`); + }); + // BI ext handlers + messenger.onRequest(generateCustomConnectorFromOAS, (params: GenerateCustomConnectorFromOASReq) => rpcManger.generateCustomConnectorFromOAS(params)); + messenger.onRequest(initializeDevantOASConnection, (params: InitializeDevantOASConnectionReq) => rpcManger.initializeDevantOASConnection(params)); + messenger.onRequest(registerDevantMarketplaceService, (params: RegisterDevantMarketplaceServiceReq) => rpcManger.registerDevantMarketplaceService(params)); + messenger.onRequest(addDevantTempConfig, (params: AddDevantTempConfigReq) => rpcManger.addDevantTempConfig(params)); + messenger.onRequest(deleteDevantTempConfigs, (params: DeleteDevantTempConfigReq) => rpcManger.deleteDevantTempConfigs(params)); + messenger.onRequest(replaceDevantTempConfigValues, (params: ReplaceDevantTempConfigValuesReq) => rpcManger.replaceDevantTempConfigValues(params)); + messenger.onRequest(setConnectedToDevant, (params: boolean) => rpcManger.setConnectedToDevant(params)); + messenger.onRequest(setSelectedComponent, (params: string) => rpcManger.setSelectedComponent(params)); + messenger.onRequest(setSelectedEnv, (params: string) => rpcManger.setSelectedEnv(params)); + messenger.onRequest(getPlatformStore, () => platformExtStore.getState().state); + // Platform ext proxies + messenger.onRequest(createThirdPartyConnection, (params: CreateThirdPartyConnectionReq) => rpcManger.createThirdPartyConnection(params)); + messenger.onRequest(createInternalConnection, (params: CreateComponentConnectionReq) => rpcManger.createInternalConnection(params)); + messenger.onRequest(getMarketplaceItems, (params: GetMarketplaceListReq) => rpcManger.getMarketplaceItems(params)); + messenger.onRequest(getMarketplaceDatabases, (params: { orgId: string }) => rpcManger.getMarketplaceDatabases(params)); + messenger.onRequest(getMarketplaceDatabaseItem, (params: GetDatabaseItemReq) => rpcManger.getMarketplaceDatabaseItem(params)); + messenger.onRequest(getDatabaseServer, (params: GetDatabaseServerReq) => rpcManger.getDatabaseServer(params)); + messenger.onRequest(getDatabaseAdminCredential, (params: GetDatabaseServerReq) => rpcManger.getDatabaseAdminCredential(params)); + messenger.onRequest(getDatabaseCredentials, (params: GetDatabaseServerReq) => rpcManger.getDatabaseCredentials(params)); + messenger.onRequest(createDatabaseConnection, (params: CreateDatabaseConnectionReq) => rpcManger.createDatabaseConnection(params)); + messenger.onRequest(getMarketplaceItem, (params: GetMarketplaceItemReq) => rpcManger.getMarketplaceItem(params)); + messenger.onRequest(getMarketplaceIdl, (params: GetMarketplaceIdlReq) => rpcManger.getMarketplaceIdl(params)); + messenger.onRequest(getConnections, (params: GetConnectionsReq) => rpcManger.getConnections(params)); + messenger.onRequest(getConnection, (params: GetConnectionItemReq) => rpcManger.getConnection(params)); + messenger.onRequest(getComponentList, (params: GetComponentsReq) => rpcManger.getComponentList(params)); + messenger.onRequest(deleteLocalConnectionsConfig, (params: DeleteLocalConnectionsConfigReq) => rpcManger.deleteLocalConnectionsConfig(params)); + messenger.onRequest(getDevantConsoleUrl, () => rpcManger.getDevantConsoleUrl()); + messenger.onRequest(refreshConnectionList, () => rpcManger.refreshConnectionList()); + messenger.onRequest(getProjectEnvs, (params: GetProjectEnvsReq) => rpcManger.getProjectEnvs(params)); + messenger.onRequest(resolveConnectionSecrets, (params: ResolveConnectionSecretsReq) => rpcManger.resolveConnectionSecrets(params)); + messenger.onRequest(deployIntegrationInDevant, () => rpcManger.deployIntegrationInDevant()); + messenger.onRequest(createConnectionConfig, (params: CreateLocalConnectionsConfigReq) => rpcManger.createConnectionConfig(params)); +} diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/platform-ext/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/platform-ext/rpc-manager.ts new file mode 100644 index 00000000000..07a9fa1ed3f --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/platform-ext/rpc-manager.ts @@ -0,0 +1,1132 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { + onPlatformExtStoreStateChange, + PlatformExtAPI, + SyntaxTree, + DIRECTORY_MAP, + findDevantScopeByModule, + AvailableNode, +} from "@wso2/ballerina-core"; +import { Uri, window, WorkspaceEdit } from "vscode"; +import * as vscode from "vscode"; +import * as fs from "fs"; +import * as path from "path"; +import { + ConnectionListItem, + DeleteLocalConnectionsConfigReq, + GetConnectionsReq, + GetMarketplaceIdlReq, + GetMarketplaceItemReq, + GetMarketplaceListReq, + IWso2PlatformExtensionAPI, + MarketplaceIdlResp, + MarketplaceItem, + MarketplaceListResp, + ServiceInfoVisibilityEnum, + GetConnectionItemReq, + StartProxyServerResp, + StopProxyServerReq, + ConnectionDetailed, + DevantScopes, + ICreateComponentCmdParams, + ComponentKind, + ICmdParamsBase, + RegisterMarketplaceConfigMap, + Project, + Organization, + CreateLocalConnectionsConfigReq, + CreateThirdPartyConnectionReq, + CreateComponentConnectionReq, + GetComponentsReq, + MarketplaceDatabaseListResp, + DatabaseServer, + GetDatabaseServerReq, + DatabaseAdminCredential, + DatabaseCredential, + Environment, + GetProjectEnvsReq, + CreateDatabaseConnectionReq, + GetDatabaseItemReq, + ResolveConnectionSecretsResp, + ResolveConnectionSecretsReq, + WICommandIds, + ICreateNewIntegrationCmdParams, +} from "@wso2/wso2-platform-core"; +import { log } from "../../utils/logger"; +import { + AddDevantTempConfigReq, + AddDevantTempConfigResp, + DeleteDevantTempConfigReq, + GenerateCustomConnectorFromOASReq, + GenerateCustomConnectorFromOASResp, + InitializeDevantOASConnectionReq, + InitializeDevantOASConnectionResp, + RegisterDevantMarketplaceServiceReq, + ReplaceDevantTempConfigValuesReq, +} from "@wso2/ballerina-core/lib/rpc-types/platform-ext/interfaces"; +import { StateMachine } from "../../stateMachine"; +import { CaptureBindingPattern, ModulePart, ModuleVarDecl, STKindChecker } from "@wso2/syntax-tree"; +import { DeleteBiDevantConnectionReq } from "./types"; +import { platformExtStore } from "./platform-store"; +import { Messenger } from "vscode-messenger"; +import { VisualizerWebview } from "../../views/visualizer/webview"; +import { + addConfigurable, + addConnection, + addProxyConfigurable, + findUniqueConnectionName, + getConfigFileUri, + hasContextYaml, + processOpenApiWithApiKeyAuth, + Templates, +} from "./platform-utils"; +import { debounce } from "lodash"; +import { BiDiagramRpcManager } from "../bi-diagram/rpc-manager"; +import { updateSourceCode, WI_EXTENSION_ID } from "../../utils"; + +export class PlatformExtRpcManager implements PlatformExtAPI { + static platformExtAPI: IWso2PlatformExtensionAPI | undefined; + private async getPlatformExt() { + if (PlatformExtRpcManager.platformExtAPI) { + return PlatformExtRpcManager.platformExtAPI; + } + const platformExt = vscode.extensions.getExtension(WI_EXTENSION_ID); + if (!platformExt) { + return undefined; + } + if (!platformExt.isActive) { + await platformExt.activate(); + } + platformExtStore.getState().setState({ isExtInstalled: true }); + const platformExtAPI: IWso2PlatformExtensionAPI = platformExt.exports?.cloudAPIs; + PlatformExtRpcManager.platformExtAPI = platformExtAPI; + return platformExtAPI; + } + + public async initStateSubscription(messenger: Messenger) { + // if extension is not installed, the store will not be rehydrated + const platformExt = await this.getPlatformExt(); + if (!platformExt) { + return; + } + await platformExtStore.persist.rehydrate(); + await this.initAuthState(); + let projectPath = StateMachine.context()?.projectPath; + let disposeProjectPathWatcher = await this.initProjectPathWatcher(projectPath); + if (projectPath) { + this.debouncedRefreshConnectionList(); + } + await this.initFileWatcher(); + const debouncedInitProjectPathWatcher = debounce( + async (projectPath: string) => await this.initProjectPathWatcher(projectPath), + 250, + ); + StateMachine.service().subscribe(async (state) => { + if (state.context?.projectPath && state.context?.projectPath !== projectPath) { + projectPath = state.context?.projectPath; + if (disposeProjectPathWatcher) { + disposeProjectPathWatcher(); + } + + disposeProjectPathWatcher = await debouncedInitProjectPathWatcher(projectPath); + } + }); + + await this.initSelfStoreSubscription(messenger); + } + + private async initAuthState() { + const platformExt = await this.getPlatformExt(); + const userInfo = platformExt?.getAuthState().userInfo; + const selectedContext = platformExt?.getSelectedContext(); + platformExtStore.getState().setState({ userInfo, isLoggedIn: !!userInfo, selectedContext }); + + if (selectedContext?.project) { + const envs = await platformExt?.getProjectEnvs({ + orgId: selectedContext?.org?.id?.toString(), + orgUuid: selectedContext?.org?.uuid, + projectId: selectedContext?.project?.id, + }); + const selectedEnv = + envs.find((env) => env.id === platformExtStore.getState().state?.selectedEnv?.id) || envs[0]; + platformExtStore.getState().setState({ envs, selectedEnv }); + } + + platformExt?.subscribeAuthState((authState) => { + platformExtStore.getState().setState({ userInfo: authState.userInfo, isLoggedIn: !!authState.userInfo }); + }); + + const debouncedEnvListRefresh = debounce(async (org?: Organization, project?: Project) => { + if (org && project) { + const envs = await platformExt?.getProjectEnvs({ + orgId: org.id?.toString(), + orgUuid: org.uuid, + projectId: project.id, + }); + const selectedEnv = + envs.find((env) => env.id === platformExtStore.getState().state?.selectedEnv?.id) || envs[0]; + platformExtStore.getState().setState({ envs, selectedEnv }); + } + }, 1000); + + platformExt?.subscribeContextState(async (selectedContext) => { + platformExtStore.getState().setState({ selectedContext }); + debouncedEnvListRefresh(selectedContext?.org, selectedContext?.project); + }); + } + + private async initFileWatcher() { + const platformExt = await this.getPlatformExt(); + const debouncedOnFilChange = debounce(async () => { + if (StateMachine.context().projectPath) { + const hasLocalChanges = await platformExt?.localRepoHasChanges(StateMachine.context().projectPath); + platformExtStore.getState().setState({ hasLocalChanges }); + } + }, 1000); + + if (vscode.workspace.workspaceFolders?.length > 0) { + const fileWatcher = vscode.workspace.createFileSystemWatcher( + new vscode.RelativePattern(vscode.workspace.workspaceFolders[0], "**/*"), + ); + fileWatcher.onDidCreate(debouncedOnFilChange); + fileWatcher.onDidChange(debouncedOnFilChange); + fileWatcher.onDidDelete(debouncedOnFilChange); + } + } + + private async initProjectPathWatcher(projectPath: string) { + const platformExt = await this.getPlatformExt(); + let components: ComponentKind[] = []; + let matchingComponent: ComponentKind; + let hasLocalChanges = false; + let hasProjectYaml = false; + if (projectPath) { + components = platformExt?.getDirectoryComponents(projectPath); + matchingComponent = components.find( + (item) => platformExtStore.getState().state?.selectedComponent?.metadata?.id === item.metadata?.id, + ); + hasLocalChanges = await platformExt?.localRepoHasChanges(projectPath); + hasProjectYaml = hasContextYaml(projectPath); + await this.debouncedRefreshConnectionList(); + } + + platformExtStore.getState().setState({ + components, + selectedComponent: matchingComponent || components[0], + hasLocalChanges, + hasPossibleComponent: components.length > 0 || hasProjectYaml, + }); + + const unsubscribeDirCompWatcher = platformExt?.subscribeDirComponents(projectPath, (components) => { + const hasProjectYaml = hasContextYaml(projectPath); + const matchingComponent = components.find( + (item) => platformExtStore.getState().state?.selectedComponent?.metadata?.id === item.metadata?.id, + ); + platformExtStore.getState().setState({ + components, + selectedComponent: matchingComponent || components[0], + hasPossibleComponent: components.length > 0 || hasProjectYaml, + }); + }); + return unsubscribeDirCompWatcher; + } + + private async initSelfStoreSubscription(messenger: Messenger) { + platformExtStore.subscribe((state, prevState) => { + messenger.sendNotification( + onPlatformExtStoreStateChange, + { type: "webview", webviewType: VisualizerWebview.viewType }, + state.state, + ); + + let refetchConnections = false; + if (!state.state?.isLoggedIn && prevState?.state?.isLoggedIn) { + // if user is logging out + // todo: check if this needs to be enabled again + // platformExtStore.getState().setState({connections: []}); + } else if ( + state.state?.selectedComponent && + state.state?.selectedComponent.metadata?.id !== prevState?.state?.selectedComponent?.metadata?.id + ) { + // if component selection has changed + // todo: remove connections related to previous component + // todo: test after applying fix to support multiple components + // platformExtStore.getState().setState({connections: platformExtStore.getState().state?.connections?.filter(item=>item.componentId)}); + refetchConnections = true; + } else if ( + state.state?.selectedContext?.project && + state.state?.selectedContext?.project?.id !== prevState.state?.selectedContext?.project?.id + ) { + // if project selection has changed + platformExtStore.getState().setConnectionState({ list: [] }); + refetchConnections = true; + } + + if (refetchConnections) { + this.debouncedRefreshConnectionList(); + } + }); + } + + async getMarketplaceItems(params: GetMarketplaceListReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return platformExt?.getMarketplaceItems(params); + } catch (err) { + log(`Failed to invoke getMarketplaceItems: ${err}`); + } + } + + async getMarketplaceDatabases(params: { orgId: string }): Promise { + try { + const platformExt = await this.getPlatformExt(); + return platformExt?.getMarketplaceDatabases(params); + } catch (err) { + log(`Failed to invoke getMarketplaceDatabases: ${err}`); + } + } + + async getMarketplaceDatabaseItem(params: GetDatabaseItemReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return platformExt?.getMarketplaceDatabaseItem(params); + } catch (err) { + log(`Failed to invoke getMarketplaceDatabaseItem: ${err}`); + } + } + + async getDatabaseServer(params: GetDatabaseServerReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return platformExt?.getDatabaseServer(params); + } catch (err) { + log(`Failed to invoke getDatabaseServer: ${err}`); + } + } + + async getDatabaseAdminCredential(params: GetDatabaseServerReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return platformExt?.getDatabaseAdminCredential(params); + } catch (err) { + log(`Failed to invoke getDatabaseAdminCredential: ${err}`); + } + } + + async getDatabaseCredentials(params: GetDatabaseServerReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return platformExt?.getDatabaseCredentials(params); + } catch (err) { + log(`Failed to invoke getDatabaseCredentials: ${err}`); + } + } + + async createDatabaseConnection(params: CreateDatabaseConnectionReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return platformExt?.createDatabaseConnection(params); + } catch (err) { + log(`Failed to invoke createDatabaseConnection: ${err}`); + } + } + + async getMarketplaceItem(params: GetMarketplaceItemReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return platformExt?.getMarketplaceItem(params); + } catch (err) { + log(`Failed to invoke getMarketplaceItem: ${err}`); + } + } + + async getMarketplaceIdl(params: GetMarketplaceIdlReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return platformExt?.getMarketplaceIdl(params); + } catch (err) { + log(`Failed to invoke getMarketplaceIdl: ${err}`); + } + } + + async getConnections(params: GetConnectionsReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return platformExt?.getConnections(params); + } catch (err) { + log(`Failed to invoke getConnections: ${err}`); + } + } + + async getConnection(params: GetConnectionItemReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return platformExt?.getConnection(params); + } catch (err) { + log(`Failed to invoke getConnection: ${err}`); + } + } + + async getComponentList(params: GetComponentsReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return platformExt?.getComponentList(params); + } catch (err) { + log(`Failed to invoke getComponentList: ${err}`); + } + } + + async deleteLocalConnectionsConfig(params: DeleteLocalConnectionsConfigReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + platformExt?.deleteLocalConnectionsConfig(params); + } catch (err) { + log(`Failed to delete connection config: ${err}`); + } + } + + async getDevantConsoleUrl(): Promise { + try { + const platformExt = await this.getPlatformExt(); + return await platformExt?.getDevantConsoleUrl(); + } catch (err) { + log(`Failed to delete connection config: ${err}`); + } + } + + async createConnectionConfig(params: CreateLocalConnectionsConfigReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return await platformExt?.createConnectionConfig(params); + } catch (err) { + log(`Failed to create connection config: ${err}`); + } + } + + async createThirdPartyConnection(params: CreateThirdPartyConnectionReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return await platformExt?.createThirdPartyConnection(params); + } catch (err) { + log(`Failed to create 3rd party connection: ${err}`); + } + } + + async getProjectEnvs(params: GetProjectEnvsReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return await platformExt?.getProjectEnvs(params); + } catch (err) { + log(`Failed to get project environments: ${err}`); + } + } + + async resolveConnectionSecrets(params: ResolveConnectionSecretsReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return await platformExt?.resolveConnectionSecrets(params); + } catch (err) { + log(`Failed to resolve connection secrets: ${err}`); + } + } + + async createInternalConnection(params: CreateComponentConnectionReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return await platformExt?.createComponentConnection(params); + } catch (err) { + log(`Failed to create Devant connection: ${err}`); + } + } + + async stopProxyServer(params: StopProxyServerReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + return platformExt?.stopProxyServer(params); + } catch (err) { + log(`Failed to delete connection config: ${err}`); + } + } + + setSelectedComponent(componentId: string): void { + const selectedComponent = platformExtStore + .getState() + .state?.components?.find((item) => item.metadata?.id === componentId); + if (selectedComponent) { + platformExtStore.getState().setState({ selectedComponent }); + } + } + + setSelectedEnv(envId: string): void { + const selectedEnv = platformExtStore.getState().state?.envs?.find((item) => item?.id === envId); + if (selectedEnv) { + platformExtStore.getState().setState({ selectedEnv }); + } + } + + setConnectedToDevant(connected: boolean): void { + platformExtStore.getState().setConnectionState({ connectedToDevant: connected }); + } + + async deployIntegrationInDevant(): Promise { + const projectStructure = await new BiDiagramRpcManager().getProjectStructure(); + if (!projectStructure) { + return; + } + + const project = projectStructure.projects.find( + (project) => project.projectPath === StateMachine.context()?.projectPath, + ); + if (!project) { + return; + } + + const services = project.directoryMap[DIRECTORY_MAP.SERVICE]; + const automation = project.directoryMap[DIRECTORY_MAP.AUTOMATION]; + + let scopes: DevantScopes[] = []; + if (services?.length > 0) { + const svcScopes = services + .map((svc) => findDevantScopeByModule(svc?.moduleName)) + .filter((svc) => svc !== undefined); + scopes.push(...Array.from(new Set(svcScopes))); + } + if (automation?.length > 0) { + scopes.push(DevantScopes.AUTOMATION); + } + + let integrationType: DevantScopes; + + if (scopes.length === 1) { + integrationType = scopes[0]; + } else if (scopes?.length > 1) { + const selectedScope = await window.showQuickPick(scopes, { + placeHolder: + "You have multiple artifact types within this project. Select the artifact type to be deployed", + }); + if (!selectedScope) { + return; + } + integrationType = selectedScope as DevantScopes; + } + + const deployementParams: ICreateNewIntegrationCmdParams = { + buildPackLang:"ballerina", + workspaceDir: StateMachine.context().workspacePath || StateMachine.context().projectPath, + integrations: [{ fsPath: StateMachine.context().projectPath, supportedIntegrationTypes: [integrationType] }] + }; + vscode.commands.executeCommand(WICommandIds.CreateNewComponent, deployementParams); + } + + async getAllConnections(): Promise { + try { + const platformExt = await this.getPlatformExt(); + if ( + platformExtStore.getState().state.isLoggedIn && + platformExtStore.getState().state.selectedContext?.project?.id + ) { + const projectPromise = platformExt?.getConnections({ + orgId: platformExtStore.getState().state.selectedContext?.org?.id?.toString(), + projectId: platformExtStore.getState().state.selectedContext?.project?.id, + componentId: "", + }); + + const componentPromise: Promise = platformExtStore.getState().state + .selectedComponent + ? platformExt?.getConnections({ + orgId: platformExtStore.getState().state.selectedContext?.org?.id?.toString(), + projectId: platformExtStore.getState().state.selectedContext?.project?.id, + componentId: platformExtStore.getState().state.selectedComponent?.metadata?.id, + }) + : Promise.resolve([]); + + const [projectConnections, componentConnections] = await Promise.all([ + projectPromise, + componentPromise, + ]); + + return [...componentConnections, ...projectConnections]; + } + return []; + } catch (err) { + log(`Failed to get all connections: ${err}`); + } + } + + async setupDevantProxyForDebugging(debugConfig: vscode.DebugConfiguration): Promise { + // check if choreoConnect is provided as param, if so use pass those as param + const devantProxyResp = await this.startProxyServer(debugConfig); + + if (devantProxyResp?.proxyServerPort) { + debugConfig.env = { ...(debugConfig.env || {}), ...devantProxyResp.envVars }; + if (devantProxyResp.requiresProxy) { + debugConfig.env.BAL_CONFIG_VAR_DEVANTPROXYHOST = "127.0.0.1"; + debugConfig.env.BAL_CONFIG_VAR_DEVANTPROXYPORT = `${devantProxyResp.proxyServerPort}`; + } else { + delete debugConfig.env.BAL_CONFIG_VAR_DEVANTPROXYHOST; + delete debugConfig.env.BAL_CONFIG_VAR_DEVANTPROXYPORT; + } + + const disposable = vscode.debug.onDidTerminateDebugSession((session) => { + if (session.configuration === debugConfig) { + this.stopProxyServer({ proxyPort: devantProxyResp.proxyServerPort }); + disposable.dispose(); + } + }); + } + } + + async startProxyServer( + debugConfig: vscode.DebugConfiguration, + ): Promise { + // todo: need to take in params from config + try { + const platformExt = await this.getPlatformExt(); + const configBalFile = path.join(StateMachine.context().projectPath, "config.bal"); + const configBalFileUri = Uri.file(configBalFile); + const syntaxTree = (await StateMachine.context().langClient.getSyntaxTree({ + documentIdentifier: { uri: configBalFileUri.toString() }, + })) as SyntaxTree; + let requiresProxy = false; + if ( + (syntaxTree?.syntaxTree as ModulePart)?.members?.find( + (member) => + STKindChecker.isModuleVarDecl(member) && + (member.typedBindingPattern?.bindingPattern as CaptureBindingPattern)?.variableName?.value === + "devantProxyConfig", + ) + ) { + requiresProxy = true; + } + + if (debugConfig.request === "launch" && debugConfig?.choreoConnect) { + if (!platformExtStore.getState().state?.isLoggedIn) { + window + .showErrorMessage( + "You must log in before connecting to devant environment. Retry after logging in.", + "Login", + ) + .then((res) => { + if (res === "Login") { + vscode.commands.executeCommand(WICommandIds.SignIn); + } + }); + return; + } + + if (!platformExtStore.getState().state?.selectedContext?.project) { + window + .showErrorMessage( + "Pease associate your directory with Devant project in order to connect to Devant while running or debugging", + "Manage Project", + ) + .then((res) => { + if (res === "Manage Project") { + vscode.commands.executeCommand(WICommandIds.ManageDirectoryContext); + } + }); + return; + } + } + + if ( + debugConfig.request === "launch" && + platformExtStore.getState().state?.isLoggedIn && + platformExtStore.getState().state?.selectedContext?.org && + platformExtStore.getState().state?.selectedContext?.project && + // todo: check and fetch configs of only the connections used + // platformExtStore.getState().state?.devantConns?.list?.filter((item) => item.isUsed)?.length > 0 && + platformExtStore.getState().state?.devantConns?.connectedToDevant + ) { + // TODO: need to check whether at least one devant connection being used + const resp = await window.withProgress( + { + location: vscode.ProgressLocation.Notification, + title: "Connecting to Devant before running/debugging the application...", + }, + () => + platformExt?.startProxyServer({ + orgId: platformExtStore.getState().state?.selectedContext?.org?.id?.toString(), + project: + debugConfig?.choreoConnect?.project || + platformExtStore.getState().state?.selectedContext?.project?.id, + component: + debugConfig?.choreoConnect?.component || + platformExtStore.getState().state?.selectedComponent?.metadata?.id || + "", + env: + debugConfig?.choreoConnect?.env || + platformExtStore?.getState().state?.selectedEnv?.name || + "", + skipConnection: debugConfig?.choreoConnect?.skipConnection || [], + }), + ); + return { ...resp, requiresProxy }; + } + return { envVars: {}, proxyServerPort: 0, requiresProxy }; + } catch (err) { + log(`Failed to delete connection config: ${err}`); + return { envVars: {}, proxyServerPort: 0, requiresProxy: false }; + } + } + + async deleteBiDevantConnection(params: DeleteBiDevantConnectionReq): Promise { + try { + StateMachine.setEditMode(); + const platformExt = await this.getPlatformExt(); + const syntaxTree = (await StateMachine.context().langClient.getSyntaxTree({ + documentIdentifier: { uri: Uri.file(params.filePath).toString() }, + })) as SyntaxTree; + + const matchingConnection = (syntaxTree.syntaxTree as ModulePart)?.members?.find((member) => { + return ( + member.position?.startLine === params?.startLine && + member.position?.startColumn === params?.startColumn && + member.position?.endLine === params?.endLine && + member.position?.endColumn === params?.endColumn + ); + }); + + if (matchingConnection && STKindChecker.isModuleVarDecl(matchingConnection)) { + const connectionName = (matchingConnection.typedBindingPattern?.bindingPattern as CaptureBindingPattern) + ?.variableName?.value; + if (connectionName) { + const projectPath = StateMachine.context().projectPath; + const devantUrl = await this.getDevantConsoleUrl(); + + const selected = platformExtStore.getState().state?.selectedContext; + const matchingConnListItem = platformExtStore + .getState() + .state?.devantConns?.list.find( + (connItem) => connItem.name?.replaceAll("-", "_").replaceAll(" ", "_") === connectionName, + ); + if (matchingConnListItem) { + await this.deleteLocalConnectionsConfig({ + componentDir: projectPath, + connectionName: matchingConnListItem.name, + }); + if (matchingConnListItem?.componentId) { + await platformExt?.deleteConnection({ + componentPath: projectPath, + connectionId: matchingConnListItem.groupUuid, + connectionName: matchingConnListItem.name, + orgId: selected.org.id.toString(), + }); + } else { + window + .showInformationMessage( + "In-order to delete your project level Devant connection, please head over to Devant console", + "Open Devant", + ) + .then((resp) => { + if (resp === "Open Devant") { + vscode.env.openExternal( + Uri.parse( + `${devantUrl}/organizations/${selected.org.handle}/projects/${selected.project.id}/admin/connections`, + ), + ); + } + }); + } + } + } + } + + this.refreshConnectionList(); + StateMachine.setReadyMode(); + } catch (err) { + StateMachine.setReadyMode(); + window.showErrorMessage(`Failed to delete Devant connection: ${(err as Error).message}`); + log(`Failed to invoke deleteDevantConnection: ${err}`); + } + } + + async initializeDevantOASConnection( + params: InitializeDevantOASConnectionReq, + ): Promise { + try { + StateMachine.setEditMode(); + await this.generateCustomConnectorFromOAS({ + connectionName: params.name, + marketplaceItem: params.marketplaceItem, + securityType: params.securityType, + }); + const moduleName = params.name.replace(/[_\-\s]/g, "")?.toLowerCase(); + const configFileUri = getConfigFileUri(); + + const envIds = Object.keys(params.configurations || {}); + const firstEnvConfig = envIds.length > 0 ? params.configurations[envIds[0]] : undefined; + const connectionKeys = firstEnvConfig?.entries ?? {}; + + interface IkeyVal { + keyname: string; + envName: string; + } + interface Ikeys { + ChoreoAPIKey?: IkeyVal; + ServiceURL?: IkeyVal; + TokenURL?: IkeyVal; + ConsumerKey?: IkeyVal; + ConsumerSecret?: IkeyVal; + } + const keys: Ikeys = {}; + + const deleteTempConfigBalEdits = new WorkspaceEdit(); + const configBalFileUri = getConfigFileUri(); + + for (const entry of params.devantConfigs) { + if (entry.node) { + deleteTempConfigBalEdits.delete( + configBalFileUri, + new vscode.Range( + new vscode.Position(entry.node.position.startLine, entry.node.position.startColumn), + new vscode.Position(entry.node.position.endLine, entry.node.position.endColumn), + ), + ); + } + + keys[entry.id] = { + keyname: entry.name, + envName: connectionKeys[entry.id].envVariableName, + }; + } + if (deleteTempConfigBalEdits.size > 0) { + await updateSourceCode({ + textEdits: { [configBalFileUri.toString()]: deleteTempConfigBalEdits.get(configBalFileUri) || [] }, + skipPayloadCheck: true, + }); + } + + await addConfigurable( + configFileUri, + Object.values(keys).map((item) => ({ configName: item.keyname, configEnvName: item.envName })), + ); + + const requireProxy = [ + ServiceInfoVisibilityEnum.Organization.toString(), + ServiceInfoVisibilityEnum.Project.toString(), + ].includes(params.visibility); + + if (requireProxy) { + await addProxyConfigurable(configFileUri); + } + + const resp = await addConnection(params.name, moduleName, params.securityType, requireProxy, { + apiKeyVarName: keys?.ChoreoAPIKey?.keyname, + svsUrlVarName: keys?.ServiceURL?.keyname, + tokenClientIdVarName: keys?.ConsumerKey?.keyname, + tokenClientSecretVarName: keys?.ConsumerSecret?.keyname, + tokenUrlVarName: keys?.TokenURL?.keyname, + }); + + StateMachine.setReadyMode(); + return { connectionName: resp.connName }; + } catch (err) { + StateMachine.setReadyMode(); + window.showErrorMessage(`Failed to initialize Devant connection: ${(err as Error).message}`); + log(`Failed to initialize Devant connection: ${err}`); + } + } + + async generateCustomConnectorFromOAS( + params: GenerateCustomConnectorFromOASReq, + ): Promise { + try { + const platformExt = await this.getPlatformExt(); + const projectPath = StateMachine.context().projectPath; + + const serviceIdl = await platformExt?.getMarketplaceIdl({ + orgId: platformExtStore.getState().state?.selectedContext?.org.id?.toString(), + serviceId: params.marketplaceItem.serviceId, + }); + + const choreoDir = path.join(projectPath, ".choreo"); + if (!fs.existsSync(choreoDir)) { + fs.mkdirSync(choreoDir, { recursive: true }); + } + + const moduleName = params.connectionName.replace(/[_\-\s]/g, "")?.toLowerCase(); + const filePath = path.join(choreoDir, `${moduleName}-spec.yaml`); + + if (serviceIdl?.idlType === "OpenAPI" && serviceIdl.content) { + const updatedDef = processOpenApiWithApiKeyAuth(serviceIdl.content, params.securityType); + fs.writeFileSync(filePath, updatedDef, "utf8"); + } + + const diagram = new BiDiagramRpcManager(); + await diagram.generateOpenApiClient({ + module: moduleName, + openApiContractPath: filePath, + projectPath, + }); + + const connectors = await diagram.search({ + filePath: StateMachine.context().documentUri, + queryMap: { limit: 60 }, + searchKind: "CONNECTOR", + }); + + const localCategory = connectors?.categories?.find((item) => item.metadata?.label === "Local"); + if (localCategory) { + const matchingLocalConnector = localCategory?.items?.find( + (item) => (item as AvailableNode)?.codedata?.module === moduleName, + ); + if (matchingLocalConnector) { + return { connectionNode: matchingLocalConnector as AvailableNode }; + } + } + + return { connectionNode: null }; + } catch (err) { + StateMachine.setReadyMode(); + window.showErrorMessage(`Failed to invoke generateCustomConnectorFromOAS: ${(err as Error).message}`); + log(`Failed to invoke generateCustomConnectorFromOAS: ${err}`); + } + } + + async deleteDevantTempConfigs(params: DeleteDevantTempConfigReq): Promise { + try { + const configBalFileUri = getConfigFileUri(); + + const configBalEdits = new WorkspaceEdit(); + for (const node of params.nodes) { + configBalEdits.delete( + configBalFileUri, + new vscode.Range( + new vscode.Position(node.position.startLine, node.position.startColumn), + new vscode.Position(node.position.endLine, node.position.endColumn), + ), + ); + } + + await updateSourceCode({ + textEdits: { [configBalFileUri.toString()]: configBalEdits.get(configBalFileUri) || [] }, + skipPayloadCheck: true, + }); + } catch (err) { + log(`Failed to invoke deleteDevantTempConfigs: ${err}`); + } + } + + async addDevantTempConfig(params: AddDevantTempConfigReq): Promise { + try { + const configBalFileUri = getConfigFileUri(); + const syntaxTree = (await StateMachine.context().langClient.getSyntaxTree({ + documentIdentifier: { uri: configBalFileUri.toString() }, + })) as SyntaxTree; + + const newConfigEditLine = (syntaxTree?.syntaxTree?.position?.endLine ?? 0) + 1; + const configBalEdits = new WorkspaceEdit(); + + if (params.newLine) { + configBalEdits.insert( + configBalFileUri, + new vscode.Position(newConfigEditLine, 0), + Templates.emptyLine(), + ); + } + + const newConfigTemplate = Templates.newDefaultEnvConfigurable({ CONFIG_NAME: params.name }); + configBalEdits.insert(configBalFileUri, new vscode.Position(newConfigEditLine, 0), newConfigTemplate); + + await updateSourceCode({ + textEdits: { [configBalFileUri.toString()]: configBalEdits.get(configBalFileUri) || [] }, + skipPayloadCheck: true, + }); + + const updatedSyntaxTree = (await StateMachine.context().langClient.getSyntaxTree({ + documentIdentifier: { uri: configBalFileUri.toString() }, + })) as SyntaxTree; + + const matchingConfig = (updatedSyntaxTree?.syntaxTree as ModulePart)?.members?.find((member) => { + return ( + (member.typedBindingPattern?.bindingPattern as CaptureBindingPattern)?.variableName?.value === + params.name + ); + }); + if (STKindChecker.isModuleVarDecl(matchingConfig)) { + return { configNode: matchingConfig }; + } + + throw new Error("failed to add new temp config"); + } catch (err) { + log(`Failed to invoke addDevantTempConfig: ${err}`); + } + } + + async registerDevantMarketplaceService(params: RegisterDevantMarketplaceServiceReq): Promise { + try { + const platformExt = await this.getPlatformExt(); + + const marketplaceItems = await platformExt?.getMarketplaceItems({ + orgId: platformExtStore.getState().state?.selectedContext?.org?.id?.toString(), + request: { + query: params.name, + limit: 100, + networkVisibilityFilter: "all", + sortBy: "createdTime", + }, + }); + + let idlContent = ""; + if (params.idlFilePath) { + // read contents of idlFilePath and convert it to base64 + const idlFileContent = await fs.promises.readFile(params.idlFilePath, { encoding: "utf-8" }); + idlContent = Buffer.from(idlFileContent).toString("base64"); + } + + const envs = await platformExt?.getProjectEnvs({ + orgId: platformExtStore.getState().state?.selectedContext?.org?.id?.toString(), + orgUuid: platformExtStore.getState().state?.selectedContext?.org?.uuid, + projectId: platformExtStore.getState().state?.selectedContext?.project?.id, + }); + + const configs: RegisterMarketplaceConfigMap = {}; + for (const env of envs) { + const endpointName = `${env.name}Endpoint`; + if (env.critical) { + configs[endpointName] = { + name: endpointName, + environmentTemplateIds: [env.templateId], + values: params.configs?.map((item) => ({ key: item.id, value: "" })), + }; + } else { + configs[endpointName] = { + name: endpointName, + environmentTemplateIds: [env.templateId], + values: params.configs?.map((item) => ({ key: item.id, value: item.value || "" })), + }; + } + } + + const registeredMarketplaceItem = await platformExt?.registerMarketplaceConnection({ + orgId: platformExtStore.getState().state?.selectedContext?.org?.id?.toString(), + orgUuid: platformExtStore.getState().state?.selectedContext?.org?.uuid, + projectId: platformExtStore.getState().state?.selectedContext?.project?.id, + serviceType: params.serviceType, + idlType: params.idlType, + idlContent, + configs, + schemaEntries: params.configs?.map((item) => ({ + name: item.id, + type: "string", + isSensitive: item.isSecret, + })), + name: findUniqueConnectionName(params.name, marketplaceItems.data), + }); + + const marketplaceService = await platformExt?.getMarketplaceItem({ + orgId: platformExtStore.getState().state?.selectedContext?.org?.id?.toString(), + serviceId: registeredMarketplaceItem.serviceId, + }); + + return marketplaceService; + } catch (err) { + window.showErrorMessage(`Failed to create Devant connection: ${(err as Error).message}`); + log(`Failed to invoke registerDevantMarketplaceService: ${err}`); + } + } + + async replaceDevantTempConfigValues(params: ReplaceDevantTempConfigValuesReq): Promise { + try { + const syntaxTree = (await StateMachine.context().langClient.getSyntaxTree({ + documentIdentifier: { uri: getConfigFileUri().toString() }, + })) as SyntaxTree; + + const envIds = Object.keys(params.createdConnection.configurations || {}); + const firstEnvConfig = envIds.length > 0 ? params.createdConnection.configurations[envIds[0]] : undefined; + const connectionKeys = firstEnvConfig?.entries ?? {}; + + let hasUpdatedConfig = false; + const configBalEdits = new WorkspaceEdit(); + + for (const config of params.configs) { + const matchingConfigEntry = Object.values(connectionKeys).find((item) => item.key === config.id); + let matchingNode: ModuleVarDecl = config.node as ModuleVarDecl; + if (!matchingNode) { + matchingNode = (syntaxTree?.syntaxTree as ModulePart)?.members?.find( + (member) => + STKindChecker.isModuleVarDecl(member) && + (member.typedBindingPattern?.bindingPattern as CaptureBindingPattern)?.variableName?.value === config.name, + ) as ModuleVarDecl; + } + if (matchingConfigEntry && matchingNode) { + let value = `os:getEnv("${matchingConfigEntry.envVariableName}")`; + if (config.type === "int") { + value = `check int:fromString(os:getEnv("${matchingConfigEntry.envVariableName}"))`; + } + hasUpdatedConfig = true; + configBalEdits.replace( + getConfigFileUri(), + new vscode.Range( + new vscode.Position( + matchingNode.initializer.position.startLine, + matchingNode.initializer.position.startColumn, + ), + new vscode.Position( + matchingNode.initializer.position.endLine, + matchingNode.initializer.position.endColumn, + ), + ), + value, + ); + } + } + + if (hasUpdatedConfig) { + if ( + !(syntaxTree?.syntaxTree as ModulePart)?.imports?.some((item) => + item.source?.includes("import ballerina/os"), + ) + ) { + const balOsImportTemplate = Templates.importBalOs(); + configBalEdits.insert(getConfigFileUri(), new vscode.Position(0, 0), balOsImportTemplate); + } + + await updateSourceCode({ + textEdits: { [getConfigFileUri().toString()]: configBalEdits.get(getConfigFileUri()) || [] }, + skipPayloadCheck: true, + }); + } + } catch (err) { + window.showErrorMessage(`Failed to invoke replaceDevantTempConfigValues: ${(err as Error).message}`); + log(`Failed to invoke replaceDevantTempConfigValues: ${err}`); + } + } + + debouncedRefreshConnectionList = debounce(() => this.refreshConnectionList(), 500); + + async refreshConnectionList(): Promise { + try { + platformExtStore.getState().setConnectionState({ loading: true }); + const connections = await this.getAllConnections(); + platformExtStore.getState().setConnectionState({ list: connections, loading: false }); + // TODO in order to improve speed during debugging, we need to bring cache connections secrets in Devant + /* + 1. store connection with secret info in bal ext + 2. start proxy server. need to pass secure host list. + 3. leave the server running + 4. on extension exit, kill the server if its running + */ + } catch (err) { + platformExtStore.getState().setConnectionState({ loading: false }); + log(`Failed to refresh connection list: ${err}`); + } + } +} diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/platform-ext/types.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/platform-ext/types.ts new file mode 100644 index 00000000000..9cf600ff8ff --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/platform-ext/types.ts @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export interface DeleteBiDevantConnectionReq { + filePath: string; + startLine: number; + startColumn: number; + endLine: number; + endColumn: number; +} + +// OpenAPI 3.0 type definitions +export interface OpenAPISecurityScheme { + type: "apiKey" | "http" | "oauth2" | "openIdConnect"; + description?: string; + name?: string; + in?: "query" | "header" | "cookie"; + scheme?: string; + bearerFormat?: string; + flows?: any; + openIdConnectUrl?: string; + "x-ballerina-name"?: string; +} + +export interface OpenAPIComponents { + schemas?: Record; + responses?: Record; + parameters?: Record; + examples?: Record; + requestBodies?: Record; + headers?: Record; + securitySchemes?: Record; + links?: Record; + callbacks?: Record; +} + +export interface OpenAPIInfo { + title: string; + version: string; + description?: string; + termsOfService?: string; + contact?: any; + license?: any; +} + +export interface OpenAPIDefinition { + openapi: string; + info: OpenAPIInfo; + servers?: any[]; + paths: Record; + components?: OpenAPIComponents; + security?: any[]; + tags?: any[]; + externalDocs?: any; +} diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/service-designer/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/service-designer/rpc-manager.ts index 3b1d9b53be3..c743ef98db1 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/service-designer/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/service-designer/rpc-manager.ts @@ -171,7 +171,7 @@ export class ServiceDesignerRpcManager implements ServiceDesignerAPI { this.ensureFileExists(targetFile); params.filePath = targetFile; const res: ListenerSourceCodeResponse = await context.langClient.updateListenerSourceCode(params); - const artifacts = await updateSourceCode({ textEdits: res.textEdits, artifactData: { artifactType: DIRECTORY_MAP.LISTENER }, description: params.listener.name + ' Update' }); + const artifacts = await updateSourceCode({ textEdits: res.textEdits, description: params.listener.name + ' Update' }); const result: UpdatedArtifactsResponse = { artifacts: artifacts }; diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/test-manager/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/test-manager/rpc-handler.ts index 8809c1bdbd9..eb29639dc5c 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/test-manager/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/test-manager/rpc-handler.ts @@ -15,8 +15,8 @@ * specific language governing permissions and limitations * under the License. */ -import { addTestFunction, getTestFunction, GetTestFunctionRequest, - AddOrUpdateTestFunctionRequest, updateTestFunction } from "@wso2/ballerina-core"; +import { addTestFunction, getTestFunction, GetTestFunctionRequest, + AddOrUpdateTestFunctionRequest, updateTestFunction, getEvalsets, GetEvalsetsRequest } from "@wso2/ballerina-core"; import { Messenger } from "vscode-messenger"; import { TestServiceManagerRpcManager } from "./rpc-manager"; @@ -25,5 +25,6 @@ export function registerTestManagerRpcHandlers(messenger: Messenger) { messenger.onRequest(getTestFunction, (args: GetTestFunctionRequest) => rpcManger.getTestFunction(args)); messenger.onRequest(addTestFunction, (args: AddOrUpdateTestFunctionRequest) => rpcManger.addTestFunction(args)); messenger.onRequest(updateTestFunction, (args: AddOrUpdateTestFunctionRequest) => rpcManger.updateTestFunction(args)); + messenger.onRequest(getEvalsets, (args: GetEvalsetsRequest) => rpcManger.getEvalsets(args)); } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/test-manager/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/test-manager/rpc-manager.ts index 40bf18f8eb5..416b216b8bc 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/test-manager/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/test-manager/rpc-manager.ts @@ -24,12 +24,17 @@ import { SyntaxTree, TestManagerServiceAPI, TestSourceEditResponse, + GetEvalsetsRequest, + GetEvalsetsResponse, + EvalsetItem, } from "@wso2/ballerina-core"; import { ModulePart, NodePosition, STKindChecker } from "@wso2/syntax-tree"; import * as fs from 'fs'; import { existsSync, writeFileSync } from "fs"; import { StateMachine } from "../../stateMachine"; import { updateSourceCode } from "../../utils/source-utils"; +import * as vscode from 'vscode'; +import * as path from 'path'; export class TestServiceManagerRpcManager implements TestManagerServiceAPI { @@ -85,4 +90,50 @@ export class TestServiceManagerRpcManager implements TestManagerServiceAPI { } }); } + + async getEvalsets(params: GetEvalsetsRequest): Promise { + return new Promise(async (resolve) => { + try { + const pattern = params.projectPath + ? new vscode.RelativePattern(vscode.Uri.file(params.projectPath), '**/evalsets/**/*.evalset.json') + : '**/evalsets/**/*.evalset.json'; + const evalsetFiles = await vscode.workspace.findFiles(pattern); + const evalsets: EvalsetItem[] = []; + + for (const uri of evalsetFiles) { + try { + const content = await fs.promises.readFile(uri.fsPath, 'utf-8'); + const evalsetData = JSON.parse(content); + + // Validate the evalset structure + if (!evalsetData.threads || !Array.isArray(evalsetData.threads)) { + continue; + } + + const threadCount = evalsetData.threads.length; + const name = evalsetData.name || path.basename(uri.fsPath, '.evalset.json'); + const description = evalsetData.description || ''; + const filePath = params.projectPath + ? path.relative(params.projectPath, uri.fsPath) + : uri.fsPath; + + evalsets.push({ + id: evalsetData.id || uri.fsPath, + name: name, + filePath: filePath, + threadCount: threadCount, + description: description + }); + } catch (error) { + console.error(`Failed to parse evalset file ${uri.fsPath}:`, error); + } + } + + resolve({ evalsets }); + } catch (error) { + console.error('Failed to get evalsets:', error); + resolve({ evalsets: [] }); + } + }); + } } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-handler.ts index 32b05613080..cd6b5325152 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-handler.ts @@ -26,18 +26,25 @@ import { goBack, goHome, goSelected, + handleApprovalPopupClose, + HandleApprovalPopupCloseRequest, HistoryEntry, joinProjectPath, JoinProjectPathRequest, openView, OpenViewRequest, redo, + reopenApprovalView, + ReopenApprovalViewRequest, resetUndoRedoStack, + saveEvalThread, + SaveEvalThreadRequest, undo, undoRedoState, updateCurrentArtifactLocation, UpdatedArtifactsResponse, - reviewAccepted + reviewAccepted, + GoBackRequest } from "@wso2/ballerina-core"; import { Messenger } from "vscode-messenger"; import { VisualizerRpcManager } from "./rpc-manager"; @@ -47,7 +54,7 @@ export function registerVisualizerRpcHandlers(messenger: Messenger) { messenger.onNotification(openView, (args: OpenViewRequest) => rpcManger.openView(args)); messenger.onRequest(getHistory, () => rpcManger.getHistory()); messenger.onNotification(addToHistory, (args: HistoryEntry) => rpcManger.addToHistory(args)); - messenger.onNotification(goBack, () => rpcManger.goBack()); + messenger.onNotification(goBack, (args: GoBackRequest) => rpcManger.goBack(args)); messenger.onNotification(goHome, () => rpcManger.goHome()); messenger.onNotification(goSelected, (args: number) => rpcManger.goSelected(args)); messenger.onRequest(undo, (count: number) => rpcManger.undo(count)); @@ -59,4 +66,7 @@ export function registerVisualizerRpcHandlers(messenger: Messenger) { messenger.onRequest(getThemeKind, () => rpcManger.getThemeKind()); messenger.onRequest(updateCurrentArtifactLocation, (args: UpdatedArtifactsResponse) => rpcManger.updateCurrentArtifactLocation(args)); messenger.onNotification(reviewAccepted, () => rpcManger.reviewAccepted()); + messenger.onNotification(handleApprovalPopupClose, (args: HandleApprovalPopupCloseRequest) => rpcManger.handleApprovalPopupClose(args)); + messenger.onNotification(reopenApprovalView, (args: ReopenApprovalViewRequest) => rpcManger.reopenApprovalView(args)); + messenger.onRequest(saveEvalThread, (args: SaveEvalThreadRequest) => rpcManger.saveEvalThread(args)); } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-manager.ts index 7a271dee1c2..b56b39bb8ba 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-manager.ts @@ -19,6 +19,8 @@ import { AddToUndoStackRequest, ColorThemeKind, EVENT_TYPE, + GoBackRequest, + HandleApprovalPopupCloseRequest, HistoryEntry, JoinProjectPathRequest, JoinProjectPathResponse, @@ -26,6 +28,9 @@ import { OpenViewRequest, PopupVisualizerLocation, ProjectStructureArtifactResponse, + ReopenApprovalViewRequest, + SaveEvalThreadRequest, + SaveEvalThreadResponse, SHARED_COMMANDS, undo, UndoRedoStateResponse, @@ -34,9 +39,11 @@ import { VisualizerLocation } from "@wso2/ballerina-core"; import fs from "fs"; +import path from "path"; import { commands, Range, Uri, window, workspace, WorkspaceEdit } from "vscode"; import { URI, Utils } from "vscode-uri"; import { notifyCurrentWebview } from "../../RPCLayer"; +import { approvalViewManager } from "../../features/ai/state/ApprovalViewManager"; import { history, openView, StateMachine, undoRedoManager, updateView } from "../../stateMachine"; import { openPopupView } from "../../stateMachinePopup"; import { ArtifactNotificationHandler, ArtifactsUpdated } from "../../utils/project-artifacts-handler"; @@ -59,9 +66,9 @@ export class VisualizerRpcManager implements VisualizerAPI { }); } - goBack(): void { + goBack(params: GoBackRequest): void { history.pop(); - updateView(); + updateView(false, params?.identifier); } async getHistory(): Promise { @@ -232,7 +239,7 @@ export class VisualizerRpcManager implements VisualizerAPI { return; } const filePath = Array.isArray(params.segments) ? Utils.joinPath(URI.file(projectPath), ...params.segments) : Utils.joinPath(URI.file(projectPath), params.segments); - resolve({ filePath: filePath.fsPath, projectPath: projectPath }); + resolve({ filePath: filePath.fsPath, projectPath: projectPath, exists: params.checkExists ? fs.existsSync(filePath.fsPath) : undefined }); }); } async undoRedoState(): Promise { @@ -293,14 +300,102 @@ export class VisualizerRpcManager implements VisualizerAPI { } reviewAccepted(): void { - // When user accepts changes in review mode, navigate back to normal view console.log("Review accepted - changes will be kept"); - // Navigate to package overview - openView( - EVENT_TYPE.OPEN_VIEW, - { - view: MACHINE_VIEW.PackageOverview + + const currentHistory = history.get(); + const currentEntry = currentHistory[currentHistory.length - 1]; + + // If currently in review mode, drop it and restore the last non-review entry. + if (currentEntry?.location.view === MACHINE_VIEW.ReviewMode) { + history.pop(); + } + + // Restore the latest history entry when available. + if (history.get().length > 0) { + updateView(); + return; + } + + // If history is empty, fallback to the default overview. + const isWithinBallerinaWorkspace = !!StateMachine.context().workspacePath; + openView(EVENT_TYPE.OPEN_VIEW, { + view: isWithinBallerinaWorkspace + ? MACHINE_VIEW.WorkspaceOverview + : MACHINE_VIEW.PackageOverview + }); + } + + handleApprovalPopupClose(params: HandleApprovalPopupCloseRequest): void { + approvalViewManager.handlePopupClosed(params.requestId); + } + + reopenApprovalView(params: ReopenApprovalViewRequest): void { + approvalViewManager.reopenApprovalViewPopup(params.requestId); + } + + async saveEvalThread(params: SaveEvalThreadRequest): Promise { + try { + const { filePath, updatedEvalSet } = params; + + // Validate and canonicalize the file path to prevent path traversal attacks + const normalizedPath = path.normalize(filePath); + const resolvedPath = path.resolve(normalizedPath); + + // Get workspace folders to validate the path is within an allowed workspace + const workspaceFolders = workspace.workspaceFolders; + if (!workspaceFolders || workspaceFolders.length === 0) { + const errorMsg = 'No workspace folder is open'; + console.error('saveEvalThread error:', errorMsg); + window.showErrorMessage(`Failed to save evalset: ${errorMsg}`); + return { success: false, error: errorMsg }; + } + + // Check if the resolved path starts with any of the workspace roots + const isPathInWorkspace = workspaceFolders.some(folder => { + const workspaceRoot = folder.uri.fsPath; + const resolvedWorkspaceRoot = path.resolve(workspaceRoot); + return resolvedPath.startsWith(resolvedWorkspaceRoot + path.sep) || + resolvedPath === resolvedWorkspaceRoot; + }); + + if (!isPathInWorkspace) { + const errorMsg = `Path is outside workspace: ${resolvedPath}`; + console.error('saveEvalThread error:', errorMsg); + window.showErrorMessage(`Failed to save evalset: Path must be within workspace`); + return { success: false, error: errorMsg }; } - ); + + // Write the updated evalset back to the file using the validated path + await fs.promises.writeFile( + resolvedPath, + JSON.stringify(updatedEvalSet, null, 2), + 'utf-8' + ); + + // Read back the file to get fresh data + const savedContent = await fs.promises.readFile(resolvedPath, 'utf-8'); + const savedEvalSet = JSON.parse(savedContent); + + // Get the current threadId from context + const currentContext = StateMachine.context(); + const threadId = currentContext.evalsetData?.threadId; + + // Reload the view with fresh data from disk using the validated path + openView(EVENT_TYPE.OPEN_VIEW, { + view: MACHINE_VIEW.EvalsetViewer, + evalsetData: { + filePath: resolvedPath, + content: savedEvalSet, + threadId + } + }); + + window.showInformationMessage('Evalset saved successfully'); + return { success: true }; + } catch (error) { + console.error('Error saving evalset:', error); + window.showErrorMessage(`Failed to save evalset: ${error}`); + return { success: false, error: String(error) }; + } } } diff --git a/workspaces/ballerina/ballerina-extension/src/stateMachine.ts b/workspaces/ballerina/ballerina-extension/src/stateMachine.ts index 87e89eef813..e68ed8d174f 100644 --- a/workspaces/ballerina/ballerina-extension/src/stateMachine.ts +++ b/workspaces/ballerina/ballerina-extension/src/stateMachine.ts @@ -310,11 +310,13 @@ const stateMachine = createMachine( type: (context, event) => event.viewLocation?.type, isGraphql: (context, event) => event.viewLocation?.isGraphql, metadata: (context, event) => event.viewLocation?.metadata, + agentMetadata: (context, event) => event.viewLocation?.agentMetadata, addType: (context, event) => event.viewLocation?.addType, dataMapperMetadata: (context, event) => event.viewLocation?.dataMapperMetadata, artifactInfo: (context, event) => event.viewLocation?.artifactInfo, rootDiagramId: (context, event) => event.viewLocation?.rootDiagramId, reviewData: (context, event) => event.viewLocation?.reviewData, + evalsetData: (context, event) => event.viewLocation?.evalsetData, isViewUpdateTransition: false }), (context, event) => notifyTreeView( @@ -375,8 +377,10 @@ const stateMachine = createMachine( position: (context, event) => event.data.position, syntaxTree: (context, event) => event.data.syntaxTree, focusFlowDiagramView: (context, event) => event.data.focusFlowDiagramView, + agentMetadata: (context, event) => event.data.agentMetadata, dataMapperMetadata: (context, event) => event.data.dataMapperMetadata, reviewData: (context, event) => event.data.reviewData, + evalsetData: (context, event) => event.data.evalsetData, isViewUpdateTransition: false }) } @@ -399,11 +403,13 @@ const stateMachine = createMachine( type: (context, event) => event.viewLocation?.type, isGraphql: (context, event) => event.viewLocation?.isGraphql, metadata: (context, event) => event.viewLocation?.metadata, + agentMetadata: (context, event) => event.viewLocation?.agentMetadata, addType: (context, event) => event.viewLocation?.addType, dataMapperMetadata: (context, event) => event.viewLocation?.dataMapperMetadata, artifactInfo: (context, event) => event.viewLocation?.artifactInfo, rootDiagramId: (context, event) => event.viewLocation?.rootDiagramId, reviewData: (context, event) => event.viewLocation?.reviewData, + evalsetData: (context, event) => event.viewLocation?.evalsetData, isViewUpdateTransition: false }), (context, event) => notifyTreeView( @@ -424,10 +430,16 @@ const stateMachine = createMachine( identifier: (context, event) => event.viewLocation.identifier, serviceType: (context, event) => event.viewLocation.serviceType, type: (context, event) => event.viewLocation?.type, + agentMetadata: (context, event) => event.viewLocation?.agentMetadata, isGraphql: (context, event) => event.viewLocation?.isGraphql, addType: (context, event) => event.viewLocation?.addType, dataMapperMetadata: (context, event) => event.viewLocation?.dataMapperMetadata, reviewData: (context, event) => event.viewLocation?.reviewData, + evalsetData: (context, event) => event.viewLocation?.evalsetData, + metadata: (context, event) => event.viewLocation?.metadata ? { + ...context.metadata, + ...event.viewLocation.metadata + } : context.metadata, isViewUpdateTransition: true }), (context, event) => notifyTreeView( @@ -652,8 +664,10 @@ const stateMachine = createMachine( type: context?.type, isGraphql: context?.isGraphql, addType: context?.addType, + agentMetadata: context?.agentMetadata, dataMapperMetadata: context?.dataMapperMetadata, - reviewData: context?.reviewData + reviewData: context?.reviewData, + evalsetData: context?.evalsetData } }); return resolve(); @@ -845,7 +859,10 @@ export function openView(type: EVENT_TYPE, viewLocation: VisualizerLocation, res stateService.send({ type: type, viewLocation: viewLocation }); } -export function updateView(refreshTreeView?: boolean) { +export function updateView(refreshTreeView?: boolean, updatedIdentifier?: string) { + if (StateMachinePopup.isActive()) { + return; + } let lastView = getLastHistory(); // Step over to the next location if the last view is skippable if (!refreshTreeView && lastView?.location.view.includes("SKIP")) { @@ -871,12 +888,12 @@ export function updateView(refreshTreeView?: boolean) { // These changes will be revisited in the revamp project.directoryMap[targetedArtifactType].forEach((artifact: ProjectStructureArtifactResponse) => { - if (artifact.id === currentIdentifier || artifact.name === currentIdentifier) { + if (artifact.id === currentIdentifier || artifact.name === currentIdentifier || artifact.id === updatedIdentifier || artifact.name === updatedIdentifier) { currentArtifact = artifact; } // Check if artifact has resources and find within those if (artifact.resources && artifact.resources.length > 0) { - const resource = artifact.resources.find((resource: ProjectStructureArtifactResponse) => resource.id === currentIdentifier || resource.name === currentIdentifier); + const resource = artifact.resources.find((resource: ProjectStructureArtifactResponse) => resource.id === currentIdentifier || resource.name === currentIdentifier || resource.id === updatedIdentifier || resource.name === updatedIdentifier); if (resource) { currentArtifact = resource; } diff --git a/workspaces/ballerina/ballerina-extension/src/stateMachinePopup.ts b/workspaces/ballerina/ballerina-extension/src/stateMachinePopup.ts index b0506e90673..0764575e099 100644 --- a/workspaces/ballerina/ballerina-extension/src/stateMachinePopup.ts +++ b/workspaces/ballerina/ballerina-extension/src/stateMachinePopup.ts @@ -66,6 +66,7 @@ const stateMachinePopup = createMachine({ identifier: (context, event) => event.viewLocation.identifier, documentUri: (context, event) => event.viewLocation.documentUri, metadata: (context, event) => event.viewLocation.metadata, + agentMetadata: (context, event) => event.viewLocation?.agentMetadata, dataMapperMetadata: (context, event) => event.viewLocation?.dataMapperMetadata }) }, @@ -85,6 +86,7 @@ const stateMachinePopup = createMachine({ identifier: (context, event) => event.viewLocation.identifier, documentUri: (context, event) => event.viewLocation.documentUri, metadata: (context, event) => event.viewLocation.metadata, + agentMetadata: (context, event) => event.viewLocation?.agentMetadata, dataMapperMetadata: (context, event) => event.viewLocation?.dataMapperMetadata }) }, @@ -96,6 +98,7 @@ const stateMachinePopup = createMachine({ identifier: (context, event) => event.viewLocation.identifier, documentUri: (context, event) => event.viewLocation.documentUri, metadata: (context, event) => event.viewLocation.metadata, + agentMetadata: (context, event) => event.viewLocation?.agentMetadata, dataMapperMetadata: (context, event) => event.viewLocation?.dataMapperMetadata }) }, diff --git a/workspaces/ballerina/ballerina-extension/src/utils/ai/auth.ts b/workspaces/ballerina/ballerina-extension/src/utils/ai/auth.ts index ae521dc1807..4aab9de58b6 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/ai/auth.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/ai/auth.ts @@ -18,16 +18,32 @@ import * as vscode from 'vscode'; import { extension } from "../../BalExtensionContext"; -import { AUTH_CLIENT_ID, AUTH_ORG, getDevantExchangeUrl } from '../../features/ai/utils'; +import { DEVANT_TOKEN_EXCHANGE_URL } from '../../features/ai/utils'; import axios from 'axios'; +import { AuthCredentials, BIIntelSecrets, LoginMethod } from '@wso2/ballerina-core'; +import { IWso2PlatformExtensionAPI } from '@wso2/wso2-platform-core'; import { jwtDecode, JwtPayload } from 'jwt-decode'; -import { AuthCredentials, DevantEnvSecrets, LoginMethod } from '@wso2/ballerina-core'; -import { checkDevantEnvironment } from '../../views/ai-panel/utils'; -import { getDevantStsToken } from '../../features/devant/activator'; +import { WI_EXTENSION_ID } from '../config'; -export const REFRESH_TOKEN_NOT_AVAILABLE_ERROR_MESSAGE = "Refresh token is not available."; +export const TOKEN_NOT_AVAILABLE_ERROR_MESSAGE = "Access token is not available."; export const TOKEN_REFRESH_ONLY_SUPPORTED_FOR_BI_INTEL = "Token refresh is only supported for BI Intelligence authentication"; -export const AUTH_CREDENTIALS_SECRET_KEY = 'BallerinaAuthCredentials'; +export const AUTH_CREDENTIALS_SECRET_KEY = 'CopilotAuthCredentials'; +export const NO_AUTH_CREDENTIALS_FOUND = "No authentication credentials found."; + +/** + * Get the WSO2 Platform extension API, activating it if needed. + * Returns undefined if the extension is not installed. + */ +export const getPlatformExtensionAPI = async (): Promise => { + const platformExt = vscode.extensions.getExtension(WI_EXTENSION_ID); + if (!platformExt) { + return undefined; + } + if (!platformExt.isActive) { + await platformExt.activate(); + } + return platformExt.exports?.cloudAPIs as IWso2PlatformExtensionAPI; +}; //TODO: What if user doesnt have github copilot. //TODO: Where does auth git get triggered @@ -102,7 +118,7 @@ vscode.authentication.onDidChangeSessions(async e => { await extension.context.secrets.delete('GITHUB_COPILOT_TOKEN'); await extension.context.secrets.delete('GITHUB_TOKEN'); } else { - //it could be a login(which we havent captured) or a logout + //it could be a login(which we havent captured) or a logout // vscode.window.showInformationMessage( // 'WSO2 Integrator: BI supports completions with GitHub Copilot.', // 'Login with GitHub Copilot' @@ -120,6 +136,88 @@ async function copilotTokenExists() { return copilotToken !== undefined && copilotToken !== ''; } +// ================================== +// Platform Extension (Devant) Auth Utils +// ================================== + +/** + * Check if the WSO2 Platform extension is installed + */ +export const isPlatformExtensionAvailable = (): boolean => { + return !!vscode.extensions.getExtension(WI_EXTENSION_ID); +}; + +/** + * Get STS token from the platform extension + */ +export const getPlatformStsToken = async (): Promise => { + try { + const api = await getPlatformExtensionAPI(); + if (!api) { + return undefined; + } + return await api.getStsToken(); + } catch (error) { + console.error('Error getting STS token from platform extension:', error); + return undefined; + } +}; + +/** + * Check if user is logged into Devant via platform extension + */ +export const isDevantUserLoggedIn = async (): Promise => { + try { + const api = await getPlatformExtensionAPI(); + if (!api) { + return false; + } + return api.isLoggedIn(); + } catch (error) { + console.error('Error checking Devant login status:', error); + return false; + } +}; + +/** + * Exchange STS token for Copilot token via the token exchange endpoint + */ +export const exchangeStsToCopilotToken = async (stsToken: string): Promise => { + try { + const response = await axios.post(DEVANT_TOKEN_EXCHANGE_URL, { + subjectToken: stsToken + }, { + headers: { 'Content-Type': 'application/json' }, + validateStatus: () => true + }); + + if (response.status === 201 || response.status === 200) { + const { access_token, expires_in } = response.data; + return { + accessToken: access_token, + expiresAt: Date.now() + (expires_in * 1000) + }; + } + + throw new Error(response.data?.message || response.data?.reason || `Status ${response.status}`); + } catch (error) { + const reason = error instanceof Error ? error.message : 'Unknown error'; + vscode.window.showErrorMessage(`BI Copilot authentication failed: ${reason}`); + throw error; + } +}; + +/** + * Refresh the Copilot token using the STS token from platform extension + */ +export const refreshTokenViaStsExchange = async (): Promise => { + const stsToken = await getPlatformStsToken(); + if (!stsToken) { + throw new Error('Failed to get STS token from platform extension'); + } + return await exchangeStsToCopilotToken(stsToken); +}; + // ================================== // Structured Auth Credentials Utils // ================================== @@ -150,16 +248,11 @@ export const clearAuthCredentials = async (): Promise => { // BI Copilot Auth Utils // ================================== export const getLoginMethod = async (): Promise => { - // Priority 1: Check devant environment first - const devantCredentials = await checkDevantEnvironment(); - if (devantCredentials) { - return devantCredentials.loginMethod; - } - - // Priority 2: Check stored credentials + // Priority 1: Check Anthropic API key from environment if (process.env.ANTHROPIC_API_KEY && process.env.ANTHROPIC_API_KEY.trim() !== "") { return LoginMethod.ANTHROPIC_KEY; } + // Priority 2: Check stored credentials const credentials = await getAuthCredentials(); if (credentials) { return credentials.loginMethod; @@ -170,50 +263,42 @@ export const getLoginMethod = async (): Promise => { export const getAccessToken = async (): Promise => { return new Promise(async (resolve, reject) => { try { - // Priority 1: Check devant environment (highest priority) - const devantCredentials = await checkDevantEnvironment(); - if (devantCredentials) { - resolve(devantCredentials); - return; - } - - // Priority 2: Check stored credentials + // Priority 1: Check Anthropic API key from environment if (process.env.ANTHROPIC_API_KEY && process.env.ANTHROPIC_API_KEY.trim() !== "") { - resolve({loginMethod: LoginMethod.ANTHROPIC_KEY, secrets: {apiKey: process.env.ANTHROPIC_API_KEY.trim()}}); + resolve({ loginMethod: LoginMethod.ANTHROPIC_KEY, secrets: { apiKey: process.env.ANTHROPIC_API_KEY.trim() } }); return; } + // Priority 2: Check stored credentials const credentials = await getAuthCredentials(); if (credentials) { switch (credentials.loginMethod) { case LoginMethod.BI_INTEL: try { - const { accessToken } = credentials.secrets; - let finalToken = accessToken; - - // Decode token and check expiration - const decoded = jwtDecode(accessToken); - const now = Math.floor(Date.now() / 1000); - if (decoded.exp && decoded.exp < now) { - finalToken = await getRefreshedAccessToken(); + const secrets = credentials.secrets as BIIntelSecrets; + let finalSecrets = secrets; + + // Check expiration with 5-minute buffer using expiresAt + const now = Date.now(); + const bufferMs = 5 * 60 * 1000; // 5 minutes + const isExpired = secrets.expiresAt && (secrets.expiresAt - bufferMs) < now; + + if (isExpired) { + await getRefreshedAccessToken(); + // Get updated credentials after refresh + const updatedCreds = await getAuthCredentials(); + if (updatedCreds && updatedCreds.loginMethod === LoginMethod.BI_INTEL) { + finalSecrets = updatedCreds.secrets as BIIntelSecrets; + } } resolve({ loginMethod: LoginMethod.BI_INTEL, - secrets: { - accessToken: finalToken, - refreshToken: credentials.secrets.refreshToken - } + secrets: finalSecrets }); return; - } catch (err) { - if (axios.isAxiosError(err)) { - const status = err.response?.status; - if (status === 400) { - reject(new Error("TOKEN_EXPIRED")); - return; - } - } - reject(err); + } catch (err: any) { + // Any failure to refresh BI_INTEL token means user needs to re-login + reject(new Error("TOKEN_EXPIRED")); return; } @@ -221,11 +306,11 @@ export const getAccessToken = async (): Promise => resolve(credentials); return; - case LoginMethod.DEVANT_ENV: + case LoginMethod.AWS_BEDROCK: resolve(credentials); return; - case LoginMethod.AWS_BEDROCK: + case LoginMethod.VERTEX_AI: resolve(credentials); return; @@ -256,113 +341,68 @@ export const getAwsBedrockCredentials = async (): Promise<{ return credentials.secrets; }; +// ================================== +// Unique user identifier for BIIntel +// ================================== +export const getBiIntelId = async (): Promise => { + try { + const credentials = await getAuthCredentials(); + if (!credentials || credentials.loginMethod !== LoginMethod.BI_INTEL) { + return undefined; + } + + const { accessToken } = credentials.secrets; + const decoded = jwtDecode(accessToken); + return decoded.sub; + } catch (error) { + console.error('Error decoding JWT token:', error); + return undefined; + } +}; + + +export const getVertexAiCredentials = async (): Promise<{ + projectId: string; + location: string; + clientEmail: string; + privateKey: string; +} | undefined> => { + const credentials = await getAuthCredentials(); + if (!credentials || credentials.loginMethod !== LoginMethod.VERTEX_AI) { + return undefined; + } + return credentials.secrets; +}; + export const getRefreshedAccessToken = async (): Promise => { return new Promise(async (resolve, reject) => { - const CommonReqHeaders = { - 'Content-Type': 'application/x-www-form-urlencoded; charset=utf8', - 'Accept': 'application/json' - }; - try { const credentials = await getAuthCredentials(); if (!credentials || credentials.loginMethod !== LoginMethod.BI_INTEL) { throw new Error(TOKEN_REFRESH_ONLY_SUPPORTED_FOR_BI_INTEL); } - const { refreshToken } = credentials.secrets; - if (!refreshToken) { - reject(new Error(REFRESH_TOKEN_NOT_AVAILABLE_ERROR_MESSAGE)); - return; - } - - const params = new URLSearchParams({ - client_id: AUTH_CLIENT_ID, - refresh_token: refreshToken, - grant_type: 'refresh_token', - scope: 'openid email' - }); - - const response = await axios.post(`https://api.asgardeo.io/t/${AUTH_ORG}/oauth2/token`, params.toString(), { headers: CommonReqHeaders }); - - const newAccessToken = response.data.access_token; - const newRefreshToken = response.data.refresh_token; + // Try refreshing via STS token exchange from platform extension + try { + console.log('Refreshing token via STS exchange...'); + const newSecrets = await refreshTokenViaStsExchange(); - // Update stored credentials - const updatedCredentials: AuthCredentials = { - ...credentials, - secrets: { - accessToken: newAccessToken, - refreshToken: newRefreshToken - } - }; - await storeAuthCredentials(updatedCredentials); + // Update stored credentials + const updatedCredentials: AuthCredentials = { + loginMethod: LoginMethod.BI_INTEL, + secrets: newSecrets + }; + await storeAuthCredentials(updatedCredentials); - resolve(newAccessToken); + resolve(newSecrets.accessToken); + return; + } catch (stsError) { + console.error('STS token exchange failed:', stsError); + // If STS exchange fails, we can't refresh - reject + reject(new Error('Token refresh failed. Please login again.')); + } } catch (error: any) { reject(error); } }); }; - -// ================================== -// Devant STS Token Exchange Utils -// ================================== - -/** - * Exchanges a Choreo STS token for a Devant Bearer token - * @param choreoStsToken The Choreo STS token to exchange - * @returns DevantEnvSecrets containing the access token and calculated expiry time - */ -export const exchangeStsToken = async (choreoStsToken: string): Promise => { - try { - const response = await axios.post(getDevantExchangeUrl(), { - choreo_sts_token: choreoStsToken - }, { - headers: { - 'Content-Type': 'application/json' - } - }); - - const { access_token, expires_in } = response.data; - const devantEnv: DevantEnvSecrets = { - accessToken: access_token, - expiresAt: Date.now() + (expires_in * 1000) // Convert seconds to milliseconds - }; - - await storeAuthCredentials({ - loginMethod: LoginMethod.DEVANT_ENV, - secrets: devantEnv - }); - return devantEnv; - } catch (error: any) { - console.error('Error exchanging STS token:', error); - throw new Error(`Failed to exchange STS token: ${error.message}`); - } -}; - -/** - * Refreshes the Devant token by fetching a new STS token and exchanging it - * This is called when a 401 error occurs during DEVANT_ENV authentication - * @returns The new access token - */ -export const refreshDevantToken = async (): Promise => { - try { - // Get fresh STS token from platform extension - const newStsToken = await getDevantStsToken(); - - if (!newStsToken) { - throw new Error('Failed to retrieve STS token from platform extension'); - } - - // Exchange for new Bearer token - const newSecrets = await exchangeStsToken(newStsToken); - - // Update stored credentials (this is in-memory only for DEVANT_ENV) - // Note: checkDevantEnvironment already handles the storage, so we just return the token - - return newSecrets.accessToken; - } catch (error: any) { - console.error('Error refreshing Devant token:', error); - throw error; - } -}; diff --git a/workspaces/ballerina/ballerina-extension/src/utils/bi.ts b/workspaces/ballerina/ballerina-extension/src/utils/bi.ts index 67362c59c72..06e32b507f3 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/bi.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/bi.ts @@ -43,10 +43,12 @@ import { parse } from "@iarna/toml"; import { getProjectTomlValues } from "./config"; import { extension } from "../BalExtensionContext"; -export const README_FILE = "readme.md"; +export const README_FILE = "README.md"; export const FUNCTIONS_FILE = "functions.bal"; export const DATA_MAPPING_FILE = "data_mappings.bal"; +export const VALIDATOR_PACKAGE_NAME = "wso2/strict.library"; + /** * Interface for the processed project information */ @@ -112,6 +114,10 @@ generated/ # Contains configuration values used during development time. # See https://ballerina.io/learn/provide-values-to-configurable-variables/ for more details. Config.toml + +# File used to enable development-time tracing. +# This should not be committed to version control. +trace_enabled.bal `; export function getUsername(): string { @@ -130,17 +136,23 @@ export function getUsername(): string { /** * Validates the project path before creating a new project * @param projectPath - The directory path where the project will be created - * @param projectName - The name of the project (used if createDirectory is true) + * @param projectName - The name of the project (used if createDirectory is true). For workspace projects, this contains the workspace name. * @param createDirectory - Whether a new directory will be created + * @param createAsWorkspace - Whether this is a workspace project creation * @returns Validation result with error message and field information if invalid */ -export function validateProjectPath(projectPath: string, projectName: string, createDirectory: boolean): { isValid: boolean; errorMessage?: string; errorField?: ValidateProjectFormErrorField } { +export function validateProjectPath(projectPath: string, projectName: string, createDirectory: boolean, createAsWorkspace?: boolean): { isValid: boolean; errorMessage?: string; errorField?: ValidateProjectFormErrorField } { try { // Check if projectPath is provided and not empty if (!projectPath || projectPath.trim() === '') { return { isValid: false, errorMessage: 'Project path is required', errorField: ValidateProjectFormErrorField.PATH }; } + // For workspace projects, validate workspace name specifically + if (createAsWorkspace && createDirectory && (!projectName || projectName.trim() === '')) { + return { isValid: false, errorMessage: 'Workspace name is required', errorField: ValidateProjectFormErrorField.NAME }; + } + // Check if the base directory exists if (!fs.existsSync(projectPath)) { // Check if parent directory exists and we can create the path @@ -297,7 +309,7 @@ function setupProjectInfo(projectRequest: ProjectRequest): ProcessedProjectInfo }; } -export function createBIWorkspace(projectRequest: ProjectRequest): string { +export async function createBIWorkspace(projectRequest: ProjectRequest): Promise { const ballerinaTomlContent = ` [workspace] packages = ["${projectRequest.packageName}"] @@ -312,7 +324,7 @@ packages = ["${projectRequest.packageName}"] writeBallerinaFileDidOpen(ballerinaTomlPath, ballerinaTomlContent); // Create Ballerina Package - createBIProjectPure({ ...projectRequest, projectPath: workspaceRoot, createDirectory: true }); + await createBIProjectPure({ ...projectRequest, projectPath: workspaceRoot, createDirectory: true }); // create settings.json file createVSCodeSettings(workspaceRoot); @@ -321,7 +333,7 @@ packages = ["${projectRequest.packageName}"] return workspaceRoot; } -export function createBIProjectPure(projectRequest: ProjectRequest): string { +export async function createBIProjectPure(projectRequest: ProjectRequest): Promise { const projectInfo = setupProjectInfo(projectRequest); const { projectRoot, finalOrgName, finalVersion, packageName: finalPackageName, integrationName } = projectInfo; @@ -381,6 +393,21 @@ sticky = true const datamappingsBalPath = path.join(projectRoot, 'data_mappings.bal'); writeBallerinaFileDidOpen(datamappingsBalPath, EMPTY); + if (projectRequest.isLibrary) { + const libraryBal = path.join(projectRoot, 'lib.bal'); + + // TODO: Enable pulling the validator package and adding the import to the lib.bal file + // once this this implemented: https://github.com/wso2/product-ballerina-integrator/issues/2409 + + // const libraryBalContent = `import ${VALIDATOR_PACKAGE_NAME} as _;`; + // try { + // await runBackgroundTerminalCommand(`bal pull ${VALIDATOR_PACKAGE_NAME}`); + // } catch (error) { + // console.error('Failed to pull validator package:', error); + // } + writeBallerinaFileDidOpen(libraryBal, EMPTY); + } + // Create .vscode configuration files createVSCodeSettingsWithLaunch(projectRoot); @@ -412,7 +439,7 @@ export async function convertProjectToWorkspace(params: AddProjectToWorkspaceReq createWorkspaceToml(newDirectory, currentPackageName); addToWorkspaceToml(newDirectory, params.packageName); - createProjectInWorkspace(params, newDirectory); + await createProjectInWorkspace(params, newDirectory); // create settings.json file createVSCodeSettings(newDirectory); @@ -424,7 +451,7 @@ export async function addProjectToExistingWorkspace(params: AddProjectToWorkspac const workspacePath = StateMachine.context().workspacePath; addToWorkspaceToml(workspacePath, params.packageName); - createProjectInWorkspace(params, workspacePath); + await createProjectInWorkspace(params, workspacePath); } function createWorkspaceToml(workspacePath: string, packageName: string) { @@ -536,17 +563,18 @@ function removePackageFromToml(tomlContent: string, packagePath: string): string } } -function createProjectInWorkspace(params: AddProjectToWorkspaceRequest, workspacePath: string): string { +async function createProjectInWorkspace(params: AddProjectToWorkspaceRequest, workspacePath: string): Promise { const projectRequest: ProjectRequest = { projectName: params.projectName, packageName: params.packageName, projectPath: workspacePath, createDirectory: true, orgName: params.orgName, - version: params.version + version: params.version, + isLibrary: params.isLibrary }; - return createBIProjectPure(projectRequest); + return await createBIProjectPure(projectRequest); } export function openInVSCode(projectRoot: string) { diff --git a/workspaces/ballerina/ballerina-extension/src/utils/command-utils.ts b/workspaces/ballerina/ballerina-extension/src/utils/command-utils.ts index 1008d75e7ab..2dffe1d5375 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/command-utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/command-utils.ts @@ -39,7 +39,7 @@ async function promptPackageSelection( placeHolder?: string ): Promise { return window.showQuickPick(availablePackages, { - placeHolder: placeHolder || "Select a package", + placeHolder: placeHolder || "Select an integration", ignoreFocusOut: false }); } diff --git a/workspaces/ballerina/ballerina-extension/src/utils/config.ts b/workspaces/ballerina/ballerina-extension/src/utils/config.ts index f9ea67888bc..2ade9867da6 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/config.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/config.ts @@ -18,7 +18,7 @@ import { SemanticVersion, PackageTomlValues, SCOPE, WorkspaceTomlValues, ProjectInfo } from '@wso2/ballerina-core'; import { BallerinaExtension } from '../core'; -import { WorkspaceConfiguration, workspace, Uri, RelativePattern } from 'vscode'; +import { WorkspaceConfiguration, workspace, Uri, RelativePattern, extensions } from 'vscode'; import * as fs from 'fs'; import * as path from 'path'; import { parse } from '@iarna/toml'; @@ -49,6 +49,8 @@ export const BI_PROJECT_FILES = [ TYPES_FILE ]; +export const WI_EXTENSION_ID = 'wso2.wso2-integrator'; + interface BallerinaPluginConfig extends WorkspaceConfiguration { home?: string; debugLog?: boolean; @@ -73,6 +75,27 @@ export function isWSL(): boolean { ); } +/** + * Wraps a file path in double quotes if it contains spaces, + * so it can be safely used in shell command strings. + * Handles already-quoted paths and escapes embedded double quotes. + */ +export function quoteShellPath(filePath: string): string { + // Strip existing surrounding quotes to normalize + let normalized = filePath; + if (normalized.length >= 2 && normalized.startsWith('"') && normalized.endsWith('"')) { + normalized = normalized.slice(1, -1); + } + + if (!normalized.includes(' ')) { + return normalized; + } + + // Escape any embedded double quotes + const escaped = normalized.replace(/"/g, '\\"'); + return `"${escaped}"`; +} + export function isSupportedVersion(ballerinaExtInstance: BallerinaExtension, supportedRelease: VERSION, supportedVersion: number): boolean { const ballerinaVersion: string = ballerinaExtInstance.ballerinaVersion.toLocaleLowerCase(); @@ -187,6 +210,10 @@ export function isSupportedSLVersion( } export function checkIsBI(uri: Uri): boolean { + if (isInWI()) { + return true; + } + const config = workspace.getConfiguration('ballerina', uri); const inspected = config.inspect('isBI'); @@ -201,6 +228,10 @@ export function checkIsBI(uri: Uri): boolean { return false; // Return false if isBI is not set } +export function isInWI(): boolean { + return !!extensions.getExtension(WI_EXTENSION_ID); +} + export async function checkIsBallerinaPackage(uri: Uri): Promise { const ballerinaTomlPath = path.join(uri.fsPath, 'Ballerina.toml'); @@ -380,3 +411,17 @@ export function getOrgAndPackageName(projectInfo: ProjectInfo, projectPath: stri packageName: projectInfo.title || projectInfo.name }; } + +export async function isLibraryProject(projectPath: string): Promise { + const libBalPath = path.join(projectPath, 'lib.bal'); + return fs.existsSync(libBalPath); + + // TODO: Enable checking the validator import in the lib.bal file + // once this this implemented: https://github.com/wso2/product-ballerina-integrator/issues/2409 + + // if (fs.existsSync(libBalPath)) { + // const libBalContent = fs.readFileSync(libBalPath, 'utf8'); + // return libBalContent.includes(`import ${VALIDATOR_PACKAGE_NAME} as _;`); + // } + // return false; +} diff --git a/workspaces/ballerina/ballerina-extension/src/utils/migrate-integration.ts b/workspaces/ballerina/ballerina-extension/src/utils/migrate-integration.ts index 02da6e72759..317fcb0f163 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/migrate-integration.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/migrate-integration.ts @@ -22,6 +22,7 @@ import { extension } from "../BalExtensionContext"; import { RPCLayer } from "../RPCLayer"; import { VisualizerWebview } from "../views/visualizer/webview"; import { debug } from "./logger"; +import { quoteShellPath } from "./config"; const PROGRESS_COMPLETE = 100; @@ -53,7 +54,7 @@ export async function pullMigrationTool(migrationToolName: string, version: stri } const ballerinaCmd = extension.ballerinaExtInstance.getBallerinaCmd(); - const command = `${ballerinaCmd} tool pull ${migrationToolName}:${version}`; + const command = `${quoteShellPath(ballerinaCmd)} tool pull ${migrationToolName}:${version}`; debug(`Executing migration tool pull command: ${command}`); // 2. This function now returns a promise that wraps the exec lifecycle diff --git a/workspaces/ballerina/ballerina-extension/src/utils/modification.ts b/workspaces/ballerina/ballerina-extension/src/utils/modification.ts index 901f68b388a..26c95fa64a0 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/modification.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/modification.ts @@ -66,18 +66,27 @@ export async function modifyFileContent(params: UpdateFileContentRequest): Promi return false; } +/** + * Ensures content ends with a newline for POSIX compliance and version control best practices. + */ +function ensureTrailingNewline(content: string): string { + const trimmed = content.trim(); + return trimmed.endsWith('\n') ? trimmed : trimmed + '\n'; +} + export function writeBallerinaFileDidOpenTemp(filePath: string, content: string) { // Replace the selection with: const dir = dirname(filePath); if (!existsSync(dir)) { mkdirSync(dir, { recursive: true }); } - writeFileSync(filePath, content.trim()); + const contentWithNewline = ensureTrailingNewline(content); + writeFileSync(filePath, contentWithNewline); StateMachine.langClient().didChange({ textDocument: { uri: filePath, version: 1 }, contentChanges: [ { - text: content, + text: contentWithNewline, }, ], }); @@ -86,18 +95,19 @@ export function writeBallerinaFileDidOpenTemp(filePath: string, content: string) uri: Uri.file(filePath).toString(), languageId: 'ballerina', version: 1, - text: content.trim() + text: contentWithNewline } }); } export async function writeBallerinaFileDidOpen(filePath: string, content: string) { - writeFileSync(filePath, content.trim()); + const contentWithNewline = ensureTrailingNewline(content); + writeFileSync(filePath, contentWithNewline); StateMachine.langClient().didChange({ textDocument: { uri: filePath, version: 1 }, contentChanges: [ { - text: content, + text: contentWithNewline, }, ], }); @@ -106,7 +116,7 @@ export async function writeBallerinaFileDidOpen(filePath: string, content: strin uri: Uri.file(filePath).toString(), languageId: 'ballerina', version: 1, - text: content.trim() + text: contentWithNewline } }); diff --git a/workspaces/ballerina/ballerina-extension/src/utils/project-artifacts.ts b/workspaces/ballerina/ballerina-extension/src/utils/project-artifacts.ts index b509a08303b..6c1539fcaf8 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/project-artifacts.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/project-artifacts.ts @@ -21,6 +21,7 @@ import { ARTIFACT_TYPE, Artifacts, ArtifactsNotification, BaseArtifact, DIRECTOR import { StateMachine } from "../stateMachine"; import { ExtendedLangClient } from "../core/extended-language-client"; import { ArtifactsUpdated, ArtifactNotificationHandler } from "./project-artifacts-handler"; +import { isLibraryProject } from "./config"; export async function buildProjectsStructure( projectInfo: ProjectInfo, @@ -67,6 +68,9 @@ async function buildProjectArtifactsStructure( projectName: packageName, projectPath: projectPath, projectTitle: packageTitle, + // Workaround to check if the project is a library project. + // This will be removed once the projectInfo is updated to include the library flag. + isLibrary: await isLibraryProject(projectPath), directoryMap: { [DIRECTORY_MAP.AUTOMATION]: [], [DIRECTORY_MAP.SERVICE]: [], @@ -188,7 +192,7 @@ async function getEntryValue(artifact: BaseArtifact, projectPath: string, icon: break; case DIRECTORY_MAP.SERVICE: // Do things related to service - entryValue.name = artifact.name; // GraphQL Service - /foo + entryValue.name = getServiceDisplayName(artifact); // GraphQL Service - /foo entryValue.icon = getCustomEntryNodeIcon(artifact.module); if (artifact.module === "ai") { entryValue.resources = []; @@ -245,6 +249,18 @@ async function getEntryValue(artifact: BaseArtifact, projectPath: string, icon: return entryValue; } +function getServiceDisplayName(artifact: BaseArtifact): string { + if (artifact.module !== "ftp") { + return artifact.name; + } + const accessor = artifact.accessor?.trim(); + if (!accessor) { + return artifact.name; + } + const suffix = ` - ${accessor}`; + return artifact.name.includes(suffix) ? artifact.name : `${artifact.name}${suffix}`; +} + /** * Maps an ARTIFACT_TYPE category key and a specific artifact to the corresponding DIRECTORY_MAP key and a default icon. * Note: The icon returned here is a base icon; `getEntryValue` might assign a more specific icon later based on the module. diff --git a/workspaces/ballerina/ballerina-extension/src/utils/server/server.ts b/workspaces/ballerina/ballerina-extension/src/utils/server/server.ts index 5aff49ba8f0..5b51ba55f47 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/server/server.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/server/server.ts @@ -384,11 +384,22 @@ function getServerOptionsUsingJava(extension: BallerinaExtension): ServerOptions // Find any JDK in the dependencies directory const dependenciesDir = join(baseHome, 'dependencies'); - const jdkDir = findHighestVersionJdk(dependenciesDir); + let jdkDir = findHighestVersionJdk(dependenciesDir); debug(`JDK Directory: ${jdkDir}`); + + // If no JDK found in dependencies directory, try to find in the parent dependencies directory + if (!jdkDir) { + const baseHomeParentDir = path.dirname(baseHome); + const parentDependenciesDir = join(baseHomeParentDir, 'dependencies'); + debug(`No JDK found in dependencies directory: ${dependenciesDir}. Retrying with parent dependencies directory: ${parentDependenciesDir}`); + jdkDir = findHighestVersionJdk(parentDependenciesDir); + debug(`JDK Directory from parent dependencies directory: ${jdkDir}`); + } + if (!jdkDir) { - debug(`No JDK found in dependencies directory: ${dependenciesDir}`); - throw new Error(`JDK not found in ${dependenciesDir}`); + const parentDependenciesDir = join(path.dirname(baseHome), 'dependencies'); + debug(`No JDK found in dependencies directory: ${dependenciesDir} or parent dependencies directory: ${parentDependenciesDir}`); + throw new Error(`JDK not found in ${dependenciesDir} or ${parentDependenciesDir}`); } const javaExecutable = isWindows() ? 'java.exe' : 'java'; diff --git a/workspaces/ballerina/ballerina-extension/src/utils/source-utils.ts b/workspaces/ballerina/ballerina-extension/src/utils/source-utils.ts index 5150e8700b7..fcb557330dd 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/source-utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/source-utils.ts @@ -41,11 +41,14 @@ export interface UpdateSourceCodeRequest { skipUpdateViewOnTomlUpdate?: boolean; // This is used to skip updating the view on toml updates in certain scenarios. } -export async function updateSourceCode(updateSourceCodeRequest: UpdateSourceCodeRequest, isChangeFromHelperPane?: boolean): Promise { +export async function updateSourceCode(updateSourceCodeRequest: UpdateSourceCodeRequest, isChangeFromHelperPane?: boolean, skipFormatting?: boolean): Promise { + const skipUndoRedoStack = updateSourceCodeRequest.artifactData?.artifactType === "CONFIGURABLE"; try { let tomlFilesUpdated = false; StateMachine.setEditMode(); - undoRedoManager?.startBatchOperation(); + if (!skipUndoRedoStack) { + undoRedoManager?.startBatchOperation(); + } const modificationRequests: Record = {}; for (const [key, value] of Object.entries(updateSourceCodeRequest.textEdits)) { const fileUri = key.startsWith("file:") ? Uri.parse(key) : Uri.file(key); @@ -81,7 +84,9 @@ export async function updateSourceCode(updateSourceCodeRequest: UpdateSourceCode // Get the before content of the file by using the workspace api const document = await workspace.openTextDocument(fileUri); const beforeContent = document.getText(); - undoRedoManager?.addFileToBatch(fileUri.fsPath, beforeContent, beforeContent); + if (!skipUndoRedoStack) { + undoRedoManager?.addFileToBatch(fileUri.fsPath, beforeContent, beforeContent); + } if (edits && edits.length > 0) { const modificationList: STModification[] = []; @@ -107,6 +112,10 @@ export async function updateSourceCode(updateSourceCodeRequest: UpdateSourceCode modificationRequests[fileUriString] = { filePath: fileUri.fsPath, modifications: modificationList }; } } + if (edits.length === 0) { + StateMachine.setReadyMode(); + return []; + } } // Iterate through modificationRequests and apply modifications @@ -151,13 +160,20 @@ export async function updateSourceCode(updateSourceCodeRequest: UpdateSourceCode ), formattedSource.newText ); - undoRedoManager?.addFileToBatch(fileUri.fsPath, formattedSource.newText, formattedSource.newText); + if (!skipUndoRedoStack) { + undoRedoManager?.addFileToBatch(fileUri.fsPath, formattedSource.newText, formattedSource.newText); + } } } - undoRedoManager?.commitBatchOperation(updateSourceCodeRequest.description ? updateSourceCodeRequest.description : (updateSourceCodeRequest.artifactData ? `Change in ${updateSourceCodeRequest.artifactData?.artifactType} ${updateSourceCodeRequest.artifactData?.identifier}` : "Update Source Code")); - // Apply all formatted changes at once - await workspace.applyEdit(formattedWorkspaceEdit); + if (!skipUndoRedoStack) { + undoRedoManager?.commitBatchOperation(updateSourceCodeRequest.description ? updateSourceCodeRequest.description : (updateSourceCodeRequest.artifactData ? `Change in ${updateSourceCodeRequest.artifactData?.artifactType} ${updateSourceCodeRequest.artifactData?.identifier}` : "Update Source Code")); + } + + if (!skipFormatting) { //TODO: Remove the skipFormatting flag once LS APIs are updated to give already formatted text edits + // Apply all formatted changes at once + await workspace.applyEdit(formattedWorkspaceEdit); + } // Handle missing dependencies after all changes are applied if (updateSourceCodeRequest.resolveMissingDependencies) { @@ -211,7 +227,9 @@ export async function updateSourceCode(updateSourceCodeRequest: UpdateSourceCode } } catch (error) { StateMachine.setReadyMode(); - undoRedoManager?.cancelBatchOperation(); + if (!skipUndoRedoStack) { + undoRedoManager?.cancelBatchOperation(); + } console.log(">>> error updating source", error); throw error; } @@ -222,7 +240,7 @@ export async function updateSourceCode(updateSourceCodeRequest: UpdateSourceCode // Notify webview unless a new TYPE artifact is created outside the type diagram view // */ function checkAndNotifyWebview( - response: ProjectStructureArtifactResponse[], + response: ProjectStructureArtifactResponse[], request: UpdateSourceCodeRequest, isChangeFromHelperPane?: boolean ) { diff --git a/workspaces/ballerina/ballerina-extension/src/utils/toml-utils.ts b/workspaces/ballerina/ballerina-extension/src/utils/toml-utils.ts new file mode 100644 index 00000000000..5bec8fd3fa9 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/utils/toml-utils.ts @@ -0,0 +1,219 @@ +// Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import * as fs from "fs"; +import * as path from "path"; +import { parse, stringify } from "@iarna/toml"; + +export interface ConfigVariable { + name: string; + description: string; + type?: "string" | "int"; + secret?: boolean; +} + +/** + * Read all keys from Config.toml and return their fill status. + * Returns empty object if file doesn't exist. + */ +export function getAllConfigStatus( + configPath: string +): Record { + const status: Record = {}; + + if (!fs.existsSync(configPath)) { + return status; + } + + try { + const content = fs.readFileSync(configPath, "utf-8"); + const config = parse(content) as Record; + + function collectStatus(obj: any, prefix: string = "") { + for (const [key, value] of Object.entries(obj)) { + const fullKey = prefix ? `${prefix}.${key}` : key; + if (Array.isArray(value)) { + value.forEach((item, index) => { + if (item !== null && typeof item === "object") { + collectStatus(item, `${fullKey}[${index}]`); + } else { + status[`${fullKey}[${index}]`] = "filled"; + } + }); + if (value.length === 0) { + status[fullKey] = "filled"; + } + } else if (value !== null && typeof value === "object") { + collectStatus(value, fullKey); + } else { + status[fullKey] = "filled"; + } + } + } + + collectStatus(config); + } catch (error) { + console.error(`[TOML Utils] Error reading config status:`, error); + } + + return status; +} + +/** + * Write configuration values to Config.toml - SECURITY: never logs values + */ +export function writeConfigValuesToConfig( + configPath: string, + configValues: Record, + variables?: ConfigVariable[] +): void { + let config: Record = {}; + + if (fs.existsSync(configPath)) { + try { + const content = fs.readFileSync(configPath, "utf-8"); + config = parse(content) as Record; + } catch (error) { + console.error(`[TOML Utils] Error reading config for value write:`, error); + throw error; + } + } + + // Create a map of variable types for quick lookup + const typeMap = new Map(); + if (variables) { + for (const variable of variables) { + typeMap.set(variable.name, variable.type || "string"); + } + } + + const intKeys = new Set(); + for (const [variableName, value] of Object.entries(configValues)) { + const varType = typeMap.get(variableName) || "string"; + + // Convert value based on type + if (varType === "int") { + const intValue = parseInt(value, 10); + if (isNaN(intValue)) { + throw new Error(`Invalid integer value for ${variableName}`); + } + config[variableName] = intValue; + intKeys.add(variableName); + } else { + config[variableName] = value; + } + } + + try { + const dirPath = path.dirname(configPath); + if (!fs.existsSync(dirPath)) { + fs.mkdirSync(dirPath, { recursive: true }); + } + + let tomlContent = stringify(config); + + // Fix TOML integer formatting - remove underscores from integer values + // The @iarna/toml library adds underscores to large numbers for readability (e.g., 8_080) + // We need to remove them for Ballerina compatibility + for (const intKey of intKeys) { + const intValue = config[intKey]; + if (typeof intValue === 'number') { + // Replace formatted number (with underscores) with plain number + const escapedKey = intKey.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const formattedPattern = new RegExp(`^\\s*${escapedKey}\\s*=\\s*[0-9_]+`, 'gm'); + tomlContent = tomlContent.replace(formattedPattern, `${intKey} = ${intValue}`); + } + } + + fs.writeFileSync(configPath, tomlContent, "utf-8"); + + console.log(`[TOML Utils] Updated ${Object.keys(configValues).length} configuration value(s) in Config.toml`); + } catch (error) { + console.error(`[TOML Utils] Error writing configuration values:`, error); + throw error; + } +} + +function getNestedValue(obj: any, key: string): any { + if (key.includes(".")) { + const parts = key.split("."); + let current = obj; + for (const part of parts) { + if (current && typeof current === "object") { + current = current[part]; + } else { + return undefined; + } + } + return current; + } + return obj[key]; +} + +export function validateVariableName(name: string): boolean { + return /^[a-zA-Z][a-zA-Z0-9]*$/.test(name); +} + +/** + * Read existing configuration values from Config.toml + * Returns actual values (to be shown in UI for editing) + */ +export function readExistingConfigValues( + configPath: string, + variableNames: string[] +): Record { + const existingValues: Record = {}; + + if (!fs.existsSync(configPath)) { + return existingValues; + } + + try { + const content = fs.readFileSync(configPath, "utf-8"); + const config = parse(content) as Record; + + for (const name of variableNames) { + const value = getNestedValue(config, name); + + if (value !== undefined && value !== null) { + if (typeof value === "string") { + existingValues[name] = value; + } else if (typeof value === "number") { + existingValues[name] = value.toString(); + } + } + } + } catch (error) { + console.error(`[TOML Utils] Error reading existing configuration values:`, error); + } + + return existingValues; +} + +/** + * Create status metadata from configuration values - returns only fill status, never values + */ +export function createStatusMetadata( + configValues: Record +): Record { + const status: Record = {}; + + for (const [key, value] of Object.entries(configValues)) { + status[key] = value && value.trim() !== "" ? "filled" : "missing"; + } + + return status; +} diff --git a/workspaces/ballerina/ballerina-extension/src/utils/uri-handlers.ts b/workspaces/ballerina/ballerina-extension/src/utils/uri-handlers.ts index 795232e6da5..86200e17617 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/uri-handlers.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/uri-handlers.ts @@ -20,8 +20,7 @@ import { window, Uri, ProviderResult, commands } from "vscode"; import { BallerinaExtension } from "../core"; import { handleOpenFile, handleOpenRepo } from "."; import { CMP_OPEN_VSCODE_URL, TM_EVENT_OPEN_FILE_URL_START, TM_EVENT_OPEN_REPO_URL_START, sendTelemetryEvent } from "../features/telemetry"; -import { exchangeAuthCode } from "../views/ai-panel/auth"; -import { IOpenCompSrcCmdParams, CommandIds as PlatformExtCommandIds } from "@wso2/wso2-platform-core"; +import { IOpenCompSrcCmdParams, WICommandIds } from "@wso2/wso2-platform-core"; export function activateUriHandlers(ballerinaExtInstance: BallerinaExtension) { window.registerUriHandler({ @@ -50,12 +49,9 @@ export function activateUriHandlers(ballerinaExtInstance: BallerinaExtension) { } break; case '/signin': - const query = new URLSearchParams(uri.query); - const code = query.get('code'); - if (code) { - exchangeAuthCode(code); - } - console.log("Auth code not found. Ignoring"); + // Legacy OAuth callback route - no longer used + // Authentication is now handled via Devant platform extension + console.log("Legacy /signin route called - authentication now uses Devant platform extension"); break; case '/open': const org = urlParams.get("org"); @@ -65,7 +61,7 @@ export function activateUriHandlers(ballerinaExtInstance: BallerinaExtension) { const integrationType = urlParams.get("integrationType"); const integrationDisplayType = urlParams.get("integrationDisplayType"); if (org && project && component && technology && integrationType) { - commands.executeCommand(PlatformExtCommandIds.OpenCompSrcDir, { + commands.executeCommand(WICommandIds.OpenCompSrcDir, { org, project, component, technology, integrationType, integrationDisplayType, extName: "Devant" } as IOpenCompSrcCmdParams); } else { diff --git a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/activate.ts b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/activate.ts index e872726510b..924b0d75cb1 100644 --- a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/activate.ts +++ b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/activate.ts @@ -81,7 +81,7 @@ async function handleWorkspaceLevelAIPanel(projectInfo: ProjectInfo): Promise child.projectPath) ?? []; try { - const selectedPackage = await selectPackageOrPrompt(availablePackages, "Select a package to open AI panel"); + const selectedPackage = await selectPackageOrPrompt(availablePackages, "Select an integration to open AI panel"); if (!selectedPackage) { return true; } @@ -89,7 +89,7 @@ async function handleWorkspaceLevelAIPanel(projectInfo: ProjectInfo): Promise { extension.aiChatDefaultPrompt = defaultprompt; if (!AiPanelWebview.currentPanel) { @@ -169,6 +174,12 @@ const aiMachine = createMachine({ actions: assign({ loginMethod: (_ctx) => LoginMethod.AWS_BEDROCK }) + }, + [AIMachineEventType.AUTH_WITH_VERTEX_AI]: { + target: 'Authenticating', + actions: assign({ + loginMethod: (_ctx) => LoginMethod.VERTEX_AI + }) } } }, @@ -189,6 +200,10 @@ const aiMachine = createMachine({ cond: (context) => context.loginMethod === LoginMethod.AWS_BEDROCK, target: 'awsBedrockFlow' }, + { + cond: (context) => context.loginMethod === LoginMethod.VERTEX_AI, + target: 'vertexAiFlow' + }, { target: 'ssoFlow' // default } @@ -291,6 +306,41 @@ const aiMachine = createMachine({ }) } } + }, + vertexAiFlow: { + on: { + [AIMachineEventType.SUBMIT_VERTEX_AI_CREDENTIALS]: { + target: 'validatingVertexAiCredentials', + actions: assign({ + errorMessage: (_ctx) => undefined + }) + }, + [AIMachineEventType.CANCEL_LOGIN]: { + target: '#ballerina-ai.Unauthenticated', + actions: assign({ + loginMethod: (_ctx) => undefined, + errorMessage: (_ctx) => undefined, + }) + } + } + }, + validatingVertexAiCredentials: { + invoke: { + id: 'validateVertexAiCredentials', + src: 'validateVertexAiCredentials', + onDone: { + target: '#ballerina-ai.Authenticated', + actions: assign({ + errorMessage: (_ctx) => undefined, + }) + }, + onError: { + target: 'vertexAiFlow', + actions: assign({ + errorMessage: (_ctx, event) => event.data?.message || 'Vertex AI credentials validation failed' + }) + } + } } } }, @@ -357,10 +407,31 @@ const aiMachine = createMachine({ const openLogin = async () => { return new Promise(async (resolve, reject) => { try { - const status = await initiateInbuiltAuth(); + // Check if already logged into Devant + const isLoggedIn = await isDevantUserLoggedIn(); + if (isLoggedIn) { + // Already logged in, exchange token + const stsToken = await getPlatformStsToken(); + if (!stsToken) { + throw new Error('Failed to get STS token from platform extension'); + } + + const secrets = await exchangeStsToCopilotToken(stsToken); + await storeAuthCredentials({ + loginMethod: LoginMethod.BI_INTEL, + secrets + }); + aiStateService.send(AIMachineEventType.COMPLETE_AUTH); + resolve(true); + return; + } + + // Not logged in, trigger platform extension login + const status = await initiateDevantAuth(); if (!status) { aiStateService.send(AIMachineEventType.CANCEL_LOGIN); } + // Auth completion will be handled by platform extension login state listener resolve(status); } catch (error) { reject(error); @@ -389,6 +460,19 @@ const validateAwsCredentialsService = async (_context: AIMachineContext, event: }); }; +const validateVertexAiCredentialsService = async (_context: AIMachineContext, event: any) => { + const { projectId, location, clientEmail, privateKey } = event.payload || {}; + if (!projectId || !location || !clientEmail || !privateKey) { + throw new Error('GCP Project ID, location, client email, and private key are required'); + } + return await validateVertexAiCredentials({ + projectId, + location, + clientEmail, + privateKey + }); +}; + const getTokenAfterAuth = async () => { const result = await getAccessToken(); const loginMethod = await getLoginMethod(); @@ -404,6 +488,7 @@ const aiStateService = interpret(aiMachine.withConfig({ openLogin: openLogin, validateApiKey: validateApiKeyService, validateAwsCredentials: validateAwsCredentialsService, + validateVertexAiCredentials: validateVertexAiCredentialsService, getTokenAfterAuth: getTokenAfterAuth, }, actions: { @@ -422,8 +507,52 @@ const isExtendedEvent = ( return typeof arg !== "string"; }; +/** + * Set up listener for platform extension login state changes. + * When user logs in via platform extension, we exchange the token and complete auth. + */ +const setupPlatformExtensionListener = () => { + getPlatformExtensionAPI().then( + (api) => { + if (!api || !api.subscribeIsLoggedIn) { + return; + } + api.subscribeIsLoggedIn(async (isLoggedIn: boolean) => { + const currentState = aiStateService.getSnapshot().value; + + // Only handle login events when we're in the SSO authentication flow + if (isLoggedIn && typeof currentState === 'object' && 'Authenticating' in currentState) { + try { + const stsToken = await getPlatformStsToken(); + if (!stsToken) { + console.error('Failed to get STS token after platform login'); + return; + } + + const secrets = await exchangeStsToCopilotToken(stsToken); + await storeAuthCredentials({ + loginMethod: LoginMethod.BI_INTEL, + secrets + }); + aiStateService.send(AIMachineEventType.COMPLETE_AUTH); + } catch (error) { + console.error('Failed to exchange token after platform login:', error); + aiStateService.send(AIMachineEventType.CANCEL_LOGIN); + } + } + }); + }, + (error) => { + console.error('Failed to activate platform extension for login listener:', error); + } + ); +}; + export const AIStateMachine = { - initialize: () => aiStateService.start(), + initialize: () => { + setupPlatformExtensionListener(); + return aiStateService.start(); + }, service: () => { return aiStateService; }, context: () => { return aiStateService.getSnapshot().context; }, state: () => { return aiStateService.getSnapshot().value as AIMachineStateValue; }, diff --git a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/auth.ts b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/auth.ts deleted file mode 100644 index f1be64ab87d..00000000000 --- a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/auth.ts +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import axios from 'axios'; -import { AUTH_CLIENT_ID, AUTH_ORG, AUTH_REDIRECT_URL } from '../../features/ai/utils'; -import { AIStateMachine } from './aiMachine'; -import { AIMachineEventType, AuthCredentials, LoginMethod } from '@wso2/ballerina-core'; -import { storeAuthCredentials } from '../../utils/ai/auth'; - -export interface AccessToken { - accessToken: string; - expirationTime?: number; - loginTime: string; - refreshToken?: string; -} - -const CommonReqHeaders = { - 'Content-Type': 'application/x-www-form-urlencoded; charset=utf8', - 'Accept': 'application/json' -}; - -export async function getAuthUrl(callbackUri: string): Promise { - - // return `${this._config.loginUrl}?profile=vs-code&client_id=${this._config.clientId}` - // + `&state=${stateBase64}&code_challenge=${this._challenge.code_challenge}`; - const state = encodeURIComponent(btoa(JSON.stringify({ callbackUri }))); - return `https://api.asgardeo.io/t/${AUTH_ORG}/oauth2/authorize?response_type=code&redirect_uri=${AUTH_REDIRECT_URL}&client_id=${AUTH_CLIENT_ID}&scope=openid%20email&state=${state}`; -} - -export function getLogoutUrl(): string { - return `https://api.asgardeo.io/t/${AUTH_ORG}/oidc/logout`; -} - -export async function exchangeAuthCodeNew(authCode: string): Promise { - const params = new URLSearchParams({ - client_id: AUTH_CLIENT_ID, - code: authCode, - grant_type: 'authorization_code', - redirect_uri: AUTH_REDIRECT_URL, - scope: 'openid email' - }); - try { - const response = await axios.post(`https://api.asgardeo.io/t/${AUTH_ORG}/oauth2/token`, params.toString(), { headers: CommonReqHeaders }); - return { - accessToken: response.data.access_token, - refreshToken: response.data.refresh_token, - loginTime: new Date().toISOString(), - expirationTime: response.data.expires_in - }; - } catch (err) { - throw new Error(`Error while exchanging auth code to token: ${err}`); - } -} - -export async function exchangeAuthCode(authCode: string) { - if (!authCode) { - throw new Error("Auth code is not provided."); - } else { - try { - const response = await exchangeAuthCodeNew(authCode); - - // Store credentials in structured format - const credentials: AuthCredentials = { - loginMethod: LoginMethod.BI_INTEL, - secrets: { - accessToken: response.accessToken, - refreshToken: response.refreshToken ?? '' - } - }; - await storeAuthCredentials(credentials); - - AIStateMachine.sendEvent(AIMachineEventType.COMPLETE_AUTH); - } catch (error: any) { - const errMsg = "Error while signing in to Copilot! " + error?.message; - throw new Error(errMsg); - } - } -} diff --git a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/chatStateStorage.ts b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/chatStateStorage.ts index 87db2884388..82b9812db49 100644 --- a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/chatStateStorage.ts +++ b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/chatStateStorage.ts @@ -26,6 +26,7 @@ import { } from '@wso2/ballerina-core/lib/state-machine-types'; import { Command } from '@wso2/ballerina-core'; import * as crypto from 'crypto'; +import { approvalManager } from '../../features/ai/state/ApprovalManager'; /** * Active execution handle @@ -695,6 +696,7 @@ export class ChatStateStorage { } console.log(`[ChatStateStorage] Aborting execution: ${execution.generationId} for thread: ${threadId}`); + approvalManager.cancelAllPending("Agent execution aborted by user"); execution.abortController.abort(); // Cleanup diff --git a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/index.ts b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/index.ts index b1fa5eba8fe..77ab5332cfe 100644 --- a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/index.ts +++ b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/index.ts @@ -1,2 +1 @@ export * from './activate'; -export * from './auth'; diff --git a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/utils.ts b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/utils.ts index 59a5f05b275..f2aad17c9f0 100644 --- a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/utils.ts @@ -20,13 +20,21 @@ import * as vscode from 'vscode'; import { AIUserToken, LoginMethod, AuthCredentials } from '@wso2/ballerina-core'; import { createAnthropic } from '@ai-sdk/anthropic'; import { createAmazonBedrock } from '@ai-sdk/amazon-bedrock'; +import { createVertexAnthropic } from '@ai-sdk/google-vertex/anthropic'; import { generateText } from 'ai'; -import { getAuthUrl, getLogoutUrl } from './auth'; import { extension } from '../../BalExtensionContext'; -import { getAccessToken, clearAuthCredentials, storeAuthCredentials, getLoginMethod, exchangeStsToken, getAuthCredentials } from '../../utils/ai/auth'; -import { DEVANT_STS_TOKEN_CONFIG } from '../../features/ai/utils'; +import { + getAccessToken, + getLoginMethod, + clearAuthCredentials, + storeAuthCredentials, + isPlatformExtensionAvailable, + isDevantUserLoggedIn, + getPlatformStsToken, + exchangeStsToCopilotToken +} from '../../utils/ai/auth'; import { getBedrockRegionalPrefix } from '../../features/ai/utils/ai-client'; -import { getDevantStsToken } from '../../features/devant/activator'; +import { WICommandIds } from '@wso2/wso2-platform-core'; const LEGACY_ACCESS_TOKEN_SECRET_KEY = 'BallerinaAIUser'; const LEGACY_REFRESH_TOKEN_SECRET_KEY = 'BallerinaAIRefreshToken'; @@ -37,12 +45,38 @@ export const checkToken = async (): Promise => { // Clean up any legacy tokens on initialization await cleanupLegacyTokens(); + // First check if we have stored credentials const credentials = await getAccessToken(); - if (!credentials) { - resolve(undefined); + if (credentials) { + resolve(credentials); return; } - resolve(credentials); + + // No stored credentials - check if user is logged into Devant + if (isPlatformExtensionAvailable()) { + const isLoggedIn = await isDevantUserLoggedIn(); + if (isLoggedIn) { + // User is logged into Devant but no stored credentials + // Exchange STS token and store credentials + try { + const stsToken = await getPlatformStsToken(); + if (stsToken) { + const secrets = await exchangeStsToCopilotToken(stsToken); + const newCredentials: AuthCredentials = { + loginMethod: LoginMethod.BI_INTEL, + secrets + }; + await storeAuthCredentials(newCredentials); + resolve(newCredentials); + return; + } + } catch (exchangeError) { + console.error('Failed to exchange STS token during checkToken:', exchangeError); + } + } + } + + resolve(undefined); } catch (error) { reject(error); } @@ -63,13 +97,14 @@ const cleanupLegacyTokens = async (): Promise => { } }; -export const logout = async (isUserLogout: boolean = true) => { - // For user-initiated logout, check if we need to redirect to SSO logout - if (isUserLogout) { - const credentials = await checkToken(); - if (credentials.loginMethod === LoginMethod.BI_INTEL) { - const logoutURL = getLogoutUrl(); - vscode.env.openExternal(vscode.Uri.parse(logoutURL)); +export const logout = async (_isUserLogout: boolean = true) => { + // Sign out from the WSO2 Platform extension if logged in via BI_INTEL + const loginMethod = await getLoginMethod(); + if (loginMethod === LoginMethod.BI_INTEL && isPlatformExtensionAvailable()) { + try { + await vscode.commands.executeCommand(WICommandIds.SignOut); + } catch (error) { + console.error('Error signing out from WSO2 Platform extension:', error); } } @@ -77,12 +112,18 @@ export const logout = async (isUserLogout: boolean = true) => { await clearAuthCredentials(); }; -export async function initiateInbuiltAuth() { - const callbackUri = await vscode.env.asExternalUri( - vscode.Uri.parse(`${vscode.env.uriScheme}://wso2.ballerina/signin`) - ); - const oauthURL = await getAuthUrl(callbackUri.toString()); - return vscode.env.openExternal(vscode.Uri.parse(oauthURL)); +/** + * Initiate Devant authentication via the platform extension. + * Returns true if login was triggered, false if platform extension is not available. + */ +export async function initiateDevantAuth(): Promise { + if (!isPlatformExtensionAvailable()) { + throw new Error('WSO2 Platform extension is not installed. Please install it to use BI Copilot.'); + } + + // Trigger platform extension login command + await vscode.commands.executeCommand(WICommandIds.SignIn); + return true; } export const validateApiKey = async (apiKey: string, loginMethod: LoginMethod): Promise => { @@ -133,53 +174,6 @@ export const validateApiKey = async (apiKey: string, loginMethod: LoginMethod): } }; -export const checkDevantEnvironment = async (): Promise => { - // Check if CLOUD_STS_TOKEN environment variable exists (Devant flow identifier) - if (!('CLOUD_STS_TOKEN' in process.env)) { - return undefined; - } - - try { - // Check if a valid access token already exists to avoid redundant exchanges - const existingCredentials = await getAuthCredentials(); - - if (existingCredentials && existingCredentials.loginMethod === LoginMethod.DEVANT_ENV) { - // existing session, check expiry - const { expiresAt } = existingCredentials.secrets; - const now = Date.now(); - - // If token is still valid (not expired), return existing credentials - if (expiresAt && expiresAt > now) { - return existingCredentials; - } - } - if (existingCredentials && existingCredentials.loginMethod !== LoginMethod.DEVANT_ENV) { - // not devant - return undefined; - } - - // Get STS token from config or platform extension - const choreoStsToken = await getDevantStsToken() || DEVANT_STS_TOKEN_CONFIG; - - if (!choreoStsToken || choreoStsToken.trim() === '') { - console.warn('CLOUD_STS_TOKEN env variable exists but no STS token available'); - return undefined; - } - - // Exchange STS token for Bearer token (if no valid token exists or token expired) - const devantSecrets = await exchangeStsToken(choreoStsToken); - - // Return devant credentials without storing (always read from env and exchange on demand) - return { - loginMethod: LoginMethod.DEVANT_ENV, - secrets: devantSecrets - }; - } catch (error) { - console.error('Error in checkDevantEnvironment:', error); - return undefined; - } -}; - export const validateAwsCredentials = async (credentials: { accessKeyId: string; secretAccessKey: string; @@ -251,3 +245,61 @@ export const validateAwsCredentials = async (credentials: { throw new Error('Validation failed. Please check the log for more details.'); } }; + +export const validateVertexAiCredentials = async (credentials: { + projectId: string; + location: string; + clientEmail: string; + privateKey: string; +}): Promise => { + const { projectId, location, clientEmail, privateKey } = credentials; + + if (!projectId || !location || !clientEmail || !privateKey) { + throw new Error('GCP Project ID, location, client email, and private key are required.'); + } + + try { + const vertexAnthropic = createVertexAnthropic({ + project: projectId, + location: location, + googleAuthOptions: { + credentials: { + client_email: clientEmail, + private_key: privateKey, + }, + }, + }); + + await generateText({ + model: vertexAnthropic('claude-3-5-haiku@20241022'), + maxOutputTokens: 1, + messages: [{ role: 'user', content: 'Hi' }] + }); + + const authCredentials: AuthCredentials = { + loginMethod: LoginMethod.VERTEX_AI, + secrets: { + projectId, + location, + clientEmail, + privateKey + } + }; + await storeAuthCredentials(authCredentials); + + return { credentials: authCredentials }; + + } catch (error) { + console.error('Vertex AI validation failed:', error); + if (error instanceof Error) { + if (error.message.includes('401') || error.message.includes('authentication') || error.message.includes('UNAUTHENTICATED')) { + throw new Error('Invalid credentials. Please check your service account email and private key.'); + } else if (error.message.includes('403') || error.message.includes('PERMISSION_DENIED')) { + throw new Error('Permission denied. Please ensure your service account has access to Vertex AI.'); + } else if (error.message.includes('404') || error.message.includes('NOT_FOUND')) { + throw new Error('Project or location not found. Please check your GCP Project ID and location.'); + } + } + throw new Error('Validation failed. Please check the log for more details.'); + } +}; diff --git a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/webview.ts b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/webview.ts index a22a7f477d1..d5cf9e0489a 100644 --- a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/webview.ts +++ b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/webview.ts @@ -24,6 +24,7 @@ import { RPCLayer } from '../../RPCLayer'; import { extension } from '../../BalExtensionContext'; import { AIStateMachine } from './aiMachine'; import { AIMachineEventType } from '@wso2/ballerina-core'; +import { approvalManager } from '../../features/ai/state/ApprovalManager'; export class AiPanelWebview { public static currentPanel: AiPanelWebview | undefined; @@ -126,6 +127,9 @@ export class AiPanelWebview { } public dispose() { + + approvalManager.cancelAllPending("AI Panel closed"); + AiPanelWebview.currentPanel = undefined; AIStateMachine.sendEvent(AIMachineEventType.DISPOSE); this._panel?.dispose(); diff --git a/workspaces/ballerina/ballerina-extension/src/views/evaluation-report/webview.ts b/workspaces/ballerina/ballerina-extension/src/views/evaluation-report/webview.ts new file mode 100644 index 00000000000..88e16cfd2a8 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/views/evaluation-report/webview.ts @@ -0,0 +1,141 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Disposable, Uri, ViewColumn, WebviewPanel, window } from "vscode"; +import { extension } from "../../BalExtensionContext"; +import path from "path"; +import * as fs from "fs"; + +export class EvaluationReportWebview { + public static currentPanel: EvaluationReportWebview | undefined; + private _panel: WebviewPanel; + private _disposables: Disposable[] = []; + + private constructor(panel: WebviewPanel, reportContent: string, reportDir: Uri) { + this._panel = panel; + this._panel.onDidDispose(() => this.dispose(), null, this._disposables); + + // Convert local resource paths to webview URIs + const processedHtml = this.processHtmlContent(reportContent, reportDir); + + this._panel.webview.html = processedHtml; + } + + private processHtmlContent(reportContent: string, reportDir: Uri): string { + // First, inject VS Code API script + let html = reportContent.replace( + "", + `` + ); + + // If wasn't found, try injecting at the start of body + if (html === reportContent) { + html = reportContent.replace( + /]*)>/i, + `` + ); + } + + // Convert relative paths to webview URIs + // Handle src="./..." or src="..." (relative paths) + html = html.replace(/(?:src|href)=["'](?!http|https|data:)([^"']+)["']/gi, (match, relativePath) => { + try { + const resourcePath = Uri.joinPath(reportDir, relativePath); + const webviewUri = this._panel.webview.asWebviewUri(resourcePath); + return match.replace(relativePath, webviewUri.toString()); + } catch (e) { + console.error('Failed to convert resource path:', relativePath, e); + return match; + } + }); + + return html; + } + + public static async createOrShow(reportUri: Uri): Promise { + const reportPath = reportUri.fsPath; + + // Validate file exists + if (!fs.existsSync(reportPath)) { + window.showErrorMessage(`Evaluation report not found: ${reportPath}`); + return; + } + + // Read HTML content + let reportContent: string; + try { + reportContent = fs.readFileSync(reportPath, 'utf8'); + } catch (error) { + window.showErrorMessage(`Failed to read evaluation report: ${error}`); + console.error('Failed to read evaluation report:', error); + return; + } + + const fileName = path.basename(reportPath); + const reportDir = Uri.file(path.dirname(reportPath)); + + // Dispose existing panel so the new one can be created with the correct localResourceRoots + if (EvaluationReportWebview.currentPanel) { + EvaluationReportWebview.currentPanel.dispose(); + } + + // Create new panel + const panel = window.createWebviewPanel( + "ballerinaEvaluationReport", + `Evaluation Report - ${fileName}`, + ViewColumn.Active, + { + enableScripts: true, + retainContextWhenHidden: true, + localResourceRoots: [reportDir], + } + ); + + panel.iconPath = { + light: Uri.file(path.join(extension.context.extensionPath, "resources", "icons", "dark-icon.svg")), + dark: Uri.file(path.join(extension.context.extensionPath, "resources", "icons", "light-icon.svg")), + }; + + EvaluationReportWebview.currentPanel = new EvaluationReportWebview(panel, reportContent, reportDir); + } + + private updateContent(reportContent: string, reportDir: Uri): void { + const processedHtml = this.processHtmlContent(reportContent, reportDir); + this._panel.webview.html = processedHtml; + } + + public dispose(): void { + EvaluationReportWebview.currentPanel = undefined; + this._panel.dispose(); + + while (this._disposables.length) { + const disposable = this._disposables.pop(); + if (disposable) { + disposable.dispose(); + } + } + } +} diff --git a/workspaces/ballerina/ballerina-extension/src/views/visualizer/activate.ts b/workspaces/ballerina/ballerina-extension/src/views/visualizer/activate.ts index d3bfc9aeef8..3ce6dc6952c 100644 --- a/workspaces/ballerina/ballerina-extension/src/views/visualizer/activate.ts +++ b/workspaces/ballerina/ballerina-extension/src/views/visualizer/activate.ts @@ -19,6 +19,8 @@ import * as vscode from 'vscode'; import { MESSAGES, PALETTE_COMMANDS } from '../../features/project/cmds/cmd-runner'; import { StateMachine, openView } from '../../stateMachine'; +import { openPopupView, StateMachinePopup } from '../../stateMachinePopup'; +import { hasOpenForm, clearFormState } from '../../rpc-managers/bi-diagram/form-state'; import { extension } from '../../BalExtensionContext'; import { BI_COMMANDS, EVENT_TYPE, MACHINE_VIEW, NodePosition, ProjectInfo, SHARED_COMMANDS } from '@wso2/ballerina-core'; import { buildProjectsStructure } from '../../utils/project-artifacts'; @@ -67,6 +69,27 @@ export function activateSubscriptions() { position, resetHistory = false ) => { + // When a form is open (popup or side panel), prompt user before navigating away + const isPopupFormOpen = StateMachinePopup.isActive(); + const isSidePanelFormOpen = hasOpenForm(); + if (isPopupFormOpen || isSidePanelFormOpen) { + const discardAndNavigate = "Discard and Navigate"; + const result = await vscode.window.showWarningMessage( + "You have unsaved changes in the open form. Discard changes and navigate?", + { modal: true }, + discardAndNavigate + ); + if (result !== discardAndNavigate) { + return; + } + if (isPopupFormOpen) { + openPopupView(EVENT_TYPE.CLOSE_VIEW, { view: null }); + } + if (isSidePanelFormOpen) { + clearFormState(); + } + } + // Check if position is a LineRange object (has 'start' and 'end' keys) let nodePosition: NodePosition = position; if (position && typeof position === "object" && "start" in position && "end" in position) { @@ -200,7 +223,7 @@ function openTypeDiagramView(projectPath?: string, resetHistory = false): void { async function openTypeDiagramForWorkspace(projectInfo: ProjectInfo): Promise { const availablePackages = projectInfo?.children.map((child: any) => child.projectPath) ?? []; - const selectedPackage = await selectPackageOrPrompt(availablePackages, "Select a package to open type diagram"); + const selectedPackage = await selectPackageOrPrompt(availablePackages, "Select an integration to open type diagram"); if (!selectedPackage) { return false; } diff --git a/workspaces/ballerina/ballerina-extension/src/views/visualizer/webview.ts b/workspaces/ballerina/ballerina-extension/src/views/visualizer/webview.ts index 4b13946ad73..ec8a1f82e6c 100644 --- a/workspaces/ballerina/ballerina-extension/src/views/visualizer/webview.ts +++ b/workspaces/ballerina/ballerina-extension/src/views/visualizer/webview.ts @@ -28,6 +28,8 @@ import { LANGUAGE } from "../../core"; import { CodeData, MACHINE_VIEW } from "@wso2/ballerina-core"; import { refreshDataMapper } from "../../rpc-managers/data-mapper/utils"; import { AiPanelWebview } from "../ai-panel/webview"; +import { approvalViewManager } from "../../features/ai/state/ApprovalViewManager"; +import { StateMachinePopup } from "../../stateMachinePopup"; export class VisualizerWebview { public static currentPanel: VisualizerWebview | undefined; @@ -98,6 +100,16 @@ export class VisualizerWebview { } }, extension.context); + vscode.workspace.onDidSaveTextDocument((document) => { + const configTomlSaved = document.languageId === LANGUAGE.TOML && + document.fileName.endsWith("Config.toml"); + const state = StateMachine.state(); + const machineReady = typeof state === 'object' && 'viewActive' in state && state.viewActive === "viewReady"; + if (configTomlSaved && machineReady) { + sendUpdateNotificationToWebview(true); + } + }, extension.context); + vscode.workspace.onDidDeleteFiles(() => { sendUpdateNotificationToWebview(); }); @@ -106,8 +118,10 @@ export class VisualizerWebview { vscode.commands.executeCommand('setContext', 'isBalVisualizerActive', this._panel?.active); // Refresh the webview when becomes active const state = StateMachine.state(); + const popupState = StateMachinePopup.state(); const machineReady = typeof state === 'object' && 'viewActive' in state && state.viewActive === "viewReady"; - if (this._panel?.active && machineReady) { + const popupActive = typeof popupState === 'object' && 'open' in popupState && popupState.open === "active"; + if (this._panel?.active && machineReady && !popupActive) { sendUpdateNotificationToWebview(true); } }); @@ -281,6 +295,8 @@ export class VisualizerWebview { } public dispose() { + approvalViewManager.onVisualizerClosed(); + VisualizerWebview.currentPanel = undefined; this._panel?.dispose(); diff --git a/workspaces/ballerina/ballerina-low-code-diagram/package.json b/workspaces/ballerina/ballerina-low-code-diagram/package.json index 89be7a03d29..14e568138e1 100644 --- a/workspaces/ballerina/ballerina-low-code-diagram/package.json +++ b/workspaces/ballerina/ballerina-low-code-diagram/package.json @@ -21,88 +21,88 @@ "storybook:setup": "node tools/setup-storybook.js" }, "dependencies": { - "@date-io/date-fns": "^3.2.1", + "@date-io/date-fns": "3.2.1", "@wso2/ballerina-core": "workspace:*", "@wso2/syntax-tree": "workspace:*", - "classnames": "^2.5.1", - "clipboard-copy": "^4.0.1", - "clsx": "^2.1.1", + "classnames": "2.5.1", + "clipboard-copy": "4.0.1", + "clsx": "2.1.1", "cron-validator": "1.3.1", - "date-fns": "^4.1.0", - "date-fns-tz": "^3.2.0", - "dexie": "^4.0.11", - "graphql": "^16.11.0", - "handlebars": "^4.7.8", - "jest": "^29.7.0", - "joi": "^17.13.3", - "lodash.camelcase": "^4.3.0", - "lodash.clonedeep": "^4.5.0", - "lodash.debounce": "^4.0.8", + "date-fns": "4.1.0", + "date-fns-tz": "3.2.0", + "dexie": "4.0.11", + "graphql": "16.11.0", + "handlebars": "4.7.8", + "jest": "29.7.0", + "joi": "17.13.3", + "lodash.camelcase": "4.3.0", + "lodash.clonedeep": "4.5.0", + "lodash.debounce": "4.0.8", "monaco-editor": "0.52.2", "react": "18.2.0", "react-dom": "18.2.0", - "react-intl": "^7.1.11", - "react-lottie": "^1.2.10", - "react-zoom-pan-pinch": "^3.7.0", - "uuid": "^11.1.0", - "vscode-languageserver-protocol": "^3.17.5" + "react-intl": "7.1.11", + "react-lottie": "1.2.10", + "react-zoom-pan-pinch": "3.7.0", + "uuid": "11.1.0", + "vscode-languageserver-protocol": "3.17.5" }, "devDependencies": { - "@babel/core": "^7.27.1", - "@babel/preset-env": "^7.27.2", - "@rollup/plugin-commonjs": "^28.0.3", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^16.0.1", - "@storybook/addon-actions": "^6.5.16", - "@storybook/addon-essentials": "^6.5.16", - "@storybook/addon-links": "^6.5.16", - "@storybook/builder-webpack5": "^6.5.16", - "@storybook/manager-webpack5": "^6.5.9", - "@storybook/react": "^6.5.16", - "@types/classnames": "^2.2.9", - "@types/handlebars": "^4.1.0", - "@types/lodash.camelcase": "^4.3.0", - "@types/lodash.clonedeep": "^4.5.6", - "@types/lodash.debounce": "^4.0.6", + "@babel/core": "7.27.1", + "@babel/preset-env": "7.27.2", + "@rollup/plugin-commonjs": "28.0.3", + "@rollup/plugin-json": "6.1.0", + "@rollup/plugin-node-resolve": "16.0.1", + "@storybook/addon-actions": "6.5.16", + "@storybook/addon-essentials": "6.5.16", + "@storybook/addon-links": "6.5.16", + "@storybook/builder-webpack5": "6.5.16", + "@storybook/manager-webpack5": "6.5.9", + "@storybook/react": "6.5.16", + "@types/classnames": "2.2.9", + "@types/handlebars": "4.1.0", + "@types/lodash.camelcase": "4.3.0", + "@types/lodash.clonedeep": "4.5.6", + "@types/lodash.debounce": "4.0.6", "@types/react": "18.2.0", "@types/react-dom": "18.2.0", - "@types/react-lottie": "^1.2.10", - "@types/uuid": "^10.0.0", - "@types/webpack": "^5.28.5", - "babel-loader": "^10.0.0", - "copy-webpack-plugin": "^13.0.0", - "copyfiles": "^2.4.1", - "css-loader": "^7.1.2", - "express": "^4.22.1", - "file-loader": "^6.2.0", - "fork-ts-checker-webpack-plugin": "^9.1.0", - "glob": "^11.1.0", - "react-scripts-ts": "^3.1.0", - "react-test-renderer": "^19.1.0", - "rimraf": "^6.0.1", - "rollup": "^4.41.0", - "rollup-plugin-import-css": "^3.5.8", - "rollup-plugin-peer-deps-external": "^2.2.4", - "rollup-plugin-postcss": "^4.0.2", - "rollup-plugin-scss": "^4.0.1", - "rollup-plugin-svg": "^2.0.0", - "rollup-plugin-typescript2": "^0.36.0", - "sass": "^1.89.0", - "sass-loader": "^16.0.5", - "storybook": "^8.6.14", - "style-loader": "^4.0.0", - "stylelint": "^16.19.1", - "stylelint-config-standard": "^38.0.0", - "svg-url-loader": "^8.0.0", - "ts-loader": "^9.5.2", - "tslib": "^2.8.1", - "tslint": "^6.1.3", - "tslint-react": "^5.0.0", - "tslint-react-hooks": "^2.2.2", + "@types/react-lottie": "1.2.10", + "@types/uuid": "10.0.0", + "@types/webpack": "5.28.5", + "babel-loader": "10.0.0", + "copy-webpack-plugin": "13.0.0", + "copyfiles": "2.4.1", + "css-loader": "7.1.2", + "express": "4.22.1", + "file-loader": "6.2.0", + "fork-ts-checker-webpack-plugin": "9.1.0", + "glob": "11.1.0", + "react-scripts-ts": "3.1.0", + "react-test-renderer": "19.1.0", + "rimraf": "6.0.1", + "rollup": "4.41.0", + "rollup-plugin-import-css": "3.5.8", + "rollup-plugin-peer-deps-external": "2.2.4", + "rollup-plugin-postcss": "4.0.2", + "rollup-plugin-scss": "4.0.1", + "rollup-plugin-svg": "2.0.0", + "rollup-plugin-typescript2": "0.36.0", + "sass": "1.89.0", + "sass-loader": "16.0.5", + "storybook": "8.6.14", + "style-loader": "4.0.0", + "stylelint": "16.19.1", + "stylelint-config-standard": "38.0.0", + "svg-url-loader": "8.0.0", + "ts-loader": "9.5.2", + "tslib": "2.8.1", + "tslint": "6.1.3", + "tslint-react": "5.0.0", + "tslint-react-hooks": "2.2.2", "typescript": "5.8.3", - "webpack": "^5.99.8", - "webpack-cli": "^6.0.1", - "webpack-dev-server": "^5.2.1" + "webpack": "5.104.1", + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.3" }, "repository": { "type": "git", diff --git a/workspaces/ballerina/ballerina-rpc-client/package.json b/workspaces/ballerina/ballerina-rpc-client/package.json index 43fbe5103cf..56b3e8d1c7e 100644 --- a/workspaces/ballerina/ballerina-rpc-client/package.json +++ b/workspaces/ballerina/ballerina-rpc-client/package.json @@ -13,25 +13,26 @@ "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0" }, "dependencies": { - "@types/vscode-webview": "^1.57.3", + "@types/vscode-webview": "1.57.3", "@wso2/ballerina-core": "workspace:*", "@wso2/syntax-tree": "workspace:*", "monaco-editor": "0.44.0", "react": "18.2.0", "react-dom": "18.2.0", - "vscode-messenger-common": "^0.4.5", - "vscode-messenger-webview": "^0.5.1", - "vscode-languageserver-types": "^3.17.5" + "@wso2/wso2-platform-core": "workspace:*", + "vscode-messenger-common": "0.4.5", + "vscode-messenger-webview": "0.5.1", + "vscode-languageserver-types": "3.17.5" }, "devDependencies": { "@types/react": "18.2.0", "@types/react-dom": "18.2.0", "@typescript-eslint/eslint-plugin": "8.32.1", "@typescript-eslint/parser": "8.32.1", - "copyfiles": "^2.4.1", + "copyfiles": "2.4.1", "eslint": "9.27.0", - "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-react-refresh": "^0.4.20", + "eslint-plugin-react-hooks": "5.2.0", + "eslint-plugin-react-refresh": "0.4.20", "typescript": "5.8.3" }, "author": "wso2", diff --git a/workspaces/ballerina/ballerina-rpc-client/src/BallerinaRpcClient.ts b/workspaces/ballerina/ballerina-rpc-client/src/BallerinaRpcClient.ts index f4cba7d1927..fa734bbbbe4 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/BallerinaRpcClient.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/BallerinaRpcClient.ts @@ -59,7 +59,9 @@ import { ProjectMigrationResult, onMigratedProject, refreshReviewMode, - onHideReviewActions + onHideReviewActions, + approvalOverlayState, + ApprovalOverlayState } from "@wso2/ballerina-core"; import { LangClientRpcClient } from "./rpc-clients/lang-client/rpc-client"; import { LibraryBrowserRpcClient } from "./rpc-clients/library-browser/rpc-client"; @@ -73,6 +75,7 @@ import { TestManagerServiceRpcClient } from "./rpc-clients"; import { AiAgentRpcClient } from "./rpc-clients/ai-agent/rpc-client"; import { ICPServiceRpcClient } from "./rpc-clients/icp-service/rpc-client"; import { AgentChatRpcClient } from "./rpc-clients/agent-chat/rpc-client"; +import { PlatformExtRpcClient } from "./rpc-clients/platform-ext/platform-ext-client"; export class BallerinaRpcClient { @@ -95,6 +98,7 @@ export class BallerinaRpcClient { private _aiAgent: AiAgentRpcClient; private _icpManager: ICPServiceRpcClient; private _agentChat: AgentChatRpcClient; + private _platformExt: PlatformExtRpcClient; constructor() { this.messenger = new Messenger(vscode); @@ -117,6 +121,7 @@ export class BallerinaRpcClient { this._aiAgent = new AiAgentRpcClient(this.messenger); this._icpManager = new ICPServiceRpcClient(this.messenger); this._agentChat = new AgentChatRpcClient(this.messenger); + this._platformExt = new PlatformExtRpcClient(this.messenger); } getAIAgentRpcClient(): AiAgentRpcClient { @@ -187,6 +192,10 @@ export class BallerinaRpcClient { return this._migrateIntegration; } + getPlatformRpcClient(): PlatformExtRpcClient { + return this._platformExt; + } + getVisualizerLocation(): Promise { return this.messenger.sendRequest(getVisualizerLocation, HOST_EXTENSION); } @@ -280,4 +289,8 @@ export class BallerinaRpcClient { onHideReviewActions(callback: () => void) { this.messenger.onNotification(onHideReviewActions, callback); } + + onApprovalOverlayState(callback: (data: ApprovalOverlayState) => void) { + this.messenger.onNotification(approvalOverlayState, callback); + } } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/agent-chat/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/agent-chat/rpc-client.ts index a188f336d61..72b02b5ff1b 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/agent-chat/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/agent-chat/rpc-client.ts @@ -25,7 +25,9 @@ import { getChatMessage, getTracingStatus, showTraceView, + showSessionOverview, TraceInput, + SessionInput, TraceStatus, ChatHistoryResponse, AgentStatusResponse, @@ -60,6 +62,10 @@ export class AgentChatRpcClient implements AgentChatAPI { return this._messenger.sendRequest(showTraceView, HOST_EXTENSION, params); } + showSessionOverview(params: SessionInput): Promise { + return this._messenger.sendRequest(showSessionOverview, HOST_EXTENSION, params); + } + getChatHistory(): Promise { return this._messenger.sendRequest(getChatHistory, HOST_EXTENSION); } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/ai-panel/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/ai-panel/rpc-client.ts index e61df942a79..67604c31472 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/ai-panel/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/ai-panel/rpc-client.ts @@ -27,6 +27,8 @@ import { CheckpointInfo, ConnectorSpecCancelRequest, ConnectorSpecRequest, + ConfigurationCancelRequest, + ConfigurationProvideRequest, DocGenerationRequest, GenerateAgentCodeRequest, GenerateOpenAPIRequest, @@ -45,12 +47,14 @@ import { TestGenerationMentions, UIChatMessage, UpdateChatMessageRequest, + UsageResponse, abortAIGeneration, acceptChanges, addFilesToProject, approvePlan, approveTask, cancelConnectorSpec, + cancelConfiguration, clearChat, clearInitialPrompt, createTestDirecoryIfNotExists, @@ -64,6 +68,7 @@ import { generateOpenAPI, getAIMachineSnapshot, getActiveTempDir, + getAffectedPackages, getChatMessages, getCheckpoints, getDefaultPrompt, @@ -72,22 +77,23 @@ import { getGeneratedDocumentation, getLoginMethod, getSemanticDiff, - getAffectedPackages, - isWorkspaceProject, getServiceNames, isCopilotSignedIn, - isPlanModeFeatureEnabled, + isPlatformExtensionAvailable, isUserAuthenticated, + isWorkspaceProject, markAlertShown, openAIPanel, openChatWindowWithCommand, promptGithubAuthorize, provideConnectorSpec, + provideConfiguration, restoreCheckpoint, showSignInAlert, submitFeedback, updateChatMessage, - updateRequirementSpecification + updateRequirementSpecification, + getUsage } from "@wso2/ballerina-core"; import { HOST_EXTENSION } from "vscode-messenger-common"; import { Messenger } from "vscode-messenger-webview"; @@ -103,6 +109,10 @@ export class AiPanelRpcClient implements AIPanelAPI { return this._messenger.sendRequest(getLoginMethod, HOST_EXTENSION); } + isPlatformExtensionAvailable(): Promise { + return this._messenger.sendRequest(isPlatformExtensionAvailable, HOST_EXTENSION); + } + getDefaultPrompt(): Promise { return this._messenger.sendRequest(getDefaultPrompt, HOST_EXTENSION); } @@ -199,9 +209,6 @@ export class AiPanelRpcClient implements AIPanelAPI { return this._messenger.sendRequest(openAIPanel, HOST_EXTENSION, params); } - isPlanModeFeatureEnabled(): Promise { - return this._messenger.sendRequest(isPlanModeFeatureEnabled, HOST_EXTENSION); - } getSemanticDiff(params: SemanticDiffRequest): Promise { return this._messenger.sendRequest(getSemanticDiff, HOST_EXTENSION, params); @@ -247,6 +254,14 @@ export class AiPanelRpcClient implements AIPanelAPI { return this._messenger.sendRequest(cancelConnectorSpec, HOST_EXTENSION, params); } + provideConfiguration(params: ConfigurationProvideRequest): Promise { + return this._messenger.sendRequest(provideConfiguration, HOST_EXTENSION, params); + } + + cancelConfiguration(params: ConfigurationCancelRequest): Promise { + return this._messenger.sendRequest(cancelConfiguration, HOST_EXTENSION, params); + } + getChatMessages(): Promise { return this._messenger.sendRequest(getChatMessages, HOST_EXTENSION); } @@ -270,4 +285,8 @@ export class AiPanelRpcClient implements AIPanelAPI { getActiveTempDir(): Promise { return this._messenger.sendRequest(getActiveTempDir, HOST_EXTENSION); } + + getUsage(): Promise { + return this._messenger.sendRequest(getUsage, HOST_EXTENSION); + } } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/bi-diagram/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/bi-diagram/rpc-client.ts index c5e1a0d3489..6d7bb0280a4 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/bi-diagram/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/bi-diagram/rpc-client.ts @@ -60,6 +60,7 @@ import { DeleteTypeRequest, DeleteTypeResponse, DeploymentRequest, + WorkspaceDeploymentRequest, DeploymentResponse, DevantMetadata, EndOfFileRequest, @@ -80,6 +81,8 @@ import { GetRecordConfigResponse, GetRecordModelFromSourceRequest, GetRecordModelFromSourceResponse, + GetSimpleTypeOfExpressionRequest, + GetSimpleTypeOfExpressionResponse, GetTypeRequest, GetTypeResponse, GetTypesRequest, @@ -141,10 +144,12 @@ import { deleteProject, deleteType, deployProject, + deployWorkspace, formDidClose, formDidOpen, generateOpenApiClient, getAiSuggestions, + getAvailableAgents, getAvailableChunkers, getAvailableDataLoaders, getAvailableEmbeddingProviders, @@ -158,6 +163,7 @@ import { getDataMapperCompletions, getDesignModel, getDevantMetadata, + getWorkspaceDevantMetadata, getEnclosedFunction, getEndOfFile, getExpressionCompletions, @@ -179,6 +185,7 @@ import { getRecordSource, getServiceClassModel, getSignatureHelp, + getSimpleTypeOfExpression, getSourceCode, getType, getTypeFromJson, @@ -203,7 +210,8 @@ import { updateType, updateTypes, validateProjectPath, - verifyTypeDelete + verifyTypeDelete, + WorkspaceDevantMetadata } from "@wso2/ballerina-core"; import { HOST_EXTENSION } from "vscode-messenger-common"; import { Messenger } from "vscode-messenger-webview"; @@ -235,6 +243,10 @@ export class BiDiagramRpcClient implements BIDiagramAPI { return this._messenger.sendRequest(getAvailableNodes, HOST_EXTENSION, params); } + getAvailableAgents(params: BIAvailableNodesRequest): Promise { + return this._messenger.sendRequest(getAvailableAgents, HOST_EXTENSION, params); + } + getAvailableModelProviders(params: BIAvailableNodesRequest): Promise { return this._messenger.sendRequest(getAvailableModelProviders, HOST_EXTENSION, params); } @@ -334,7 +346,7 @@ export class BiDiagramRpcClient implements BIDiagramAPI { getConfigVariableNodeTemplate(params: GetConfigVariableNodeTemplateRequest): Promise { return this._messenger.sendRequest(getConfigVariableNodeTemplate, HOST_EXTENSION, params); } - + OpenConfigTomlRequest(params: OpenConfigTomlRequest): Promise { return this._messenger.sendRequest(openConfigToml, HOST_EXTENSION, params); } @@ -359,6 +371,10 @@ export class BiDiagramRpcClient implements BIDiagramAPI { return this._messenger.sendRequest(deployProject, HOST_EXTENSION, params); } + deployWorkspace(params: WorkspaceDeploymentRequest): Promise { + return this._messenger.sendRequest(deployWorkspace, HOST_EXTENSION, params); + } + openAIChat(params: AIChatRequest): void { return this._messenger.sendNotification(openAIChat, HOST_EXTENSION, params); } @@ -419,6 +435,10 @@ export class BiDiagramRpcClient implements BIDiagramAPI { return this._messenger.sendRequest(getType, HOST_EXTENSION, params); } + getSimpleTypeOfExpression(params: GetSimpleTypeOfExpressionRequest): Promise { + return this._messenger.sendRequest(getSimpleTypeOfExpression, HOST_EXTENSION, params); + } + updateType(params: UpdateTypeRequest): Promise { return this._messenger.sendRequest(updateType, HOST_EXTENSION, params); } @@ -507,6 +527,10 @@ export class BiDiagramRpcClient implements BIDiagramAPI { return this._messenger.sendRequest(getDevantMetadata, HOST_EXTENSION); } + getWorkspaceDevantMetadata(): Promise { + return this._messenger.sendRequest(getWorkspaceDevantMetadata, HOST_EXTENSION); + } + generateOpenApiClient(params: OpenAPIClientGenerationRequest): Promise { return this._messenger.sendRequest(generateOpenApiClient, HOST_EXTENSION, params); } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/common/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/common/rpc-client.ts index a7731461765..274ff3c41a3 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/common/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/common/rpc-client.ts @@ -23,11 +23,13 @@ import { CommandsRequest, CommandsResponse, CommonRPCAPI, + DefaultOrgNameResponse, FileOrDirRequest, FileOrDirResponse, GoToSourceRequest, OpenExternalUrlRequest, PackageTomlValues, + PublishToCentralResponse, RunExternalCommandRequest, RunExternalCommandResponse, SampleDownloadRequest, @@ -42,18 +44,30 @@ import { experimentalEnabled, getBallerinaDiagnostics, getCurrentProjectTomlValues, + getDefaultOrgName, getTypeCompletions, getWorkspaceFiles, getWorkspaceRoot, getWorkspaceType, goToSource, + hasCentralPATConfigured, isNPSupported, openExternalUrl, + publishToCentral, runBackgroundTerminalCommand, selectFileOrDirPath, selectFileOrFolderPath, - showErrorMessage + showErrorMessage, + SetWebviewCacheRequestParam, + SetWebviewCache, + RestoreWebviewCache, + ClearWebviewCache, + ShowInfoModalRequest, + showInformationModal, + ShowQuickPickRequest, + showQuickPick } from "@wso2/ballerina-core"; +import { QuickPickItem } from "vscode"; import { HOST_EXTENSION } from "vscode-messenger-common"; import { Messenger } from "vscode-messenger-webview"; @@ -116,6 +130,14 @@ export class CommonRpcClient implements CommonRPCAPI { return this._messenger.sendNotification(showErrorMessage, HOST_EXTENSION, params); } + showInformationModal(params: ShowInfoModalRequest): Promise { + return this._messenger.sendRequest(showInformationModal, HOST_EXTENSION, params); + } + + showQuickPick(params: ShowQuickPickRequest): Promise { + return this._messenger.sendRequest(showQuickPick, HOST_EXTENSION, params); + } + getCurrentProjectTomlValues(): Promise> { return this._messenger.sendRequest(getCurrentProjectTomlValues, HOST_EXTENSION); } @@ -124,7 +146,31 @@ export class CommonRpcClient implements CommonRPCAPI { return this._messenger.sendRequest(getWorkspaceType, HOST_EXTENSION); } + setWebviewCache(params: SetWebviewCacheRequestParam): Promise { + return this._messenger.sendRequest(SetWebviewCache, HOST_EXTENSION, params); + } + + restoreWebviewCache(params: IDBValidKey): Promise { + return this._messenger.sendRequest(RestoreWebviewCache, HOST_EXTENSION, params); + } + + clearWebviewCache(params: IDBValidKey): Promise { + return this._messenger.sendRequest(ClearWebviewCache, HOST_EXTENSION, params); + } + downloadSelectedSampleFromGithub(params: SampleDownloadRequest): Promise { return this._messenger.sendRequest(downloadSelectedSampleFromGithub, HOST_EXTENSION, params); } + + getDefaultOrgName(): Promise { + return this._messenger.sendRequest(getDefaultOrgName, HOST_EXTENSION); + } + + publishToCentral(): Promise { + return this._messenger.sendRequest(publishToCentral, HOST_EXTENSION); + } + + hasCentralPATConfigured(): Promise { + return this._messenger.sendRequest(hasCentralPATConfigured, HOST_EXTENSION); + } } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/connector-wizard/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/connector-wizard/rpc-client.ts index f23fb8f8d77..65c8f41d8ae 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/connector-wizard/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/connector-wizard/rpc-client.ts @@ -26,6 +26,9 @@ import { generateWSDLApiClient, getConnector, getConnectors, + introspectCredentials, + IntrospectCredentialsRequest, + IntrospectCredentialsResponse, introspectDatabase, IntrospectDatabaseRequest, IntrospectDatabaseResponse, @@ -64,4 +67,8 @@ export class ConnectorWizardRpcClient implements ConnectorWizardAPI { generateWSDLApiClient(params: WSDLApiClientGenerationRequest): Promise { return this._messenger.sendRequest(generateWSDLApiClient, HOST_EXTENSION, params); } + + introspectCredentials(params: IntrospectCredentialsRequest): Promise { + return this._messenger.sendRequest(introspectCredentials, HOST_EXTENSION, params); + } } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/data-mapper/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/data-mapper/rpc-client.ts index b049b5bbb1d..5cd1e4117bf 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/data-mapper/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/data-mapper/rpc-client.ts @@ -27,6 +27,7 @@ import { ConvertExpressionRequest, ConvertExpressionResponse, ConvertToQueryRequest, + CreateConvertedVariableRequest, DMModelRequest, DataMapperAPI, DataMapperModelRequest, @@ -55,6 +56,7 @@ import { addSubMapping, clearTypeCache, convertToQuery, + createConvertedVariable, deleteClause, deleteMapping, deleteSubMapping, @@ -167,6 +169,10 @@ export class DataMapperRpcClient implements DataMapperAPI { return this._messenger.sendRequest(getConvertedExpression, HOST_EXTENSION, params); } + createConvertedVariable(params: CreateConvertedVariableRequest): Promise { + return this._messenger.sendRequest(createConvertedVariable, HOST_EXTENSION, params); + } + clearTypeCache(): Promise { return this._messenger.sendRequest(clearTypeCache, HOST_EXTENSION); } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/platform-ext/platform-ext-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/platform-ext/platform-ext-client.ts new file mode 100644 index 00000000000..06a114d27e5 --- /dev/null +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/platform-ext/platform-ext-client.ts @@ -0,0 +1,159 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { PlatformExtAPI, getMarketplaceItems, getMarketplaceItem, getMarketplaceIdl, getConnections, deleteLocalConnectionsConfig, getDevantConsoleUrl, getConnection, onPlatformExtStoreStateChange, refreshConnectionList, getPlatformStore, setConnectedToDevant, setSelectedComponent, deployIntegrationInDevant, deleteDevantTempConfigs, generateCustomConnectorFromOAS, addDevantTempConfig, setSelectedEnv, createConnectionConfig, replaceDevantTempConfigValues, registerDevantMarketplaceService, createThirdPartyConnection, initializeDevantOASConnection, createInternalConnection, getComponentList, getMarketplaceDatabases, getDatabaseServer, getDatabaseAdminCredential, getDatabaseCredentials, getProjectEnvs, createDatabaseConnection, getMarketplaceDatabaseItem, resolveConnectionSecrets } from "@wso2/ballerina-core"; +import { HOST_EXTENSION } from "vscode-messenger-common"; +import { Messenger } from "vscode-messenger-webview"; +import { GetMarketplaceListReq,MarketplaceListResp, ComponentKind, GetMarketplaceIdlReq, MarketplaceIdlResp, ConnectionListItem, GetConnectionsReq, DeleteLocalConnectionsConfigReq, GetMarketplaceItemReq, MarketplaceItem, GetConnectionItemReq, ConnectionDetailed, CreateLocalConnectionsConfigReq, CreateThirdPartyConnectionReq, CreateComponentConnectionReq, GetComponentsReq, MarketplaceDatabaseListResp, DatabaseServer, GetDatabaseServerReq, DatabaseAdminCredential, DatabaseCredential, GetProjectEnvsReq, Environment, CreateDatabaseConnectionReq, GetDatabaseItemReq, ResolveConnectionSecretsReq, ResolveConnectionSecretsResp } from "@wso2/wso2-platform-core" +import { AddDevantTempConfigReq, AddDevantTempConfigResp, DeleteDevantTempConfigReq, GenerateCustomConnectorFromOASReq, GenerateCustomConnectorFromOASResp, InitializeDevantOASConnectionReq, InitializeDevantOASConnectionResp, PlatformExtState, RegisterDevantMarketplaceServiceReq, ReplaceDevantTempConfigValuesReq } from "@wso2/ballerina-core/lib/rpc-types/platform-ext/interfaces"; + +export class PlatformExtRpcClient implements PlatformExtAPI { + private _messenger: Messenger; + + constructor(messenger: Messenger) { + this._messenger = messenger; + } + + getPlatformStore(): Promise { + return this._messenger.sendRequest(getPlatformStore, HOST_EXTENSION, undefined); + } + + getMarketplaceItems(params: GetMarketplaceListReq): Promise { + return this._messenger.sendRequest(getMarketplaceItems, HOST_EXTENSION, params); + } + + getMarketplaceDatabases(params: { orgId: string }): Promise { + return this._messenger.sendRequest(getMarketplaceDatabases, HOST_EXTENSION, params); + } + + getMarketplaceDatabaseItem(params: GetDatabaseItemReq): Promise { + return this._messenger.sendRequest(getMarketplaceDatabaseItem, HOST_EXTENSION, params); + } + + getDatabaseServer(params: GetDatabaseServerReq): Promise { + return this._messenger.sendRequest(getDatabaseServer, HOST_EXTENSION, params); + } + + getDatabaseAdminCredential(params: GetDatabaseServerReq): Promise { + return this._messenger.sendRequest(getDatabaseAdminCredential, HOST_EXTENSION, params); + } + + getDatabaseCredentials(params: GetDatabaseServerReq): Promise { + return this._messenger.sendRequest(getDatabaseCredentials, HOST_EXTENSION, params); + } + + createDatabaseConnection(params: CreateDatabaseConnectionReq): Promise { + return this._messenger.sendRequest(createDatabaseConnection, HOST_EXTENSION, params); + } + + getMarketplaceItem(params: GetMarketplaceItemReq): Promise { + return this._messenger.sendRequest(getMarketplaceItem, HOST_EXTENSION, params); + } + + getMarketplaceIdl(params: GetMarketplaceIdlReq): Promise { + return this._messenger.sendRequest(getMarketplaceIdl, HOST_EXTENSION, params); + } + + generateCustomConnectorFromOAS(params: GenerateCustomConnectorFromOASReq): Promise { + return this._messenger.sendRequest(generateCustomConnectorFromOAS, HOST_EXTENSION, params); + } + + initializeDevantOASConnection(params: InitializeDevantOASConnectionReq): Promise { + return this._messenger.sendRequest(initializeDevantOASConnection, HOST_EXTENSION, params); + } + + registerDevantMarketplaceService(params: RegisterDevantMarketplaceServiceReq): Promise { + return this._messenger.sendRequest(registerDevantMarketplaceService, HOST_EXTENSION, params); + } + + createThirdPartyConnection(params: CreateThirdPartyConnectionReq): Promise { + return this._messenger.sendRequest(createThirdPartyConnection, HOST_EXTENSION, params); + } + + createInternalConnection(params: CreateComponentConnectionReq): Promise { + return this._messenger.sendRequest(createInternalConnection, HOST_EXTENSION, params); + } + + replaceDevantTempConfigValues(params: ReplaceDevantTempConfigValuesReq): Promise { + return this._messenger.sendRequest(replaceDevantTempConfigValues, HOST_EXTENSION, params); + } + + addDevantTempConfig(params: AddDevantTempConfigReq): Promise { + return this._messenger.sendRequest(addDevantTempConfig, HOST_EXTENSION, params); + } + + deleteDevantTempConfigs(params: DeleteDevantTempConfigReq): Promise { + return this._messenger.sendRequest(deleteDevantTempConfigs, HOST_EXTENSION, params); + } + + getConnections(params: GetConnectionsReq): Promise { + return this._messenger.sendRequest(getConnections, HOST_EXTENSION, params); + } + + getConnection(params: GetConnectionItemReq): Promise { + return this._messenger.sendRequest(getConnection, HOST_EXTENSION, params); + } + + getComponentList(params: GetComponentsReq): Promise { + return this._messenger.sendRequest(getComponentList, HOST_EXTENSION, params); + } + + deleteLocalConnectionsConfig(params: DeleteLocalConnectionsConfigReq): Promise { + return this._messenger.sendRequest(deleteLocalConnectionsConfig, HOST_EXTENSION, params); + } + + getDevantConsoleUrl(): Promise { + return this._messenger.sendRequest(getDevantConsoleUrl, HOST_EXTENSION, undefined); + } + + getProjectEnvs(params: GetProjectEnvsReq): Promise { + return this._messenger.sendRequest(getProjectEnvs, HOST_EXTENSION, params); + } + + resolveConnectionSecrets(params: ResolveConnectionSecretsReq): Promise { + return this._messenger.sendRequest(resolveConnectionSecrets, HOST_EXTENSION, params); + } + + createConnectionConfig(params: CreateLocalConnectionsConfigReq): Promise { + return this._messenger.sendRequest(createConnectionConfig, HOST_EXTENSION, params); + } + + onPlatformExtStoreStateChange(callback: (state: PlatformExtState) => void) { + this._messenger.onNotification(onPlatformExtStoreStateChange, callback); + } + + refreshConnectionList(): Promise { + return this._messenger.sendRequest(refreshConnectionList, HOST_EXTENSION, undefined); + } + + setConnectedToDevant(connected: boolean): Promise { + return this._messenger.sendRequest(setConnectedToDevant, HOST_EXTENSION, connected); + } + + setSelectedComponent(componentId: string): Promise { + return this._messenger.sendRequest(setSelectedComponent, HOST_EXTENSION, componentId); + } + + setSelectedEnv(envId: string): Promise { + return this._messenger.sendRequest(setSelectedEnv, HOST_EXTENSION, envId); + } + + deployIntegrationInDevant(): Promise { + return this._messenger.sendRequest(deployIntegrationInDevant, HOST_EXTENSION); + } +} diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/test-manager/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/test-manager/rpc-client.ts index 68ef5a6f610..9c8dc050ac2 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/test-manager/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/test-manager/rpc-client.ts @@ -15,10 +15,10 @@ * specific language governing permissions and limitations * under the License. */ -import { TestManagerServiceAPI, GetTestFunctionRequest, AddOrUpdateTestFunctionRequest, - TestSourceEditResponse, GetTestFunctionResponse, - getTestFunction, addTestFunction, updateTestFunction, - SourceUpdateResponse} from "@wso2/ballerina-core"; +import { TestManagerServiceAPI, GetTestFunctionRequest, AddOrUpdateTestFunctionRequest, + TestSourceEditResponse, GetTestFunctionResponse, + getTestFunction, addTestFunction, updateTestFunction, + SourceUpdateResponse, GetEvalsetsRequest, GetEvalsetsResponse, getEvalsets} from "@wso2/ballerina-core"; import { HOST_EXTENSION } from "vscode-messenger-common"; import { Messenger } from "vscode-messenger-webview"; @@ -40,5 +40,9 @@ export class TestManagerServiceRpcClient implements TestManagerServiceAPI { updateTestFunction(params: AddOrUpdateTestFunctionRequest): Promise { return this._messenger.sendRequest(updateTestFunction, HOST_EXTENSION, params); } + + getEvalsets(params: GetEvalsetsRequest): Promise { + return this._messenger.sendRequest(getEvalsets, HOST_EXTENSION, params); + } } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/visualizer/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/visualizer/rpc-client.ts index 9e76681ec11..fcd156221db 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/visualizer/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/visualizer/rpc-client.ts @@ -20,11 +20,15 @@ import { AddToUndoStackRequest, ColorThemeKind, + HandleApprovalPopupCloseRequest, HistoryEntry, JoinProjectPathRequest, JoinProjectPathResponse, OpenViewRequest, + ReopenApprovalViewRequest, ProjectStructureArtifactResponse, + SaveEvalThreadRequest, + SaveEvalThreadResponse, UndoRedoStateResponse, UpdatedArtifactsResponse, VisualizerAPI, @@ -35,14 +39,18 @@ import { goBack, goHome, goSelected, + handleApprovalPopupClose, joinProjectPath, openView, redo, + reopenApprovalView, resetUndoRedoStack, + saveEvalThread, undo, undoRedoState, updateCurrentArtifactLocation, - reviewAccepted + reviewAccepted, + GoBackRequest } from "@wso2/ballerina-core"; import { HOST_EXTENSION } from "vscode-messenger-common"; import { Messenger } from "vscode-messenger-webview"; @@ -66,8 +74,8 @@ export class VisualizerRpcClient implements VisualizerAPI { return this._messenger.sendNotification(addToHistory, HOST_EXTENSION, entry); } - goBack(): void { - return this._messenger.sendNotification(goBack, HOST_EXTENSION); + goBack(params?: GoBackRequest): void { + return this._messenger.sendNotification(goBack, HOST_EXTENSION, params); } goHome(): void { @@ -113,4 +121,15 @@ export class VisualizerRpcClient implements VisualizerAPI { reviewAccepted(): void { return this._messenger.sendNotification(reviewAccepted, HOST_EXTENSION); } + + handleApprovalPopupClose(params: HandleApprovalPopupCloseRequest): void { + return this._messenger.sendNotification(handleApprovalPopupClose, HOST_EXTENSION, params); + } + + reopenApprovalView(params: ReopenApprovalViewRequest): void { + return this._messenger.sendNotification(reopenApprovalView, HOST_EXTENSION, params); + } + saveEvalThread(params: SaveEvalThreadRequest): Promise { + return this._messenger.sendRequest(saveEvalThread, HOST_EXTENSION, params); + } } diff --git a/workspaces/ballerina/ballerina-side-panel/package.json b/workspaces/ballerina/ballerina-side-panel/package.json index c88cd97430d..d521079dc93 100644 --- a/workspaces/ballerina/ballerina-side-panel/package.json +++ b/workspaces/ballerina/ballerina-side-panel/package.json @@ -18,51 +18,48 @@ "author": "", "license": "ISC", "dependencies": { - "@codemirror/autocomplete": "~6.19.1", - "@codemirror/commands": "~6.10.0", - "@codemirror/language-data": "~6.5.2", - "@codemirror/lint": "~6.8.1", - "@codemirror/state": "~6.5.2", - "@codemirror/view": "~6.38.8", - "@emotion/react": "^11.14.0", - "@emotion/styled": "^11.14.0", + "@codemirror/autocomplete": "6.19.1", + "@codemirror/commands": "6.10.0", + "@codemirror/language-data": "6.5.2", + "@codemirror/lint": "6.8.1", + "@codemirror/state": "6.5.2", + "@codemirror/view": "6.38.8", + "@emotion/react": "11.14.0", + "@emotion/styled": "11.14.0", "@wso2/ballerina-core": "workspace:*", "@wso2/ballerina-rpc-client": "workspace:*", "@wso2/ui-toolkit": "workspace:*", "lodash": "4.17.23", - "markdown-it": "~14.1.0", - "prosemirror-commands": "~1.7.1", - "prosemirror-gapcursor": "~1.4.0", - "prosemirror-history": "~1.5.0", - "prosemirror-inputrules": "~1.5.1", - "prosemirror-keymap": "~1.2.2", - "prosemirror-markdown": "~1.13.2", - "prosemirror-model": "~1.25.4", - "prosemirror-schema-basic": "~1.2.2", - "prosemirror-schema-list": "~1.5.1", - "prosemirror-state": "~1.4.3", - "prosemirror-view": "~1.41.3", + "markdown-it": "14.1.1", + "prosemirror-commands": "1.7.1", + "prosemirror-gapcursor": "1.4.0", + "prosemirror-history": "1.5.0", + "prosemirror-inputrules": "1.5.1", + "prosemirror-keymap": "1.2.2", + "prosemirror-markdown": "1.13.2", + "prosemirror-model": "1.25.4", + "prosemirror-schema-basic": "1.2.2", + "prosemirror-schema-list": "1.5.1", + "prosemirror-state": "1.4.3", + "prosemirror-view": "1.41.3", "react": "18.2.0", "react-dom": "18.2.0", "react-hook-form": "7.56.4", - "react-markdown": "~10.1.0", - "rehype-raw": "^7.0.0", - "remark-gfm": "^4.0.1", - "@github/markdown-toolbar-element": "^2.2.3", - "@codemirror/commands": "~6.10.0", - "@codemirror/state": "~6.5.2", - "@codemirror/view": "~6.38.6", - "@codemirror/autocomplete": "~6.19.1", - "@codemirror/lang-sql": "~6.10.0", - "@codemirror/language": "~6.11.3", - "@lezer/highlight": "~1.2.3" + "@wso2/wso2-platform-core": "workspace:*", + "react-markdown": "10.1.0", + "rehype-raw": "7.0.0", + "remark-gfm": "4.0.1", + "@github/markdown-toolbar-element": "2.2.3", + "@codemirror/lang-sql": "6.10.0", + "@codemirror/language": "6.11.3", + "@lezer/highlight": "1.2.3" }, "devDependencies": { - "@storybook/react": "^6.5.16", - "@types/lodash": "~4.17.16", + "@storybook/react": "6.5.16", + "@types/lodash": "4.17.16", "@types/react": "18.2.0", "@types/react-dom": "18.2.0", - "copyfiles": "^2.4.1", + "copyfiles": "2.4.1", "typescript": "5.8.3" } } diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/Form/index.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/Form/index.tsx index 6786d00f98c..18a1ed83fb0 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/Form/index.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/Form/index.tsx @@ -16,7 +16,7 @@ * under the License. */ -import React, { forwardRef, useMemo, useEffect, useState, useRef } from "react"; +import React, { forwardRef, useCallback, useMemo, useEffect, useState, useRef } from "react"; import { useForm } from "react-hook-form"; import ReactMarkdown from "react-markdown"; import { @@ -32,24 +32,25 @@ import { import styled from "@emotion/styled"; import { ExpressionFormField, FieldDerivation, FormExpressionEditorProps, FormField, FormImports, FormValues } from "./types"; -import { EditorFactory } from "../editors/EditorFactory"; +import { FieldFactory } from "../editors/FieldFactory"; import { getValueForDropdown, isDropdownField } from "../editors/utils"; import { Diagnostic, LineRange, NodeKind, - NodePosition, SubPanel, SubPanelView, FormDiagnostics, FlowNode, ExpressionProperty, RecordTypeField, - Type, VisualizableField, NodeProperties, VisualizerLocation, getPrimaryInputType, + MACHINE_VIEW, + EditorDisplayMode, + Imports, } from "@wso2/ballerina-core"; import { FormContext, Provider } from "../../context"; import { @@ -68,6 +69,7 @@ namespace S { display: flex; flex-direction: column; gap: ${({ compact }) => (compact ? "8px" : "20px")}; + padding: ${({ nestedForm }) => (nestedForm ? "16px 5px" : "16px")}; height: ${({ nestedForm, footerActionButton }) => { if (nestedForm) return "unset"; if (footerActionButton) return "100%"; @@ -403,6 +405,7 @@ export interface FormProps { changeOptionalFieldTitle?: string; // Option to change the title of optional fields openFormTypeEditor?: (open: boolean, newType?: string, editingField?: FormField) => void; derivedFields?: FieldDerivation[]; // Configuration for auto-deriving field values from other fields + updateImports?: (key: string, imports: Imports) => void; } export const Form = forwardRef((props: FormProps) => { @@ -444,7 +447,8 @@ export const Form = forwardRef((props: FormProps) => { onValidityChange, changeOptionalFieldTitle = undefined, openFormTypeEditor, - derivedFields = [] + derivedFields = [], + updateImports, } = props; const { @@ -458,7 +462,7 @@ export const Form = forwardRef((props: FormProps) => { setValue, setError, clearErrors, - formState: { isValidating, errors, dirtyFields }, + formState: { isValidating, isValid: formStateIsValid, errors, dirtyFields }, } = useForm(); const [showAdvancedOptions, setShowAdvancedOptions] = useState(false); @@ -501,7 +505,7 @@ export const Form = forwardRef((props: FormProps) => { } else if (isDropdownField(field)) { defaultValues[field.key] = getValueForDropdown(field) ?? ""; } else if (field.type === "FLAG" && field.types?.length > 1) { - if (field.value && typeof field.value === "boolean") { + if (typeof field.value === "boolean") { defaultValues[field.key] = String(field.value); } else { @@ -517,7 +521,7 @@ export const Form = forwardRef((props: FormProps) => { if (field.key === "variable") { defaultValues[field.key] = formValues[field.key] ?? defaultValues[field.key] ?? ""; } - if (field.key === "parameters" && field.value.length === 0) { + if (field.key === "parameters" && field.value?.length && field.value.length === 0) { defaultValues[field.key] = formValues[field.key] ?? []; } @@ -555,6 +559,18 @@ export const Form = forwardRef((props: FormProps) => { diagnosticsMap.push({ key: field.key, diagnostics: [] }); } + + // Handle the case where the name is updated dynamically (e.g., from a sibling field's onValueChange like headerName) + // Sync from field.value when it differs from form - but preserve user edits (when field was manually touched) + if (field.key === "name" && field.value !== undefined && field.value !== null) { + const existingName = formValues[field.key]; + const newName = typeof field.value === "string" ? (formatJSONLikeString(field.value) ?? field.value) : String(field.value); + // Only sync from field when: form is stale (external update) or user hasn't edited the name field + if (existingName !== newName && !dirtyFields?.[field.key]) { + setValue(field.key, newName); + defaultValues[field.key] = newName; + } + } }); setDiagnosticsInfo(diagnosticsMap); reset(defaultValues); @@ -611,10 +627,12 @@ export const Form = forwardRef((props: FormProps) => { setActiveFormField(key); }; - const handleSetDiagnosticsInfo = (diagnostics: FormDiagnostics) => { - const otherDiagnostics = diagnosticsInfo?.filter((item) => item.key !== diagnostics.key) || []; - setDiagnosticsInfo([...otherDiagnostics, diagnostics]); - }; + const handleSetDiagnosticsInfo = useCallback((diagnostics: FormDiagnostics) => { + setDiagnosticsInfo(prev => { + const otherDiagnostics = prev?.filter((item) => item.key !== diagnostics.key) || []; + return [...otherDiagnostics, diagnostics]; + }); + }, []); const handleOpenSubPanel = (subPanel: SubPanel) => { let updatedSubPanel = subPanel; @@ -729,9 +747,13 @@ export const Form = forwardRef((props: FormProps) => { const expressionField = formFields.find((field) => field.key === "expression"); const targetTypeField = formFields.find((field) => field.codedata?.kind === "PARAM_FOR_TYPE_INFER"); const hasParameters = hasRequiredParameters(formFields, selectedNode) || hasOptionalParameters(formFields); - const canOpenInDataMapper = selectedNode === "VARIABLE" && + + const canOpenInDataMapper = (selectedNode === "VARIABLE" && expressionField && - visualizableField?.isDataMapped; + visualizableField?.isDataMapped) || + selectedNode === "DATA_MAPPER_CREATION"; + + const canOpenInFunctionEditor = selectedNode === "FUNCTION_CREATION"; const contextValue: FormContext = { form: { @@ -775,7 +797,11 @@ export const Form = forwardRef((props: FormProps) => { let diagnostics: Diagnostic[] = diagnosticsInfoItem.diagnostics || []; if (diagnostics.length === 0) { - clearErrors(key); + // Only clear errors that were set by the expression diagnostics system, + // not errors set by other validators (e.g., PathEditor) + if (errors[key]?.type === "expression_diagnostic") { + clearErrors(key); + } continue; } else { // Filter the BCE2066 diagnostics @@ -784,7 +810,7 @@ export const Form = forwardRef((props: FormProps) => { ); const diagnosticsMessage = diagnostics.map((d) => d.message).join("\n"); - setError(key, { type: "validate", message: diagnosticsMessage }); + setError(key, { type: "expression_diagnostic", message: diagnosticsMessage }); // If the severity is not ERROR, don't invalidate const hasErrorDiagnostics = diagnostics.some((d) => d.severity === 1); @@ -810,11 +836,12 @@ export const Form = forwardRef((props: FormProps) => { // Call onValidityChange when form validity changes useEffect(() => { if (onValidityChange) { - const formIsValid = isValid && !isValidating && Object.keys(errors).length === 0 && + // formStateIsValid captures errors from PathEditor and other validators (setError) + const formIsValid = isValid && formStateIsValid && !isValidating && Object.keys(errors).length === 0 && (!concertMessage || !concertRequired || isUserConcert) && !isIdentifierEditing && !isSubComponentEnabled; onValidityChange(formIsValid); } - }, [isValid, isValidating, errors, concertMessage, concertRequired, isUserConcert, isIdentifierEditing, isSubComponentEnabled, onValidityChange]); + }, [isValid, formStateIsValid, isValidating, errors, concertMessage, concertRequired, isUserConcert, isIdentifierEditing, isSubComponentEnabled, onValidityChange]); const handleIdentifierEditingStateChange = (isEditing: boolean) => { setIsIdentifierEditing(isEditing); @@ -826,7 +853,7 @@ export const Form = forwardRef((props: FormProps) => { const disableSaveButton = isValidating || props.disableSaveButton || (concertMessage && concertRequired && !isUserConcert) || - isIdentifierEditing || isSubComponentEnabled || isValidatingForm || Object.keys(errors).length > 0; + isIdentifierEditing || isSubComponentEnabled || isValidatingForm || !formStateIsValid || Object.keys(errors).length > 0; const handleShowMoreClick = () => { setIsMarkdownExpanded(!isMarkdownExpanded); @@ -905,7 +932,26 @@ export const Form = forwardRef((props: FormProps) => { if (data.expression === '' && visualizableField?.defaultValue) { data.expression = visualizableField.defaultValue; } - return handleOnSave({ ...data, openInDataMapper: true }); + return handleOnSave({ + ...data, + editorConfig: { + view: selectedNode === "VARIABLE" ? MACHINE_VIEW.InlineDataMapper : MACHINE_VIEW.DataMapper, + displayMode: EditorDisplayMode.VIEW, + }, + }); + })(); + }; + + const handleOnOpenInFunctionEditor = () => { + setSavingButton('functionEditor'); + handleSubmit((data) => { + return handleOnSave({ + ...data, + editorConfig: { + view: MACHINE_VIEW.BIDiagram, + displayMode: EditorDisplayMode.VIEW, + }, + }); })(); }; @@ -1003,7 +1049,7 @@ export const Form = forwardRef((props: FormProps) => { const updatedField = updateFormFieldWithImports(field, formImports); renderedComponents.push( - { } openSubPanel={handleOpenSubPanel} subPanelView={subPanelView} + handleFormValidation={handleFormValidation} handleOnFieldFocus={handleOnFieldFocus} autoFocus={firstEditableFieldIndex === formFields.indexOf(updatedField) && !hideSaveButton} recordTypeFields={recordTypeFields} @@ -1025,6 +1072,7 @@ export const Form = forwardRef((props: FormProps) => { openFormTypeEditor && ((open: boolean, newType?: string) => openFormTypeEditor(open, newType, updatedField)) } + updateImports={updateImports} /> {updatedField.key === "scope" && scopeFieldAddon} @@ -1074,7 +1122,7 @@ export const Form = forwardRef((props: FormProps) => { name={"chevron-up"} iconSx={{ fontSize: 12 }} sx={{ height: 12 }} - />Collapsed + />Collapse )} @@ -1087,13 +1135,14 @@ export const Form = forwardRef((props: FormProps) => { const updatedField = updateFormFieldWithImports(field, formImports); return ( - handleOpenRecordEditor(open, updatedField, newType)) } subPanelView={subPanelView} + handleFormValidation={handleFormValidation} handleOnFieldFocus={handleOnFieldFocus} recordTypeFields={recordTypeFields} onIdentifierEditingStateChange={handleIdentifierEditingStateChange} @@ -1111,7 +1160,7 @@ export const Form = forwardRef((props: FormProps) => { const updatedField = updateFormFieldWithImports(field, formImports); return ( - { onIdentifierEditingStateChange={handleIdentifierEditingStateChange} handleOnTypeChange={handleOnTypeChange} onBlur={handleOnBlur} + handleFormValidation={handleFormValidation} /> ); @@ -1132,16 +1182,18 @@ export const Form = forwardRef((props: FormProps) => { {!preserveOrder && (variableField || typeField || targetTypeField) && ( {variableField && ( - )} {typeField && !isInferredReturnType && ( - { onIdentifierEditingStateChange={handleIdentifierEditingStateChange} handleNewTypeSelected={handleNewTypeSelected} onBlur={handleOnBlur} - + handleFormValidation={handleFormValidation} /> )} {targetTypeField && !targetTypeField.advanced && ( <> - { handleNewTypeSelected={handleNewTypeSelected} handleOnTypeChange={handleOnTypeChange} onBlur={handleOnBlur} + handleFormValidation={handleFormValidation} /> {typeField && ( { ) : submitText || "Open in Data Mapper"} } + {canOpenInFunctionEditor && ( + + )} + + + + ); +}; + export default GroupList; function getComponentTitle(node: Node) { diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/ModeSwitcher/index.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/ModeSwitcher/index.tsx index 19b9327f57d..84d291cfcf5 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/ModeSwitcher/index.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/ModeSwitcher/index.tsx @@ -16,41 +16,95 @@ * under the License. */ -import React, { useMemo } from 'react'; +import React, { useMemo, useState } from 'react'; import { Label, Slider, SwitchWrapper } from './styles'; import { InputMode } from '../editors/MultiModeExpressionEditor/ChipExpressionEditor/types'; import { getDefaultExpressionMode, getSecondaryMode } from '../editors/MultiModeExpressionEditor/ChipExpressionEditor/utils'; import { InputType } from '@wso2/ballerina-core'; +import { getEditorConfiguration } from '../editors/ExpressionField'; +import { useFormContext } from '../../context'; +import WarningPopup from '../WarningPopup'; interface ModeSwitcherProps { value: InputMode; + //TODO: Should be removed once fields with type field is fixed to + // update the types property correctly when changing the type. isRecordTypeField: boolean; onChange: (value: InputMode) => void; types: InputType[]; + fieldKey: string; } -const ModeSwitcher: React.FC = ({ value, isRecordTypeField, onChange, types }) => { +const ModeSwitcher: React.FC = ({ value, isRecordTypeField, onChange, types, fieldKey }) => { + + const { form } = useFormContext(); + const { getValues, setValue } = form; + const [showWarning, setShowWarning] = useState(false); + const [pendingMode, setPendingMode] = useState(null); + const defaultMode = useMemo( + //TODO: Should only return the getDefaultExpressionMode(types) once fields with type field is fixed to + // update the types property correctly when changing the type. () => isRecordTypeField ? InputMode.RECORD : getDefaultExpressionMode(types), [types, isRecordTypeField] ); - const secondaryMode = useMemo( + const secondaryMode = useMemo( + //TODO: Should only return the getSecondaryMode(types) once fields with type field is fixed to + // update the types property correctly when changing the type. () => isRecordTypeField ? InputMode.EXP : getSecondaryMode(types), [types, isRecordTypeField] ); + const handleModeSwitch = (mode: InputMode) => { - onChange(mode); - } + const currentFieldValue = getValues(fieldKey); + const configForNewMode = getEditorConfiguration(mode); + let isValueCompatible = true; + if (mode === InputMode.BOOLEAN) { + isValueCompatible = false; + } + else { + isValueCompatible = configForNewMode.getIsValueCompatible ? configForNewMode.getIsValueCompatible(currentFieldValue) : true; + } + + if (!isValueCompatible) { + setPendingMode(mode); + setShowWarning(true); + } else { + onChange(mode); + } + }; + + const handleConfirmSwitch = () => { + if (pendingMode) { + onChange(pendingMode); + setValue(fieldKey, undefined); + setPendingMode(null); + } + setShowWarning(false); + }; + + const handleCancelSwitch = () => { + setPendingMode(null); + setShowWarning(false); + }; + const isChecked = value === secondaryMode; return ( - - + <> + + + + ); }; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/categoryConfig.ts b/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/categoryConfig.ts index da37cedf5bd..0767c13b556 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/categoryConfig.ts +++ b/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/categoryConfig.ts @@ -20,9 +20,11 @@ export type CategoryActionType = 'connection' | 'function' | 'add'; export interface CategoryAction { type: CategoryActionType; + codeIcon?: string; + hideOnEmptyState?: boolean; tooltip: string; emptyStateLabel: string; - handlerKey: 'onAddConnection' | 'onAddFunction' | 'onAdd'; + handlerKey: 'onAddConnection' | 'onAddFunction' | 'onAdd' | 'onLinkDevantProject' | 'onRefreshDevantConnections'; condition?: (title: string) => boolean; // For special conditions like data mapper } @@ -38,12 +40,30 @@ export interface CategoryConfig { export const CATEGORY_CONFIGS: Record = { "Connections": { title: "Connections", - actions: [{ - type: 'connection', - tooltip: "Add Connection", - emptyStateLabel: "Add Connection", - handlerKey: 'onAddConnection' - }], + actions: [ + { + type: "connection", + codeIcon: "vm-connect", + tooltip: "Use Devant Connections", + emptyStateLabel: "", + hideOnEmptyState: true, + handlerKey: "onLinkDevantProject", + }, + { + type: "connection", + codeIcon: "refresh", + tooltip: "Refresh Devant Connections", + emptyStateLabel: "", + hideOnEmptyState: true, + handlerKey: "onRefreshDevantConnections", + }, + { + type: "connection", + tooltip: "Add Connection", + emptyStateLabel: "Add Connection", + handlerKey: "onAddConnection", + }, + ], showWhenEmpty: true, useConnectionContainer: true, fixed: true @@ -60,7 +80,7 @@ export const CATEGORY_CONFIGS: Record = { }, { type: 'function', - tooltip: "Create Natural Function", + tooltip: "Create Natural Function", emptyStateLabel: "Create Natural Function", handlerKey: 'onAddFunction', condition: (title) => title === "Natural Functions" @@ -77,11 +97,17 @@ export const CATEGORY_CONFIGS: Record = { useConnectionContainer: false, fixed: true }, - "Agents": { - title: "Agents", - actions: [], + "Agent": { + title: "Agents", + actions: [{ + type: 'add', + tooltip: "Add Agent", // Will use addButtonLabel from props + emptyStateLabel: "", // Will use addButtonLabel from props + handlerKey: 'onAdd' + }], showWhenEmpty: true, - useConnectionContainer: false + useConnectionContainer: true, + fixed: true }, "Model Providers": { title: "Model Providers", @@ -162,7 +188,11 @@ export const getCategoryConfig = (title: string): CategoryConfig | undefined => return CATEGORY_CONFIGS[title]; }; -export const shouldShowEmptyCategory = (title: string): boolean => { +export const shouldShowEmptyCategory = (title: string, isSubCategory: boolean): boolean => { + if (isSubCategory) { + // For subcategories, only show if it's "Current Integration" + return title === "Current Integration"; + } const config = getCategoryConfig(title); return config?.showWhenEmpty ?? false; }; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/index.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/index.tsx index 895d8b29108..de7a7239eae 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/index.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/index.tsx @@ -17,6 +17,7 @@ */ import React, { useEffect, useState } from "react"; +import ReactMarkdown from "react-markdown"; import { Button, Codicon, @@ -36,7 +37,9 @@ import { GroupListSkeleton } from "../Skeletons"; import GroupList from "../GroupList"; import { useRpcContext } from "@wso2/ballerina-rpc-client"; import { getExpandedCategories, setExpandedCategories, getDefaultExpandedState } from "../../utils/localStorage"; +import { ConnectionListItem } from "@wso2/wso2-platform-core"; import { shouldShowEmptyCategory, shouldUseConnectionContainer, getCategoryActions, isCategoryFixed } from "./categoryConfig"; +import { stripHtmlTags } from "../Form/utils"; namespace S { export const Container = styled.div<{}>` @@ -116,6 +119,38 @@ namespace S { opacity: 0.5; `; + export const TooltipMarkdown = styled.div` + font-size: 12px; + line-height: 1.4; + font-family: var(--vscode-font-family); + + p { + margin: 0 0 6px 0; + } + + p:last-of-type { + margin-bottom: 0; + } + + pre { + display: none; + } + + code { + display: inline; + } + + ul, + ol { + margin: 6px 0; + padding-left: 18px; + } + + li { + margin: 2px 0; + } + `; + export const Component = styled.div<{ enabled?: boolean }>` display: flex; flex-direction: row; @@ -319,6 +354,9 @@ interface NodeListProps { onBack?: () => void; onClose?: () => void; searchPlaceholder?: string; + onImportDevantConn?: (devantConn: ConnectionListItem) => void; + onLinkDevantProject?: () => void; + onRefreshDevantConnections?: () => void; } export function NodeList(props: NodeListProps) { @@ -335,6 +373,9 @@ export function NodeList(props: NodeListProps) { onBack, onClose, searchPlaceholder, + onImportDevantConn, + onLinkDevantProject, + onRefreshDevantConnections, } = props; const [searchText, setSearchText] = useState(""); @@ -434,6 +475,31 @@ export function NodeList(props: NodeListProps) { } }; + const handleOnLinkDevantProject = () => { + if (onLinkDevantProject){ + onLinkDevantProject(); + } + } + + const handleOnRefreshDevantConnections = () => { + if (onRefreshDevantConnections){ + onRefreshDevantConnections(); + } + } + + const renderTooltipContent = (description?: string): React.ReactNode | undefined => { + const cleaned = stripHtmlTags(description || "").trim(); + if (!cleaned) { + return undefined; + } + + return ( + + {cleaned} + + ); + }; + const getNodesContainer = (items: (Node | Category)[], parentCategoryTitle?: string) => { const safeItems = items.filter((item) => item != null); const nodes = safeItems.filter((item): item is Node => "id" in item && !("title" in item)); @@ -450,7 +516,7 @@ export function NodeList(props: NodeListProps) { return ( ( + const getConnectionContainer = (categories: Category[], enableSingleNodeDirectNav?: boolean) => ( {categories.map((category, index) => category.isLoading ? ( @@ -535,6 +601,8 @@ export function NodeList(props: NodeListProps) { category={category} expand={searchText?.length > 0} onSelect={handleAddNode} + onImportDevantConn={onImportDevantConn} + enableSingleNodeDirectNav={enableSingleNodeDirectNav} /> )) } @@ -570,14 +638,19 @@ export function NodeList(props: NodeListProps) { const content = ( <> {reorderedGroups.map((group, index) => { - const categoryActions = getCategoryActions(group.title, title); + // If subcategory is inside "Current Project" (or legacy "Current Workspace"), + // show "Current Integration" actions when the subcategory refers to the current integration. + const categoryActions = (parentCategoryTitle === "Current Project" || parentCategoryTitle === "Current Workspace") ? + ( group.title?.includes("(current)") ? getCategoryActions("Current Integration", title) : getCategoryActions(group.title, title)) + : + getCategoryActions(group.title, title); const config = categoryConfig[group.title] || { hasBackground: true }; const shouldShowSeparator = config.showSeparatorBefore; // Hide categories that don't have items, except for special categories that can add items if (!group || !group.items || group.items.length === 0) { // Only show empty categories if they have add functionality - if (!shouldShowEmptyCategory(group.title)) { + if (!shouldShowEmptyCategory(group.title, isSubCategory) && categoryActions.length === 0) { return null; } } @@ -613,7 +686,9 @@ export function NodeList(props: NodeListProps) { const handlers = { onAddConnection: handleAddConnection, onAddFunction: handleAddFunction, - onAdd: handleAdd + onAdd: handleAdd, + onLinkDevantProject: handleOnLinkDevantProject, + onRefreshDevantConnections: handleOnRefreshDevantConnections }; const handler = handlers[action.handlerKey]; @@ -633,7 +708,7 @@ export function NodeList(props: NodeListProps) { handler(); }} > - + ); @@ -657,32 +732,35 @@ export function NodeList(props: NodeListProps) { )} - {(isCategoryExpanded || isCategoryFixed(group.title)) && ( + {(isSubCategory || isCategoryExpanded || isCategoryFixed(group.title)) && ( <> - {(!group.items || group.items.length === 0) && + {(isSubCategory || (!group.items || group.items.length === 0)) && !searchText && !isSearching && categoryActions.map((action, actionIndex) => { const handlers = { onAddConnection: handleAddConnection, onAddFunction: handleAddFunction, - onAdd: handleAdd + onAdd: handleAdd, + onLinkDevantProject: handleOnLinkDevantProject, + onRefreshDevantConnections: handleOnRefreshDevantConnections }; const handler = handlers[action.handlerKey]; const propsHandler = props[action.handlerKey]; // Only render if the handler exists in props - if (!propsHandler || !handler) return null; + if (!propsHandler || !handler || action.hideOnEmptyState) return null; const buttonLabel = action.emptyStateLabel || addButtonLabel || "Add"; return ( - + {buttonLabel} ); @@ -692,7 +770,7 @@ export function NodeList(props: NodeListProps) { // 1. If parent group uses connection container and ALL items don't have id, use getConnectionContainer shouldUseConnectionContainer(group.title) && group.items.filter((item) => item != null).every((item) => !("id" in item)) - ? getConnectionContainer(group.items as Category[]) + ? getConnectionContainer(group.items as Category[], group.title === "Agent") : // 2. If ALL items don't have id (all are categories), use getCategoryContainer group.items.filter((item) => item != null).every((item) => !("id" in item)) ? getCategoryContainer( diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/types.ts b/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/types.ts index 2decc078280..a921abc7737 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/types.ts +++ b/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/types.ts @@ -15,6 +15,7 @@ * specific language governing permissions and limitations * under the License. */ +import { ConnectionListItem } from "@wso2/wso2-platform-core"; export type Item = Category | Node; @@ -24,6 +25,13 @@ export type Category = { icon?: JSX.Element; items: Item[]; isLoading?: boolean; + tooltip?: { + icon?: string; + color?: string; + text?: string; + } + devant?: ConnectionListItem; + unusedDevantConn?: boolean; }; export type Node = { diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ArgManager.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ArgManager.tsx new file mode 100644 index 00000000000..c65bfd121e6 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ArgManager.tsx @@ -0,0 +1,330 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useEffect, useState } from 'react'; + +import styled from '@emotion/styled'; +import { ParamEditor } from './ParamEditor'; +import { ParamItem } from './ParamItem'; +import { ParamConfig, Parameter } from './ParamManager'; +import { Codicon, ErrorBanner, LinkButton, RequiredFormInput, ThemeColors } from '@wso2/ui-toolkit'; +import { FormField, FormValues } from '../Form/types'; +import { Controller } from 'react-hook-form'; +import { useFormContext } from '../../context'; +import { Imports, NodeKind, TriggerKind } from '@wso2/ballerina-core'; +import { useRpcContext } from '@wso2/ballerina-rpc-client'; +import { EditorFactory } from '../editors/EditorFactory'; +import { getFieldKeyForAdvanceProp, getPropertyFromFormField } from '../editors/utils'; + +export interface ArgManagerProps { + field: FormField; + onChange?: (parameters: ParamConfig) => void, + openRecordEditor?: (open: boolean) => void; + readonly?: boolean; + selectedNode?: NodeKind; + setSubComponentEnabled?: (isAdding: boolean) => void; + updateImports?: (key: string, imports: Imports) => void; +} + +const AddButtonWrapper = styled.div` + margin: 8px 0; +`; + +const ArgContainer = styled.div` + display: block; + width: 100%; +`; + +const HeaderContainer = styled.div` + display: flex; + flex-direction: column; + gap: 4px; +`; + +const Description = styled.div` + color: var(--vscode-list-deemphasizedForeground); +`; + +const LabelContainer = styled.label` + display: flex; + align-items: center; +`; + +const Label = styled.label` + color: var(--vscode-editor-foreground); +`; + +const Row = styled.div<{}>` + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: 100%; + padding-inline: 8px; + margin-bottom: 8px; +`; + +const EditorContainer = styled.div<{}>` + padding-inline: 8px; +` + +const ButtonContainer = styled.div<{}>` + display: flex; + flex-direction: row; + flex-grow: 1; + justify-content: flex-end; +`; + +export interface ArgManagerEditorProps { + field: FormField; + handleOnFieldFocus?: (key: string) => void; + openRecordEditor?: (open: boolean) => void; + selectedNode?: NodeKind; + setSubComponentEnabled?: (isAdding: boolean) => void; + updateImports?: (key: string, imports: Imports) => void; +} + +export function ArgManagerEditor(props: ArgManagerEditorProps) { + const { field, openRecordEditor, selectedNode, setSubComponentEnabled, updateImports } = props; + const { form } = useFormContext(); + const { control } = form; + + return ( + + + + + {!field.optional && } + + {field.documentation} + + ( + <> + { + onChange(config.paramValues); + }} + selectedNode={selectedNode} + setSubComponentEnabled={setSubComponentEnabled} + updateImports={updateImports} + /> + {error && } + + )} + /> + + ); + +} + +export function ArgManager(props: ArgManagerProps) { + const { field, readonly, onChange, openRecordEditor, setSubComponentEnabled, updateImports } = props; + const propertyKey = field.key; + const paramConfigs = field.paramManagerProps; + + const { rpcClient } = useRpcContext(); + const { fileName, targetLineRange } = useFormContext(); + + const [editingSegmentId, setEditingSegmentId] = useState(-1); + const [isNew, setIsNew] = useState(false); + const [parameters, setParameters] = useState(paramConfigs.paramValues); + const [paramComponents, setParamComponents] = useState([]); + + useEffect(() => { + renderParams(); + }, [parameters, editingSegmentId, paramConfigs]); + + const getTypeFromArg = async ( + arg: string + ) => { + try { + const simpleTypeResponse = await rpcClient.getBIDiagramRpcClient().getSimpleTypeOfExpression({ + filePath: fileName, + position: targetLineRange.startLine, + expression: arg + }); + return simpleTypeResponse.type; + } catch (error) { + console.error(">>> Error getting type from FQN in ArgManager", error); + return undefined; + } + }; + + const onEdit = (param: Parameter) => { + setEditingSegmentId(param.id); + setSubComponentEnabled?.(true); + }; + + const getNewParam = (fields: FormField[], index: number): Parameter => { + const paramInfo: FormValues = {}; + fields.forEach((field) => { + paramInfo[field.key] = ""; + }); + return { + id: index, + formValues: paramInfo, + key: "", + value: "", + icon: "", + identifierEditable: true, + identifierRange: undefined + }; + }; + + const onAddClick = () => { + const updatedParameters = [...parameters]; + setEditingSegmentId(updatedParameters.length); + const newParams: Parameter = getNewParam(paramConfigs.formFields, updatedParameters.length); + updatedParameters.push(newParams); + setParameters(updatedParameters); + setIsNew(true); + setSubComponentEnabled?.(true); + }; + + const onDelete = (param: Parameter) => { + const updatedParameters = [...parameters]; + const indexToRemove = param.id; + if (indexToRemove >= 0 && indexToRemove < updatedParameters.length) { + updatedParameters.splice(indexToRemove, 1); + } + const reArrangedParameters = updatedParameters.map((item, index) => ({ + ...item, + id: index + })); + setParameters(reArrangedParameters); + onChange({ ...paramConfigs, paramValues: reArrangedParameters }); + }; + + const onChangeParam = (updatedParam: Parameter) => { + const updatedParameters = [...parameters]; + const index = updatedParameters.findIndex(param => param.id === updatedParam.id); + if (index !== -1) { + updatedParameters[index] = handleArgChange(updatedParam, parameters); + } + setParameters(updatedParameters); + onChange({ ...paramConfigs, paramValues: updatedParameters }); + }; + + const onSaveParam = async (paramConfig: Parameter) => { + const type = await getTypeFromArg(paramConfig.formValues['variable']); + if (type) { + paramConfig.formValues['type'] = type.name; + if (type.imports) { + updateImports?.(propertyKey, type.imports); + } + } + onChangeParam(paramConfig); + setEditingSegmentId(-1); + setIsNew(false); + setSubComponentEnabled?.(false); + }; + + const onParamEditCancel = (param: Parameter) => { + setEditingSegmentId(-1); + setSubComponentEnabled?.(false); + if (isNew) { + onDelete(param); + } + setIsNew(false); + }; + + const renderParams = () => { + const render: React.ReactElement[] = []; + parameters + .forEach((param, index) => { + if (editingSegmentId === index) { + const newParamConfig = { + ...paramConfigs, + formFields: paramConfigs.formFields.map(field => ({ ...field })) + }; + newParamConfig.formFields.forEach(field => { + if (param.formValues[field.key]) { + field.value = param.formValues[field.key]; + if (field.key === "variable") { + field.editable = param.identifierEditable; + field.lineRange = param.identifierRange; + } + } + }) + render.push( + + ) + } else if ((editingSegmentId !== index && !(param.hidden ?? false))) { + render.push( + + ); + } + }); + setParamComponents(render); + } + + return ( +
+ {paramComponents} + {(editingSegmentId === -1) && ( + + + + <>{"Add Argument"} + + + )} +
+ ); +} + +function handleArgChange(param: Parameter, allParams: Parameter[]) { + const arg = param.formValues["variable"]; + const name = arg.split('.').pop(); + + let key = name; + let i = 1; + while (allParams.some(p => p.key === key && p.id !== param.id)) { + key = name + (i++); + } + + return { + ...param, + key: key + }; +} diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamEditor.tsx index e710378d7c1..456eb2ca964 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamEditor.tsx @@ -32,7 +32,7 @@ export interface ParamProps { propertyKey: string; parameter: Parameter; paramFields: FormField[]; - onSave: (param: Parameter) => void; + onSave: (param: Parameter) => void | Promise; onCancelEdit: (param?: Parameter) => void; openRecordEditor?: (open: boolean) => void; } @@ -98,15 +98,21 @@ export function ParamEditor(props: ParamProps) { }; const [fields, setFields] = useState(paramFields); + const [isSaving, setIsSaving] = useState(false); useEffect(() => { setFields(paramFields); }, [paramFields]); - const handleOnSave = (data: FormValues) => { - setFields([]); + const handleOnSave = async (data: FormValues) => { parameter.formValues = data; - onSave(parameter); + setIsSaving(true); + try { + await onSave(parameter); + setFields([]); + } finally { + setIsSaving(false); + } } return ( @@ -129,6 +135,7 @@ export function ParamEditor(props: ParamProps) { submitText={parameter.key ? 'Save' : 'Add'} nestedForm={true} preserveOrder={true} + isSaving={isSaving} /> ); diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamManager.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamManager.tsx index 75ac7dfc3b3..988f8d63937 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamManager.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamManager.tsx @@ -27,7 +27,7 @@ import { Controller } from 'react-hook-form'; import { useFormContext } from '../../context'; import { Imports, NodeKind } from '@wso2/ballerina-core'; import { useRpcContext } from '@wso2/ballerina-rpc-client'; -import { EditorFactory } from '../editors/EditorFactory'; +import { FieldFactory } from '../editors/FieldFactory'; import { buildRequiredRule, getFieldKeyForAdvanceProp } from '../editors/utils'; export interface Parameter { @@ -186,7 +186,7 @@ export function ParamManagerEditor(props: ParamManagerEditorProps) { sx={{ fontSize: 12, padding: 8, color: ThemeColors.PRIMARY, gap: 4 }} > - Collapsed + Collapse )} @@ -199,7 +199,7 @@ export function ParamManagerEditor(props: ParamManagerEditorProps) { if (getValues(advanceProp.key) === undefined) { setValue(advanceProp.key, advanceProp.value); } - return + return })} )} diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/WarningPopup/styles.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/WarningPopup/styles.tsx index 5f190a89261..71f67862fe7 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/WarningPopup/styles.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/WarningPopup/styles.tsx @@ -51,7 +51,7 @@ export const ModalBackdrop = styled.div({ display: 'flex', justifyContent: 'center', alignItems: 'center', - zIndex: 1000 + zIndex: 2000 }); export const ModalContent = styled.div<{ maxWidth: string }>(({ maxWidth }) => ({ @@ -62,5 +62,6 @@ export const ModalContent = styled.div<{ maxWidth: string }>(({ maxWidth }) => ( borderRadius: '4px', boxShadow: '0 4px 24px rgba(0, 0, 0, 0.4)', width: maxWidth, - textAlign: 'center' + textAlign: 'center', + zIndex: 2001 })); diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ActionExpressionEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ActionExpressionEditor.tsx deleted file mode 100644 index e585412f381..00000000000 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ActionExpressionEditor.tsx +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import React from "react"; -import { useFormContext } from "../../context"; -import { ContextAwareExpressionEditorProps, ExpressionEditor } from "./ExpressionEditor"; -import { LinkButton } from "@wso2/ui-toolkit/lib/components/LinkButton/LinkButton"; -import styled from "@emotion/styled"; - -const Row = styled.div` - display: flex; - flex-direction: column; - margin: 0; - width: 100%; -`; - -const actionButtonStyles = { - padding: "4px 6px", - margin: 0, - marginTop: "6px", - fontSize: "13px", -}; - -export const ActionExpressionEditor = (props: ContextAwareExpressionEditorProps) => { - const { form, expressionEditor, targetLineRange, fileName } = useFormContext(); - - return ( - <> - - - {props.field.actionLabel} - - - ); -}; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ArrayEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ArrayEditor.tsx index e5067b449e4..0160f0ed407 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ArrayEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ArrayEditor.tsx @@ -87,7 +87,7 @@ interface ArrayEditorProps { recordTypeField?: RecordTypeField; } -export function ArrayEditor(props: ArrayEditorProps) { +function ArrayEditor(props: ArrayEditorProps) { const { field, label, ...rest } = props; const { form } = useFormContext(); const { unregister, setValue, watch } = form; @@ -108,7 +108,7 @@ export function ArrayEditor(props: ArrayEditorProps) { updatedValue = Array.isArray(field.value) ? field.value[index] : ""; setValue(`${field.key}-${index}`, updatedValue ?? ""); } - // HACK: When using expression editor and if the user deleted whole text then the value becomes + // HACK: When using expression editor and if the user deletes whole text then the value becomes // an empty value. if (updatedValue === "") { setValue(`${field.key}-${index}`, " "); @@ -159,14 +159,14 @@ export function ArrayEditor(props: ArrayEditorProps) { {field.documentation} {[...Array(editorCount)].map((_, index) => ( - + /> */} onDelete(index)} diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/AutoCompleteEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/AutoCompleteEditor.tsx index 0b09d7d07cd..a45b06f6b72 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/AutoCompleteEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/AutoCompleteEditor.tsx @@ -52,8 +52,13 @@ export function AutoCompleteEditor(props: AutoCompleteEditorProps) { required={!field.optional} disabled={!field.editable} onValueChange={(val: string) => { - setValue(field.key, val); - field.onValueChange?.(val); + // Preserve existing value when Combobox fires with empty on blur (e.g., click away without selecting) + const currentValue = value ?? getValueForDropdown(field) ?? field.value; + const newVal = (val === "" || val === undefined || val === null) && currentValue + ? currentValue + : val; + setValue(field.key, newVal); + field.onValueChange?.(newVal); }} sx={{ marginRight: "-4px", diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/CheckBoxConditionalEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/CheckBoxConditionalEditor.tsx index 12c068c0a32..fcc829d6cbb 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/CheckBoxConditionalEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/CheckBoxConditionalEditor.tsx @@ -20,7 +20,7 @@ import React, { useEffect, useState } from "react"; import { FormField } from "../Form/types"; import { CheckBoxGroup, FormCheckBox } from "@wso2/ui-toolkit"; import styled from "@emotion/styled"; -import { EditorFactory } from "./EditorFactory"; +import { FieldFactory } from "./FieldFactory"; import { useFormContext } from "../../context"; import { getPrimaryInputType, PropertyModel } from "@wso2/ballerina-core"; @@ -128,7 +128,7 @@ export function CheckBoxConditionalEditor(props: CheckBoxConditionalEditorProps) {checked && checkedStateFields.length > 0 && ( <> {checkedStateFields.map((dfield, index) => ( - 0 && ( <> {uncheckedStateFields.map((dfield, index) => ( - {dynamicFields.filter(dfield => (field.advanced || !dfield.advanced)).map((dfield, index) => { return ( - ; + } + return ; + } + + // Fallback by node type + switch (codedata?.node) { + case "MODEL_PROVIDER": + return ; + case "VECTOR_STORE": + return ; + case "EMBEDDING_PROVIDER": + return ; + case "DATA_LOADER": + return ; + case "CHUNKER": + return ; + case "MEMORY_STORE": + return ; + default: + return ; + } +} + +// --- Select Item type --- + +export interface ConnectionSelectItem { + id: string; + label: string; + value: string; + codedata?: CodeData; +} + +// --- Styled Components --- + +const SelectContainer = styled.div` + display: flex; + flex-direction: column; + gap: 2px; + width: 100%; + color: var(--vscode-editor-foreground); +`; + +const SelectTrigger = styled.div<{ disabled?: boolean }>` + display: flex; + align-items: center; + justify-content: space-between; + padding: 6px 8px; + min-height: 26px; + background: var(--vscode-dropdown-background); + border: 1px solid var(--vscode-dropdown-border); + border-radius: 2px; + cursor: ${(props) => (props.disabled ? "not-allowed" : "pointer")}; + opacity: ${(props) => (props.disabled ? 0.5 : 1)}; + + &:focus { + outline: 1px solid var(--vscode-focusBorder); + outline-offset: -1px; + } +`; + +const SelectedDisplay = styled.div` + display: flex; + align-items: center; + gap: 8px; + flex: 1; + min-width: 0; + overflow: hidden; +`; + +const SelectedLabel = styled.span` + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 13px; +`; + +const Placeholder = styled.span` + color: var(--vscode-input-placeholderForeground); + font-size: 13px; +`; + +const DropdownPanel = styled.div` + position: absolute; + top: 100%; + left: 0; + right: 0; + z-index: 3333; + background: var(--vscode-dropdown-background); + border: 1px solid var(--vscode-dropdown-border); + border-radius: 2px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); + max-height: 200px; + overflow-y: auto; +`; + +const OptionItem = styled.div<{ selected?: boolean }>` + display: flex; + align-items: center; + gap: 8px; + padding: 6px 8px; + min-height: 26px; + cursor: pointer; + font-size: 13px; + background: ${(props) => + props.selected ? "var(--vscode-list-activeSelectionBackground)" : "transparent"}; + color: ${(props) => + props.selected ? "var(--vscode-list-activeSelectionForeground)" : "inherit"}; + + &:hover { + background: ${(props) => + props.selected + ? "var(--vscode-list-activeSelectionBackground)" + : "var(--vscode-list-hoverBackground)"}; + } +`; + +const OptionLabel = styled.span` + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +`; + +const Wrapper = styled.div` + position: relative; +`; + +const FieldLabel = styled.label` + margin-bottom: 2px; +`; + +// --- Component --- + +interface ConnectionIconSelectProps { + id: string; + label?: string; + items: ConnectionSelectItem[]; + value?: string; + placeholder?: string; + disabled?: boolean; + required?: boolean; + onChange: (value: string) => void; +} + +export const ConnectionIconSelect: React.FC = ({ + id, + label, + items, + value, + placeholder = "Select...", + disabled = false, + required = false, + onChange, +}) => { + const [open, setOpen] = useState(false); + const containerRef = useRef(null); + + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if (containerRef.current && !containerRef.current.contains(event.target as Node)) { + setOpen(false); + } + }; + document.addEventListener("mousedown", handleClickOutside); + return () => document.removeEventListener("mousedown", handleClickOutside); + }, []); + + const selectedItem = items.find((item) => item.value === value); + + const handleSelect = (itemValue: string) => { + onChange(itemValue); + setOpen(false); + }; + + const focusOption = (index: number) => { + const options = containerRef.current?.querySelectorAll('[role="option"]'); + if (options && options[index]) { + options[index].focus(); + } + }; + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (disabled) return; + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + setOpen(!open); + } else if (e.key === "Escape") { + setOpen(false); + } else if (e.key === "ArrowDown") { + e.preventDefault(); + if (!open) { + setOpen(true); + } + // Focus first option after render + setTimeout(() => focusOption(0), 0); + } else if (e.key === "ArrowUp") { + e.preventDefault(); + if (!open) { + setOpen(true); + } + setTimeout(() => focusOption(items.length - 1), 0); + } + }; + + const handleOptionKeyDown = (e: React.KeyboardEvent, index: number, itemValue: string) => { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + handleSelect(itemValue); + } else if (e.key === "ArrowDown") { + e.preventDefault(); + focusOption(index + 1 < items.length ? index + 1 : 0); + } else if (e.key === "ArrowUp") { + e.preventDefault(); + focusOption(index - 1 >= 0 ? index - 1 : items.length - 1); + } else if (e.key === "Escape") { + e.preventDefault(); + setOpen(false); + containerRef.current?.querySelector('[role="combobox"]')?.focus(); + } + }; + + return ( + + {label && ( + + {label} + {required && *} + + )} + + !disabled && setOpen(!open)} + onKeyDown={handleKeyDown} + > + + {selectedItem ? ( + <> + {selectedItem.codedata && getConnectionIcon(selectedItem.codedata)} + {selectedItem.label} + + ) : ( + {placeholder} + )} + + + + {open && ( + + {items.map((item, index) => ( + handleSelect(item.value)} + onKeyDown={(e: React.KeyboardEvent) => handleOptionKeyDown(e, index, item.value)} + > + {item.codedata && getConnectionIcon(item.codedata)} + {item.label} + + ))} + + )} + + + ); +}; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/DependentTypeEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/DependentTypeEditor.tsx new file mode 100644 index 00000000000..9c350263820 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/DependentTypeEditor.tsx @@ -0,0 +1,503 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useState, useRef, useEffect, useCallback } from "react"; +import styled from "@emotion/styled"; +import { SearchBox, CheckBox, Codicon, RequiredFormInput } from "@wso2/ui-toolkit"; +import { FormField } from "../Form/types"; +import { useFormContext } from "../../context"; +import type { Type, Member, RecordSelectorType } from "@wso2/ballerina-core"; + +// ─── Types ────────────────────────────────────────────────────── + +interface DependentTypeEditorProps { + field: FormField; +} + +// ─── Utilities ────────────────────────────────────────────────── + +/** + * Resolves child FIELD members for a given member by following refs or inline types. + */ +function resolveChildren(member: Member, referencedTypes: Type[], visited: Set): Member[] { + // Check if this member references a named type + if (member.refs?.length) { + const refName = member.refs[0]; + if (visited.has(refName)) return []; // circular guard + const refType = referencedTypes.find(t => t.name === refName); + if (refType?.members) { + return refType.members.filter(m => m.kind === "FIELD"); + } + } + + // Check inline type object + if (typeof member.type === "string") return []; + const typeObj = member.type as Type; + if (!typeObj.members) return []; + + const children: Member[] = []; + for (const m of typeObj.members) { + if (m.kind === "FIELD") { + children.push(m); + } else if (m.kind === "TYPE" && m.refs?.length) { + const refName = m.refs[0]; + if (visited.has(refName)) continue; // circular guard + const refType = referencedTypes.find(t => t.name === refName); + if (refType?.members) { + children.push(...refType.members.filter(rm => rm.kind === "FIELD")); + } + } + } + return children; +} + +/** + * Toggles selection on a member and cascades to all its children. + */ +function toggleSelection(member: Member, selected: boolean, referencedTypes: Type[], visited: Set = new Set()): void { + member.selected = selected; + + // Track this member's ref to prevent cycles + const newVisited = new Set(visited); + if (member.refs?.length) { + newVisited.add(member.refs[0]); + } + + const children = resolveChildren(member, referencedTypes, newVisited); + for (const child of children) { + toggleSelection(child, selected, referencedTypes, newVisited); + } +} + +/** + * Checks if all FIELD members in the tree are selected. + */ +function areAllSelected(members: Member[], referencedTypes: Type[], visited: Set = new Set()): boolean { + for (const m of members) { + if (m.kind !== "FIELD") continue; + if (!m.selected) return false; + + const newVisited = new Set(visited); + if (m.refs?.length) newVisited.add(m.refs[0]); + + const children = resolveChildren(m, referencedTypes, newVisited); + if (children.length && !areAllSelected(children, referencedTypes, newVisited)) { + return false; + } + } + return true; +} + +/** + * Propagates selection state upwards by marking parent as selected if any child is selected. + */ +function propagateSelectionUpwards(members: Member[], referencedTypes: Type[], visited: Set = new Set()): void { + for (const member of members) { + const newVisited = new Set(visited); + if (member.refs?.length) newVisited.add(member.refs[0]); + + if (typeof member.type !== "string") { + const typeObj = member.type as Type; + if (typeObj.members?.length) { + for (const typeMember of typeObj.members) { + if (typeMember.kind !== "TYPE" || !typeMember.refs?.length) continue; + const refName = typeMember.refs[0]; + if (newVisited.has(refName)) continue; + const refType = referencedTypes.find(t => t.name === refName); + if (!refType?.members) continue; + + const anyRefFieldSelected = refType.members + .filter(m => m.kind === "FIELD") + .some(m => m.selected); + + if (typeMember.optional !== false) { + typeMember.selected = anyRefFieldSelected; + } + } + } + } + + const children = resolveChildren(member, referencedTypes, newVisited); + if (children.length > 0) { + // First, recursively propagate for children + propagateSelectionUpwards(children, referencedTypes, newVisited); + + // Then check if any child is selected + const anyChildSelected = children.some(child => child.selected); + + // Mirror child state upward: select parent when any child is selected, deselect parent when all children are deselected. + if (member.optional !== false) { + member.selected = anyChildSelected; + } + } + } +} + +/** + * Checks if a field has partial selection (some but not all children selected). + * Returns true when a parent has some (but not all) descendants selected. + */ +function hasPartialSelection(member: Member, referencedTypes: Type[], visited: Set = new Set()): boolean { + const newVisited = new Set(visited); + if (member.refs?.length) newVisited.add(member.refs[0]); + + const children = resolveChildren(member, referencedTypes, visited); + if (!children.length) return false; + + let anySelected = false; + let allSelected = true; + + for (const child of children) { + const childIsSelected = child.selected; + const childHasPartial = hasPartialSelection(child, referencedTypes, newVisited); + + // If any child has partial selection, parent is partial + if (childHasPartial) return true; + + if (childIsSelected) { + anySelected = true; + } else { + allSelected = false; + } + } + + // Partial if some (but not all) children are selected + return anySelected && !allSelected; +} + +// ─── Styled Components ────────────────────────────────────────── + +const Container = styled.div` + display: flex; + flex-direction: column; + width: 100%; + margin-bottom: 16px; +`; + +const LabelContainer = styled.div` + display: flex; + align-items: center; + margin-bottom: 4px; +`; + +const Label = styled.label` + color: var(--vscode-editor-foreground); + text-transform: capitalize; + font-size: 13px; + font-family: var(--vscode-font-family); +`; + +const Description = styled.div` + font-size: 13px; + font-family: var(--vscode-font-family); + color: var(--vscode-list-deemphasizedForeground); + margin-bottom: 8px; +`; + +const Wrapper = styled.div` + border: 1px solid var(--vscode-dropdown-border); + border-radius: 4px; + background: var(--vscode-input-background); +`; + +const SearchArea = styled.div` + padding: 8px; +`; + +const Dropdown = styled.div` + border-top: 1px solid var(--vscode-dropdown-border); +`; + +const SelectAllRow = styled.div` + display: flex; + align-items: center; + padding: 8px 12px; + background: var(--vscode-editor-background); + border-bottom: 1px solid var(--vscode-dropdown-border); +`; + +const SelectAllText = styled.span` + font-size: 13px; + font-weight: 600; + color: var(--vscode-foreground); + margin-left: 8px; +`; + +const TreeContainer = styled.div` + max-height: 400px; + overflow-y: auto; + + &::-webkit-scrollbar { + width: 10px; + } + &::-webkit-scrollbar-track { + background: var(--vscode-scrollbarSlider-background); + } + &::-webkit-scrollbar-thumb { + background: var(--vscode-scrollbarSlider-hoverBackground); + border-radius: 5px; + } +`; + +const TreeItem = styled.div<{ depth: number }>` + display: flex; + align-items: center; + padding: 8px 12px; + padding-left: ${p => 12 + p.depth * 20}px; + border-bottom: 1px solid var(--vscode-dropdown-border); + + &:hover { + background: var(--vscode-list-hoverBackground); + } + &:last-child { + border-bottom: none; + } +`; + +const ExpandButton = styled.span<{ expanded: boolean }>` + display: inline-flex; + width: 16px; + height: 16px; + margin-right: 4px; + cursor: pointer; + transform: ${p => p.expanded ? "rotate(90deg)" : "rotate(0deg)"}; + transition: transform 0.2s; +`; + +const Spacer = styled.span` + width: 16px; + height: 16px; + margin-right: 4px; +`; + +const FieldLabel = styled.span` + flex: 1; + font-size: 13px; + color: var(--vscode-foreground); + margin-left: 8px; + cursor: pointer; + user-select: none; +`; + +const TypeTag = styled.span` + font-size: 11px; + padding: 2px 8px; + border-radius: 3px; + margin-left: 8px; + font-weight: 500; + background: var(--vscode-badge-background); + color: var(--vscode-badge-foreground); +`; + + +// ─── Component ────────────────────────────────────────────────── + +export function DependentTypeEditor(props: DependentTypeEditorProps) { + const { field } = props; + const { form } = useFormContext(); + const { setValue, register } = form; + + const [search, setSearch] = useState(""); + const [expanded, setExpanded] = useState>(new Set()); + + // Extract the record selector type from field.types + const recordSelectorEntry = field.types?.find( + (t: any) => t.fieldType === "RECORD_FIELD_SELECTOR" + ) as any; + + const initialData = recordSelectorEntry?.recordSelectorType as RecordSelectorType | undefined; + + // Clone into a mutable ref (immutable props pattern) + const dataRef = useRef(undefined); + if (!dataRef.current && initialData) { + dataRef.current = JSON.parse(JSON.stringify(initialData)); + } + + const data = dataRef.current; + const rootType = data?.rootType; + const referencedTypes = data?.referencedTypes ?? []; + + // Register field and sync initial value + useEffect(() => { + register(field.key); + syncToForm(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [field.key, register]); + + // Sync current selection state back to form + const syncToForm = useCallback(() => { + if (!data) return; + const updatedTypes = (field.types ?? []).map((t: any) => { + if (t.fieldType === "RECORD_FIELD_SELECTOR") { + return { ...t, recordSelectorType: JSON.parse(JSON.stringify(data)) }; + } + return t; + }); + // field.types = updatedTypes; + setValue(field.key, updatedTypes); + }, [data, field, setValue]); + + // Force re-render by incrementing a dummy state + const [, forceUpdate] = useState(0); + const triggerUpdate = () => { + forceUpdate(v => v + 1); + syncToForm(); + }; + + // Handlers + const handleToggleField = (member: Member) => { + // Skip if field is required (cannot be unchecked) + if (member.optional === false) return; + + // If partial selection, clicking should select all (complete the selection) + // If selected, clicking should deselect all + // If unselected (and no partial), clicking should select all + const isPartial = hasPartialSelection(member, referencedTypes); + const shouldSelect = !member.selected || isPartial; + toggleSelection(member, shouldSelect, referencedTypes); + + // Propagate selection upwards - mark parents as selected if any child is selected + if (rootType?.members) { + propagateSelectionUpwards(rootType.members, referencedTypes); + } + + triggerUpdate(); + }; + + const handleSelectAll = () => { + if (!rootType?.members) return; + const allChecked = areAllSelected(rootType.members, referencedTypes); + for (const m of rootType.members) { + if (m.kind === "FIELD") { + toggleSelection(m, !allChecked, referencedTypes); + } + } + propagateSelectionUpwards(rootType.members, referencedTypes); + triggerUpdate(); + }; + + const toggleExpanded = (path: string, e: React.MouseEvent) => { + e.stopPropagation(); + setExpanded(prev => { + const next = new Set(prev); + next.has(path) ? next.delete(path) : next.add(path); + return next; + }); + }; + + // Recursive tree renderer + const renderTree = ( + members: Member[], + parentPath: string, + depth: number, + visited: Set = new Set() + ): React.ReactNode => { + return members + .filter(m => m.kind === "FIELD" && m.name) + .filter(m => !search || m.name!.toLowerCase().includes(search.toLowerCase())) + .map(m => { + const path = parentPath ? `${parentPath}.${m.name}` : m.name!; + + const newVisited = new Set(visited); + if (m.refs?.length) newVisited.add(m.refs[0]); + + const children = resolveChildren(m, referencedTypes, visited); + const isExpanded = expanded.has(path); + const isPartial = hasPartialSelection(m, referencedTypes, visited); + const isRequired = m.optional === false; + + return ( + + + {children.length ? ( + toggleExpanded(path, e)}> + + + ) : ( + + )} + + handleToggleField(m)} + /> + + handleToggleField(m)}>{m.name} + {m?.typeName} + + + {isExpanded && children.length > 0 && renderTree(children, path, depth + 1, newVisited)} + + ); + }); + }; + + if (!rootType) { + return ( + + + + {!field.optional && } + +
+ No type model available +
+
+ ); + } + + return ( + + + + {!field.optional && } + + {field.documentation && {field.documentation}} + + + + + + + + + + Select All Fields + + + + {renderTree(rootType.members, "", 0)} + + + + + ); +} diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/DropdownChoiceForm.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/DropdownChoiceForm.tsx index f5e950c25fa..16f1b814e2b 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/DropdownChoiceForm.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/DropdownChoiceForm.tsx @@ -24,7 +24,7 @@ import { FormField } from "../Form/types"; import { buildRequiredRule, capitalize, getValueForDropdown } from "./utils"; import { useFormContext } from "../../context"; import styled from "@emotion/styled"; -import { EditorFactory } from "./EditorFactory"; +import { FieldFactory } from "./FieldFactory"; interface DropdownChoiceFormProps { field: FormField; @@ -95,7 +95,7 @@ export function DropdownChoiceForm(props: DropdownChoiceFormProps) { {dynamicFields.map((dfield, index) => { if (!dfield.advanced && !dfield.optional) { return ( - void; openSubPanel?: (subPanel: SubPanel) => void; @@ -64,11 +69,13 @@ interface FormFieldEditorProps { scopeFieldAddon?: React.ReactNode; isContextTypeEditorSupported?: boolean; openFormTypeEditor?: (open: boolean, newType?: string) => void; + updateImports?: (key: string, imports: Imports) => void; } export const EditorFactory = (props: FormFieldEditorProps) => { const { field, + fieldInputType, selectedNode, openRecordEditor, openSubPanel, @@ -83,54 +90,59 @@ export const EditorFactory = (props: FormFieldEditorProps) => { handleNewTypeSelected, isContextTypeEditorSupported, openFormTypeEditor, - scopeFieldAddon + updateImports, } = props; - const showWithExpressionEditor = field.types?.some(type => { - return type && ( - type.fieldType === "EXPRESSION" || - type.fieldType === "LV_EXPRESSION" || - type.fieldType === "ACTION_OR_EXPRESSION" || - type.fieldType === "TEXT" || - type.fieldType === "EXPRESSION_SET" || - type.fieldType === "TEXT_SET" || - type.fieldType === "MAPPING_EXPRESSION_SET" || - type.fieldType === "MAPPING_EXPRESSION" || - (type.fieldType === "SINGLE_SELECT" && isDropDownType(type)) || - type.fieldType === "RECORD_MAP_EXPRESSION" || - (field.type === "FLAG" && field.types?.length > 1) - ); - }); + const showWithExpressionEditor = ( + fieldInputType.fieldType === "EXPRESSION" || + fieldInputType.fieldType === "LV_EXPRESSION" || + fieldInputType.fieldType === "ACTION_OR_EXPRESSION" || + fieldInputType.fieldType === "ACTION_EXPRESSION" || + fieldInputType.fieldType === "TEXT" || + fieldInputType.fieldType === "EXPRESSION_SET" || + fieldInputType.fieldType === "TEXT_SET" || + (fieldInputType.fieldType === "SINGLE_SELECT" && isDropDownType(fieldInputType)) || + fieldInputType.fieldType === "RECORD_MAP_EXPRESSION" || + fieldInputType.fieldType === "SQL_QUERY" || + fieldInputType.fieldType === "NUMBER" || + fieldInputType.fieldType === "PROMPT" || + (fieldInputType.fieldType === "FLAG" && field.types?.length > 1) || + fieldInputType.fieldType === "CLAUSE_EXPRESSION" + ) if (!field.enabled || field.hidden) { return <>; - } else if (field.type === "MULTIPLE_SELECT") { + } else if (fieldInputType.fieldType === "RECORD_FIELD_SELECTOR" && field.codedata?.kind === "PARAM_FOR_TYPE_INFER") { + return ; + } else if (fieldInputType.fieldType === "SLIDER") { + return ; + } else if (fieldInputType.fieldType === "MULTIPLE_SELECT") { return ; - } else if (field.type === "HEADER_SET") { + } else if (fieldInputType.fieldType === "HEADER_SET") { return ; - } else if (field.type === "CHOICE") { + } else if (fieldInputType.fieldType === "CHOICE") { return ; - } else if (field.type === "DROPDOWN_CHOICE") { + } else if (fieldInputType.fieldType === "DROPDOWN_CHOICE") { return ; - } else if (field.type === "TEXTAREA" || field.type === "STRING" || field.type === "DOC_TEXT") { + } else if (fieldInputType.fieldType === "TEXTAREA" || fieldInputType.fieldType === "STRING" || fieldInputType.fieldType === "DOC_TEXT") { return ; - } else if (field.type === "FLAG" && !showWithExpressionEditor) { + } else if (fieldInputType.fieldType === "FLAG" && !showWithExpressionEditor) { return ; - } else if (field.type === "EXPRESSION" && field.key === "resourcePath") { + } else if (fieldInputType.fieldType === "EXPRESSION" && field.key === "resourcePath") { // HACK: this should fixed with the LS API. this is used to avoid the expression editor for resource path field. return ; - } else if (field.type?.toUpperCase() === "ENUM") { + } else if (fieldInputType.fieldType?.toUpperCase() === "ENUM") { // Enum is a dropdown field return ; - } else if (field.type?.toUpperCase() === "AUTOCOMPLETE") { + } else if (fieldInputType.fieldType?.toUpperCase() === "AUTOCOMPLETE") { return ; - } else if (field.type === "CUSTOM_DROPDOWN") { + } else if (fieldInputType.fieldType === "CUSTOM_DROPDOWN") { return ; - } else if (field.type === "FILE_SELECT" && field.editable) { + } else if (fieldInputType.fieldType === "FILE_SELECT" && field.editable) { return ; - } else if (field.type === "SINGLE_SELECT" && !showWithExpressionEditor && field.editable) { + } else if (fieldInputType.fieldType === "SINGLE_SELECT" && !showWithExpressionEditor && field.editable) { return ; - } else if (!field.items && (field.type === "ACTION_TYPE") && field.editable) { + } else if (!field.items && (fieldInputType.fieldType === "ACTION_TYPE") && field.editable) { return ( { handleNewTypeSelected={handleNewTypeSelected} /> ); - } else if (!field.items && (field.key === "type" || field.type === "TYPE") && field.editable) { + } else if (!field.items && (field.key === "type" || fieldInputType.fieldType === "TYPE") && field.editable) { return ( { /> ); - } else if (!field.items && (field.type === "RAW_TEMPLATE" || getPrimaryInputType(field.types)?.ballerinaType === "ai:Prompt") && field.editable) { + } else if (!field.items && (fieldInputType.fieldType === "RAW_TEMPLATE" || fieldInputType.ballerinaType === "ai:Prompt") && field.editable) { return ( { /> ); - } else if (!field.items && field.type === "ACTION_EXPRESSION") { - return ( - recordField.key === field.key)} - /> - ); } else if (showWithExpressionEditor && field.editable) { // Expression field is a inline expression editor return ( { recordTypeField={recordTypeFields?.find(recordField => recordField.key === field.key)} /> ); - } else if (field.type === "VIEW") { + } else if (fieldInputType.fieldType === "VIEW") { // Skip this property return <>; - } else if ( - (field.type === "PARAM_MANAGER") || - (field.type === "REPEATABLE_PROPERTY" && isTemplateType(getPrimaryInputType(field.types))) + } else if(fieldInputType.fieldType === "REPEATABLE_PROPERTY" && (selectedNode === "DATA_MAPPER_CREATION" || selectedNode === "FUNCTION_CREATION")) { + return ; + }else if ( + (fieldInputType.fieldType === "PARAM_MANAGER") || + (fieldInputType.fieldType === "REPEATABLE_PROPERTY" && isTemplateType(fieldInputType)) ) { return ; - } else if (field.type === "REPEATABLE_PROPERTY") { + } else if (fieldInputType.fieldType === "REPEATABLE_PROPERTY") { return ; - } else if (field.type === "IDENTIFIER" && !field.editable && field?.lineRange) { + } + + else if (fieldInputType.fieldType === "REPEATABLE_LIST") { + return ; + } else if (fieldInputType.fieldType === "REPEATABLE_MAP") { + return ; + } else if (fieldInputType.fieldType === "IDENTIFIER" && !field.editable && field?.lineRange) { return ; - } else if (field.type !== "IDENTIFIER" && !field.editable) { + } else if (fieldInputType.fieldType !== "IDENTIFIER" && !field.editable) { return ; - } else if (field.type === "IDENTIFIER" && field.editable) { + } else if (fieldInputType.fieldType === "IDENTIFIER" && field.editable) { return ; - } else if (field.type === "SERVICE_PATH" || field.type === "ACTION_PATH") { + } else if (fieldInputType.fieldType === "SERVICE_PATH" || fieldInputType.fieldType === "ACTION_PATH") { return ; - } else if (field.type === "CONDITIONAL_FIELDS" && field.editable) { + } else if (fieldInputType.fieldType === "CONDITIONAL_FIELDS" && field.editable) { // Conditional fields is a group of fields which are conditionally shown based on a checkbox field return ( ); - } else if (field.type === "DM_JOIN_CLAUSE_RHS_EXPRESSION") { + } else if (fieldInputType.fieldType === "DM_JOIN_CLAUSE_RHS_EXPRESSION") { // Expression field for Data Mapper join on condition RHS + const clauseExpressionField: FormField = { + ...field, + type: "CLAUSE_EXPRESSION", + types: [{ fieldType: "CLAUSE_EXPRESSION", selected: false }] + }; // Transforming to CLAUSE_EXPRESSION type to support diagnostics + return ( = ({ {error ? : formDiagnostics && formDiagnostics.length > 0 && - d.message).join(', ')} /> + d.message).join('\n')} /> } ); diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpressionEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpressionEditor.tsx index 29db4db249c..f387a23f42f 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpressionEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpressionEditor.tsx @@ -28,11 +28,13 @@ import { RequiredFormInput, ThemeColors } from '@wso2/ui-toolkit'; +import { LinkButton } from "@wso2/ui-toolkit/lib/components/LinkButton/LinkButton"; import { buildRequiredRule, getPropertyFromFormField, isExpandableMode, sanitizeType, toEditorMode } from './utils'; import { FormField, FormExpressionEditorProps, HelperpaneOnChangeOptions } from '../Form/types'; import { useFormContext } from '../../context'; import { ExpressionProperty, + FormDiagnostics, getPrimaryInputType, InputType, LineRange, @@ -43,17 +45,17 @@ import { } from '@wso2/ballerina-core'; import ReactMarkdown from 'react-markdown'; import { FieldProvider } from "./FieldContext"; +import { useModeSwitcherContext } from "./ModeSwitcherContext"; import ModeSwitcher from '../ModeSwitcher'; -import { ExpressionField, getEditorConfiguration } from './ExpressionField'; -import WarningPopup from '../WarningPopup'; +import { ExpressionField } from './ExpressionField'; import { InputMode } from './MultiModeExpressionEditor/ChipExpressionEditor/types'; import { getInputModeFromTypes } from './MultiModeExpressionEditor/ChipExpressionEditor/utils'; import { ExpandedEditor } from './ExpandedEditor'; -import { NumberExpressionEditorConfig } from './MultiModeExpressionEditor/Configurations'; export type ContextAwareExpressionEditorProps = { id?: string; fieldKey?: string; + fieldInputType: InputType; inputTypes?: InputType[]; placeholder?: string; required?: boolean; @@ -115,6 +117,11 @@ export namespace S { gap: 8px; `; + export const ItemContainer = styled.div` + border: 1px solid var(--vscode-dropdown-border); + border-radius: 4px + `; + export const LabelContainer = styled.div({ display: 'flex', alignItems: 'center' @@ -322,6 +329,23 @@ export const DataMapperJoinClauseRhsEditor = (props: ContextAwareExpressionEdito return await expressionEditor.retrieveCompletions(prefixExpr + value, property, prefixExpr.length + offset, triggerCharacter); } + modifiedExpressionEditor.getExpressionEditorDiagnostics = async ( + showDiagnostics: boolean, + expression: string, + key: string, + property: ExpressionProperty + ) => { + const varName = form.watch('name'); + const joinExpression = form.watch('expression'); + const prefixExpr = `from var ${varName} in ${joinExpression} select `; + return await expressionEditor.getExpressionEditorDiagnostics( + showDiagnostics, + prefixExpr + expression, + key, + property + ); + } + return ( { autoFocus, control, field, + fieldInputType, id, placeholder, required, @@ -373,23 +398,14 @@ export const ExpressionEditor = (props: ExpressionEditorProps) => { const key = fieldKey ?? field.key; const [focused, setFocused] = useState(false); - const [inputMode, setInputMode] = useState(recordTypeField ? InputMode.RECORD : InputMode.EXP); - const inputModeRef = useRef(inputMode); - const [isExpressionEditorHovered, setIsExpressionEditorHovered] = useState(false); - const [showModeSwitchWarning, setShowModeSwitchWarning] = useState(false); const [formDiagnostics, setFormDiagnostics] = useState(field.diagnostics); const [isExpandedModalOpen, setIsExpandedModalOpen] = useState(false); - const targetInputModeRef = useRef(null); // Update formDiagnostics when field.diagnostics changes useEffect(() => { setFormDiagnostics(field.diagnostics); }, [field.diagnostics]); - // Keep inputModeRef in sync with inputMode state - useEffect(() => { - inputModeRef.current = inputMode; - }, [inputMode]); // If Form directly calls ExpressionEditor without setting targetLineRange and fileName through context @@ -407,14 +423,30 @@ export const ExpressionEditor = (props: ExpressionEditorProps) => { const exprRef = useRef(null); const anchorRef = useRef(null); - const { nodeInfo } = useFormContext(); + // This guard is here because the IF form and Match forms + // does not populate the context value since they use expressionEditor + // component directly instead of going through the FieldFactory. + // This should ideally be handled as followes. + // 1.) Refactor IF and Match forms to use FieldFactory component + // and LS property models + // 2.) Remove this guard and make sure all the usages of ExpressionEditor + // are wrapped with ModeSwitcherContext provider + const modeSwitcherContext = useModeSwitcherContext() ?? { + inputMode: InputMode.EXP, + isModeSwitcherEnabled: false, + isRecordTypeField: false, + onModeChange: () => { }, + types: undefined + }; + + const { inputMode } = modeSwitcherContext; // Use to fetch initial diagnostics const previousDiagnosticsFetchContext = useRef({ fetchedInitialDiagnostics: false, diagnosticsFetchedTargetLineRange: undefined }); - const fieldValue = (inputModeRef.current === InputMode.PROMPT || inputModeRef.current === InputMode.TEMPLATE) && rawExpression ? rawExpression(watch(key)) : watch(key); + const fieldValue = (inputMode === InputMode.PROMPT || inputMode === InputMode.TEMPLATE) && rawExpression ? rawExpression(watch(key)) : watch(key); // Initial render useEffect(() => { @@ -439,40 +471,6 @@ export const ExpressionEditor = (props: ExpressionEditorProps) => { } }, [fieldValue, targetLineRange]); - const getFallBackSelectedType = (): InputType => { - if ( - typeof field.value === 'string' && - field.value.trim() !== '' - ) { - return field?.types[field.types.length - 1]; - } - else { - return field?.types[0]; - } - } - - useEffect(() => { - // If recordTypeField is present, always use GUIDED mode - if (recordTypeField) { - setInputMode(InputMode.RECORD); - return; - } - if (field?.types.length === 0) { - setInputMode(InputMode.EXP); - return; - }; - let selectedInputType = field?.types.find(type => type.selected); - if (!selectedInputType) { - selectedInputType = getFallBackSelectedType(); - } - const inputMode = getInputModeFromTypes(selectedInputType); - if (!inputMode) { - setInputMode(InputMode.EXP); - return; - }; - setInputMode(inputMode); - }, [field?.types, recordTypeField]); - const handleFocus = async (controllerOnChange?: (value: string) => void) => { setFocused(true); @@ -542,7 +540,7 @@ export const ExpressionEditor = (props: ExpressionEditorProps) => { recordTypeField, field.type === "LV_EXPRESSION", field.types, - inputModeRef.current, + inputMode, ); }; @@ -550,54 +548,6 @@ export const ExpressionEditor = (props: ExpressionEditorProps) => { return await extractArgsFromFunction(value, getPropertyFromFormField(field), cursorPosition); }; - const isSwitchToPrimaryModeSafe = (expValue: string) => { - if (!expValue) return true; - const primaryInputType = getPrimaryInputType(field.types); - const primaryInputMode = getInputModeFromTypes(primaryInputType); - const valueConfigObject = getEditorConfiguration(primaryInputMode); - return valueConfigObject.getIsValueCompatible(expValue); - } - - const handleModeChange = (value: InputMode) => { - const raw = watch(key); - const currentValue = raw && typeof raw === "string" ? raw.trim() : ""; - if (inputMode !== InputMode.EXP) { - setInputMode(value); - return; - } - if (!isSwitchToPrimaryModeSafe(currentValue)) { - targetInputModeRef.current = value; - setShowModeSwitchWarning(true) - return; - } - setInputMode(value); - }; - - const handleModeSwitchWarningContinue = () => { - if (targetInputModeRef.current !== null) { - setInputMode(targetInputModeRef.current); - const targetMode = targetInputModeRef.current; - const shouldClearValue = [ - InputMode.PROMPT, - InputMode.TEMPLATE, - InputMode.TEXT, - InputMode.NUMBER, - InputMode.BOOLEAN, - ] - .includes(targetMode) && inputMode === InputMode.EXP; - if (shouldClearValue) { - setValue(key, ""); - } - targetInputModeRef.current = null; - } - setShowModeSwitchWarning(false); - }; - - const handleModeSwitchWarningCancel = () => { - targetInputModeRef.current = null; - setShowModeSwitchWarning(false); - }; - const handleOpenExpandedMode = () => { setIsExpandedModalOpen(true); }; @@ -619,18 +569,6 @@ export const ExpressionEditor = (props: ExpressionEditorProps) => { : `${field.documentation}.` : ''; - const isModeSwitcherRestricted = () => { - return !field.types || !(field.types.length > 1); - }; - - const isModeSwitcherAvailable = () => { - if (recordTypeField) return true; - if (isModeSwitcherRestricted()) return false; - if (!(focused || isExpressionEditorHovered)) return false; - if (!getInputModeFromTypes(getPrimaryInputType(field.types))) return false; - return true; - } - return ( { > setIsExpressionEditorHovered(true)} - onMouseLeave={() => setIsExpressionEditorHovered(false)} + data-testid={`ex-editor-${field.key}`} > {showHeader && (
- - - {field.label} - {field.defaultValue && { `(Default: ${field.defaultValue}) `}} - {(required ?? !field.optional) && } - {getPrimaryInputType(field.types)?.ballerinaType && ( - - {sanitizeType(getPrimaryInputType(field.types)?.ballerinaType)} - - )} - - + {field.label && ( + + + {field.label} + {(field.defaultValue && field.defaultValue?.trim() !== "()") && {`(Default: ${field.defaultValue}) `}} + {(required ?? !field.optional) && } + {getPrimaryInputType(field.types)?.ballerinaType && ( + + {sanitizeType(getPrimaryInputType(field.types)?.ballerinaType)} + + )} + + + )} {documentation && {documentation}}
- - {isModeSwitcherAvailable() && ( + {modeSwitcherContext?.isModeSwitcherEnabled && ( + - )} - + + )}
)} @@ -724,7 +664,7 @@ export const ExpressionEditor = (props: ExpressionEditorProps) => { rules.validate = { pattern: (value: any) => { try { - const currentMode = inputModeRef.current; + const currentMode = inputMode; // Only validate in TEXT mode if (currentMode !== InputMode.TEXT) { @@ -775,9 +715,9 @@ export const ExpressionEditor = (props: ExpressionEditorProps) => { // clear field diagnostics setFormDiagnostics([]); // Use ref to get current mode (not stale closure value) - const currentMode = inputModeRef.current; - const rawValue = (currentMode === InputMode.PROMPT || currentMode === InputMode.TEMPLATE) && - rawExpression ? rawExpression(typeof updatedValue === 'string' ? updatedValue : JSON.stringify(updatedValue)) : updatedValue; + const currentMode = inputMode; + const rawValue = (currentMode === InputMode.PROMPT || currentMode === InputMode.TEMPLATE) && + rawExpression ? rawExpression(typeof updatedValue === 'string' ? updatedValue : JSON.stringify(updatedValue)) : updatedValue; onChange(rawValue); if (getExpressionEditorDiagnostics && (currentMode === InputMode.EXP || currentMode === InputMode.PROMPT || currentMode === InputMode.TEMPLATE)) { @@ -834,9 +774,17 @@ export const ExpressionEditor = (props: ExpressionEditorProps) => { {error ? : formDiagnostics && formDiagnostics.length > 0 && - d.message).join(', ')} /> + d.message).join('\n')} /> } - {onOpenExpandedMode && toEditorMode(inputModeRef.current) && ( + {field.actionCallback && ( + + {field.actionLabel} + + )} + {onOpenExpandedMode && toEditorMode(inputMode) && ( { // clear field diagnostics setFormDiagnostics([]); // Use ref to get current mode (not stale closure value) - const currentMode = inputModeRef.current; + const currentMode = inputMode; const rawValue = (currentMode === InputMode.PROMPT || currentMode === InputMode.TEMPLATE) && rawExpression ? rawExpression(updatedValue) : updatedValue; onChange(rawValue); - if (getExpressionEditorDiagnostics && (currentMode === InputMode.EXP || currentMode === InputMode.PROMPT || currentMode === InputMode.TEMPLATE)) { + if (getExpressionEditorDiagnostics && (inputMode === InputMode.EXP || inputMode === InputMode.PROMPT || inputMode === InputMode.TEMPLATE)) { getExpressionEditorDiagnostics( (required ?? !field.optional) || rawValue !== '', rawValue, @@ -883,7 +831,7 @@ export const ExpressionEditor = (props: ExpressionEditorProps) => { setIsExpandedModalOpen(false) }} onSave={handleSaveExpandedMode} - mode={toEditorMode(inputModeRef.current)!} + mode={toEditorMode(inputMode)!} completions={completions} fileName={effectiveFileName} targetLineRange={effectiveTargetLineRange} @@ -893,7 +841,7 @@ export const ExpressionEditor = (props: ExpressionEditorProps) => { getHelperPane={handleGetHelperPane} error={error} formDiagnostics={formDiagnostics} - inputMode={inputModeRef.current} + inputMode={inputMode} /> )} @@ -901,13 +849,6 @@ export const ExpressionEditor = (props: ExpressionEditorProps) => { }} />
- {showModeSwitchWarning && ( - - )}
); }; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpressionField.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpressionField.tsx index 86f88497ffd..1faad3ec05d 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpressionField.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpressionField.tsx @@ -27,7 +27,7 @@ import { } from '@wso2/ui-toolkit'; import { S } from './ExpressionEditor'; import TextModeEditor from './MultiModeExpressionEditor/TextExpressionEditor/TextModeEditor'; -import { InputMode, TokenType } from './MultiModeExpressionEditor/ChipExpressionEditor/types'; +import { InputMode } from './MultiModeExpressionEditor/ChipExpressionEditor/types'; import { LineRange } from '@wso2/ballerina-core/lib/interfaces/common'; import { FormField, HelperpaneOnChangeOptions } from '../Form/types'; import { ChipExpressionEditorComponent } from './MultiModeExpressionEditor/ChipExpressionEditor/components/ChipExpressionEditor'; @@ -38,11 +38,10 @@ import { EnumEditor } from './MultiModeExpressionEditor/EnumEditor/EnumEditor'; import { SQLExpressionEditor } from './MultiModeExpressionEditor/SqlExpressionEditor/SqlExpressionEditor'; import BooleanEditor from './MultiModeExpressionEditor/BooleanEditor/BooleanEditor'; import { getPrimaryInputType, isDropDownType } from '@wso2/ballerina-core'; -import { DynamicArrayBuilder } from './MultiModeExpressionEditor/DynamicArrayBuilder/DynamicArrayBuilder'; import { ChipExpressionEditorDefaultConfiguration } from './MultiModeExpressionEditor/ChipExpressionEditor/ChipExpressionDefaultConfig'; -import MappingConstructor from './MultiModeExpressionEditor/MappingConstructor/MappingConstructor'; -import MappingObjectConstructor from './MultiModeExpressionEditor/MappingObjectConstructor/MappingObjectConstructor'; +import { DynamicArrayBuilder } from './MultiModeExpressionEditor/DynamicArrayBuilder/DynamicArrayBuilder'; import { isRecord } from './utils'; +import { ConnectionSelectEditor } from './MultiModeExpressionEditor/ConnectionSelectEditor/ConnectionSelectEditor'; export interface ExpressionFieldProps { field: FormField; @@ -153,41 +152,18 @@ export const ExpressionField: React.FC = (props: Expressio isInExpandedMode } = props; - if (inputMode === InputMode.MAP_EXP) { - return ( - } - label={field.label} - onChange={(val) => onChange(val, JSON.stringify(val).length)} - expressionFieldProps={props} - /> - ); - } - //below editors cannot have input value in record type if (isRecord(value)) return null; - if (inputMode === InputMode.ARRAY || inputMode === InputMode.TEXT_ARRAY) { return ( onChange(val, val.length)} - expressionFieldProps={props} - /> - ); - } - if (inputMode === InputMode.MAP) { - return ( - onChange(val, val.length)} expressionFieldProps={props} /> ); } - //below editors cannot have input value in array type if (Array.isArray(value)) return null; @@ -201,20 +177,31 @@ export const ExpressionField: React.FC = (props: Expressio /> ); } - if (inputMode === InputMode.SELECT && isDropDownType(primaryInputType)) { - return ( - onChange(val, val?.length)} - items={primaryInputType.options.map(option => ( - { - id: option.value, - content: option.label, - value: option.value - }))} - /> - ); + if (inputMode === InputMode.SELECT) { + if (field.codedata?.searchNodesKind) { + return ( + onChange(val, val?.length)} + /> + ); + } + if (isDropDownType(primaryInputType)) { + return ( + onChange(val, val?.length)} + items={primaryInputType.options.map(option => ( + { + id: option.value, + content: option.label, + value: option.value + }))} + /> + ); + } } if (inputMode === InputMode.RECORD) { return ( @@ -352,6 +339,7 @@ export const ExpressionField: React.FC = (props: Expressio isExpandedVersion={false} completions={completions} onChange={onChange} + onBlur={onBlur} value={value} sanitizedExpression={sanitizedExpression} rawExpression={rawExpression} diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/FieldFactory.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/FieldFactory.tsx new file mode 100644 index 00000000000..cdc5d11f3b0 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/FieldFactory.tsx @@ -0,0 +1,221 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useRef } from "react"; +import { useEffect, useState, useMemo, useCallback } from "react"; +import styled from '@emotion/styled'; +import { EditorFactory, FormField, InputMode, useFormContext, Provider as FormContextProvider, FormValues } from "../.."; +import { Imports, InputType, ExpressionProperty } from "@wso2/ballerina-core"; +import { NodeKind, NodeProperties, RecordTypeField, SubPanel, SubPanelView } from "@wso2/ballerina-core"; +import { CompletionItem } from "@wso2/ui-toolkit"; +import { getInputModeFromTypes } from "./MultiModeExpressionEditor/ChipExpressionEditor/utils"; +import { ModeSwitcherProvider } from "./ModeSwitcherContext"; + +const Container = styled.div` + width: 100%; +`; + +type FieldFactoryProps = { + field: FormField; + selectedNode?: NodeKind; + openRecordEditor?: (open: boolean, newType?: string | NodeProperties) => void; + openSubPanel?: (subPanel: SubPanel) => void; + subPanelView?: SubPanelView; + handleOnFieldFocus?: (key: string) => void; + onBlur?: () => void | Promise; + autoFocus?: boolean; + handleOnTypeChange?: () => void; + recordTypeFields?: RecordTypeField[]; + onIdentifierEditingStateChange?: (isEditing: boolean) => void; + setSubComponentEnabled?: (isAdding: boolean) => void; + handleNewTypeSelected?: (type: string | CompletionItem) => void; + scopeFieldAddon?: React.ReactNode; + isContextTypeEditorSupported?: boolean; + handleFormValidation?: (formData?: FormValues) => Promise; + openFormTypeEditor?: (open: boolean, newType?: string) => void; + updateImports?: (key: string, imports: Imports) => void; +} + + +export const FieldFactory = (props: FieldFactoryProps) => { + const [renderingEditors, setRenderingEditors] = useState(null); + const [inputMode, setInputMode] = useState(InputMode.EXP); + + const formContext = useFormContext(); + const { expressionEditor } = formContext; + + const updatePropertyForCurrentMode = useCallback( + (property: ExpressionProperty, expression?: string): ExpressionProperty => { + const newTypes = property.types.map(type => ({ + ...type, + selected: getInputModeFromTypes(type) === inputMode + })); + return { ...property, types: newTypes, ...(expression !== undefined && { value: expression }) }; + }, + [inputMode] + ); + + const updatedGetExpressionEditorDiagnostics = useCallback( + async ( + showDiagnostics: boolean, + expression: string, + key: string, + property: ExpressionProperty + ): Promise => { + const updatedProperty = updatePropertyForCurrentMode(property, expression); + expressionEditor?.getExpressionEditorDiagnostics?.( + showDiagnostics, + expression, + key, + updatedProperty + ) + }, + [expressionEditor, updatePropertyForCurrentMode] + ); + + const updatedRetrieveCompletions = useCallback( + async ( + value: string, + property: ExpressionProperty, + offset: number, + triggerCharacter?: string + ): Promise => { + const updatedProperty = updatePropertyForCurrentMode(property, value); + return expressionEditor?.retrieveCompletions?.( + value, + updatedProperty, + offset, + triggerCharacter + ); + }, + [expressionEditor, updatePropertyForCurrentMode] + ); + + const updatedExtractArgsFromFunction = useCallback( + async ( + value: string, + property: ExpressionProperty, + cursorPosition: number + ) => { + const updatedProperty = updatePropertyForCurrentMode(property, value); + return expressionEditor?.extractArgsFromFunction?.( + value, + updatedProperty, + cursorPosition + ); + }, + [expressionEditor, updatePropertyForCurrentMode] + ); + + const updatedExpressionEditor = useMemo(() => { + if (!expressionEditor) { + return undefined; + } + return { + ...expressionEditor, + getExpressionEditorDiagnostics: updatedGetExpressionEditorDiagnostics, + ...(expressionEditor.retrieveCompletions && { retrieveCompletions: updatedRetrieveCompletions }), + ...(expressionEditor.extractArgsFromFunction && { extractArgsFromFunction: updatedExtractArgsFromFunction }) + } as typeof expressionEditor; + }, [expressionEditor, updatedGetExpressionEditorDiagnostics, updatedRetrieveCompletions, updatedExtractArgsFromFunction]); + + const updatedFormContext = useMemo(() => ({ + ...formContext, + expressionEditor: updatedExpressionEditor + }), [formContext, updatedExpressionEditor]); + + const getInitialSelectedInputType = (): InputType => { + if (!props.field.types || props.field.types.length === 0) { + throw new Error("Field types are not defined"); + } + const selectedType = props.field.types.find(type => type.selected); + if (selectedType) { + return selectedType; + } + if (!props.field.value) { + return props.field.types[0]; + } + return props.field.types[props.field.types.length - 1]; + } + + useEffect(() => { + if (!props.field.types || props.field.types.length === 0) { + throw new Error("Field types are not defined"); + } + + const newRenderingTypes = props.field.types.length === 1 + ? [props.field.types[0]] + : [props.field.types[0], props.field.types[props.field.types.length - 1]]; + setRenderingEditors(newRenderingTypes); + + const selectedInputType = getInitialSelectedInputType(); + const initialInputMode = getInputModeFromTypes(selectedInputType) || InputMode.EXP; + setInputMode(initialInputMode); + updateFieldTypesSelection(initialInputMode); + }, [props.field, props.recordTypeFields]); + + const isModeSwitcherEnabled = useMemo(() => { + return renderingEditors && renderingEditors.length > 1; + }, [renderingEditors]); + + const isRecordTypeField = useMemo(() => { + return !!props.recordTypeFields?.find(recordField => recordField.key === props.field.key); + }, [props.recordTypeFields, props.field.key]); + + const updateFieldTypesSelection = (targetMode: InputMode) => { + props.field.types?.forEach(type => { + type.selected = getInputModeFromTypes(type) === targetMode; + }); + }; + + const handleModeChange = useCallback((mode: InputMode) => { + setInputMode(mode); + updateFieldTypesSelection(mode); + props.handleFormValidation?.(); + }, [props.handleFormValidation]); + + const editorElements = useMemo(() => { + if (!renderingEditors) return null; + + if (!isModeSwitcherEnabled) { + return ; + + } + return renderingEditors.map((type, index) => { + if (inputMode !== getInputModeFromTypes(type)) return null; + return () + }); + }, [renderingEditors, isModeSwitcherEnabled, inputMode, props]); + + + return ( + + + + {editorElements} + + + + ); +}; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormArrayEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormArrayEditor.tsx new file mode 100644 index 00000000000..3c07ea508c9 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormArrayEditor.tsx @@ -0,0 +1,264 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useEffect, useRef, useState } from "react"; +import { FormDiagnostics, InputType, Property } from "@wso2/ballerina-core"; +import { Form, FormField, FormFieldEditorProps, FormValues, S, useFormContext, useModeSwitcherContext } from "../.."; +import { Codicon } from "@wso2/ui-toolkit/lib/components/Codicon/Codicon"; +import { ScrollableList, ScrollableListRef } from "@wso2/ui-toolkit/lib/components/ScrollableList/ScrollableList"; +import ModeSwitcher from "../ModeSwitcher"; +import { getArraySubFormFieldFromTypes, stringToRawArrayElements, buildStringArray, getRecordTypeFields, mapDiagnosticsServerityToFormSeverity } from "./utils"; + +export const FormArrayEditor = (props: FormFieldEditorProps & { + onChange: (value: any) => void; + value: any; +}) => { + const [repeatableFields, setRepeatableFields] = useState([]); + const { expressionEditor } = useFormContext(); + const elementDiagnosticsRef = useRef([]); + const prevDiagnosticsRef = useRef>({}); + const scrollableListRef = useRef(null); + + const modeSwitcherContext = useModeSwitcherContext(); + + const handleAddNewItem = () => { + const key = crypto.randomUUID(); + if (!(props.field.types[0] as any).template) return; + const newField = getArraySubFormFieldFromTypes(key, (props.field.types[0] as any).template.types as InputType[]) + setRepeatableFields(prev => [...prev, newField]); + // Wait for the dom update + setTimeout(() => { + scrollableListRef.current?.scrollToBottom(); + }, 100); + } + + const handleFormOnChange = (_fieldKey: string, value: any, _allValues: FormValues, parentKey: string) => { + const newRepeatableFields = repeatableFields.map((formField) => { + if (formField.key === parentKey) { + return { ...formField, value }; + } + return formField; + }); + setRepeatableFields(newRepeatableFields); + props.onChange(newRepeatableFields); + } + + const handleModeSwitchValueChange = () => { + const stringValue = buildStringArray(repeatableFields); + props.onChange(stringValue); + } + + const handleDeleteItem = (keyToDelete: string) => { + const newRepeatableFields = repeatableFields.filter((formField) => formField.key !== keyToDelete); + setRepeatableFields(newRepeatableFields); + props.onChange(newRepeatableFields); + }; + + const handleSetDiagnosticsInfoChange = (diagnostics: FormDiagnostics) => { + const existingDiagnostics = elementDiagnosticsRef.current.filter(d => d.key !== diagnostics.key); + elementDiagnosticsRef.current = [...existingDiagnostics, diagnostics]; + } + + const handleFormDiagnosticsChange = async (showDiagnostics: boolean, expression: string, key: string, property: Property, setDiagnosticsInfo: (diagnostics: FormDiagnostics) => void, shouldUpdateNode?: boolean, variableType?: string) => { + return expressionEditor?.getExpressionFormDiagnostics?.( + showDiagnostics, + expression, + key, + property, + (diagnostics: FormDiagnostics) => { + handleSetDiagnosticsInfoChange(diagnostics); + setDiagnosticsInfo(diagnostics); + }, + shouldUpdateNode, + variableType); + }; + + const applyDiagnosticsToField = (field: FormField): FormField => { + const diagnostics = elementDiagnosticsRef.current.find(diag => diag.key === field.key); + if (!diagnostics) return field; + return { + ...field, + diagnostics: diagnostics.diagnostics.map(diag => ({ + message: diag.message, + severity: mapDiagnosticsServerityToFormSeverity(diag.severity) + })) + }; + }; + + const makeDiagnosticsKey = (diagnostics?: any[]) => { + if (!Array.isArray(diagnostics) || diagnostics.length === 0) return ""; + return diagnostics.map(d => `${d.message}|${d.severity}`).join("||"); + } + + useEffect(() => { + if (!Array.isArray(props.value)) return; + const newRepeatableFields = repeatableFields.map(applyDiagnosticsToField); + let changed = false; + newRepeatableFields.forEach(field => { + const key = field.key; + const diagKey = makeDiagnosticsKey(field.diagnostics as any[]); + if (prevDiagnosticsRef.current[key] !== diagKey) { + changed = true; + } + }); + if (!changed) return; + // update prevDiagnosticsRef and state only when diagnostics actually changed + prevDiagnosticsRef.current = newRepeatableFields.reduce((acc: Record, f) => { + acc[f.key] = makeDiagnosticsKey(f.diagnostics as any[]); + return acc; + }, {}); + setRepeatableFields(newRepeatableFields); + props.onChange(newRepeatableFields); + }, [props.value]); + + useEffect(() => { + if (!props.value) return; + if (JSON.stringify(props.value) === JSON.stringify(repeatableFields)) return; + const keyArray: string[] = []; + if (Array.isArray(props.value)) { + const initialDioagnostics: FormDiagnostics[] = props.value.map((val: any) => { + const key = crypto.randomUUID(); + keyArray.push(key); + return { + key: `ar-elm-${key}`, + diagnostics: Array.isArray(val.diagnostics) + ? val.diagnostics.map((diag: any) => ({ + message: diag.message, + severity: mapDiagnosticsServerityToFormSeverity(diag.severity), + })) + : Array.isArray(val.diagnostics?.diagnostics) + ? val.diagnostics.diagnostics.map((diag: any) => ({ + message: diag.message, + severity: mapDiagnosticsServerityToFormSeverity(diag.severity), + })) + : [] + } + }); + elementDiagnosticsRef.current = initialDioagnostics; + } + let newValue = buildStringArray(props.value); + const initialValues = stringToRawArrayElements(newValue); + if (!Array.isArray(props.value)) { + initialValues.forEach((val: any, index: number) => { + const key = crypto.randomUUID(); + keyArray.push(key); + }) + } + if (keyArray.length !== initialValues.length) { + throw new Error("Key array length and initial values length do not match"); + } + const initialFields = initialValues.map((val, index) => { + const key = keyArray[index]; + return { + ...getArraySubFormFieldFromTypes(key, (props.field.types[0] as any).template.types as InputType[]), + value: val + } + }); + const applied = initialFields.map(applyDiagnosticsToField); + setRepeatableFields(applied); + // initialize prevDiagnosticsRef so subsequent diagnostic-only updates are detected correctly + prevDiagnosticsRef.current = applied.reduce((acc: Record, f) => { + acc[f.key] = makeDiagnosticsKey(f.diagnostics as any[]); + return acc; + }, {}); + + }, [props.value, props.field.types]); + + return ( + + +
+
+ + + {props.field.label} + + + + {props.field.documentation} + +
+ {modeSwitcherContext?.isModeSwitcherEnabled && ( + + { + handleModeSwitchValueChange(); + modeSwitcherContext.onModeChange(value); + }} + types={modeSwitcherContext.types} + /> + + )} +
+
+ + { + repeatableFields.map((formField) => ( + +
+ handleDeleteItem(formField.key)} + /> +
+
{ + handleFormOnChange(fieldKey, value, allValues, formField.key); + }} + expressionEditor={{ + ...expressionEditor, + onCompletionItemSelect: expressionEditor?.onCompletionItemSelect, + getHelperPane: expressionEditor?.getHelperPane, + types: expressionEditor?.types, + referenceTypes: expressionEditor?.referenceTypes, + retrieveVisibleTypes: expressionEditor?.retrieveVisibleTypes, + getTypeHelper: expressionEditor?.getTypeHelper, + helperPaneHeight: expressionEditor?.helperPaneHeight, + getExpressionFormDiagnostics: handleFormDiagnosticsChange, + }} + submitText={'Save'} + nestedForm={true} + preserveOrder={true} + /> + + + ))} + + + + {repeatableFields.length === 0 ? "Initialize Array" : "Add New Item"} + + + ) +}; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormArrayEditorWrapper.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormArrayEditorWrapper.tsx new file mode 100644 index 00000000000..b2f207d5137 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormArrayEditorWrapper.tsx @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useEffect } from "react"; +import { Controller } from "react-hook-form"; +import { useFormContext } from "../../context"; +import { FormArrayEditor } from "./FormArrayEditor"; +import { FormFieldEditorProps } from "./EditorFactory"; + +export const FormArrayEditorWrapper = (props: FormFieldEditorProps) => { + const { form } = useFormContext(); + const { control, setValue } = form; + + useEffect(() => { + if (Array.isArray(props.field.value)) { + setValue(props.field.key, props.field.value); + } + }, [props.field.value, props.field.key]); + + return ( + ( + + )} + /> + ); +} diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormMapEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormMapEditor.tsx index 14d2758b2f1..d05fbed8fcd 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormMapEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormMapEditor.tsx @@ -158,7 +158,7 @@ export function FormMapEditor(props: FormMapEditorProps) { label: "Expression", description: "Expression", }, - valueType: "EXPRESSION", + types: [{fieldType: "EXPRESSION", selected: false}], value: expressionValue || "", optional: false, editable: true, @@ -169,7 +169,7 @@ export function FormMapEditor(props: FormMapEditorProps) { label: "Variable Name", description: "Name of the variable", }, - valueType: "IDENTIFIER", + types: [{fieldType: "IDENTIFIER", selected: false}], value: variableValue || "", optional: true, editable: true, diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormMapEditorNew.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormMapEditorNew.tsx new file mode 100644 index 00000000000..00064c419db --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormMapEditorNew.tsx @@ -0,0 +1,215 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useEffect, useRef, useState } from "react"; +import { InputType } from "@wso2/ballerina-core"; +import { Form, FormValues, S, useFormContext, useModeSwitcherContext, FormField, FormFieldEditorProps } from "../.."; +import { Codicon } from "@wso2/ui-toolkit/lib/components/Codicon/Codicon"; +import { ScrollableList, ScrollableListRef } from "@wso2/ui-toolkit/lib/components/ScrollableList/ScrollableList"; +import ModeSwitcher from "../ModeSwitcher"; +import { getMapSubFormFieldFromTypes, buildStringMap, stringToRawObjectEntries, getRecordTypeFields } from "./utils"; + +export const FormMapEditorNew = (props: FormFieldEditorProps & { + onChange: (value: any) => void; + value: any; +}) => { + const [repeatableFields, setRepeatableFields] = useState([]); + const scrollableListRef = useRef(null); + const isInternalUpdate = useRef(false); + const { expressionEditor } = useFormContext(); + + const modeSwitcherContext = useModeSwitcherContext(); + + const processToOutputFormat = (fields: FormField[][]): Record => { + const output: Record = {}; + fields.forEach((field) => { + const keyField = field[0]; + const valueField = field[1]; + if (keyField.value) { + output[keyField.value as string] = valueField; + } + }); + return output; + } + + const processToInputFormat = (input: Record): FormField[][] => { + const fields: FormField[][] = []; + Object.entries(input).forEach(([key, value]) => { + const keyId = (value as FormField)?.key?.replace("mp-val-", "mp-key-") || crypto.randomUUID(); + const keyField: FormField = { + key: keyId, + label: "Key", + type: "IDENTIFIER", + optional: false, + editable: true, + documentation: "", + value: key, + types: [{ fieldType: "IDENTIFIER", selected: true }], + enabled: true + }; + const valueField: FormField = value as FormField; + fields.push([keyField, valueField]); + }); + return fields; + } + + const handleAddNewItem = () => { + const key = crypto.randomUUID(); + if (!(props.field.types[0] as any).template) return; + const newField = getMapSubFormFieldFromTypes(key, (props.field.types[0] as any).template.types as InputType[]) + setRepeatableFields(prev => [...prev, newField]); + isInternalUpdate.current = true; + // Wait for the dom update + setTimeout(() => { + scrollableListRef.current?.scrollToBottom(); + }, 100); + } + + const handleFormOnChange = (fieldKey: string, value: any, _allValues: FormValues, _parentKey: string) => { + const newRepeatableFields = repeatableFields.map((formFields) => { + // Check if any field in this array matches the fieldKey + const fieldIndex = formFields.findIndex(field => field.key === fieldKey); + if (fieldIndex !== -1) { + const newFields = [...formFields]; + newFields[fieldIndex] = { ...newFields[fieldIndex], value }; + return newFields; + } + return formFields; + }); + setRepeatableFields(newRepeatableFields); + isInternalUpdate.current = true; + props.onChange(processToOutputFormat(newRepeatableFields)); + } + + const handleModeSwitchValueChange = () => { + const stringValue = buildStringMap(repeatableFields); + props.onChange(stringValue); + } + + const handleDeleteItem = (keyToDelete: string) => { + const newRepeatableFields = repeatableFields.filter((formField) => formField[0].key !== keyToDelete); + setRepeatableFields(newRepeatableFields); + isInternalUpdate.current = true; + props.onChange(processToOutputFormat(newRepeatableFields)); + }; + + useEffect(() => { + if (!props.value) return; + if (isInternalUpdate.current) { + isInternalUpdate.current = false; + return; + } + let processedInputValue: string | FormField[][] = ""; + if (typeof props.value === 'string') { + processedInputValue = props.value; + } else { + processedInputValue = processToInputFormat(props.value); + } + let newValue = buildStringMap(processedInputValue); + const initialValues = stringToRawObjectEntries(newValue); + const initialFields = initialValues.map((val) => { + const key = crypto.randomUUID(); + const fields = getMapSubFormFieldFromTypes(key, (props.field.types[0] as any).template.types as InputType[]); + fields[0].value = val.key; + fields[1].value = val.value; + return fields; + }); + setRepeatableFields(initialFields); + }, [props.value, props.field.types]); + + return ( + + +
+
+ + + {props.field.label} + + + + {props.field.documentation} + +
+ {modeSwitcherContext?.isModeSwitcherEnabled && ( + + { + handleModeSwitchValueChange(); + modeSwitcherContext.onModeChange(value); + }} + types={modeSwitcherContext.types} + /> + + )} +
+
+ + { + repeatableFields.map((formField) => ( + +
+ handleDeleteItem(formField[0].key)} + /> +
+ { + handleFormOnChange(fieldKey, value, allValues, formField[0].key); + }} + expressionEditor={{ + ...expressionEditor, + onCompletionItemSelect: expressionEditor?.onCompletionItemSelect, + getHelperPane: expressionEditor?.getHelperPane, + types: expressionEditor?.types, + referenceTypes: expressionEditor?.referenceTypes, + retrieveVisibleTypes: expressionEditor?.retrieveVisibleTypes, + getTypeHelper: expressionEditor?.getTypeHelper, + helperPaneHeight: expressionEditor?.helperPaneHeight + }} + submitText={'Save'} + nestedForm={true} + preserveOrder={true} + /> +
+ + ))} +
+ + + {repeatableFields.length === 0 ? "Initialize Map" : "Add New Item"} + +
+ ) +}; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormMapEditorNewWrapper.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormMapEditorNewWrapper.tsx new file mode 100644 index 00000000000..208fa9eb4ad --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/FormMapEditorNewWrapper.tsx @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from "react"; +import { Controller } from "react-hook-form"; +import { useFormContext } from "../../context"; +import { FormMapEditorNew } from "./FormMapEditorNew"; +import { FormFieldEditorProps } from "./EditorFactory"; + +export const FormMapEditorWrapper = (props: FormFieldEditorProps) => { + const { form } = useFormContext(); + const { control } = form; + + return ( + ( + + )} + /> + ); +} diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/HeaderSetEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/HeaderSetEditor.tsx index 510021adb02..d34f7617dc0 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/HeaderSetEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/HeaderSetEditor.tsx @@ -231,7 +231,7 @@ export function HeaderSetEditor(props: HeaderSetEditorProps) { optional: false, editable: true, documentation: "Type of the header", - value: headerSetToEdit?.type || "", + value: headerSetToEdit?.type || field.items?.[0] || "", types: [{ fieldType: "SINGLE_SELECT", ballerinaType: "string", selected: false }], label: "Type", type: "SINGLE_SELECT", @@ -240,11 +240,11 @@ export function HeaderSetEditor(props: HeaderSetEditorProps) { { key: "optional", enabled: true, - optional: false, + optional: true, editable: true, documentation: "Required or Optional", value: headerSetToEdit?.optional ?? false as any, - types: [{ fieldType: "BOOLEAN", ballerinaType: "boolean", selected: false }], + types: [{ fieldType: "FLAG", selected: true }], label: "Optional", type: "FLAG", } diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/IdentifierField.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/IdentifierField.tsx index e5f0a68aa24..411e32e1378 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/IdentifierField.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/IdentifierField.tsx @@ -36,13 +36,18 @@ export function IdentifierField(props: IdentifierFieldProps) { const { expressionEditor, form } = useFormContext(); const { getExpressionEditorDiagnostics } = expressionEditor; const [formDiagnostics, setFormDiagnostics] = useState(field.diagnostics); - const { watch, formState, register } = form; + const { watch, formState, register, setValue } = form; const { errors } = formState; useEffect(() => { setFormDiagnostics(field.diagnostics); }, [field.diagnostics]); + // Sync external field value changes to the form (e.g., when a sibling field's onValueChange updates the value) + useEffect(() => { + setValue(field.key, field.value ?? ''); + }, [field.key, field.value, setValue]); + const validateIdentifierName = useCallback(debounce(async (value: string) => { const fieldValue = watch(field.key); @@ -94,7 +99,7 @@ export function IdentifierField(props: IdentifierFieldProps) { sx={{ width: "100%" }} /> {(!errors[field.key]?.message) && formDiagnostics && formDiagnostics.length > 0 && ( - d.message).join(', ')} /> + d.message).join('\n')} /> )} ); diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ModeSwitcherContext.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ModeSwitcherContext.tsx new file mode 100644 index 00000000000..9b807899124 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ModeSwitcherContext.tsx @@ -0,0 +1,68 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { createContext, useContext, ReactNode } from "react"; +import { InputType } from "@wso2/ballerina-core"; +import { InputMode } from "./MultiModeExpressionEditor/ChipExpressionEditor/types"; + +export type ModeSwitcherContextType = { + inputMode: InputMode; + onModeChange: (mode: InputMode) => void; + types: InputType[]; + isRecordTypeField: boolean; + isModeSwitcherEnabled: boolean; +}; + +const ModeSwitcherContext = createContext(undefined); + +export const useModeSwitcherContext = () => { + const context = useContext(ModeSwitcherContext); + return context; +}; + +type ModeSwitcherProviderProps = { + children: ReactNode; + inputMode: InputMode; + onModeChange: (mode: InputMode) => void; + types: InputType[]; + isRecordTypeField: boolean; + isModeSwitcherEnabled: boolean; +}; + +export const ModeSwitcherProvider = ({ + children, + inputMode, + onModeChange, + types, + isRecordTypeField, + isModeSwitcherEnabled +}: ModeSwitcherProviderProps) => { + return ( + + {children} + + ); +}; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/CodeUtils.ts b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/CodeUtils.ts index f045e20706f..2f6ed56e8bb 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/CodeUtils.ts +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/CodeUtils.ts @@ -881,7 +881,7 @@ export const createTooltipPositioningHandlers = (view: EditorView) => { return { mount, destroy }; }; -export const isSelectionOnToken = (from: number, to: number, view: EditorView): ParsedToken => { +export const isSelectionOnToken = (from: number, to: number, view: EditorView): ParsedToken | undefined => { if (!view) return undefined; const { tokens, compounds } = view.state.field(tokenField); diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/components/ChipExpressionEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/components/ChipExpressionEditor.tsx index 539412af475..eadd805b29f 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/components/ChipExpressionEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/components/ChipExpressionEditor.tsx @@ -64,6 +64,7 @@ import { InputMode } from "../types"; export type ChipExpressionEditorComponentProps = { onTokenRemove?: (token: string) => void; onTokenClick?: (token: string) => void; + onBlur?: () => void; isExpandedVersion: boolean; getHelperPane?: ( value: string, @@ -207,6 +208,7 @@ export const ChipExpressionEditorComponent = (props: ChipExpressionEditorCompone const handleFocusOutListner = buildOnFocusOutListner(() => { setIsTokenUpdateScheduled(true); + props.onBlur?.(); }); const waitForStateChange = (): Promise => { @@ -434,9 +436,6 @@ export const ChipExpressionEditorComponent = (props: ChipExpressionEditorCompone updateEditorState(); }, [props.value, props.fileName, props.targetLineRange?.startLine, isTokenUpdateScheduled]); - - // this keeps completions ref updated - // just don't touch this. useEffect(() => { completionsRef.current = props.completions; completionsFetchScheduledRef.current = false; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/types.ts b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/types.ts index 2340c4f9934..d82bd2c6518 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/types.ts +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/types.ts @@ -29,7 +29,6 @@ export enum InputMode { TEXT_ARRAY = "Text Array", PROMPT = "Prompt", MAP = "Map", - MAP_EXP = "Mapping", SIMPLE_TEXT = "Info" }; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/utils.ts b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/utils.ts index 4a611e9e9ce..5aa5447c11b 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/utils.ts +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/utils.ts @@ -41,7 +41,7 @@ const getTokenTypeFromIndex = (index: number): TokenType => { return TOKEN_TYPE_INDEX_MAP[index] || TokenType.VARIABLE; }; -export const getInputModeFromTypes = (inputType: InputType): InputMode => { +export const getInputModeFromTypes = (inputType: InputType): InputMode | undefined => { if (!inputType) return; if (inputType.fieldType === "SQL_QUERY") { @@ -54,6 +54,9 @@ export const getInputModeFromTypes = (inputType: InputType): InputMode => { if (inputType.fieldType === "EXPRESSION") { return InputMode.EXP; } + if (inputType.fieldType === "NUMBER") { + return InputMode.NUMBER; + } if (inputType.fieldType === "SINGLE_SELECT") { return InputMode.SELECT; } @@ -63,18 +66,24 @@ export const getInputModeFromTypes = (inputType: InputType): InputMode => { if (inputType.fieldType === "TEXT_SET") { return InputMode.TEXT_ARRAY; } - if (inputType.fieldType === "MAPPING_EXPRESSION_SET") { - return InputMode.MAP; - } - if (inputType.fieldType === "MAPPING_EXPRESSION") { - return InputMode.MAP_EXP; - } if (inputType.fieldType === "PROMPT") { return InputMode.PROMPT; } if (inputType.fieldType === "FLAG") { return InputMode.BOOLEAN; } + if (inputType.fieldType === "RECORD_MAP_EXPRESSION") { + return InputMode.RECORD; + } + if (inputType.fieldType === "REPEATABLE_MAP") { + return InputMode.MAP; + } + if (inputType.fieldType === "REPEATABLE_LIST") { + return InputMode.ARRAY; + } + if (inputType.fieldType === "ACTION_EXPRESSION") { + return InputMode.SELECT; + } //default behaviour return getInputModeFromBallerinaType(inputType.ballerinaType); diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/Configurations.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/Configurations.tsx index a80b291bfce..e17be13dbc7 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/Configurations.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/Configurations.tsx @@ -97,6 +97,7 @@ export class StringTemplateEditorConfig extends ChipExpressionEditorDefaultConfi } getIsValueCompatible(expValue: string) { + if (!expValue) return true; const suffix = this.getSerializationSuffix(); const prefix = this.getSerializationPrefix(); return (expValue.trim().startsWith(prefix) && expValue.trim().endsWith(suffix)) @@ -217,12 +218,13 @@ export class NumberExpressionEditorConfig extends ChipExpressionEditorDefaultCon } getIsValueCompatible(value: string): boolean { + if (!value) return true; return this.DECIMAL_INPUT_REGEX.test(value); } } export class RecordConfigExpressionEditorConfig extends ChipExpressionEditorDefaultConfiguration { - getIsToggleHelperAvailable(): boolean { + getIsToggleHelperAvailable(): boolean { return false; - } + } } diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ConnectionSelectEditor/ConnectionSelectEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ConnectionSelectEditor/ConnectionSelectEditor.tsx new file mode 100644 index 00000000000..19b26a91d2a --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ConnectionSelectEditor/ConnectionSelectEditor.tsx @@ -0,0 +1,79 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useEffect, useState } from "react"; +import { useRpcContext } from "@wso2/ballerina-rpc-client"; +import { FormField } from "../../../Form/types"; +import { ConnectionIconSelect, ConnectionSelectItem } from "../../ConnectionIconSelect"; +import { useFormContext } from "../../../../context"; +import { LinkButton } from "@wso2/ui-toolkit/lib/components/LinkButton/LinkButton"; + +interface ConnectionSelectEditorProps { + value: string; + field: FormField; + onChange: (value: string, cursorPosition: number) => void; +} + +const actionButtonStyles = { + padding: "4px 6px", + margin: 0, + marginTop: "6px", + fontSize: "13px", +}; + +export const ConnectionSelectEditor: React.FC = ({ value, field, onChange }) => { + const { rpcClient } = useRpcContext(); + const { targetLineRange, fileName } = useFormContext(); + + const searchNodesKind = field.codedata?.searchNodesKind; + const initialItems: ConnectionSelectItem[] = field.codedata?.initialItems ?? []; + const [selectItems, setSelectItems] = useState(initialItems); + + useEffect(() => { + if (!searchNodesKind) return; + rpcClient.getBIDiagramRpcClient().searchNodes({ + filePath: fileName, + position: targetLineRange.startLine, + queryMap: { kind: searchNodesKind } + }).then((response) => { + const nodes = response?.output ?? []; + const items: ConnectionSelectItem[] = nodes + .filter(node => node.properties?.variable?.value) + .map(node => ({ + id: String(node.properties.variable.value), + label: node.properties.variable.value as string, + value: String(node.properties.variable.value), + codedata: node.codedata, + })); + setSelectItems(items); + }); + }, [searchNodesKind, fileName]); + + return ( + <> + onChange(val, val?.length)} + /> + + ); +}; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/DynamicArrayBuilder/DynamicArrayBuilder.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/DynamicArrayBuilder/DynamicArrayBuilder.tsx index fdace4b7c51..40191ed0c57 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/DynamicArrayBuilder/DynamicArrayBuilder.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/DynamicArrayBuilder/DynamicArrayBuilder.tsx @@ -1,5 +1,5 @@ /** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. * * WSO2 LLC. licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file except @@ -17,8 +17,9 @@ */ import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"; -import { ExpressionFieldProps } from "../../ExpressionField"; -import { Codicon } from '@wso2/ui-toolkit'; +import { Codicon } from "@wso2/ui-toolkit"; + +import type { ExpressionFieldProps } from "../../ExpressionField"; import { ChipExpressionEditorComponent } from "../ChipExpressionEditor/components/ChipExpressionEditor"; import { useFormContext } from "../../../../context"; import { S } from "../styles"; @@ -45,7 +46,7 @@ export const DynamicArrayBuilder = (props: DynamicArrayBuilderProps) => { const expressionSetType = expressionFieldProps.field.types.find(t => t.fieldType === "EXPRESSION_SET" || t.fieldType === "TEXT_SET"); const minItems = expressionSetType?.minItems ?? 1; const defaultItems = expressionSetType?.defaultItems ?? 1; - + const [isInitialized, setIsInitialized] = useState(false); const currentValuesRef = useRef([]); const paddedRef = useRef(false); diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/MappingConstructor/MappingConstructor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/MappingConstructor/MappingConstructor.tsx deleted file mode 100644 index c3541e1511c..00000000000 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/MappingConstructor/MappingConstructor.tsx +++ /dev/null @@ -1,160 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import React, { useState, useEffect, useRef } from "react"; -import { S } from '../styles'; -import { Codicon, ThemeColors } from "@wso2/ui-toolkit"; -import { ChipExpressionEditorComponent } from "../ChipExpressionEditor/components/ChipExpressionEditor"; -import { ExpressionFieldProps } from "../../ExpressionField"; -import { ChipExpressionEditorDefaultConfiguration } from "../ChipExpressionEditor/ChipExpressionDefaultConfig"; - -interface MappingConstructorProps { - label: string; - value: any[]; - onChange: (updated: any[]) => void; - expressionFieldProps: ExpressionFieldProps; -} - -const transformExternalValueToInternal = (externalValue: any[]): any[] => { - if (!externalValue) return []; - return externalValue - .filter((item) => item != null) - .map((item, index) => { - // Each item is like {someKey: "someValue"}, extract key and value - const entries = Object.entries(item); - const [key, value] = entries.length > 0 ? entries[0] : ["", ""]; - return { id: index, key: key || "", value: value || "" }; - }); -} - -const toOutputFormat = (pairs: any[]): any[] => { - return pairs.map(pair => { - if (pair.key) { - return { [pair.key]: pair.value }; - } - return {}; - }); -} - -const getNextId = (items: any[]): number => { - if (items.length === 0) { - return 0; - } - return Math.max(...items.map(item => item.id)) + 1; -} - - -export const MappingConstructor: React.FC = ({ label, value, onChange, expressionFieldProps }) => { - //used this to manually trigger rerenders when value prop changes - const [_, setManualRerenderTrigger] = useState(true); - const [hasUntouchedPairs, setHasUntouchedPairs] = useState(false); - const internalValueRef = useRef([]); - - useEffect(() => { - if (JSON.stringify(toOutputFormat(internalValueRef.current)) === JSON.stringify(value)) return; - internalValueRef.current = transformExternalValueToInternal(value); - setManualRerenderTrigger(prev => !prev); - }, [value]); - - const handleAddPair = () => { - const newPair = { id: getNextId(internalValueRef.current), key: "", value: "" }; - const updatedValue = [...internalValueRef.current, newPair]; - setHasUntouchedPairs(true); - internalValueRef.current = updatedValue; - onChange(toOutputFormat(updatedValue)); - } - - const handleDeletePair = (id: number) => { - const updatedValue = internalValueRef.current.filter(pair => pair.id !== id); - internalValueRef.current = updatedValue; - onChange(toOutputFormat(updatedValue)); - } - - const handleKeyChange = (id: number, newKey: string) => { - const updatedValue = internalValueRef.current.map(pair => - pair.id === id ? { ...pair, key: newKey } : pair - ); - setHasUntouchedPairs(newKey === ""); - internalValueRef.current = updatedValue; - onChange(toOutputFormat(updatedValue)); - } - - const handleValueChange = (id: number, newValue: string) => { - const updatedValue = internalValueRef.current.map(pair => - pair.id === id ? { ...pair, value: newValue } : pair - ); - internalValueRef.current = updatedValue; - onChange(toOutputFormat(updatedValue)); - } - - return ( - - {internalValueRef.current.map((pair) => ( - - - handleKeyChange(pair.id, e.target.value)} - placeholder="Key" - /> - - handleValueChange(pair.id, value)} - value={pair.value} - sanitizedExpression={expressionFieldProps.sanitizedExpression} - rawExpression={expressionFieldProps.rawExpression} - fileName={expressionFieldProps.fileName} - targetLineRange={expressionFieldProps.targetLineRange} - extractArgsFromFunction={expressionFieldProps.extractArgsFromFunction} - onOpenExpandedMode={expressionFieldProps.onOpenExpandedMode} - onRemove={expressionFieldProps.onRemove} - isInExpandedMode={expressionFieldProps.isInExpandedMode} - configuration={new ChipExpressionEditorDefaultConfiguration()} - placeholder={expressionFieldProps.field.placeholder} - /> - - handleDeletePair(pair.id)} - > - - - - ))} - - - Add Item - - - ); -}; - -export default MappingConstructor; \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/MappingObjectConstructor/MappingObjectConstructor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/MappingObjectConstructor/MappingObjectConstructor.tsx deleted file mode 100644 index d2e387b1040..00000000000 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/MappingObjectConstructor/MappingObjectConstructor.tsx +++ /dev/null @@ -1,175 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import React, { useState, useEffect, useRef, useMemo } from "react"; -import { S } from '../styles'; -import { Codicon, ThemeColors } from "@wso2/ui-toolkit"; -import { ChipExpressionEditorComponent } from "../ChipExpressionEditor/components/ChipExpressionEditor"; -import { ExpressionFieldProps } from "../../ExpressionField"; -import { ChipExpressionEditorDefaultConfiguration } from "../ChipExpressionEditor/ChipExpressionDefaultConfig"; -import { isRecord } from "../../utils"; - -interface MappingObjectConstructorProps { - label: string; - value: Record; - onChange: (updated: any) => void; - expressionFieldProps: ExpressionFieldProps; -} - - -const transformExternalValueToInternal = (externalValue: any): any[] => { - if (!externalValue || !isRecord(externalValue)) return []; - return Object.entries(externalValue).map(([key, value], index) => ({ - id: index, - key: key || "", - value: value || "" - })); -} - -const toOutputFormat = (pairs: any[]): any => { - const result: any = {}; - const keyCount: Record = {}; - - pairs.forEach(pair => { - if (!pair.key) return; - - const baseKey = pair.key; - - if (keyCount[baseKey] === undefined) { - keyCount[baseKey] = 0; - result[baseKey] = pair.value; - } else { - keyCount[baseKey] += 1; - const newKey = `${baseKey}_${keyCount[baseKey]}`; - result[newKey] = pair.value; - } - }); - - return result; -}; - - -const getNextId = (items: any[]): number => { - if (items.length === 0) { - return 0; - } - return Math.max(...items.map(item => item.id)) + 1; -} - - -export const MappingObjectConstructor: React.FC = ({ label, value, onChange, expressionFieldProps }) => { - //used this to manually trigger rerenders when value prop changes - const [_, setManualRerenderTrigger] = useState(true); - const internalValueRef = useRef([]); - - useEffect(() => { - if (JSON.stringify(toOutputFormat(internalValueRef.current)) === JSON.stringify(value)) return; - internalValueRef.current = transformExternalValueToInternal(value); - setManualRerenderTrigger(prev => !prev); - }, [value]); - - const hasUntouchedPairs = useMemo(() => { - return internalValueRef.current.some(pair => pair.key === ""); - }, [internalValueRef.current]); - - - const handleAddPair = () => { - const newPair = { id: getNextId(internalValueRef.current), key: "", value: "" }; - const updatedValue = [...internalValueRef.current, newPair]; - internalValueRef.current = updatedValue; - onChange(toOutputFormat(updatedValue)); - } - - const handleDeletePair = (id: number) => { - const updatedValue = internalValueRef.current.filter(pair => pair.id !== id); - internalValueRef.current = updatedValue; - onChange(toOutputFormat(updatedValue)); - } - - const handleKeyChange = (id: number, newKey: string) => { - const updatedValue = internalValueRef.current.map(pair => - pair.id === id ? { ...pair, key: newKey } : pair - ); - internalValueRef.current = updatedValue; - onChange(toOutputFormat(updatedValue)); - } - - const handleValueChange = (id: number, newValue: string) => { - const updatedValue = internalValueRef.current.map(pair => - pair.id === id ? { ...pair, value: newValue } : pair - ); - internalValueRef.current = updatedValue; - onChange(toOutputFormat(updatedValue)); - } - - return ( - - {internalValueRef.current.map((pair) => ( - - - handleKeyChange(pair.id, e.target.value)} - placeholder="Key" - /> - - handleValueChange(pair.id, value)} - value={pair.value} - sanitizedExpression={expressionFieldProps.sanitizedExpression} - rawExpression={expressionFieldProps.rawExpression} - fileName={expressionFieldProps.fileName} - targetLineRange={expressionFieldProps.targetLineRange} - extractArgsFromFunction={expressionFieldProps.extractArgsFromFunction} - onOpenExpandedMode={expressionFieldProps.onOpenExpandedMode} - onRemove={expressionFieldProps.onRemove} - isInExpandedMode={expressionFieldProps.isInExpandedMode} - configuration={new ChipExpressionEditorDefaultConfiguration()} - placeholder={expressionFieldProps.field.placeholder} - /> - - handleDeletePair(pair.id)} - > - - - - ))} - - - Add Item - - - ); -}; - -export default MappingObjectConstructor; \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/PathEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/PathEditor.tsx index 44862c43a32..0e05c696df9 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/PathEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/PathEditor.tsx @@ -16,7 +16,7 @@ * under the License. */ -import React, { useCallback, useState } from "react"; +import React, { useCallback, useEffect, useState } from "react"; import { FormField } from "../Form/types"; import { TextField } from "@wso2/ui-toolkit"; import { useFormContext } from "../../context"; @@ -33,11 +33,11 @@ interface PathEditorProps { export function PathEditor(props: PathEditorProps) { const { field, handleOnFieldFocus, autoFocus } = props; const { form } = useFormContext(); - const { register, setError, clearErrors } = form; + const { register, setError, clearErrors, watch } = form; const [pathErrorMsg, setPathErrorMsg] = useState(field.diagnostics?.map((diagnostic) => diagnostic.message).join("\n")); - const validatePath = useCallback(debounce(async (value: string) => { + const validatePath = useCallback(debounce((value: string) => { const response = field.type === "SERVICE_PATH" ? parseBasePath(value) : parseResourceActionPath(value); if (response.errors.length > 0) { setPathErrorMsg(response.errors[0].message); @@ -49,7 +49,16 @@ export function PathEditor(props: PathEditorProps) { setPathErrorMsg(""); clearErrors(field.key); } - }, 250), [field]); + }, 250), [field.key, field.type, setError, clearErrors]); + + // Validate on mount and when value changes (covers initial load, paste, programmatic updates) + const fieldValue = watch(field.key); + useEffect(() => { + if (fieldValue !== undefined && fieldValue !== null) { + validatePath(String(fieldValue)); + } + return () => validatePath.cancel(); + }, [fieldValue, field.key, validatePath]); return ( { + const formValues = getValues(); + const currentFormValue = formValues[field.key]; + if (currentFormValue === undefined || currentFormValue === null || currentFormValue === "") { + setValue(field.key, field.value || field.sliderProps?.min || 0); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); // Empty dependency array - only run on mount + + const handleChange = (e: any) => { + const value = e.target.value; + setValue(field.key, value); + field.onValueChange?.(value); + }; + + // Extract slider configuration from field + const min = field.sliderProps?.min ?? 0; + const max = field.sliderProps?.max ?? 100; + const step = field.sliderProps?.step ?? 1; + const showValue = field.sliderProps?.showValue ?? true; + const showMarkers = field.sliderProps?.showMarkers ?? true; + const valueFormatter = field.sliderProps?.valueFormatter; + + return ( + + ); +} diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/index.ts b/workspaces/ballerina/ballerina-side-panel/src/components/editors/index.ts index c378bece5d4..27aa30c3e6e 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/index.ts +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/index.ts @@ -17,6 +17,7 @@ */ export * from "./EditorFactory"; +export * from "./FieldFactory"; export * from "./TypeEditor"; export * from "./TextEditor"; export * from "./MultiSelectEditor"; @@ -25,6 +26,8 @@ export * from "./ArrayEditor"; export * from "./FileSelect"; export * from "./FormMapEditor"; export * from "./FieldContext"; +export * from "./ModeSwitcherContext"; +export * from "./SliderEditor"; export * from "./MultiModeExpressionEditor/ChipExpressionEditor/components/ChipExpressionEditor"; export * from "./MultiModeExpressionEditor/Configurations"; export { getPropertyFromFormField } from "./utils"; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/utils.ts b/workspaces/ballerina/ballerina-side-panel/src/components/editors/utils.ts index 49d87f4aee1..849b8b3035b 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/utils.ts +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/utils.ts @@ -18,7 +18,7 @@ import { startCase } from "lodash"; import { FormField } from "../Form/types"; -import { ExpressionProperty } from "@wso2/ballerina-core"; +import { ExpressionProperty, getPrimaryInputType, InputType, RecordTypeField } from "@wso2/ballerina-core"; import { InputMode } from "../.."; import { EditorMode } from "./ExpandedEditor"; import { EXPANDABLE_MODES } from "./ExpandedEditor/modes/types"; @@ -106,7 +106,7 @@ export const getFieldKeyForAdvanceProp = (fieldKey: string, advancePropKey: stri if (splitedAdvanceProp.length > 1) { parentKeyForAdvanceProp = splitedAdvanceProp.slice(0, -1).join('.advanceProperties.'); } - + if (parentKeyForAdvanceProp === fieldKey) { return advancePropKey; } @@ -116,11 +116,11 @@ export const getFieldKeyForAdvanceProp = (fieldKey: string, advancePropKey: stri export const isRecord = (value: unknown): value is Record => { - return ( - typeof value === "object" && - value !== null && - !Array.isArray(value) - ); + return ( + typeof value === "object" && + value !== null && + !Array.isArray(value) + ); }; export const getValueForTextModeEditor = (value: string | any[] | Record) => { @@ -143,3 +143,226 @@ export function isExpandableMode(mode: InputMode): mode is EditorMode { export function toEditorMode(mode: InputMode): EditorMode | undefined { return isExpandableMode(mode) ? mode : undefined; } + +export const getArraySubFormFieldFromTypes = (formId: string, types: InputType[]): FormField => { + return { + key: `ar-elm-${formId}`, + label: "", + type: getPrimaryInputType(types)?.fieldType || "", + optional: false, + editable: true, + documentation: "", + value: "", + types: types.map(type => ({ ...type })), + enabled: true + } +} + +export const getMapSubFormFieldFromTypes = (formId: string, types: InputType[]): FormField[] => { + return [ + { + key: `mp-key-${formId}`, + label: "Key", + type: "IDENTIFIER", + optional: false, + editable: true, + documentation: "", + value: "", + types: [{ fieldType: "IDENTIFIER", selected: true }], + enabled: true + }, + { + key: `mp-val-${formId}`, + label: "Value", + type: getPrimaryInputType(types)?.fieldType || "", + optional: false, + editable: true, + documentation: "", + value: "", + types: types, + enabled: true + } + ] +} + +export function stringToRawArrayElements(input: string): string[] { + // remove outer [ ] + const s = input.trim().slice(1, -1); + + if (s === "") { + return []; + } + + const result: string[] = []; + let current = ""; + let depth = 0; + let inString = false; + + for (let i = 0; i < s.length; i++) { + const char = s[i]; + const prev = s[i - 1]; + + // handle string boundaries + if (char === '"' && prev !== "\\") { + inString = !inString; + current += char; + continue; + } + + if (!inString) { + if (char === "[" || char === "{") depth++; + if (char === "]" || char === "}") depth--; + + if (char === "," && depth === 0) { + result.push(current); + current = ""; + continue; + } + } + + current += char; + } + + // Always push the final element (even if empty) to preserve trailing empty values + result.push(current); + + return result; +} + +export function stringToRawObjectEntries( + input: string +): { key: string; value: string }[] { + + // remove outer { } + const s = input.trim().slice(1, -1); + + const result: { key: string; value: string }[] = []; + + let current = ""; + let depth = 0; + let inString = false; + + for (let i = 0; i < s.length; i++) { + const char = s[i]; + const prev = s[i - 1]; + + // toggle string state + if (char === '"' && prev !== "\\") { + inString = !inString; + current += char; + continue; + } + + if (!inString) { + if (char === "{" || char === "[") depth++; + if (char === "}" || char === "]") depth--; + + // top-level comma → end of one pair + if (char === "," && depth === 0) { + pushPair(current, result); + current = ""; + continue; + } + } + + current += char; + } + + if (current.trim()) { + pushPair(current, result); + } + + return result; +} + +function pushPair( + text: string, + result: { key: string; value: string }[] +) { + let depth = 0; + let inString = false; + + for (let i = 0; i < text.length; i++) { + const char = text[i]; + const prev = text[i - 1]; + + if (char === '"' && prev !== "\\") { + inString = !inString; + } + + if (!inString) { + if (char === "{" || char === "[") depth++; + if (char === "}" || char === "]") depth--; + + // first top-level colon + if (char === ":" && depth === 0) { + const key = text.slice(0, i).trim(); + const value = text.slice(i + 1).trim(); + + result.push({ + key: key, + value: value + }); + return; + } + } + } +} + +export function buildStringArray(elements: FormField[]): string { + if (typeof elements === "string") return elements; + const parts = elements.map(el => { + return (el.value as string).trim(); + }); + return `[${parts.join(", ")}]`; +} + +export function buildStringMap(elements: FormField[][] | string): string { + if (typeof elements === "string") return elements; + let finalString = "{"; + elements.forEach((el, index) => { + let processedValue = (el[1].value as string).trim(); + const keyValue = (el[0].value as string).trim(); + + if (index !== 0) { + finalString += `, ${keyValue}: ${processedValue}`; + } + else { + finalString += ` ${keyValue}: ${processedValue}`; + } + }); + + return finalString + "}"; +} + +export function getRecordTypeFields(fields: FormField[]): RecordTypeField[] { + return fields.filter(field => { + const types = field.types; + if (!types) return false; + return types.some( + type => + ( + type.typeMembers && + type.typeMembers.some(member => member.kind === "RECORD_TYPE") + ) + ); + }) + .map((field) => ({ + key: field.key, + property: getPropertyFromFormField(field), + recordTypeMembers: field.types + .flatMap(type => type.typeMembers || []) + .filter(member => member.kind === "RECORD_TYPE") + })); +} + +export const mapDiagnosticsServerityToFormSeverity = (severity: 1 | 2 | 3 | 4) => { + switch (severity) { + case 1: + return "ERROR"; + case 2: + return "WARNING"; + default: + return "INFO"; + } +} diff --git a/workspaces/ballerina/ballerina-side-panel/src/resources/icons/nodes/DownloadIcon.tsx b/workspaces/ballerina/ballerina-side-panel/src/resources/icons/nodes/DownloadIcon.tsx new file mode 100644 index 00000000000..80848432191 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/resources/icons/nodes/DownloadIcon.tsx @@ -0,0 +1,24 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import React from "react"; + +export const DownloadIcon = () => { + return ( + + ); +}; diff --git a/workspaces/ballerina/ballerina-visualizer/package.json b/workspaces/ballerina/ballerina-visualizer/package.json index 598c99ddb08..29aade685be 100644 --- a/workspaces/ballerina/ballerina-visualizer/package.json +++ b/workspaces/ballerina/ballerina-visualizer/package.json @@ -16,13 +16,18 @@ }, "keywords": [], "dependencies": { - "@emotion/css": "^11.13.5", - "@emotion/react": "^11.14.0", - "@emotion/styled": "^11.14.0", - "@headlessui/react": "~2.2.4", - "@tanstack/query-core": "^5.77.1", + "@dnd-kit/core": "6.1.0", + "@dnd-kit/sortable": "8.0.0", + "@dnd-kit/utilities": "3.2.2", + "@emotion/css": "11.13.5", + "@emotion/react": "11.14.0", + "@emotion/styled": "11.14.0", + "@headlessui/react": "2.2.4", + "@tanstack/query-core": "5.77.1", "@tanstack/react-query": "5.77.1", - "@vscode/webview-ui-toolkit": "^1.4.0", + "@tanstack/react-query-persist-client": "5.77.1", + "@vscode/webview-ui-toolkit": "1.4.0", + "framer-motion": "^11.0.0", "@wso2/ballerina-core": "workspace:*", "@wso2/ballerina-graphql-design-diagram": "workspace:*", "@wso2/type-diagram": "workspace:*", @@ -42,47 +47,55 @@ "@wso2/type-editor": "workspace:*", "@wso2/wso2-platform-core": "workspace:*", "react": "18.2.0", - "react-collapse": "~5.1.1", + "react-collapse": "5.1.1", "react-dom": "18.2.0", - "react-markdown": "~10.1.0", - "react-syntax-highlighter": "~15.6.1", - "vscode-uri": "^3.1.0", + "react-markdown": "10.1.0", + "react-syntax-highlighter": "15.6.1", + "vscode-uri": "3.1.0", "lodash": "4.17.23", - "react-lottie": "^1.2.10", - "lodash.debounce": "^4.0.8", - "@types/lodash": "~4.17.16", + "react-lottie": "1.2.10", + "lodash.debounce": "4.0.8", + "@types/lodash": "4.17.16", "react-hook-form": "7.56.4", - "yup": "~1.6.1", - "@hookform/resolvers": "~5.0.1", - "highlight.js": "^11.11.1", + "yup": "1.6.1", + "@hookform/resolvers": "5.0.1", + "highlight.js": "11.11.1", "rehype-raw": "^7.0.0", - "remark-breaks": "~4.0.0" + "remark-breaks": "~4.0.0", + "js-yaml": "4.1.0", + "swagger-ui-react": "5.22.0", + "rehype-katex": "^7.0.1", + "remark-gfm": "^4.0.1", + "remark-math": "^6.0.0", + "katex": "^0.16.27" }, "devDependencies": { "@types/react": "18.2.0", - "@types/react-collapse": "~5.0.4", + "@types/react-collapse": "5.0.4", "@types/react-dom": "18.2.0", - "@types/react-syntax-highlighter": "~15.5.13", - "@types/vscode-webview": "~1.57.5", - "@types/webpack": "^5.28.5", + "@types/react-syntax-highlighter": "15.5.13", + "@types/vscode-webview": "1.57.5", + "@types/webpack": "5.28.5", "@typescript-eslint/eslint-plugin": "8.32.1", "@typescript-eslint/parser": "8.32.1", - "buffer": "^6.0.3", - "copyfiles": "^2.4.1", - "css-loader": "^7.1.2", + "buffer": "6.0.3", + "copyfiles": "2.4.1", + "css-loader": "7.1.2", "eslint": "9.27.0", - "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-react-refresh": "^0.4.20", - "sass-loader": "^16.0.5", - "source-map-loader": "^5.0.0", - "style-loader": "^4.0.0", - "ts-loader": "^9.5.2", + "eslint-plugin-react-hooks": "5.2.0", + "eslint-plugin-react-refresh": "0.4.20", + "sass-loader": "16.0.5", + "source-map-loader": "5.0.0", + "style-loader": "4.0.0", + "ts-loader": "9.5.2", "typescript": "5.8.3", - "webpack": "^5.99.8", - "@types/react-lottie": "^1.2.5", - "@types/lodash.debounce": "^4.0.6", - "webpack-cli": "^5.1.4", - "webpack-dev-server": "^5.2.1" + "@types/js-yaml": "4.0.5", + "@types/swagger-ui-react": "5.18.0", + "webpack": "5.104.1", + "@types/react-lottie": "1.2.5", + "@types/lodash.debounce": "4.0.6", + "webpack-cli": "5.1.4", + "webpack-dev-server": "5.2.3" }, "author": "wso2", "license": "UNLICENSED", diff --git a/workspaces/ballerina/ballerina-visualizer/src/Hooks.tsx b/workspaces/ballerina/ballerina-visualizer/src/Hooks.tsx index 9705db3fddc..9c4d631272a 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/Hooks.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/Hooks.tsx @@ -80,5 +80,9 @@ export const useDataMapperModel = ( await refetch(); }; - return { model, isFetching, isError, refreshDMModel }; + const requestRefreshDMModel = () => { + triggerRefresh.current = true; + }; + + return { model, isFetching, isError, refreshDMModel, requestRefreshDMModel }; }; diff --git a/workspaces/ballerina/ballerina-visualizer/src/MainPanel.tsx b/workspaces/ballerina/ballerina-visualizer/src/MainPanel.tsx index 33a96ea173a..2bc4314cca3 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/MainPanel.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/MainPanel.tsx @@ -46,7 +46,8 @@ import { PopupMessage, FunctionForm, SetupView, - TestFunctionForm + TestFunctionForm, + AIEvaluationForm } from "./views/BI"; import { handleRedo, handleUndo } from "./utils/utils"; import { STKindChecker } from "@wso2/syntax-tree"; @@ -85,6 +86,8 @@ import { SamplesView } from "./views/BI/SamplesView"; import { ReviewMode } from "./views/ReviewMode"; import AddConnectionPopup from "./views/BI/Connection/AddConnectionPopup"; import EditConnectionPopup from "./views/BI/Connection/EditConnectionPopup"; +import { EvalsetViewer } from "./views/EvalsetViewer/EvalsetViewer"; +import { ConfigurationCollector } from "./views/BI/ConfigurationCollector"; const globalStyles = css` *, @@ -282,6 +285,8 @@ const MainPanel = () => { setNavActive(true); rpcClient.getVisualizerLocation().then(async (value) => { const configFilePath = (await rpcClient.getVisualizerRpcClient().joinProjectPath({ segments: ['config.bal'] })).filePath; + const testsFolderResult = await rpcClient.getVisualizerRpcClient().joinProjectPath({ segments: ['tests'], checkExists: true }); + const testsConfigTomlPath = testsFolderResult.exists ? (await rpcClient.getVisualizerRpcClient().joinProjectPath({ segments: ['tests', 'Config.toml'] })).filePath : undefined; let defaultFunctionsFile = (await rpcClient.getVisualizerRpcClient().joinProjectPath({ segments: ['functions.bal'] })).filePath; if (value.documentUri) { defaultFunctionsFile = value.documentUri @@ -592,17 +597,30 @@ const MainPanel = () => { case MACHINE_VIEW.BITestFunctionForm: setViewComponent( ); break; + case MACHINE_VIEW.BIAIEvaluationForm: + setViewComponent( + ); + break; case MACHINE_VIEW.ViewConfigVariables: setViewComponent( ); @@ -612,6 +630,7 @@ const MainPanel = () => { @@ -631,6 +650,25 @@ const MainPanel = () => { ); break; + case MACHINE_VIEW.EvalsetViewer: + setViewComponent( + + ); + break; + case MACHINE_VIEW.ConfigurationCollector: + setViewComponent( + handleApprovalClose(value.agentMetadata?.configurationCollector)} + /> + ); + break; + default: setNavActive(false); setViewComponent(); @@ -668,6 +706,15 @@ const MainPanel = () => { rpcClient.getVisualizerRpcClient().goHome(); }; + const handleApprovalClose = (approvalData: any | undefined) => { + const requestId = approvalData?.requestId; + + if (requestId) { + console.log('[MainPanel] Approval view closed, notifying backend:', requestId); + rpcClient.getVisualizerRpcClient().handleApprovalPopupClose({ requestId }); + } + }; + const handlePopupClose = (id: string) => { closeModal(id); } diff --git a/workspaces/ballerina/ballerina-visualizer/src/PopupPanel.tsx b/workspaces/ballerina/ballerina-visualizer/src/PopupPanel.tsx index a998858bd9f..3100a9b2d60 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/PopupPanel.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/PopupPanel.tsx @@ -27,6 +27,7 @@ import { FunctionForm } from "./views/BI"; import { DataMapper } from "./views/DataMapper"; import AddConnectionPopup from "./views/BI/Connection/AddConnectionPopup"; import EditConnectionPopup from "./views/BI/Connection/EditConnectionPopup"; +import { ConfigurationCollector } from "./views/BI/ConfigurationCollector"; const ViewContainer = styled.div<{ isFullScreen?: boolean }>` position: fixed; @@ -67,6 +68,17 @@ const PopupPanel = (props: PopupPanelProps) => { fetchContext(); }, []); + const handleApprovalClose = (approvalData: any | undefined) => { + const requestId = approvalData?.requestId; + + if (requestId) { + console.log('[PopupPanel] Approval view closed, notifying backend:', requestId); + rpcClient.getVisualizerRpcClient().handleApprovalPopupClose({ requestId }); + } + + onClose(); + }; + const fetchContext = () => { rpcClient.getPopupVisualizerState().then((machineState: PopupVisualizerLocation) => { switch (machineState?.view) { @@ -150,6 +162,14 @@ const PopupPanel = (props: PopupPanelProps) => { /> ); break; + case MACHINE_VIEW.ConfigurationCollector: + setViewComponent( + handleApprovalClose(machineState.agentMetadata?.configurationCollector)} + /> + ); + break; default: setViewComponent(null); } diff --git a/workspaces/ballerina/ballerina-visualizer/src/components/ButtonCard/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/components/ButtonCard/index.tsx index 4531d5af02f..568a0288206 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/components/ButtonCard/index.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/components/ButtonCard/index.tsx @@ -53,7 +53,7 @@ interface TextProps { truncate?: boolean; } -const Title = styled(Text)` +const Title = styled(Text) ` font-weight: bold; white-space: ${(props: TextProps) => (props.truncate ? "nowrap" : "normal")}; overflow: ${(props: TextProps) => (props.truncate ? "hidden" : "visible")}; @@ -69,7 +69,7 @@ const Caption = styled(Text)` opacity: 0.6; `; -const Description = styled(Text)` +const Description = styled(Text) ` opacity: 0.8; margin-top: 4px; overflow: hidden; @@ -141,6 +141,7 @@ export function ButtonCard(props: ButtonCardProps) { ([]); const [loading, setLoading] = useState(false); const [savingForm, setSavingForm] = useState(false); + const [, forceRender] = useState(0); const projectPath = useRef(""); const currentFilePath = useRef(""); const targetLineRangeRef = useRef(undefined); + const connectionNodesMap = useRef>(new Map()); + const connectionConfigFields = useRef([]); useEffect(() => { initPanel(); }, []); - useEffect(() => { - if (selectedConnectionValue !== undefined) { - renderFormField(); - } - }, [selectedConnectionValue]); - const initPanel = async () => { setLoading(true); projectPath.current = await rpcClient.getVisualizerLocation().then((location) => location.projectPath); currentFilePath.current = fileName; - const endPosition = await rpcClient.getBIDiagramRpcClient().getEndOfFile({ filePath: currentFilePath.current }); @@ -71,30 +71,139 @@ export function ConnectionConfig(props: ConnectionConfigProps): JSX.Element { } }; - await fetchSelectedConnection(); + await fetchConnectionNodes(); + const connectionValue = await fetchConnectionValueForNode(connectionKind, selectedNode); + updateFieldsForConnection(connectionValue); setLoading(false); }; - const fetchSelectedConnection = async () => { - const connection = await fetchConnectionValueForNode(connectionKind, selectedNode); - setSelectedConnectionValue(connection); + const fetchConnectionNodes = async () => { + const response = await rpcClient.getBIDiagramRpcClient().searchNodes({ + filePath: currentFilePath.current, + position: targetLineRangeRef.current?.startLine, + queryMap: { kind: connectionKind as NodeKind } + }); + const nodes = response?.output ?? []; + const nodesMap = new Map(); + nodes.forEach(node => { + const varName = String(node.properties?.variable?.value ?? ""); + if (varName) { + nodesMap.set(varName, node); + } + }); + connectionNodesMap.current = nodesMap; + }; + + const getConnectionConfigFields = (connectionValue: string): FormField[] => { + const connectionNode = connectionNodesMap.current.get(connectionValue); + if (!connectionNode) return []; + + const { variable, ...restProperties } = connectionNode.properties; + const fields = convertNodePropertiesToFormFields(restProperties as NodeProperties); + fields.forEach(field => { + if (field.key === "type") { + field.hidden = true; + } + }); + return fields; }; - const renderFormField = () => { - const connectionSelectField = createConnectionSelectField(selectedConnectionValue, config, onCreateNewConnection); - setSelectedConnectionFields([connectionSelectField]); + const updateFieldsForConnection = (connectionValue: string) => { + const connectionSelectField = createConnectionSelectField(connectionValue, config, onCreateNewConnection, connectionKind, connectionNodesMap.current); + const isExpression = connectionValue && !connectionNodesMap.current.has(connectionValue); + if (isExpression) { + connectionSelectField.types = connectionSelectField.types?.map(t => ({ + ...t, + selected: t.fieldType === "EXPRESSION" + })); + } + const configFields = isExpression ? [] : (connectionValue ? getConnectionConfigFields(connectionValue) : []); + connectionConfigFields.current = configFields; + setSelectedConnectionValue(connectionValue); + setSelectedConnectionFields([connectionSelectField, ...configFields]); }; - const handleOnSave = useCallback(async (data: FormValues) => { + const handleOnSave = useCallback(async (data: FormValues, formImports?: FormImports) => { setSavingForm(true); - updateNodeWithConnectionVariable(connectionKind, selectedNode, data["connection"]); - onSave?.(selectedNode); - }, [onSave, rpcClient]); + + try { + // 1. Update the parent node's connection reference + updateNodeWithConnectionVariable(connectionKind, selectedNode, data["connection"]); + + // 2. Save the connection node config if there are config fields with changes + const connectionNode = connectionNodesMap.current.get(data["connection"]); + const hasConfigChanges = connectionConfigFields.current.some( + field => data[field.key] !== undefined && data[field.key] !== field.value + ); + if (connectionNode && connectionConfigFields.current.length > 0 && hasConfigChanges) { + const nodeToSave = cloneDeep(connectionNode); + updateFormFieldsWithData(connectionConfigFields.current, data, formImports); + updateNodeTemplateProperties(nodeToSave, connectionConfigFields.current); + Object.values(nodeToSave.properties).forEach((prop: any) => { + if (prop) { + prop.imports = {}; + } + }); + const relativeFileName = nodeToSave.codedata?.lineRange?.fileName; + const filePath = relativeFileName + ? Utils.joinPath(URI.file(projectPath.current), relativeFileName).fsPath + : currentFilePath.current; + const response = await rpcClient.getBIDiagramRpcClient().getSourceCode({ + filePath, + flowNode: nodeToSave, + isConnector: true, + }); + updateNodeLineRange(selectedNode, response.artifacts); + } + + await onSave?.(selectedNode); + } catch (error) { + console.error(`>>> Error saving ${connectionKind} config`, error); + } finally { + setSavingForm(false); + } + }, [onSave, rpcClient, connectionKind, selectedNode]); + + const handleOnChange = useCallback((fieldKey: string, value: any) => { + if (fieldKey !== "connection" || value === selectedConnectionValue) return; + + const isKnownConnection = value && connectionNodesMap.current.has(value); + + if (!isKnownConnection) { + if (connectionConfigFields.current.length > 0) { + connectionConfigFields.current.forEach(f => { f.hidden = true; }); + connectionConfigFields.current = []; + forceRender(c => c + 1); + } + return; + } + updateFieldsForConnection(value); + }, [selectedConnectionValue]); const onCreateNewConnection = useCallback(() => { onNavigateToSelectionList?.(); }, [onNavigateToSelectionList]); + const injectedComponents = useMemo(() => { + const connectionNode = selectedConnectionValue + ? connectionNodesMap.current.get(selectedConnectionValue) + : undefined; + const symbol = connectionNode?.codedata?.symbol || ""; + const specialConfig = getConnectionSpecialConfig(symbol); + if (!specialConfig?.shouldShowInfo?.(symbol)) { + return undefined; + } + return [{ + component: ( + + ), + index: Infinity, + }]; + }, [selectedConnectionValue, selectedConnectionFields]); + return ( <> {loading && ( @@ -110,9 +219,11 @@ export function ConnectionConfig(props: ConnectionConfigProps): JSX.Element { targetLineRange={targetLineRangeRef.current} fields={selectedConnectionFields} onSubmit={handleOnSave} + onChange={handleOnChange} disableSaveButton={savingForm} isSaving={savingForm} helperPaneSide="left" + injectedComponents={injectedComponents} /> )} diff --git a/workspaces/ballerina/ballerina-visualizer/src/components/ConnectionSelector/ConnectionCreator.tsx b/workspaces/ballerina/ballerina-visualizer/src/components/ConnectionSelector/ConnectionCreator.tsx index 1684b021a42..addc539965a 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/components/ConnectionSelector/ConnectionCreator.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/components/ConnectionSelector/ConnectionCreator.tsx @@ -82,6 +82,11 @@ export function ConnectionCreator(props: ConnectionCreatorProps): JSX.Element { const nodeTemplate = cloneDeep(nodeFormTemplate); updateFormFieldsWithData(connectionFields, data, formImports); updateNodeTemplateProperties(nodeTemplate, connectionFields); + Object.values(nodeTemplate.properties).forEach((prop: any) => { + if (prop) { + prop.imports = {}; + } + }); try { const response = await rpcClient .getBIDiagramRpcClient() diff --git a/workspaces/ballerina/ballerina-visualizer/src/components/ConnectionSelector/config.ts b/workspaces/ballerina/ballerina-visualizer/src/components/ConnectionSelector/config.ts index 5715b6df84d..98bdd596e0e 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/components/ConnectionSelector/config.ts +++ b/workspaces/ballerina/ballerina-visualizer/src/components/ConnectionSelector/config.ts @@ -29,7 +29,7 @@ import { export const CONNECTION_TYPE_CONFIGS: Record = { MODEL_PROVIDER: { displayName: "Model Provider", - types: [{ fieldType: "EXPRESSION", ballerinaType: "ai:ModelProvider", selected: true }], + types: [{ fieldType: "ACTION_EXPRESSION", ballerinaType: "ai:ModelProvider", selected: true }, { fieldType: "EXPRESSION", selected: false }], nodePropertyKey: ["model", "modelProvider"], categoryConverter: convertModelProviderCategoriesToSidePanelCategories, searchConfig: (aiModuleOrg?: string): ConnectionSearchConfig => ({ @@ -39,25 +39,25 @@ export const CONNECTION_TYPE_CONFIGS: Record ({ diff --git a/workspaces/ballerina/ballerina-visualizer/src/components/ConnectionSelector/utils.tsx b/workspaces/ballerina/ballerina-visualizer/src/components/ConnectionSelector/utils.tsx index 69a485c5166..bf913b73a65 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/components/ConnectionSelector/utils.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/components/ConnectionSelector/utils.tsx @@ -27,11 +27,20 @@ import { BallerinaRpcClient } from "@wso2/ballerina-rpc-client"; export const createConnectionSelectField = ( value: string, config: ConnectionKindConfig, - handleActionBtnClick: () => void + handleActionBtnClick: () => void, + connectionKind?: ConnectionKind, + connectionNodesMap?: Map ): FormField => { const selectLabel = `Select ${config.displayName}`; const description = `Choose an existing ${config.displayName} or create a new one.`; const createLabel = `Create New ${config.displayName}`; + const initialItems = connectionNodesMap ? Array.from(connectionNodesMap.entries()) + .map(([varName, node]) => ({ + id: varName, + label: varName, + value: varName, + codedata: node.codedata, + })) : undefined; return { "key": "connection", "label": selectLabel, @@ -52,7 +61,9 @@ export const createConnectionSelectField = ( }, "codedata": { "kind": "REQUIRED", - "originalName": "connection" + "originalName": "connection", + ...(connectionKind && { searchNodesKind: connectionKind }), + ...(initialItems && { initialItems }) }, "actionCallback": handleActionBtnClick, "actionLabel": <>{createLabel}, @@ -68,12 +79,12 @@ export const updateFormFieldsWithData = ( connectionFields.forEach((field) => { if (field.type === "DROPDOWN_CHOICE") { field.dynamicFormFields[data[field.key]].forEach((dynamicField) => { - if (data[dynamicField.key]) { + if (dynamicField.key in data) { dynamicField.value = data[dynamicField.key]; } }); field.value = data[field.key]; - } else if (data[field.key]) { + } else if (field.key in data) { field.value = data[field.key]; } if (formImports) { diff --git a/workspaces/ballerina/ballerina-visualizer/src/components/EntryPointTypeCreator/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/components/EntryPointTypeCreator/index.tsx index a4317769806..306bbbd67fa 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/components/EntryPointTypeCreator/index.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/components/EntryPointTypeCreator/index.tsx @@ -40,6 +40,7 @@ interface EntryPointTypeCreatorProps { modalHeight?: number; payloadContext?: PayloadContext; defaultTab?: 'import' | 'create-from-scratch' | 'browse-exisiting-types'; + note?: string; } interface TypeEditorState { @@ -51,7 +52,7 @@ interface TypeEditorState { export function EntryPointTypeCreator(props: EntryPointTypeCreatorProps) { - const { modalTitle, initialTypeName, modalWidth, modalHeight, payloadContext, isOpen, onClose, onTypeCreate, defaultTab } = props; + const { modalTitle, initialTypeName, modalWidth, modalHeight, payloadContext, isOpen, onClose, onTypeCreate, defaultTab, note } = props; const [typeEditorState, setTypeEditorState] = React.useState({ isTypeCreatorOpen: false, @@ -275,6 +276,7 @@ export function EntryPointTypeCreator(props: EntryPointTypeCreatorProps) { isContextTypeForm={true} payloadContext={payloadContext} defaultTab={defaultTab} + note={note} /> diff --git a/workspaces/ballerina/ballerina-visualizer/src/components/InfoBox/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/components/InfoBox/index.tsx index be992280a35..11de0e22040 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/components/InfoBox/index.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/components/InfoBox/index.tsx @@ -75,12 +75,14 @@ export function InfoBox({ text, description, codeCommand }: InfoBoxProps): JSX.E
{text}
- {description && codeCommand && ( + {(description || codeCommand) && (
- {description}
- - {codeCommand} - + {description && <>{description}
} + {codeCommand && ( + + {codeCommand} + + )}
)} diff --git a/workspaces/ballerina/ballerina-visualizer/src/components/Modal/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/components/Modal/index.tsx index 5debc7f5af2..04c97494456 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/components/Modal/index.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/components/Modal/index.tsx @@ -19,7 +19,7 @@ import React, { cloneElement, isValidElement, ReactNode, ReactElement, useEffect } from "react"; import { createPortal } from "react-dom"; import styled from "@emotion/styled"; -import { Codicon, Divider, ThemeColors, Typography } from "@wso2/ui-toolkit"; +import { Icon, Divider, ThemeColors, Typography, Tooltip, Button } from "@wso2/ui-toolkit"; import { useVisualizerContext } from "../../Context"; export type DynamicModalProps = { @@ -32,6 +32,8 @@ export type DynamicModalProps = { openState: boolean; setOpenState: (state: boolean) => void; sx?: any; + closeOnBackdropClick?: boolean; + closeButtonIcon?: "close" | "minimize"; }; const ModalContainer = styled.div<{ sx?: any }>` @@ -87,6 +89,10 @@ const ModalHeaderSection = styled.header` justify-content: space-between; `; +export const CloseButton = styled(Button)` + border-radius: 5px; +`; + type TriggerProps = React.ButtonHTMLAttributes & { children: ReactNode }; const Trigger: React.FC = (props) => {props.children}; @@ -100,6 +106,8 @@ const DynamicModal: React.FC & { Trigger: typeof Trigger } = openState, setOpenState, sx, + closeOnBackdropClick = false, + closeButtonIcon = "close", }) => { const { setShowOverlay } = useVisualizerContext(); let trigger: ReactElement | null = null; @@ -121,6 +129,13 @@ const DynamicModal: React.FC & { Trigger: typeof Trigger } = onClose && onClose(); }; + const handleBackdropClick = (e: React.MouseEvent) => { + // Only close if closeOnBackdropClick is true and the click was on the backdrop itself + if (closeOnBackdropClick && e.target === e.currentTarget) { + handleClose(); + } + }; + useEffect(() => { setShowOverlay(openState === true); }); @@ -133,17 +148,32 @@ const DynamicModal: React.FC & { Trigger: typeof Trigger } = const targetEl = document.getElementById("visualizer-container"); + // Map closeButtonIcon prop to actual icon names and tooltip text + const iconName = closeButtonIcon === "minimize" ? "bi-minimize-modal" : "bi-close"; + const tooltipText = closeButtonIcon === "minimize" + ? "Minimize to return to the form" + : "Close"; + return ( <> {trigger} {openState && targetEl && createPortal( - + {title} - + + + + + {content} diff --git a/workspaces/ballerina/ballerina-visualizer/src/components/TopNavigationBar/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/components/TopNavigationBar/index.tsx index aa133b51668..f777d258208 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/components/TopNavigationBar/index.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/components/TopNavigationBar/index.tsx @@ -18,7 +18,7 @@ import React, { useEffect, useMemo, useState } from "react"; import styled from "@emotion/styled"; -import { Codicon, Icon } from "@wso2/ui-toolkit"; +import { Button, Codicon, Icon } from "@wso2/ui-toolkit"; import { useRpcContext } from "@wso2/ballerina-rpc-client"; import { HistoryEntry, MACHINE_VIEW, WorkspaceTypeResponse } from "@wso2/ballerina-core"; @@ -38,6 +38,7 @@ const BreadcrumbContainer = styled.div` gap: 8px; margin-left: 4px; color: var(--vscode-foreground); + flex: 1; `; const BreadcrumbSeparator = styled.span` @@ -223,6 +224,16 @@ export function TopNavigationBar(props: TopNavigationBarProps) { return null; })} + {/** TODO: Uncomment if want to show popup icon */} + {/* + setDevantBtnAnchor(null)} + isVisible={!!devantBtnAnchor} + projectPath={projectPath} + /> */} ); } @@ -245,6 +256,10 @@ function getShortNames(name: string) { return "Natural Function"; case MACHINE_VIEW.BITestFunctionForm: return "Test Function"; + case MACHINE_VIEW.BIAIEvaluationForm: + return "AI Evaluation"; + case MACHINE_VIEW.EvalsetViewer: + return "Evalset Viewer"; case MACHINE_VIEW.BIServiceWizard: case MACHINE_VIEW.BIServiceConfigView: return "Service"; diff --git a/workspaces/ballerina/ballerina-visualizer/src/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/index.tsx index 4a90b3f110a..17fdacfddad 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/index.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/index.tsx @@ -17,22 +17,12 @@ */ import React from "react"; -import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { createRoot } from "react-dom/client"; import { Visualizer } from "./Visualizer"; import { VisualizerContextProvider, RpcContextProvider, ModalStackProvider } from "./Context"; +import { PlatformExtContextProvider } from "./providers/platform-ext-ctx-provider"; import { clearDiagramZoomAndPosition } from "./utils/bi"; - -const queryClient = new QueryClient({ - defaultOptions: { - queries: { - retry: false, - refetchOnWindowFocus: false, - staleTime: 1000, - gcTime: 1000, - }, - }, -}); +import { ReactQueryProvider } from "./providers/react-query-provider"; export function renderWebview(mode: string, target: HTMLElement) { // clear diagram memory @@ -43,9 +33,11 @@ export function renderWebview(mode: string, target: HTMLElement) { - - - + + + + + diff --git a/workspaces/ballerina/ballerina-visualizer/src/providers/platform-ext-ctx-provider.tsx b/workspaces/ballerina/ballerina-visualizer/src/providers/platform-ext-ctx-provider.tsx new file mode 100644 index 00000000000..78417530fea --- /dev/null +++ b/workspaces/ballerina/ballerina-visualizer/src/providers/platform-ext-ctx-provider.tsx @@ -0,0 +1,151 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { useQueryClient, useQuery } from "@tanstack/react-query"; +import { PlatformExtState } from "@wso2/ballerina-core/lib/rpc-types/platform-ext/interfaces"; +import { useRpcContext } from "@wso2/ballerina-rpc-client"; +import { PlatformExtRpcClient } from "@wso2/ballerina-rpc-client/lib/rpc-clients/platform-ext/platform-ext-client"; +import { + ConnectionListItem, + ICreateDirCtxCmdParams, + WICommandIds, +} from "@wso2/wso2-platform-core"; +import React, { useContext, FC, ReactNode, useEffect, useState } from "react"; + +const defaultPlatformExtContext: { + platformExtState: PlatformExtState | null; + devantConsoleUrl: string; + platformRpcClient?: PlatformExtRpcClient; + onLinkDevantProject: () => void; + loginToDevant: () => void; + handleLinkWorkspace: () => Promise + importConnection: { + connection?: ConnectionListItem; + setConnection: (item?: ConnectionListItem) => void; + }; +} = { + platformExtState: { components: [], isLoggedIn: false, userInfo: null }, + onLinkDevantProject: () => {}, + loginToDevant: () => {}, + handleLinkWorkspace: async () => {}, + devantConsoleUrl: "", + importConnection: { setConnection: () => {} }, +}; + +const PlatformExtContext = React.createContext(defaultPlatformExtContext); + +export const usePlatformExtContext = () => { + return useContext(PlatformExtContext) || defaultPlatformExtContext; +}; + +export const PlatformExtContextProvider: FC<{ children: ReactNode }> = ({ children }) => { + const queryClient = useQueryClient(); + const { rpcClient } = useRpcContext(); + const platformRpcClient = rpcClient.getPlatformRpcClient(); + const [importingConn, setImportingConn] = useState(); + + const { data: platformExtState } = useQuery({ + queryKey: ["platform-ext-state"], + queryFn: () => platformRpcClient.getPlatformStore(), + }); + + useEffect(() => { + platformRpcClient?.onPlatformExtStoreStateChange((state) => { + queryClient.setQueryData(["platform-ext-state"], state); + }); + }, []); + + const { data: devantConsoleUrl = "" } = useQuery({ + queryKey: ["devant-url"], + queryFn: () => platformRpcClient.getDevantConsoleUrl(), + }); + + const loginToDevant = () => { + rpcClient.getCommonRpcClient().executeCommand({ + commands: [WICommandIds.SignIn], + }) + } + + const handleLinkWorkspace = async () => { + const visualizerLocation = await rpcClient.getVisualizerLocation(); + rpcClient.getCommonRpcClient().executeCommand({ + commands: [ + WICommandIds.CreateDirectoryContext, + { + skipComponentExistCheck: true, + fsPath: visualizerLocation?.workspacePath || visualizerLocation?.projectPath || "", + } as ICreateDirCtxCmdParams, + ], + }); + }; + + const onLinkDevantProject = () => { + if (!platformExtState?.isLoggedIn && platformExtState?.hasPossibleComponent) { + rpcClient + .getCommonRpcClient() + .showInformationModal({ + message: "Please login to Devant in order to use Devant Connections", + items: ["Login"], + }) + .then((resp) => { + if (resp === "Login") { + platformRpcClient.deployIntegrationInDevant(); + } else if (resp === "Associate Project") { + loginToDevant(); + } + }); + } else { + rpcClient + .getCommonRpcClient() + .showInformationModal({ + message: + "To use Devant connections, you can either deploy your source code now or associate this directory with an existing Devant project where you plan to deploy later.", + items: ["Deploy Now", "Associate Project"], + }) + .then(async (resp) => { + if (resp === "Deploy Now") { + platformRpcClient.deployIntegrationInDevant(); + } else if (resp === "Associate Project") { + handleLinkWorkspace(); + } + }); + } + }; + + return ( + setImportingConn(item), connection: importingConn }, + }} + > + {children} + + ); +}; diff --git a/workspaces/ballerina/ballerina-visualizer/src/providers/react-query-provider.tsx b/workspaces/ballerina/ballerina-visualizer/src/providers/react-query-provider.tsx new file mode 100644 index 00000000000..266bdf90635 --- /dev/null +++ b/workspaces/ballerina/ballerina-visualizer/src/providers/react-query-provider.tsx @@ -0,0 +1,68 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { QueryClient, DehydratedState } from "@tanstack/react-query"; +import { PersistQueryClientProvider } from "@tanstack/react-query-persist-client"; +import { useRpcContext } from "@wso2/ballerina-rpc-client"; +import React from "react"; + +interface PersistedClient { + timestamp: number; + buster: string; + clientState: DehydratedState; +} + +const webviewStatePersister = (queryBaseKey: string) => { + const { rpcClient } = useRpcContext(); + return { + persistClient: async (client: PersistedClient) => { + await rpcClient.getCommonRpcClient().setWebviewCache({ cacheKey: queryBaseKey, data: client }); + }, + restoreClient: async () => { + const cache = await rpcClient.getCommonRpcClient().restoreWebviewCache(queryBaseKey); + return cache; + }, + removeClient: async () => { + await rpcClient.getCommonRpcClient().clearWebviewCache(queryBaseKey); + }, + }; +}; + +export const ReactQueryProvider = ({ children }: { children: React.ReactNode }) => { + return ( + + {children} + + ); +}; diff --git a/workspaces/ballerina/ballerina-visualizer/src/utils/bi.tsx b/workspaces/ballerina/ballerina-visualizer/src/utils/bi.tsx index 88fafda780d..730e5c79d73 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/utils/bi.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/utils/bi.tsx @@ -73,7 +73,7 @@ import { cloneDeep } from "lodash"; import ReactMarkdown from "react-markdown"; import rehypeRaw from "rehype-raw"; import hljs from "highlight.js"; -import { COMPLETION_ITEM_KIND, CompletionItem, CompletionItemKind, convertCompletionItemKind, FnSignatureDocumentation } from "@wso2/ui-toolkit"; +import { COMPLETION_ITEM_KIND, CompletionItem, CompletionItemKind, convertCompletionItemKind, FnSignatureDocumentation, VSCodeColors } from "@wso2/ui-toolkit"; import { FunctionDefinition, STNode } from "@wso2/syntax-tree"; import { DocSection } from "../components/ExpressionEditor"; @@ -81,6 +81,7 @@ import { DocSection } from "../components/ExpressionEditor"; import ballerina from "../languages/ballerina.js"; import { FUNCTION_REGEX } from "../resources/constants"; import { ConnectionKind, getConnectionKindConfig } from "../components/ConnectionSelector"; +import { ConnectionListItem } from "@wso2/wso2-platform-core"; hljs.registerLanguage("ballerina", ballerina); export const BALLERINA_INTEGRATOR_ISSUES_URL = "https://github.com/wso2/product-ballerina-integrator/issues"; @@ -90,7 +91,7 @@ function convertAvailableNodeToPanelNode(node: AvailableNode, functionType?: FUN if (functionType === FUNCTION_TYPE.REGULAR && (node.metadata.data as NodeMetadata)?.isDataMappedFunction) { return undefined; } - if (functionType === FUNCTION_TYPE.EXPRESSION_BODIED && !(node.metadata.data as NodeMetadata).isDataMappedFunction) { + if (functionType === FUNCTION_TYPE.EXPRESSION_BODIED && !(node.metadata.data as NodeMetadata)?.isDataMappedFunction) { return undefined; } @@ -111,19 +112,23 @@ function convertAvailableNodeToPanelNode(node: AvailableNode, functionType?: FUN } function convertDiagramCategoryToSidePanelCategory(category: Category, functionType?: FUNCTION_TYPE): PanelCategory { - if (category.metadata.label !== "Current Integration" && functionType === FUNCTION_TYPE.EXPRESSION_BODIED) { - // Skip out of scope data mapping functions - return; - } const items: PanelItem[] = category.items ?.map((item) => { if ("codedata" in item) { return convertAvailableNodeToPanelNode(item as AvailableNode, functionType); } else { - return convertDiagramCategoryToSidePanelCategory(item as Category); + return convertDiagramCategoryToSidePanelCategory(item as Category, functionType); } }) - .filter((item) => item !== undefined); + .filter((item) => { + if (item === undefined) { + return false; + } + if ((item as PanelCategory).items !== undefined) { + return (item as PanelCategory).items.length > 0; + } + return true; + }); // HACK: use the icon of the first item in the category const icon = category.items.at(0)?.metadata.icon; @@ -138,6 +143,43 @@ function convertDiagramCategoryToSidePanelCategory(category: Category, functionT }; } +/** Map devant connection details with BI connection and to figure out which Devant connection are not used */ +export function enrichCategoryWithDevant( + connections: ConnectionListItem[] = [], + panelCategories: PanelCategory[] = [], + importingConn?: ConnectionListItem +): PanelCategory[] { + const updated = panelCategories?.map((category) => { + if (category.title === "Connections") { + const usedConnIds: string[] = []; + const mappedCategoryItems = category.items?.map((categoryItem) => { + const matchingDevantConn = connections.find((conn) => conn.name?.replaceAll("-", "_").replaceAll(" ", "_") === (categoryItem as PanelCategory)?.title) + if(matchingDevantConn) { + usedConnIds.push(matchingDevantConn.groupUuid); + return { ...categoryItem, devant: matchingDevantConn, unusedDevantConn: false } + } + return categoryItem; + }); + const unusedCategoryItems: PanelCategory[] = connections + .filter((conn) => !usedConnIds.includes(conn.groupUuid)) + .map((conn) => ({ + title: conn.name?.replaceAll("-","_").replaceAll(" ","_"), + items: [] as PanelItem[], + description: "Unused Devant connection", + devant: conn, + unusedDevantConn: true, + isLoading: importingConn?.name === conn.name, + })); + return { + ...category, + items: [...mappedCategoryItems, ...unusedCategoryItems], + }; + } + return category; + }); + return updated; +} + export function convertBICategoriesToSidePanelCategories(categories: Category[]): PanelCategory[] { const panelCategories = categories.map((category) => convertDiagramCategoryToSidePanelCategory(category)); const connectorCategory = panelCategories.find((category) => category.title === "Connections"); @@ -247,6 +289,11 @@ export function convertNodePropertiesToFormFields( const expression = nodeProperties[key as NodePropertyKey]; if (expression) { const formField: FormField = convertNodePropertyToFormField(key, expression, connections, clientName); + + if (getPrimaryInputType(expression.types)?.fieldType === "REPEATABLE_PROPERTY") { + handleRepeatableProperty(expression, formField); + } + formFields.push(formField); } } @@ -353,9 +400,28 @@ export function updateNodeProperties( if (values.hasOwnProperty(key) && updatedNodeProperties.hasOwnProperty(key)) { const expression = updatedNodeProperties[key as NodePropertyKey]; if (expression) { - expression.value = values[key]; - expression.imports = formImports[key]; + expression.imports = formImports?.[key]; expression.modified = dirtyFields?.hasOwnProperty(key); + + const dataValue = values[key]; + const primaryType = getPrimaryInputType(expression.types); + if (primaryType?.fieldType === "REPEATABLE_PROPERTY" && isTemplateType(primaryType)) { + const template = primaryType?.template; + expression.value = {}; + // Go through the parameters array + for (const [repeatKey, repeatValue] of Object.entries(dataValue)) { + // Create a deep copy for each iteration + const valueConstraint = JSON.parse(JSON.stringify(template)); + // Fill the values of the parameter constraint + for (const [paramKey, param] of Object.entries((valueConstraint as any).value as NodeProperties)) { + param.value = (repeatValue as any).formValues[paramKey] || ""; + } + (expression.value as any)[(repeatValue as any).key] = valueConstraint; + } + } else { + expression.value = dataValue; + } + } } } @@ -403,7 +469,7 @@ export function getContainerTitle(view: SidePanelView, activeNode: FlowNode, cli if (!activeNode) { return ""; } - if (activeNode.codedata?.node === "AGENT_CALL") { + if (activeNode.codedata?.node === "AGENT_CALL" || activeNode.codedata?.node === "AGENT_RUN") { return `AI Agent`; } if (activeNode.codedata?.node === "KNOWLEDGE_BASE" && activeNode.codedata?.object === "VectorKnowledgeBase") { @@ -751,6 +817,17 @@ export function convertToVisibleTypes(types: VisibleTypeItem[], isFetchingTypesF })); } +export function convertItemsToCompletionItems(items: Item[]): CompletionItem[] { + items = items.filter(item => item !== null) as Item[]; + //TODO: Need labelDetails from the LS for proper conversion + return items.map((item) => ({ + label: item.metadata.label, + value: item.metadata.label, + kind: COMPLETION_ITEM_KIND.TypeParameter, + insertText: item.metadata.label + })); +} + export function convertRecordTypeToCompletionItem(type: Type): CompletionItem { const label = type?.name ?? ""; const value = label; @@ -832,9 +909,9 @@ const isCategoryType = (item: Item): item is Category => { }; export const getFunctionItemKind = (category: string): FunctionKind => { - if (category.includes("Current")) { + if (category.toLocaleLowerCase().includes("current")) { return functionKinds.CURRENT; - } else if (category.includes("Imported")) { + } else if (category.toLocaleLowerCase().includes("imported")) { return functionKinds.IMPORTED; } else { return functionKinds.AVAILABLE; diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/AIPanel.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/AIPanel.tsx index dda9ebfc2ed..f530a20507d 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/AIPanel.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/AIPanel.tsx @@ -78,11 +78,11 @@ const AIPanel = (props: { state: AIMachineStateValue }) => { if (subState === "determineFlow") { component = ; - } else if (["ssoFlow", "apiKeyFlow", "validatingApiKey", "awsBedrockFlow", "validatingAwsCredentials"].includes(subState)) { + } else if (["ssoFlow", "apiKeyFlow", "validatingApiKey", "awsBedrockFlow", "validatingAwsCredentials", "vertexAiFlow", "validatingVertexAiCredentials"].includes(subState)) { component = ( ); diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/LoginPanel/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/LoginPanel/index.tsx index a17d9a1523c..7cf7e3b1f2b 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/LoginPanel/index.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/LoginPanel/index.tsx @@ -21,7 +21,7 @@ import { VSCodeButton } from "@vscode/webview-ui-toolkit/react"; import { AIMachineEventType } from "@wso2/ballerina-core"; import { useRpcContext } from "@wso2/ballerina-rpc-client"; import { Icon, Typography } from "@wso2/ui-toolkit"; -import React from "react"; +import React, { useEffect, useState } from "react"; const PanelWrapper = styled.div` display: flex; @@ -130,6 +130,16 @@ const LegalNotice: React.FC = () => { const LoginPanel: React.FC = () => { const { rpcClient } = useRpcContext(); + const [isPlatformAvailable, setIsPlatformAvailable] = useState(true); + + useEffect(() => { + // Check if platform extension is available on mount + rpcClient.getAiPanelRpcClient().isPlatformExtensionAvailable().then((available) => { + setIsPlatformAvailable(available); + }).catch(() => { + setIsPlatformAvailable(false); + }); + }, [rpcClient]); const handleCopilotLogin = () => { rpcClient.sendAIStateEvent(AIMachineEventType.LOGIN); @@ -143,6 +153,10 @@ const LoginPanel: React.FC = () => { rpcClient.sendAIStateEvent(AIMachineEventType.AUTH_WITH_AWS_BEDROCK); }; + const handleVertexAiClick = () => { + rpcClient.sendAIStateEvent(AIMachineEventType.AUTH_WITH_VERTEX_AI); + }; + return ( @@ -168,10 +182,13 @@ const LoginPanel: React.FC = () => { - Login to BI Copilot - or + {isPlatformAvailable && ( + Login using Devant + )} + {isPlatformAvailable && or} Enter your Anthropic API key Enter your AWS Bedrock credentials + Enter your Google Vertex AI credentials ); diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/SettingsPanel/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/SettingsPanel/index.tsx index b1622c11055..9961fdfce02 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/SettingsPanel/index.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/SettingsPanel/index.tsx @@ -21,7 +21,7 @@ import { useRpcContext } from "@wso2/ballerina-rpc-client"; import { Button, Codicon, Typography } from "@wso2/ui-toolkit"; import { AIChatView } from "../styles"; -import { AIMachineEventType, LoginMethod } from "@wso2/ballerina-core"; +import { AIMachineEventType } from "@wso2/ballerina-core"; const Container = styled.div` display: flex; @@ -62,7 +62,6 @@ export const SettingsPanel = (props: { onClose: () => void }) => { const { rpcClient } = useRpcContext(); const [copilotAuthorized, setCopilotAuthorized] = React.useState(false); - const [shouldShowLogoutButton, setShouldShowLogoutButton] = React.useState(true); const messagesEndRef = createRef(); @@ -70,14 +69,6 @@ export const SettingsPanel = (props: { onClose: () => void }) => { isCopilotAuthorized().then((authorized) => { setCopilotAuthorized(authorized); }); - - rpcClient - .getAiPanelRpcClient() - .getLoginMethod() - .then((loginMethod) => { - console.log("Login Method: ", loginMethod); - setShouldShowLogoutButton(loginMethod !== LoginMethod.DEVANT_ENV); - }); }, []); const handleCopilotLogout = () => { @@ -109,18 +100,16 @@ export const SettingsPanel = (props: { onClose: () => void }) => { Connect to AI Platforms for Enhanced Features - {shouldShowLogoutButton && ( - - - Logout from BI Copilot - - Logging out will end your session and disconnect access to AI-powered tools like code - generation, completions, test generation, and data mappings. - - - - - )} + + + Logout from BI Copilot + + Logging out will end your session and disconnect access to AI-powered tools like code + generation, completions, test generation, and data mappings. + + + + Enable GitHub Copilot Integration diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/WaitingForLoginSection/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/WaitingForLoginSection/index.tsx index 2c031f41252..22151044036 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/WaitingForLoginSection/index.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/WaitingForLoginSection/index.tsx @@ -189,6 +189,14 @@ const WaitingForLogin = ({ loginMethod, isValidating = false, errorMessage }: Wa const [showAccessKey, setShowAccessKey] = useState(false); const [showSecretKey, setShowSecretKey] = useState(false); const [showSessionToken, setShowSessionToken] = useState(false); + const [vertexAiCredentials, setVertexAiCredentials] = useState({ + projectId: "", + location: "", + clientEmail: "", + privateKey: "" + }); + const [showClientEmail, setShowClientEmail] = useState(false); + const [showPrivateKey, setShowPrivateKey] = useState(false); const cancelLogin = () => { rpcClient.sendAIStateEvent(AIMachineEventType.CANCEL_LOGIN); @@ -245,6 +253,36 @@ const WaitingForLogin = ({ loginMethod, isValidating = false, errorMessage }: Wa setShowSessionToken(!showSessionToken); }; + const connectWithVertexAi = () => { + if (vertexAiCredentials.projectId.trim() && vertexAiCredentials.location.trim() && + vertexAiCredentials.clientEmail.trim() && vertexAiCredentials.privateKey.trim()) { + rpcClient.sendAIStateEvent({ + type: AIMachineEventType.SUBMIT_VERTEX_AI_CREDENTIALS, + payload: { + projectId: vertexAiCredentials.projectId.trim(), + location: vertexAiCredentials.location.trim(), + clientEmail: vertexAiCredentials.clientEmail.trim(), + privateKey: vertexAiCredentials.privateKey.trim() + }, + }); + } + }; + + const handleVertexAiCredentialChange = (field: keyof typeof vertexAiCredentials) => (e: any) => { + setVertexAiCredentials(prev => ({ + ...prev, + [field]: e.target.value + })); + }; + + const toggleClientEmailVisibility = () => { + setShowClientEmail(!showClientEmail); + }; + + const togglePrivateKeyVisibility = () => { + setShowPrivateKey(!showPrivateKey); + }; + if (loginMethod === LoginMethod.ANTHROPIC_KEY) { return ( @@ -417,6 +455,113 @@ const WaitingForLogin = ({ loginMethod, isValidating = false, errorMessage }: Wa ); } + if (loginMethod === LoginMethod.VERTEX_AI) { + const isFormValid = vertexAiCredentials.projectId.trim() && + vertexAiCredentials.location.trim() && + vertexAiCredentials.clientEmail.trim() && + vertexAiCredentials.privateKey.trim(); + + return ( + + + Connect with Google Vertex AI + + Enter your GCP service account credentials to connect to BI Copilot via Google Vertex AI. Your credentials will be securely stored + and used for authentication. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {errorMessage && ( + + + {errorMessage} + + )} + + + + {isValidating ? "Validating..." : "Connect with Vertex AI"} + + + Cancel + + + + + ); + } + // Default: BI_INTEL login method return ( diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/AIChat/Footer/ApprovalFooter.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/AIChat/Footer/ApprovalFooter.tsx index bd06cd7968c..f64ca422d37 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/AIChat/Footer/ApprovalFooter.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/AIChat/Footer/ApprovalFooter.tsx @@ -188,35 +188,35 @@ const ApprovalFooter: React.FC = ({ }; const promptText = approvalType === "plan" - ? "Accept this plan?" - : "Approve this task?"; + ? "Does this plan look right?" + : "Ready to continue?"; const primaryButtonText = approvalType === "plan" - ? "Yes and auto-approve tasks" - : "Yes and don't ask again"; + ? "Start building" + : "Approve"; - const secondaryButtonText = "Yes"; + const secondaryButtonText = approvalType === "plan" ? "Approve" : "Continue"; - const placeholderText = "Or describe what needs to change..."; + const placeholderText = "What should be different?"; return ( {promptText} - + */} void; + agentMode?: AgentMode; + onChangeAgentMode?: (mode: AgentMode) => void; + isAutoApproveEnabled?: boolean; + onDisableAutoApprove?: () => void; + disabled?: boolean; }; const Footer: React.FC = ({ @@ -142,6 +148,11 @@ const Footer: React.FC = ({ showSuggestedCommands, codeContext, onRemoveCodeContext, + agentMode, + onChangeAgentMode, + isAutoApproveEnabled, + onDisableAutoApprove, + disabled, }) => { const [generatingText, setGeneratingText] = useState("Generating."); @@ -187,6 +198,11 @@ const Footer: React.FC = ({ onSend={onSend} onStop={onStop} isLoading={isLoading} + agentMode={agentMode} + onChangeAgentMode={onChangeAgentMode} + isAutoApproveEnabled={isAutoApproveEnabled} + onDisableAutoApprove={onDisableAutoApprove} + disabled={disabled} /> ); diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/AIChat/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/AIChat/index.tsx index 369b2dd9732..df3599f1b11 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/AIChat/index.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/AIChat/index.tsx @@ -17,8 +17,8 @@ */ import React, { useEffect, useRef, useState } from "react"; +import styled from "@emotion/styled"; import { - GetWorkspaceContextResponse, SourceFile, MappingParameters, LLMDiagnostics, @@ -34,6 +34,7 @@ import { DocGenerationType, FileChanges, CodeContext, + ApprovalOverlayState, } from "@wso2/ballerina-core"; import { useRpcContext } from "@wso2/ballerina-rpc-client"; @@ -42,13 +43,17 @@ import { Button, Codicon } from "@wso2/ui-toolkit"; import { AIChatInputRef } from "../AIChatInput"; import ProgressTextSegment from "../ProgressTextSegment"; import ToolCallSegment from "../ToolCallSegment"; +import ToolCallGroupSegment, { ToolCallItem } from "../ToolCallGroupSegment"; +import TryItScenariosSegment from "../TryItScenariosSegment"; import TodoSection from "../TodoSection"; +import AgentStreamView from "../AgentStreamView"; +import { StreamEntry, StreamItem } from "../AgentStreamView/types"; import { ConnectorGeneratorSegment } from "../ConnectorGeneratorSegment"; -import RoleContainer from "../RoleContainter"; +import { ConfigurationCollectorSegment, ConfigurationCollectionData } from "../ConfigurationCollectorSegment"; import CheckpointSeparator from "../CheckpointSeparator"; import { Attachment, AttachmentStatus, TaskApprovalRequest } from "@wso2/ballerina-core"; -import { AIChatView, Header, HeaderButtons, ChatMessage, Badge } from "../../styles"; +import { AIChatView, Header, HeaderButtons, ChatMessage, Badge, ResetsInBadge, ApprovalOverlay, OverlayMessage } from "../../styles"; import ReferenceDropdown from "../ReferenceDropdown"; import { VSCodeButton } from "@vscode/webview-ui-toolkit/react"; import MarkdownRenderer from "../MarkdownRenderer"; @@ -68,11 +73,12 @@ import { SYSTEM_ERROR_SECRET } from "../AIChatInput/constants"; import { CodeSegment } from "../CodeSegment"; import AttachmentBox, { AttachmentsContainer } from "../AttachmentBox"; import Footer from "./Footer"; +import { AgentMode } from "../AIChatInput/ModeToggle"; import ApprovalFooter from "./Footer/ApprovalFooter"; import { useFooterLogic } from "./Footer/useFooterLogic"; import { SettingsPanel } from "../../SettingsPanel"; import WelcomeMessage from "./Welcome"; -import { getOnboardingOpens, incrementOnboardingOpens, convertToUIMessages, isContainsSyntaxError, ChatIndexes } from "./utils/utils"; +import { getOnboardingOpens, incrementOnboardingOpens, convertToUIMessages, isContainsSyntaxError } from "./utils/utils"; import FeedbackBar from "./../FeedbackBar"; import { useFeedback } from "./utils/useFeedback"; @@ -82,41 +88,79 @@ import ReviewActions from "../ReviewActions"; const NO_DRIFT_FOUND = "No drift identified between the code and the documentation."; const DRIFT_CHECK_ERROR = "Failed to check drift between the code and the documentation. Please try again."; -const GENERATE_CODE_AGAINST_THE_PROVIDED_REQUIREMENTS = "Generate code based on the following requirements: "; -const GENERATE_CODE_AGAINST_THE_PROVIDED_REQUIREMENTS_TRIMMED = GENERATE_CODE_AGAINST_THE_PROVIDED_REQUIREMENTS.trim(); +const USAGE_EXCEEDED_THRESHOLD_PERCENT = 3; -/** - * Formats a file path into a user-friendly display name - * - Removes .bal extension - * - Replaces _ and - with spaces - * - Preserves directory structure for context (e.g., "tests/") - */ -function formatFileNameForDisplay(filePath: string): string { - // Remove .bal extension - let displayName = filePath.replace(/\.bal$/, ''); - - // Extract directory and filename - const lastSlashIndex = displayName.lastIndexOf('/'); - if (lastSlashIndex !== -1) { - const directory = displayName.substring(0, lastSlashIndex + 1); - const fileName = displayName.substring(lastSlashIndex + 1); - - // Replace _ and - with spaces in the filename only - const formattedFileName = fileName.replace(/[_-]/g, ' '); - displayName = directory + formattedFileName; - } else { - // No directory, just format the filename - displayName = displayName.replace(/[_-]/g, ' '); +//TODO: Add better error handling from backend. stream error type and non 200 status codes + +const MessageBody = styled.div<{ isUserMessage: boolean }>(({ isUserMessage }: { isUserMessage: boolean }) => ({ + display: "flex", + flexDirection: "column", + width: isUserMessage ? "fit-content" : "100%", + maxWidth: isUserMessage ? "85%" : "100%", + marginLeft: isUserMessage ? "auto" : "0", + padding: isUserMessage ? "12px 14px" : "0", + border: isUserMessage ? "1px solid var(--vscode-panel-border)" : "none", + borderRadius: isUserMessage ? "12px" : "0", + background: isUserMessage ? "var(--vscode-editor-inactiveSelectionBackground)" : "transparent", + overflowWrap: "anywhere", +})); + +// ── Agent stream serialization ──────────────────────────────────────────────── + +function serializeStream(entries: StreamEntry[], existingContent: string): string { + const blob = `${JSON.stringify({ entries })}`; + if (existingContent.includes("")) { + return existingContent.replace(/[\s\S]*?<\/agentstream>/, blob); } + return existingContent + blob; +} - return displayName; +function parseStream(content: string): StreamEntry[] { + const match = content.match(/([\s\S]*?)<\/agentstream>/); + if (!match) return []; + try { return JSON.parse(match[1]).entries ?? []; } catch { return []; } } -//TODO: Add better error handling from backend. stream error type and non 200 status codes +function appendToLastEntry(entries: StreamEntry[], item: StreamItem): StreamEntry[] { + if (entries.length === 0) return [{ description: "", items: [item] }]; + const last = entries[entries.length - 1]; + return [...entries.slice(0, -1), { ...last, items: [...last.items, item] }]; +} const AIChat: React.FC = () => { const { rpcClient } = useRpcContext(); const [messages, setMessages] = useState>([]); + + const getLatestAssistantMessageIndex = (chatMessages: Array<{ role: string }>): number => { + for (let i = chatMessages.length - 1; i >= 0; i--) { + const role = chatMessages[i]?.role; + if (role === "Copilot" || role === "assistant") { + return i; + } + } + return -1; + }; + + const ensureAssistantMessage = ( + chatMessages: Array<{ role: string; content: string; type: string; checkpointId?: string; messageId?: string }> + ): number => { + let targetIndex = getLatestAssistantMessageIndex(chatMessages); + if (targetIndex === -1) { + chatMessages.push({ role: "Copilot", content: "", type: "assistant_message" }); + targetIndex = chatMessages.length - 1; + } + return targetIndex; + }; + + const updateLastMessage = (updater: (content: string) => string) => { + setMessages((prevMessages) => { + const newMessages = [...prevMessages]; + const targetIndex = ensureAssistantMessage(newMessages); + newMessages[targetIndex].content = updater(newMessages[targetIndex].content); + return newMessages; + }); + }; + const [isLoading, setIsLoading] = useState(false); const [lastQuestionIndex, setLastQuestionIndex] = useState(-1); const [isCodeLoading, setIsCodeLoading] = useState(false); @@ -130,18 +174,22 @@ const AIChat: React.FC = () => { const [showSettings, setShowSettings] = useState(false); const [isAutoApproveEnabled, setIsAutoApproveEnabled] = useState(false); - const [isPlanModeEnabled, setIsPlanModeEnabled] = useState(false); - const [isPlanModeFeatureEnabled, setIsPlanModeFeatureEnabled] = useState(false); + const [agentMode, setAgentMode] = useState(AgentMode.Edit); const [showReviewActions, setShowReviewActions] = useState(false); const [availableCheckpointIds, setAvailableCheckpointIds] = useState>(new Set()); const [approvalRequest, setApprovalRequest] = useState(null); + const [approvalOverlay, setApprovalOverlay] = useState({ show: false }); const [currentFileArray, setCurrentFileArray] = useState([]); const [codeContext, setCodeContext] = useState(undefined); + const [usage, setUsage] = useState<{ remainingUsagePercentage: number; resetsIn: number } | null>(null); + const [isUsageExceeded, setIsUsageExceeded] = useState(false); + //TODO: Need a better way of storing data related to last generation to be in the repair state. const currentDiagnosticsRef = useRef([]); + const codeContextRef = useRef(undefined); const functionsRef = useRef([]); const lastAttatchmentsRef = useRef([]); const aiChatInputRef = useRef(null); @@ -162,6 +210,11 @@ const AIChat: React.FC = () => { currentDiagnosticsRef, }); + const updateCodeContext = (context?: CodeContext) => { + codeContextRef.current = context; + setCodeContext(context); + }; + /** * Effect: Initialize the component with initial prompts */ @@ -172,8 +225,6 @@ const AIChat: React.FC = () => { .getDefaultPrompt() .then((defaultPrompt: AIPanelPrompt) => { if (defaultPrompt) { - aiChatInputRef.current?.setInputContent(defaultPrompt); - // Extract CodeContext from both command-template metadata and text-type direct param const codeCtx = defaultPrompt.type === 'command-template' ? defaultPrompt.metadata?.codeContext @@ -181,14 +232,22 @@ const AIChat: React.FC = () => { ? defaultPrompt.codeContext : undefined; - if (codeCtx) { - setCodeContext(codeCtx); - } + updateCodeContext(codeCtx); // Handle plan mode for text-type prompts if (defaultPrompt.type === 'text') { - setIsPlanModeEnabled(defaultPrompt.planMode); + setAgentMode(defaultPrompt.planMode ? AgentMode.Plan : AgentMode.Edit); + + if (defaultPrompt.autoSubmit && defaultPrompt.text.trim().length > 0) { + void handleSend({ + input: [{ content: defaultPrompt.text }], + attachments: [], + }); + return; + } } + + aiChatInputRef.current?.setInputContent(defaultPrompt); } }); }; @@ -210,6 +269,46 @@ const AIChat: React.FC = () => { }, []); /* REFACTORED CODE END [2] */ + const formatResetsIn = (seconds: number): string => { + const days = Math.floor(seconds / 86400); + if (days >= 1) return `${days} day${days > 1 ? 's' : ''}`; + const hours = Math.floor(seconds / 3600); + if (hours >= 1) return `${hours} hour${hours > 1 ? 's' : ''}`; + const mins = Math.floor(seconds / 60); + return `${mins} min${mins > 1 ? 's' : ''}`; + }; + + const formatResetsInExact = (seconds: number): string => { + const days = Math.floor(seconds / 86400); + const hours = Math.floor((seconds % 86400) / 3600); + const mins = Math.floor((seconds % 3600) / 60); + const parts: string[] = []; + if (days > 0) parts.push(`${days} day${days > 1 ? 's' : ''}`); + if (hours > 0) parts.push(`${hours} hour${hours > 1 ? 's' : ''}`); + if (mins > 0) parts.push(`${mins} minute${mins > 1 ? 's' : ''}`); + return parts.length > 0 ? parts.join(', ') : 'less than a minute'; + }; + + const fetchUsage = async () => { + try { + const result = await rpcClient.getAiPanelRpcClient().getUsage(); + if (result) { + setUsage(result); + setIsUsageExceeded(result.resetsIn !== -1 && result.remainingUsagePercentage < USAGE_EXCEEDED_THRESHOLD_PERCENT); + } else { + setUsage(null); + setIsUsageExceeded(false); + } + } catch (e) { + console.error("Failed to fetch usage:", e); + // Reset on error to avoid permanently blocking the user on transient failures + setUsage(null); + setIsUsageExceeded(false); + } + }; + + useEffect(() => { fetchUsage(); }, []); + const handleCheckpointRestore = async (checkpointId: string) => { try { // Call backend to restore checkpoint (files + chat history) @@ -254,19 +353,6 @@ const AIChat: React.FC = () => { initializeCheckpoints(); }, [rpcClient]); - useEffect(() => { - const checkPlanModeFeatureEnabled = async () => { - try { - const enabled = await rpcClient.getAiPanelRpcClient().isPlanModeFeatureEnabled(); - setIsPlanModeFeatureEnabled(enabled); - } catch (error) { - console.error("[AIChat] Failed to check plan mode feature enabled status:", error); - setIsPlanModeFeatureEnabled(false); - } - }; - - checkPlanModeFeatureEnabled(); - }, [rpcClient]); useEffect(() => { const handleHideReviewActions = () => { @@ -277,6 +363,15 @@ const AIChat: React.FC = () => { rpcClient.onHideReviewActions(handleHideReviewActions); }, [rpcClient]); + useEffect(() => { + const handleApprovalOverlay = (data: ApprovalOverlayState) => { + console.log("[AIChat] Approval overlay notification:", data); + setApprovalOverlay(data); + }; + + rpcClient.onApprovalOverlayState(handleApprovalOverlay); + }, [rpcClient]); + /** * Effect: Load initial chat history from aiChatMachine context */ @@ -286,7 +381,7 @@ const AIChat: React.FC = () => { const historyMessages = await rpcClient.getAiPanelRpcClient().getChatMessages(); if (historyMessages && historyMessages.length > 0) { const uiMessages = convertToUIMessages(historyMessages); - setMessages(uiMessages); + setMessages((prevMessages) => (prevMessages.length > 0 ? prevMessages : uiMessages)); } } catch (error) { console.error('[AIChat] Failed to load initial chat history:', error); @@ -325,232 +420,122 @@ const AIChat: React.FC = () => { }); rpcClient?.onChatNotify(async (response: ChatNotify) => { - // TODO: Need to handle the content as step blocks const type = response.type; + if (type === "content_block") { const content = response.content; - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - newMessages[newMessages.length - 1].content += content; - return newMessages; - }); - } else if (type === "content_replace") { - const content = response.content; - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - newMessages[newMessages.length - 1].content = content; - return newMessages; + if (content === "") return; + setMessages(prevMessages => { + const msgs = [...prevMessages]; + const targetIndex = ensureAssistantMessage(msgs); + const last = msgs[targetIndex]; + const entries = parseStream(last.content); + // Merge into trailing text item of the last entry if possible, otherwise append + if (entries.length > 0) { + const lastEntry = entries[entries.length - 1]; + const lastItem = lastEntry.items[lastEntry.items.length - 1]; + if (lastItem?.kind === "text") { + const updatedItems = [...lastEntry.items.slice(0, -1), { ...lastItem, text: lastItem.text + content }]; + const updated = [...entries.slice(0, -1), { ...lastEntry, items: updatedItems }]; + msgs[targetIndex] = { ...last, content: serializeStream(updated, last.content) }; + return msgs; + } + } + const updated = appendToLastEntry(entries, { kind: "text", text: content }); + msgs[targetIndex] = { ...last, content: serializeStream(updated, last.content) }; + return msgs; }); + } else if (type === "tool_call") { - if (response.toolName == "LibraryProviderTool") { - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - if (newMessages.length > 0) { - newMessages[newMessages.length - 1].content += `\n\nAnalyzing request & selecting libraries...`; - } - return newMessages; - }); - } else if (response.toolName == "HealthcareLibraryProviderTool") { - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - if (newMessages.length > 0) { - newMessages[newMessages.length - 1].content += `\n\nAnalyzing request & selecting healthcare libraries...`; - } - return newMessages; - }); - } else if (response.toolName === "task_write") { - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - if (newMessages.length > 0) { - newMessages[newMessages.length - 1].content += `\n\nPlanning...`; - } - return newMessages; - }); - } else if (["file_write", "file_edit", "file_batch_edit"].includes(response.toolName)) { - const fileName = response.toolInput?.fileName || "file"; - const displayName = formatFileNameForDisplay(fileName); - const message = response.toolName === "file_write" - ? `Creating ${displayName}...` - : `Updating ${displayName}...`; - - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - if (newMessages.length > 0) { - newMessages[newMessages.length - 1].content += `\n\n${message}`; - } - return newMessages; - }); - } else if (response.toolName === "getCompilationErrors") { - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - if (newMessages.length > 0) { - newMessages[newMessages.length - 1].content += `\n\nChecking for errors...`; - } - return newMessages; - }); - } + const newItem: StreamItem = { kind: "tool_call", toolCallId: response.toolCallId, toolName: response.toolName, toolInput: response.toolInput }; + setMessages(prevMessages => { + const msgs = [...prevMessages]; + const targetIndex = ensureAssistantMessage(msgs); + const last = msgs[targetIndex]; + const entries = parseStream(last.content); + const updated = appendToLastEntry(entries, newItem); + msgs[targetIndex] = { ...last, content: serializeStream(updated, last.content) }; + return msgs; + }); + } else if (type === "tool_result") { - if (response.toolName == "LibraryProviderTool") { - const libraryNames = response.toolOutput; - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - if (newMessages.length > 0) { - if (libraryNames.length === 0) { - newMessages[newMessages.length - 1].content = newMessages[ - newMessages.length - 1 - ].content.replace( - `Analyzing request & selecting libraries...`, - `No relevant libraries found.` - ); - } else { - newMessages[newMessages.length - 1].content = newMessages[ - newMessages.length - 1 - ].content.replace( - `Analyzing request & selecting libraries...`, - `Fetched libraries: [${libraryNames.join(", ")}]` + if (response.toolName === "TaskWrite") { + const tasks: Array<{ status: string; description: string }> = response.toolOutput?.tasks ?? []; + const inProgressTask = tasks.find(t => t.status === "in_progress"); + const lastCompletedTask = [...tasks].reverse().find(t => t.status === "completed"); + setMessages(prevMessages => { + const msgs = [...prevMessages]; + const targetIndex = ensureAssistantMessage(msgs); + const last = msgs[targetIndex]; + let entries = parseStream(last.content); + if (inProgressTask) { + // Push a named entry for this task (skip if already present) + if (entries.some(e => e.description === inProgressTask.description)) return prevMessages; + entries = [...entries, { description: inProgressTask.description, items: [], status: "in_progress" as const }]; + } else { + // Mark the just-completed named entry as done + if (lastCompletedTask) { + entries = entries.map(e => + e.description === lastCompletedTask.description + ? { ...e, status: "completed" as const } + : e ); } - } - return newMessages; - }); - } else if (response.toolName == "HealthcareLibraryProviderTool") { - const libraryNames = response.toolOutput; - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - if (newMessages.length > 0) { - if (libraryNames.length === 0) { - newMessages[newMessages.length - 1].content = newMessages[ - newMessages.length - 1 - ].content.replace( - `Analyzing request & selecting healthcare libraries...`, - `No relevant healthcare libraries found.` - ); - } else { - newMessages[newMessages.length - 1].content = newMessages[ - newMessages.length - 1 - ].content.replace( - `Analyzing request & selecting healthcare libraries...`, - `Fetched healthcare libraries: [${libraryNames.join(", ")}]` - ); + // Push a floating entry for subsequent content (if not already present) + const lastEntry = entries[entries.length - 1]; + if (!lastEntry || lastEntry.description !== "") { + entries = [...entries, { description: "", items: [] }]; } } - return newMessages; + msgs[targetIndex] = { ...last, content: serializeStream(entries, last.content) }; + return msgs; }); - } else if (response.toolName == "TaskWrite") { - const taskOutput = response.toolOutput; - - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - if (newMessages.length > 0) { - if (!taskOutput.success || !taskOutput.allTasks || taskOutput.allTasks.length === 0) { - const isInternalError = taskOutput.message && - taskOutput.message.includes("ERROR: Missing"); - - const indicatorPattern = /Planning\.\.\.<\/toolcall>/; - const todoPattern = /.*?<\/todo>/s; - - if (isInternalError) { - newMessages[newMessages.length - 1].content = newMessages[ - newMessages.length - 1 - ].content.replace(indicatorPattern, "").replace(todoPattern, ""); - } else { - let simplifiedMessage = "Task update failed"; - - if (taskOutput.message) { - const commentMatch = taskOutput.message.match(/User comment: "([^"]+)"/); - const userComment = commentMatch ? commentMatch[1] : null; - - if (taskOutput.message.includes("Plan not approved")) { - simplifiedMessage = userComment - ? `Plan not approved: ${userComment}` - : "Plan not approved"; - } - } - - newMessages[newMessages.length - 1].content = newMessages[ - newMessages.length - 1 - ].content.replace(indicatorPattern, `${simplifiedMessage}`).replace(todoPattern, ""); - } - } else { - const todoData = { - tasks: taskOutput.allTasks, - message: taskOutput.message - }; - const todoJson = JSON.stringify(todoData); - - const lastMessageContent = newMessages[newMessages.length - 1].content; - const todoPattern = /.*?<\/todo>/s; - - if (todoPattern.test(lastMessageContent)) { - // Replace existing todo section - newMessages[newMessages.length - 1].content = lastMessageContent.replace( - todoPattern, - `${todoJson}` - ); - } else { - // Add new todo section - newMessages[newMessages.length - 1].content += `\n\n${todoJson}`; - } - } + } else { + // Replace the matching tool_call item with tool_result + setMessages(prevMessages => { + const msgs = [...prevMessages]; + const targetIndex = ensureAssistantMessage(msgs); + const last = msgs[targetIndex]; + const entries = parseStream(last.content); + const resultItem: StreamItem = { kind: "tool_result", toolCallId: response.toolCallId, toolName: response.toolName, toolOutput: response.toolOutput, failed: (response as any).failed }; + let matched = false; + const updated = entries.map(entry => { + if (matched) return entry; + const idx = entry.items.findIndex(i => i.kind === "tool_call" && i.toolCallId === response.toolCallId); + if (idx === -1) return entry; + matched = true; + const updatedItems = entry.items.map((item, i) => i === idx ? resultItem : item); + return { ...entry, items: updatedItems }; + }); + if (!matched) { + // No matching call found — append as new item to last entry + msgs[targetIndex] = { ...last, content: serializeStream(appendToLastEntry(entries, resultItem), last.content) }; + } else { + msgs[targetIndex] = { ...last, content: serializeStream(updated, last.content) }; } - return newMessages; + return msgs; }); - } else if (["file_write", "file_edit", "file_batch_edit"].includes(response.toolName)) { - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - if (newMessages.length > 0) { - const lastMessageContent = newMessages[newMessages.length - 1].content; - const creatingPattern = /Creating (.+?)\.\.\.<\/toolcall>/; - const updatingPattern = /Updating (.+?)\.\.\.<\/toolcall>/; - - let updatedContent = lastMessageContent; - - if (creatingPattern.test(lastMessageContent)) { - // For file_write, check if it was an update or create - const action = response.toolOutput?.action; - const resultText = action === 'updated' ? 'Updated' : 'Created'; - updatedContent = lastMessageContent.replace( - creatingPattern, - (_match, fileName) => `${resultText} ${fileName}` - ); - } else if (updatingPattern.test(lastMessageContent)) { - updatedContent = lastMessageContent.replace( - updatingPattern, - (_match, fileName) => `Updated ${fileName}` - ); - } + } - newMessages[newMessages.length - 1].content = updatedContent; - } - return newMessages; - }); - } else if (response.toolName === "getCompilationErrors") { - const diagnosticsOutput = response.toolOutput; - // Backend already filters for errors only (severity === 1), so no need to filter again - const errors = diagnosticsOutput?.diagnostics || []; - const errorCount = errors.length; - - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - if (newMessages.length > 0) { - const lastMessageContent = newMessages[newMessages.length - 1].content; - const checkingPattern = /Checking for errors\.\.\.<\/toolcall>/; - - const message = errorCount === 0 - ? "No errors found" - : `Found ${errorCount} error${errorCount > 1 ? 's' : ''}`; - - const updatedContent = lastMessageContent.replace( - checkingPattern, - `${message}` - ); - - newMessages[newMessages.length - 1].content = updatedContent; - } - return newMessages; + } else if (type === "task_approval_request") { + if (response.approvalType === "plan") { + setMessages(prevMessages => { + const msgs = [...prevMessages]; + const targetIndex = ensureAssistantMessage(msgs); + const last = msgs[targetIndex]; + const entries = parseStream(last.content); + const planItem: StreamItem = { kind: "plan", tasks: response.tasks, message: response.message }; + const updated = appendToLastEntry(entries, planItem); + msgs[targetIndex] = { ...last, content: serializeStream(updated, last.content) }; + return msgs; }); } - } else if (type === "task_approval_request") { + + if (isAutoApproveEnabled && response.approvalType === "completion") { + await rpcClient.getAiPanelRpcClient().approveTask({ requestId: response.requestId }); + return; + } + setApprovalRequest({ type: "task_approval_request", requestId: response.requestId, @@ -559,57 +544,19 @@ const AIChat: React.FC = () => { taskDescription: response.taskDescription, message: response.message, }); - if (response.approvalType === "plan") { - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - if (newMessages.length > 0) { - const todoData = { - tasks: response.tasks, - message: response.message - }; - const todoJson = JSON.stringify(todoData); - let lastMessageContent = newMessages[newMessages.length - 1].content; - - const planningPattern = /Planning\.\.\.<\/toolcall>/; - const todoPattern = /.*?<\/todo>/s; - - lastMessageContent = lastMessageContent.replace(planningPattern, ''); - lastMessageContent = lastMessageContent.replace(todoPattern, ''); - - newMessages[newMessages.length - 1].content = lastMessageContent + `\n\n${todoJson}`; - } - return newMessages; - }); - } else if (response.approvalType === "completion") { - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - if (newMessages.length > 0) { - const todoData = { - tasks: response.tasks, - message: response.message - }; - const todoJson = JSON.stringify(todoData); - let lastMessageContent = newMessages[newMessages.length - 1].content; - - const todoPattern = /.*?<\/todo>/s; - lastMessageContent = lastMessageContent.replace(todoPattern, `${todoJson}`); - - newMessages[newMessages.length - 1].content = lastMessageContent; - } - return newMessages; - }); - } + } else if (type === "intermediary_state") { const state = response.state; - // Check if it's a documentation state by looking for specific properties if ("serviceName" in state && "documentation" in state) { setDocGenIntermediaryState(state as DocumentationGeneratorIntermediaryState); } + } else if (type === "generated_sources") { setCurrentFileArray(response.fileArray); + } else if (type === "connector_generation_notification") { const connectorNotification = response as any; - const connectorJson = JSON.stringify({ + const connectorData = { requestId: connectorNotification.requestId, stage: connectorNotification.stage, serviceName: connectorNotification.serviceName, @@ -620,118 +567,129 @@ const AIChat: React.FC = () => { message: connectorNotification.message, inputMethod: connectorNotification.inputMethod, sourceIdentifier: connectorNotification.sourceIdentifier + }; + setMessages(prevMessages => { + const msgs = [...prevMessages]; + const targetIndex = ensureAssistantMessage(msgs); + const last = msgs[targetIndex]; + const entries = parseStream(last.content); + let found = false; + let updated = entries.map(entry => { + const idx = entry.items.findIndex(item => item.kind === "connector" && (item.data as any)?.requestId === connectorData.requestId); + if (idx === -1) return entry; + found = true; + return { ...entry, items: entry.items.map((item, i) => i === idx ? { kind: "connector" as const, data: connectorData } : item) }; + }); + if (!found) updated = appendToLastEntry(entries, { kind: "connector", data: connectorData }); + msgs[targetIndex] = { ...last, content: serializeStream(updated, last.content) }; + return msgs; }); - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - if (newMessages.length > 0) { - const lastMessageContent = newMessages[newMessages.length - 1].content; - - const escapeRegex = (str: string): string => { - return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - }; - - const searchPattern = `{"requestId":"${connectorNotification.requestId}"`; - - if (lastMessageContent.includes(searchPattern)) { - const replacePattern = new RegExp( - `[^<]*${escapeRegex(connectorNotification.requestId)}[^<]*`, - 's' - ); - newMessages[newMessages.length - 1].content = lastMessageContent.replace( - replacePattern, - `${connectorJson}` - ); - } else { - newMessages[newMessages.length - 1].content += `\n\n${connectorJson}`; - } - } - return newMessages; + } else if (type === "configuration_collection_event") { + const configurationNotification = response as any; + const configurationData: ConfigurationCollectionData = { + requestId: configurationNotification.requestId, + stage: configurationNotification.stage, + variables: configurationNotification.variables, + existingValues: configurationNotification.existingValues, + message: configurationNotification.message, + isTestConfig: configurationNotification.isTestConfig, + error: configurationNotification.error + }; + setMessages(prevMessages => { + const msgs = [...prevMessages]; + const targetIndex = ensureAssistantMessage(msgs); + const last = msgs[targetIndex]; + const entries = parseStream(last.content); + let found = false; + let updated = entries.map(entry => { + const idx = entry.items.findIndex(item => item.kind === "config" && (item.data as any)?.requestId === configurationData.requestId); + if (idx === -1) return entry; + found = true; + return { ...entry, items: entry.items.map((item, i) => i === idx ? { kind: "config" as const, data: configurationData } : item) }; + }); + if (!found) updated = appendToLastEntry(entries, { kind: "config", data: configurationData }); + msgs[targetIndex] = { ...last, content: serializeStream(updated, last.content) }; + return msgs; }); + } else if (type === "diagnostics") { - //TODO: Handle this in review mode - const content = response.diagnostics; - currentDiagnosticsRef.current = content; + currentDiagnosticsRef.current = response.diagnostics; + } else if ((response as any).type === "review_actions") { setShowReviewActions(true); + } else if (type === "messages") { - const messages = response.messages; - messagesRef.current = messages; + messagesRef.current = response.messages; + } else if (type === "stop") { console.log("Received stop signal"); setIsCodeLoading(false); setIsLoading(false); + fetchUsage(); + } else if (type === "abort") { console.log("Received abort signal"); - const interruptedMessage = "\n\n*[Request interrupted by user]*"; - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - if (newMessages.length > 0) { - newMessages[newMessages.length - 1].content += interruptedMessage; - } else { - // Edge case: abort before any messages - newMessages.push({ - role: "assistant", - content: interruptedMessage, - type: "text" - }); - } - return newMessages; + const abortItem: StreamItem = { kind: "text", text: "*[Request interrupted by user]*" }; + setMessages(prevMessages => { + const msgs = [...prevMessages]; + const targetIndex = ensureAssistantMessage(msgs); + const last = msgs[targetIndex]; + const entries = parseStream(last.content); + const updated = appendToLastEntry(entries, abortItem); + msgs[targetIndex] = { ...last, content: serializeStream(updated, last.content) }; + return msgs; }); setIsCodeLoading(false); setIsLoading(false); + } else if (type === "save_chat") { console.log("Received save_chat signal"); - const messageId = response.messageId; - - // Update chat message in state machine with UI message + const assistantIndex = getLatestAssistantMessageIndex(messages); + const contentToSave = assistantIndex >= 0 ? messages[assistantIndex]?.content : messages[messages.length - 1]?.content; await rpcClient.getAiPanelRpcClient().updateChatMessage({ - messageId, - content: messages[messages.length - 1].content + messageId: response.messageId, + content: contentToSave || "", }); + } else if (type === "error") { console.log("Received error signal"); const errorContent = response.content; const errorTemplate = `\n\n${errorContent}`; - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - let content = newMessages[newMessages.length - 1].content; - - // Check if there's an unclosed code block and close it properly - const codeBlockPattern = /[\s]*```\w+/g; - const openCodeBlocks = (content.match(codeBlockPattern) || []).length; - const closedCodeBlocks = (content.match(/<\/code>/g) || []).length; - - if (openCodeBlocks > closedCodeBlocks) { - // Check what's missing at the end - const endsWithPartialClose = /```\s*<\/cod?e?$/.test(content.trim()); - const endsWithBackticks = /```\s*$/.test(content.trim()); - const endsWithPartialBackticks = /`{1,2}$/.test(content.trim()); - - if (endsWithPartialClose) { - // Remove partial closing and add complete one - content = content.replace(/```\s*<\/cod?e?$/, ""); - content += "\n```\n"; - } else if (endsWithBackticks) { - // Already has ```, just need - content += "\n"; - } else if (endsWithPartialBackticks) { - // Remove partial backticks and add complete closing - content = content.replace(/`{1,2}$/, ""); - content += "\n```\n"; - } else { - // No closing elements, add both - content += "\n```\n"; - } + setMessages((prevMessages) => { + const newMessages = [...prevMessages]; + const targetIndex = ensureAssistantMessage(newMessages); + let content = newMessages[targetIndex].content; + + // Check if there's an unclosed code block and close it properly + const codeBlockPattern = /[\s]*```\w+/g; + const openCodeBlocks = (content.match(codeBlockPattern) || []).length; + const closedCodeBlocks = (content.match(/<\/code>/g) || []).length; + + if (openCodeBlocks > closedCodeBlocks) { + const endsWithPartialClose = /```\s*<\/cod?e?$/.test(content.trim()); + const endsWithBackticks = /```\s*$/.test(content.trim()); + const endsWithPartialBackticks = /`{1,2}$/.test(content.trim()); + + if (endsWithPartialClose) { + content = content.replace(/```\s*<\/cod?e?$/, ""); + content += "\n```\n"; + } else if (endsWithBackticks) { + content += "\n"; + } else if (endsWithPartialBackticks) { + content = content.replace(/`{1,2}$/, ""); + content += "\n```\n"; + } else { + content += "\n```\n"; } + } - newMessages[newMessages.length - 1].content = content + errorTemplate; - console.log(newMessages); - return newMessages; - }); - setIsCodeLoading(false); - setIsLoading(false); - isErrorChunkReceivedRef.current = true; + newMessages[targetIndex].content = content + errorTemplate; + return newMessages; + }); + setIsCodeLoading(false); + setIsLoading(false); + isErrorChunkReceivedRef.current = true; } }); @@ -806,26 +764,15 @@ const AIChat: React.FC = () => { setIsLoading(false); setIsCodeLoading(false); if (error.name === "AbortError") { - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - newMessages[ - newMessages.length - 1 - ].content += `\n\nGeneration stopped by the user`; - return newMessages; - }); + updateLastMessage((lastContent) => + lastContent + `\n\nGeneration stopped by the user` + ); } else { - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; + updateLastMessage((lastContent) => { if (error && "message" in error) { - newMessages[ - newMessages.length - 1 - ].content += `\n\n${error.message}`; - } else { - newMessages[ - newMessages.length - 1 - ].content += `\n\n${error}`; + return lastContent + `\n\n${error.message}`; } - return newMessages; + return lastContent + `\n\n${error}`; }); } } @@ -840,9 +787,8 @@ const AIChat: React.FC = () => { return; } rpcClient.getAiPanelRpcClient().clearInitialPrompt(); - var context: GetWorkspaceContextResponse[] = []; - setMessages((prevMessages) => prevMessages.filter((message, index) => message.type !== "label")); - setMessages((prevMessages) => prevMessages.filter((message, index) => message.type !== "question")); + setMessages((prevMessages) => prevMessages.filter((message) => message.type !== "label")); + setMessages((prevMessages) => prevMessages.filter((message) => message.type !== "question")); setIsLoading(true); isErrorChunkReceivedRef.current = false; setMessages((prevMessages) => @@ -1018,9 +964,7 @@ const AIChat: React.FC = () => { const handleAddAllCodeSegmentsToWorkspace = async ( codeSegments: any, setIsCodeAdded: React.Dispatch>, - command: string, - filePaths?: SourceFile[] - ) => { + command: string ) => { console.log("Add to integration called. Command: ", command); const fileChanges: FileChanges[] = []; for (let { segmentText, filePath } of codeSegments) { @@ -1125,11 +1069,7 @@ const AIChat: React.FC = () => { formatted_response = formatted_response.replace(referenceRegex, referencesTag); } - setMessages((prevMessages) => { - const newMessages = [...prevMessages]; - newMessages[newMessages.length - 1].content = formatted_response; - return newMessages; - }); + updateLastMessage(() => formatted_response); setIsLoading(false); } catch (error) { setIsLoading(false); @@ -1152,9 +1092,10 @@ const AIChat: React.FC = () => { content: file.content, })); - console.log("Submitting agent prompt:", { useCase, isPlanModeEnabled, codeContext, operationType, fileAttatchments }); + const currentCodeContext = codeContextRef.current; + console.log("Submitting agent prompt:", { useCase, agentMode, codeContext: currentCodeContext, operationType, fileAttatchments }); rpcClient.getAiPanelRpcClient().generateAgent({ - usecase: useCase, isPlanMode: isPlanModeEnabled, codeContext: codeContext, operationType, fileAttachmentContents: fileAttatchments + usecase: useCase, isPlanMode: agentMode === AgentMode.Plan, codeContext: currentCodeContext, operationType, fileAttachmentContents: fileAttatchments }) } @@ -1174,7 +1115,6 @@ const AIChat: React.FC = () => { setMessages([]); setApprovalRequest(null); setShowReviewActions(false); - await rpcClient.getAiPanelRpcClient().clearChat(); } @@ -1183,9 +1123,9 @@ const AIChat: React.FC = () => { setIsAutoApproveEnabled(newValue); }; - const handleTogglePlanMode = () => { - const newValue = !isPlanModeEnabled; - setIsPlanModeEnabled(newValue); + const handleChangeAgentMode = (mode: AgentMode) => { + // message.content is already up-to-date with the serialized agent stream — nothing to persist here + setAgentMode(mode); }; const questionMessages = messages.filter((message) => message.type === "question"); @@ -1221,7 +1161,8 @@ const AIChat: React.FC = () => { // Update the message content to show "Saved" state setMessages((prevMessages) => { const newMessages = [...prevMessages]; - const lastMessage = newMessages[newMessages.length - 1]; + const targetIndex = ensureAssistantMessage(newMessages); + const lastMessage = newMessages[targetIndex]; if (lastMessage && lastMessage.content) { lastMessage.content = lastMessage.content.replace( / - )} - {isPlanModeFeatureEnabled && ( - - )} + + + + ); + } + + if (currentStage === "error" && data.error) { + return ( + +
+ + Configuration Collection Failed +
+ + {data.error.message} + Error Code: {data.error.code} + +
+ ); + } + + if (currentStage === "done") { + return ( + +
+ + {data.message} +
+
+ ); + } + + if (currentStage === "skipped") { + return ( + +
+ + {data.message} +
+
+ ); + } + + return null; +}; diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/MarkdownRenderer.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/MarkdownRenderer.tsx index ac1d2dd4bbb..b0ab0cf3156 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/MarkdownRenderer.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/MarkdownRenderer.tsx @@ -19,6 +19,7 @@ import React, { useEffect } from "react"; import ReactMarkdown from "react-markdown"; import rehypeRaw from "rehype-raw"; +import remarkGfm from "remark-gfm"; import hljs from "highlight.js"; import yaml from "highlight.js/lib/languages/yaml"; import { useRpcContext } from "@wso2/ballerina-rpc-client"; @@ -66,6 +67,57 @@ const markdownWrapperStyle: React.CSSProperties = { overflowWrap: "anywhere", }; +const tableStyle: React.CSSProperties = { + borderCollapse: "collapse", + width: "100%", + marginBottom: "8px", + fontSize: "13px", +}; + +const thStyle: React.CSSProperties = { + border: "1px solid var(--vscode-panel-border)", + padding: "6px 10px", + textAlign: "left", + fontWeight: 600, + backgroundColor: "var(--vscode-editor-inactiveSelectionBackground)", + color: "var(--vscode-editor-foreground)", +}; + +const tdStyle: React.CSSProperties = { + border: "1px solid var(--vscode-panel-border)", + padding: "5px 10px", + color: "var(--vscode-editor-foreground)", +}; + +const headingStyles: Record<"h1" | "h2" | "h3", React.CSSProperties> = { + h1: { + fontSize: "18px", + lineHeight: "26px", + margin: "14px 0 8px", + fontWeight: 700, + }, + h2: { + fontSize: "16px", + lineHeight: "24px", + margin: "12px 0 8px", + fontWeight: 700, + }, + h3: { + fontSize: "14px", + lineHeight: "22px", + margin: "10px 0 6px", + fontWeight: 650, + }, +}; + +const paragraphStyle: React.CSSProperties = { + margin: "8px 0", +}; + +const listStyle: React.CSSProperties = { + margin: "8px 0", +}; + const MarkdownRenderer: React.FC = ({ markdownContent }) => { const { rpcClient } = useRpcContext(); @@ -213,10 +265,24 @@ const MarkdownRenderer: React.FC = ({ markdownContent }) return (

{children}

, + h2: ({ children }: { children?: React.ReactNode }) =>

{children}

, + h3: ({ children }: { children?: React.ReactNode }) =>

{children}

, + p: ({ children }: { children?: React.ReactNode }) =>

{children}

, + ul: ({ children }: { children?: React.ReactNode }) =>
    {children}
, + ol: ({ children }: { children?: React.ReactNode }) =>
    {children}
, + table: ({ children }: { children?: React.ReactNode }) => ( +
+ {children}
+
+ ), + th: ({ children }: { children?: React.ReactNode }) => {children}, + td: ({ children }: { children?: React.ReactNode }) => {children}, } as any} > {safeContent} diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TodoSection.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TodoSection.tsx index 608deed2385..f66a78dd7f1 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TodoSection.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TodoSection.tsx @@ -16,287 +16,273 @@ * under the License. */ -import { keyframes } from "@emotion/css"; import styled from "@emotion/styled"; import React, { useState, useEffect, useRef } from "react"; import { Task } from "@wso2/ballerina-core"; -const spin = keyframes` - from { transform: rotate(0deg); } - to { transform: rotate(360deg); } -`; +// ── Animations ──────────────────────────────────────────────────────────────── -const TodoContainer = styled.div` - background-color: var(--vscode-editor-background); +// ── Container ───────────────────────────────────────────────────────────────── + +const Container = styled.div` + display: flex; + flex-direction: column; + margin: 10px 0 12px 0; + font-family: var(--vscode-font-family); border: 1px solid var(--vscode-panel-border); border-radius: 4px; - padding: 8px 10px; - margin: 6px 0; - font-family: var(--vscode-editor-font-family); - font-size: 12px; - color: var(--vscode-editor-foreground); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + padding: 5px 8px; `; -const TodoHeader = styled.div<{ clickable?: boolean }>` - font-weight: 500; - font-size: 12px; - margin-bottom: ${(props: { clickable?: boolean }) => props.clickable ? '0' : '6px'}; - padding-bottom: ${(props: { clickable?: boolean }) => props.clickable ? '6px' : '6px'}; - border-bottom: ${(props: { clickable?: boolean }) => - props.clickable ? 'none' : '1px solid var(--vscode-widget-border)'}; +// ── Header row ──────────────────────────────────────────────────────────────── + +const HeaderRow = styled.div` display: flex; align-items: center; - gap: 4px; - cursor: ${(props: { clickable?: boolean }) => props.clickable ? 'pointer' : 'default'}; + gap: 6px; + min-height: 24px; + cursor: pointer; user-select: none; - padding: 2px 4px; - border-radius: 3px; - transition: background-color 0.15s ease; + padding: 0 2px; &:hover { - background-color: ${(props: { clickable?: boolean }) => - props.clickable ? 'var(--vscode-list-hoverBackground)' : 'transparent'}; + opacity: 0.8; } `; const ChevronIcon = styled.span<{ expanded: boolean }>` transition: transform 0.2s ease; - transform: ${(props: { expanded: boolean }) => props.expanded ? 'rotate(90deg)' : 'rotate(0deg)'}; + transform: ${(props: { expanded: boolean }) => props.expanded ? "rotate(90deg)" : "rotate(0deg)"}; display: flex; align-items: center; + color: var(--vscode-descriptionForeground); + font-size: 11px; + flex-shrink: 0; `; -const MinimalTaskInfo = styled.span` +const HeaderLabel = styled.span` + font-size: 12px; + font-weight: 500; + color: var(--vscode-editor-foreground); + flex: 1; +`; + +const CollapsedActiveTask = styled.span` + font-size: 12px; color: var(--vscode-descriptionForeground); - font-weight: 400; - font-size: 11px; - margin-left: 4px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 220px; + flex: 1; +`; + +const ApprovalLabel = styled.span` + font-size: 12px; + font-weight: 500; + color: var(--vscode-descriptionForeground); + opacity: 0.75; + flex-shrink: 0; `; -const TodoList = styled.div` +const ApprovalComment = styled.span` + font-size: 12px; + color: var(--vscode-descriptionForeground); + opacity: 0.6; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + min-width: 0; + flex: 1; +`; + +// ── Task list (two-column: rail + content) ──────────────────────────────────── + +const TaskList = styled.div` display: flex; flex-direction: column; - gap: 4px; + margin-left: 8px; overflow-y: auto; - max-height: 250px; - padding: 0; + max-height: 200px; + padding-bottom: 4px; `; -const TodoItem = styled.div<{ status: string }>` +const TaskBlock = styled.div` display: flex; - align-items: center; - gap: 6px; - padding: 6px 8px; - border-radius: 3px; - background-color: ${(props: { status: string }) => - props.status === "completed" - ? "var(--vscode-list-hoverBackground)" - : props.status === "in_progress" - ? "rgba(75, 110, 175, 0.08)" - : "transparent"}; - opacity: ${(props: { status: string }) => (props.status === "completed" ? 0.6 : 1)}; - transition: all 0.2s ease; - border-left: 2px solid ${(props: { status: string }) => - props.status === "in_progress" - ? "var(--vscode-charts-blue)" - : props.status === "completed" - ? "var(--vscode-testing-iconPassed)" - : "transparent"}; + flex-direction: row; `; -const TodoIcon = styled.span<{ status: string }>` - flex-shrink: 0; +const TaskRail = styled.div<{ isLast: boolean }>` + position: relative; display: flex; + flex-direction: column; align-items: center; - justify-content: center; - width: 14px; - height: 14px; - - &.pending { - .codicon { - color: var(--vscode-descriptionForeground); - } - } + width: 16px; + flex-shrink: 0; - &.in_progress { - .codicon { - color: var(--vscode-charts-blue); - animation: ${spin} 1s linear infinite; - } + &::before { + content: ''; + position: absolute; + top: 10px; + bottom: ${(props: { isLast: boolean }) => props.isLast ? "4px" : "0"}; + left: 50%; + transform: translateX(-50%); + width: 1px; + background-color: var(--vscode-panel-border); + opacity: 0.8; } +`; - &.completed { - .codicon { - color: var(--vscode-testing-iconPassed); - } - } +const DotWrapper = styled.div` + position: relative; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 16px; + height: 20px; + flex-shrink: 0; + background-color: var(--vscode-editor-background); `; -const TodoText = styled.span<{ status: string }>` +const TaskContent = styled.div` + display: flex; + align-items: center; flex: 1; - text-decoration: ${(props: { status: string }) => - props.status === "completed" ? "line-through" : "none"}; - line-height: 16px; + min-width: 0; + padding-left: 5px; + min-height: 20px; `; -const TodoNumber = styled.span` - color: var(--vscode-descriptionForeground); - font-weight: 600; - margin-right: 2px; +const TaskLabel = styled.span<{ status: string }>` + font-size: 12px; + color: var(--vscode-editor-foreground); + opacity: ${(props: { status: string }) => + props.status === "completed" ? 0.5 : 1}; `; +// ── Node indicator ──────────────────────────────────────────────────────────── + +const Bullet = styled.span` + width: 6px; + height: 6px; + border-radius: 50%; + flex-shrink: 0; + background-color: var(--vscode-descriptionForeground); + opacity: 0.85; +`; + +// ── Component ───────────────────────────────────────────────────────────────── interface TodoSectionProps { tasks: Task[]; message?: string; - isLoading?: boolean; + initialExpanded?: boolean; + approvalStatus?: "approved" | "revised"; + approvalComment?: string; } -const getStatusIcon = (status: string, isLoading: boolean): { className: string; icon: string } => { - switch (status) { - case "in_progress": - return { - className: isLoading ? "in_progress" : "pending", - icon: isLoading ? "codicon-sync" : "codicon-circle-outline", - }; - case "review": - return { className: "review", icon: "codicon-eye" }; - case "completed": - return { className: "completed", icon: "codicon-check" }; - case "pending": - default: - return { className: "pending", icon: "codicon-circle-outline" }; - } -}; - -const TodoSection: React.FC = ({ tasks, message, isLoading = false }) => { - const [isExpanded, setIsExpanded] = useState(true); +const TodoSection: React.FC = ({ + tasks, + initialExpanded = true, + approvalStatus, + approvalComment, +}) => { + const [isExpanded, setIsExpanded] = useState(initialExpanded); const inProgressRef = useRef(null); - const todoListRef = useRef(null); + const listRef = useRef(null); const scrollTimeoutRef = useRef(null); - const completedCount = tasks.filter((t) => t.status === "completed").length; - const inProgressTask = tasks.find((t) => t.status === "in_progress"); - const allCompleted = completedCount === tasks.length; - const hasInProgress = !!inProgressTask; - const toggleExpanded = () => { - setIsExpanded(!isExpanded); - }; + const inProgressTask = tasks.find(t => t.status === "in_progress"); + const hasInProgress = !!inProgressTask; - const scrollToInProgress = () => { - if (inProgressRef.current) { - inProgressRef.current.scrollIntoView({ - behavior: "smooth", - block: "nearest", - }); + // Collapse once when approval status arrives + useEffect(() => { + if (approvalStatus) { + setIsExpanded(false); } - }; + }, [approvalStatus]); + // Scroll to in-progress task when expanded useEffect(() => { - if (isExpanded && hasInProgress) { - scrollToInProgress(); + if (isExpanded && hasInProgress && inProgressRef.current) { + inProgressRef.current.scrollIntoView({ behavior: "smooth", block: "nearest" }); } }, [isExpanded, inProgressTask?.description]); useEffect(() => { - const todoList = todoListRef.current; - if (!todoList || !hasInProgress) return; - + const list = listRef.current; + if (!list || !hasInProgress) return; const handleScroll = () => { - if (scrollTimeoutRef.current) { - clearTimeout(scrollTimeoutRef.current); - } - + if (scrollTimeoutRef.current) clearTimeout(scrollTimeoutRef.current); scrollTimeoutRef.current = setTimeout(() => { - scrollToInProgress(); + if (inProgressRef.current) { + inProgressRef.current.scrollIntoView({ behavior: "smooth", block: "nearest" }); + } }, 3000); }; - - todoList.addEventListener("scroll", handleScroll); - + list.addEventListener("scroll", handleScroll); return () => { - todoList.removeEventListener("scroll", handleScroll); - if (scrollTimeoutRef.current) { - clearTimeout(scrollTimeoutRef.current); - } + list.removeEventListener("scroll", handleScroll); + if (scrollTimeoutRef.current) clearTimeout(scrollTimeoutRef.current); }; }, [hasInProgress, inProgressTask?.description]); - const getStatusText = () => { - if (allCompleted) return "done"; - if (hasInProgress) return "building"; - return "ready"; - }; + const renderDot = (_status: string) => ; return ( - - + + {/* Header row */} + setIsExpanded(prev => !prev)}> - + - - - Build Steps ({completedCount}/{tasks.length} {getStatusText()}) - - {!isExpanded && inProgressTask && ( - - > {inProgressTask.description} - + {approvalStatus ? ( + <> + + {approvalStatus === "approved" ? "Plan approved" : "Plan revised"} + + {approvalStatus === "revised" && approvalComment && ( + — {approvalComment} + )} + + ) : ( + <> + Tasks + {!isExpanded && inProgressTask && ( + {inProgressTask.description} + )} + )} - + + + {/* Task list */} {isExpanded && ( - <> - {message && ( -
- {message} -
- )} - - {tasks.map((task, index) => { - const statusInfo = getStatusIcon(task.status, isLoading); - const isInProgress = task.status === "in_progress"; - const isReview = task.status === "review"; - return ( - - - - - - {index + 1}. + + {tasks.map((task, idx) => { + const isLast = idx === tasks.length - 1; + const isInProgress = task.status === "in_progress"; + return ( + + + + {renderDot(task.status)} + + + + {task.description} - - - ); - })} - - + + + + ); + })} + )} -
+ ); }; diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/ToolCallGroupSegment.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/ToolCallGroupSegment.tsx new file mode 100644 index 00000000000..85921b01689 --- /dev/null +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/ToolCallGroupSegment.tsx @@ -0,0 +1,262 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import styled from "@emotion/styled"; +import React, { useState, useEffect, useRef } from "react"; +import ToolCallSegment, { Spinner } from "./ToolCallSegment"; + +const GroupContainer = styled.div` + border: 1px solid var(--vscode-panel-border); + border-radius: 4px; + margin: 8px 0; + font-size: 12px; + color: var(--vscode-editor-foreground); + background-color: var(--vscode-textCodeBlock-background); + overflow: hidden; +`; + +const GroupHeader = styled.div<{ interactive: boolean }>` + display: flex; + align-items: center; + gap: 4px; + padding: 5px 10px; + cursor: ${(props: { interactive: boolean }) => props.interactive ? 'pointer' : 'default'}; + user-select: none; + font-family: var(--vscode-editor-font-family); + + &:hover { + background-color: ${(props: { interactive: boolean }) => props.interactive ? 'var(--vscode-list-hoverBackground)' : 'transparent'}; + } + + /* Neutralise the Spinner's built-in margin-right so gap controls spacing */ + & .codicon-loading, + & .codicon-check { + margin-right: 0; + } +`; + +const ChevronIcon = styled.span<{ expanded: boolean }>` + transition: transform 0.2s ease; + transform: ${(props: { expanded: boolean }) => props.expanded ? 'rotate(90deg)' : 'rotate(0deg)'}; + display: flex; + align-items: center; + font-size: 11px; + color: var(--vscode-descriptionForeground); + flex-shrink: 0; +`; + +const StatusIcon = styled.span` + display: inline-flex; + align-items: center; + font-size: 13px; + flex-shrink: 0; +`; + +const HeaderLabel = styled.span` + flex: 1; + font-size: 12px; + min-width: 0; +`; + +const LastToolHint = styled.span` + font-size: 11px; + color: var(--vscode-descriptionForeground); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 180px; + flex-shrink: 1; + margin-left: 2px; + animation: fadeIn 0.2s ease-in; + + @keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } + } +`; + +const GroupBodyOuter = styled.div<{ expanded: boolean }>` + display: grid; + grid-template-rows: ${(props: { expanded: boolean }) => props.expanded ? '1fr' : '0fr'}; + transition: grid-template-rows 0.25s ease-in-out; + border-top: ${(props: { expanded: boolean }) => props.expanded ? '1px solid var(--vscode-panel-border)' : 'none'}; +`; + +const GroupBody = styled.div` + overflow: hidden; + min-height: 0; +`; + +const ToolCallItemWrapper = styled.div` + padding-left: 16px; + border-left: 2px solid var(--vscode-panel-border); + margin-left: 10px; + + & > pre { + margin: 0; + border: none; + border-bottom: 1px solid var(--vscode-widget-border); + border-radius: 0; + padding: 6px 10px; + } + + &:last-of-type > pre { + border-bottom: none; + } +`; + +export interface ToolCallItem { + text: string; + loading: boolean; + failed?: boolean; + toolName?: string; +} + +interface ToolCategory { + running: string; + done: string; +} + +const FILE_TOOLS = ["file_write", "file_edit", "file_batch_edit"]; +const LIBRARY_SEARCH_TOOLS = ["LibrarySearchTool"]; +const LIBRARY_FETCH_TOOLS = ["LibraryGetTool", "HealthcareLibraryProviderTool"]; +const RUN_TOOLS = ["runBallerinaPackage", "getServiceLogs", "stopBallerinaService"]; +const CURL_TOOLS = ["curlRequest"]; + +function getGroupCategory(toolNames: (string | undefined)[]): ToolCategory { + const names = toolNames.filter(Boolean) as string[]; + + const hasFile = names.some(n => FILE_TOOLS.includes(n)); + const hasLibrarySearch = names.some(n => LIBRARY_SEARCH_TOOLS.includes(n)); + const hasLibraryFetch = names.some(n => LIBRARY_FETCH_TOOLS.includes(n)); + const hasLibrary = hasLibrarySearch || hasLibraryFetch; + const hasDiagnostics = names.includes("getCompilationErrors"); + const hasConfig = names.includes("ConfigCollector"); + const hasConnector = names.includes("ConnectorGeneratorTool"); + const hasTestRunner = names.includes("runTests"); + const hasRunTool = names.some(n => RUN_TOOLS.includes(n)); + const hasCurl = names.some(n => CURL_TOOLS.includes(n)); + + if (hasFile && !hasLibrary && !hasDiagnostics) { + return { running: "Editing code...", done: "Code updated" }; + } + if (hasDiagnostics && !hasFile && !hasLibrary) { + return { running: "Checking for errors...", done: "No issues found" }; + } + if (hasLibrarySearch && !hasLibraryFetch && !hasFile && !hasDiagnostics) { + return { running: "Searching libraries...", done: "Libraries found" }; + } + if (hasLibraryFetch && !hasFile && !hasDiagnostics) { + return { running: "Fetching libraries...", done: "Libraries fetched" }; + } + if (hasConfig) { + return { running: "Reading config...", done: "Config loaded" }; + } + if (hasConnector) { + return { running: "Generating connector...", done: "Connector ready" }; + } + if (hasTestRunner) { + return { running: "Running tests...", done: "Tests completed" }; + } + if (hasRunTool) { + return { running: "Running program...", done: "Run complete" }; + } + if (hasCurl) { + return { running: "Running curl...", done: "Curl complete" }; + } + return { running: "Thinking...", done: "Done" }; +} + +interface ToolCallGroupSegmentProps { + segments: ToolCallItem[]; +} + +const ToolCallGroupSegment: React.FC = ({ segments }) => { + const isAnyLoading = segments.some(s => s.loading); + const [isExpanded, setIsExpanded] = useState(isAnyLoading); + + const collapseTimerRef = useRef | null>(null); + + useEffect(() => { + if (isAnyLoading) { + // Cancel any pending collapse and force expanded + if (collapseTimerRef.current) { + clearTimeout(collapseTimerRef.current); + collapseTimerRef.current = null; + } + setIsExpanded(true); + } else { + // Delay auto-collapse so the user can see the final state briefly + collapseTimerRef.current = setTimeout(() => { + setIsExpanded(false); + collapseTimerRef.current = null; + }, 1500); + } + return () => { + if (collapseTimerRef.current) { + clearTimeout(collapseTimerRef.current); + } + }; + }, [isAnyLoading]); + + // Only allow toggling when all tools are done + const toggleExpanded = () => { + if (!isAnyLoading) { + setIsExpanded(prev => !prev); + } + }; + + const activeItem = segments.find(s => s.loading); + const category = getGroupCategory(segments.map(s => s.toolName)); + + return ( + + + + + + {isAnyLoading ? ( + + ) : ( + + )} + + {isAnyLoading ? category.running : category.done} + + {!isExpanded && isAnyLoading && activeItem && ( + > {activeItem.text} + )} + + + + {segments.map((item, idx) => ( + + + + ))} + + + + ); +}; + +export default ToolCallGroupSegment; diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TryItScenariosSegment/TestCaseContainer.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TryItScenariosSegment/TestCaseContainer.tsx new file mode 100644 index 00000000000..88688a58d8a --- /dev/null +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TryItScenariosSegment/TestCaseContainer.tsx @@ -0,0 +1,198 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { keyframes } from "@emotion/css"; +import styled from "@emotion/styled"; +import React, { useState } from "react"; +import TestCaseDetails from "./TestCaseDetails"; +import { HTTPErrorResponse, HTTPResponse, ParsedHTTPRequest, TestCase } from "./types"; + +const spin = keyframes` + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +`; + +const Spinner = styled.span` + display: inline-block; + margin-right: 8px; + font-size: 14px; + animation: ${spin} 1s linear infinite; +`; + +const CheckIcon = styled.span` + display: inline-block; + margin-right: 8px; + font-size: 14px; +`; + +const TryItTestCaseWrapper = styled.pre` + background-color: var(--vscode-textCodeBlock-background); + border: 1px solid var(--vscode-panel-border); + border-radius: 4px; + padding: 8px 12px; + margin: 8px 0; + font-family: var(--vscode-editor-font-family); + font-size: 12px; + color: var(--vscode-editor-foreground); + white-space: pre-wrap; + overflow-x: auto; +`; + +const TryItTestCaseLine = styled.div` + display: flex; + align-items: center; +`; + +const METHOD_COLORS: Record = { + GET: "#3498DB", + POST: "#2ECC71", + PUT: "#F39C12", + DELETE: "#E74C3C", + PATCH: "#9B59B6", + HEAD: "#95A5A6", + OPTIONS: "#1ABC9C", +}; + +const MethodIndicator = styled.span<{ method: string }>` + display: inline-block; + margin-right: 8px; + padding: 1px 6px; + border-radius: 5px; + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + color: #fff; + background-color: ${(props: { method: string }) => METHOD_COLORS[props.method.toUpperCase()] ?? "#666"}; + min-width: 32px; + text-align: center; +`; + +const UrlLabel = styled.span` + flex: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +`; + +const LineActions = styled.div` + display: flex; + align-items: center; + gap: 6px; + margin-left: auto; + flex-shrink: 0; +`; + +const STATUS_COLOR_RANGES: { max: number; color: string }[] = [ + { max: 199, color: "#95A5A6" }, + { max: 299, color: "#2ECC71" }, + { max: 399, color: "#3498DB" }, + { max: 499, color: "#F39C12" }, + { max: 599, color: "#E74C3C" }, +]; + +const getStatusColor = (status: number): string => { + for (const range of STATUS_COLOR_RANGES) { + if (status <= range.max) { + return range.color; + } + } + return "#95A5A6"; +}; + +const StatusCodeBadge = styled.span<{ status: number }>` + display: inline-block; + padding: 1px 2px; + font-size: 10px; + font-weight: 700; + color: ${(props: { status: number }) => getStatusColor(props.status)}; + min-width: 28px; + text-align: center; +`; + +const ActionButton = styled.button` + display: inline-flex; + align-items: center; + justify-content: center; + background: none; + border: none; + color: var(--vscode-descriptionForeground); + cursor: pointer; + padding: 2px; + border-radius: 3px; + font-size: 14px; + + &:hover { + color: var(--vscode-foreground); + background-color: var(--vscode-toolbar-hoverBackground); + } +`; + +export type { ParsedHTTPRequest, TestCase, HTTPResponse, HTTPErrorResponse } from "./types"; + +const getStatusCode = (output: HTTPResponse | HTTPErrorResponse): number | undefined => { + if ("error" in output && output.error) { + return output.response?.status; + } + return (output as HTTPResponse).status; +}; + +interface TestCaseContainerProps { + testCase: TestCase; +} + +const TestCaseContainer: React.FC = ({ testCase }) => { + const statusCode = testCase.isResult && testCase.output ? getStatusCode(testCase.output) : undefined; + const [expanded, setExpanded] = useState(false); + const failed = testCase.output && "error" in testCase.output && testCase.output.error; + + return ( + + + {testCase.isResult ? ( + + ) : ( + + )} + {testCase.request.method} + {testCase.request.url} + {testCase.isResult && ( + + {statusCode !== undefined && ( + {statusCode} + )} + setExpanded((prev) => !prev)} + title={expanded ? "Collapse details" : "Expand details"} + > + + + + )} + + {expanded && } + + ); +}; + +export default TestCaseContainer; diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TryItScenariosSegment/TestCaseDetails.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TryItScenariosSegment/TestCaseDetails.tsx new file mode 100644 index 00000000000..4c957a8eef1 --- /dev/null +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TryItScenariosSegment/TestCaseDetails.tsx @@ -0,0 +1,337 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import styled from "@emotion/styled"; +import React from "react"; +import { HTTPErrorResponse, HTTPResponse, TestCase } from "./types"; + +// --- Layout --- + +const DetailsWrapper = styled.div` + border-top: 1px solid var(--vscode-panel-border); + margin-top: 8px; + padding-top: 8px; +`; + +const Section = styled.div` + margin-bottom: 8px; + + &:last-child { + margin-bottom: 0; + } +`; + +const SectionLabel = styled.div` + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.5px; + color: var(--vscode-descriptionForeground); + margin-bottom: 4px; +`; + +const CodeBlock = styled.pre` + background-color: var(--vscode-editor-background); + border: 1px solid var(--vscode-panel-border); + border-radius: 3px; + padding: 6px 8px; + margin: 0; + font-family: var(--vscode-editor-font-family); + font-size: 11px; + color: var(--vscode-editor-foreground); + white-space: pre-wrap; + word-break: break-all; + overflow-x: auto; + display: flex; + flex-direction: column; + gap: 0; +`; + +const InnerSection = styled.div` + padding: 4px 0; + + & + & { + border-top: 1px dashed var(--vscode-panel-border); + } +`; + +// --- Request line --- + +const METHOD_COLORS: Record = { + GET: "#3498DB", + POST: "#2ECC71", + PUT: "#F39C12", + DELETE: "#E74C3C", + PATCH: "#9B59B6", + HEAD: "#95A5A6", + OPTIONS: "#1ABC9C", +}; + +const RequestLine = styled.div` + display: flex; + align-items: center; + gap: 6px; +`; + +const MethodBadge = styled.span<{ method: string }>` + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + color: ${(props: { method: string }) => METHOD_COLORS[props.method.toUpperCase()] ?? "#666"}; +`; + +const UrlText = styled.span` + color: var(--vscode-textLink-foreground); + font-size: 11px; + word-break: break-all; +`; + +// --- Headers --- + +const HeaderRow = styled.div` + display: flex; + gap: 0; + line-height: 1.6; +`; + +const HeaderKey = styled.span` + color: var(--vscode-debugTokenExpression-name, #9cdcfe); + font-size: 11px; +`; + +const HeaderSeparator = styled.span` + color: var(--vscode-descriptionForeground); + font-size: 11px; +`; + +const HeaderValue = styled.span` + color: var(--vscode-debugTokenExpression-string, #ce9178); + font-size: 11px; + word-break: break-all; +`; + +// --- Body --- + +const BodyContent = styled.span` + color: var(--vscode-editor-foreground); + font-size: 11px; + line-height: 1.5; +`; + +// --- Response status --- + +const STATUS_COLOR_RANGES: { max: number; color: string }[] = [ + { max: 199, color: "#95A5A6" }, + { max: 299, color: "#2ECC71" }, + { max: 399, color: "#3498DB" }, + { max: 499, color: "#F39C12" }, + { max: 599, color: "#E74C3C" }, +]; + +const getStatusColor = (status: number): string => { + for (const range of STATUS_COLOR_RANGES) { + if (status <= range.max) { + return range.color; + } + } + return "#95A5A6"; +}; + +const StatusLine = styled.div` + display: flex; + align-items: center; + gap: 6px; +`; + +const StatusCode = styled.span<{ status: number }>` + font-size: 11px; + font-weight: 700; + color: ${(props: { status: number }) => getStatusColor(props.status)}; +`; + +const StatusText = styled.span` + font-size: 11px; + color: var(--vscode-descriptionForeground); +`; + +// --- Error --- + +const ErrorLine = styled.div` + display: flex; + flex-direction: column; + gap: 2px; +`; + +const ErrorMessage = styled.span` + color: var(--vscode-errorForeground); + font-size: 11px; + font-weight: 600; +`; + +const ErrorCode = styled.span` + color: var(--vscode-descriptionForeground); + font-size: 10px; +`; + +// --- Helpers --- + +const formatJson = (value: unknown): string => { + if (value === undefined || value === null) { + return ""; + } + if (typeof value === "string") { + try { + return JSON.stringify(JSON.parse(value), null, 2); + } catch { + return value; + } + } + return JSON.stringify(value, null, 2); +}; + +const renderHeaders = (headers: Record) => { + const entries = Object.entries(headers); + if (entries.length === 0) { + return null; + } + return ( + + {entries.map(([key, value]) => ( + + {key} + + {value} + + ))} + + ); +}; + +const SubHeader = styled.div` + font-size: 10px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.3px; + color: var(--vscode-descriptionForeground); + margin-bottom: 3px; +`; + +const renderBody = (data: unknown) => { + if (data === undefined || data === null || data === "") { + return null; + } + return ( + + Body + {formatJson(data)} + + ); +}; + +// --- Component --- + +interface TestCaseDetailsProps { + testCase: TestCase; +} + +const TestCaseDetails: React.FC = ({ testCase }) => { + const { output } = testCase; + const isError = output && "error" in output && output.error; + + return ( + +
+ Request + + + + + {testCase.request.method} + + {testCase.request.url} + + + {renderHeaders(testCase.request.headers)} + {renderBody(testCase.request.data)} + +
+ {output && ( +
+ Response + {isError ? ( + + + + + {(output as { message: string }).message} + + {(output as { code?: string }).code && ( + + Code: {(output as { code?: string }).code} + + )} + + + {(output as { response?: { status: number; statusText: string } }).response && ( + + + + {(output as { response: { status: number; statusText: string } }) + .response.status} + + + {(output as { response: { status: number; statusText: string } }) + .response.statusText} + + + + )} + + ) : ( + + + + + {(output as { status: number }).status} + + + {(output as { statusText: string }).statusText} + + + + {(output as { headers: Record }).headers && + renderHeaders( + (output as { headers: Record }).headers + )} + {(output as { data: unknown }).data !== undefined && + (output as { data: unknown }).data !== null && + renderBody((output as { data: unknown }).data)} + + )} +
+ )} +
+ ); +}; + +export default TestCaseDetails; diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TryItScenariosSegment/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TryItScenariosSegment/index.tsx new file mode 100644 index 00000000000..c9d652ca087 --- /dev/null +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TryItScenariosSegment/index.tsx @@ -0,0 +1,151 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { keyframes } from "@emotion/css"; +import styled from "@emotion/styled"; +import React, { useEffect, useState } from "react"; +import TestCaseContainer from "./TestCaseContainer"; +import { HTTPErrorResponse, HTTPResponse, HTTPToolEventInput, HTTPToolEventOutput, TestCase } from "./types"; + +const loadingProgress = keyframes` + 0% { width: 0%; } + 50% { width: 70%; } + 100% { width: 100%; } +`; + +const LoadingLine = styled.div` + height: 2px; + background-color: var(--vscode-progressBar-background); + animation: ${loadingProgress} 2s ease-in-out infinite; + margin-bottom: 8px; +`; + +const TryItContainer = styled.div` + width: 100%; + border: 1px solid var(--vscode-panel-border); + border-radius: 4px; + padding: 8px; +`; + +const ScenarioGroup = styled.div` + background-color: var(--vscode-input-background); + border: 1px solid var(--vscode-panel-border); + border-radius: 4px; + margin: 8px 0; + overflow: hidden; +`; + +const ScenarioHeader = styled.div` + color: var(--vscode-foreground); + padding: 6px 12px; + font-size: 12px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; +`; + +const ScenarioContent = styled.div` + padding: 4px 8px; +`; + +interface TryItScenariosSegmentProps { + text: string; + loading: boolean; +} + +export type { HTTPToolEventInput, HTTPToolEventOutput } from "./types"; + +const TryItScenariosSegment: React.FC = ({ text, loading }) => { + const [scenarioCases, setScenarioCases] = useState>(new Map()); + const [standaloneCases, setStandaloneCases] = useState([]); + // text will be surrounded by either or the JSON string is inside the tag. We need to parse the text and segregate the test cases based on scenarios if scenario is present in the text, otherwise put it in standalone cases. + const regex = /([\s\S]*?)<\/call>|([\s\S]*?)<\/result>/g; + useEffect(() => { + const newScenarioCases = new Map(); + const newStandaloneCases: TestCase[] = []; + let match; + while ((match = regex.exec(text)) !== null) { + if (match[1]) { + // block matched + try { + const input: HTTPToolEventInput = JSON.parse(decodeURIComponent(match[1])); + const testCase: TestCase = { + isResult: false, + request: input.request, + }; + if (input.scenario) { + if (!newScenarioCases.has(input.scenario)) { + newScenarioCases.set(input.scenario, []); + } + newScenarioCases.get(input.scenario)?.push(testCase); + } else { + newStandaloneCases.push(testCase); + } + } catch (error) { + console.error("Failed to parse HTTP request input from block:", error); + } + } else if (match[2]) { + // block matched + try { + const output: HTTPToolEventOutput = JSON.parse(decodeURIComponent(match[2])); + const testCase: TestCase = { + isResult: true, + request: output.request, + output: output.output, + }; + if (output.scenario) { + if (!newScenarioCases.has(output.scenario)) { + newScenarioCases.set(output.scenario, []); + } + newScenarioCases.get(output.scenario)?.push(testCase); + } else { + newStandaloneCases.push(testCase); + } + } catch (error) { + console.error("Failed to parse HTTP response output from block:", error); + } + } + } + setScenarioCases(newScenarioCases); + setStandaloneCases(newStandaloneCases); + }, [text]); + + return ( + + {loading && } + {Array.from(scenarioCases.entries()).map(([scenario, cases]) => ( + + {scenario} + + {cases.map((testCase, index) => ( + + ))} + + + ))} + {standaloneCases.map((testCase, index) => ( + + ))} + + ); +}; + +export default TryItScenariosSegment; diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TryItScenariosSegment/types.ts b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TryItScenariosSegment/types.ts new file mode 100644 index 00000000000..c5abe6366bf --- /dev/null +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/components/TryItScenariosSegment/types.ts @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export type ParsedHTTPRequest = { + method: string; + url: string; + headers: Record; + data: unknown; +}; + +export type HTTPResponse = { + data: unknown; + status: number; + statusText: string; + headers: Record; +}; + +export type HTTPErrorResponse = { + error: true; + message: string; + code?: string; + response?: HTTPResponse; +}; + +export type TestCase = { + isResult: boolean; + request: ParsedHTTPRequest; + output?: HTTPResponse | HTTPErrorResponse; +}; + +export type HTTPToolEventInput = { + request: ParsedHTTPRequest; + scenario?: string; +}; + +export type HTTPToolEventOutput = { + request: ParsedHTTPRequest; + scenario?: string; + output: HTTPResponse | HTTPErrorResponse; +}; diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/styles.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/styles.tsx index e05cab3ce56..0ffbf9d1af4 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/styles.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AIPanel/styles.tsx @@ -62,12 +62,9 @@ export const Main = styled.main({ export const ChatMessage = styled.div({ padding: "20px", - borderTop: "1px solid var(--vscode-editorWidget-border)", }); export const Badge = styled.div` - // padding: 5px; - // margin-left: 10px; display: inline-block; text-align: left; `; @@ -75,3 +72,26 @@ export const Badge = styled.div` export const ResetsInBadge = styled.div` font-size: 10px; `; + +export const ApprovalOverlay = styled.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + pointer-events: all; +`; + +export const OverlayMessage = styled.div` + color: var(--vscode-foreground); + font-size: 14px; + padding: 16px 24px; + background: var(--vscode-editor-background); + border: 1px solid var(--vscode-panel-border); + border-radius: 4px; +`; diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AgentChatPanel/Components/ChatInput.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AgentChatPanel/Components/ChatInput.tsx index c1c31770274..59623e9fa4d 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/AgentChatPanel/Components/ChatInput.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AgentChatPanel/Components/ChatInput.tsx @@ -20,6 +20,7 @@ import React, { useState, useRef, useEffect, forwardRef, useImperativeHandle, KeyboardEvent, useCallback } from "react"; import styled from "@emotion/styled"; +import { Icon } from "@wso2/ui-toolkit"; const Container = styled.div` width: calc(100% - 40px); @@ -246,7 +247,7 @@ const ChatInput: React.FC = ({ value = "", onSend, onStop, isLoa disabled={!inputValue.trim() && !isLoading} onClick={isLoading ? onStop : handleSend} > - + diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AgentChatPanel/Components/ChatInterface.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AgentChatPanel/Components/ChatInterface.tsx index fcf341e0f78..b61d2f20842 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/AgentChatPanel/Components/ChatInterface.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AgentChatPanel/Components/ChatInterface.tsx @@ -22,9 +22,15 @@ import React, { useState, useEffect, useRef } from "react"; import styled from "@emotion/styled"; import ChatInput from "./ChatInput"; import LoadingIndicator from "./LoadingIndicator"; +import { ExecutionTimeline } from "./ExecutionTimeline"; import { useRpcContext } from "@wso2/ballerina-rpc-client"; -import { Codicon, Icon, Button, ThemeColors } from "@wso2/ui-toolkit"; +import { Icon, Button, ThemeColors } from "@wso2/ui-toolkit"; import ReactMarkdown from "react-markdown"; +import remarkMath from 'remark-math'; +import remarkGfm from 'remark-gfm'; +import rehypeKatex from 'rehype-katex'; +import 'katex/dist/katex.min.css'; +import { ExecutionStep } from "@wso2/ballerina-core"; enum ChatMessageType { MESSAGE = "message", @@ -36,6 +42,7 @@ interface ChatMessage { text: string; isUser: boolean; traceId?: string; + executionSteps?: ExecutionStep[]; } // ---------- WATER MARK ---------- @@ -70,14 +77,14 @@ const WatermarkSubTitle = styled.div` `; // ---------- CHAT AREA ---------- -const ChatWrapper = styled.div` +export const ChatWrapper = styled.div` display: flex; flex-direction: column; height: 100vh; width: 100%; `; -const ChatContainer = styled.div` +export const ChatContainer = styled.div` position: relative; display: flex; flex-direction: column; @@ -86,36 +93,49 @@ const ChatContainer = styled.div` margin: 20px 0 32px 0; `; -const Messages = styled.div` +export const Messages = styled.div` flex: 1; overflow-y: auto; - padding: 8px 0; display: flex; flex-direction: column; gap: 8px; position: relative; z-index: 1; padding: 8px 20px; + height: 100%; + + @media (min-width: 1000px) { + padding: 8px 10%; + } + + @media (min-width: 1600px) { + padding: 8px 15%; + } + + @media (min-width: 2000px) { + padding: 8px 20%; + } `; -const MessageContainer = styled.div<{ isUser: boolean }>` +export const MessageContainer = styled.div<{ isUser: boolean }>` display: flex; align-items: flex-end; justify-content: ${({ isUser }: { isUser: boolean }) => (isUser ? "flex-end" : "flex-start")}; gap: 6px; `; -const ProfilePic = styled.div` - width: 18px; - height: 18px; +export const ProfilePic = styled.div` + padding: 4px; + border: 1px solid var(--vscode-panel-border); + background-color: var(--vscode-editor-background); border-radius: 50%; object-fit: cover; `; -const MessageBubble = styled.div<{ isUser: boolean; isError?: boolean; isLoading?: boolean }>` +export const MessageBubble = styled.div<{ isUser: boolean; isError?: boolean; isLoading?: boolean }>` position: relative; - padding: ${({ isLoading }: { isLoading?: boolean }) => (isLoading ? "10px 14px" : "0 14px")}; - max-width: 55%; + padding: ${({ isLoading }: { isLoading?: boolean }) => (isLoading ? "10px 14px" : "2px 14px")}; + max-width: 100%; align-self: ${({ isUser }: { isUser: boolean }) => (isUser ? "flex-end" : "flex-start")}; overflow-wrap: break-word; word-break: break-word; @@ -127,16 +147,26 @@ const MessageBubble = styled.div<{ isUser: boolean; isError?: boolean; isLoading content: ""; position: absolute; inset: 0; - background-color: ${({ isUser }: { isUser: boolean }) => - isUser ? "var(--vscode-button-background)" : "var(--vscode-tab-inactiveBackground)"}; - opacity: ${({ isUser }: { isUser: boolean }) => (isUser ? "0.3" : "1")}; + background-color: ${({ isUser, isError }: { isUser: boolean; isError?: boolean }) => + isError ? "var(--vscode-errorForeground)" : isUser ? "var(--vscode-button-background)" : "var(--vscode-input-background)"}; + opacity: ${({ isUser, isError }: { isUser: boolean; isError?: boolean }) => (isUser ? "0.3" : isError ? "0.05" : "1")}; border-radius: inherit; + border: 1px solid ${({ isUser }: { isUser: boolean }) => + isUser ? "var(--vscode-peekView-border)" : "var(--vscode-panel-border)"}; z-index: -1; } border-radius: ${({ isUser }: { isUser: boolean }) => (isUser ? "12px 12px 0px 12px" : "12px 12px 12px 0px")}; `; +const MessageActionsContainer = styled.div` + display: flex; + align-items: center; + gap: 12px; + margin: -4px 0 0 36px; + flex-wrap: wrap; +`; + // ---------- CHAT FOOTER ---------- const ChatFooter = styled.div` position: sticky; @@ -149,9 +179,8 @@ const ShowLogsButton = styled.button` background: none; border: none; color: var(--vscode-textLink-foreground); - font-size: 11px; - padding: 0; - margin: -4px 0 8px 24px; + font-size: 12px; + padding: 4px 0; cursor: pointer; text-decoration: none; display: inline-flex; @@ -169,9 +198,11 @@ const ChatHeader = styled.div` top: 0; display: flex; justify-content: flex-end; + align-items: center; padding: 12px 8px 8px; z-index: 2; border-bottom: 1px solid var(--vscode-panel-border); + gap: 8px; `; const ClearChatButton = styled.button` @@ -280,6 +311,19 @@ const ClearChatWarningPopup: React.FC = ({ isOpen, o ); }; +// Preprocess LaTeX delimiters to convert \(...\) and \[...\] to $...$ and $$...$$ +export function preprocessLatex(text: string): string { + if (!text || typeof text !== 'string') return text; + + // Convert display math \[...\] to $$...$$ + let processed = text.replace(/\\\[(.*?)\\\]/gs, (_, math) => `$$${math}$$`); + + // Convert inline math \(...\) to $...$ + processed = processed.replace(/\\\((.*?)\\\)/gs, (_, math) => `$${math}$`); + + return processed; +} + const ChatInterface: React.FC = () => { const { rpcClient } = useRpcContext(); const [messages, setMessages] = useState([]); @@ -289,6 +333,9 @@ const ChatInterface: React.FC = () => { const messagesEndRef = useRef(null); + // Check if we have any traces (to enable/disable Session Logs button) + const hasTraces = messages.some(msg => !msg.isUser && msg.traceId); + // Load chat history and check tracing status on mount useEffect(() => { const loadChatHistory = async () => { @@ -302,7 +349,8 @@ const ChatInterface: React.FC = () => { type: msg.type === 'error' ? ChatMessageType.ERROR : ChatMessageType.MESSAGE, text: msg.text, isUser: msg.isUser, - traceId: msg.traceId + traceId: msg.traceId, + executionSteps: msg.executionSteps })); setMessages(chatMessages); } @@ -342,15 +390,46 @@ const ChatInterface: React.FC = () => { setMessages((prev) => [ ...prev, - { type: ChatMessageType.MESSAGE, text: chatResponse.message, isUser: false }, + { + type: ChatMessageType.MESSAGE, + text: chatResponse.message, + isUser: false, + traceId: chatResponse.traceId, + executionSteps: chatResponse.executionSteps + }, ]); } catch (error) { - const errorMessage = - error && typeof error === "object" && "message" in error - ? String(error.message) - : "An unknown error occurred"; + let errorMessage = "An unknown error occurred"; + let traceId: string | undefined; + let executionSteps: ExecutionStep[] | undefined; + + // Try to parse structured error with trace information + if (error && typeof error === "object" && "message" in error) { + try { + const parsedError = JSON.parse(String(error.message)); + if (parsedError.message && parsedError.traceInfo) { + errorMessage = parsedError.message; + traceId = parsedError.traceInfo.traceId; + executionSteps = parsedError.traceInfo.executionSteps; + } else { + // Fallback to regular error message + errorMessage = String(error.message); + } + } catch (parseError) { + // If JSON parsing fails, use the original error message + errorMessage = String(error.message); + } + } + + console.error("Chat message error:", error); - setMessages((prev) => [...prev, { type: ChatMessageType.ERROR, text: errorMessage, isUser: false }]); + setMessages((prev) => [...prev, { + type: ChatMessageType.ERROR, + text: errorMessage, + isUser: false, + traceId, + executionSteps + }]); } finally { setIsLoading(false); } @@ -363,24 +442,17 @@ const ChatInterface: React.FC = () => { const handleShowLogs = async (messageIndex: number) => { try { - // Find the corresponding user message - // Look backwards from the current index to find the last user message - let userMessage = ''; - - for (let i = messageIndex - 1; i >= 0; i--) { - if (messages[i].isUser) { - userMessage = messages[i].text; - break; - } - } + // Get the trace ID from the agent's response message + const message = messages[messageIndex]; - if (!userMessage) { - console.error('Could not find user message for this response'); + if (!message || message.isUser || !message.traceId) { + console.error('No trace ID found for this message'); return; } - // Call the RPC method to show the trace view - await rpcClient.getAgentChatRpcClient().showTraceView({ message: userMessage }); + await rpcClient.getAgentChatRpcClient().showTraceView({ + traceId: message.traceId + }); } catch (error) { console.error('Failed to show trace view:', error); } @@ -409,12 +481,39 @@ const ChatInterface: React.FC = () => { setShowClearWarning(false); }; + const handleViewInTrace = async (traceId: string, spanId: string) => { + try { + await rpcClient.getAgentChatRpcClient().showTraceView({ + traceId, + focusSpanId: spanId + }); + } catch (error) { + console.error('Failed to show trace view:', error); + } + }; + + const handleShowSessionLogs = async () => { + try { + await rpcClient.getAgentChatRpcClient().showSessionOverview({}); + } catch (error) { + console.error('Failed to show session overview:', error); + } + }; + return ( {messages.length > 0 && ( +
+ {isTracingEnabled && hasTraces && ( + + + Session Logs + + )} +
- + Clear Chat
@@ -434,6 +533,13 @@ const ChatInterface: React.FC = () => { {/* Render each message */} {messages.map((msg, idx) => ( + {!msg.isUser && isTracingEnabled && msg?.executionSteps && msg.executionSteps.length > 0 && msg.traceId && ( + + )} {!msg.isUser && ( @@ -442,19 +548,24 @@ const ChatInterface: React.FC = () => { sx={{ width: 18, height: 18 }} iconSx={{ fontSize: "18px", - color: "var(--vscode-foreground)", + color: "var(--vscode-terminal-ansiBrightCyan)", cursor: "default", }} /> )} - {msg.text} + + {preprocessLatex(msg.text)} + {msg.isUser && ( - { )} - {/* Show "Show logs" button after agent responses (not user messages) */} - {!msg.isUser && isTracingEnabled && ( - handleShowLogs(idx)}> - Show logs - + {!msg.isUser && isTracingEnabled && msg.traceId && ( + + handleShowLogs(idx)} title="View trace logs for this message"> + View Logs + + )} ))} diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/AgentChatPanel/Components/ExecutionTimeline.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/AgentChatPanel/Components/ExecutionTimeline.tsx new file mode 100644 index 00000000000..6897432fa53 --- /dev/null +++ b/workspaces/ballerina/ballerina-visualizer/src/views/AgentChatPanel/Components/ExecutionTimeline.tsx @@ -0,0 +1,257 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { useState } from "react"; +import styled from "@emotion/styled"; +import { Codicon, Icon } from "@wso2/ui-toolkit"; +import { ExecutionStep } from "@wso2/ballerina-core"; + +interface ExecutionTimelineProps { + steps: ExecutionStep[]; + traceId: string; + onViewInTrace: (traceId: string, spanId: string) => void; +} + +const TimelineContainer = styled.div` + max-width: 600px; + margin: 12px 0 0 36px; +`; + +const TimelineTitle = styled.div` + font-size: 11px; + color: var(--vscode-descriptionForeground); + letter-spacing: 0.5px; +`; + +const TimelineHeader = styled.button` + display: flex; + align-items: center; + gap: 2px; + background: transparent; + border: none; + padding: 0; + cursor: pointer; +`; + +const ToggleIcon = styled.span<{ isOpen: boolean }>` + color: var(--vscode-descriptionForeground); + display: inline-flex; + align-items: center; + justify-content: center; + transition: transform 0.15s ease; + transform: ${(props: { isOpen: boolean }) => (props.isOpen ? "rotate(90deg)" : "rotate(0deg)")}; +`; + +const TimelineList = styled.div` + margin-top: 8px; + margin-bottom: 4px; + display: flex; + flex-direction: column; + gap: 0; +`; + +const TimelineItem = styled.div` + display: flex; + align-items: flex-start; + position: relative; + margin-bottom: 8px; + + &:last-of-type { + margin-bottom: 0; + } +`; + +const ConnectorColumn = styled.div<{ isLast: boolean }>` + width: 20px; + display: flex; + flex-direction: column; + align-items: center; + position: relative; + flex-shrink: 0; + padding-top: 4px; + + &::after { + content: ''; + position: absolute; + top: 14px; + left: 50%; + transform: translateX(-50%); + width: 1px; + height: calc(100% + 8px); + background-color: var(--vscode-panel-border); + display: ${(props: { isLast: boolean }) => props.isLast ? 'none' : 'block'}; + } +`; + +const Dot = styled.div<{ operationType: string }>` + width: 8px; + height: 8px; + border-radius: 50%; + background-color: var(--vscode-panel-border); + z-index: 1; + flex-shrink: 0; +`; + +const ContentCard = styled.div` + width: 60%; + background: var(--vscode-input-background); + border: 1px solid var(--vscode-panel-border); + border-radius: 4px; + padding: 8px 12px; + cursor: pointer; + transition: background-color 0.15s ease; + + &:hover { + background: var(--vscode-list-hoverBackground); + } +`; + +const CardContent = styled.div` + display: flex; + align-items: center; + gap: 8px; +`; + +const IconBadge = styled.div<{ operationType: string }>` + display: flex; + align-items: center; + justify-content: center; + color: ${(props: { operationType: string; }) => { + switch (props.operationType) { + case 'invoke': return 'var(--vscode-terminal-ansiCyan)'; + case 'chat': return 'var(--vscode-terminalSymbolIcon-optionForeground)'; + case 'tool': return 'var(--vscode-terminal-ansiBrightMagenta)'; + default: return 'var(--vscode-badge-foreground)'; + } + }}; + flex-shrink: 0; +`; + +const OperationLabel = styled.span<{ operationType: string }>` + font-size: 10px; + font-weight: 600; + flex-shrink: 0; +`; + +const SpanName = styled.span` + font-size: 12px; + color: var(--vscode-foreground); + flex: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +`; + +const Duration = styled.span` + font-size: 11px; + color: var(--vscode-descriptionForeground); + flex-shrink: 0; + margin-left: auto; +`; + +export function ExecutionTimeline({ steps, traceId, onViewInTrace }: ExecutionTimelineProps) { + const [open, setOpen] = useState(false); + + // Filter out steps with invoke operation type + const filteredSteps = steps.filter(step => step.operationType !== 'invoke'); + + if (!filteredSteps || filteredSteps.length === 0) { + return null; + } + + const getIconName = (operationType: string) => { + switch (operationType) { + case 'invoke': return 'bi-ai-agent'; + case 'chat': return 'bi-chat'; + case 'tool': return 'bi-wrench'; + default: return 'bi-action'; + } + }; + + const getOperationLabel = (operationType: string) => { + switch (operationType) { + case 'invoke': return 'Invoke Agent'; + case 'chat': return 'Chat'; + case 'tool': return 'Execute Tool'; + default: return 'Other'; + } + }; + + const formatDuration = (ms: number) => { + if (ms < 1000) { + return `${Math.round(ms)}ms`; + } + return `${(ms / 1000).toFixed(2)}s`; + }; + + return ( + + setOpen(!open)} aria-expanded={open}> + Execution Steps ({filteredSteps.length}) + + + + + {open && ( + + {filteredSteps.map((step, index) => ( + + + + + onViewInTrace(traceId, step.spanId)} + title={step.fullName} + > + +
+ + + + + {getOperationLabel(step.operationType)} + +
+ {step.name} + {formatDuration(step.duration)} + +
+
+
+ ))} +
+ )} +
+ ); +} diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/BI/AIChatAgent/AIChatAgentWizard.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/BI/AIChatAgent/AIChatAgentWizard.tsx index 7bbe79a53d7..72a79f788e2 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/BI/AIChatAgent/AIChatAgentWizard.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/BI/AIChatAgent/AIChatAgentWizard.tsx @@ -180,58 +180,35 @@ export function AIChatAgentWizard(props: AIChatAgentWizardProps) { console.warn("Unable to resolve Ballerina version; falling back to legacy agent generation.", error); } - // Execute for versions under 2201.13.0, or if version cannot be determined (safety fallback) - const executeForLegacyVersion = !ballerinaVersion || (() => { - const parts = ballerinaVersion.split('.'); - if (parts.length < 2) { - return true; // Can't parse properly, execute for safety - } - const majorVersion = parseInt(parts[0], 10); - const minorVersion = parseInt(parts[1], 10); - if (isNaN(majorVersion) || isNaN(minorVersion)) { - return true; // Can't parse version numbers, execute for safety - } - // Only versions < 2201.13 are legacy - if (majorVersion < 2201) { - return true; - } - if (majorVersion > 2201) { - return false; - } - return minorVersion < 13; - })(); - - if (executeForLegacyVersion) { - // Search for agent node in the current file - const agentSearchResponse = await rpcClient.getBIDiagramRpcClient().search({ - filePath: projectPath.current, - queryMap: { orgName: aiModuleOrg.current }, - searchKind: "AGENT" - }); + // Search for agent node in the current file + const agentSearchResponse = await rpcClient.getBIDiagramRpcClient().search({ + filePath: projectPath.current, + queryMap: { orgName: aiModuleOrg.current }, + searchKind: "AGENT" + }); - // Validate search response structure - if (!agentSearchResponse?.categories?.[0]?.items?.[0]) { - throw new Error('No agent node found in search response'); - } + // Validate search response structure + if (!agentSearchResponse?.categories?.[0]?.items?.[0]) { + throw new Error('No agent node found in search response'); + } - const agentNode = agentSearchResponse.categories[0].items[0] as AvailableNode; - console.log(">>> agentNode", agentNode); + const agentNode = agentSearchResponse.categories[0].items[0] as AvailableNode; + console.log(">>> agentNode", agentNode); - // Generate template from agent node - const agentNodeTemplate = await getNodeTemplate(rpcClient, agentNode.codedata, projectPath.current); + // Generate template from agent node + const agentNodeTemplate = await getNodeTemplate(rpcClient, agentNode.codedata, projectPath.current); - // save the agent node - const systemPromptValue = `{role: string \`\`, instructions: string \`\`}`; - const agentVarName = `${agentName}Agent`; - agentNodeTemplate.properties.systemPrompt.value = systemPromptValue; - agentNodeTemplate.properties.model.value = modelVarName; - agentNodeTemplate.properties.tools.value = []; - agentNodeTemplate.properties.variable.value = agentVarName; + // save the agent node + const systemPromptValue = `{role: string \`\`, instructions: string \`\`}`; + const agentVarName = `${agentName}Agent`; + agentNodeTemplate.properties.systemPrompt.value = systemPromptValue; + agentNodeTemplate.properties.model.value = modelVarName; + agentNodeTemplate.properties.tools.value = "[]"; + agentNodeTemplate.properties.variable.value = agentVarName; - await rpcClient - .getBIDiagramRpcClient() - .getSourceCode({ filePath: projectPath.current, flowNode: agentNodeTemplate }); - } + await rpcClient + .getBIDiagramRpcClient() + .getSourceCode({ filePath: projectPath.current, flowNode: agentNodeTemplate }); setCurrentStep(3); @@ -271,7 +248,7 @@ export function AIChatAgentWizard(props: AIChatAgentWizardProps) { const serviceConfiguration = serviceResponse.service; serviceConfiguration.properties["listener"].editable = true; serviceConfiguration.properties["listener"].items = [listenerVariableName]; - serviceConfiguration.properties["listener"].values = [listenerVariableName]; + serviceConfiguration.properties["listener"].value = listenerVariableName; serviceConfiguration.properties["basePath"].value = `/${agentName}`; serviceConfiguration.properties["agentName"].value = agentName; diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/BI/AIChatAgent/MemoryManagerConfig.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/BI/AIChatAgent/MemoryManagerConfig.tsx index af2b0224eaa..dd94bba4658 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/BI/AIChatAgent/MemoryManagerConfig.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/BI/AIChatAgent/MemoryManagerConfig.tsx @@ -427,6 +427,8 @@ export function MemoryManagerConfig(props: MemoryConfigProps): JSX.Element { fieldOverrides={{ store: { type: "ACTION_EXPRESSION", + types: [{ fieldType: "ACTION_EXPRESSION", selected: true }, { fieldType: "EXPRESSION", selected: false }], + codedata: { searchNodesKind: "MEMORY_STORE" }, actionCallback: handleOpenStoreSelection, defaultValue: "In-Memory Short Term Memory Store", actionLabel: ( diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/BI/AIEvaluationForm/CardSelector.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/BI/AIEvaluationForm/CardSelector.tsx new file mode 100644 index 00000000000..c2567a12bb1 --- /dev/null +++ b/workspaces/ballerina/ballerina-visualizer/src/views/BI/AIEvaluationForm/CardSelector.tsx @@ -0,0 +1,158 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import styled from "@emotion/styled"; +import { ReactNode } from "react"; + +interface CardOption { + value: string; + title: string; + description: string; + icon: ReactNode; +} + +interface CardSelectorProps { + options: CardOption[]; + value: string; + onChange: (value: string) => void; + title?: string; +} + +const Container = styled.div` + display: flex; + flex-direction: column; + gap: 8px; + margin-top: 4px; +`; + +const Title = styled.label` + font-size: 13px; + color: var(--vscode-foreground); + margin: 0; + margin-bottom: 4px; +`; + +const CardsContainer = styled.div` + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 16px; +`; + +const Card = styled.div<{ selected: boolean }>` + position: relative; + display: flex; + flex-direction: column; + gap: 12px; + padding: 20px; + border: 1px solid ${(props: { selected: boolean; }) => props.selected ? 'var(--vscode-button-background)' : 'var(--vscode-panel-border)'}; + border-radius: 8px; + background-color: ${(props: { selected: boolean; }) => props.selected ? 'color-mix(in srgb, var(--vscode-button-background) 5%, transparent)' : 'transparent'}; + cursor: pointer; + transition: all 0.2s ease; + + &:hover { + border-color: var(--vscode-button-background); + background-color: ${(props: { selected: boolean; }) => props.selected ? 'color-mix(in srgb, var(--vscode-button-background) 7%, transparent)' : 'var(--vscode-list-hoverBackground)'}; + } + + &:focus-within { + outline: 1px solid var(--vscode-contrastActiveBorder); + outline-offset: 2px; + } +`; + +const CardHeader = styled.div` + display: flex; + align-items: center; + justify-content: space-between; +`; + +const IconTitleWrapper = styled.div` + display: flex; + align-items: center; + gap: 12px; +`; + +const IconWrapper = styled.div<{ selected: boolean }>` + display: flex; + align-items: center; + justify-content: center; + padding: 8px; + border-radius: 8px; + background-color: ${(props: { selected: boolean; }) => props.selected ? 'var(--vscode-button-background)' : 'var(--vscode-editorWidget-background)'}; + color: ${(props: { selected: boolean; }) => props.selected ? 'var(--vscode-button-foreground)' : 'var(--vscode-description-foreground)'}; + flex-shrink: 0; +`; + +const CardTitle = styled.h4` + font-size: 13px; + font-weight: 600; + color: var(--vscode-foreground); + margin: 0; +`; + +const RadioButton = styled.input` + width: 16px; + height: 16px; + cursor: pointer; + accent-color: var(--vscode-contrastActiveBorder, #1976d2); +`; + +const Description = styled.p` + font-size: 13px; + color: var(--vscode-descriptionForeground); + margin: 0; +`; + +export function CardSelector({ options, value, onChange, title }: CardSelectorProps) { + return ( + + {title && {title}} + + {options.map((option) => { + const isSelected = value === option.value; + return ( + onChange(option.value)} + > + + + + {option.icon} + + {option.title} + + onChange(option.value)} + onClick={(e) => e.stopPropagation()} + /> + + {option.description} + + ); + })} + + + ); +} diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/BI/AIEvaluationForm/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/BI/AIEvaluationForm/index.tsx new file mode 100644 index 00000000000..6d25df0389a --- /dev/null +++ b/workspaces/ballerina/ballerina-visualizer/src/views/BI/AIEvaluationForm/index.tsx @@ -0,0 +1,852 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { useEffect, useState } from "react"; +import { Icon, View, ViewContent } from "@wso2/ui-toolkit"; +import styled from "@emotion/styled"; +import { useRpcContext } from "@wso2/ballerina-rpc-client"; +import { FormField, FormImports, FormValues, Parameter } from "@wso2/ballerina-side-panel"; +import { LineRange, FunctionParameter, TestFunction, ValueProperty, Annotation, getPrimaryInputType, EvalsetItem } from "@wso2/ballerina-core"; +import { EVENT_TYPE } from "@wso2/ballerina-core"; +import { TitleBar } from "../../../components/TitleBar"; +import { TopNavigationBar } from "../../../components/TopNavigationBar"; +import { FormHeader } from "../../../components/FormHeader"; +import FormGeneratorNew from "../Forms/FormGeneratorNew"; +import { getImportsForProperty } from "../../../utils/bi"; +import { CardSelector } from "./CardSelector"; + +const FormContainer = styled.div` + display: flex; + flex-direction: column; + max-width: 600px; + margin-bottom: 20px; + + .side-panel-body { + overflow: visible; + } + + .radio-button-group { + margin-top: 8px; + margin-bottom: -12px; + } + + .dropdown-container { + margin-top: 12px; + } +`; + +const Container = styled.div` + display: "flex"; + flex-direction: "column"; + gap: 10px; +`; + +const FullHeightView = styled(View)` + display: flex; + flex-direction: column; + height: 100vh; +`; + +const FullHeightViewContent = styled(ViewContent)` + display: flex; + flex: 1; +`; + +const UpgradeMessageContainer = styled.div` + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + flex: 1; + width: 100%; + padding: 40px; + text-align: center; +`; + +const UpgradeTitle = styled.h2` + color: var(--vscode-foreground); + font-size: 18px; + font-weight: 500; + margin: 0 0 12px 0; + line-height: 1.4; +`; + +const UpgradeMessage = styled.p` + color: var(--vscode-descriptionForeground); + font-size: 13px; + margin: 0; + max-width: 500px; + line-height: 1.6; +`; + +interface TestFunctionDefProps { + projectPath: string; + functionName?: string; + filePath?: string; + serviceType?: string; + isVersionSupported?: boolean; +} + +export function AIEvaluationForm(props: TestFunctionDefProps) { + const { projectPath, functionName, filePath, serviceType, isVersionSupported = true } = props; + const { rpcClient } = useRpcContext(); + const [formFields, setFormFields] = useState([]); + const [testFunction, setTestFunction] = useState(); + const [formTitle, setFormTitle] = useState('Create New AI Evaluation'); + const [formSubtitle, setFormSubtitle] = useState('Create a new AI evaluation for your integration'); + const [targetLineRange, setTargetLineRange] = useState(); + const [dataProviderMode, setDataProviderMode] = useState('evalSet'); + const [evalsetOptions, setEvalsetOptions] = useState>([]); + const [isSaving, setIsSaving] = useState(false); + + // Helper function to apply field visibility rules based on data provider mode + const applyFieldVisibility = (fields: FormField[], mode: string): FormField[] => { + return fields.map(field => { + if (field.key === 'dataProvider') { + return { ...field, hidden: mode !== 'function' }; + } + if (field.key === 'evalSetFile') { + return { ...field, hidden: mode !== 'evalSet' }; + } + if (field.key === 'runs') { + return { ...field, hidden: mode === 'evalSet' }; + } + return field; + }); + }; + + const handleFieldChange = (fieldKey: string, value: any) => { + if (fieldKey === 'dataProviderMode') { + setDataProviderMode(value); + updateFieldVisibility(value); + } + }; + + const updateFieldVisibility = (mode: string) => { + setFormFields(prevFields => applyFieldVisibility(prevFields, mode)); + }; + + const updateTargetLineRange = () => { + rpcClient + .getBIDiagramRpcClient() + .getEndOfFile({ filePath }) + .then((linePosition) => { + setTargetLineRange({ + startLine: linePosition, + endLine: linePosition + }); + }); + } + + useEffect(() => { + loadEvalsets(); + }, []); + + useEffect(() => { + if (serviceType === 'UPDATE_TEST') { + setFormTitle('Update AI Evaluation'); + setFormSubtitle('Update an existing AI evaluation'); + loadFunction(); + } else { + setFormTitle('Create New AI Evaluation'); + setFormSubtitle('Create a new AI evaluation for your integration'); + loadEmptyForm(); + } + + updateTargetLineRange(); + }, [functionName]); + + // Regenerate form fields when evalsetOptions changes + useEffect(() => { + if (testFunction && evalsetOptions.length > 0) { + let formFields = generateFormFields(testFunction); + + // Get the dataProviderMode value to initialize field visibility + const modeField = formFields.find(f => f.key === 'dataProviderMode'); + const mode = String(modeField?.value || 'evalSet'); + setDataProviderMode(mode); + + // Set field visibility based on mode + formFields = applyFieldVisibility(formFields, mode); + + setFormFields(formFields); + } + }, [evalsetOptions]); + + const loadEvalsets = async () => { + try { + const res = await rpcClient.getTestManagerRpcClient().getEvalsets({ projectPath }); + const options = res.evalsets.map((evalset: EvalsetItem) => ({ + value: evalset.filePath, + content: `${evalset.name}` + })); + setEvalsetOptions(options); + } catch (error) { + console.error('Failed to load evalsets:', error); + setEvalsetOptions([]); + } + }; + + const loadFunction = async () => { + const res = await rpcClient.getTestManagerRpcClient().getTestFunction({ functionName, filePath }); + setTestFunction(res.function); + let formFields = generateFormFields(res.function); + + // Get the dataProviderMode value to initialize field visibility + const modeField = formFields.find(f => f.key === 'dataProviderMode'); + const mode = String(modeField?.value || 'evalSet'); + setDataProviderMode(mode); + + // Set initial field visibility + formFields = applyFieldVisibility(formFields, mode); + + setFormFields(formFields); + } + + const loadEmptyForm = async () => { + const emptyTestFunction = getEmptyTestFunctionModel(); + setTestFunction(emptyTestFunction); + let formFields = generateFormFields(emptyTestFunction); + + // Get the dataProviderMode value to initialize field visibility + const modeField = formFields.find(f => f.key === 'dataProviderMode'); + const mode = String(modeField?.value || 'evalSet'); + setDataProviderMode(mode); + + // Set initial field visibility (default is 'evalSet' mode) + formFields = applyFieldVisibility(formFields, mode); + + setFormFields(formFields); + } + + const onFormSubmit = async (data: FormValues, formImports: FormImports) => { + setIsSaving(true); + const formData = { + ...data, + dataProviderMode: dataProviderMode + }; + const updatedTestFunction = fillFunctionModel(formData, formImports); + if (serviceType === 'UPDATE_TEST') { + await rpcClient.getTestManagerRpcClient().updateTestFunction({ function: updatedTestFunction, filePath }); + } else { + await rpcClient.getTestManagerRpcClient().addTestFunction({ function: updatedTestFunction, filePath }); + } + try { + const res = await rpcClient.getTestManagerRpcClient().getTestFunction( + { functionName: updatedTestFunction.functionName.value, filePath }); + const nodePosition = { + startLine: res.function.codedata.lineRange.startLine.line, + startColumn: res.function.codedata.lineRange.startLine.offset, + endLine: res.function.codedata.lineRange.endLine.line, + endColumn: res.function.codedata.lineRange.endLine.offset + }; + rpcClient.getVisualizerRpcClient().openView( + { type: EVENT_TYPE.OPEN_VIEW, location: { position: nodePosition, documentUri: filePath } }) + } + catch (error) { + console.error('Failed to open function in diagram:', error); + setIsSaving(false); + } + }; + + // Helper function to modify and set the visual information + const handleParamChange = (param: Parameter) => { + const name = `${param.formValues['variable']}`; + const type = `${param.formValues['type']}`; + const defaultValue = Object.keys(param.formValues).indexOf('defaultable') > -1 && `${param.formValues['defaultable']}`; + let value = `${type} ${name}`; + if (defaultValue) { + value += ` = ${defaultValue}`; + } + return { + ...param, + key: name, + value: value + } + }; + + const generateFormFields = (testFunction: TestFunction): FormField[] => { + const fields: FormField[] = []; + if (testFunction.functionName) { + fields.push(generateFieldFromProperty('functionName', testFunction.functionName)); + } + if (testFunction.parameters) { + fields.push({ + key: `params`, + label: 'Parameters', + type: 'PARAM_MANAGER', + optional: true, + editable: true, + enabled: true, + advanced: true, + hidden: true, + documentation: '', + value: '', + paramManagerProps: { + paramValues: generateParamFields(testFunction.parameters), + formFields: paramFields, + handleParameter: handleParamChange + }, + types: [{ fieldType: "PARAM_MANAGER", selected: false }] + }); + } + if (testFunction.annotations) { + const configAnnotation = getTestConfigAnnotation(testFunction.annotations); + if (configAnnotation && configAnnotation.fields) { + const minPassRateField = configAnnotation.fields.find(f => f.originalName === 'minPassRate'); + if (minPassRateField) { + const generatedField = generateFieldFromProperty('minPassRate', minPassRateField); + fields.push({ + ...generatedField, + type: 'SLIDER', + types: [{ fieldType: 'SLIDER', selected: false }], + sliderProps: { + min: 0, + max: 100, + step: 1, + showValue: true, + showMarkers: true, + valueFormatter: (value: number) => `${value}%` + } + }); + } + + const evalSetFileField = configAnnotation.fields.find(f => f.originalName === 'evalSetFile'); + if (evalSetFileField) { + fields.push({ + ...generateFieldFromProperty('evalSetFile', evalSetFileField), + type: 'SINGLE_SELECT', + types: [{ fieldType: 'SINGLE_SELECT', selected: false }], + itemOptions: evalsetOptions + }); + } + + for (const field of configAnnotation.fields) { + // Skip fields already processed + if (field.originalName === 'dataProviderMode' || + field.originalName === 'minPassRate' || + field.originalName === 'evalSetFile') { + continue; + } + + // Special handling for groups and dependsOn - use EXPRESSION_SET + if (field.originalName === 'groups' || field.originalName === 'dependsOn') { + fields.push({ + ...generateFieldFromProperty(field.originalName, field), + type: 'EXPRESSION_SET', + advanced: true, + types: [{ fieldType: 'EXPRESSION_SET', selected: false }] + }); + continue; + } + + // Special handling for expression fields - ensure they use EXPRESSION type + if (field.originalName === 'before' || field.originalName === 'after' || + field.originalName === 'runs' || field.originalName === 'dataProvider') { + fields.push({ + ...generateFieldFromProperty(field.originalName, field), + type: 'EXPRESSION', + advanced: true, + types: [{ fieldType: 'EXPRESSION', selected: false }] + }); + continue; + } + + // Special handling for enabled - use FLAG + if (field.originalName === 'enabled') { + fields.push({ + ...generateFieldFromProperty(field.originalName, field), + type: 'FLAG', + advanced: true, + types: [{ fieldType: 'FLAG', selected: false }] + }); + continue; + } + + fields.push(generateFieldFromProperty(field.originalName, field)); + } + } + } + return fields; + } + + const getTestConfigAnnotation = (annotations: Annotation[]): Annotation | undefined => { + for (const annotation of annotations) { + if (annotation.name === 'Config') { + return annotation; + } + } + return; + } + + const generateParamFields = (parameters: FunctionParameter[]): Parameter[] => { + const params: Parameter[] = []; + let id = 0; + for (const param of parameters) { + const key = param.variable.value; + const type = param.type.value; + + const value = `${type} ${key}`; + params.push({ + id: id, + formValues: { + variable: key, + type: type, + defaultable: param.defaultValue ? param.defaultValue.value : '' + }, + key: key, + value: value, + icon: '', + identifierEditable: param.variable?.editable, + identifierRange: param.variable?.codedata?.lineRange + }); + + id++; + } + return params + } + + const generateFieldFromProperty = (key: string, property: ValueProperty): FormField => { + const fieldType = getPrimaryInputType(property.types)?.fieldType; + + // Convert decimal (0-1) to percentage (0-100) for minPassRate display + let displayValue = property.value; + if (key === 'minPassRate') { + const decimalValue = parseFloat(property.value); + displayValue = String(Math.round((isNaN(decimalValue) ? 1 : decimalValue) * 100)); + } + + const baseField: FormField = { + key: key, + label: property.metadata.label, + type: fieldType, + optional: property.optional, + editable: property.editable, + advanced: property.advanced, + enabled: true, + documentation: property.metadata.description, + value: displayValue, + types: [{ fieldType: fieldType, selected: false }] + }; + + // Add slider-specific configuration for minPassRate + if (key === 'minPassRate' && fieldType === 'SLIDER') { + baseField.sliderProps = { + min: 0, + max: 100, + step: 1, + showValue: true, + showMarkers: true, + valueFormatter: (value: number) => `${value}%` + }; + } + + return baseField; + } + + const fillFunctionModel = (formValues: FormValues, formImports: FormImports): TestFunction => { + let tmpTestFunction = testFunction; + if (!tmpTestFunction) { + tmpTestFunction = {}; + } + + if (formValues['functionName']) { + tmpTestFunction.functionName.value = formValues['functionName']; + } + + if (formValues['returnType']) { + tmpTestFunction.returnType.value = formValues['returnType']; + tmpTestFunction.returnType.imports = getImportsForProperty('returnType', formImports); + } + + if (formValues['params']) { + const params = formValues['params']; + const paramList: FunctionParameter[] = []; + for (const param of params) { + const paramFormValues = param.formValues; + const variable = paramFormValues['variable']; + const type = paramFormValues['type']; + const typeImports = getImportsForProperty('params', formImports); + const defaultValue = paramFormValues['defaultable']; + let emptyParam = getEmptyParamModel(); + emptyParam.variable.value = variable; + emptyParam.type.value = type; + emptyParam.type.imports = typeImports; + emptyParam.defaultValue.value = defaultValue; + paramList.push(emptyParam); + } + tmpTestFunction.parameters = paramList; + } + + let annots = tmpTestFunction.annotations; + for (const annot of annots) { + if (annot.name == 'Config') { + let configAnnot = annot; + let fields = configAnnot.fields; + for (const field of fields) { + if (field.originalName == 'groups') { + field.value = formValues['groups']; + } + if (field.originalName == 'enabled') { + field.value = formValues['enabled']; + } + if (field.originalName == 'dependsOn') { + field.value = formValues['dependsOn'] || []; + } + if (field.originalName == 'before') { + field.value = formValues['before'] || ""; + } + if (field.originalName == 'after') { + field.value = formValues['after'] || ""; + } + if (field.originalName == 'runs') { + field.value = formValues['runs'] || "1"; + } + if (field.originalName == 'minPassRate') { + // Convert percentage (0-100) to decimal (0-1) + const percentageValue = formValues['minPassRate'] ?? 100; + field.value = String(Number(percentageValue) / 100); + } + if (field.originalName == 'dataProviderMode') { + field.value = formValues['dataProviderMode'] || "function"; + } + if (field.originalName == 'dataProvider') { + if (formValues['dataProviderMode'] === 'function') { + field.value = formValues['dataProvider'] || ""; + } + // Preserve existing dataProvider value when in evalSet mode + // (backend creates it from evalSetFile) + } + if (field.originalName == 'evalSetFile') { + if (formValues['dataProviderMode'] === 'evalSet') { + field.value = formValues['evalSetFile'] || ""; + } + // Preserve existing evalSetFile value when in function mode + } + } + } + } + + return tmpTestFunction; + } + + const getEmptyParamModel = (): FunctionParameter => { + return { + type: { + value: "string", + optional: false, + editable: true, + advanced: false, + types: [{ fieldType: "TYPE", selected: false }] + }, + variable: { + value: "b", + optional: false, + editable: true, + advanced: false, + types: [{ fieldType: "IDENTIFIER", selected: false }] + }, + defaultValue: { + value: "\"default\"", + optional: false, + editable: true, + advanced: false, + types: [{ fieldType: "EXPRESSION", selected: false }] + }, + optional: false, + editable: true, + advanced: false + } + + } + + const getEmptyTestFunctionModel = (): TestFunction => { + return { + functionName: { + metadata: { + label: "AI Evaluation Name", + description: "Name of the AI evaluation" + }, + value: "", + optional: false, + editable: true, + advanced: false, + types: [{ fieldType: "IDENTIFIER", selected: false }] + }, + returnType: { + metadata: { + label: "Return Type", + description: "Return type of the function" + }, + optional: true, + editable: true, + advanced: true, + types: [{ fieldType: "TYPE", selected: false }], + }, + parameters: [], + annotations: [ + { + metadata: { + label: "Config", + description: "AI Evaluation Configurations" + }, + org: "ballerina", + module: "test", + name: "Config", + fields: [ + { + metadata: { + label: "Enabled", + description: "Enable/Disable the evaluation" + }, + originalName: "enabled", + value: true, + optional: true, + editable: true, + advanced: true, + types: [{ fieldType: "FLAG", selected: false }] + }, + { + metadata: { + label: "Groups", + description: "Groups to run" + }, + types: [{ fieldType: "EXPRESSION_SET", selected: false }], + originalName: "groups", + value: ["evaluations"], + optional: true, + editable: true, + advanced: true + }, + { + metadata: { + label: "Depends On", + description: "List of test function names that this test depends on" + }, + types: [{ fieldType: "EXPRESSION_SET", selected: false }], + originalName: "dependsOn", + value: [], + optional: true, + editable: true, + advanced: true + }, + { + metadata: { + label: "Before Function", + description: "Function to execute before this test" + }, + types: [{ fieldType: "EXPRESSION", selected: false }], + originalName: "before", + value: "", + optional: true, + editable: true, + advanced: true + }, + { + metadata: { + label: "After Function", + description: "Function to execute after this test" + }, + types: [{ fieldType: "EXPRESSION", selected: false }], + originalName: "after", + value: "", + optional: true, + editable: true, + advanced: true + }, + { + metadata: { + label: "Runs", + description: "Number of times to execute this test" + }, + types: [{ fieldType: "EXPRESSION", selected: false }], + originalName: "runs", + value: "1", + optional: true, + editable: true, + advanced: true + }, + { + metadata: { + label: "Minimum Pass Rate (%)", + description: "Minimum percentage of runs that must pass (0-100)" + }, + types: [{ fieldType: "SLIDER", selected: false }], + originalName: "minPassRate", + value: "1.0", + optional: true, + editable: true, + advanced: false + }, + { + metadata: { + label: "", + description: "Choose how to provide test data" + }, + types: [{ fieldType: "STRING", selected: false }], + originalName: "dataProviderMode", + value: "function", + optional: true, + editable: true, + advanced: true + }, + { + metadata: { + label: "Data Provider", + description: "Function that provides test data" + }, + types: [{ fieldType: "EXPRESSION", selected: false }], + originalName: "dataProvider", + value: "", + optional: true, + editable: true, + advanced: true + }, + { + metadata: { + label: "Evalset File", + description: "Select an evalset for test data" + }, + types: [{ fieldType: "STRING", selected: false }], + originalName: "evalSetFile", + value: "", + optional: true, + editable: true, + advanced: false + } + ] + } + ], + editable: true + } + } + + const paramFields: FormField[] = [ + { + key: `variable`, + label: 'Name', + type: 'string', + optional: false, + editable: true, + enabled: true, + documentation: '', + value: '', + types: [{ fieldType: "IDENTIFIER", selected: false }] + }, + { + key: `type`, + label: 'Type', + type: 'TYPE', + optional: false, + editable: true, + enabled: true, + documentation: '', + value: '', + types: [{ fieldType: "TYPE", selected: false }] + }, + { + key: `defaultable`, + label: 'Default Value', + type: 'string', + optional: true, + advanced: true, + editable: true, + enabled: true, + documentation: '', + value: '', + types: [{ fieldType: "STRING", selected: false }] + } + ]; + + const cardOptions = [ + { + value: 'evalSet', + title: 'From Evalset', + description: 'Use conversation traces from an existing dataset to evaluate your agent.', + icon: + }, + { + value: 'function', + title: 'Standalone/Custom', + description: 'Implement a fully custom logic to evaluate specific behaviors from scratch.', + icon: + } + ]; + + const handleCardSelectorChange = (value: string) => { + setDataProviderMode(value); + updateFieldVisibility(value); + }; + + // Show upgrade message if version is not supported + if (isVersionSupported === false) { + return ( + + + + + + Please upgrade your Ballerina version + + AI Evaluation features require Ballerina version 2201.13.2 or higher. + Please upgrade your Ballerina installation to use this feature. + + + + + ); + } + + return ( + + + + + + + + + {targetLineRange && ( + , + index: 2 + } + ]} + /> + )} + + + + + ); +} + diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/BI/ComponentDiagram/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/BI/ComponentDiagram/index.tsx index e7239fd1a86..33f3427f0bd 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/BI/ComponentDiagram/index.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/BI/ComponentDiagram/index.tsx @@ -139,7 +139,7 @@ export function ComponentDiagram(props: ComponentDiagramProps) { }); }; - const handleDeleteComponent = async (component: CDListener | CDService | CDAutomation | CDConnection) => { + const handleDeleteComponent = async (component: CDListener | CDService | CDAutomation | CDConnection, nodeType?: string) => { console.log(">>> delete component", component); setIsDeleting(true); rpcClient @@ -154,6 +154,7 @@ export function ComponentDiagram(props: ComponentDiagramProps) { endLine: component.location.endLine.line, endColumn: component.location.endLine.offset, }, + nodeType }) .then((response) => { console.log(">>> Updated source code after delete", response); diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/BI/ComponentListView/OtherArtifactsPanel.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/BI/ComponentListView/OtherArtifactsPanel.tsx index aa94241a313..ebe8b4be466 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/BI/ComponentListView/OtherArtifactsPanel.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/BI/ComponentListView/OtherArtifactsPanel.tsx @@ -27,13 +27,19 @@ import { useVisualizerContext } from '../../../Context'; interface OtherArtifactsPanelProps { isNPSupported: boolean; + isLibrary?: boolean; } export function OtherArtifactsPanel(props: OtherArtifactsPanelProps) { - const { isNPSupported } = props; + const { isNPSupported, isLibrary = false } = props; const { rpcClient } = useRpcContext(); const { setPopupMessage } = useVisualizerContext(); + const panelTitle = isLibrary ? "Library Artifacts" : "Other Artifacts"; + const panelDescription = isLibrary + ? "Create reusable artifacts for your library." + : "Create supportive artifacts for your integration."; + const handleClick = async (key: DIRECTORY_MAP) => { if (key === DIRECTORY_MAP.CONNECTION) { await rpcClient.getVisualizerRpcClient().openView({ @@ -87,9 +93,9 @@ export function OtherArtifactsPanel(props: OtherArtifactsPanelProps) { return ( - Other Artifacts + {panelTitle} - Create supportive artifacts for your integration. + {panelDescription} diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/BI/ComponentListView/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/BI/ComponentListView/index.tsx index 919567cd046..b4f69affff4 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/BI/ComponentListView/index.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/BI/ComponentListView/index.tsx @@ -43,6 +43,7 @@ export function ComponentListView(props: ComponentListViewProps) { const [triggers, setTriggers] = useState({ local: [] }); const { cacheTriggers, setCacheTriggers } = useVisualizerContext(); const [isNPSupported, setIsNPSupported] = useState(false); + const [isLibrary, setIsLibrary] = useState(false); useEffect(() => { getTriggers(); @@ -50,7 +51,14 @@ export function ComponentListView(props: ComponentListViewProps) { rpcClient.getCommonRpcClient().isNPSupported().then((supported) => { setIsNPSupported(supported); }); - }, []); + + rpcClient.getBIDiagramRpcClient().getProjectStructure().then((res) => { + const project = res.projects.find(project => project.projectPath === projectPath); + if (project) { + setIsLibrary(project.isLibrary ?? false); + } + }); + }, [rpcClient, projectPath]); const getTriggers = () => { if (cacheTriggers.local.length > 0) { @@ -67,19 +75,28 @@ export function ComponentListView(props: ComponentListViewProps) { } }; + const title = isLibrary ? "Library Artifacts" : "Artifacts"; + const subtitle = isLibrary + ? "Add reusable artifacts to your library" + : "Add a new artifact to your integration"; + return ( - + - - - - - - + {!isLibrary && ( + <> + + + + + + + )} + diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/BI/Configurables/ConfigurableItem/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/BI/Configurables/ConfigurableItem/index.tsx index d2bdd2d25e4..18146a936db 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/BI/Configurables/ConfigurableItem/index.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/BI/Configurables/ConfigurableItem/index.tsx @@ -95,6 +95,7 @@ interface ConfigurableItemProps { moduleName: string; index: number; fileName: string; + isTestsContext?: boolean; onDeleteConfigVariable?: (index: number) => void; onFormSubmit: () => void; updateErrorMessage?: (message: string) => void; @@ -124,6 +125,8 @@ export function ConfigurableItem(props: ConfigurableItemProps) { setEditConfigVariableFormOpen(true); }; + const activeValueKey = props.isTestsContext ? 'testConfigValue' : 'configValue'; + const handleTextAreaChange = (value: any) => { if (configVariable.properties?.type?.value === 'string' && !/^".*"$/.test(value)) { value = `"${value}"`; @@ -143,8 +146,8 @@ export function ConfigurableItem(props: ConfigurableItemProps) { ...prevNode, properties: { ...prevNode.properties, - configValue: { - ...prevNode.properties.configValue, + [activeValueKey]: { + ...prevNode.properties[activeValueKey], value: newValue, modified: true } @@ -166,8 +169,8 @@ export function ConfigurableItem(props: ConfigurableItemProps) { ...prevState, properties: { ...prevState.properties, - configValue: { - ...prevState.properties.configValue, + [activeValueKey]: { + ...prevState.properties[activeValueKey], value: newValue } } @@ -234,7 +237,7 @@ export function ConfigurableItem(props: ConfigurableItemProps) { ` (Defaults to: ${String(configVariable?.properties?.defaultValue?.value)})`}
} {(!configVariable?.properties?.defaultValue?.value && - !configVariable?.properties?.configValue?.value) && ( + !configVariable?.properties?.[activeValueKey]?.value) && ( // Warning icon if no value is configured diff --git a/workspaces/choreo/choreo-webviews/src/views/ComponentListView/NoContextView.tsx b/workspaces/choreo/choreo-webviews/src/views/ComponentListView/NoContextView.tsx index 65a1805c460..f87d040ab48 100644 --- a/workspaces/choreo/choreo-webviews/src/views/ComponentListView/NoContextView.tsx +++ b/workspaces/choreo/choreo-webviews/src/views/ComponentListView/NoContextView.tsx @@ -37,14 +37,14 @@ export const NoContextView: FC = ({ loading }) => { <> {loading && }
-

Choreo project/component directories are not detected within the current workspace.

+

WSO2 Developer Platform project/component directories are not detected within the current workspace.

Create a new component.

diff --git a/workspaces/choreo/choreo-webviews/src/views/SignInView/SignInView.tsx b/workspaces/choreo/choreo-webviews/src/views/SignInView/SignInView.tsx index 8eb6df03d2d..ca60afdd110 100644 --- a/workspaces/choreo/choreo-webviews/src/views/SignInView/SignInView.tsx +++ b/workspaces/choreo/choreo-webviews/src/views/SignInView/SignInView.tsx @@ -33,7 +33,7 @@ export const SignInView: FC = ({ className }) => { }); return (
-

Sign in to Choreo to get started.

+

Sign in to WSO2 Developer Platform to get started.

diff --git a/workspaces/common-libs/component-diagram/package.json b/workspaces/common-libs/component-diagram/package.json index 86d9616c323..477ce1b9dbd 100644 --- a/workspaces/common-libs/component-diagram/package.json +++ b/workspaces/common-libs/component-diagram/package.json @@ -21,28 +21,28 @@ "author": "", "license": "ISC", "dependencies": { - "react": "~18.2.0", - "react-dom": "~18.2.0", - "@projectstorm/geometry": "^6.7.4", - "@projectstorm/react-canvas-core": "^7.0.3", - "@projectstorm/react-diagrams": "^7.0.4", - "@projectstorm/react-diagrams-core": "^7.0.3", - "@projectstorm/react-diagrams-defaults": "^7.1.3", - "@projectstorm/react-diagrams-routing": "^7.1.3", - "@emotion/react": "^11.9.3", - "@emotion/styled": "^11.10.5", + "react": "18.2.0", + "react-dom": "18.2.0", + "@projectstorm/geometry": "6.7.4", + "@projectstorm/react-canvas-core": "7.0.3", + "@projectstorm/react-diagrams": "7.0.4", + "@projectstorm/react-diagrams-core": "7.0.3", + "@projectstorm/react-diagrams-defaults": "7.1.3", + "@projectstorm/react-diagrams-routing": "7.1.3", + "@emotion/react": "11.9.3", + "@emotion/styled": "11.10.5", "@wso2/ballerina-core": "workspace:*", "@wso2/ui-toolkit": "workspace:*", - "dagre": "~0.8.5", + "dagre": "0.8.5", "lodash": "4.17.23" }, "devDependencies": { - "@storybook/react": "^9.0.0", - "@types/react": "^18.2.0", - "@types/react-dom": "^18.2.0", - "typescript": "^5.8.3", - "@types/dagre": "~0.7.52", - "@types/lodash": "~4.17.17", - "copyfiles": "^2.4.1" + "@storybook/react": "9.0.0", + "@types/react": "18.2.0", + "@types/react-dom": "18.2.0", + "typescript": "5.8.3", + "@types/dagre": "0.7.52", + "@types/lodash": "4.17.17", + "copyfiles": "2.4.1" } } diff --git a/workspaces/common-libs/font-wso2-vscode/package.json b/workspaces/common-libs/font-wso2-vscode/package.json index feaceabe583..e93fe6ad65b 100644 --- a/workspaces/common-libs/font-wso2-vscode/package.json +++ b/workspaces/common-libs/font-wso2-vscode/package.json @@ -12,9 +12,9 @@ "author": "", "license": "ISC", "devDependencies": { - "fantasticon": "^3.0.0", - "icon-font-generator": "^2.1.11", - "jsonc-parser": "^3.3.1", + "@twbs/fantasticon": "3.0.0", + "icon-font-generator": "2.1.11", + "jsonc-parser": "3.3.1", "@vscode/codicons": "0.0.44" } } diff --git a/workspaces/common-libs/font-wso2-vscode/src/generate-font/generate-font.js b/workspaces/common-libs/font-wso2-vscode/src/generate-font/generate-font.js index 3a2324ec559..b8585de8c36 100644 --- a/workspaces/common-libs/font-wso2-vscode/src/generate-font/generate-font.js +++ b/workspaces/common-libs/font-wso2-vscode/src/generate-font/generate-font.js @@ -16,7 +16,7 @@ * under the License. */ -const { generateFonts } = require('fantasticon'); +const { generateFonts } = require('@twbs/fantasticon'); const fs = require('fs'); const path = require('path'); diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/Devant.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/Devant.svg new file mode 100644 index 00000000000..f1ccc95b08e --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/Devant.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/arrow-down-right.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/arrow-down-right.svg new file mode 100644 index 00000000000..76b20d9a93e --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/arrow-down-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/arrow-left-up.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/arrow-left-up.svg new file mode 100644 index 00000000000..9f790a17852 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/arrow-left-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-action.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-action.svg new file mode 100644 index 00000000000..6e5c39fc614 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-action.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-chat.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-chat.svg new file mode 100644 index 00000000000..9cf9e4d5a51 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-chat.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-check.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-check.svg new file mode 100644 index 00000000000..5b7b6c275f4 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-check.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-clock.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-clock.svg new file mode 100644 index 00000000000..d58f543a1a9 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-clock.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-collapse-item.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-collapse-item.svg new file mode 100644 index 00000000000..94ee71f9ff5 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-collapse-item.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-copy.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-copy.svg new file mode 100644 index 00000000000..c48187d6484 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-copy.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-drag.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-drag.svg new file mode 100644 index 00000000000..0dc3285e6d5 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-drag.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-expand-item.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-expand-item.svg new file mode 100644 index 00000000000..93215cb989a --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-expand-item.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-focus.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-focus.svg new file mode 100644 index 00000000000..cfe31c93c20 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-focus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-function-flow.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-function-flow.svg new file mode 100644 index 00000000000..a69ddf13b6e --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-function-flow.svg @@ -0,0 +1 @@ + diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-left-panel-close.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-left-panel-close.svg new file mode 100644 index 00000000000..204de479b1d --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-left-panel-close.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-left-panel-open.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-left-panel-open.svg new file mode 100644 index 00000000000..10c7fd9680f --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-left-panel-open.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-list-tree.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-list-tree.svg new file mode 100644 index 00000000000..5a8a8845172 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-list-tree.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-milvus.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-milvus.svg index 24449702dca..a0458869ddd 100644 --- a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-milvus.svg +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-milvus.svg @@ -1,3 +1,3 @@ - - + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-minimize-modal.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-minimize-modal.svg new file mode 100644 index 00000000000..9773e4870f2 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-minimize-modal.svg @@ -0,0 +1,6 @@ + + + diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-output.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-output.svg new file mode 100644 index 00000000000..4400eeb1737 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-output.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-save.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-save.svg new file mode 100644 index 00000000000..b84de3737f6 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-save.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-send.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-send.svg new file mode 100644 index 00000000000..edee7f13d17 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-send.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-server.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-server.svg new file mode 100644 index 00000000000..c79c53e30a6 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-server.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-stop.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-stop.svg new file mode 100644 index 00000000000..52fd2537966 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-stop.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-thermostat.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-thermostat.svg new file mode 100644 index 00000000000..1ba48f5955e --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-thermostat.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-timeline.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-timeline.svg new file mode 100644 index 00000000000..b1974ee144a --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-timeline.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-user.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-user.svg index 5e4f4d56010..f19056a0e39 100644 --- a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-user.svg +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-user.svg @@ -1,23 +1,3 @@ - - - - + + \ No newline at end of file diff --git a/workspaces/common-libs/font-wso2-vscode/src/icons/bi-wrench.svg b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-wrench.svg new file mode 100644 index 00000000000..bdf3b73c3f5 --- /dev/null +++ b/workspaces/common-libs/font-wso2-vscode/src/icons/bi-wrench.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/workspaces/common-libs/playwright-vscode-tester/package.json b/workspaces/common-libs/playwright-vscode-tester/package.json index b200942cbc4..b308a1c4b87 100644 --- a/workspaces/common-libs/playwright-vscode-tester/package.json +++ b/workspaces/common-libs/playwright-vscode-tester/package.json @@ -9,11 +9,11 @@ }, "author": "WSO2", "devDependencies": { - "@types/fs-extra": "~11.0.1", - "@types/node": "~22.15.24", - "@types/unzipper": "~0.10.11", - "@typescript-eslint/eslint-plugin": "8.32.1", - "@typescript-eslint/parser": "8.32.1", + "@types/fs-extra": "11.0.1", + "@types/node": "22.15.24", + "@types/unzipper": "0.10.11", + "@typescript-eslint/eslint-plugin": "8.33.0", + "@typescript-eslint/parser": "8.33.0", "typescript": "5.8.3" }, "repository": { @@ -25,13 +25,13 @@ }, "dependencies": { - "@vscode/vsce": "^3.7.0", - "compare-versions": "~6.1.1", - "fs-extra": "~11.3.0", - "hpagent": "~1.2.0", - "targz": "~1.0.1", - "unzipper": "~0.12.3", - "playwright-core": "~1.55.1", + "@vscode/vsce": "3.7.0", + "compare-versions": "6.1.1", + "fs-extra": "11.3.0", + "hpagent": "1.2.0", + "targz": "1.0.1", + "unzipper": "0.12.3", + "playwright-core": "1.55.1", "got": "14.4.7", "@playwright/test": "1.55.1" } diff --git a/workspaces/common-libs/playwright-vscode-tester/src/browser.ts b/workspaces/common-libs/playwright-vscode-tester/src/browser.ts index 4df5089d450..ee276a7dab1 100644 --- a/workspaces/common-libs/playwright-vscode-tester/src/browser.ts +++ b/workspaces/common-libs/playwright-vscode-tester/src/browser.ts @@ -90,12 +90,17 @@ export class VSBrowser { "security.workspace.trust.enabled": false, "files.simpleDialog.enable": true, "terminal.integrated.copyOnSelection": true, + "terminal.integrated.gpuAcceleration": "off", "extensions.ignoreRecommendations": true, "extensions.autoUpdate": false, "chat.disableAIFeatures": true, "github.copilot.enable": false, "github.copilot.chat.enable": false, - "workbench.secondarySideBar.defaultVisibility": "hidden" + "workbench.secondarySideBar.defaultVisibility": "hidden", + "ballerina.traceLog": true, + "ballerina.enableTelemetry": true, + "ballerina.debugLog": true, + "ballerina-vscode.trace.server": "verbose" }; if (Object.keys(this.customSettings).length > 0) { console.log('Detected user defined code settings'); diff --git a/workspaces/common-libs/playwright-vscode-tester/src/codeUtil.ts b/workspaces/common-libs/playwright-vscode-tester/src/codeUtil.ts index b02f9eb661a..f5670bd0ad1 100644 --- a/workspaces/common-libs/playwright-vscode-tester/src/codeUtil.ts +++ b/workspaces/common-libs/playwright-vscode-tester/src/codeUtil.ts @@ -42,7 +42,7 @@ export const DEFAULT_RUN_OPTIONS = { * Includes downloading, unpacking, launching, and version checks. */ export class CodeUtil { - + private codeFolder: string; private downloadPlatform: string; private downloadFolder: string; @@ -75,7 +75,6 @@ export class CodeUtil { this.codeFolder = path.join(this.downloadFolder, (process.platform === 'darwin') ? 'Visual Studio Code - Insiders.app' : `VSCode-${this.downloadPlatform}-insider`); } - this.findExecutables(); } /** @@ -130,6 +129,7 @@ export class CodeUtil { } else { console.log('VS Code exists in local cache, skipping download'); } + this.findExecutables(); } /** @@ -159,6 +159,7 @@ export class CodeUtil { } private installExt(pathOrID: string): void { + this.ensureExecutablePaths(); let command = `${this.cliEnv} "${this.executablePath}" "${this.cliPath}" --ms-enable-electron-run-as-node --force --install-extension "${pathOrID}" --user-data-dir="${path.join(this.downloadFolder, 'settings', this.profileName, 'Code')}"`; if (this.extensionsFolder) { command += ` --extensions-dir=${this.extensionsFolder}`; @@ -173,6 +174,7 @@ export class CodeUtil { * @param paths vararg paths to files or folders to open */ open(...paths: string[]): void { + this.ensureExecutablePaths(); const segments = paths.map(f => `"${f}"`).join(' '); const command = `${this.cliEnv} "${this.executablePath}" "${this.cliPath}" --ms-enable-electron-run-as-node -r ${segments} --user-data-dir="${path.join(this.downloadFolder, 'settings', this.profileName, 'Code')}"`; child_process.execSync(command); @@ -216,6 +218,7 @@ export class CodeUtil { const extension = `${pjson.publisher}.${pjson.name}`; if (cleanup) { + this.ensureExecutablePaths(); let command = `${this.cliEnv} "${this.executablePath}" "${this.cliPath}" --ms-enable-electron-run-as-node --uninstall-extension "${extension}" --user-data-dir="${path.join(this.downloadFolder, 'settings', this.profileName, 'Code')}"`; if (this.extensionsFolder) { command += ` --extensions-dir=${this.extensionsFolder}`; @@ -352,7 +355,24 @@ export class CodeUtil { * Setup paths specific to used OS */ private findExecutables(): void { - this.cliPath = path.join(this.codeFolder, 'resources', 'app', 'out', 'cli.js'); + const defaultCliPath = path.join(this.codeFolder, 'resources', 'app', 'out', 'cli.js'); + this.cliPath = defaultCliPath; + + if (process.platform === 'win32' && fs.existsSync(this.codeFolder) && !fs.existsSync(this.cliPath)) { + const entries = fs.readdirSync(this.codeFolder, { withFileTypes: true }); + for (const entry of entries) { + if (!entry.isDirectory()) { + continue; + } + const candidate = path.join(this.codeFolder, entry.name, 'resources', 'app', 'out', 'cli.js'); + if (fs.existsSync(candidate)) { + this.cliPath = candidate; + break; + } + } + } + console.log(`Using CLI path: ${this.cliPath}`); + switch (process.platform) { case 'darwin': this.executablePath = path.join(this.codeFolder, 'Contents', 'MacOS', 'Electron'); @@ -386,10 +406,10 @@ export class CodeUtil { Object.assign(finalEnv, {}); const key = 'PATH'; finalEnv[key] = [this.downloadFolder, process.env[key]].join(path.delimiter); - + const browser = new VSBrowser(literalVersion, this.releaseType, runOptions.resources, {}, this.profileName, this.extensionsFolder); const launchArgs = await browser.getLaunchArgs() - + process.env = { ...process.env, ...finalEnv, @@ -407,13 +427,14 @@ export class CodeUtil { } async getBrowser(runOptions: RunOptions = DEFAULT_RUN_OPTIONS): Promise { + this.ensureExecutablePaths(); if (!runOptions.offline) { await this.checkCodeVersion(runOptions.vscodeVersion ?? DEFAULT_RUN_OPTIONS.vscodeVersion); } else { this.availableVersions = [await this.getExistingCodeVersion()]; } const literalVersion = runOptions.vscodeVersion === undefined || runOptions.vscodeVersion === 'latest' ? this.availableVersions[0] : runOptions.vscodeVersion; - + return { name: 'vscode', family: 'chromium', @@ -426,4 +447,10 @@ export class CodeUtil { isHeadless: process.env.CI === 'true' ? true : false, } } + + private ensureExecutablePaths(): void { + if (!this.executablePath || !this.cliPath) { + this.findExecutables(); + } + } } diff --git a/workspaces/common-libs/playwright-vscode-tester/src/components/Form.ts b/workspaces/common-libs/playwright-vscode-tester/src/components/Form.ts index 9bbd3577045..f9b64fe2956 100644 --- a/workspaces/common-libs/playwright-vscode-tester/src/components/Form.ts +++ b/workspaces/common-libs/playwright-vscode-tester/src/components/Form.ts @@ -23,7 +23,7 @@ export interface FormFillProps { values: { [key: string]: { value: string, - type: 'input' | 'dropdown' | 'checkbox' | 'combo' | 'expression' | 'file' | 'directory' | 'inlineExpression' | 'radio' | 'textarea', + type: 'input' | 'dropdown' | 'checkbox' | 'combo' | 'expression' | 'file' | 'directory' | 'inlineExpression' | 'radio' | 'textarea' | 'cmEditor', additionalProps?: { [key: string]: any } @@ -37,7 +37,7 @@ export interface ParamManagerValues { } export class Form { - private container!: Locator|Frame; + private container!: Locator | Frame; private webview!: Frame; constructor(private _page?: Page, private _name?: string, container?: Locator | Frame) { @@ -105,6 +105,9 @@ export class Form { if (data.additionalProps?.clickLabel) { await this.container.locator(`label:text("${key}")`).click(); } + if (data.additionalProps?.clickItem) { + await this.container.locator(`[data-testid="type-helper-item-${data.value}"]`).click(); + } break; } case 'dropdown': { @@ -159,6 +162,53 @@ export class Form { await textInput.fill(data.value); break; } + case 'cmEditor': { + // Handles fields rendered as CodeMirror cm-editor + // Try to directly find the ex-editor-{key} container, then interact with its .cm-editor + const exEditorTestId = `ex-editor-${key}`; + const containerDiv = this.container.locator(`div[data-testid="${exEditorTestId}"]`); + let found = await containerDiv.count(); + let cmEditor; + if (found) { + // Check if user has given to switch between Expression and Text mode + if (data.additionalProps?.switchMode) { + switch (data.additionalProps?.switchMode) { + case 'primary-mode': + if (await this._detectInputMode(containerDiv, data.additionalProps?.window) === 'expression') { + const primaryModeButton = containerDiv.locator('[data-testid="primary-mode"]'); + await primaryModeButton.waitFor({ state: 'visible', timeout: 5000 }); + await primaryModeButton.click(); + // Handle warning dialog if it appears (when switching from Expression to Text mode) + const continueButton = this.container.locator('vscode-button:has-text("Continue")'); + if (await continueButton.count() > 0) { + await continueButton.waitFor({ state: 'visible', timeout: 2000 }); + await continueButton.click(); + } + // Wait a bit for the mode switch to complete + await this._page?.waitForTimeout(500); + } + break; + case 'expression-mode': + if (await this._detectInputMode(containerDiv, data.additionalProps?.window) === 'text') { + const expressionModeButton = containerDiv.locator('[data-testid="expression-mode"]'); + await expressionModeButton.waitFor({ state: 'visible', timeout: 5000 }); + await expressionModeButton.click(); + // Wait a bit for the mode switch to complete + await this._page?.waitForTimeout(500); + } + break; + } + } + + cmEditor = containerDiv.locator('.cm-editor'); + await cmEditor.waitFor(); + const editorInput = cmEditor.locator('div[contenteditable="true"]'); + await editorInput.waitFor(); + await editorInput.click({ clickCount: 3 }); // Focus and select for replacement + await editorInput.fill(data.value); + } + break; + } case 'inlineExpression': { const parentDiv = this.container.locator(`label:text("${key}")`).locator('../..'); await parentDiv.waitFor(); @@ -264,4 +314,39 @@ export class Form { public async getWebview() { return this.webview; } + + + private async _detectInputMode(containerDiv: Locator, window: any): Promise<'text' | 'expression' | 'unknown'> { + // Method 1: Use mode switcher (most reliable - checks the actual UI state) + // Hover to show the mode switcher and check which button is active + try { + await containerDiv.hover(); + const primaryModeButton = containerDiv.locator('[data-testid="primary-mode"]'); + const expressionModeButton = containerDiv.locator('[data-testid="expression-mode"]'); + + if (await primaryModeButton.count() > 0 && await expressionModeButton.count() > 0) { + await primaryModeButton.waitFor({ state: 'visible', timeout: 2000 }); + await expressionModeButton.waitFor({ state: 'visible', timeout: 2000 }); + + // Check font-weight: active mode has font-weight: 600, inactive has 500 + const primaryFontWeight = await primaryModeButton.evaluate((el) => + parseInt(window.getComputedStyle(el).fontWeight) + ); + const expressionFontWeight = await expressionModeButton.evaluate((el) => + parseInt(window.getComputedStyle(el).fontWeight) + ); + + if (primaryFontWeight >= 600) { + return 'text'; + } else if (expressionFontWeight >= 600) { + return 'expression'; + } + } + } catch (error) { + // If mode switcher detection fails, fall back to input type detection + console.log('Mode switcher detection failed, falling back to input type detection:', error); + } + return 'unknown'; + } + } diff --git a/workspaces/common-libs/rpc-generator/package-lock.json b/workspaces/common-libs/rpc-generator/package-lock.json deleted file mode 100644 index 1f618683b8f..00000000000 --- a/workspaces/common-libs/rpc-generator/package-lock.json +++ /dev/null @@ -1,331 +0,0 @@ -{ - "name": "rpc-generator", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "rpc-generator", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "@ts-morph/common": "^0.27.0", - "ts-morph": "^26.0.0" - }, - "devDependencies": { - "@types/node": "^22.15.24" - } - }, - "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==", - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", - "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@ts-morph/common": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.27.0.tgz", - "integrity": "sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==", - "license": "MIT", - "dependencies": { - "fast-glob": "^3.3.3", - "minimatch": "^10.0.1", - "path-browserify": "^1.0.1" - } - }, - "node_modules/@types/node": { - "version": "22.19.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.0.tgz", - "integrity": "sha512-xpr/lmLPQEj+TUnHmR+Ab91/glhJvsqcjB+yY0Ix9GO70H6Lb4FHH5GeqdOE5btAx7eIMwuHkp4H2MSkLcqWbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/code-block-writer": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", - "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-morph": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-26.0.0.tgz", - "integrity": "sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==", - "license": "MIT", - "dependencies": { - "@ts-morph/common": "~0.27.0", - "code-block-writer": "^13.0.3" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - } - } -} diff --git a/workspaces/common-libs/rpc-generator/package.json b/workspaces/common-libs/rpc-generator/package.json index f699a919ce9..d2e9ea3aa3d 100644 --- a/workspaces/common-libs/rpc-generator/package.json +++ b/workspaces/common-libs/rpc-generator/package.json @@ -19,10 +19,10 @@ "@isaacs/brace-expansion": "^5.0.1" }, "devDependencies": { - "@types/node": "^22.15.24" + "@types/node": "22.15.24" }, "dependencies": { - "@ts-morph/common": "^0.27.0", - "ts-morph": "^26.0.0" + "@ts-morph/common": "0.27.0", + "ts-morph": "26.0.0" } } diff --git a/workspaces/common-libs/scripts/package-vsix.js b/workspaces/common-libs/scripts/package-vsix.js index 99516c70eeb..7a36f36c24b 100644 --- a/workspaces/common-libs/scripts/package-vsix.js +++ b/workspaces/common-libs/scripts/package-vsix.js @@ -6,10 +6,14 @@ const args = ['vsce', 'package', '--no-dependencies']; if (isPreRelease) { args.push('--pre-release'); } +const baseImagesUrlIndex = process.argv.indexOf('--baseImagesUrl'); +if (baseImagesUrlIndex !== -1 && process.argv.length > baseImagesUrlIndex + 1) { + args.push('--baseImagesUrl', process.argv[baseImagesUrlIndex + 1]); +} console.log(`Packaging VSIX with args: ${args.join(' ')}`); -const result = spawnSync('npx', args, { stdio: 'inherit' }); +const result = spawnSync('npx', args, { stdio: 'inherit', shell: true }); if (result.error) { console.error(`Failed to spawn vsce: ${result.error.message}`); diff --git a/workspaces/common-libs/service-designer/package.json b/workspaces/common-libs/service-designer/package.json index 09ff2a75d14..8391044dde3 100644 --- a/workspaces/common-libs/service-designer/package.json +++ b/workspaces/common-libs/service-designer/package.json @@ -21,10 +21,10 @@ "serve-storybook": "pnpm run build-storybook && http-server ./storybook-static -o" }, "dependencies": { - "@emotion/css": "^11.10.5", - "@emotion/react": "^11.9.3", - "@emotion/styled": "^11.10.5", - "@vscode/webview-ui-toolkit": "^1.2.0", + "@emotion/css": "11.10.5", + "@emotion/react": "11.9.3", + "@emotion/styled": "11.10.5", + "@vscode/webview-ui-toolkit": "1.2.0", "@vscode/codicons": "0.0.44", "@wso2/syntax-tree": "workspace:*", "@wso2/ui-toolkit": "workspace:*", @@ -35,21 +35,21 @@ "react-dom": ">=17.0.2" }, "devDependencies": { - "@storybook/addon-actions": "~7.4.0", - "@storybook/addon-essentials": "~7.4.0", - "@storybook/addon-links": "~7.4.0", - "@storybook/cli": "^7.6.10", - "@storybook/react": "~7.4.0", - "@storybook/react-webpack5": "~7.4.0", + "@storybook/addon-actions": "7.4.0", + "@storybook/addon-essentials": "7.4.0", + "@storybook/addon-links": "7.4.0", + "@storybook/cli": "7.6.10", + "@storybook/react": "7.4.0", + "@storybook/react-webpack5": "7.4.0", "@types/react": "18.2.0", "@types/react-dom": "18.2.0", "@typescript-eslint/eslint-plugin": "8.32.1", "@typescript-eslint/parser": "8.32.1", - "copyfiles": "^2.4.1", + "copyfiles": "2.4.1", "eslint": "9.27.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.4.4", - "eslint-plugin-react": "^7.33.1", + "eslint-plugin-react-hooks": "4.6.0", + "eslint-plugin-react-refresh": "0.4.4", + "eslint-plugin-react": "7.33.1", "typescript": "5.8.3" }, "author": "wso2", diff --git a/workspaces/common-libs/ui-toolkit/package.json b/workspaces/common-libs/ui-toolkit/package.json index e3ecb7c9535..ecf2511b701 100644 --- a/workspaces/common-libs/ui-toolkit/package.json +++ b/workspaces/common-libs/ui-toolkit/package.json @@ -21,53 +21,52 @@ "serve-storybook": "pnpm run build-storybook && http-server ./storybook-static -o" }, "dependencies": { - "@emotion/css": "^11.10.5", - "@emotion/react": "^11.9.3", - "@emotion/styled": "^11.10.5", - "@headlessui/react": "~1.7.18", - "@monaco-editor/react": "~4.7.0", - "@projectstorm/geometry": "^6.7.4", - "@projectstorm/react-canvas-core": "^6.7.4", - "@projectstorm/react-diagrams": "^6.7.4", - "@projectstorm/react-diagrams-core": "^7.0.3", + "@emotion/css": "11.10.5", + "@emotion/react": "11.14.0", + "@emotion/styled": "11.14.0", + "@headlessui/react": "1.7.18", + "@monaco-editor/react": "4.7.0", + "@projectstorm/geometry": "6.7.4", + "@projectstorm/react-canvas-core": "6.7.4", + "@projectstorm/react-diagrams": "6.7.4", + "@projectstorm/react-diagrams-core": "7.0.3", "@vscode/codicons": "0.0.44", - "@vscode/webview-ui-toolkit": "~1.4.0", + "@vscode/webview-ui-toolkit": "1.4.0", "@wso2/font-wso2-vscode": "workspace:*", - "classnames": "^2.5.1", + "classnames": "2.5.1", "lodash": "4.17.23", - "monaco-editor": "~0.52.2", - "prismjs": "^1.30.0", - "react-hook-form": "7.56.3" + "monaco-editor": "0.52.2", + "prismjs": "1.30.0", + "react-hook-form": "7.56.4" }, "peerDependencies": { "react": "18.2.0", "react-dom": "18.2.0" }, "devDependencies": { - "@storybook/addon-docs": "^8.6.14", - "@storybook/addon-essentials": "^8.6.14", - "@storybook/react": "^8.6.14", - "@storybook/cli": "^8.6.14", - "@types/lodash": "~4.17.16", - "@types/prismjs": "^1.26.5", - "@storybook/react-vite": "^8.6.14", + "@storybook/addon-docs": "8.6.14", + "@storybook/addon-essentials": "8.6.14", + "@storybook/react": "8.6.14", + "@storybook/cli": "8.6.14", + "@types/lodash": "4.17.16", + "@types/prismjs": "1.26.5", + "@storybook/react-vite": "8.6.14", "@types/react": "18.2.0", "@types/react-dom": "18.2.0", "@typescript-eslint/eslint-plugin": "8.32.1", "@typescript-eslint/parser": "8.32.1", - "copyfiles": "~2.4.1", + "copyfiles": "2.4.1", "eslint": "9.27.0", - "eslint-plugin-react": "^7.37.5", - "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-storybook": "^0.8.0", - "gh-pages": "^6.3.0", - "glob": "^11.1.0", - "http-server": "^14.1.1", - "react-error-boundary": "^6.0.0", - "react-hook-form": "7.56.4", - "storybook": "^8.6.14", + "eslint-plugin-react": "7.37.5", + "eslint-plugin-react-hooks": "5.2.0", + "eslint-plugin-storybook": "0.8.0", + "gh-pages": "6.3.0", + "glob": "11.1.0", + "http-server": "14.1.1", + "react-error-boundary": "6.0.0", + "storybook": "8.6.14", "typescript": "5.8.3", - "vite": "^6.0.7" + "vite": "6.0.7" }, "author": "wso2", "license": "UNLICENSED", diff --git a/workspaces/common-libs/ui-toolkit/src/components/CheckBoxGroup/CheckBoxGroup.tsx b/workspaces/common-libs/ui-toolkit/src/components/CheckBoxGroup/CheckBoxGroup.tsx index cacaf694ca9..fc33c13f178 100644 --- a/workspaces/common-libs/ui-toolkit/src/components/CheckBoxGroup/CheckBoxGroup.tsx +++ b/workspaces/common-libs/ui-toolkit/src/components/CheckBoxGroup/CheckBoxGroup.tsx @@ -30,6 +30,7 @@ export type CheckBoxProps = { labelAdornment?: ReactNode; value?: string; checked: boolean; + indeterminate?: boolean; disabled?: boolean; sx?: any; onChange: (checked: boolean) => void; @@ -66,7 +67,16 @@ const LabelContainer = styled.div` flex-direction: row; margin-bottom: 2px; `; -export const CheckBox = ({ label, labelAdornment, value, sx, checked, onChange, disabled }: CheckBoxProps) => { +export const CheckBox = ({ label, labelAdornment, value, sx, checked, indeterminate, onChange, disabled }: CheckBoxProps) => { + const checkboxRef = React.useRef(null); + + // Set indeterminate property on the native input element + React.useEffect(() => { + if (checkboxRef.current) { + checkboxRef.current.indeterminate = indeterminate ?? false; + } + }, [indeterminate]); + const handleChange = (e: React.ChangeEvent) => { onChange(e.target.checked); }; @@ -79,6 +89,7 @@ export const CheckBox = ({ label, labelAdornment, value, sx, checked, onChange, return (
) => void; + sx?: React.CSSProperties; }; export const ClickAwayListener: React.FC> = (props: PropsWithChildren) => { - const { anchorEl, isMenuOpen, children, onClickAway } = props; + const { anchorEl, isMenuOpen, children, onClickAway, sx } = props; const ref = React.useRef(null); const handleClickAway = useCallback((event: MouseEvent) => { @@ -53,7 +54,7 @@ export const ClickAwayListener: React.FC + {children} {isMenuOpen && ( diff --git a/workspaces/common-libs/ui-toolkit/src/components/Codicon/Codicon.tsx b/workspaces/common-libs/ui-toolkit/src/components/Codicon/Codicon.tsx index 81a89ad84b5..81f76b16bcf 100644 --- a/workspaces/common-libs/ui-toolkit/src/components/Codicon/Codicon.tsx +++ b/workspaces/common-libs/ui-toolkit/src/components/Codicon/Codicon.tsx @@ -46,7 +46,7 @@ export const Codicon: React.FC = (props: CodiconProps) => { const handleComponentClick = (event?: React.MouseEvent) => { onClick && onClick(event); } - const icon = (); + const icon = (); return ( diff --git a/workspaces/common-libs/ui-toolkit/src/components/Dropdown/Dropdown.tsx b/workspaces/common-libs/ui-toolkit/src/components/Dropdown/Dropdown.tsx index 9d9d1929008..abd962b43b7 100644 --- a/workspaces/common-libs/ui-toolkit/src/components/Dropdown/Dropdown.tsx +++ b/workspaces/common-libs/ui-toolkit/src/components/Dropdown/Dropdown.tsx @@ -106,7 +106,7 @@ export const Dropdown = React.forwardRef((prop {isLoading ? ( ) : ( - + {label && (