diff --git a/.github/workflows/build_pull_request.yml b/.github/workflows/build_pull_request.yml index 08e8b4042ab..261bbf85630 100644 --- a/.github/workflows/build_pull_request.yml +++ b/.github/workflows/build_pull_request.yml @@ -17,7 +17,7 @@ permissions: jobs: # JOB to run change detection changes: - runs-on: blacksmith-4vcpu-ubuntu-2404 + runs-on: ubuntu-latest # Required permissions permissions: pull-requests: read @@ -42,7 +42,7 @@ jobs: cli: needs: changes if: ${{ needs.changes.outputs.cli == 'true' }} - runs-on: blacksmith-4vcpu-ubuntu-2404 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -76,7 +76,7 @@ jobs: client: needs: changes if: ${{ needs.changes.outputs.client == 'true' }} - runs-on: blacksmith-4vcpu-ubuntu-2404 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: @@ -105,7 +105,7 @@ jobs: server: needs: changes if: ${{ needs.changes.outputs.server == 'true' }} - runs-on: blacksmith-4vcpu-ubuntu-2404 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/build_push.yml b/.github/workflows/build_push.yml index 9bfa04b2e73..eaf95cf2992 100644 --- a/.github/workflows/build_push.yml +++ b/.github/workflows/build_push.yml @@ -16,7 +16,7 @@ permissions: jobs: cli: - runs-on: blacksmith-4vcpu-ubuntu-2404 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -48,7 +48,7 @@ jobs: run: ../gradlew build jacocoTestReport sonar --quiet client: - runs-on: blacksmith-4vcpu-ubuntu-2404 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: @@ -75,7 +75,7 @@ jobs: projectBaseDir: client/ server: - runs-on: blacksmith-4vcpu-ubuntu-2404 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 diff --git a/.junie/guidelines.md b/.junie/guidelines.md index d313888642e..789c4e20540 100644 --- a/.junie/guidelines.md +++ b/.junie/guidelines.md @@ -366,14 +366,4 @@ Access the application at http://localhost:8080 - Formatting rules: - Break each chained step onto its own line when there are 3+ operations or line length would exceed limits - Keep declarative chains (queries, reactive pipelines) as one logical block; prefer one operation per line -- Avoid chaining when side effects are involved or intermediate values deserve names for clarity/debugging - -## Working with Tasks - -Follow these guidelines when working with the `docs/tasks.md` checklist: - -1. **Mark Completion**: Mark tasks as `[x]` as soon as they are completed. -2. **Task Modification**: Keep existing phases intact. If additional steps are identified during development, add them as new tasks within the appropriate phase. -3. **Traceability**: Ensure every new or modified task remains linked to both a requirement in `docs/requirements.md` and a plan item in `docs/plan.md`. -4. **Consistency**: Maintain the existing formatting style for tasks, including headings, indentation, and linking format. -5. **Periodic Review**: Regularly sync the task list with the actual progress of the development to ensure it remains an accurate source of truth. + - Avoid chaining when side effects are involved or intermediate values deserve names for clarity/debugging diff --git a/AGENTS.md b/AGENTS.md index 7413c79301a..e4b06b495a9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -357,86 +357,20 @@ it('should render button', () => { ### E2E Tests (Playwright) -- Location: `test/playwright/` -- **Fixtures Pattern**: Use independent fixtures combined with `mergeTests` (following Liferay pattern) -- **Fixtures Location**: `test/playwright/fixtures/` -- **Available Fixtures**: - - `loginTest()` - Provides `authenticatedPage` (function, call with `()`) - - `projectTest` - Provides `project` (auto-creates and cleans up) - - `workflowTest` - Provides `workflow` (requires `project` when merged) - -#### Fixtures Pattern - -**The `use` Hook**: Playwright fixtures use a `use` callback that: -1. **Setup** (before `use`) - Creates resources -2. **Test Execution** (during `use`) - Your test runs -3. **Cleanup** (after `use`) - Automatically cleans up resources +- Location: `tests/e2e/` +- Use helpers from `tests/e2e/helpers/auth.ts` for authentication +- Pattern: ```typescript -// Example fixture structure -export const projectTest = base.extend({ - project: async ({page}, use) => { - // SETUP: Create project - const project = await createProject(page); - - // GIVE TO TEST: Your test runs here - await use(project); - - // CLEANUP: Delete project (runs after test) - await projectsPage.deleteProject(project.id); - }, -}); -``` +import {test, expect} from '@playwright/test'; +import {login} from './helpers/auth'; -**Using Fixtures with `mergeTests`**: - -```typescript -import {expect, mergeTests} from '@playwright/test'; -import {loginTest, projectTest, workflowTest} from '../../fixtures'; - -// Combine fixtures at the top of your test file -export const test = mergeTests(loginTest(), projectTest, workflowTest); - -test.describe('My Tests', () => { - test('my test', async ({authenticatedPage, project, workflow}) => { - // All fixtures are available: - // - authenticatedPage (from loginTest) - // - project (from projectTest) - // - workflow (from workflowTest) - - await authenticatedPage.goto(`/projects/${project.id}/workflows/${workflow.workflowId}`); - // Test logic here - // Fixtures automatically clean up after test - }); +test('should login', async ({page}) => { + await login(page, 'user@example.com', 'password'); + await expect(page).toHaveURL('/'); }); ``` -**Common Patterns**: - -```typescript -// Test needs only authentication -export const test = mergeTests(loginTest()); - -// Test needs project -export const test = mergeTests(loginTest(), projectTest); - -// Test needs everything -export const test = mergeTests(loginTest(), projectTest, workflowTest); -``` - -**Key Principles**: -- Fixtures are **independent** - don't extend each other -- Use `mergeTests` in test files to combine fixtures -- `loginTest()` is a function - call it with `()` -- Fixtures automatically clean up resources after tests -- Each fixture provides specific fixtures (see table below) - -| Fixture | Provides | Requires | -|---------|-----------|----------| -| `loginTest()` | `authenticatedPage` | Nothing | -| `projectTest` | `project` | `page` (auto-authenticated) | -| `workflowTest` | `workflow` | `page` + `project` (when merged) | - ## Common Utilities ### `twMerge()` - Class Name Utility diff --git a/CLAUDE.md b/CLAUDE.md index bcc88e709f1..184cae4fbaa 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -75,15 +75,15 @@ docker compose -f docker-compose.dev.server.yml up -d ## Architecture Overview ### Core Technology Stack -- **Backend**: Java 25 with Spring Boot 4.0.2 -- **Frontend**: React 19.2 with TypeScript 5.9, Vite 7.3, TailwindCSS 3.4 +- **Backend**: Java 25 with Spring Boot 3.5.7 +- **Frontend**: React 19.2 with TypeScript 5.9, Vite 7.2, TailwindCSS 3.4 - **Database**: PostgreSQL 15+ with Liquibase migrations - **Message Broker**: Memory(default), Redis, RabbitMQ, Kafka, JMS, AMQP, AWS SQS - **Build System**: Gradle 8+ with Kotlin DSL - **Code Execution**: GraalVM Polyglot 25.0.1 (Java, JavaScript, Python, Ruby) - **Testing**: JUnit 5, Vitest 4, Testcontainers - **Node.js**: Version 20.19+ required for client development -- **Additional Tools**: MapStruct 1.6.3, Jackson 2.19.2, SpringDoc OpenAPI 3.0.0 +- **Additional Tools**: MapStruct 1.6.3, Jackson 2.19.2, SpringDoc OpenAPI 2.8.14 ### Main Server Module Structure @@ -95,14 +95,10 @@ docker compose -f docker-compose.dev.server.yml up -d - `atlas-configuration/` - Workflow configuration management - **`automation/`** - iPaaS automation implementation - - `automation-ai/` - AI-powered automation features - `automation-configuration/` - Project and workflow configuration - - `automation-data-table/` - Data table management - - `automation-execution/` - Workflow execution services - - `automation-knowledge-base/` - Knowledge base integration - - `automation-mcp/` - MCP (Model Context Protocol) integration - - `automation-task/` - Task management services + - `automation-connection/` - Connection management - `automation-workflow/` - Workflow coordination and execution + - `automation-task/` - Task management services - **`platform/`** - Core infrastructure services - `platform-component/` - Component definition and management @@ -194,12 +190,6 @@ public class ExampleComponentHandler implements ComponentHandler { ## Code Style and Best Practices -### Client ESLint sort-keys Rule -- Object keys must be in natural ascending (alphabetical) order in client code -- Applies to mock objects, hoisted state, test data, and component props -- ESLint `--fix` does NOT auto-fix sort-keys - must be fixed manually -- Example: `{content: 'x', id: 'y'}` not `{id: 'y', content: 'x'}` - ### Variable Naming - Do not use short or cryptic variable names on both the server and client sides; prefer clear, descriptive names that communicate intent. - This applies everywhere, including arrow function parameters and loop variables. @@ -219,28 +209,6 @@ public class ExampleComponentHandler implements ComponentHandler { for (Order order : orders) { ... } ``` -### Lucide Icon Imports (Client) -- Always import icons with the `Icon` suffix: `SearchIcon`, `DatabaseIcon`, `Loader2Icon` -- Not: `Search`, `Database`, `Loader2` - -### CSS Class Merging (Client) -- Use `twMerge` from `tailwind-merge` for conditional class merging -- Do not use `cn()` utility - -### React Patterns (Client) -- Use `fieldset` (with `border-0`) for semantic form grouping instead of `div` -- Replace nested ternary operators with render functions (e.g., `renderTrigger()`) -- Use `useMemo` for computed values instead of IIFEs in JSX -- Prefer `||` over `??` for JSX fallbacks (e.g., `trigger || defaultTrigger`) - -### GraphQL Conventions -- Enum values must use SCREAMING_SNAKE_CASE (e.g., `DELETE`, `GET`, `QUERY`, `PATH`) -- Consistent with HttpMethod and other enums in `*.graphqls` files - -### ID Generation -- Avoid `hashCode()` for generating unique identifiers (collision risk) -- Prefer SHA-256 with first 8 bytes for deterministic long IDs, or UUID for true uniqueness - ### Blank Line Before Control Statements (Java) - Insert exactly one empty line before control statements to improve visual separation of logic: - Applies to: `if`, `else if`, `else`, `for`, enhanced `for`, `while`, `do { ... } while (...)`, `switch`, `try`/`catch`/`finally`. @@ -269,21 +237,6 @@ public class ExampleComponentHandler implements ComponentHandler { } ``` -### Blank Line After Variable Modification (Java) -- Insert exactly one empty line between a variable modification and a subsequent statement that uses that variable -- This improves readability by visually separating the setup from the usage -- Example: - ```java - // Bad - document.setStatus(KnowledgeBaseDocument.STATUS_PROCESSING); - knowledgeBaseDocumentService.saveKnowledgeBaseDocument(document); - - // Good - document.setStatus(KnowledgeBaseDocument.STATUS_PROCESSING); - - knowledgeBaseDocumentService.saveKnowledgeBaseDocument(document); - ``` - ### Method Chaining - Do not chain method calls except where this is natural and idiomatic - Allowed exceptions (non-exhaustive): @@ -306,21 +259,6 @@ public class ExampleComponentHandler implements ComponentHandler { - Keep declarative chains (queries, reactive pipelines) as one logical block; prefer one operation per line - Avoid chaining when side effects are involved or intermediate values deserve names for clarity/debugging -### Code Quality Tool Patterns - -**SpotBugs**: -- Don't use rough approximations of known constants (e.g., use `Math.PI` instead of `3.14`) -- Always check return values of methods like `CountDownLatch.await(long, TimeUnit)` - returns boolean -- Use try-with-resources for `Connection` objects to avoid resource leaks -- Catch specific exceptions (`SQLException`) instead of generic `Exception` when possible - -**PMD**: -- Use `@SuppressWarnings("PMD.UnusedFormalParameter")` for interface-required but unused parameters -- Don't qualify static method calls with the class name when already inside that class (e.g., `builder()` not `ClassName.builder()`) - -**Checkstyle**: -- Test method names must be camelCase without underscores (e.g., `testExecuteSuccess` not `testExecute_Success`) - ### Spring Boot Best Practices 1. **Prefer Constructor Injection over Field/Setter Injection** @@ -492,10 +430,6 @@ cd cli ./gradlew :cli-app:bootRun --args="component init openapi --name=my-component --openapi-path=/path/to/openapi.yaml" ``` -### Resolving PR Review Comments -- Use `gh api graphql` with `resolveReviewThread` mutation to close threads programmatically -- Get thread IDs via: `gh api graphql -f query='{ repository(owner: "X", name: "Y") { pullRequest(number: N) { reviewThreads(first: 20) { nodes { id isResolved path } } } }'` - ## Build and Deployment ### Docker @@ -775,8 +709,8 @@ tail -f server/apps/server-app/build/logs/application.log **Gradle Build Optimization** - Gradle JVM is configured with 4GB heap in `gradle.properties` -- Parallel builds are enabled by default -- Build cache is enabled by default +- Parallel builds are disabled by default but can be enabled +- Use build cache: `./gradlew --build-cache build` - Use configuration cache: `./gradlew --configuration-cache build` - Gradle daemon runs by default for faster subsequent builds diff --git a/build.gradle.kts b/build.gradle.kts index 2e95a05c53d..21c56428ec5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,7 +20,7 @@ dependencyManagement { versionCatalogUpdate { keep { - versions.addAll("checkstyle", "findsecbugs", "gradle-git-properties", "jackson", "jacoco", "java", "jib-gradle-plugin", "pmd", "spotbugs", "spring-ai", "spring-boot", "spring-cloud-aws", "spring-cloud-dependencies", "spring-shell", "testcontainers") + versions.addAll("checkstyle", "gradle-git-properties", "jackson", "jacoco", "java", "jib-gradle-plugin", "pmd", "spotbugs", "spring-ai", "spring-boot", "spring-cloud-aws", "spring-cloud-dependencies", "spring-shell", "testcontainers") } } @@ -31,7 +31,7 @@ subprojects { dependencyManagement { dependencies { - dependency("com.github.spotbugs:spotbugs-annotations:[${rootProject.libs.versions.spotbugs.get()},)") + dependency("com.github.spotbugs:spotbugs-annotations:[4.9.3,)") } } @@ -41,8 +41,6 @@ subprojects { implementation("org.jspecify:jspecify") implementation(platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)) - spotbugsPlugins("com.h3xstream.findsecbugs:findsecbugs-plugin:${rootProject.libs.versions.findsecbugs.get()}") - testCompileOnly(rootProject.libs.com.github.spotbugs.spotbugs.annotations) testImplementation("org.springframework.boot:spring-boot-starter-test") diff --git a/buildSrc/src/main/kotlin/com.bytechef.documentation-generator.gradle.kts b/buildSrc/src/main/kotlin/com.bytechef.documentation-generator.gradle.kts index 6570599a7b7..ce52a910fe0 100644 --- a/buildSrc/src/main/kotlin/com.bytechef.documentation-generator.gradle.kts +++ b/buildSrc/src/main/kotlin/com.bytechef.documentation-generator.gradle.kts @@ -16,8 +16,6 @@ open class FindJsonFilesTask : DefaultTask() { @JsonIgnoreProperties(ignoreUnknown = true) class Properties { - var resourcesPath: String? = null - var controlType: String? = null var name: String? = null var description: String? = null @@ -339,7 +337,6 @@ The output for this action is dynamic and may vary depending on the input parame var title: String? = null var componentName: String? = null var componentVersion: Int? = null - var resourcesPath: String? = null private fun getOutputDefinitionString(): String { if (outputDefinition == null) { @@ -357,7 +354,6 @@ This action does not produce any output. val propertiesSection = createPropertiesSection() val jsonExample = createJsonExample() val formattedJson = formatJson(jsonExample) - val mdxContent = getMdxContent() return """ ### $title @@ -371,21 +367,9 @@ $formattedJson ``` ${getOutputDefinitionString()} ${createOutputJson()} - -$mdxContent """ } - private fun getMdxContent(): String { - val mdxFile = File(resourcesPath, "$name.mdx") - - return if (mdxFile.exists()) { - mdxFile.readText() - } else { - "" - } - } - private fun createJsonExample(): String { return if (properties.isNullOrEmpty()) { """ { @@ -448,7 +432,6 @@ ${properties?.joinToString("\n")} var type: String? = null var componentName: String? = null var componentVersion: Int? = null - var resourcesPath: String? = null private fun getOutputResponseString(): String { if (outputDefinition == null) { @@ -466,7 +449,6 @@ This trigger does not produce any output. val jsonExample = createJsonExample() val formattedJson = formatJson(jsonExample) val propertiesSection = createPropertiesSection() - val mdxContent = getMdxContent() return """ ### $title @@ -481,20 +463,9 @@ ${getOutputResponseString()} ```json $formattedJson ``` -$mdxContent """ } - private fun getMdxContent(): String { - val mdxFile = File(resourcesPath, "$name.mdx") - - return if (mdxFile.exists()) { - mdxFile.readText() - } else { - "" - } - } - private fun createJsonExample(): String { return if (properties.isNullOrEmpty()) { """ { @@ -558,10 +529,8 @@ ${properties?.joinToString("\n")} class Connection { var authorizations: Array? = null var version: Int? = null - var resourcesPath: String? = null override fun toString(): String { - val mdxContent = getMdxContent() return """ ## Connections @@ -569,19 +538,8 @@ Version: $version ${authorizations?.joinToString("\n")} -$mdxContent """ } - - private fun getMdxContent(): String { - val mdxFile = File(resourcesPath, "connection.mdx") - - return if (mdxFile.exists()) { - mdxFile.readText() - } else { - "" - } - } } @JsonIgnoreProperties(ignoreUnknown = true) @@ -608,7 +566,6 @@ $mdxContent var triggers: Array? = null var version: Int? = null var properties: Array? = null - var resourcesPath: String? = null private fun getCategoriesString(): String { if (componentCategories == null) { @@ -720,7 +677,6 @@ ${getCustomActionString()} val componentsPath = "$rootPath/docs/content/docs/reference/components" val taskDispatchersPath = "$rootPath/docs/content/docs/reference/flow-controls" val currentPath = project.projectDir.path - val resourcesPath = "$currentPath/src/main/resources" if (currentPath.contains(Regex("/modules/.+/"))) { val definitionDir = File("$currentPath/src/test/resources/definition") @@ -745,21 +701,8 @@ ${getCustomActionString()} }?.toList().orEmpty() definitionJsonFiles.forEach { jsonFile -> - val component = mapper.readValue(jsonFile.readText(), Component::class.java) - - component.resourcesPath = resourcesPath - component.connection?.resourcesPath = resourcesPath - component.actions?.forEach { - it.resourcesPath = resourcesPath - it.properties?.forEach { it2 -> setResourcesPath(it2, resourcesPath) } - } - component.triggers?.forEach { - it.resourcesPath = resourcesPath - it.properties?.forEach { it2 -> setResourcesPath(it2, resourcesPath) } - } - component.properties?.forEach { setResourcesPath(it, resourcesPath) } - - val json = component.toString() + val jsonObject = mapper.readValue(jsonFile.readText(), Component::class.java) + val json = jsonObject.toString() val path = when (isComponentsDir) { true -> componentsPath @@ -810,12 +753,6 @@ ${getCustomActionString()} } } } - - private fun setResourcesPath(properties: Properties, resourcesPath: String) { - properties.resourcesPath = resourcesPath - properties.properties?.forEach { setResourcesPath(it, resourcesPath) } - properties.items?.forEach { setResourcesPath(it, resourcesPath) } - } } // Register the custom task with Gradle diff --git a/buildSrc/src/main/kotlin/com.bytechef.java-common-conventions.gradle.kts b/buildSrc/src/main/kotlin/com.bytechef.java-common-conventions.gradle.kts index 15e2ad7baea..165c2d53def 100644 --- a/buildSrc/src/main/kotlin/com.bytechef.java-common-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/com.bytechef.java-common-conventions.gradle.kts @@ -31,7 +31,7 @@ val cleanResources by tasks.registering(Delete::class) { delete("build/resources") } -tasks.withType(JavaCompile::class) { +val compileJava by tasks.existing(JavaCompile::class) { options.compilerArgs.add("-parameters") } diff --git a/cli/cli-app/generate_connector.sh b/cli/cli-app/generate_connector.sh index a48b1dcb414..2791de0e20a 100755 --- a/cli/cli-app/generate_connector.sh +++ b/cli/cli-app/generate_connector.sh @@ -3,4 +3,4 @@ SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" echo "Generate $1 OpenAPI Connector" -"$SCRIPTPATH/bytechef.sh" component init --open-api-path "$SCRIPTPATH/../../server/libs/modules/components/$1/openapi.yaml" --output-path "$SCRIPTPATH/../../server/libs/modules/components" --name "$1" +$SCRIPTPATH/bytechef.sh component init --open-api-path $SCRIPTPATH/../../server/libs/modules/components/$1/openapi.yaml -o $SCRIPTPATH/../../server/libs/modules/components -n $1 diff --git a/cli/cli-app/libs/component-api-1.0.jar b/cli/cli-app/libs/component-api-1.0.jar index 92c29a304a4..3569cdd6180 100644 Binary files a/cli/cli-app/libs/component-api-1.0.jar and b/cli/cli-app/libs/component-api-1.0.jar differ diff --git a/cli/cli-app/libs/definition-api-1.0.jar b/cli/cli-app/libs/definition-api-1.0.jar index af1a01b0964..87bb532012c 100644 Binary files a/cli/cli-app/libs/definition-api-1.0.jar and b/cli/cli-app/libs/definition-api-1.0.jar differ diff --git a/cli/cli-app/src/main/java/com/bytechef/cli/CliApplication.java b/cli/cli-app/src/main/java/com/bytechef/cli/CliApplication.java index 1723aa94518..a8ed4d221af 100644 --- a/cli/cli-app/src/main/java/com/bytechef/cli/CliApplication.java +++ b/cli/cli-app/src/main/java/com/bytechef/cli/CliApplication.java @@ -17,14 +17,8 @@ package com.bytechef.cli; import com.bytechef.cli.command.component.ComponentCommand; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.shell.core.NonInteractiveShellRunner; -import org.springframework.shell.core.command.CommandRegistry; -import org.springframework.shell.core.command.DefaultCommandParser; import org.springframework.shell.core.command.annotation.EnableCommand; /** @@ -37,14 +31,4 @@ public class CliApplication { public static void main(String... args) { SpringApplication.run(CliApplication.class, args); } - - @Bean - ApplicationRunner shellRunner(CommandRegistry commandRegistry, ApplicationArguments applicationArguments) { - return args -> { - DefaultCommandParser commandParser = new DefaultCommandParser(commandRegistry); - NonInteractiveShellRunner runner = new NonInteractiveShellRunner(commandParser, commandRegistry); - - runner.run(applicationArguments.getSourceArgs()); - }; - } } diff --git a/cli/cli-app/src/main/resources/application.yml b/cli/cli-app/src/main/resources/application.yml deleted file mode 100644 index 773960b2d62..00000000000 --- a/cli/cli-app/src/main/resources/application.yml +++ /dev/null @@ -1,3 +0,0 @@ -spring: - main: - banner-mode: off diff --git a/cli/commands/component/init/openapi/src/main/java/com/bytechef/cli/command/component/init/openapi/ComponentInitOpenApiGenerator.java b/cli/commands/component/init/openapi/src/main/java/com/bytechef/cli/command/component/init/openapi/ComponentInitOpenApiGenerator.java index 8b5b926afd7..3eaaf7368ee 100644 --- a/cli/commands/component/init/openapi/src/main/java/com/bytechef/cli/command/component/init/openapi/ComponentInitOpenApiGenerator.java +++ b/cli/commands/component/init/openapi/src/main/java/com/bytechef/cli/command/component/init/openapi/ComponentInitOpenApiGenerator.java @@ -96,7 +96,6 @@ /** * @author Ivica Cardic */ -@SuppressFBWarnings("PATH_TRAVERSAL_IN") public class ComponentInitOpenApiGenerator { private static final Logger logger = LoggerFactory.getLogger(ComponentInitOpenApiGenerator.class); diff --git a/cli/commands/component/src/main/java/com/bytechef/cli/command/component/ComponentCommand.java b/cli/commands/component/src/main/java/com/bytechef/cli/command/component/ComponentCommand.java index a3b5ee9318c..ba8c52988cf 100644 --- a/cli/commands/component/src/main/java/com/bytechef/cli/command/component/ComponentCommand.java +++ b/cli/commands/component/src/main/java/com/bytechef/cli/command/component/ComponentCommand.java @@ -17,7 +17,6 @@ package com.bytechef.cli.command.component; import com.bytechef.cli.command.component.init.openapi.ComponentInitOpenApiGenerator; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.File; import org.springframework.shell.core.command.annotation.Command; import org.springframework.shell.core.command.annotation.Option; @@ -25,9 +24,11 @@ @org.springframework.stereotype.Component public class ComponentCommand { - private static final String COMMAND_PREFIX = "component"; + @Command + public void component() { + } - @Command(name = COMMAND_PREFIX + " init", description = "Generates project for a new component.") + @Command(name = "init", description = "Generates project for a new component.") public void init( @Option( longName = "base-package-name", description = "package for generated classes", @@ -52,7 +53,6 @@ public void init( } } - @SuppressFBWarnings("PATH_TRAVERSAL_IN") private void generateOpenApiComponent( String basePackageName, boolean internalComponent, String name, String openApiPath, String outputPath, int version) throws Exception { diff --git a/cli/commands/component/src/test/java/com/bytechef/cli/command/component/init/ComponentInitCommandTest.java b/cli/commands/component/src/test/java/com/bytechef/cli/command/component/init/ComponentInitCommandTest.java index 926acf71a6f..42bd70a1b3d 100644 --- a/cli/commands/component/src/test/java/com/bytechef/cli/command/component/init/ComponentInitCommandTest.java +++ b/cli/commands/component/src/test/java/com/bytechef/cli/command/component/init/ComponentInitCommandTest.java @@ -16,89 +16,35 @@ package com.bytechef.cli.command.component.init; -import static org.junit.jupiter.api.Assertions.assertTrue; - import com.bytechef.cli.CliApplication; import java.io.File; -import java.io.IOException; import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Comparator; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; /** * @author Ivica Cardic */ -class ComponentInitCommandTest { - - @TempDir - Path tempDir; - - @BeforeEach - void setUp() throws IOException { - Path outputPath = tempDir.resolve("petstore"); - - if (Files.exists(outputPath)) { - Files.walk(outputPath) - .sorted(Comparator.reverseOrder()) - .map(Path::toFile) - .forEach(File::delete); - } - } +public class ComponentInitCommandTest { @Test - void testComponentInitGeneratesExpectedFiles() { + public void testComponentInit() { URL url = ComponentInitCommandTest.class.getResource("/dependencies/petstore.yaml"); - String outputPath = tempDir.toAbsolutePath() - .toString(); CliApplication.main( - "component", "init", "--open-api-path", url.getFile(), "--output-path", outputPath, "--name", "petstore"); - - Path componentDir = tempDir.resolve("petstore"); - - assertTrue(Files.exists(componentDir), "Component directory should be created"); + "component", "init", "--open-api-path", url.getFile(), "--output-path", + new File("build/test/generated").getAbsolutePath(), "-n", "petstore"); - Path mainJavaDir = componentDir.resolve("src/main/java/com/bytechef/component/petstore"); - - assertTrue( - Files.exists(mainJavaDir.resolve("PetstoreComponentHandler.java")), - "ComponentHandler should be generated"); - assertTrue( - Files.exists(mainJavaDir.resolve("AbstractPetstoreComponentHandler.java")), - "AbstractComponentHandler should be generated"); - assertTrue( - Files.exists(mainJavaDir.resolve("connection/PetstoreConnection.java")), - "Connection class should be generated"); - - Path actionDir = mainJavaDir.resolve("action"); - - assertTrue(Files.exists(actionDir), "Action directory should be created"); - assertTrue( - Files.exists(actionDir.resolve("PetstoreListPetsAction.java")), - "ListPets action should be generated"); + // TODO Add asserts } @Test - void testComponentInitWithDifferentOpenApiSpec() { + public void testComponentInit2() { URL url = ComponentInitCommandTest.class.getResource("/dependencies/petstore2.yaml"); - String outputPath = tempDir.toAbsolutePath() - .toString(); CliApplication.main( - "component", "init", "--open-api-path", url.getFile(), "--output-path", outputPath, "--name", "petstore"); - - Path componentDir = tempDir.resolve("petstore"); - - assertTrue(Files.exists(componentDir), "Component directory should be created"); - - Path mainJavaDir = componentDir.resolve("src/main/java/com/bytechef/component/petstore"); + "component", "init", "--open-api-path", url.getFile(), "--output-path", + new File("build/test/generated").getAbsolutePath(), "-n", "petstore"); - assertTrue( - Files.exists(mainJavaDir.resolve("PetstoreComponentHandler.java")), - "ComponentHandler should be generated"); + // TODO Add asserts } } diff --git a/client/codegen.ts b/client/codegen.ts index cac453d6ff4..f46f94f4d04 100644 --- a/client/codegen.ts +++ b/client/codegen.ts @@ -1,16 +1,20 @@ import type {CodegenConfig} from '@graphql-codegen/cli'; +import {getCookie} from './src/shared/util/cookie-utils'; const config: CodegenConfig = { + schema: [ + { + 'http://localhost:9555/graphql': { + headers: { + Authorization: 'Basic YWRtaW5AbG9jYWxob3N0LmNvbTphZG1pbg==', + 'Content-Type': 'application/json', + }, + }, + }, + ], documents: ['src/graphql/**/*.graphql'], generates: { 'src/shared/middleware/graphql.ts': { - config: { - fetcher: { - endpoint: 'endpointUrl', - fetchParams: 'fetchParams', - }, - reactQueryVersion: 5, - }, plugins: [ { add: { @@ -21,29 +25,18 @@ const config: CodegenConfig = { 'typescript-operations', 'typescript-react-query', ], + config: { + fetcher: { + endpoint: 'endpointUrl', + fetchParams: 'fetchParams', + }, + reactQueryVersion: 5, + }, }, }, hooks: { afterAllFileWrite: ['prettier --write'], }, - schema: [ - '../server/libs/platform/platform-configuration/platform-configuration-graphql/src/main/resources/graphql/*.graphqls', - '../server/libs/automation/automation-data-table/**/src/main/resources/graphql/*.graphqls', - '../server/libs/automation/automation-knowledge-base/automation-knowledge-base-graphql/src/main/resources/graphql/**/*.graphqls', - '../server/libs/platform/platform-mcp/platform-mcp-graphql/src/main/resources/graphql/*.graphqls', - '../server/libs/automation/automation-mcp/automation-mcp-graphql/src/main/resources/graphql/*.graphqls', - '../server/libs/automation/automation-configuration/automation-configuration-graphql/src/main/resources/graphql/*.graphqls', - '../server/libs/automation/automation-search/automation-search-graphql/src/main/resources/graphql/*.graphqls', - '../server/libs/automation/automation-task/automation-task-graphql/src/main/resources/graphql/*.graphqls', - '../server/libs/platform/platform-security/platform-security-graphql/src/main/resources/graphql/*.graphqls', - '../server/libs/platform/platform-component/platform-component-log/platform-component-log-graphql/src/main/resources/graphql/*.graphqls', - '../server/libs/ai/mcp/mcp-server-configuration/mcp-server-configuration-graphql/src/main/resources/graphql/*.graphqls', - '../server/ee/libs/platform/platform-user/platform-user-graphql/src/main/resources/graphql/*.graphqls', - '../server/ee/libs/platform/platform-api-connector/platform-api-connector-configuration/platform-api-connector-configuration-graphql/src/main/resources/graphql/*.graphqls', - '../server/ee/libs/platform/platform-custom-component/platform-custom-component-configuration/platform-custom-component-configuration-graphql/src/main/resources/graphql/*.graphqls', - '../server/ee/libs/embedded/embedded-configuration/embedded-configuration-graphql/src/main/resources/graphql/*.graphqls', - '../server/ee/libs/embedded/embedded-connected-user/embedded-connected-user-graphql/src/main/resources/graphql/*.graphqls', - ], }; export default config; diff --git a/client/eslint-restricted-imports.mjs b/client/eslint-restricted-imports.mjs deleted file mode 100644 index cbaa10a0f57..00000000000 --- a/client/eslint-restricted-imports.mjs +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Restricted imports configuration for @typescript-eslint/no-restricted-imports - * - * This file defines which imports should be restricted and what alternatives - * should be used instead. Add new restrictions here as needed. - */ - -export const restrictedImports = { - paths: [ - { - name: '@/components/ui/button', - importNames: ['Button'], - message: "Import Button from '@/components/Button/Button' instead.", - allowTypeImports: true, - }, - { - name: '@/components/ui/badge', - importNames: ['Badge'], - message: "Import Badge from '@/components/Badge/Badge' instead.", - allowTypeImports: true, - }, - ], -}; diff --git a/client/eslint.config.mjs b/client/eslint.config.mjs index c464d486672..a1be2065ac1 100644 --- a/client/eslint.config.mjs +++ b/client/eslint.config.mjs @@ -16,255 +16,242 @@ import pluginLingui from 'eslint-plugin-lingui'; // TypeScript flat configs (provides parser + recommended rules) import tseslint from 'typescript-eslint'; -import {restrictedImports} from './eslint-restricted-imports.mjs'; - // Note: We avoid auto-including plugin "recommended" presets to prevent mixing legacy and flat configs. export default [ - // Ignores (migrated from .eslintignore) - { - ignores: [ - 'node_modules', - 'dist', - 'src/components/assistant-ui', - 'src/components/ui', - 'src/hooks/use-toast.ts', - 'src/**/graphql.ts', - 'src/locales/**', - 'src/**/middleware/**', - ], - }, - // Base JS recommended rules - js.configs.recommended, - // TypeScript recommended rules and parser setup - ...tseslint.configs.recommended, - // Lingui plugin recommended rules - pluginLingui.configs['flat/recommended'], - // Project-specific rules and plugin configuration - { - files: ['**/*.{js,jsx,ts,tsx}'], - languageOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - parser: tseslint.parser, - globals: { - ...globals.browser, - ...globals.node, - ...globals.jest, - }, - }, - settings: { - react: {version: 'detect'}, - }, - plugins: { - '@typescript-eslint': tseslint.plugin, - react, - 'react-hooks': reactHooks, - tailwindcss, - 'sort-destructure-keys': sortDestructureKeys, - bytechef, - storybook, - }, - rules: { - // TypeScript - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'typeAlias', - format: ['PascalCase'], - suffix: ['Type'], - }, - { - selector: 'interface', - format: ['PascalCase'], - suffix: ['Props', 'I'], - }, - ], - '@typescript-eslint/no-restricted-imports': ['warn', restrictedImports], + // Ignores (migrated from .eslintignore) + { + ignores: [ + 'node_modules', + 'dist', + 'src/components/assistant-ui', + 'src/components/ui', + 'src/hooks/use-toast.ts', + 'src/**/graphql.ts', + 'src/locales/**', + 'src/**/middleware/**', + ], + }, - // Custom ByteChef plugin rules - 'bytechef/empty-line-between-elements': 'error', - 'bytechef/group-imports': 'error', - 'bytechef/no-conditional-object-keys': 'error', - 'bytechef/no-duplicate-imports': 'error', - 'bytechef/no-length-jsx-expression': 'error', - 'bytechef/ref-name-suffix': 'error', - 'bytechef/require-await-test-step': 'error', - 'bytechef/sort-import-destructures': 'error', - 'bytechef/sort-imports': 'error', - 'bytechef/use-state-naming-pattern': 'error', + // Base JS recommended rules + js.configs.recommended, - // React - 'react/jsx-sort-props': 'error', - 'react/prop-types': 'off', - 'react/react-in-jsx-scope': 'off', + // TypeScript recommended rules and parser setup + ...tseslint.configs.recommended, - // React Hooks - 'react-hooks/rules-of-hooks': 'error', - 'react-hooks/exhaustive-deps': 'warn', + // Lingui plugin recommended rules + pluginLingui.configs['flat/recommended'], - // Sorting - 'sort-destructure-keys/sort-destructure-keys': 2, - 'sort-keys': ['error', 'asc', {caseSensitive: true, natural: true}], + // Plugin presets intentionally not auto-included; rules are set explicitly below. - // Tailwind CSS - 'tailwindcss/classnames-order': 'warn', - 'tailwindcss/no-custom-classname': [ - 'warn', - { - whitelist: [ - 'animate-slide-down', - 'animate-slide-up', - 'animate-slide-up-fade', - 'animate-slide-down-fade', - 'animate-slide-left-fade', - 'animate-slide-right-fade', - 'bg-accent', - 'bg-background', - 'bg-content-brand-primary', - 'bg-destructive-foreground', - 'bg-input', - 'bg-muted', - 'bg-popover', - 'bg-success', - 'bg-surface-brand-primary', - 'bg-surface-brand-primary-hover', - 'bg-surface-brand-primary-active', - 'bg-surface-brand-secondary', - 'bg-surface-brand-secondary-hover', - 'bg-surface-destructive-primary', - 'bg-surface-destructive-primary-hover', - 'bg-surface-destructive-primary-active', - 'bg-surface-destructive-secondary', - 'bg-surface-main', - 'bg-surface-neutral-primary', - 'bg-surface-neutral-primary-hover', - 'bg-surface-neutral-secondary', - 'bg-surface-neutral-secondary-hover', - 'bg-surface-neutral-tertiary', - 'bg-surface-popover-canvas', - 'bg-surface-warning-primary', - 'bg-surface-warning-secondary', - 'border-accent', - 'border-content-neutral-tertiary', - 'border-input', - 'border-l-border/50', - 'border-muted', - 'border-primary', - 'border-stroke-brand-primary', - 'border-stroke-brand-primary-pressed', - 'border-stroke-brand-secondary', - 'border-stroke-brand-secondary-hover', - 'border-stroke-destructive-secondary', - 'border-stroke-neutral-primary', - 'border-stroke-neutral-primary-hover', - 'border-stroke-neutral-secondary', - 'border-stroke-neutral-tertiary', - 'divide-muted', - 'fill-content-neutral-secondary', - 'h-connection-list-item-taglist-height', - 'h-footer-height', - 'h-header-height', - 'h-template-height', - 'heading-tertiary', - 'left-node-handle-placement', - 'left-task-dispatcher-node-handle-placement', - 'left-workflow-node-popover-hover', - 'line-clamp-0', - 'line-clamp-2', - 'max-h-dialog-height', - 'max-h-select-content-available-height', - 'max-h-select-content-available-height-1/2', - 'max-h-workflow-execution-content-height', - 'max-h-workflow-test-configuration-dialog-height', - 'max-w-data-pill-panel-width', - 'max-w-integration-connect-portal-dialog-width', - 'max-w-output-tab-sample-data-dialog-width', - 'max-w-select-trigger-width', - 'max-w-tooltip-lg', - 'max-w-tooltip-sm', - 'max-w-workflow-execution-sheet-width', - 'max-w-workflow-execution-content-width', - 'max-w-workflow-inputs-sheet-width', - 'max-w-workflow-integration-portal-configuration-workflow-sheet-width', - 'max-w-workflow-node-details-panel-width', - 'max-w-workflow-outputs-sheet-width', - 'max-w-workflow-read-only-project-deployment-workflow-sheet-width', - 'max-w-workflow-sidebar-project-version-history-sheet-width', - 'max-w-workflow-test-configuration-dialog-width', - 'min-h-output-tab-sample-data-dialog-height', - 'min-w-api-key-dialog-width', - 'min-w-combo-box-popper-anchor-width', - 'min-w-property-code-editor-sheet-connections-sheet-width', - 'min-w-select-trigger-width', - 'min-w-signing-key-dialog-width', - 'min-w-sub-property-popover-width', - 'min-w-workflow-execution-sheet-width', - 'mx-placeholder-node-position', - 'nodrag', - 'nopan', - 'nowheel', - 'outline-ring', - 'pl-property-input-position', - 'right-data-pill-panel-placement', - 'right-minimap-placement', - 'rounded-xs', - 'size-18', - 'sm:max-w-workflow-inputs-sheet-width', - 'stroke-destructive', - 'text-accent-foreground', - 'text-content-brand-primary', - 'text-content-neutral-primary', - 'text-content-neutral-secondary', - 'text-content-neutral-tertiary', - 'text-destructive', - 'text-content-destructive-primary', - 'text-muted-foreground', - 'text-success', - 'text-success-foreground', - 'text-surface-brand-primary', - 'text-content-warning', - 'w-112', - 'w-appearance-theme-choice-skeleton-large-width', - 'w-appearance-theme-choice-skeleton-small-width', - 'w-node-popover-width', - 'w-sidebar-width', - 'w-workflow-nodes-popover-actions-menu-width', - 'w-workflow-nodes-popover-menu-width', - 'w-workflow-outputs-sheet-dialog-width', - 'w-task-filter-dropdown-menu-width', - ], - }, - ], - 'tailwindcss/no-contradicting-classname': 'error', - }, + // Project-specific rules and plugin configuration + { + files: ['**/*.{js,jsx,ts,tsx}'], + languageOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + parser: tseslint.parser, + globals: { + ...globals.browser, + ...globals.node, + ...globals.jest, + }, }, - - // Vitest globals for test files - { - files: ['**/*.{test,spec}.{js,jsx,ts,tsx}'], - languageOptions: { - globals: { - ...globals.vitest, - }, - }, + settings: { + react: {version: 'detect'}, }, + plugins: { + '@typescript-eslint': tseslint.plugin, + react, + 'react-hooks': reactHooks, + tailwindcss, + 'sort-destructure-keys': sortDestructureKeys, + bytechef, + storybook, + }, + rules: { + // TypeScript + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: 'typeAlias', + format: ['PascalCase'], + suffix: ['Type'], + }, + { + selector: 'interface', + format: ['PascalCase'], + suffix: ['Props', 'I'], + }, + ], + + // Custom ByteChef plugin rules + 'bytechef/empty-line-between-elements': 'error', + 'bytechef/group-imports': 'error', + 'bytechef/no-conditional-object-keys': 'error', + 'bytechef/no-duplicate-imports': 'error', + 'bytechef/no-length-jsx-expression': 'error', + 'bytechef/ref-name-suffix': 'error', + 'bytechef/require-await-test-step': 'error', + 'bytechef/sort-import-destructures': 'error', + 'bytechef/sort-imports': 'error', + 'bytechef/use-state-naming-pattern': 'error', - // Allow custom component wrapper imports - { - files: ['src/components/Badge/Badge.tsx', 'src/components/Button/Button.tsx'], - rules: { - '@typescript-eslint/no-restricted-imports': 'off', + // React + 'react/jsx-sort-props': 'error', + 'react/prop-types': 'off', + 'react/react-in-jsx-scope': 'off', + + // React Hooks + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn', + + // Sorting + 'sort-destructure-keys/sort-destructure-keys': 2, + 'sort-keys': ['error', 'asc', {caseSensitive: true, natural: true}], + + // Tailwind CSS + 'tailwindcss/classnames-order': 'warn', + 'tailwindcss/no-custom-classname': [ + 'warn', + { + whitelist: [ + 'animate-slide-down', + 'animate-slide-up', + 'animate-slide-up-fade', + 'animate-slide-down-fade', + 'animate-slide-left-fade', + 'animate-slide-right-fade', + 'bg-accent', + 'bg-background', + 'bg-content-brand-primary', + 'bg-destructive-foreground', + 'bg-input', + 'bg-muted', + 'bg-popover', + 'bg-success', + 'bg-surface-brand-primary', + 'bg-surface-brand-primary-hover', + 'bg-surface-brand-primary-active', + 'bg-surface-brand-secondary', + 'bg-surface-brand-secondary-hover', + 'bg-surface-destructive-primary', + 'bg-surface-destructive-primary-hover', + 'bg-surface-destructive-primary-active', + 'bg-surface-destructive-secondary', + 'bg-surface-main', + 'bg-surface-neutral-primary', + 'bg-surface-neutral-primary-hover', + 'bg-surface-neutral-secondary', + 'bg-surface-neutral-secondary-hover', + 'bg-surface-neutral-tertiary', + 'bg-surface-popover-canvas', + 'bg-surface-warning-primary', + 'bg-surface-warning-secondary', + 'border-accent', + 'border-content-neutral-tertiary', + 'border-input', + 'border-l-border/50', + 'border-muted', + 'border-primary', + 'border-stroke-brand-primary', + 'border-stroke-brand-primary-pressed', + 'border-stroke-brand-secondary', + 'border-stroke-brand-secondary-hover', + 'border-stroke-destructive-secondary', + 'border-stroke-neutral-primary', + 'border-stroke-neutral-primary-hover', + 'border-stroke-neutral-secondary', + 'border-stroke-neutral-tertiary', + 'divide-muted', + 'fill-content-neutral-secondary', + 'h-connection-list-item-taglist-height', + 'h-footer-height', + 'h-header-height', + 'h-template-height', + 'heading-tertiary', + 'left-node-handle-placement', + 'left-task-dispatcher-node-handle-placement', + 'left-workflow-node-popover-hover', + 'line-clamp-0', + 'line-clamp-2', + 'max-h-dialog-height', + 'max-h-select-content-available-height', + 'max-h-select-content-available-height-1/2', + 'max-h-workflow-execution-content-height', + 'max-h-workflow-test-configuration-dialog-height', + 'max-w-data-pill-panel-width', + 'max-w-integration-connect-portal-dialog-width', + 'max-w-output-tab-sample-data-dialog-width', + 'max-w-select-trigger-width', + 'max-w-tooltip-lg', + 'max-w-tooltip-sm', + 'max-w-workflow-execution-sheet-width', + 'max-w-workflow-execution-content-width', + 'max-w-workflow-inputs-sheet-width', + 'max-w-workflow-integration-portal-configuration-workflow-sheet-width', + 'max-w-workflow-node-details-panel-width', + 'max-w-workflow-outputs-sheet-width', + 'max-w-workflow-read-only-project-deployment-workflow-sheet-width', + 'max-w-workflow-sidebar-project-version-history-sheet-width', + 'max-w-workflow-test-configuration-dialog-width', + 'min-h-output-tab-sample-data-dialog-height', + 'min-w-api-key-dialog-width', + 'min-w-combo-box-popper-anchor-width', + 'min-w-property-code-editor-sheet-connections-sheet-width', + 'min-w-select-trigger-width', + 'min-w-signing-key-dialog-width', + 'min-w-sub-property-popover-width', + 'min-w-workflow-execution-sheet-width', + 'mx-placeholder-node-position', + 'nodrag', + 'nopan', + 'nowheel', + 'outline-ring', + 'pl-property-input-position', + 'right-data-pill-panel-placement', + 'right-minimap-placement', + 'rounded-xs', + 'size-18', + 'sm:max-w-workflow-inputs-sheet-width', + 'stroke-destructive', + 'text-accent-foreground', + 'text-content-brand-primary', + 'text-content-neutral-primary', + 'text-content-neutral-secondary', + 'text-content-neutral-tertiary', + 'text-destructive', + 'text-content-destructive-primary', + 'text-muted-foreground', + 'text-success', + 'text-success-foreground', + 'text-surface-brand-primary', + 'text-content-warning', + 'w-112', + 'w-appearance-theme-choice-skeleton-large-width', + 'w-appearance-theme-choice-skeleton-small-width', + 'w-node-popover-width', + 'w-sidebar-width', + 'w-workflow-nodes-popover-actions-menu-width', + 'w-workflow-nodes-popover-menu-width', + 'w-workflow-outputs-sheet-dialog-width', + 'w-task-filter-dropdown-menu-width', + ], }, + ], + 'tailwindcss/no-contradicting-classname': 'error', }, + }, - // Exclude `ee/` folder from no-restricted-imports rule - { - files: ['src/ee/**/*.{js,jsx,ts,tsx}'], - rules: { - '@typescript-eslint/no-restricted-imports': 'off', - }, + // Vitest globals for test files + { + files: ['**/*.{test,spec}.{js,jsx,ts,tsx}'], + languageOptions: { + globals: { + ...globals.vitest, + }, }, + }, ]; diff --git a/client/package-lock.json b/client/package-lock.json index 34e79512f91..e718410aaa8 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -8,18 +8,17 @@ "name": "bytechef-client", "version": "0.1.0", "dependencies": { - "@ag-ui/client": "^0.0.44", - "@ag-ui/core": "^0.0.44", - "@assistant-ui/react": "^0.12.9", - "@assistant-ui/react-markdown": "^0.12.3", + "@ag-ui/client": "^0.0.42", + "@ag-ui/core": "^0.0.42", + "@assistant-ui/react": "^0.11.53", + "@assistant-ui/react-markdown": "^0.11.9", "@hookform/resolvers": "^5.2.2", - "@lingui/core": "^5.9.0", - "@lingui/react": "^5.9.0", + "@lingui/core": "^5.7.0", + "@lingui/react": "^5.7.0", "@monaco-editor/react": "^4.7.0", "@radix-ui/colors": "^3.0.0", "@radix-ui/react-aspect-ratio": "^1.1.8", "@radix-ui/react-context-menu": "^2.2.16", - "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-icons": "^1.3.2", "@radix-ui/react-menubar": "^1.1.16", "@radix-ui/react-navigation-menu": "^1.2.14", @@ -27,22 +26,21 @@ "@radix-ui/react-separator": "^1.1.8", "@radix-ui/react-slider": "^1.3.6", "@radix-ui/react-slot": "^1.2.4", - "@radix-ui/react-toggle": "^1.1.10", - "@radix-ui/react-visually-hidden": "^1.2.4", - "@tanstack/react-query": "^5.90.20", - "@tanstack/react-query-devtools": "^5.91.3", + "@radix-ui/react-toggle-group": "^1.1.11", + "@tanstack/react-query": "^5.90.16", + "@tanstack/react-query-devtools": "^5.91.2", "@tanstack/react-table": "^8.21.3", "@testing-library/dom": "^10.4.1", "@testing-library/user-event": "^14.6.1", - "@tiptap/extension-document": "3.19.0", - "@tiptap/extension-mention": "3.19.0", - "@tiptap/extension-paragraph": "3.19.0", - "@tiptap/extension-placeholder": "3.19.0", - "@tiptap/extension-text": "3.19.0", - "@tiptap/pm": "3.19.0", - "@tiptap/react": "3.19.0", - "@tiptap/starter-kit": "3.19.0", - "@tiptap/suggestion": "3.19.0", + "@tiptap/extension-document": "3.15.3", + "@tiptap/extension-mention": "3.15.3", + "@tiptap/extension-paragraph": "3.15.3", + "@tiptap/extension-placeholder": "3.15.3", + "@tiptap/extension-text": "3.15.3", + "@tiptap/pm": "3.15.3", + "@tiptap/react": "3.15.3", + "@tiptap/starter-kit": "3.15.3", + "@tiptap/suggestion": "3.15.3", "@types/d3": "^7.4.3", "@types/sanitize-html": "^2.16.0", "@uidotdev/usehooks": "^2.4.1", @@ -56,22 +54,22 @@ "date-fns": "^4.1.0", "fetch-intercept": "^2.4.0", "html-entities": "^2.6.0", - "lucide-react": "^0.563.0", + "lucide-react": "^0.562.0", "monaco-editor": "^0.55.1", "monaco-yaml": "^5.4.0", - "motion": "^12.33.0", - "posthog-js": "^1.342.1", + "motion": "^12.25.0", + "posthog-js": "^1.316.1", "radix-ui": "^1.4.3", - "react": "^19.2.4", + "react": "^19.2.3", "react-data-grid": "^7.0.0-beta.59", - "react-day-picker": "^9.13.1", - "react-dom": "^19.2.4", + "react-day-picker": "^9.13.0", + "react-dom": "^19.2.3", "react-helmet-async": "^2.0.5", - "react-hook-form": "^7.71.1", + "react-hook-form": "^7.70.0", "react-inlinesvg": "^4.2.0", "react-json-view": "^1.21.3", "react-resizable-panels": "^3.0.6", - "react-router-dom": "^7.13.0", + "react-router-dom": "^7.12.0", "react-select": "^5.10.2", "react-shiki": "^0.9.1", "react-textarea-autosize": "^8.5.9", @@ -84,69 +82,69 @@ "use-debounce": "^10.1.0", "vite-plugin-svgr": "^4.5.0", "whatwg-fetch": "^3.6.20", - "zod": "^4.3.6", - "zustand": "^5.0.11" + "zod": "^4.3.5", + "zustand": "^5.0.9" }, "devDependencies": { - "@chromatic-com/storybook": "^5.0.0", + "@chromatic-com/storybook": "^4.1.3", "@dagrejs/dagre": "^1.1.8", "@eslint/eslintrc": "^3.3.3", "@eslint/js": "9.39.2", - "@graphql-codegen/cli": "^6.1.1", + "@graphql-codegen/cli": "^6.1.0", "@graphql-codegen/typescript-react-query": "^6.1.1", - "@lingui/babel-plugin-lingui-macro": "^5.9.0", - "@lingui/cli": "^5.9.0", - "@lingui/macro": "^5.9.0", - "@lingui/vite-plugin": "^5.9.0", - "@playwright/test": "^1.58.2", - "@storybook/addon-docs": "^10.2.7", - "@storybook/addon-links": "^10.2.7", - "@storybook/addon-onboarding": "^10.2.7", - "@storybook/react-vite": "^10.2.7", + "@lingui/babel-plugin-lingui-macro": "^5.7.0", + "@lingui/cli": "^5.7.0", + "@lingui/macro": "^5.7.0", + "@lingui/vite-plugin": "^5.7.0", + "@playwright/test": "^1.57.0", + "@storybook/addon-docs": "^10.1.11", + "@storybook/addon-links": "^10.1.11", + "@storybook/addon-onboarding": "^10.1.11", + "@storybook/react-vite": "^10.1.11", "@tailwindcss/forms": "^0.5.11", "@tailwindcss/line-clamp": "^0.4.4", "@tailwindcss/typography": "^0.5.19", - "@tanstack/eslint-plugin-query": "^5.91.4", + "@tanstack/eslint-plugin-query": "^5.91.2", "@testing-library/jest-dom": "^6.9.1", - "@testing-library/react": "^16.3.2", + "@testing-library/react": "^16.3.1", "@testing-library/react-hooks": "^8.0.1", "@types/node": "^22.19.1", "@types/react-dom": "^19.2.3", "@types/sanitize-html": "^2.16.0", - "@typescript-eslint/eslint-plugin": "^8.54.0", - "@typescript-eslint/parser": "^8.54.0", - "@vitejs/plugin-basic-ssl": "^2.1.4", - "@vitejs/plugin-react": "^5.1.3", - "@vitest/coverage-v8": "^4.0.18", - "autoprefixer": "^10.4.24", + "@typescript-eslint/eslint-plugin": "^8.52.0", + "@typescript-eslint/parser": "^8.52.0", + "@vitejs/plugin-basic-ssl": "^2.1.3", + "@vitejs/plugin-react": "^5.1.2", + "@vitest/coverage-v8": "^4.0.16", + "autoprefixer": "^10.4.23", "eslint": "9.39.2", "eslint-config-prettier": "^10.1.8", "eslint-plugin-bytechef": "file:eslint", "eslint-plugin-lingui": "^0.11.0", - "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-prettier": "^5.5.4", "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-sort-destructure-keys": "^2.0.0", - "eslint-plugin-storybook": "^10.2.7", + "eslint-plugin-storybook": "^10.1.11", "eslint-plugin-tailwindcss": "^3.18.2", - "globals": "^17.3.0", + "globals": "^17.0.0", "identity-obj-proxy": "^3.0.0", "isobject": "^4.0.0", - "jsdom": "^28.0.0", - "msw": "^2.12.9", + "jsdom": "^27.4.0", + "msw": "^2.12.7", "object-resolve-path": "^1.1.1", "postcss": "^8.5.6", - "prettier": "3.8.1", + "prettier": "3.7.4", "prettier-plugin-tailwindcss": "^0.7.2", "react-fast-compare": "^3.2.2", - "storybook": "^10.2.7", + "storybook": "^10.1.11", "tailwindcss": "^3.4.17", "typescript": "^5.9.3", - "typescript-eslint": "^8.54.0", + "typescript-eslint": "^8.52.0", "vite": "^7.3.1", - "vite-bundle-analyzer": "^1.3.6", - "vite-tsconfig-paths": "^6.1.0", - "vitest": "^4.0.18" + "vite-bundle-analyzer": "^1.3.2", + "vite-tsconfig-paths": "^6.0.3", + "vitest": "^4.0.16" }, "engines": { "node": ">=20.19" @@ -274,9 +272,9 @@ } }, "node_modules/@acemir/cssom": { - "version": "0.9.31", - "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.31.tgz", - "integrity": "sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==", + "version": "0.9.28", + "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.28.tgz", + "integrity": "sha512-LuS6IVEivI75vKN8S04qRD+YySP0RmU/cV8UNukhQZvprxF+76Z43TNo/a08eCodaGhT1Us8etqS1ZRY9/Or0A==", "dev": true, "license": "MIT" }, @@ -287,13 +285,13 @@ "dev": true }, "node_modules/@ag-ui/client": { - "version": "0.0.44", - "resolved": "https://registry.npmjs.org/@ag-ui/client/-/client-0.0.44.tgz", - "integrity": "sha512-lYOdVSD/PSzVqY6CuWmQxUFoMEF6mo3CYvy22P/Wgs6bROjc6JDs3N0Lu46ZADJPiS1hcoDPtfMwSF2XisftFg==", + "version": "0.0.42", + "resolved": "https://registry.npmjs.org/@ag-ui/client/-/client-0.0.42.tgz", + "integrity": "sha512-zAbP+sZJImR5bUpR2ni7RtuuNZMuesaxviynyIgzKlr1k2VCM49mFpbDUKU4TH4Cneu+Xe7OEnO8qCOCIzBAww==", "dependencies": { - "@ag-ui/core": "0.0.44", - "@ag-ui/encoder": "0.0.44", - "@ag-ui/proto": "0.0.44", + "@ag-ui/core": "0.0.42", + "@ag-ui/encoder": "0.0.42", + "@ag-ui/proto": "0.0.42", "@types/uuid": "^10.0.0", "compare-versions": "^6.1.1", "fast-json-patch": "^3.1.1", @@ -313,9 +311,9 @@ } }, "node_modules/@ag-ui/core": { - "version": "0.0.44", - "resolved": "https://registry.npmjs.org/@ag-ui/core/-/core-0.0.44.tgz", - "integrity": "sha512-xX6oSGZ+yqG/qIhzfbGRcenIKoSzWhrYerRZIFwYqa1keN55Zybbp29/zuauWNy0OwffVnWQ5bhR2mRVqgsk/w==", + "version": "0.0.42", + "resolved": "https://registry.npmjs.org/@ag-ui/core/-/core-0.0.42.tgz", + "integrity": "sha512-C2hMg4Gs5oiUDgK9cA2RsTwSSmFZdIsqPklDrFw/Ue+quH6EU3vKp5YoOq7nuaQYO4pO8Em+Z+l5/M5PpcvP1g==", "dependencies": { "rxjs": "7.8.1", "zod": "^3.22.4" @@ -331,20 +329,20 @@ } }, "node_modules/@ag-ui/encoder": { - "version": "0.0.44", - "resolved": "https://registry.npmjs.org/@ag-ui/encoder/-/encoder-0.0.44.tgz", - "integrity": "sha512-5jXmWv02ONy7BViMNdx1U9UJAnecAPPefq+Tjva2bXQSZ7NnKmnqLlg/m+d0UFm1Jt5JhIgdgSx2YGg0p8QDxA==", + "version": "0.0.42", + "resolved": "https://registry.npmjs.org/@ag-ui/encoder/-/encoder-0.0.42.tgz", + "integrity": "sha512-97B5MMCSs82t/y41uk2NrLBYFhbvn4kYsKQHMCfy8tjSWubyxh3zP7N9yHo8zJeSPe3WvzTvclyXNiGxSOsorg==", "dependencies": { - "@ag-ui/core": "0.0.44", - "@ag-ui/proto": "0.0.44" + "@ag-ui/core": "0.0.42", + "@ag-ui/proto": "0.0.42" } }, "node_modules/@ag-ui/proto": { - "version": "0.0.44", - "resolved": "https://registry.npmjs.org/@ag-ui/proto/-/proto-0.0.44.tgz", - "integrity": "sha512-bp01eCvuq7OOTP+W/gvbllYxhhoHG0X7RLvFonn0sh181O8iD49plnD1v50gr0yiq4Y9N8Hgcue+ia10tiQ1oQ==", + "version": "0.0.42", + "resolved": "https://registry.npmjs.org/@ag-ui/proto/-/proto-0.0.42.tgz", + "integrity": "sha512-NDUwSgMnGEqxZGkWIJ1ge5t3Q7Kiddj360x2JAWaIfv9w+7tDJ0pmgyzf3/SXp605aY2wZiDLBtJ6jKZeg1lFg==", "dependencies": { - "@ag-ui/core": "0.0.44", + "@ag-ui/core": "0.0.42", "@bufbuild/protobuf": "^2.2.5", "@protobuf-ts/protoc": "^2.11.1" } @@ -387,9 +385,9 @@ } }, "node_modules/@asamuzakjp/css-color": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.1.1.tgz", - "integrity": "sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.1.0.tgz", + "integrity": "sha512-9xiBAtLn4aNsa4mDnpovJvBn72tNEIACyvlqaNJ+ADemR+yeMJWnBudOi2qGDviJa7SwcDOU/TRh5dnET7qk0w==", "dev": true, "license": "MIT", "dependencies": { @@ -397,13 +395,13 @@ "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", - "lru-cache": "^11.2.4" + "lru-cache": "^11.2.2" } }, "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -442,28 +440,26 @@ "license": "MIT" }, "node_modules/@assistant-ui/react": { - "version": "0.12.9", - "resolved": "https://registry.npmjs.org/@assistant-ui/react/-/react-0.12.9.tgz", - "integrity": "sha512-yz5a40Gadfsd0Klo6kGXFSC6KGbVODjqs4w2YBrz5BPj+IutATEXmYr0FZokmz5z5IgPztHGs58hXgDUErx3zg==", + "version": "0.11.53", + "resolved": "https://registry.npmjs.org/@assistant-ui/react/-/react-0.11.53.tgz", + "integrity": "sha512-G5VB752Somw2Xv4JkGqnloZTxXRu2laHufOROs2H9yOE9Pu+o9aCjW/rn9p8FIev4gWh/ltDouX8T+z9Fh8dJw==", "license": "MIT", "dependencies": { - "@assistant-ui/store": "^0.1.6", - "@assistant-ui/tap": "^0.4.5", + "@assistant-ui/tap": "^0.3.5", "@radix-ui/primitive": "^1.1.3", "@radix-ui/react-compose-refs": "^1.1.2", "@radix-ui/react-context": "^1.1.3", - "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-primitive": "^2.1.4", "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-use-callback-ref": "^1.1.1", "@radix-ui/react-use-escape-keydown": "^1.1.1", - "assistant-cloud": "^0.1.17", - "assistant-stream": "^0.3.2", - "nanoid": "^5.1.6", + "assistant-cloud": "^0.1.12", + "assistant-stream": "^0.2.46", + "nanoid": "5.1.6", "react-textarea-autosize": "^8.5.9", - "zod": "^4.3.6", - "zustand": "^5.0.11" + "zod": "^4.2.1", + "zustand": "^5.0.9" }, "peerDependencies": { "@types/react": "*", @@ -481,9 +477,9 @@ } }, "node_modules/@assistant-ui/react-markdown": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/@assistant-ui/react-markdown/-/react-markdown-0.12.3.tgz", - "integrity": "sha512-H2OPDj7Iw8S/Ro9VXB5JaaEbOYoKguUSRAyAldiLv+bZDyuv4wGVswh81wKN0poZ79omf6c7udOxo9NAj/gVpw==", + "version": "0.11.9", + "resolved": "https://registry.npmjs.org/@assistant-ui/react-markdown/-/react-markdown-0.11.9.tgz", + "integrity": "sha512-zR0Ty4ID5htJgm4g1TVAbTsyfJZ8XHccDQ0sMODsq/PWAM75l7EmAbxdSKPbvCqny1A/FxvAB4dz1LA17ZgoWg==", "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "^2.1.4", @@ -492,7 +488,7 @@ "react-markdown": "^10.1.0" }, "peerDependencies": { - "@assistant-ui/react": "^0.12.9", + "@assistant-ui/react": "^0.11.53", "@types/react": "*", "react": "^18 || ^19" }, @@ -563,29 +559,10 @@ } } }, - "node_modules/@assistant-ui/store": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@assistant-ui/store/-/store-0.1.6.tgz", - "integrity": "sha512-FdKfuY04bsxGQFTkP+35wF7RLGoZ1HrSDEbjN1J7Qr5TsdbeVjrgX0dU2pG+M6ezY6Zh7wIhZCEa5srX0UrT+A==", - "license": "MIT", - "dependencies": { - "@assistant-ui/tap": "^0.4.5", - "use-effect-event": "^2.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^18 || ^19" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@assistant-ui/tap": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@assistant-ui/tap/-/tap-0.4.5.tgz", - "integrity": "sha512-qqBQ2GxxUeh6ksCbMSNmUFCC1ISFeJ/U9hhlX00v+dHeYaLNuFryuBC5UJjibi4U05VGgfX+u6HWfArKqskbSw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@assistant-ui/tap/-/tap-0.3.5.tgz", + "integrity": "sha512-aI7lOKglkVYy17GrS9EdjSrOmEBmofWPBZ4F5wb96yqEynXflXY3qUAFCgmUwaP/TVkog72+o1ePyvsGphSmJQ==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -601,12 +578,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -615,29 +592,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", + "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@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", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -659,13 +636,13 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -688,12 +665,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", + "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -749,27 +726,27 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -861,25 +838,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", - "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", - "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -1390,31 +1367,31 @@ } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", "debug": "^4.3.1" }, "engines": { @@ -1422,9 +1399,9 @@ } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -1445,20 +1422,20 @@ } }, "node_modules/@bufbuild/protobuf": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.11.0.tgz", - "integrity": "sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ==", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.10.1.tgz", + "integrity": "sha512-ckS3+vyJb5qGpEYv/s1OebUHDi/xSNtfgw1wqKZo7MR9F2z+qXr0q5XagafAG/9O0QPVIUfST0smluYSTpYFkg==", "license": "(Apache-2.0 AND BSD-3-Clause)" }, "node_modules/@chromatic-com/storybook": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@chromatic-com/storybook/-/storybook-5.0.0.tgz", - "integrity": "sha512-8wUsqL8kg6R5ue8XNE7Jv/iD1SuE4+6EXMIGIuE+T2loBITEACLfC3V8W44NJviCLusZRMWbzICddz0nU0bFaw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@chromatic-com/storybook/-/storybook-4.1.3.tgz", + "integrity": "sha512-hc0HO9GAV9pxqDE6fTVOV5KeLpTiCfV8Jrpk5ogKLiIgeq2C+NPjpt74YnrZTjiK8E19fYcMP+2WY9ZtX7zHmw==", "dev": true, "license": "MIT", "dependencies": { "@neoconfetti/react": "^1.0.0", - "chromatic": "^13.3.4", + "chromatic": "^13.3.3", "filesize": "^10.0.12", "jsonfile": "^6.1.0", "strip-ansi": "^7.1.0" @@ -1468,7 +1445,7 @@ "yarn": ">=1.22.18" }, "peerDependencies": { - "storybook": "^0.0.0-0 || ^10.1.0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0" + "storybook": "^0.0.0-0 || ^9.0.0 || ^9.1.0-0 || ^9.2.0-0 || ^10.0.0-0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0" } }, "node_modules/@chromatic-com/storybook/node_modules/ansi-regex": { @@ -1596,9 +1573,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.26.tgz", - "integrity": "sha512-6boXK0KkzT5u5xOgF6TKB+CLq9SOpEGmkZw0g5n9/7yg85wab3UzSxB8TxhLJ31L4SGJ6BCFRw/iftTha1CJXA==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.14.tgz", + "integrity": "sha512-zSlIxa20WvMojjpCSy8WrNpcZ61RqfTfX3XTaOeVlGJrt/8HF3YbzgFZa01yTbT4GWQLwfTcC3EB8i3XnB647Q==", "dev": true, "funding": [ { @@ -1610,7 +1587,13 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0" + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } }, "node_modules/@csstools/css-tokenizer": { "version": "3.0.4", @@ -2400,19 +2383,19 @@ } }, "node_modules/@exodus/bytes": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.11.0.tgz", - "integrity": "sha512-wO3vd8nsEHdumsXrjGO/v4p6irbg7hy9kvIeR6i2AwylZSk4HJdWgL0FNaVquW1+AweJcdvU1IEpuIWk/WaPnA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.7.0.tgz", + "integrity": "sha512-5i+BtvujK/vM07YCGDyz4C4AyDzLmhxHMtM5HpUyPRtJPBdFPsj290ffXW+UXY21/G7GtXeHD2nRmq0T1ShyQQ==", "dev": true, "license": "MIT", "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@noble/hashes": "^1.8.0 || ^2.0.0" + "@exodus/crypto": "^1.0.0-rc.4" }, "peerDependenciesMeta": { - "@noble/hashes": { + "@exodus/crypto": { "optional": true } } @@ -2487,9 +2470,9 @@ "license": "0BSD" }, "node_modules/@graphql-codegen/cli": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-6.1.1.tgz", - "integrity": "sha512-Ni8UdZ6D/UTvLvDtPb6PzshI0lTqtLDnmv/2t1w2SYP92H0MMEdAzxB/ujDWwIXm2LzVPvvrGvzzCTMsyXa+mA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-6.1.0.tgz", + "integrity": "sha512-7w3Zq5IFONVOBcyOiP01Nv9WRxGS/TEaBCAb/ALYA3xHq95dqKCpoGnxt/Ut9R18jiS+aMgT0gc8Tr8sHy44jA==", "dev": true, "license": "MIT", "dependencies": { @@ -4321,9 +4304,9 @@ } }, "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", "dev": true, "license": "MIT", "dependencies": { @@ -4608,9 +4591,9 @@ } }, "node_modules/@lingui/babel-plugin-extract-messages": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-5.9.0.tgz", - "integrity": "sha512-1uLhq9u6zUoTMsNzaoHKi+PnySdeLMaxOHC9L5dbXotJim7eiUH5d3OiuXajN4sDW+xKSMg0/KE9Oo8ge6gzpA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-5.7.0.tgz", + "integrity": "sha512-kTRw/cr4crwKim2mAd4f5dHUQtIWK1ydN3Ga5FHb5hYgPhfK9egzykVCIEb/N10TfwwLUjSzNZXmTlCiLrgTLw==", "dev": true, "license": "MIT", "engines": { @@ -4618,18 +4601,18 @@ } }, "node_modules/@lingui/babel-plugin-lingui-macro": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-lingui-macro/-/babel-plugin-lingui-macro-5.9.0.tgz", - "integrity": "sha512-TWpxsoG5R4km/5//mjT90a1cGXlljt9hLP6VJGDsO+31uYr8qQ4PN92DvXKrKicBDZTDxtH5K+TkaBTZhPNqzQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-lingui-macro/-/babel-plugin-lingui-macro-5.7.0.tgz", + "integrity": "sha512-LoyRpvcocdKfkfill3VOYtyDYclnrB+c/IOS0D0i+xmBvNDjtG28gOVU81brg2w07Hzi6TKhNf3+YSi2UXsILQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.20.12", "@babel/runtime": "^7.20.13", "@babel/types": "^7.20.7", - "@lingui/conf": "5.9.0", - "@lingui/core": "5.9.0", - "@lingui/message-utils": "5.9.0" + "@lingui/conf": "5.7.0", + "@lingui/core": "5.7.0", + "@lingui/message-utils": "5.7.0" }, "engines": { "node": ">=20.0.0" @@ -4644,9 +4627,9 @@ } }, "node_modules/@lingui/cli": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-5.9.0.tgz", - "integrity": "sha512-c4fle6xGZAFxEWADE1rN22PbVRbNFiNK0LBtxbtGN4G6ziO/AVhXua+liMy/fFkRCyooSbM3J5hU35xih0jMMg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-5.7.0.tgz", + "integrity": "sha512-606EuwTvenumOfNRF9JoV1G3JIZyWQldQV+rgkUozmaiEQT+3xuTr6K2IOSBfJZoICG2jwrnMT8ifWr08BAICg==", "dev": true, "license": "MIT", "dependencies": { @@ -4655,12 +4638,12 @@ "@babel/parser": "^7.22.0", "@babel/runtime": "^7.21.0", "@babel/types": "^7.21.2", - "@lingui/babel-plugin-extract-messages": "5.9.0", - "@lingui/babel-plugin-lingui-macro": "5.9.0", - "@lingui/conf": "5.9.0", - "@lingui/core": "5.9.0", - "@lingui/format-po": "5.9.0", - "@lingui/message-utils": "5.9.0", + "@lingui/babel-plugin-extract-messages": "5.7.0", + "@lingui/babel-plugin-lingui-macro": "5.7.0", + "@lingui/conf": "5.7.0", + "@lingui/core": "5.7.0", + "@lingui/format-po": "5.7.0", + "@lingui/message-utils": "5.7.0", "chokidar": "3.5.1", "cli-table": "^0.3.11", "commander": "^10.0.0", @@ -4855,9 +4838,9 @@ } }, "node_modules/@lingui/conf": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.9.0.tgz", - "integrity": "sha512-dtRUlz3IyG+XwFRDzA45vllJwiY5zY92Skb3GE1QtZxV28B3oP/8G16Z9vQvDn1WpupQbf8EsqfOvaPAraa2cw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.7.0.tgz", + "integrity": "sha512-O0TWVfR99H+7SUI4pYGNkCUU1t2WcIwgDTTX3VKq6wH3A+P90QyAJLOXj+/s0JVkc1I37EL23Wtca5QkFBLtOg==", "dev": true, "license": "MIT", "dependencies": { @@ -4909,19 +4892,19 @@ } }, "node_modules/@lingui/core": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@lingui/core/-/core-5.9.0.tgz", - "integrity": "sha512-TJFhRttwHdWpcYRT3KVXh4nT+Qc4yxvrpalV5Vrs/sQTyrQWbT1/Lc9qXNYSALb5BAglZq0XU46oRpJdt+PVMQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/core/-/core-5.7.0.tgz", + "integrity": "sha512-eEQCFqjcwCn2lEHsH/I0koMKfwCJFTKG3Bnx6tkVuYmpfmgagbSMKIMot0WFY9gzafKHGsrvZrNDNT4OwdxDIQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", - "@lingui/message-utils": "5.9.0" + "@lingui/message-utils": "5.7.0" }, "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@lingui/babel-plugin-lingui-macro": "5.9.0", + "@lingui/babel-plugin-lingui-macro": "5.7.0", "babel-plugin-macros": "2 || 3" }, "peerDependenciesMeta": { @@ -4934,14 +4917,14 @@ } }, "node_modules/@lingui/format-po": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@lingui/format-po/-/format-po-5.9.0.tgz", - "integrity": "sha512-Umm2dt2TjiWl2kLSXk7+t5V3V/p9AaUUtRA7Ky3XHMYanKuxp0/Km/MTJfdSdCH6Rftefk/aQ3hJKuQORP8Bsw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/format-po/-/format-po-5.7.0.tgz", + "integrity": "sha512-n2UX7T7N58O8HhcmM6RAVgxM3egloF0AM16VQdMPEKpZiTm8CDN5O3ovJu7ophsbfLp9iKZcbGd+QypZY671+Q==", "dev": true, "license": "MIT", "dependencies": { - "@lingui/conf": "5.9.0", - "@lingui/message-utils": "5.9.0", + "@lingui/conf": "5.7.0", + "@lingui/message-utils": "5.7.0", "date-fns": "^3.6.0", "pofile": "^1.1.4" }, @@ -4961,20 +4944,20 @@ } }, "node_modules/@lingui/macro": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-5.9.0.tgz", - "integrity": "sha512-sewECacYl+VKUTyd/XqV5zd4zo0/YpSEKPJhB8fhzVeu/wObK2PtMcOhir0vW/nTjWWXpUdH8BZ202OKtOqymQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-5.7.0.tgz", + "integrity": "sha512-XDB3obEo/R+HXXCxkEvDyvz7u/m5VlkbyHiXeq2eTFXfzLMXI7wLUyVDbxKysXkqmYcBgzmRUYDTRcA+mUoIKg==", "dev": true, "license": "MIT", "dependencies": { - "@lingui/core": "5.9.0", - "@lingui/react": "5.9.0" + "@lingui/core": "5.7.0", + "@lingui/react": "5.7.0" }, "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@lingui/babel-plugin-lingui-macro": "5.9.0", + "@lingui/babel-plugin-lingui-macro": "5.7.0", "babel-plugin-macros": "2 || 3" }, "peerDependenciesMeta": { @@ -4987,9 +4970,9 @@ } }, "node_modules/@lingui/message-utils": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-5.9.0.tgz", - "integrity": "sha512-BL5MZt7yCLuyEbuIm+w0TZIZ/ctQOX5IO3yVOrWpM8L3rh2uP/MPDUKhGy8e/XPNMgBVFhlpos/tSzvdh03ErQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-5.7.0.tgz", + "integrity": "sha512-yJKzPjJCLz8EkjqExxEBrioiKZtgxgLubOwzjSiZ8n1omuoyeRAqdKkmeOP/fPW2QpkQv33qLqfLtBhrIVJkeg==", "license": "MIT", "dependencies": { "@messageformat/parser": "^5.0.0", @@ -5000,21 +4983,21 @@ } }, "node_modules/@lingui/react": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@lingui/react/-/react-5.9.0.tgz", - "integrity": "sha512-3887EeVNwXZXWIMBpdziuNiSWtA1g2Kb8XLWOrIEJorAXOds3Oo+0NrTKWlBmIsUMmgw9SeK1e6RPZxeQk+B+g==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/react/-/react-5.7.0.tgz", + "integrity": "sha512-pz9Gh3JYe4KQTmgebjqUCwEYEsl4V0cwVXFo1jxXCESDc40cuOwGIkdHxj7kfBtfJBdsFSzAPs9UVDDd/Ovpzg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", - "@lingui/core": "5.9.0" + "@lingui/core": "5.7.0" }, "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@lingui/babel-plugin-lingui-macro": "5.9.0", + "@lingui/babel-plugin-lingui-macro": "5.7.0", "babel-plugin-macros": "2 || 3", - "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@lingui/babel-plugin-lingui-macro": { @@ -5026,14 +5009,14 @@ } }, "node_modules/@lingui/vite-plugin": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@lingui/vite-plugin/-/vite-plugin-5.9.0.tgz", - "integrity": "sha512-qNr4UE/QZ36mo5+XVQ0hTWoQSIULoVQ2b1G+aNbGk6Z7olc8yYAtdytJyOCTEk9gCBeyMBTK7zonlxVngNsCfA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/vite-plugin/-/vite-plugin-5.7.0.tgz", + "integrity": "sha512-Mdmq/WfhTzQ8Q5oL7cYoP2Nu7bBWlZmGlQL0+6Oeb2bgFbabWixcXuqVwGElPvR8PGwGwnZ2gXVs0Y9KdzBDaQ==", "dev": true, "license": "MIT", "dependencies": { - "@lingui/cli": "5.9.0", - "@lingui/conf": "5.9.0" + "@lingui/cli": "5.7.0", + "@lingui/conf": "5.7.0" }, "engines": { "node": ">=20.0.0" @@ -5093,9 +5076,9 @@ } }, "node_modules/@mswjs/interceptors": { - "version": "0.41.2", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.41.2.tgz", - "integrity": "sha512-7G0Uf0yK3f2bjElBLGHIQzgRgMESczOMyYVasq1XK8P5HaXtlW4eQhz9MBL+TQILZLaruq+ClGId+hH0w4jvWw==", + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.40.0.tgz", + "integrity": "sha512-EFd6cVbHsgLa6wa4RljGj6Wk75qoHxUSyc5asLyyPSyuhIcdS2Q3Phw6ImS1q+CkALthJRShiYfKANcQMuMqsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5177,252 +5160,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@opentelemetry/api": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", - "license": "Apache-2.0", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@opentelemetry/api-logs": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.208.0.tgz", - "integrity": "sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "^1.3.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@opentelemetry/core": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.2.0.tgz", - "integrity": "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/exporter-logs-otlp-http": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.208.0.tgz", - "integrity": "sha512-jOv40Bs9jy9bZVLo/i8FwUiuCvbjWDI+ZW13wimJm4LjnlwJxGgB+N/VWOZUTpM+ah/awXeQqKdNlpLf2EjvYg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.208.0", - "@opentelemetry/core": "2.2.0", - "@opentelemetry/otlp-exporter-base": "0.208.0", - "@opentelemetry/otlp-transformer": "0.208.0", - "@opentelemetry/sdk-logs": "0.208.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/otlp-exporter-base": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.208.0.tgz", - "integrity": "sha512-gMd39gIfVb2OgxldxUtOwGJYSH8P1kVFFlJLuut32L6KgUC4gl1dMhn+YC2mGn0bDOiQYSk/uHOdSjuKp58vvA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/otlp-transformer": "0.208.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/otlp-transformer": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.208.0.tgz", - "integrity": "sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.208.0", - "@opentelemetry/core": "2.2.0", - "@opentelemetry/resources": "2.2.0", - "@opentelemetry/sdk-logs": "0.208.0", - "@opentelemetry/sdk-metrics": "2.2.0", - "@opentelemetry/sdk-trace-base": "2.2.0", - "protobufjs": "^7.3.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", - "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/resources": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.4.0.tgz", - "integrity": "sha512-RWvGLj2lMDZd7M/5tjkI/2VHMpXebLgPKvBUd9LRasEWR2xAynDwEYZuLvY9P2NGG73HF07jbbgWX2C9oavcQg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.4.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.4.0.tgz", - "integrity": "sha512-KtcyFHssTn5ZgDu6SXmUznS80OFs/wN7y6MyFRRcKU6TOw8hNcGxKvt8hsdaLJfhzUszNSjURetq5Qpkad14Gw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-logs": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.208.0.tgz", - "integrity": "sha512-QlAyL1jRpOeaqx7/leG1vJMp84g0xKP6gJmfELBpnI4O/9xPX+Hu5m1POk9Kl+veNkyth5t19hRlN6tNY1sjbA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.208.0", - "@opentelemetry/core": "2.2.0", - "@opentelemetry/resources": "2.2.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", - "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.2.0.tgz", - "integrity": "sha512-G5KYP6+VJMZzpGipQw7Giif48h6SGQ2PFKEYCybeXJsOCB4fp8azqMAAzE5lnnHK3ZVwYQrgmFbsUJO/zOnwGw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/resources": "2.2.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.9.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", - "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-trace-base": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.2.0.tgz", - "integrity": "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/resources": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/resources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", - "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.38.0.tgz", - "integrity": "sha512-kocjix+/sSggfJhwXqClZ3i9Y/MI0fp7b+g7kCRm6psy2dsf8uApTRclwG18h8Avm7C9+fnt+O36PspJ/OzoWg==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -5434,9 +5171,9 @@ } }, "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz", + "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==", "dev": true, "license": "MIT", "engines": { @@ -5447,13 +5184,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", - "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", + "version": "1.57.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.57.0.tgz", + "integrity": "sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.58.2" + "playwright": "1.57.0" }, "bin": { "playwright": "cli.js" @@ -5473,18 +5210,18 @@ } }, "node_modules/@posthog/core": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.20.1.tgz", - "integrity": "sha512-uoTmWkYCtLYFpiK37/JCq+BuCA/OZn1qQZn5cPv1EEKt3ni3Zgg48xWCnSEyGFl5KKSXlfCruiRTwnbAtCgrBA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.9.1.tgz", + "integrity": "sha512-kRb1ch2dhQjsAapZmu6V66551IF2LnCbc1rnrQqnR7ArooVyJN9KOPXre16AJ3ObJz2eTfuP7x25BMyS2Y5Exw==", "license": "MIT", "dependencies": { "cross-spawn": "^7.0.6" } }, "node_modules/@posthog/types": { - "version": "1.342.1", - "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.342.1.tgz", - "integrity": "sha512-bcyBdO88FWTkd5AVTa4Nu8T7RfY0WJrG7WMCXum/rcvNjYhS3DmOfKf8o/Bt56vA3J3yeU0vbgrmltYVoTAfaA==", + "version": "1.316.1", + "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.316.1.tgz", + "integrity": "sha512-rh8GSOnmnwd0fUIBYzQcXt4WYXMg9QPkY0tE46K0eneWYVyqNYXFXzcdf2U37g+ZYNiBq9ubLeCD7h0C0MDJgw==", "license": "MIT" }, "node_modules/@protobuf-ts/protoc": { @@ -5496,70 +5233,6 @@ "protoc": "protoc.js" } }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "license": "BSD-3-Clause" - }, "node_modules/@radix-ui/colors": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/colors/-/colors-3.0.0.tgz", @@ -5600,29 +5273,6 @@ } } }, - "node_modules/@radix-ui/react-accessible-icon/node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-accordion": { "version": "1.2.12", "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", @@ -6357,29 +6007,6 @@ } } }, - "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-one-time-password-field": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/@radix-ui/react-one-time-password-field/-/react-one-time-password-field-0.1.8.tgz", @@ -6825,38 +6452,15 @@ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, @@ -7050,29 +6654,6 @@ } } }, - "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-toggle": { "version": "1.1.10", "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", @@ -7231,29 +6812,6 @@ } } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-use-callback-ref": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", @@ -7409,35 +6967,12 @@ } }, "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.4.tgz", - "integrity": "sha512-kaeiyGCe844dkb9AVF+rb4yTyb1LiLN/e3es3nLiRyN4dC8AduBYPMnnNlDjX2VDOcvDEiPnRNMJeWCfsX0txg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.4" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", - "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.2.4" + "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", @@ -7474,9 +7009,9 @@ "license": "MIT" }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.2", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", - "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", + "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", "dev": true, "license": "MIT" }, @@ -7880,16 +7415,16 @@ "license": "MIT" }, "node_modules/@storybook/addon-docs": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.7.tgz", - "integrity": "sha512-RHw+uHA05A7t48OtVu6gvNOueSGK8P/5NCmVRl3Vx/Kg3mxCyU2nGOHwWBt3C3CsWOLioZPsa7f5UdjOkhJ35Q==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.1.11.tgz", + "integrity": "sha512-Jwm291Fhim2eVcZIVlkG1B2skb0ZI9oru6nqMbJxceQZlvZmcIa4oxvS1oaMTKw2DJnCv97gLm57P/YvRZ8eUg==", "dev": true, "license": "MIT", "dependencies": { "@mdx-js/react": "^3.0.0", - "@storybook/csf-plugin": "10.2.7", - "@storybook/icons": "^2.0.1", - "@storybook/react-dom-shim": "10.2.7", + "@storybook/csf-plugin": "10.1.11", + "@storybook/icons": "^2.0.0", + "@storybook/react-dom-shim": "10.1.11", "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", "ts-dedent": "^2.0.0" @@ -7899,13 +7434,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.7" + "storybook": "^10.1.11" } }, "node_modules/@storybook/addon-links": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-10.2.7.tgz", - "integrity": "sha512-j2LUFUraQg3/ovDQU8BRhdwE3bKqC1frmn0E8kg9STM63wMgXMZ+6rz+HhGU64f2jvb2AQCgAgHs6FB1mufzhg==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-10.1.11.tgz", + "integrity": "sha512-PEC+Fn3fyBOlMlCcLX+AUunrQMcH7MEfiFtPkp7QnjfMGwBIyzCjgVxM2OyKyIslQnB1So1pY98uTI26fXz/yg==", "dev": true, "license": "MIT", "dependencies": { @@ -7917,7 +7452,7 @@ }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^10.2.7" + "storybook": "^10.1.11" }, "peerDependenciesMeta": { "react": { @@ -7926,9 +7461,9 @@ } }, "node_modules/@storybook/addon-onboarding": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/@storybook/addon-onboarding/-/addon-onboarding-10.2.7.tgz", - "integrity": "sha512-itf4l/ctdGBwAtKWHd35tPt/VFBefGZTVpccbV4c5yhe1RV364v+UeGCgtHkA0G5R3R2Y/gdSZ+edOZXbGFKRw==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/@storybook/addon-onboarding/-/addon-onboarding-10.1.11.tgz", + "integrity": "sha512-DNJv0IDl5XBrY+PPgwnMXLyp3omPkMOS6xe8ejG3csT71B6+3VueL6m7Qivh6739SnAV0QBU5SQlpMA0gQUcSA==", "dev": true, "license": "MIT", "funding": { @@ -7936,17 +7471,18 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.7" + "storybook": "^10.1.11" } }, "node_modules/@storybook/builder-vite": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.7.tgz", - "integrity": "sha512-dh/Oqvwob12oYJoaUkMgXxCGFxR8B+Hb/nACttxSuAZ1InTtXIMBM9GDpBs8QjaT23X/yHJz3dPYyUBbsn/SNA==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.1.11.tgz", + "integrity": "sha512-MMD09Ap7FyzDfWG961pkIMv/w684XXe1bBEi+wCEpHxvrgAd3j3A9w/Rqp9Am2uRDPCEdi1QgSzS3SGW3aGThQ==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf-plugin": "10.2.7", + "@storybook/csf-plugin": "10.1.11", + "@vitest/mocker": "3.2.4", "ts-dedent": "^2.0.0" }, "funding": { @@ -7954,14 +7490,14 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^10.2.7", + "storybook": "^10.1.11", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "node_modules/@storybook/csf-plugin": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.7.tgz", - "integrity": "sha512-10JblhVYXYmz+XjU86kvAV6pdqCLdkgGcARS6ehhR6W98lKGskWhLNgu4KM9BEKa/2roH8je+DmrlX3ugkMEgw==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.1.11.tgz", + "integrity": "sha512-Ant0NhgqHKzQsseeVTSetZCuDHHs0W2HRkHt51Kg/sUl0T/sDtfVA+fWZT8nGzGZqYSFkxqYPWjauPmIhPtaRw==", "dev": true, "license": "MIT", "dependencies": { @@ -7974,7 +7510,7 @@ "peerDependencies": { "esbuild": "*", "rollup": "*", - "storybook": "^10.2.7", + "storybook": "^10.1.11", "vite": "*", "webpack": "*" }, @@ -8011,14 +7547,14 @@ } }, "node_modules/@storybook/react": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.2.7.tgz", - "integrity": "sha512-SuWzFLNprNNWUWC7o0p1gVNAK1QoDTVdymDo4jeKIUfcMdmzEMzj8zqkCxeStaVLQxqBIvmca3uJHlym8GsVrQ==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-10.1.11.tgz", + "integrity": "sha512-rmMGmEwBaM2YpB8oDk2moM0MNjNMqtwyoPPZxjyruY9WVhYca8EDPGKEdRzUlb4qZJsTgLi7VU4eqg6LD/mL3Q==", "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/react-dom-shim": "10.2.7", + "@storybook/react-dom-shim": "10.1.11", "react-docgen": "^8.0.2" }, "funding": { @@ -8028,7 +7564,7 @@ "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", - "storybook": "^10.2.7", + "storybook": "^10.1.11", "typescript": ">= 4.9.x" }, "peerDependenciesMeta": { @@ -8038,9 +7574,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.7.tgz", - "integrity": "sha512-TCD46eKy0JlqUU3DZDaJNecen09HjT74NpJjmgpwOyMXrm+Wl/HfshMyn4GZj/rVQfFN90udNp0NzfbBAPbJAQ==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.1.11.tgz", + "integrity": "sha512-o8WPhRlZbORUWG9lAgDgJP0pi905VHJUFJr1Kp8980gHqtlemtnzjPxKy5vFwj6glNhAlK8SS8OOYzWP7hloTQ==", "dev": true, "license": "MIT", "funding": { @@ -8050,20 +7586,20 @@ "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", - "storybook": "^10.2.7" + "storybook": "^10.1.11" } }, "node_modules/@storybook/react-vite": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.2.7.tgz", - "integrity": "sha512-R8Xwh3RaCsTyr55xv0rYrT4ve+Kw8vGGTzE6IWkHAXjRYXLdETH8JJoAuI75ESbCeUOl7Lj9jvtD9jS3TCoboA==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-10.1.11.tgz", + "integrity": "sha512-qh1BCD25nIoiDfqwha+qBkl7pcG4WuzM+c8tsE63YEm8AFIbNKg5K8lVUoclF+4CpFz7IwBpWe61YUTDfp+91w==", "dev": true, "license": "MIT", "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "^0.6.3", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "10.2.7", - "@storybook/react": "10.2.7", + "@storybook/builder-vite": "10.1.11", + "@storybook/react": "10.1.11", "empathic": "^2.0.0", "magic-string": "^0.30.0", "react-docgen": "^8.0.0", @@ -8077,7 +7613,7 @@ "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", - "storybook": "^10.2.7", + "storybook": "^10.1.11", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, @@ -8368,32 +7904,26 @@ } }, "node_modules/@tanstack/eslint-plugin-query": { - "version": "5.91.4", - "resolved": "https://registry.npmjs.org/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.91.4.tgz", - "integrity": "sha512-8a+GAeR7oxJ5laNyYBQ6miPK09Hi18o5Oie/jx8zioXODv/AUFLZQecKabPdpQSLmuDXEBPKFh+W5DKbWlahjQ==", + "version": "5.91.2", + "resolved": "https://registry.npmjs.org/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.91.2.tgz", + "integrity": "sha512-UPeWKl/Acu1IuuHJlsN+eITUHqAaa9/04geHHPedY8siVarSaWprY0SVMKrkpKfk5ehRT7+/MZ5QwWuEtkWrFw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^8.48.0" + "@typescript-eslint/utils": "^8.44.1" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "^5.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0" } }, "node_modules/@tanstack/query-core": { - "version": "5.90.20", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.20.tgz", - "integrity": "sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==", + "version": "5.90.16", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.16.tgz", + "integrity": "sha512-MvtWckSVufs/ja463/K4PyJeqT+HMlJWtw6PrCpywznd2NSgO3m4KwO9RqbFqGg6iDE8vVMFWMeQI4Io3eEYww==", "license": "MIT", "funding": { "type": "github", @@ -8401,9 +7931,9 @@ } }, "node_modules/@tanstack/query-devtools": { - "version": "5.93.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.93.0.tgz", - "integrity": "sha512-+kpsx1NQnOFTZsw6HAFCW3HkKg0+2cepGtAWXjiiSOJJ1CtQpt72EE2nyZb+AjAbLRPoeRmPJ8MtQd8r8gsPdg==", + "version": "5.92.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.92.0.tgz", + "integrity": "sha512-N8D27KH1vEpVacvZgJL27xC6yPFUy0Zkezn5gnB3L3gRCxlDeSuiya7fKge8Y91uMTnC8aSxBQhcK6ocY7alpQ==", "license": "MIT", "funding": { "type": "github", @@ -8411,12 +7941,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.90.20", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.20.tgz", - "integrity": "sha512-vXBxa+qeyveVO7OA0jX1z+DeyCA4JKnThKv411jd5SORpBKgkcVnYKCiBgECvADvniBX7tobwBmg01qq9JmMJw==", + "version": "5.90.16", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.16.tgz", + "integrity": "sha512-bpMGOmV4OPmif7TNMteU/Ehf/hoC0Kf98PDc0F4BZkFrEapRMEqI/V6YS0lyzwSV6PQpY1y4xxArUIfBW5LVxQ==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.90.20" + "@tanstack/query-core": "5.90.16" }, "funding": { "type": "github", @@ -8427,19 +7957,19 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.91.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.91.3.tgz", - "integrity": "sha512-nlahjMtd/J1h7IzOOfqeyDh5LNfG0eULwlltPEonYy0QL+nqrBB+nyzJfULV+moL7sZyxc2sHdNJki+vLA9BSA==", + "version": "5.91.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.91.2.tgz", + "integrity": "sha512-ZJ1503ay5fFeEYFUdo7LMNFzZryi6B0Cacrgr2h1JRkvikK1khgIq6Nq2EcblqEdIlgB/r7XDW8f8DQ89RuUgg==", "license": "MIT", "dependencies": { - "@tanstack/query-devtools": "5.93.0" + "@tanstack/query-devtools": "5.92.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.90.20", + "@tanstack/react-query": "^5.90.14", "react": "^18 || ^19" } }, @@ -8522,9 +8052,9 @@ "dev": true }, "node_modules/@testing-library/react": { - "version": "16.3.2", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.2.tgz", - "integrity": "sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.1.tgz", + "integrity": "sha512-gr4KtAWqIOQoucWYD/f6ki+j5chXfcPc74Col/6poTyqTmn7zRmodWahWRCp8tYd+GMqBonw6hstNzqjbs6gjw==", "dev": true, "license": "MIT", "dependencies": { @@ -8593,48 +8123,48 @@ } }, "node_modules/@tiptap/core": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.19.0.tgz", - "integrity": "sha512-bpqELwPW+DG8gWiD8iiFtSl4vIBooG5uVJod92Qxn3rA9nFatyXRr4kNbMJmOZ66ezUvmCjXVe/5/G4i5cyzKA==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.15.3.tgz", + "integrity": "sha512-bmXydIHfm2rEtGju39FiQNfzkFx9CDvJe+xem1dgEZ2P6Dj7nQX9LnA1ZscW7TuzbBRkL5p3dwuBIi3f62A66A==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/pm": "^3.19.0" + "@tiptap/pm": "^3.15.3" } }, "node_modules/@tiptap/extension-blockquote": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.19.0.tgz", - "integrity": "sha512-y3UfqY9KD5XwWz3ndiiJ089Ij2QKeiXy/g1/tlAN/F1AaWsnkHEHMLxCP1BIqmMpwsX7rZjMLN7G5Lp7c9682A==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.15.3.tgz", + "integrity": "sha512-13x5UsQXtttFpoS/n1q173OeurNxppsdWgP3JfsshzyxIghhC141uL3H6SGYQLPU31AizgDs2OEzt6cSUevaZg==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0" + "@tiptap/core": "^3.15.3" } }, "node_modules/@tiptap/extension-bold": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.19.0.tgz", - "integrity": "sha512-UZgb1d0XK4J/JRIZ7jW+s4S6KjuEDT2z1PPM6ugcgofgJkWQvRZelCPbmtSFd3kwsD+zr9UPVgTh9YIuGQ8t+Q==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.15.3.tgz", + "integrity": "sha512-I8JYbkkUTNUXbHd/wCse2bR0QhQtJD7+0/lgrKOmGfv5ioLxcki079Nzuqqay3PjgYoJLIJQvm3RAGxT+4X91w==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0" + "@tiptap/core": "^3.15.3" } }, "node_modules/@tiptap/extension-bubble-menu": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.19.0.tgz", - "integrity": "sha512-klNVIYGCdznhFkrRokzGd6cwzoi8J7E5KbuOfZBwFwhMKZhlz/gJfKmYg9TJopeUhrr2Z9yHgWTk8dh/YIJCdQ==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.15.3.tgz", + "integrity": "sha512-e88DG1bTy6hKxrt7iPVQhJnH5/EOrnKpIyp09dfRDgWrrW88fE0Qjys7a/eT8W+sXyXM3z10Ye7zpERWsrLZDg==", "license": "MIT", "optional": true, "dependencies": { @@ -8645,80 +8175,80 @@ "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0", - "@tiptap/pm": "^3.19.0" + "@tiptap/core": "^3.15.3", + "@tiptap/pm": "^3.15.3" } }, "node_modules/@tiptap/extension-bullet-list": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.19.0.tgz", - "integrity": "sha512-F9uNnqd0xkJbMmRxVI5RuVxwB9JaCH/xtRqOUNQZnRBt7IdAElCY+Dvb4hMCtiNv+enGM/RFGJuFHR9TxmI7rw==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.15.3.tgz", + "integrity": "sha512-MGwEkNT7ltst6XaWf0ObNgpKQ4PvuuV3igkBrdYnQS+qaAx9IF4isygVPqUc9DvjYC306jpyKsNqNrENIXcosA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extension-list": "^3.19.0" + "@tiptap/extension-list": "^3.15.3" } }, "node_modules/@tiptap/extension-code": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.19.0.tgz", - "integrity": "sha512-2kqqQIXBXj2Or+4qeY3WoE7msK+XaHKL6EKOcKlOP2BW8eYqNTPzNSL+PfBDQ3snA7ljZQkTs/j4GYDj90vR1A==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.15.3.tgz", + "integrity": "sha512-x6LFt3Og6MFINYpsMzrJnz7vaT9Yk1t4oXkbJsJRSavdIWBEBcoRudKZ4sSe/AnsYlRJs8FY2uR76mt9e+7xAQ==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0" + "@tiptap/core": "^3.15.3" } }, "node_modules/@tiptap/extension-code-block": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.19.0.tgz", - "integrity": "sha512-b/2qR+tMn8MQb+eaFYgVk4qXnLNkkRYmwELQ8LEtEDQPxa5Vl7J3eu8+4OyoIFhZrNDZvvoEp80kHMCP8sI6rg==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.15.3.tgz", + "integrity": "sha512-q1UB9icNfdJppTqMIUWfoRKkx5SSdWIpwZoL2NeOI5Ah3E20/dQKVttIgLhsE521chyvxCYCRaHD5tMNGKfhyw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0", - "@tiptap/pm": "^3.19.0" + "@tiptap/core": "^3.15.3", + "@tiptap/pm": "^3.15.3" } }, "node_modules/@tiptap/extension-document": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.19.0.tgz", - "integrity": "sha512-AOf0kHKSFO0ymjVgYSYDncRXTITdTcrj1tqxVazrmO60KNl1Rc2dAggDvIVTEBy5NvceF0scc7q3sE/5ZtVV7A==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.15.3.tgz", + "integrity": "sha512-AC72nI2gnogBuETCKbZekn+h6t5FGGcZG2abPGKbz/x9rwpb6qV2hcbAQ30t6M7H6cTOh2/Ut8bEV2MtMB15sw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0" + "@tiptap/core": "^3.15.3" } }, "node_modules/@tiptap/extension-dropcursor": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.19.0.tgz", - "integrity": "sha512-sf3dEZXiLvsGqVK2maUIzXY6qtYYCvBumag7+VPTMGQ0D4hiZ1X/4ukt4+6VXDg5R2WP1CoIt/QvUetUjWNhbQ==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.15.3.tgz", + "integrity": "sha512-jGI5XZpdo8GSYQFj7HY15/oEwC2m2TqZz0/Fln5qIhY32XlZhWrsMuMI6WbUJrTH16es7xO6jmRlDsc6g+vJWg==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extensions": "^3.19.0" + "@tiptap/extensions": "^3.15.3" } }, "node_modules/@tiptap/extension-floating-menu": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.19.0.tgz", - "integrity": "sha512-JaoEkVRkt+Slq3tySlIsxnMnCjS0L5n1CA1hctjLy0iah8edetj3XD5mVv5iKqDzE+LIjF4nwLRRVKJPc8hFBg==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.15.3.tgz", + "integrity": "sha512-+3DVBleKKffadEJEdLYxmYAJOjHjLSqtiSFUE3RABT4V2ka1ODy2NIpyKX0o1SvQ5N1jViYT9Q+yUbNa6zCcDw==", "license": "MIT", "optional": true, "funding": { @@ -8727,80 +8257,80 @@ }, "peerDependencies": { "@floating-ui/dom": "^1.0.0", - "@tiptap/core": "^3.19.0", - "@tiptap/pm": "^3.19.0" + "@tiptap/core": "^3.15.3", + "@tiptap/pm": "^3.15.3" } }, "node_modules/@tiptap/extension-gapcursor": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.19.0.tgz", - "integrity": "sha512-w7DACS4oSZaDWjz7gropZHPc9oXqC9yERZTcjWxyORuuIh1JFf0TRYspleK+OK28plK/IftojD/yUDn1MTRhvA==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.15.3.tgz", + "integrity": "sha512-Kaw0sNzP0bQI/xEAMSfIpja6xhsu9WqqAK/puzOIS1RKWO47Wps/tzqdSJ9gfslPIb5uY5mKCfy8UR8Xgiia8w==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extensions": "^3.19.0" + "@tiptap/extensions": "^3.15.3" } }, "node_modules/@tiptap/extension-hard-break": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.19.0.tgz", - "integrity": "sha512-lAmQraYhPS5hafvCl74xDB5+bLuNwBKIEsVoim35I0sDJj5nTrfhaZgMJ91VamMvT+6FF5f1dvBlxBxAWa8jew==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.15.3.tgz", + "integrity": "sha512-8HjxmeRbBiXW+7JKemAJtZtHlmXQ9iji398CPQ0yYde68WbIvUhHXjmbJE5pxFvvQTJ/zJv1aISeEOZN2bKBaw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0" + "@tiptap/core": "^3.15.3" } }, "node_modules/@tiptap/extension-heading": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.19.0.tgz", - "integrity": "sha512-uLpLlfyp086WYNOc0ekm1gIZNlEDfmzOhKzB0Hbyi6jDagTS+p9mxUNYeYOn9jPUxpFov43+Wm/4E24oY6B+TQ==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.15.3.tgz", + "integrity": "sha512-G1GG6iN1YXPS+75arDpo+bYRzhr3dNDw99c7D7na3aDawa9Qp7sZ/bVrzFUUcVEce0cD6h83yY7AooBxEc67hA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0" + "@tiptap/core": "^3.15.3" } }, "node_modules/@tiptap/extension-horizontal-rule": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.19.0.tgz", - "integrity": "sha512-iqUHmgMGhMgYGwG6L/4JdelVQ5Mstb4qHcgTGd/4dkcUOepILvhdxajPle7OEdf9sRgjQO6uoAU5BVZVC26+ng==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.15.3.tgz", + "integrity": "sha512-FYkN7L6JsfwwNEntmLklCVKvgL0B0N47OXMacRk6kYKQmVQ4Nvc7q/VJLpD9sk4wh4KT1aiCBfhKEBTu5pv1fg==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0", - "@tiptap/pm": "^3.19.0" + "@tiptap/core": "^3.15.3", + "@tiptap/pm": "^3.15.3" } }, "node_modules/@tiptap/extension-italic": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.19.0.tgz", - "integrity": "sha512-6GffxOnS/tWyCbDkirWNZITiXRta9wrCmrfa4rh+v32wfaOL1RRQNyqo9qN6Wjyl1R42Js+yXTzTTzZsOaLMYA==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.15.3.tgz", + "integrity": "sha512-6XeuPjcWy7OBxpkgOV7bD6PATO5jhIxc8SEK4m8xn8nelGTBIbHGqK37evRv+QkC7E0MUryLtzwnmmiaxcKL0Q==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0" + "@tiptap/core": "^3.15.3" } }, "node_modules/@tiptap/extension-link": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.19.0.tgz", - "integrity": "sha512-HEGDJnnCPfr7KWu7Dsq+eRRe/mBCsv6DuI+7fhOCLDJjjKzNgrX2abbo/zG3D/4lCVFaVb+qawgJubgqXR/Smw==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.15.3.tgz", + "integrity": "sha512-PdDXyBF9Wco9U1x6e+b7tKBWG+kqBDXDmaYXHkFm/gYuQCQafVJ5mdrDdKgkHDWVnJzMWZXBcZjT9r57qtlLWg==", "license": "MIT", "dependencies": { "linkifyjs": "^4.3.2" @@ -8810,161 +8340,161 @@ "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0", - "@tiptap/pm": "^3.19.0" + "@tiptap/core": "^3.15.3", + "@tiptap/pm": "^3.15.3" } }, "node_modules/@tiptap/extension-list": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.19.0.tgz", - "integrity": "sha512-N6nKbFB2VwMsPlCw67RlAtYSK48TAsAUgjnD+vd3ieSlIufdQnLXDFUP6hFKx9mwoUVUgZGz02RA6bkxOdYyTw==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.15.3.tgz", + "integrity": "sha512-n7y/MF9lAM5qlpuH5IR4/uq+kJPEJpe9NrEiH+NmkO/5KJ6cXzpJ6F4U17sMLf2SNCq+TWN9QK8QzoKxIn50VQ==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0", - "@tiptap/pm": "^3.19.0" + "@tiptap/core": "^3.15.3", + "@tiptap/pm": "^3.15.3" } }, "node_modules/@tiptap/extension-list-item": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.19.0.tgz", - "integrity": "sha512-VsSKuJz4/Tb6ZmFkXqWpDYkRzmaLTyE6dNSEpNmUpmZ32sMqo58mt11/huADNwfBFB0Ve7siH/VnFNIJYY3xvg==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.15.3.tgz", + "integrity": "sha512-CCxL5ek1p0lO5e8aqhnPzIySldXRSigBFk2fP9OLgdl5qKFLs2MGc19jFlx5+/kjXnEsdQTFbGY1Sizzt0TVDw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extension-list": "^3.19.0" + "@tiptap/extension-list": "^3.15.3" } }, "node_modules/@tiptap/extension-list-keymap": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.19.0.tgz", - "integrity": "sha512-bxgmAgA3RzBGA0GyTwS2CC1c+QjkJJq9hC+S6PSOWELGRiTbwDN3MANksFXLjntkTa0N5fOnL27vBHtMStURqw==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.15.3.tgz", + "integrity": "sha512-UxqnTEEAKrL+wFQeSyC9z0mgyUUVRS2WTcVFoLZCE6/Xus9F53S4bl7VKFadjmqI4GpDk5Oe2IOUc72o129jWg==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extension-list": "^3.19.0" + "@tiptap/extension-list": "^3.15.3" } }, "node_modules/@tiptap/extension-mention": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-mention/-/extension-mention-3.19.0.tgz", - "integrity": "sha512-iBWX6mUouvDe9F75C2fJnFzvBFYVF8fcOa7UvzqWHRSCt8WxqSIp6C1B9Y0npP4TbIZySHzPV4NQQJhtmWwKww==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-mention/-/extension-mention-3.15.3.tgz", + "integrity": "sha512-4YpwiQyumKZrlfiw4ExDzrDRarC4kkaC7RjEl4kYhzutID1Zy1WLES1B0CoZN9wRds/mjrQjfCFE5HE+2g3D6w==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0", - "@tiptap/pm": "^3.19.0", - "@tiptap/suggestion": "^3.19.0" + "@tiptap/core": "^3.15.3", + "@tiptap/pm": "^3.15.3", + "@tiptap/suggestion": "^3.15.3" } }, "node_modules/@tiptap/extension-ordered-list": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.19.0.tgz", - "integrity": "sha512-cxGsINquwHYE1kmhAcLNLHAofmoDEG6jbesR5ybl7tU5JwtKVO7S/xZatll2DU1dsDAXWPWEeeMl4e/9svYjCg==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.15.3.tgz", + "integrity": "sha512-/8uhw528Iy0c9wF6tHCiIn0ToM0Ml6Ll2c/3iPRnKr4IjXwx2Lr994stUFihb+oqGZwV1J8CPcZJ4Ufpdqi4Dw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extension-list": "^3.19.0" + "@tiptap/extension-list": "^3.15.3" } }, "node_modules/@tiptap/extension-paragraph": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.19.0.tgz", - "integrity": "sha512-xWa6gj82l5+AzdYyrSk9P4ynySaDzg/SlR1FarXE5yPXibYzpS95IWaVR0m2Qaz7Rrk+IiYOTGxGRxcHLOelNg==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.15.3.tgz", + "integrity": "sha512-lc0Qu/1AgzcEfS67NJMj5tSHHhH6NtA6uUpvppEKGsvJwgE2wKG1onE4isrVXmcGRdxSMiCtyTDemPNMu6/ozQ==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0" + "@tiptap/core": "^3.15.3" } }, "node_modules/@tiptap/extension-placeholder": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-3.19.0.tgz", - "integrity": "sha512-i15OfgyI4IDCYAcYSKUMnuZkYuUInfanjf9zquH8J2BETiomf/jZldVCp/QycMJ8DOXZ38fXDc99wOygnSNySg==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-3.15.3.tgz", + "integrity": "sha512-XcHHnojT186hKIoOgcPBesXk89+caNGVUdMtc171Vcr/5s0dpnr4q5LfE+YRC+S85CpCxCRRnh84Ou+XRtOqrw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/extensions": "^3.19.0" + "@tiptap/extensions": "^3.15.3" } }, "node_modules/@tiptap/extension-strike": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.19.0.tgz", - "integrity": "sha512-xYpabHsv7PccLUBQaP8AYiFCnYbx6P93RHPd0lgNwhdOjYFd931Zy38RyoxPHAgbYVmhf1iyx7lpuLtBnhS5dA==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.15.3.tgz", + "integrity": "sha512-Y1P3eGNY7RxQs2BcR6NfLo9VfEOplXXHAqkOM88oowWWOE7dMNeFFZM9H8HNxoQgXJ7H0aWW9B7ZTWM9hWli2Q==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0" + "@tiptap/core": "^3.15.3" } }, "node_modules/@tiptap/extension-text": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.19.0.tgz", - "integrity": "sha512-K95+SnbZy0h6hNFtfy23n8t/nOcTFEf69In9TSFVVmwn/Nwlke+IfiESAkqbt1/7sKJeegRXYO7WzFEmFl9Q/g==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.15.3.tgz", + "integrity": "sha512-MhkBz8ZvrqOKtKNp+ZWISKkLUlTrDR7tbKZc2OnNcUTttL9dz0HwT+cg91GGz19fuo7ttDcfsPV6eVmflvGToA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0" + "@tiptap/core": "^3.15.3" } }, "node_modules/@tiptap/extension-underline": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.19.0.tgz", - "integrity": "sha512-800MGEWfG49j10wQzAFiW/ele1HT04MamcL8iyuPNu7ZbjbGN2yknvdrJlRy7hZlzIrVkZMr/1tz62KN33VHIw==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.15.3.tgz", + "integrity": "sha512-r/IwcNN0W366jGu4Y0n2MiFq9jGa4aopOwtfWO4d+J0DyeS2m7Go3+KwoUqi0wQTiVU74yfi4DF6eRsMQ9/iHQ==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0" + "@tiptap/core": "^3.15.3" } }, "node_modules/@tiptap/extensions": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.19.0.tgz", - "integrity": "sha512-ZmGUhLbMWaGqnJh2Bry+6V4M6gMpUDYo4D1xNux5Gng/E/eYtc+PMxMZ/6F7tNTAuujLBOQKj6D+4SsSm457jw==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.15.3.tgz", + "integrity": "sha512-ycx/BgxR4rc9tf3ZyTdI98Z19yKLFfqM3UN+v42ChuIwkzyr9zyp7kG8dB9xN2lNqrD+5y/HyJobz/VJ7T90gA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0", - "@tiptap/pm": "^3.19.0" + "@tiptap/core": "^3.15.3", + "@tiptap/pm": "^3.15.3" } }, "node_modules/@tiptap/pm": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.19.0.tgz", - "integrity": "sha512-789zcnM4a8OWzvbD2DL31d0wbSm9BVeO/R7PLQwLIGysDI3qzrcclyZ8yhqOEVuvPitRRwYLq+mY14jz7kY4cw==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.15.3.tgz", + "integrity": "sha512-Zm1BaU1TwFi3CQiisxjgnzzIus+q40bBKWLqXf6WEaus8Z6+vo1MT2pU52dBCMIRaW9XNDq3E5cmGtMc1AlveA==", "license": "MIT", "dependencies": { "prosemirror-changeset": "^2.3.0", @@ -8992,9 +8522,9 @@ } }, "node_modules/@tiptap/react": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-3.19.0.tgz", - "integrity": "sha512-GQQMUUXMpNd8tRjc1jDK3tDRXFugJO7C928EqmeBcBzTKDrFIJ3QUoZKEPxUNb6HWhZ2WL7q00fiMzsv4DNSmg==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-3.15.3.tgz", + "integrity": "sha512-XvouB+Hrqw8yFmZLPEh+HWlMeRSjZfHSfWfWuw5d8LSwnxnPeu3Bg/rjHrRrdwb+7FumtzOnNWMorpb/PSOttQ==", "license": "MIT", "dependencies": { "@types/use-sync-external-store": "^0.0.6", @@ -9006,12 +8536,12 @@ "url": "https://github.com/sponsors/ueberdosis" }, "optionalDependencies": { - "@tiptap/extension-bubble-menu": "^3.19.0", - "@tiptap/extension-floating-menu": "^3.19.0" + "@tiptap/extension-bubble-menu": "^3.15.3", + "@tiptap/extension-floating-menu": "^3.15.3" }, "peerDependencies": { - "@tiptap/core": "^3.19.0", - "@tiptap/pm": "^3.19.0", + "@tiptap/core": "^3.15.3", + "@tiptap/pm": "^3.15.3", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", @@ -9019,35 +8549,35 @@ } }, "node_modules/@tiptap/starter-kit": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.19.0.tgz", - "integrity": "sha512-dTCkHEz+Y8ADxX7h+xvl6caAj+3nII/wMB1rTQchSuNKqJTOrzyUsCWm094+IoZmLT738wANE0fRIgziNHs/ug==", - "license": "MIT", - "dependencies": { - "@tiptap/core": "^3.19.0", - "@tiptap/extension-blockquote": "^3.19.0", - "@tiptap/extension-bold": "^3.19.0", - "@tiptap/extension-bullet-list": "^3.19.0", - "@tiptap/extension-code": "^3.19.0", - "@tiptap/extension-code-block": "^3.19.0", - "@tiptap/extension-document": "^3.19.0", - "@tiptap/extension-dropcursor": "^3.19.0", - "@tiptap/extension-gapcursor": "^3.19.0", - "@tiptap/extension-hard-break": "^3.19.0", - "@tiptap/extension-heading": "^3.19.0", - "@tiptap/extension-horizontal-rule": "^3.19.0", - "@tiptap/extension-italic": "^3.19.0", - "@tiptap/extension-link": "^3.19.0", - "@tiptap/extension-list": "^3.19.0", - "@tiptap/extension-list-item": "^3.19.0", - "@tiptap/extension-list-keymap": "^3.19.0", - "@tiptap/extension-ordered-list": "^3.19.0", - "@tiptap/extension-paragraph": "^3.19.0", - "@tiptap/extension-strike": "^3.19.0", - "@tiptap/extension-text": "^3.19.0", - "@tiptap/extension-underline": "^3.19.0", - "@tiptap/extensions": "^3.19.0", - "@tiptap/pm": "^3.19.0" + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.15.3.tgz", + "integrity": "sha512-ia+eQr9Mt1ln2UO+kK4kFTJOrZK4GhvZXFjpCCYuHtco3rhr2fZAIxEEY4cl/vo5VO5WWyPqxhkFeLcoWmNjSw==", + "license": "MIT", + "dependencies": { + "@tiptap/core": "^3.15.3", + "@tiptap/extension-blockquote": "^3.15.3", + "@tiptap/extension-bold": "^3.15.3", + "@tiptap/extension-bullet-list": "^3.15.3", + "@tiptap/extension-code": "^3.15.3", + "@tiptap/extension-code-block": "^3.15.3", + "@tiptap/extension-document": "^3.15.3", + "@tiptap/extension-dropcursor": "^3.15.3", + "@tiptap/extension-gapcursor": "^3.15.3", + "@tiptap/extension-hard-break": "^3.15.3", + "@tiptap/extension-heading": "^3.15.3", + "@tiptap/extension-horizontal-rule": "^3.15.3", + "@tiptap/extension-italic": "^3.15.3", + "@tiptap/extension-link": "^3.15.3", + "@tiptap/extension-list": "^3.15.3", + "@tiptap/extension-list-item": "^3.15.3", + "@tiptap/extension-list-keymap": "^3.15.3", + "@tiptap/extension-ordered-list": "^3.15.3", + "@tiptap/extension-paragraph": "^3.15.3", + "@tiptap/extension-strike": "^3.15.3", + "@tiptap/extension-text": "^3.15.3", + "@tiptap/extension-underline": "^3.15.3", + "@tiptap/extensions": "^3.15.3", + "@tiptap/pm": "^3.15.3" }, "funding": { "type": "github", @@ -9055,17 +8585,17 @@ } }, "node_modules/@tiptap/suggestion": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@tiptap/suggestion/-/suggestion-3.19.0.tgz", - "integrity": "sha512-tUZwMRFqTVPIo566ZmHNRteyZxJy2EE4FA+S3IeIUOOvY6AW0h1imhbpBO7sXV8CeEQvpa+2DWwLvy7L3vmstA==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/@tiptap/suggestion/-/suggestion-3.15.3.tgz", + "integrity": "sha512-+CbaHhPfKUe+fNpUIQaOPhh6xI+xL5jbK1zw++U+CZIRrVAAmHRhO+D0O2HdiE1RK7596y8bRqMiB2CRHF7emA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^3.19.0", - "@tiptap/pm": "^3.19.0" + "@tiptap/core": "^3.15.3", + "@tiptap/pm": "^3.15.3" } }, "node_modules/@types/aria-query": { @@ -9486,6 +9016,7 @@ "version": "22.19.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.1.tgz", "integrity": "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==", + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -9618,17 +9149,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz", - "integrity": "sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.52.0.tgz", + "integrity": "sha512-okqtOgqu2qmZJ5iN4TWlgfF171dZmx2FzdOv2K/ixL2LZWDStL8+JgQerI2sa8eAEfoydG9+0V96m7V+P8yE1Q==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/type-utils": "8.54.0", - "@typescript-eslint/utils": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", + "@typescript-eslint/scope-manager": "8.52.0", + "@typescript-eslint/type-utils": "8.52.0", + "@typescript-eslint/utils": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" @@ -9641,7 +9172,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.54.0", + "@typescript-eslint/parser": "^8.52.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -9657,16 +9188,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.54.0.tgz", - "integrity": "sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.52.0.tgz", + "integrity": "sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", + "@typescript-eslint/scope-manager": "8.52.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0", "debug": "^4.4.3" }, "engines": { @@ -9682,14 +9213,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.54.0.tgz", - "integrity": "sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.52.0.tgz", + "integrity": "sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.54.0", - "@typescript-eslint/types": "^8.54.0", + "@typescript-eslint/tsconfig-utils": "^8.52.0", + "@typescript-eslint/types": "^8.52.0", "debug": "^4.4.3" }, "engines": { @@ -9704,14 +9235,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.54.0.tgz", - "integrity": "sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.52.0.tgz", + "integrity": "sha512-ixxqmmCcc1Nf8S0mS0TkJ/3LKcC8mruYJPOU6Ia2F/zUUR4pApW7LzrpU3JmtePbRUTes9bEqRc1Gg4iyRnDzA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0" + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9722,9 +9253,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz", - "integrity": "sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.52.0.tgz", + "integrity": "sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg==", "dev": true, "license": "MIT", "engines": { @@ -9739,15 +9270,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.54.0.tgz", - "integrity": "sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.52.0.tgz", + "integrity": "sha512-JD3wKBRWglYRQkAtsyGz1AewDu3mTc7NtRjR/ceTyGoPqmdS5oCdx/oZMWD5Zuqmo6/MpsYs0wp6axNt88/2EQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/utils": "8.54.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/utils": "8.52.0", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, @@ -9764,9 +9295,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.54.0.tgz", - "integrity": "sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.52.0.tgz", + "integrity": "sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg==", "dev": true, "license": "MIT", "engines": { @@ -9778,16 +9309,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.54.0.tgz", - "integrity": "sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.52.0.tgz", + "integrity": "sha512-XP3LClsCc0FsTK5/frGjolyADTh3QmsLp6nKd476xNI9CsSsLnmn4f0jrzNoAulmxlmNIpeXuHYeEQv61Q6qeQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.54.0", - "@typescript-eslint/tsconfig-utils": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", + "@typescript-eslint/project-service": "8.52.0", + "@typescript-eslint/tsconfig-utils": "8.52.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0", "debug": "^4.4.3", "minimatch": "^9.0.5", "semver": "^7.7.3", @@ -9845,16 +9376,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.54.0.tgz", - "integrity": "sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.52.0.tgz", + "integrity": "sha512-wYndVMWkweqHpEpwPhwqE2lnD2DxC6WVLupU/DOt/0/v+/+iQbbzO3jOHjmBMnhu0DgLULvOaU4h4pwHYi2oRQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0" + "@typescript-eslint/scope-manager": "8.52.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9869,13 +9400,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz", - "integrity": "sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.52.0.tgz", + "integrity": "sha512-ink3/Zofus34nmBsPjow63FP5M7IGff0RKAgqR6+CFpdk22M7aLwC9gOcLGYqr7MczLPzZVERW9hRog3O4n1sQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", + "@typescript-eslint/types": "8.52.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -9917,9 +9448,9 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, "node_modules/@vitejs/plugin-basic-ssl": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.4.tgz", - "integrity": "sha512-HXciTXN/sDBYWgeAD4V4s0DN0g72x5mlxQhHxtYu3Tt8BLa6MzcJZUyDVFCdtjNs3bfENVHVzOsmooTVuNgAAw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.3.tgz", + "integrity": "sha512-mxZpCH6SjsAFkiVgaclJGTcYIHm2qxw4x2EP/AUlEVqHhk8ojU75thpvTalc5lAvIK3sJjpVxhzYNoLXOuJGKw==", "dev": true, "license": "MIT", "engines": { @@ -9930,16 +9461,16 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.3.tgz", - "integrity": "sha512-NVUnA6gQCl8jfoYqKqQU5Clv0aPw14KkZYCsX6T9Lfu9slI0LOU10OTwFHS/WmptsMMpshNd/1tuWsHQ2Uk+cg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz", + "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.29.0", + "@babel/core": "^7.28.5", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-rc.2", + "@rolldown/pluginutils": "1.0.0-beta.53", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, @@ -9951,17 +9482,18 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.18.tgz", - "integrity": "sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.16.tgz", + "integrity": "sha512-2rNdjEIsPRzsdu6/9Eq0AYAzYdpP6Bx9cje9tL3FE5XzXRQF1fNU9pe/1yE8fCrS0HD+fBtt6gLPh6LI57tX7A==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^1.0.2", - "@vitest/utils": "4.0.18", - "ast-v8-to-istanbul": "^0.3.10", + "@vitest/utils": "4.0.16", + "ast-v8-to-istanbul": "^0.3.8", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.2.0", "magicast": "^0.5.1", "obug": "^2.1.1", @@ -9972,8 +9504,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "4.0.18", - "vitest": "4.0.18" + "@vitest/browser": "4.0.16", + "vitest": "4.0.16" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -9982,16 +9514,16 @@ } }, "node_modules/@vitest/expect": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", - "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.16.tgz", + "integrity": "sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.0.18", - "@vitest/utils": "4.0.18", + "@vitest/spy": "4.0.16", + "@vitest/utils": "4.0.16", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" }, @@ -10000,9 +9532,9 @@ } }, "node_modules/@vitest/expect/node_modules/@vitest/spy": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", - "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.16.tgz", + "integrity": "sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==", "dev": true, "license": "MIT", "funding": { @@ -10010,9 +9542,9 @@ } }, "node_modules/@vitest/expect/node_modules/chai": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", - "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.1.tgz", + "integrity": "sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==", "dev": true, "license": "MIT", "engines": { @@ -10020,22 +9552,22 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.18.tgz", - "integrity": "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.0.18", + "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", - "magic-string": "^0.30.21" + "magic-string": "^0.30.17" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "msw": "^2.4.9", - "vite": "^6.0.0 || ^7.0.0-0" + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "peerDependenciesMeta": { "msw": { @@ -10046,16 +9578,6 @@ } } }, - "node_modules/@vitest/mocker/node_modules/@vitest/spy": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", - "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://opencollective.com/vitest" - } - }, "node_modules/@vitest/mocker/node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", @@ -10067,9 +9589,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", - "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.16.tgz", + "integrity": "sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==", "dev": true, "license": "MIT", "dependencies": { @@ -10080,13 +9602,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.18.tgz", - "integrity": "sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.16.tgz", + "integrity": "sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.18", + "@vitest/utils": "4.0.16", "pathe": "^2.0.3" }, "funding": { @@ -10094,13 +9616,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.18.tgz", - "integrity": "sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.16.tgz", + "integrity": "sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.18", + "@vitest/pretty-format": "4.0.16", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -10122,13 +9644,13 @@ } }, "node_modules/@vitest/utils": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", - "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.16.tgz", + "integrity": "sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.18", + "@vitest/pretty-format": "4.0.16", "tinyrainbow": "^3.0.3" }, "funding": { @@ -10542,22 +10064,22 @@ } }, "node_modules/assistant-cloud": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/assistant-cloud/-/assistant-cloud-0.1.17.tgz", - "integrity": "sha512-CUMr9MWuikURcYFHcMO7avyfe+lkMucM/W795AEre24/+eKutQklOOJj0YiLoUkm+0p3cmlX7tiN2bFACNaQXw==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/assistant-cloud/-/assistant-cloud-0.1.12.tgz", + "integrity": "sha512-A2tY6QIdP9+RkE8Mmpm4kAoO0NyKsKpJKYebbYFZ3bAnQKyB15Bw/PS9AovpdeziGU9At97TyiMrT36pDjCD7A==", "license": "MIT", "dependencies": { - "assistant-stream": "^0.3.2" + "assistant-stream": "^0.2.46" } }, "node_modules/assistant-stream": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/assistant-stream/-/assistant-stream-0.3.2.tgz", - "integrity": "sha512-BVpG6pSORumrEC6zX96KyTyw8RXFTbYElujgGST+SQuCZFgAJnTnBkuru2WyFkQglF/1hl8xXsvlU3hvpHcUsQ==", + "version": "0.2.46", + "resolved": "https://registry.npmjs.org/assistant-stream/-/assistant-stream-0.2.46.tgz", + "integrity": "sha512-smcC4sqOcTrUO01YpiHPgdG3Wc57kmQlCIEdMXSNuWMgcDvo60hnRY3rPDhZQBJHZOXQ9Q1wLR8ugKDjxi72GQ==", "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.1.0", - "nanoid": "^5.1.6", + "nanoid": "5.1.6", "secure-json-parse": "^4.1.0" } }, @@ -10575,9 +10097,9 @@ } }, "node_modules/ast-v8-to-istanbul": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.10.tgz", - "integrity": "sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.8.tgz", + "integrity": "sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10617,9 +10139,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.24", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz", - "integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==", + "version": "10.4.23", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", + "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", "dev": true, "funding": [ { @@ -10638,7 +10160,7 @@ "license": "MIT", "dependencies": { "browserslist": "^4.28.1", - "caniuse-lite": "^1.0.30001766", + "caniuse-lite": "^1.0.30001760", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -11021,9 +10543,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001768", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001768.tgz", - "integrity": "sha512-qY3aDRZC5nWPgHUgIB84WL+nySuo19wk0VJpp/XI9T34lrvkyhRvNVOFJOp2kxClQhiFBu+TaUSudf6oa3vkSA==", + "version": "1.0.30001760", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz", + "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==", "funding": [ { "type": "opencollective", @@ -11686,31 +11208,20 @@ } }, "node_modules/cssstyle": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.7.tgz", - "integrity": "sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.4.tgz", + "integrity": "sha512-KyOS/kJMEq5O9GdPnaf82noigg5X5DYn0kZPJTaAsCUaBizp6Xa1y9D4Qoqf/JazEXWuruErHgVXwjN5391ZJw==", "dev": true, "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^4.1.1", - "@csstools/css-syntax-patches-for-csstree": "^1.0.21", - "css-tree": "^3.1.0", - "lru-cache": "^11.2.4" + "@asamuzakjp/css-color": "^4.1.0", + "@csstools/css-syntax-patches-for-csstree": "1.0.14", + "css-tree": "^3.1.0" }, "engines": { "node": ">=20" } }, - "node_modules/cssstyle/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, "node_modules/csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", @@ -11839,25 +11350,15 @@ } }, "node_modules/data-urls": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", - "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-6.0.0.tgz", + "integrity": "sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==", "dev": true, "license": "MIT", "dependencies": { - "whatwg-mimetype": "^5.0.0", - "whatwg-url": "^16.0.0" + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^15.0.0" }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - } - }, - "node_modules/data-urls/node_modules/whatwg-mimetype": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", - "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", - "dev": true, - "license": "MIT", "engines": { "node": ">=20" } @@ -12167,9 +11668,9 @@ "dev": true }, "node_modules/diff": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", - "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -13125,14 +12626,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.5.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", - "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", + "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.1", - "synckit": "^0.11.12" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.7" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -13253,17 +12754,17 @@ } }, "node_modules/eslint-plugin-storybook": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-10.2.7.tgz", - "integrity": "sha512-111gI3lUuan/zfDZ79isC4YZ75A9Ro7knqa2lNHv9PQRBWGKe6gvH2gDCYMioqT8aZo7UTzXfsyW7HHlEWxpQA==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-10.1.11.tgz", + "integrity": "sha512-mbq2r2kK5+AcLl0XDJ3to91JOgzCbHOqj+J3n+FRw6drk+M1boRqMShSoMMm0HdzXPLmlr7iur+qJ5ZuhH6ayQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^8.48.0" + "@typescript-eslint/utils": "^8.8.1" }, "peerDependencies": { "eslint": ">=8", - "storybook": "^10.2.7" + "storybook": "^10.1.11" } }, "node_modules/eslint-plugin-tailwindcss": { @@ -13471,8 +12972,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" + "dev": true }, "node_modules/fast-equals": { "version": "5.4.0", @@ -13803,13 +13303,13 @@ } }, "node_modules/framer-motion": { - "version": "12.33.0", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.33.0.tgz", - "integrity": "sha512-ca8d+rRPcDP5iIF+MoT3WNc0KHJMjIyFAbtVLvM9eA7joGSpeqDfiNH/kCs1t4CHi04njYvWyj0jS4QlEK/rJQ==", + "version": "12.25.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.25.0.tgz", + "integrity": "sha512-mlWqd0rApIjeyhTCSNCqPYsUAEhkcUukZxH3ke6KbstBRPcxhEpuIjmiUQvB+1E9xkEm5SpNHBgHCapH/QHTWg==", "license": "MIT", "dependencies": { - "motion-dom": "^12.33.0", - "motion-utils": "^12.29.2", + "motion-dom": "^12.24.11", + "motion-utils": "^12.24.10", "tslib": "^2.4.0" }, "peerDependencies": { @@ -14029,9 +13529,9 @@ } }, "node_modules/globals": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.3.0.tgz", - "integrity": "sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.0.0.tgz", + "integrity": "sha512-gv5BeD2EssA793rlFWVPMMCqefTlpusw6/2TbAVMy0FzcG8wKJn4O+NqJ4+XWmmwrayJgw5TzrmWjFgmz1XPqw==", "dev": true, "license": "MIT", "engines": { @@ -15444,6 +14944,20 @@ "node": ">=10" } }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/istanbul-reports": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", @@ -15654,17 +15168,17 @@ } }, "node_modules/jsdom": { - "version": "28.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.0.0.tgz", - "integrity": "sha512-KDYJgZ6T2TKdU8yBfYueq5EPG/EylMsBvCaenWMJb2OXmjgczzwveRCoJ+Hgj1lXPDyasvrgneSn4GBuR1hYyA==", + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-27.4.0.tgz", + "integrity": "sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ==", "dev": true, "license": "MIT", "dependencies": { - "@acemir/cssom": "^0.9.31", + "@acemir/cssom": "^0.9.28", "@asamuzakjp/dom-selector": "^6.7.6", - "@exodus/bytes": "^1.11.0", - "cssstyle": "^5.3.7", - "data-urls": "^7.0.0", + "@exodus/bytes": "^1.6.0", + "cssstyle": "^5.3.4", + "data-urls": "^6.0.0", "decimal.js": "^10.6.0", "html-encoding-sniffer": "^6.0.0", "http-proxy-agent": "^7.0.2", @@ -15674,11 +15188,11 @@ "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^6.0.0", - "undici": "^7.20.0", "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^8.0.1", - "whatwg-mimetype": "^5.0.0", - "whatwg-url": "^16.0.0", + "webidl-conversions": "^8.0.0", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^15.1.0", + "ws": "^8.18.3", "xml-name-validator": "^5.0.0" }, "engines": { @@ -15693,16 +15207,6 @@ } } }, - "node_modules/jsdom/node_modules/whatwg-mimetype": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", - "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - } - }, "node_modules/jsesc": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", @@ -16025,11 +15529,10 @@ } }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "dev": true, - "license": "MIT" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash.curry": { "version": "4.1.1", @@ -16176,12 +15679,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0" - }, "node_modules/longest-streak": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", @@ -16238,9 +15735,9 @@ } }, "node_modules/lucide-react": { - "version": "0.563.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.563.0.tgz", - "integrity": "sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==", + "version": "0.562.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.562.0.tgz", + "integrity": "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==", "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -17576,12 +17073,12 @@ "license": "BSD-3-Clause" }, "node_modules/motion": { - "version": "12.33.0", - "resolved": "https://registry.npmjs.org/motion/-/motion-12.33.0.tgz", - "integrity": "sha512-TcND7PijsrTeIA9SRVUB8TOJQ+6mJnJ5K4a9oAJZvyI0Zy47Gq5oofU+VkTxbLcvDoKXnHspQcII2mnk3TbFsQ==", + "version": "12.25.0", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.25.0.tgz", + "integrity": "sha512-jBFohEYklpZ+TL64zv03sHdqr1Tsc8/yDy7u68hVzi7hTJYtv53AduchqCiY3aWi4vY1hweS8DWtgCuckusYdQ==", "license": "MIT", "dependencies": { - "framer-motion": "^12.33.0", + "framer-motion": "^12.25.0", "tslib": "^2.4.0" }, "peerDependencies": { @@ -17602,18 +17099,18 @@ } }, "node_modules/motion-dom": { - "version": "12.33.0", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.33.0.tgz", - "integrity": "sha512-XRPebVypsl0UM+7v0Hr8o9UAj0S2djsQWRdHBd5iVouVpMrQqAI0C/rDAT3QaYnXnHuC5hMcwDHCboNeyYjPoQ==", + "version": "12.24.11", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.24.11.tgz", + "integrity": "sha512-DlWOmsXMJrV8lzZyd+LKjG2CXULUs++bkq8GZ2Sr0R0RRhs30K2wtY+LKiTjhmJU3W61HK+rB0GLz6XmPvTA1A==", "license": "MIT", "dependencies": { - "motion-utils": "^12.29.2" + "motion-utils": "^12.24.10" } }, "node_modules/motion-utils": { - "version": "12.29.2", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.29.2.tgz", - "integrity": "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==", + "version": "12.24.10", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.24.10.tgz", + "integrity": "sha512-x5TFgkCIP4pPsRLpKoI86jv/q8t8FQOiM/0E8QKBzfMozWHfkKap2gA1hOki+B5g3IsBNpxbUnfOum1+dgvYww==", "license": "MIT" }, "node_modules/ms": { @@ -17622,15 +17119,15 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/msw": { - "version": "2.12.9", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.12.9.tgz", - "integrity": "sha512-NYbi51C6M3dujGmcmuGemu68jy12KqQPoVWGeroKToLGsBgrwG5ErM8WctoIIg49/EV49SEvYM9WSqO4G7kNeQ==", + "version": "2.12.7", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.12.7.tgz", + "integrity": "sha512-retd5i3xCZDVWMYjHEVuKTmhqY8lSsxujjVrZiGbbdoxxIBg5S7rCuYy/YQpfrTYIxpd/o0Kyb/3H+1udBMoYg==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { "@inquirer/confirm": "^5.0.0", - "@mswjs/interceptors": "^0.41.2", + "@mswjs/interceptors": "^0.40.0", "@open-draft/deferred-promise": "^2.2.0", "@types/statuses": "^2.0.6", "cookie": "^1.0.2", @@ -17640,7 +17137,7 @@ "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", "picocolors": "^1.1.1", - "rettime": "^0.10.1", + "rettime": "^0.7.0", "statuses": "^2.0.2", "strict-event-emitter": "^0.5.1", "tough-cookie": "^6.0.0", @@ -18678,13 +18175,13 @@ } }, "node_modules/playwright": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", - "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", + "version": "1.57.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz", + "integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.58.2" + "playwright-core": "1.57.0" }, "bin": { "playwright": "cli.js" @@ -18697,9 +18194,9 @@ } }, "node_modules/playwright-core": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", - "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", + "version": "1.57.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0.tgz", + "integrity": "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -18914,40 +18411,23 @@ } }, "node_modules/posthog-js": { - "version": "1.342.1", - "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.342.1.tgz", - "integrity": "sha512-mMnQhWuKj4ejFicLtFzr52InmqploOyW1eInqXBkaVqE1DPhczBDmwsd9MSggY8kv0EXm8zgK+2tzBJUKcX5yg==", + "version": "1.316.1", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.316.1.tgz", + "integrity": "sha512-4B0PHnMZwjV9aoQRQ5OqrPa40aCVlqRx1aZMCZCbZ4Z7c91bpOJDpENGGyxFvjUoNN+f8MP8LHZBdn5DPQyWTg==", "license": "SEE LICENSE IN LICENSE", "dependencies": { - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/api-logs": "^0.208.0", - "@opentelemetry/exporter-logs-otlp-http": "^0.208.0", - "@opentelemetry/resources": "^2.2.0", - "@opentelemetry/sdk-logs": "^0.208.0", - "@posthog/core": "1.20.1", - "@posthog/types": "1.342.1", + "@posthog/core": "1.9.1", + "@posthog/types": "1.316.1", "core-js": "^3.38.1", - "dompurify": "^3.3.1", "fflate": "^0.4.8", - "preact": "^10.28.2", - "query-selector-shadow-dom": "^1.0.1", - "web-vitals": "^5.1.0" - } - }, - "node_modules/posthog-js/node_modules/dompurify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz", - "integrity": "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==", - "license": "(MPL-2.0 OR Apache-2.0)", - "optionalDependencies": { - "@types/trusted-types": "^2.0.7" + "preact": "^10.19.3", + "web-vitals": "^4.2.4" } }, "node_modules/preact": { - "version": "10.28.2", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.28.2.tgz", - "integrity": "sha512-lbteaWGzGHdlIuiJ0l2Jq454m6kcpI1zNje6d8MlGAFlYvP2GO4ibnat7P74Esfz4sPTdM6UxtTwh/d3pwM9JA==", - "license": "MIT", + "version": "10.24.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.24.1.tgz", + "integrity": "sha512-PnBAwFI3Yjxxcxw75n6VId/5TFxNW/81zexzWD9jn1+eSrOP84NdsS38H5IkF/UH3frqRPT+MvuCoVHjTDTnDw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -18963,9 +18443,9 @@ } }, "node_modules/prettier": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", - "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", + "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" @@ -18978,11 +18458,10 @@ } }, "node_modules/prettier-linter-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", - "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, - "license": "MIT", "dependencies": { "fast-diff": "^1.1.2" }, @@ -19321,30 +18800,6 @@ "prosemirror-transform": "^1.1.0" } }, - "node_modules/protobufjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", - "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/pseudolocale": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/pseudolocale/-/pseudolocale-2.2.0.tgz", @@ -19394,12 +18849,6 @@ "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" }, - "node_modules/query-selector-shadow-dom": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz", - "integrity": "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==", - "license": "MIT" - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -19585,29 +19034,6 @@ } } }, - "node_modules/radix-ui/node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -19619,9 +19045,9 @@ } }, "node_modules/react": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -19649,9 +19075,9 @@ } }, "node_modules/react-day-picker": { - "version": "9.13.1", - "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.13.1.tgz", - "integrity": "sha512-9nx2lBBJ0VZw5jJekId3DishwnJLiqY1Me1JvCrIyqbWwcflBTVaEkiK+w1bre5oMNWYo722eu+8UAMXWMqktw==", + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.13.0.tgz", + "integrity": "sha512-euzj5Hlq+lOHqI53NiuNhCP8HWgsPf/bBAVijR50hNaY1XwjKjShAnIe8jm8RD2W9IJUvihDIZ+KrmqfFzNhFQ==", "license": "MIT", "dependencies": { "@date-fns/tz": "^1.4.1", @@ -19715,15 +19141,15 @@ } }, "node_modules/react-dom": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", - "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.4" + "react": "^19.2.3" } }, "node_modules/react-error-boundary": { @@ -19770,9 +19196,9 @@ } }, "node_modules/react-hook-form": { - "version": "7.71.1", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.71.1.tgz", - "integrity": "sha512-9SUJKCGKo8HUSsCO+y0CtqkqI5nNuaDqTxyqPsZPqIwudpj4rCrAz/jZV+jn57bx5gtZKOh3neQu94DXMc+w5w==", + "version": "7.70.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.70.0.tgz", + "integrity": "sha512-COOMajS4FI3Wuwrs3GPpi/Jeef/5W1DRR84Yl5/ShlT3dKVFUfoGiEZ/QE6Uw8P4T2/CLJdcTVYKvWBMQTEpvw==", "license": "MIT", "engines": { "node": ">=18.0.0" @@ -19917,9 +19343,9 @@ } }, "node_modules/react-router": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.0.tgz", - "integrity": "sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.12.0.tgz", + "integrity": "sha512-kTPDYPFzDVGIIGNLS5VJykK0HfHLY5MF3b+xj0/tTyNYL1gF1qs7u67Z9jEhQk2sQ98SUaHxlG31g1JtF7IfVw==", "license": "MIT", "dependencies": { "cookie": "^1.0.1", @@ -19939,12 +19365,12 @@ } }, "node_modules/react-router-dom": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.13.0.tgz", - "integrity": "sha512-5CO/l5Yahi2SKC6rGZ+HDEjpjkGaG/ncEP7eWFTvFxbHP8yeeI0PxTDjimtpXYlR3b3i9/WIL4VJttPrESIf2g==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.12.0.tgz", + "integrity": "sha512-pfO9fiBcpEfX4Tx+iTYKDtPbrSLLCbwJ5EqP+SPYQu1VYCXdy79GSj0wttR0U4cikVdlImZuEZ/9ZNCgoaxwBA==", "license": "MIT", "dependencies": { - "react-router": "7.13.0" + "react-router": "7.12.0" }, "engines": { "node": ">=20.0.0" @@ -20417,9 +19843,9 @@ } }, "node_modules/rettime": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/rettime/-/rettime-0.10.1.tgz", - "integrity": "sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rettime/-/rettime-0.7.0.tgz", + "integrity": "sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==", "dev": true, "license": "MIT" }, @@ -21065,14 +20491,14 @@ "license": "MIT" }, "node_modules/storybook": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.7.tgz", - "integrity": "sha512-LFKSuZyF6EW2/Kkl5d7CvqgwhXXfuWv+aLBuoc616boLKJ3mxXuea+GxIgfk02NEyTKctJ0QsnSh5pAomf6Qkg==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.1.11.tgz", + "integrity": "sha512-pKP5jXJYM4OjvNklGuHKO53wOCAwfx79KvZyOWHoi9zXUH5WVMFUe/ZfWyxXG/GTcj0maRgHGUjq/0I43r0dDQ==", "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/icons": "^2.0.1", + "@storybook/icons": "^2.0.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/user-event": "^14.6.1", "@vitest/expect": "3.2.4", @@ -21080,7 +20506,7 @@ "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 || ^0.26.0 || ^0.27.0", "open": "^10.2.0", "recast": "^0.23.5", - "semver": "^7.7.3", + "semver": "^7.6.2", "use-sync-external-store": "^1.5.0", "ws": "^8.18.0" }, @@ -21146,9 +20572,9 @@ } }, "node_modules/storybook/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", "bin": { @@ -21561,13 +20987,13 @@ } }, "node_modules/synckit": { - "version": "0.11.12", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", - "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz", + "integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.2.9" + "@pkgr/core": "^0.2.4" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -22144,16 +21570,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.54.0.tgz", - "integrity": "sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.52.0.tgz", + "integrity": "sha512-atlQQJ2YkO4pfTVQmQ+wvYQwexPDOIgo+RaVcD7gHgzy/IQA+XTyuxNM9M9TVXvttkF7koBHmcwisKdOAf2EcA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.54.0", - "@typescript-eslint/parser": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/utils": "8.54.0" + "@typescript-eslint/eslint-plugin": "8.52.0", + "@typescript-eslint/parser": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/utils": "8.52.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -22220,20 +21646,11 @@ "node": ">=0.10.0" } }, - "node_modules/undici": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.20.0.tgz", - "integrity": "sha512-MJZrkjyd7DeC+uPZh+5/YaMDxFiiEEaDgbUSVMXayofAkDWF1088CDo+2RPg7B1BuS1qf1vgNE7xqwPxE0DuSQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.18.1" - } - }, "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" }, "node_modules/unified": { @@ -22510,15 +21927,6 @@ "react": "*" } }, - "node_modules/use-effect-event": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/use-effect-event/-/use-effect-event-2.0.3.tgz", - "integrity": "sha512-fz1en+z3fYXCXx3nMB8hXDMuygBltifNKZq29zDx+xNJ+1vEs6oJlYd9sK31vxJ0YI534VUsHEBY0k2BATsmBQ==", - "license": "MIT", - "peerDependencies": { - "react": "^18.3 || ^19.0.0-0" - } - }, "node_modules/use-isomorphic-layout-effect": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.0.tgz", @@ -22715,9 +22123,9 @@ } }, "node_modules/vite-bundle-analyzer": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/vite-bundle-analyzer/-/vite-bundle-analyzer-1.3.6.tgz", - "integrity": "sha512-elFXkF9oGy4CJEeOdP1DSEHRDKWfmaEDfT9/GuF4jmyfmUF6nC//iN+ythqMEVvrtchOEHGKLumZwnu1NjoI0w==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/vite-bundle-analyzer/-/vite-bundle-analyzer-1.3.2.tgz", + "integrity": "sha512-Od4ILUKRvBV3LuO/E+S+c1XULlxdkRZPSf6Vzzu+UAXG0D3hZYUu9imZIkSj/PU4e1FB14yB+av8g3KiljH8zQ==", "dev": true, "license": "MIT", "bin": { @@ -22739,9 +22147,9 @@ } }, "node_modules/vite-tsconfig-paths": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-6.1.0.tgz", - "integrity": "sha512-kpd3sY9glHIDaq4V/Tlc1Y8WaKtutoc3B525GHxEVKWX42FKfQsXvjFOemu1I8VIN8pNbrMLWVTbW79JaRUxKg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-6.0.3.tgz", + "integrity": "sha512-7bL7FPX/DSviaZGYUKowWF1AiDVWjMjxNbE8lyaVGDezkedWqfGhlnQ4BZXre0ZN5P4kAgIJfAlgFDVyjrCIyg==", "dev": true, "license": "MIT", "dependencies": { @@ -22751,6 +22159,11 @@ }, "peerDependencies": { "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } } }, "node_modules/vite/node_modules/@esbuild/aix-ppc64": { @@ -23234,19 +22647,19 @@ } }, "node_modules/vitest": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz", - "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.16.tgz", + "integrity": "sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.0.18", - "@vitest/mocker": "4.0.18", - "@vitest/pretty-format": "4.0.18", - "@vitest/runner": "4.0.18", - "@vitest/snapshot": "4.0.18", - "@vitest/spy": "4.0.18", - "@vitest/utils": "4.0.18", + "@vitest/expect": "4.0.16", + "@vitest/mocker": "4.0.16", + "@vitest/pretty-format": "4.0.16", + "@vitest/runner": "4.0.16", + "@vitest/snapshot": "4.0.16", + "@vitest/spy": "4.0.16", + "@vitest/utils": "4.0.16", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", @@ -23274,10 +22687,10 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.0.18", - "@vitest/browser-preview": "4.0.18", - "@vitest/browser-webdriverio": "4.0.18", - "@vitest/ui": "4.0.18", + "@vitest/browser-playwright": "4.0.16", + "@vitest/browser-preview": "4.0.16", + "@vitest/browser-webdriverio": "4.0.16", + "@vitest/ui": "4.0.16", "happy-dom": "*", "jsdom": "*" }, @@ -23311,16 +22724,53 @@ } } }, + "node_modules/vitest/node_modules/@vitest/mocker": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.16.tgz", + "integrity": "sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.0.16", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, "node_modules/vitest/node_modules/@vitest/spy": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", - "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.16.tgz", + "integrity": "sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==", "dev": true, "license": "MIT", "funding": { "url": "https://opencollective.com/vitest" } }, + "node_modules/vitest/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/vitest/node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", @@ -23405,15 +22855,15 @@ } }, "node_modules/web-vitals": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-5.1.0.tgz", - "integrity": "sha512-ArI3kx5jI0atlTtmV0fWU3fjpLmq/nD3Zr1iFFlJLaqa5wLBkUSzINwBPySCX/8jRyjlmy1Volw1kz1g9XE4Jg==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz", + "integrity": "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==", "license": "Apache-2.0" }, "node_modules/webidl-conversions": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", - "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.0.tgz", + "integrity": "sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -23442,18 +22892,17 @@ } }, "node_modules/whatwg-url": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.0.tgz", - "integrity": "sha512-9CcxtEKsf53UFwkSUZjG+9vydAsFO4lFHBpJUtjBcoJOCJpKnSJNwCw813zrYJHpCJ7sgfbtOe0V5Ku7Pa1XMQ==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-15.1.0.tgz", + "integrity": "sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==", "dev": true, "license": "MIT", "dependencies": { - "@exodus/bytes": "^1.11.0", "tr46": "^6.0.0", - "webidl-conversions": "^8.0.1" + "webidl-conversions": "^8.0.0" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "node": ">=20" } }, "node_modules/which": { @@ -23819,9 +23268,9 @@ } }, "node_modules/zod": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", - "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", + "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -23841,9 +23290,9 @@ } }, "node_modules/zustand": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.11.tgz", - "integrity": "sha512-fdZY+dk7zn/vbWNCYmzZULHRrss0jx5pPFiOuMZ/5HJN6Yv3u+1Wswy/4MpZEkEGhtNH+pwxZB8OKgUBPzYAGg==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.9.tgz", + "integrity": "sha512-ALBtUj0AfjJt3uNRQoL1tL2tMvj6Gp/6e39dnfT6uzpelGru8v1tPOGBzayOWbPJvujM8JojDk3E1LxeFisBNg==", "license": "MIT", "engines": { "node": ">=12.20.0" diff --git a/client/package.json b/client/package.json index 23e91cc4bc2..69416aefb22 100644 --- a/client/package.json +++ b/client/package.json @@ -44,18 +44,17 @@ "build-storybook": "storybook build" }, "dependencies": { - "@ag-ui/client": "^0.0.44", - "@ag-ui/core": "^0.0.44", - "@assistant-ui/react": "^0.12.9", - "@assistant-ui/react-markdown": "^0.12.3", + "@ag-ui/client": "^0.0.42", + "@ag-ui/core": "^0.0.42", + "@assistant-ui/react": "^0.11.53", + "@assistant-ui/react-markdown": "^0.11.9", "@hookform/resolvers": "^5.2.2", - "@lingui/core": "^5.9.0", - "@lingui/react": "^5.9.0", + "@lingui/core": "^5.7.0", + "@lingui/react": "^5.7.0", "@monaco-editor/react": "^4.7.0", "@radix-ui/colors": "^3.0.0", "@radix-ui/react-aspect-ratio": "^1.1.8", "@radix-ui/react-context-menu": "^2.2.16", - "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-icons": "^1.3.2", "@radix-ui/react-menubar": "^1.1.16", "@radix-ui/react-navigation-menu": "^1.2.14", @@ -63,22 +62,21 @@ "@radix-ui/react-separator": "^1.1.8", "@radix-ui/react-slider": "^1.3.6", "@radix-ui/react-slot": "^1.2.4", - "@radix-ui/react-toggle": "^1.1.10", - "@radix-ui/react-visually-hidden": "^1.2.4", - "@tanstack/react-query": "^5.90.20", - "@tanstack/react-query-devtools": "^5.91.3", + "@radix-ui/react-toggle-group": "^1.1.11", + "@tanstack/react-query": "^5.90.16", + "@tanstack/react-query-devtools": "^5.91.2", "@tanstack/react-table": "^8.21.3", "@testing-library/dom": "^10.4.1", "@testing-library/user-event": "^14.6.1", - "@tiptap/extension-document": "3.19.0", - "@tiptap/extension-mention": "3.19.0", - "@tiptap/extension-paragraph": "3.19.0", - "@tiptap/extension-placeholder": "3.19.0", - "@tiptap/extension-text": "3.19.0", - "@tiptap/pm": "3.19.0", - "@tiptap/react": "3.19.0", - "@tiptap/starter-kit": "3.19.0", - "@tiptap/suggestion": "3.19.0", + "@tiptap/extension-document": "3.15.3", + "@tiptap/extension-mention": "3.15.3", + "@tiptap/extension-paragraph": "3.15.3", + "@tiptap/extension-placeholder": "3.15.3", + "@tiptap/extension-text": "3.15.3", + "@tiptap/pm": "3.15.3", + "@tiptap/react": "3.15.3", + "@tiptap/starter-kit": "3.15.3", + "@tiptap/suggestion": "3.15.3", "@types/d3": "^7.4.3", "@types/sanitize-html": "^2.16.0", "@uidotdev/usehooks": "^2.4.1", @@ -92,22 +90,22 @@ "date-fns": "^4.1.0", "fetch-intercept": "^2.4.0", "html-entities": "^2.6.0", - "lucide-react": "^0.563.0", + "lucide-react": "^0.562.0", "monaco-editor": "^0.55.1", "monaco-yaml": "^5.4.0", - "motion": "^12.33.0", - "posthog-js": "^1.342.1", + "motion": "^12.25.0", + "posthog-js": "^1.316.1", "radix-ui": "^1.4.3", - "react": "^19.2.4", + "react": "^19.2.3", + "react-day-picker": "^9.13.0", + "react-dom": "^19.2.3", "react-data-grid": "^7.0.0-beta.59", - "react-day-picker": "^9.13.1", - "react-dom": "^19.2.4", "react-helmet-async": "^2.0.5", - "react-hook-form": "^7.71.1", + "react-hook-form": "^7.70.0", "react-inlinesvg": "^4.2.0", "react-json-view": "^1.21.3", "react-resizable-panels": "^3.0.6", - "react-router-dom": "^7.13.0", + "react-router-dom": "^7.12.0", "react-select": "^5.10.2", "react-shiki": "^0.9.1", "react-textarea-autosize": "^8.5.9", @@ -120,69 +118,69 @@ "use-debounce": "^10.1.0", "vite-plugin-svgr": "^4.5.0", "whatwg-fetch": "^3.6.20", - "zod": "^4.3.6", - "zustand": "^5.0.11" + "zod": "^4.3.5", + "zustand": "^5.0.9" }, "devDependencies": { - "@chromatic-com/storybook": "^5.0.0", + "@chromatic-com/storybook": "^4.1.3", "@dagrejs/dagre": "^1.1.8", "@eslint/eslintrc": "^3.3.3", "@eslint/js": "9.39.2", - "@graphql-codegen/cli": "^6.1.1", + "@graphql-codegen/cli": "^6.1.0", "@graphql-codegen/typescript-react-query": "^6.1.1", - "@lingui/babel-plugin-lingui-macro": "^5.9.0", - "@lingui/cli": "^5.9.0", - "@lingui/macro": "^5.9.0", - "@lingui/vite-plugin": "^5.9.0", - "@playwright/test": "^1.58.2", - "@storybook/addon-docs": "^10.2.7", - "@storybook/addon-links": "^10.2.7", - "@storybook/addon-onboarding": "^10.2.7", - "@storybook/react-vite": "^10.2.7", + "@lingui/babel-plugin-lingui-macro": "^5.7.0", + "@lingui/cli": "^5.7.0", + "@lingui/macro": "^5.7.0", + "@lingui/vite-plugin": "^5.7.0", + "@storybook/addon-docs": "^10.1.11", + "@storybook/addon-links": "^10.1.11", + "@storybook/addon-onboarding": "^10.1.11", + "@storybook/react-vite": "^10.1.11", "@tailwindcss/forms": "^0.5.11", "@tailwindcss/line-clamp": "^0.4.4", "@tailwindcss/typography": "^0.5.19", - "@tanstack/eslint-plugin-query": "^5.91.4", + "@tanstack/eslint-plugin-query": "^5.91.2", "@testing-library/jest-dom": "^6.9.1", - "@testing-library/react": "^16.3.2", + "@testing-library/react": "^16.3.1", "@testing-library/react-hooks": "^8.0.1", "@types/node": "^22.19.1", "@types/react-dom": "^19.2.3", "@types/sanitize-html": "^2.16.0", - "@typescript-eslint/eslint-plugin": "^8.54.0", - "@typescript-eslint/parser": "^8.54.0", - "@vitejs/plugin-basic-ssl": "^2.1.4", - "@vitejs/plugin-react": "^5.1.3", - "@vitest/coverage-v8": "^4.0.18", - "autoprefixer": "^10.4.24", + "@typescript-eslint/eslint-plugin": "^8.52.0", + "@typescript-eslint/parser": "^8.52.0", + "@vitejs/plugin-basic-ssl": "^2.1.3", + "@vitejs/plugin-react": "^5.1.2", + "@vitest/coverage-v8": "^4.0.16", + "autoprefixer": "^10.4.23", "eslint": "9.39.2", "eslint-config-prettier": "^10.1.8", "eslint-plugin-bytechef": "file:eslint", "eslint-plugin-lingui": "^0.11.0", - "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-prettier": "^5.5.4", "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-sort-destructure-keys": "^2.0.0", - "eslint-plugin-storybook": "^10.2.7", + "eslint-plugin-storybook": "^10.1.11", "eslint-plugin-tailwindcss": "^3.18.2", - "globals": "^17.3.0", + "globals": "^17.0.0", "identity-obj-proxy": "^3.0.0", "isobject": "^4.0.0", - "jsdom": "^28.0.0", - "msw": "^2.12.9", + "jsdom": "^27.4.0", + "msw": "^2.12.7", "object-resolve-path": "^1.1.1", "postcss": "^8.5.6", - "prettier": "3.8.1", + "prettier": "3.7.4", "prettier-plugin-tailwindcss": "^0.7.2", "react-fast-compare": "^3.2.2", - "storybook": "^10.2.7", + "storybook": "^10.1.11", "tailwindcss": "^3.4.17", "typescript": "^5.9.3", - "typescript-eslint": "^8.54.0", + "typescript-eslint": "^8.52.0", "vite": "^7.3.1", - "vite-bundle-analyzer": "^1.3.6", - "vite-tsconfig-paths": "^6.1.0", - "vitest": "^4.0.18" + "vite-bundle-analyzer": "^1.3.2", + "vite-tsconfig-paths": "^6.0.3", + "vitest": "^4.0.16", + "@playwright/test": "^1.57.0" }, "msw": { "workerDirectory": "public" diff --git a/client/public/mockServiceWorker.js b/client/public/mockServiceWorker.js index 85e90101233..461e2600ebd 100644 --- a/client/public/mockServiceWorker.js +++ b/client/public/mockServiceWorker.js @@ -7,7 +7,7 @@ * - Please do NOT modify this file. */ -const PACKAGE_VERSION = '2.12.9' +const PACKAGE_VERSION = '2.12.7' const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82' const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') const activeClientIds = new Set() diff --git a/client/public/oauth.html b/client/public/oauth.html index 96c38e9e4b0..fec98b271c6 100644 --- a/client/public/oauth.html +++ b/client/public/oauth.html @@ -31,8 +31,6 @@

Safe content

'; - const {wrapper} = createMockForm(); - - render(, {wrapper}); - - expect(screen.getByText('Safe content')).toBeInTheDocument(); - expect(screen.queryByText('alert("xss")')).not.toBeInTheDocument(); - }); - - it('should strip anchor tags', () => { - const htmlWithLink = 'Click me

Other content

'; - const {wrapper} = createMockForm(); - - render(, {wrapper}); - - expect(screen.queryByRole('link')).not.toBeInTheDocument(); - expect(screen.getByText('Other content')).toBeInTheDocument(); - }); - - it('should render empty content when defaultValue is undefined', () => { - const {wrapper} = createMockForm(); - - const {container} = render(, {wrapper}); - - const proseDiv = container.querySelector('.prose'); - expect(proseDiv).toBeInTheDocument(); - expect(proseDiv?.innerHTML).toBe(''); - }); - - it('should preserve class attribute on allowed tags', () => { - const htmlWithClass = '

Styled paragraph

'; - const {wrapper} = createMockForm(); - - const {container} = render(, {wrapper}); - - const paragraph = container.querySelector('p.custom-class'); - expect(paragraph).toBeInTheDocument(); - expect(paragraph?.textContent).toBe('Styled paragraph'); - }); - - it('should render multiple heading levels', () => { - const headingsHtml = '

H1

H2

H3

H4

H5
H6
'; - const {wrapper} = createMockForm(); - - render(, {wrapper}); - - expect(screen.getByRole('heading', {level: 1})).toHaveTextContent('H1'); - expect(screen.getByRole('heading', {level: 2})).toHaveTextContent('H2'); - expect(screen.getByRole('heading', {level: 3})).toHaveTextContent('H3'); - expect(screen.getByRole('heading', {level: 4})).toHaveTextContent('H4'); - expect(screen.getByRole('heading', {level: 5})).toHaveTextContent('H5'); - expect(screen.getByRole('heading', {level: 6})).toHaveTextContent('H6'); - }); - - it('should render with both description and HTML content', () => { - const {wrapper} = createMockForm(); - - render( - HTML content

', - fieldDescription: 'Description text', - }} - />, - {wrapper} - ); - - expect(screen.getByText('Description text')).toBeInTheDocument(); - expect(screen.getByText('HTML content')).toBeInTheDocument(); - }); -}); diff --git a/client/src/pages/automation/trigger-form/components/tests/DateTimeFieldRenderer.test.tsx b/client/src/pages/automation/trigger-form/components/tests/DateTimeFieldRenderer.test.tsx deleted file mode 100644 index c47af53094d..00000000000 --- a/client/src/pages/automation/trigger-form/components/tests/DateTimeFieldRenderer.test.tsx +++ /dev/null @@ -1,182 +0,0 @@ -import {FieldType} from '@/pages/automation/trigger-form/TriggerForm'; -import {render, screen} from '@/shared/util/test-utils'; -import {describe, expect, it, vi} from 'vitest'; - -import {DateTimeFieldRenderer} from '../DateTimeFieldRenderer'; -import {createMockForm} from './testUtils'; - -vi.mock('@/components/DatePicker/DatePicker', () => ({ - default: ({onChange, value}: {onChange: (date: Date | undefined) => void; value?: Date}) => ( - onChange(event.target.value ? new Date(event.target.value) : undefined)} - type="date" - value={value ? value.toISOString().split('T')[0] : ''} - /> - ), -})); - -vi.mock('@/components/DateTimePicker/DateTimePicker', () => ({ - default: ({onChange, value}: {onChange: (date: Date | undefined) => void; value?: Date}) => ( - onChange(event.target.value ? new Date(event.target.value) : undefined)} - type="datetime-local" - value={value ? value.toISOString().slice(0, 16) : ''} - /> - ), -})); - -describe('DateTimeFieldRenderer', () => { - it('should render with fieldLabel', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('Select Date')).toBeInTheDocument(); - }); - - it('should render with fieldName when fieldLabel is not provided', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('eventDate')).toBeInTheDocument(); - }); - - it('should render with name when fieldLabel and fieldName are not provided', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('fallbackDate')).toBeInTheDocument(); - }); - - it('should render field description when provided', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('Select the event date')).toBeInTheDocument(); - }); - - it('should not render field description when not provided', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.queryByText('Select the event date')).not.toBeInTheDocument(); - }); - - it('should render DatePicker for DATE_PICKER fieldType', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByTestId('date-picker')).toBeInTheDocument(); - expect(screen.queryByTestId('datetime-picker')).not.toBeInTheDocument(); - }); - - it('should render DateTimePicker for DATETIME_PICKER fieldType', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByTestId('datetime-picker')).toBeInTheDocument(); - expect(screen.queryByTestId('date-picker')).not.toBeInTheDocument(); - }); - - it('should render DateTimePicker for non-DATE_PICKER fieldTypes', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByTestId('datetime-picker')).toBeInTheDocument(); - }); - - it('should display existing date value for DatePicker', () => { - const testDate = '2024-06-15T10:00:00.000Z'; - const {form, wrapper} = createMockForm({dateField: testDate}); - - render( - , - {wrapper} - ); - - const datePicker = screen.getByTestId('date-picker'); - expect(datePicker).toHaveValue('2024-06-15'); - }); - - it('should display existing datetime value for DateTimePicker', () => { - const testDateTime = '2024-06-15T14:30:00.000Z'; - const {form, wrapper} = createMockForm({dateTimeField: testDateTime}); - - render( - , - {wrapper} - ); - - const dateTimePicker = screen.getByTestId('datetime-picker'); - expect(dateTimePicker).toHaveValue('2024-06-15T14:30'); - }); -}); diff --git a/client/src/pages/automation/trigger-form/components/tests/FileInputFieldRenderer.test.tsx b/client/src/pages/automation/trigger-form/components/tests/FileInputFieldRenderer.test.tsx deleted file mode 100644 index d8b022d5775..00000000000 --- a/client/src/pages/automation/trigger-form/components/tests/FileInputFieldRenderer.test.tsx +++ /dev/null @@ -1,118 +0,0 @@ -import {fireEvent, render, screen} from '@/shared/util/test-utils'; -import {describe, expect, it} from 'vitest'; - -import {FileInputFieldRenderer} from '../FileInputFieldRenderer'; -import {createMockForm} from './testUtils'; - -describe('FileInputFieldRenderer', () => { - it('should render with fieldLabel', () => { - const {form, wrapper} = createMockForm(); - - render(, { - wrapper, - }); - - expect(screen.getByText('Upload File')).toBeInTheDocument(); - }); - - it('should render with fieldName when fieldLabel is not provided', () => { - const {form, wrapper} = createMockForm(); - - render(, { - wrapper, - }); - - expect(screen.getByText('documentFile')).toBeInTheDocument(); - }); - - it('should render with name when fieldLabel and fieldName are not provided', () => { - const {form, wrapper} = createMockForm(); - - render(, {wrapper}); - - expect(screen.getByText('fallbackFile')).toBeInTheDocument(); - }); - - it('should render field description when provided', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('Please upload a PDF document')).toBeInTheDocument(); - }); - - it('should not render field description when not provided', () => { - const {form, wrapper} = createMockForm(); - - render(, {wrapper}); - - expect(screen.queryByText('Please upload a PDF document')).not.toBeInTheDocument(); - }); - - it('should render file input element', () => { - const {form, wrapper} = createMockForm(); - - render(, {wrapper}); - - const fileInput = document.querySelector('input[type="file"]'); - expect(fileInput).toBeInTheDocument(); - }); - - it('should have correct id attribute on file input', () => { - const {form, wrapper} = createMockForm(); - - render(, {wrapper}); - - const fileInput = document.querySelector('input[type="file"]#uploadField'); - expect(fileInput).toBeInTheDocument(); - }); - - it('should update form value when file is selected', () => { - const {form, formRef, wrapper} = createMockForm(); - - render(, {wrapper}); - - const file = new File(['test content'], 'test.txt', {type: 'text/plain'}); - const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement; - - fireEvent.change(fileInput, {target: {files: [file]}}); - - const formValue = formRef.current?.getValues('fileField'); - expect(formValue).toBeInstanceOf(File); - expect((formValue as File).name).toBe('test.txt'); - }); - - it('should set form value to null when file selection is cancelled', () => { - const {form, formRef, wrapper} = createMockForm(); - - render(, {wrapper}); - - const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement; - - fireEvent.change(fileInput, {target: {files: null}}); - - expect(formRef.current?.getValues('fileField')).toBeNull(); - }); - - it('should handle different file types', () => { - const {form, formRef, wrapper} = createMockForm(); - - render(, {wrapper}); - - const imageFile = new File(['image data'], 'photo.png', {type: 'image/png'}); - const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement; - - fireEvent.change(fileInput, {target: {files: [imageFile]}}); - - const formValue = formRef.current?.getValues('imageField') as File; - expect(formValue.name).toBe('photo.png'); - expect(formValue.type).toBe('image/png'); - }); -}); diff --git a/client/src/pages/automation/trigger-form/components/tests/HiddenFieldRenderer.test.tsx b/client/src/pages/automation/trigger-form/components/tests/HiddenFieldRenderer.test.tsx deleted file mode 100644 index c309f4e55a0..00000000000 --- a/client/src/pages/automation/trigger-form/components/tests/HiddenFieldRenderer.test.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import {render} from '@/shared/util/test-utils'; -import {describe, expect, it} from 'vitest'; - -import {HiddenFieldRenderer} from '../HiddenFieldRenderer'; -import {createMockForm} from './testUtils'; - -describe('HiddenFieldRenderer', () => { - it('should render a hidden input element', () => { - const {form, wrapper} = createMockForm(); - - render(, {wrapper}); - - const hiddenInput = document.querySelector('input[type="hidden"]'); - expect(hiddenInput).toBeInTheDocument(); - }); - - it('should use form field value when available', () => { - const {form, wrapper} = createMockForm({hiddenField: 'form-value'}); - - render(, {wrapper}); - - const hiddenInput = document.querySelector('input[type="hidden"]') as HTMLInputElement; - expect(hiddenInput.value).toBe('form-value'); - }); - - it('should use defaultValue when form field value is undefined', () => { - const {form, wrapper} = createMockForm(); - - render(, { - wrapper, - }); - - const hiddenInput = document.querySelector('input[type="hidden"]') as HTMLInputElement; - expect(hiddenInput.value).toBe('default-value'); - }); - - it('should prefer form field value over defaultValue', () => { - const {form, wrapper} = createMockForm({hiddenField: 'form-value'}); - - render(, { - wrapper, - }); - - const hiddenInput = document.querySelector('input[type="hidden"]') as HTMLInputElement; - expect(hiddenInput.value).toBe('form-value'); - }); - - it('should render empty string when both form value and defaultValue are undefined', () => { - const {form, wrapper} = createMockForm(); - - render(, {wrapper}); - - const hiddenInput = document.querySelector('input[type="hidden"]') as HTMLInputElement; - expect(hiddenInput.value).toBe(''); - }); - - it('should convert numeric form value to string', () => { - const {form, wrapper} = createMockForm({hiddenField: 12345}); - - render(, {wrapper}); - - const hiddenInput = document.querySelector('input[type="hidden"]') as HTMLInputElement; - expect(hiddenInput.value).toBe('12345'); - }); - - it('should use string defaultValue', () => { - const {form, wrapper} = createMockForm(); - - render(, {wrapper}); - - const hiddenInput = document.querySelector('input[type="hidden"]') as HTMLInputElement; - expect(hiddenInput.value).toBe('99999'); - }); - - it('should handle boolean form value', () => { - const {form, wrapper} = createMockForm({hiddenField: true}); - - render(, {wrapper}); - - const hiddenInput = document.querySelector('input[type="hidden"]') as HTMLInputElement; - expect(hiddenInput.value).toBe('true'); - }); - - it('should not be visible to the user', () => { - const {form, wrapper} = createMockForm({hiddenField: 'secret'}); - - const {container} = render(, {wrapper}); - - const hiddenInput = container.querySelector('input[type="hidden"]'); - expect(hiddenInput).toBeInTheDocument(); - - const visibleElements = container.querySelectorAll('label, p, span:not(:empty)'); - expect(visibleElements.length).toBe(0); - }); -}); diff --git a/client/src/pages/automation/trigger-form/components/tests/InputFieldRenderer.test.tsx b/client/src/pages/automation/trigger-form/components/tests/InputFieldRenderer.test.tsx deleted file mode 100644 index 20f4f2fe091..00000000000 --- a/client/src/pages/automation/trigger-form/components/tests/InputFieldRenderer.test.tsx +++ /dev/null @@ -1,200 +0,0 @@ -import {FieldType} from '@/pages/automation/trigger-form/TriggerForm'; -import {fireEvent, render, screen} from '@/shared/util/test-utils'; -import {describe, expect, it} from 'vitest'; - -import {InputFieldRenderer} from '../InputFieldRenderer'; -import {createMockForm} from './testUtils'; - -describe('InputFieldRenderer', () => { - it('should render with fieldLabel', () => { - const {form, wrapper} = createMockForm(); - - render(, {wrapper}); - - expect(screen.getByText('Username')).toBeInTheDocument(); - }); - - it('should render with fieldName when fieldLabel is not provided', () => { - const {form, wrapper} = createMockForm(); - - render(, {wrapper}); - - expect(screen.getByText('userField')).toBeInTheDocument(); - }); - - it('should render with name when fieldLabel and fieldName are not provided', () => { - const {form, wrapper} = createMockForm(); - - render(, {wrapper}); - - expect(screen.getByText('fallbackInput')).toBeInTheDocument(); - }); - - it('should render field description when provided', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('Enter your full name')).toBeInTheDocument(); - }); - - it('should not render field description when not provided', () => { - const {form, wrapper} = createMockForm(); - - render(, {wrapper}); - - expect(screen.queryByText('Enter your full name')).not.toBeInTheDocument(); - }); - - it('should render text input by default', () => { - const {form, wrapper} = createMockForm(); - - render(, {wrapper}); - - const input = screen.getByRole('textbox'); - expect(input).toHaveAttribute('type', 'text'); - }); - - it('should render email input for EMAIL_INPUT fieldType', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - const input = document.querySelector('input[type="email"]'); - expect(input).toBeInTheDocument(); - }); - - it('should render number input for NUMBER_INPUT fieldType', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - const input = screen.getByRole('spinbutton'); - expect(input).toHaveAttribute('type', 'number'); - }); - - it('should render password input for PASSWORD_INPUT fieldType', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - const input = document.querySelector('input[type="password"]'); - expect(input).toBeInTheDocument(); - }); - - it('should render text input for INPUT fieldType', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - const input = screen.getByRole('textbox'); - expect(input).toHaveAttribute('type', 'text'); - }); - - it('should display placeholder when provided', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - const input = screen.getByRole('textbox'); - expect(input).toHaveAttribute('placeholder', 'Type to search...'); - }); - - it('should update form value when typing', () => { - const {form, formRef, wrapper} = createMockForm(); - - render(, {wrapper}); - - const input = screen.getByRole('textbox'); - fireEvent.change(input, {target: {value: 'John Doe'}}); - - expect(formRef.current?.getValues('name')).toBe('John Doe'); - }); - - it('should display existing string value from form', () => { - const {form, wrapper} = createMockForm({name: 'Jane Doe'}); - - render(, {wrapper}); - - const input = screen.getByRole('textbox'); - expect(input).toHaveValue('Jane Doe'); - }); - - it('should display existing numeric value from form', () => { - const {form, wrapper} = createMockForm({age: 25}); - - render( - , - {wrapper} - ); - - const input = screen.getByRole('spinbutton'); - expect(input).toHaveValue(25); - }); - - it('should display empty string for non-string/non-number values', () => { - const {form, wrapper} = createMockForm({field: {complex: 'object'}}); - - render(, {wrapper}); - - const input = screen.getByRole('textbox'); - expect(input).toHaveValue(''); - }); - - it('should handle undefined fieldType gracefully', () => { - const {form, wrapper} = createMockForm(); - - render(, { - wrapper, - }); - - const input = screen.getByRole('textbox'); - expect(input).toHaveAttribute('type', 'text'); - }); -}); diff --git a/client/src/pages/automation/trigger-form/components/tests/RadioFieldRenderer.test.tsx b/client/src/pages/automation/trigger-form/components/tests/RadioFieldRenderer.test.tsx deleted file mode 100644 index 590c17cf78f..00000000000 --- a/client/src/pages/automation/trigger-form/components/tests/RadioFieldRenderer.test.tsx +++ /dev/null @@ -1,240 +0,0 @@ -import {fireEvent, render, screen} from '@/shared/util/test-utils'; -import {describe, expect, it} from 'vitest'; - -import {RadioFieldRenderer} from '../RadioFieldRenderer'; -import {createMockForm} from './testUtils'; - -const mockOptions = [ - {label: 'Option A', value: 'optionA'}, - {label: 'Option B', value: 'optionB'}, - {label: 'Option C', value: 'optionC'}, -]; - -describe('RadioFieldRenderer', () => { - it('should render with fieldLabel', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('Select Option')).toBeInTheDocument(); - }); - - it('should render with fieldName when fieldLabel is not provided', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('choiceField')).toBeInTheDocument(); - }); - - it('should render with name when fieldLabel and fieldName are not provided', () => { - const {form, wrapper} = createMockForm(); - - render(, { - wrapper, - }); - - expect(screen.getByText('fallbackRadio')).toBeInTheDocument(); - }); - - it('should render field description when provided', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('Choose your preferred option')).toBeInTheDocument(); - }); - - it('should not render field description when not provided', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.queryByText('Choose your preferred option')).not.toBeInTheDocument(); - }); - - it('should render all radio options', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('Option A')).toBeInTheDocument(); - expect(screen.getByText('Option B')).toBeInTheDocument(); - expect(screen.getByText('Option C')).toBeInTheDocument(); - }); - - it('should render radio buttons for each option', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - const radioButtons = screen.getAllByRole('radio'); - expect(radioButtons).toHaveLength(3); - }); - - it('should update form value when radio option is selected', () => { - const {form, formRef, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - const optionB = screen.getByRole('radio', {name: 'Option B'}); - fireEvent.click(optionB); - - expect(formRef.current?.getValues('selectedOption')).toBe('optionB'); - }); - - it('should reflect selected value from form', () => { - const {form, wrapper} = createMockForm({selectedOption: 'optionB'}); - - render( - , - {wrapper} - ); - - const optionB = screen.getByRole('radio', {name: 'Option B'}); - expect(optionB).toBeChecked(); - }); - - it('should render empty list when no options provided', () => { - const {form, wrapper} = createMockForm(); - - render(, { - wrapper, - }); - - const radioButtons = screen.queryAllByRole('radio'); - expect(radioButtons).toHaveLength(0); - }); - - it('should render empty list when fieldOptions is undefined', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - const radioButtons = screen.queryAllByRole('radio'); - expect(radioButtons).toHaveLength(0); - }); - - it('should have correct id for each radio option', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(document.getElementById('radioGroup-optionA')).toBeInTheDocument(); - expect(document.getElementById('radioGroup-optionB')).toBeInTheDocument(); - expect(document.getElementById('radioGroup-optionC')).toBeInTheDocument(); - }); - - it('should allow only one option to be selected', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - const optionA = screen.getByRole('radio', {name: 'Option A'}); - const optionB = screen.getByRole('radio', {name: 'Option B'}); - - fireEvent.click(optionA); - expect(optionA).toBeChecked(); - expect(optionB).not.toBeChecked(); - - fireEvent.click(optionB); - expect(optionA).not.toBeChecked(); - expect(optionB).toBeChecked(); - }); - - it('should handle non-string form values gracefully', () => { - const {form, wrapper} = createMockForm({radioField: 123}); - - render( - , - {wrapper} - ); - - const radioButtons = screen.getAllByRole('radio'); - radioButtons.forEach((radio) => { - expect(radio).not.toBeChecked(); - }); - }); -}); diff --git a/client/src/pages/automation/trigger-form/components/tests/SelectFieldRenderer.test.tsx b/client/src/pages/automation/trigger-form/components/tests/SelectFieldRenderer.test.tsx deleted file mode 100644 index 4a121aac01b..00000000000 --- a/client/src/pages/automation/trigger-form/components/tests/SelectFieldRenderer.test.tsx +++ /dev/null @@ -1,379 +0,0 @@ -import {fireEvent, render, screen, waitFor} from '@/shared/util/test-utils'; -import {describe, expect, it} from 'vitest'; - -import {SelectFieldRenderer} from '../SelectFieldRenderer'; -import {createMockForm} from './testUtils'; - -const mockOptions = [ - {label: 'Red', value: 'red'}, - {label: 'Blue', value: 'blue'}, - {label: 'Green', value: 'green'}, -]; - -describe('SelectFieldRenderer', () => { - describe('Single Select Mode', () => { - it('should render with fieldLabel', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('Choose Color')).toBeInTheDocument(); - }); - - it('should render with fieldName when fieldLabel is not provided', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('colorField')).toBeInTheDocument(); - }); - - it('should render with name when fieldLabel and fieldName are not provided', () => { - const {form, wrapper} = createMockForm(); - - render(, { - wrapper, - }); - - expect(screen.getByText('fallbackSelect')).toBeInTheDocument(); - }); - - it('should render field description when provided', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('Select your favorite color')).toBeInTheDocument(); - }); - - it('should render select trigger with default placeholder', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('Select...')).toBeInTheDocument(); - }); - - it('should render select trigger with custom placeholder', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('Pick a color')).toBeInTheDocument(); - }); - - it('should show options when clicked', async () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - fireEvent.click(screen.getByRole('combobox')); - - await waitFor(() => { - expect(screen.getByRole('option', {name: 'Red'})).toBeInTheDocument(); - expect(screen.getByRole('option', {name: 'Blue'})).toBeInTheDocument(); - expect(screen.getByRole('option', {name: 'Green'})).toBeInTheDocument(); - }); - }); - - it('should update form value when option is selected', async () => { - const {form, formRef, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - fireEvent.click(screen.getByRole('combobox')); - - await waitFor(() => { - expect(screen.getByRole('option', {name: 'Blue'})).toBeInTheDocument(); - }); - - fireEvent.click(screen.getByRole('option', {name: 'Blue'})); - - expect(formRef.current?.getValues('selectedColor')).toBe('blue'); - }); - - it('should display selected value from form', () => { - const {form, wrapper} = createMockForm({color: 'green'}); - - render( - , - {wrapper} - ); - - expect(screen.getByText('Green')).toBeInTheDocument(); - }); - }); - - describe('Multiple Choice Mode', () => { - it('should render checkboxes when multipleChoice is true', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - const checkboxes = screen.getAllByRole('checkbox'); - expect(checkboxes).toHaveLength(3); - }); - - it('should render option labels in multiple choice mode', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('Red')).toBeInTheDocument(); - expect(screen.getByText('Blue')).toBeInTheDocument(); - expect(screen.getByText('Green')).toBeInTheDocument(); - }); - - it('should update form value when checkbox is checked', () => { - const {form, formRef, wrapper} = createMockForm({colors: []}); - - render( - , - {wrapper} - ); - - const checkboxes = screen.getAllByRole('checkbox'); - fireEvent.click(checkboxes[0]); - - expect(formRef.current?.getValues('colors')).toContain('red'); - }); - - it('should allow multiple selections', () => { - const {form, formRef, wrapper} = createMockForm({colors: []}); - - render( - , - {wrapper} - ); - - const checkboxes = screen.getAllByRole('checkbox'); - fireEvent.click(checkboxes[0]); - fireEvent.click(checkboxes[1]); - - const values = formRef.current?.getValues('colors') as string[]; - expect(values).toContain('red'); - expect(values).toContain('blue'); - }); - - it('should remove value when checkbox is unchecked', () => { - const {form, formRef, wrapper} = createMockForm({colors: ['red', 'blue']}); - - render( - , - {wrapper} - ); - - const checkboxes = screen.getAllByRole('checkbox'); - fireEvent.click(checkboxes[0]); - - const values = formRef.current?.getValues('colors') as string[]; - expect(values).not.toContain('red'); - expect(values).toContain('blue'); - }); - - it('should reflect checked state from form values', () => { - const {form, wrapper} = createMockForm({colors: ['red', 'green']}); - - render( - , - {wrapper} - ); - - const checkboxes = screen.getAllByRole('checkbox'); - expect(checkboxes[0]).toBeChecked(); - expect(checkboxes[1]).not.toBeChecked(); - expect(checkboxes[2]).toBeChecked(); - }); - - it('should respect maxSelection limit', () => { - const {form, formRef, wrapper} = createMockForm({colors: ['red', 'blue']}); - - render( - , - {wrapper} - ); - - const checkboxes = screen.getAllByRole('checkbox'); - fireEvent.click(checkboxes[2]); - - const values = formRef.current?.getValues('colors') as string[]; - expect(values).toHaveLength(2); - expect(values).not.toContain('green'); - }); - - it('should allow selection when under maxSelection limit', () => { - const {form, formRef, wrapper} = createMockForm({colors: ['red']}); - - render( - , - {wrapper} - ); - - const checkboxes = screen.getAllByRole('checkbox'); - fireEvent.click(checkboxes[1]); - - const values = formRef.current?.getValues('colors') as string[]; - expect(values).toContain('blue'); - }); - - it('should handle non-array form values gracefully', () => { - const {form, wrapper} = createMockForm({colors: 'invalid'}); - - render( - , - {wrapper} - ); - - const checkboxes = screen.getAllByRole('checkbox'); - checkboxes.forEach((checkbox) => { - expect(checkbox).not.toBeChecked(); - }); - }); - }); - - describe('Empty Options', () => { - it('should handle empty fieldOptions for single select', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('Select...')).toBeInTheDocument(); - }); - - it('should handle undefined fieldOptions for single select', () => { - const {form, wrapper} = createMockForm(); - - render(, {wrapper}); - - expect(screen.getByText('Select...')).toBeInTheDocument(); - }); - - it('should handle empty fieldOptions for multiple choice', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - const checkboxes = screen.queryAllByRole('checkbox'); - expect(checkboxes).toHaveLength(0); - }); - }); -}); diff --git a/client/src/pages/automation/trigger-form/components/tests/TextAreaFieldRenderer.test.tsx b/client/src/pages/automation/trigger-form/components/tests/TextAreaFieldRenderer.test.tsx deleted file mode 100644 index 115894ab50b..00000000000 --- a/client/src/pages/automation/trigger-form/components/tests/TextAreaFieldRenderer.test.tsx +++ /dev/null @@ -1,167 +0,0 @@ -import {fireEvent, render, screen} from '@/shared/util/test-utils'; -import {describe, expect, it} from 'vitest'; - -import {TextAreaFieldRenderer} from '../TextAreaFieldRenderer'; -import {createMockForm} from './testUtils'; - -describe('TextAreaFieldRenderer', () => { - it('should render with fieldLabel', () => { - const {form, wrapper} = createMockForm(); - - render(, { - wrapper, - }); - - expect(screen.getByText('Description')).toBeInTheDocument(); - }); - - it('should render with fieldName when fieldLabel is not provided', () => { - const {form, wrapper} = createMockForm(); - - render(, { - wrapper, - }); - - expect(screen.getByText('descriptionField')).toBeInTheDocument(); - }); - - it('should render with name when fieldLabel and fieldName are not provided', () => { - const {form, wrapper} = createMockForm(); - - render(, {wrapper}); - - expect(screen.getByText('fallbackTextArea')).toBeInTheDocument(); - }); - - it('should render field description when provided', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - expect(screen.getByText('Enter a detailed description')).toBeInTheDocument(); - }); - - it('should not render field description when not provided', () => { - const {form, wrapper} = createMockForm(); - - render(, { - wrapper, - }); - - expect(screen.queryByText('Enter a detailed description')).not.toBeInTheDocument(); - }); - - it('should render textarea element', () => { - const {form, wrapper} = createMockForm(); - - render(, {wrapper}); - - expect(screen.getByRole('textbox')).toBeInTheDocument(); - }); - - it('should display placeholder when provided', () => { - const {form, wrapper} = createMockForm(); - - render( - , - {wrapper} - ); - - const textarea = screen.getByRole('textbox'); - expect(textarea).toHaveAttribute('placeholder', 'Enter your comments here...'); - }); - - it('should update form value when typing', () => { - const {form, formRef, wrapper} = createMockForm(); - - render(, {wrapper}); - - const textarea = screen.getByRole('textbox'); - fireEvent.change(textarea, {target: {value: 'This is a test note.'}}); - - expect(formRef.current?.getValues('notes')).toBe('This is a test note.'); - }); - - it('should display existing string value from form', () => { - const {form, wrapper} = createMockForm({notes: 'Existing note content'}); - - render(, {wrapper}); - - const textarea = screen.getByRole('textbox'); - expect(textarea).toHaveValue('Existing note content'); - }); - - it('should display empty string for non-string values', () => { - const {form, wrapper} = createMockForm({notes: {complex: 'object'}}); - - render(, {wrapper}); - - const textarea = screen.getByRole('textbox'); - expect(textarea).toHaveValue(''); - }); - - it('should handle multiline text input', () => { - const {form, formRef, wrapper} = createMockForm(); - const multilineText = 'Line 1\nLine 2\nLine 3'; - - render(, {wrapper}); - - const textarea = screen.getByRole('textbox'); - fireEvent.change(textarea, {target: {value: multilineText}}); - - expect(formRef.current?.getValues('content')).toBe(multilineText); - }); - - it('should preserve existing multiline value', () => { - const multilineText = 'First line\nSecond line\nThird line'; - const {form, wrapper} = createMockForm({content: multilineText}); - - render(, {wrapper}); - - const textarea = screen.getByRole('textbox'); - expect(textarea).toHaveValue(multilineText); - }); - - it('should handle empty string value', () => { - const {form, wrapper} = createMockForm({text: ''}); - - render(, {wrapper}); - - const textarea = screen.getByRole('textbox'); - expect(textarea).toHaveValue(''); - }); - - it('should handle special characters in text', () => { - const specialText = ' & "quotes" \'apostrophes\''; - const {form, formRef, wrapper} = createMockForm(); - - render(, {wrapper}); - - const textarea = screen.getByRole('textbox'); - fireEvent.change(textarea, {target: {value: specialText}}); - - expect(formRef.current?.getValues('special')).toBe(specialText); - }); - - it('should handle numeric value by converting to empty string', () => { - const {form, wrapper} = createMockForm({numericField: 12345}); - - render(, { - wrapper, - }); - - const textarea = screen.getByRole('textbox'); - expect(textarea).toHaveValue(''); - }); -}); diff --git a/client/src/pages/automation/trigger-form/components/tests/testUtils.tsx b/client/src/pages/automation/trigger-form/components/tests/testUtils.tsx deleted file mode 100644 index 8c613deeb98..00000000000 --- a/client/src/pages/automation/trigger-form/components/tests/testUtils.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import {Form} from '@/components/ui/form'; -import {ReactNode} from 'react'; -import {UseFormReturn, useForm} from 'react-hook-form'; - -type FormRefType = {current: UseFormReturn> | null}; - -interface CreateFormWrapperOptionsProps { - defaultValues?: Record; - formRef?: FormRefType; -} - -export function createFormWrapper({defaultValues = {}, formRef}: CreateFormWrapperOptionsProps = {}) { - return function FormWrapper({children}: {children: ReactNode}) { - const form = useForm>({ - defaultValues, - mode: 'onSubmit', - }); - - if (formRef) { - formRef.current = form; - } - - return
{children}
; - }; -} - -export function createMockForm(defaultValues: Record = {}) { - const formRef: FormRefType = {current: null}; - - const wrapper = createFormWrapper({defaultValues, formRef}); - - return { - form: new Proxy({} as UseFormReturn>, { - get(_target, prop) { - if (formRef.current) { - const value = (formRef.current as Record)[prop as string]; - - if (typeof value === 'function') { - return value.bind(formRef.current); - } - - return value; - } - - return undefined; - }, - }), - formRef, - wrapper, - }; -} diff --git a/client/src/pages/automation/workflow-executions/components/WorkflowExecutionsDropdownMenu.tsx b/client/src/pages/automation/workflow-executions/components/WorkflowExecutionsDropdownMenu.tsx deleted file mode 100644 index 304f5d5c99d..00000000000 --- a/client/src/pages/automation/workflow-executions/components/WorkflowExecutionsDropdownMenu.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import Button from '@/components/Button/Button'; -import {DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger} from '@/components/ui/dropdown-menu'; -import {useToast} from '@/hooks/use-toast'; -import {WorkflowExecution} from '@/shared/middleware/automation/workflow/execution'; -import {useStopJobMutation} from '@/shared/mutations/platform/jobs.mutations'; -import {WorkflowExecutionKeys} from '@/shared/queries/automation/workflowExecutions.queries'; -import {useQueryClient} from '@tanstack/react-query'; -import {CellContext} from '@tanstack/react-table'; -import {CircleStopIcon, EllipsisVerticalIcon, ViewIcon} from 'lucide-react'; - -import useWorkflowExecutionSheetStore from '../stores/useWorkflowExecutionSheetStore'; - -/* eslint-disable-next-line @typescript-eslint/no-explicit-any */ -const WorkflowExecutionsDropdownMenu = ({data}: {data: CellContext}) => { - const {toast} = useToast(); - - const queryClient = useQueryClient(); - - const {setWorkflowExecutionId, setWorkflowExecutionSheetOpen} = useWorkflowExecutionSheetStore(); - - const stopJobMutation = useStopJobMutation({ - onError: () => - toast({ - className: 'mt-2 w-[340px] rounded-md bg-red-600 p-4 text-white', - description: 'Failed to stop Workflow Execution', - }), - onSuccess: () => { - toast({ - className: 'mt-2 w-[340px] rounded-md bg-green-600 p-4 text-white', - description: 'Stopping Workflow Execution', - }); - - queryClient.invalidateQueries({ - queryKey: WorkflowExecutionKeys.workflowExecutions, - }); - }, - }); - - const disabled = data.getValue()?.status !== 'STARTED'; - - const handleViewClick = () => { - const id = data.row.original.id; - - if (id != null) { - setWorkflowExecutionId(id); - setWorkflowExecutionSheetOpen(true); - } - }; - - const handleStopWorkflowExecutionClick = (id: number) => { - stopJobMutation.mutate(id); - }; - - return ( - - -