From 9a7d24ea4edb46dee529c50d82ff11888025e333 Mon Sep 17 00:00:00 2001 From: Dhruwang Jariwala <67850763+Dhruwang@users.noreply.github.com> Date: Tue, 6 May 2025 17:29:54 +0530 Subject: [PATCH 01/17] chore: updated open telemtry package versions (#5672) --- apps/web/instrumentation-node.ts | 8 +- apps/web/package.json | 15 ++- pnpm-lock.yaml | 202 +++++++++++++++++++------------ 3 files changed, 138 insertions(+), 87 deletions(-) diff --git a/apps/web/instrumentation-node.ts b/apps/web/instrumentation-node.ts index ef3de4c70c..3e43e9f5c1 100644 --- a/apps/web/instrumentation-node.ts +++ b/apps/web/instrumentation-node.ts @@ -6,11 +6,11 @@ import { registerInstrumentations } from "@opentelemetry/instrumentation"; import { HttpInstrumentation } from "@opentelemetry/instrumentation-http"; import { RuntimeNodeInstrumentation } from "@opentelemetry/instrumentation-runtime-node"; import { - Resource, - detectResourcesSync, + detectResources, envDetector, hostDetector, processDetector, + resourceFromAttributes, } from "@opentelemetry/resources"; import { MeterProvider } from "@opentelemetry/sdk-metrics"; import { logger } from "@formbricks/logger"; @@ -21,11 +21,11 @@ const exporter = new PrometheusExporter({ host: "0.0.0.0", // Listen on all network interfaces }); -const detectedResources = detectResourcesSync({ +const detectedResources = detectResources({ detectors: [envDetector, processDetector, hostDetector], }); -const customResources = new Resource({}); +const customResources = resourceFromAttributes({}); const resources = detectedResources.merge(customResources); diff --git a/apps/web/package.json b/apps/web/package.json index f44a0ae159..32ee3c43a0 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -41,14 +41,13 @@ "@lexical/react": "0.31.0", "@lexical/rich-text": "0.31.0", "@lexical/table": "0.31.0", - "@opentelemetry/api-logs": "0.56.0", - "@opentelemetry/exporter-prometheus": "0.57.2", - "@opentelemetry/host-metrics": "0.35.5", - "@opentelemetry/instrumentation": "0.57.2", - "@opentelemetry/instrumentation-http": "0.57.2", - "@opentelemetry/instrumentation-runtime-node": "0.12.2", - "@opentelemetry/sdk-logs": "0.56.0", - "@opentelemetry/sdk-metrics": "1.30.1", + "@opentelemetry/exporter-prometheus": "0.200.0", + "@opentelemetry/host-metrics": "0.36.0", + "@opentelemetry/instrumentation": "0.200.0", + "@opentelemetry/instrumentation-http": "0.200.0", + "@opentelemetry/instrumentation-runtime-node": "0.14.0", + "@opentelemetry/sdk-logs": "0.200.0", + "@opentelemetry/sdk-metrics": "2.0.0", "@paralleldrive/cuid2": "2.2.2", "@prisma/client": "6.7.0", "@radix-ui/react-accordion": "1.2.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dbc9c1161c..b54078fdab 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -181,30 +181,27 @@ importers: '@lexical/table': specifier: 0.31.0 version: 0.31.0 - '@opentelemetry/api-logs': - specifier: 0.56.0 - version: 0.56.0 '@opentelemetry/exporter-prometheus': - specifier: 0.57.2 - version: 0.57.2(@opentelemetry/api@1.9.0) + specifier: 0.200.0 + version: 0.200.0(@opentelemetry/api@1.9.0) '@opentelemetry/host-metrics': - specifier: 0.35.5 - version: 0.35.5(@opentelemetry/api@1.9.0) + specifier: 0.36.0 + version: 0.36.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': - specifier: 0.57.2 - version: 0.57.2(@opentelemetry/api@1.9.0) + specifier: 0.200.0 + version: 0.200.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-http': - specifier: 0.57.2 - version: 0.57.2(@opentelemetry/api@1.9.0) + specifier: 0.200.0 + version: 0.200.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-runtime-node': - specifier: 0.12.2 - version: 0.12.2(@opentelemetry/api@1.9.0) + specifier: 0.14.0 + version: 0.14.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-logs': - specifier: 0.56.0 - version: 0.56.0(@opentelemetry/api@1.9.0) + specifier: 0.200.0 + version: 0.200.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': - specifier: 1.30.1 - version: 1.30.1(@opentelemetry/api@1.9.0) + specifier: 2.0.0 + version: 2.0.0(@opentelemetry/api@1.9.0) '@paralleldrive/cuid2': specifier: 2.2.2 version: 2.2.2 @@ -267,7 +264,7 @@ importers: version: 0.0.38(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@sentry/nextjs': specifier: 9.15.0 - version: 9.15.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.99.7) + version: 9.15.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.200.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.99.7) '@t3-oss/env-nextjs': specifier: 0.13.4 version: 0.13.4(arktype@2.1.20)(typescript@5.8.3)(zod@3.24.1) @@ -2009,9 +2006,9 @@ packages: engines: {node: '>=10'} deprecated: This functionality has been moved to @npmcli/fs - '@opentelemetry/api-logs@0.56.0': - resolution: {integrity: sha512-Wr39+94UNNG3Ei9nv3pHd4AJ63gq5nSemMRpCd8fPwDL9rN3vK26lzxfH27mw16XzOSO+TpyQwBAMaLxaPWG0g==} - engines: {node: '>=14'} + '@opentelemetry/api-logs@0.200.0': + resolution: {integrity: sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q==} + engines: {node: '>=8.0.0'} '@opentelemetry/api-logs@0.57.1': resolution: {integrity: sha512-I4PHczeujhQAQv6ZBzqHYEUiggZL4IdSMixtVD3EYqbdrjujE7kRfI5QohjlPoJm8BvenoW5YaTMWRrbpot6tg==} @@ -2031,15 +2028,15 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@1.29.0': - resolution: {integrity: sha512-gmT7vAreXl0DTHD2rVZcw3+l2g84+5XiHIqdBUxXbExymPCvSsGOpiwMmn8nkiJur28STV31wnhIDrzWDPzjfA==} + '@opentelemetry/core@1.30.1': + resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@1.30.1': - resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} - engines: {node: '>=14'} + '@opentelemetry/core@2.0.0': + resolution: {integrity: sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==} + engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -2055,15 +2052,15 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-prometheus@0.57.2': - resolution: {integrity: sha512-VqIqXnuxWMWE/1NatAGtB1PvsQipwxDcdG4RwA/umdBcW3/iOHp0uejvFHTRN2O78ZPged87ErJajyUBPUhlDQ==} - engines: {node: '>=14'} + '@opentelemetry/exporter-prometheus@0.200.0': + resolution: {integrity: sha512-ZYdlU9r0USuuYppiDyU2VFRA0kFl855ylnb3N/2aOlXrbA4PMCznen7gmPbetGQu7pz8Jbaf4fwvrDnVdQQXSw==} + engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/host-metrics@0.35.5': - resolution: {integrity: sha512-Zf9Cjl7H6JalspnK5KD1+LLKSVecSinouVctNmUxRy+WP+20KwHq+qg4hADllkEmJ99MZByLLmEmzrr7s92V6g==} - engines: {node: '>=14'} + '@opentelemetry/host-metrics@0.36.0': + resolution: {integrity: sha512-14lNY57qa21V3ZOl6xrqLMHR0HGlnPIApR6hr3oCw/Dqs5IzxhTwt2X8Stn82vWJJis7j/ezn11oODsizHj2dQ==} + engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 @@ -2121,6 +2118,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-http@0.200.0': + resolution: {integrity: sha512-9tqGbCJikhYU68y3k9mi6yWsMyMeCcwoQuHvIXan5VvvPPQ5WIZaV6Mxu/MCVe4swRNoFs8Th+qyj0TZV5ELvw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-http@0.57.2': resolution: {integrity: sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==} engines: {node: '>=14'} @@ -2193,9 +2196,9 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-runtime-node@0.12.2': - resolution: {integrity: sha512-HNBW1rJiHDBTHQlh5oH1IAcV8O5VR7/L5BBOfGAMpGno3Jq9cNqTh96uUp0qBXBuxD8Yl1eoI5N+B5TdmjLteQ==} - engines: {node: '>=17.4.0'} + '@opentelemetry/instrumentation-runtime-node@0.14.0': + resolution: {integrity: sha512-y78dGoFMKwHSz0SD113Gt1dFTcfunpPZXIJh2SzJN27Lyb9FIzuMfjc3Iu3+s/N6qNOLuS9mKnPe3/qVGG4Waw==} + engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 @@ -2211,6 +2214,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.7.0 + '@opentelemetry/instrumentation@0.200.0': + resolution: {integrity: sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation@0.57.2': resolution: {integrity: sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==} engines: {node: '>=14'} @@ -2239,21 +2248,21 @@ packages: resolution: {integrity: sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==} engines: {node: '>=14'} - '@opentelemetry/resources@1.29.0': - resolution: {integrity: sha512-s7mLXuHZE7RQr1wwweGcaRp3Q4UJJ0wazeGlc/N5/XSe6UyXfsh1UQGMADYeg7YwD+cEdMtU1yJAUXdnFzYzyQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/resources@1.30.1': resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-logs@0.56.0': - resolution: {integrity: sha512-OS0WPBJF++R/cSl+terUjQH5PebloidB1Jbbecgg2rnCmQbTST9xsRes23bLfDQVRvmegmHqDh884h0aRdJyLw==} - engines: {node: '>=14'} + '@opentelemetry/resources@2.0.0': + resolution: {integrity: sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.200.0': + resolution: {integrity: sha512-VZG870063NLfObmQQNtCVcdXXLzI3vOjjrRENmU37HYiPFa0ZXpXVDsTD02Nh3AT3xYJzQaWKl2X2lQ2l7TWJA==} + engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.4.0 <1.10.0' @@ -2269,6 +2278,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-metrics@2.0.0': + resolution: {integrity: sha512-Bvy8QDjO05umd0+j+gDeWcTaVa1/R2lDj/eOvjzpm8VQj1K1vVZJuyjThpV5/lSHyYW2JaHF2IQ7Z8twJFAhjA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.9.0 <1.10.0' + '@opentelemetry/sdk-trace-base@1.30.1': resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==} engines: {node: '>=14'} @@ -11996,7 +12011,7 @@ snapshots: rimraf: 3.0.2 optional: true - '@opentelemetry/api-logs@0.56.0': + '@opentelemetry/api-logs@0.200.0': dependencies: '@opentelemetry/api': 1.9.0 @@ -12014,16 +12029,16 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/core@2.0.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.32.0 + '@opentelemetry/exporter-metrics-otlp-grpc@0.57.1(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.12.6 @@ -12045,14 +12060,14 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-prometheus@0.57.2(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-prometheus@0.200.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.0(@opentelemetry/api@1.9.0) - '@opentelemetry/host-metrics@0.35.5(@opentelemetry/api@1.9.0)': + '@opentelemetry/host-metrics@0.36.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 systeminformation: 5.23.8 @@ -12132,6 +12147,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-http@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.32.0 + forwarded-parse: 2.1.2 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-http@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -12240,10 +12265,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-runtime-node@0.12.2(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-runtime-node@0.14.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color @@ -12264,6 +12289,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.200.0 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.13.1 + require-in-the-middle: 7.5.2 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -12303,24 +12339,24 @@ snapshots: '@opentelemetry/redis-common@0.36.2': {} - '@opentelemetry/resources@1.29.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/sdk-logs@0.56.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/resources@2.0.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.56.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.32.0 + + '@opentelemetry/sdk-logs@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.200.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-logs@0.57.1(@opentelemetry/api@1.9.0)': dependencies: @@ -12335,6 +12371,12 @@ snapshots: '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics@2.0.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -13445,7 +13487,7 @@ snapshots: '@sentry/core@9.15.0': {} - '@sentry/nextjs@9.15.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.99.7)': + '@sentry/nextjs@9.15.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.200.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.99.7)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.32.0 @@ -13453,7 +13495,7 @@ snapshots: '@sentry-internal/browser-utils': 9.15.0 '@sentry/core': 9.15.0 '@sentry/node': 9.15.0 - '@sentry/opentelemetry': 9.15.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.32.0) + '@sentry/opentelemetry': 9.15.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.200.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.32.0) '@sentry/react': 9.15.0(react@19.1.0) '@sentry/vercel-edge': 9.15.0 '@sentry/webpack-plugin': 3.3.1(encoding@0.1.13)(webpack@5.99.7) @@ -13511,6 +13553,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@sentry/opentelemetry@9.15.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.200.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.32.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.32.0 + '@sentry/core': 9.15.0 + '@sentry/opentelemetry@9.15.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.32.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -14867,7 +14919,7 @@ snapshots: '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.8.3) eslint-config-prettier: 9.1.0(eslint@8.57.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.31.0) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0)) eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0) @@ -16377,9 +16429,9 @@ snapshots: eslint-plugin-turbo: 2.5.0(eslint@8.57.0)(turbo@2.5.2) turbo: 2.5.2 - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0)): dependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0) eslint-import-resolver-node@0.3.9: dependencies: @@ -16400,11 +16452,11 @@ snapshots: tinyglobby: 0.2.13 unrs-resolver: 1.6.2 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: @@ -16455,7 +16507,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 From cf5bc51e94ce0138bddfd599d7dc7b0533f3fae2 Mon Sep 17 00:00:00 2001 From: Piyush Gupta <56182734+gupta-piyush19@users.noreply.github.com> Date: Tue, 6 May 2025 17:43:28 +0530 Subject: [PATCH 02/17] fix: strict recaptcha checks (#5674) --- apps/web/modules/ui/components/survey/index.tsx | 2 +- packages/js-core/src/lib/survey/widget.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/web/modules/ui/components/survey/index.tsx b/apps/web/modules/ui/components/survey/index.tsx index 6c6d83797a..34ee558476 100644 --- a/apps/web/modules/ui/components/survey/index.tsx +++ b/apps/web/modules/ui/components/survey/index.tsx @@ -51,7 +51,7 @@ export const SurveyInline = (props: Omit) = const loadScript = async () => { if (!window.formbricksSurveys) { try { - if (props.isSpamProtectionEnabled) { + if (props.isSpamProtectionEnabled && props.recaptchaSiteKey) { await loadRecaptchaScript(props.recaptchaSiteKey); } await loadSurveyScript(); diff --git a/packages/js-core/src/lib/survey/widget.ts b/packages/js-core/src/lib/survey/widget.ts index 5e42f93e66..c9f1e0e672 100644 --- a/packages/js-core/src/lib/survey/widget.ts +++ b/packages/js-core/src/lib/survey/widget.ts @@ -96,7 +96,7 @@ export const renderWidget = async ( return executeRecaptcha(recaptchaSiteKey); }; - if (isSpamProtectionEnabled) { + if (isSpamProtectionEnabled && recaptchaSiteKey) { await loadRecaptchaScript(recaptchaSiteKey); } From 5d45de6bc4aab861ca0be20769629efef9b44cd6 Mon Sep 17 00:00:00 2001 From: Piyush Gupta <56182734+gupta-piyush19@users.noreply.github.com> Date: Tue, 6 May 2025 18:01:43 +0530 Subject: [PATCH 03/17] feat: adds unit tests in modules/ee/teams (#5620) --- apps/web/modules/ee/teams/lib/roles.test.ts | 113 ++++++ .../components/access-table.test.tsx | 41 +++ .../components/access-view.test.tsx | 72 ++++ .../components/manage-team.test.tsx | 46 +++ .../ee/teams/project-teams/lib/team.test.ts | 68 ++++ .../ee/teams/project-teams/loading.test.tsx | 41 +++ .../ee/teams/project-teams/page.test.tsx | 73 ++++ .../ee/teams/team-list/actions.test.ts | 86 +++++ .../teams/team-list/{action.ts => actions.ts} | 0 .../components/create-team-button.test.tsx | 27 ++ .../components/create-team-modal.test.tsx | 77 ++++ .../components/create-team-modal.tsx | 2 +- .../components/manage-team-button.test.tsx | 42 +++ .../team-settings/delete-team.test.tsx | 99 +++++ .../components/team-settings/delete-team.tsx | 2 +- .../team-settings-modal.test.tsx | 136 +++++++ .../team-settings/team-settings-modal.tsx | 2 +- .../team-list/components/teams-table.test.tsx | 154 ++++++++ .../team-list/components/teams-table.tsx | 2 +- .../ee/teams/team-list/lib/project.test.ts | 50 +++ .../ee/teams/team-list/lib/team.test.ts | 343 ++++++++++++++++++ .../modules/ee/teams/team-list/lib/team.ts | 2 +- apps/web/modules/ee/teams/utils/teams.test.ts | 67 ++++ apps/web/vite.config.mts | 2 + 24 files changed, 1542 insertions(+), 5 deletions(-) create mode 100644 apps/web/modules/ee/teams/lib/roles.test.ts create mode 100644 apps/web/modules/ee/teams/project-teams/components/access-table.test.tsx create mode 100644 apps/web/modules/ee/teams/project-teams/components/access-view.test.tsx create mode 100644 apps/web/modules/ee/teams/project-teams/components/manage-team.test.tsx create mode 100644 apps/web/modules/ee/teams/project-teams/lib/team.test.ts create mode 100644 apps/web/modules/ee/teams/project-teams/loading.test.tsx create mode 100644 apps/web/modules/ee/teams/project-teams/page.test.tsx create mode 100644 apps/web/modules/ee/teams/team-list/actions.test.ts rename apps/web/modules/ee/teams/team-list/{action.ts => actions.ts} (100%) create mode 100644 apps/web/modules/ee/teams/team-list/components/create-team-button.test.tsx create mode 100644 apps/web/modules/ee/teams/team-list/components/create-team-modal.test.tsx create mode 100644 apps/web/modules/ee/teams/team-list/components/manage-team-button.test.tsx create mode 100644 apps/web/modules/ee/teams/team-list/components/team-settings/delete-team.test.tsx create mode 100644 apps/web/modules/ee/teams/team-list/components/team-settings/team-settings-modal.test.tsx create mode 100644 apps/web/modules/ee/teams/team-list/components/teams-table.test.tsx create mode 100644 apps/web/modules/ee/teams/team-list/lib/project.test.ts create mode 100644 apps/web/modules/ee/teams/team-list/lib/team.test.ts create mode 100644 apps/web/modules/ee/teams/utils/teams.test.ts diff --git a/apps/web/modules/ee/teams/lib/roles.test.ts b/apps/web/modules/ee/teams/lib/roles.test.ts new file mode 100644 index 0000000000..f75b19d1a2 --- /dev/null +++ b/apps/web/modules/ee/teams/lib/roles.test.ts @@ -0,0 +1,113 @@ +import { validateInputs } from "@/lib/utils/validate"; +import { Prisma } from "@prisma/client"; +import { beforeEach, describe, expect, test, vi } from "vitest"; +import { prisma } from "@formbricks/database"; +import { logger } from "@formbricks/logger"; +import { DatabaseError, UnknownError } from "@formbricks/types/errors"; +import { getProjectPermissionByUserId, getTeamRoleByTeamIdUserId } from "./roles"; + +vi.mock("@formbricks/database", () => ({ + prisma: { + projectTeam: { findMany: vi.fn() }, + teamUser: { findUnique: vi.fn() }, + }, +})); + +vi.mock("@formbricks/logger", () => ({ logger: { error: vi.fn() } })); +vi.mock("@/lib/utils/validate", () => ({ validateInputs: vi.fn() })); + +const mockUserId = "user-1"; +const mockProjectId = "project-1"; +const mockTeamId = "team-1"; + +describe("roles lib", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + describe("getProjectPermissionByUserId", () => { + test("returns null if no memberships", async () => { + vi.mocked(prisma.projectTeam.findMany).mockResolvedValueOnce([]); + const result = await getProjectPermissionByUserId(mockUserId, mockProjectId); + expect(result).toBeNull(); + expect(validateInputs).toHaveBeenCalledWith( + [mockUserId, expect.anything()], + [mockProjectId, expect.anything()] + ); + }); + + test("returns 'manage' if any membership has manage", async () => { + vi.mocked(prisma.projectTeam.findMany).mockResolvedValueOnce([ + { permission: "read" }, + { permission: "manage" }, + { permission: "readWrite" }, + ] as any); + const result = await getProjectPermissionByUserId(mockUserId, mockProjectId); + expect(result).toBe("manage"); + }); + + test("returns 'readWrite' if highest is readWrite", async () => { + vi.mocked(prisma.projectTeam.findMany).mockResolvedValueOnce([ + { permission: "read" }, + { permission: "readWrite" }, + ] as any); + const result = await getProjectPermissionByUserId(mockUserId, mockProjectId); + expect(result).toBe("readWrite"); + }); + + test("returns 'read' if only read", async () => { + vi.mocked(prisma.projectTeam.findMany).mockResolvedValueOnce([{ permission: "read" }] as any); + const result = await getProjectPermissionByUserId(mockUserId, mockProjectId); + expect(result).toBe("read"); + }); + + test("throws DatabaseError on PrismaClientKnownRequestError", async () => { + const error = new Prisma.PrismaClientKnownRequestError("fail", { + code: "P2002", + clientVersion: "1.0.0", + }); + vi.mocked(prisma.projectTeam.findMany).mockRejectedValueOnce(error); + await expect(getProjectPermissionByUserId(mockUserId, mockProjectId)).rejects.toThrow(DatabaseError); + expect(logger.error).toHaveBeenCalledWith(error, expect.any(String)); + }); + + test("throws UnknownError on generic error", async () => { + const error = new Error("fail"); + vi.mocked(prisma.projectTeam.findMany).mockRejectedValueOnce(error); + await expect(getProjectPermissionByUserId(mockUserId, mockProjectId)).rejects.toThrow(UnknownError); + }); + }); + + describe("getTeamRoleByTeamIdUserId", () => { + test("returns null if no teamUser", async () => { + vi.mocked(prisma.teamUser.findUnique).mockResolvedValueOnce(null); + const result = await getTeamRoleByTeamIdUserId(mockTeamId, mockUserId); + expect(result).toBeNull(); + expect(validateInputs).toHaveBeenCalledWith( + [mockTeamId, expect.anything()], + [mockUserId, expect.anything()] + ); + }); + + test("returns role if teamUser exists", async () => { + vi.mocked(prisma.teamUser.findUnique).mockResolvedValueOnce({ role: "member" }); + const result = await getTeamRoleByTeamIdUserId(mockTeamId, mockUserId); + expect(result).toBe("member"); + }); + + test("throws DatabaseError on PrismaClientKnownRequestError", async () => { + const error = new Prisma.PrismaClientKnownRequestError("fail", { + code: "P2002", + clientVersion: "1.0.0", + }); + vi.mocked(prisma.teamUser.findUnique).mockRejectedValueOnce(error); + await expect(getTeamRoleByTeamIdUserId(mockTeamId, mockUserId)).rejects.toThrow(DatabaseError); + }); + + test("throws error on generic error", async () => { + const error = new Error("fail"); + vi.mocked(prisma.teamUser.findUnique).mockRejectedValueOnce(error); + await expect(getTeamRoleByTeamIdUserId(mockTeamId, mockUserId)).rejects.toThrow(error); + }); + }); +}); diff --git a/apps/web/modules/ee/teams/project-teams/components/access-table.test.tsx b/apps/web/modules/ee/teams/project-teams/components/access-table.test.tsx new file mode 100644 index 0000000000..f08992510b --- /dev/null +++ b/apps/web/modules/ee/teams/project-teams/components/access-table.test.tsx @@ -0,0 +1,41 @@ +import { TProjectTeam } from "@/modules/ee/teams/project-teams/types/team"; +import { TeamPermissionMapping } from "@/modules/ee/teams/utils/teams"; +import { cleanup, render, screen } from "@testing-library/react"; +import { afterEach, describe, expect, test, vi } from "vitest"; +import { AccessTable } from "./access-table"; + +vi.mock("@tolgee/react", () => ({ + useTranslate: () => ({ t: (k: string) => k }), +})); + +describe("AccessTable", () => { + afterEach(() => { + cleanup(); + }); + + test("renders no teams found row when teams is empty", () => { + render(); + expect(screen.getByText("environments.project.teams.no_teams_found")).toBeInTheDocument(); + }); + + test("renders team rows with correct data and permission mapping", () => { + const teams: TProjectTeam[] = [ + { id: "1", name: "Team A", memberCount: 1, permission: "readWrite" }, + { id: "2", name: "Team B", memberCount: 2, permission: "read" }, + ]; + render(); + expect(screen.getByText("Team A")).toBeInTheDocument(); + expect(screen.getByText("Team B")).toBeInTheDocument(); + expect(screen.getByText("1 common.member")).toBeInTheDocument(); + expect(screen.getByText("2 common.members")).toBeInTheDocument(); + expect(screen.getByText(TeamPermissionMapping["readWrite"])).toBeInTheDocument(); + expect(screen.getByText(TeamPermissionMapping["read"])).toBeInTheDocument(); + }); + + test("renders table headers with tolgee keys", () => { + render(); + expect(screen.getByText("environments.project.teams.team_name")).toBeInTheDocument(); + expect(screen.getByText("common.size")).toBeInTheDocument(); + expect(screen.getByText("environments.project.teams.permission")).toBeInTheDocument(); + }); +}); diff --git a/apps/web/modules/ee/teams/project-teams/components/access-view.test.tsx b/apps/web/modules/ee/teams/project-teams/components/access-view.test.tsx new file mode 100644 index 0000000000..fd888856ea --- /dev/null +++ b/apps/web/modules/ee/teams/project-teams/components/access-view.test.tsx @@ -0,0 +1,72 @@ +import { TProjectTeam } from "@/modules/ee/teams/project-teams/types/team"; +import { cleanup, render, screen } from "@testing-library/react"; +import { afterEach, describe, expect, test, vi } from "vitest"; +import { AccessView } from "./access-view"; + +vi.mock("@/app/(app)/environments/[environmentId]/settings/components/SettingsCard", () => ({ + SettingsCard: ({ title, description, children }: any) => ( +
+
{title}
+
{description}
+ {children} +
+ ), +})); + +vi.mock("@/modules/ee/teams/project-teams/components/manage-team", () => ({ + ManageTeam: ({ environmentId, isOwnerOrManager }: any) => ( + + ), +})); + +vi.mock("@/modules/ee/teams/project-teams/components/access-table", () => ({ + AccessTable: ({ teams }: any) => ( +
+ {teams.length === 0 ? "No teams" : `Teams: ${teams.map((t: any) => t.name).join(",")}`} +
+ ), +})); + +describe("AccessView", () => { + afterEach(() => { + cleanup(); + }); + + const baseProps = { + environmentId: "env-1", + isOwnerOrManager: true, + teams: [ + { id: "1", name: "Team A", memberCount: 2, permission: "readWrite" } as TProjectTeam, + { id: "2", name: "Team B", memberCount: 1, permission: "read" } as TProjectTeam, + ], + }; + + test("renders SettingsCard with tolgee strings and children", () => { + render(); + expect(screen.getByTestId("SettingsCard")).toBeInTheDocument(); + expect(screen.getByText("common.team_access")).toBeInTheDocument(); + expect(screen.getByText("environments.project.teams.team_settings_description")).toBeInTheDocument(); + }); + + test("renders ManageTeam with correct props", () => { + render(); + expect(screen.getByTestId("ManageTeam")).toHaveTextContent("ManageTeam env-1 owner"); + }); + + test("renders AccessTable with teams", () => { + render(); + expect(screen.getByTestId("AccessTable")).toHaveTextContent("Teams: Team A,Team B"); + }); + + test("renders AccessTable with no teams", () => { + render(); + expect(screen.getByTestId("AccessTable")).toHaveTextContent("No teams"); + }); + + test("renders ManageTeam as not-owner when isOwnerOrManager is false", () => { + render(); + expect(screen.getByTestId("ManageTeam")).toHaveTextContent("not-owner"); + }); +}); diff --git a/apps/web/modules/ee/teams/project-teams/components/manage-team.test.tsx b/apps/web/modules/ee/teams/project-teams/components/manage-team.test.tsx new file mode 100644 index 0000000000..b74bfb37e5 --- /dev/null +++ b/apps/web/modules/ee/teams/project-teams/components/manage-team.test.tsx @@ -0,0 +1,46 @@ +import { cleanup, render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { afterEach, describe, expect, test, vi } from "vitest"; +import { ManageTeam } from "./manage-team"; + +vi.mock("next/navigation", () => ({ + useRouter: () => ({ push: vi.fn() }), +})); + +vi.mock("@/modules/ui/components/button", () => ({ + Button: ({ children, ...props }: any) => , +})); + +vi.mock("@/modules/ui/components/tooltip", () => ({ + TooltipRenderer: ({ tooltipContent, children }: any) => ( +
+ {tooltipContent} + {children} +
+ ), +})); + +describe("ManageTeam", () => { + afterEach(() => { + cleanup(); + }); + + test("renders enabled button and navigates when isOwnerOrManager is true", async () => { + render(); + const button = screen.getByRole("button"); + expect(button).toBeEnabled(); + expect(screen.getByText("environments.project.teams.manage_teams")).toBeInTheDocument(); + await userEvent.click(button); + }); + + test("renders disabled button with tooltip when isOwnerOrManager is false", () => { + render(); + const button = screen.getByRole("button"); + expect(button).toBeDisabled(); + expect(screen.getByText("environments.project.teams.manage_teams")).toBeInTheDocument(); + expect(screen.getByTestId("TooltipRenderer")).toBeInTheDocument(); + expect( + screen.getByText("environments.project.teams.only_organization_owners_and_managers_can_manage_teams") + ).toBeInTheDocument(); + }); +}); diff --git a/apps/web/modules/ee/teams/project-teams/lib/team.test.ts b/apps/web/modules/ee/teams/project-teams/lib/team.test.ts new file mode 100644 index 0000000000..77cfeaf50a --- /dev/null +++ b/apps/web/modules/ee/teams/project-teams/lib/team.test.ts @@ -0,0 +1,68 @@ +import { Prisma } from "@prisma/client"; +import { beforeEach, describe, expect, test, vi } from "vitest"; +import { prisma } from "@formbricks/database"; +import { DatabaseError, ResourceNotFoundError } from "@formbricks/types/errors"; +import { getTeamsByProjectId } from "./team"; + +vi.mock("@formbricks/database", () => ({ + prisma: { + project: { findUnique: vi.fn() }, + team: { findMany: vi.fn() }, + }, +})); + +vi.mock("@/lib/cache/team", () => ({ teamCache: { tag: { byProjectId: vi.fn(), byId: vi.fn() } } })); +vi.mock("@/lib/project/cache", () => ({ projectCache: { tag: { byId: vi.fn() } } })); + +const mockProject = { id: "p1" }; +const mockTeams = [ + { + id: "t1", + name: "Team 1", + projectTeams: [{ permission: "readWrite" }], + _count: { teamUsers: 2 }, + }, + { + id: "t2", + name: "Team 2", + projectTeams: [{ permission: "manage" }], + _count: { teamUsers: 3 }, + }, +]; + +describe("getTeamsByProjectId", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + test("returns mapped teams for valid project", async () => { + vi.mocked(prisma.project.findUnique).mockResolvedValueOnce(mockProject); + vi.mocked(prisma.team.findMany).mockResolvedValueOnce(mockTeams); + const result = await getTeamsByProjectId("p1"); + expect(result).toEqual([ + { id: "t1", name: "Team 1", permission: "readWrite", memberCount: 2 }, + { id: "t2", name: "Team 2", permission: "manage", memberCount: 3 }, + ]); + expect(prisma.project.findUnique).toHaveBeenCalledWith({ where: { id: "p1" } }); + expect(prisma.team.findMany).toHaveBeenCalled(); + }); + + test("throws ResourceNotFoundError if project does not exist", async () => { + vi.mocked(prisma.project.findUnique).mockResolvedValueOnce(null); + await expect(getTeamsByProjectId("p1")).rejects.toThrow(ResourceNotFoundError); + }); + + test("throws DatabaseError on Prisma known error", async () => { + vi.mocked(prisma.project.findUnique).mockResolvedValueOnce(mockProject); + vi.mocked(prisma.team.findMany).mockRejectedValueOnce( + new Prisma.PrismaClientKnownRequestError("fail", { code: "P2002", clientVersion: "1.0.0" }) + ); + await expect(getTeamsByProjectId("p1")).rejects.toThrow(DatabaseError); + }); + + test("throws unknown error on unexpected error", async () => { + vi.mocked(prisma.project.findUnique).mockResolvedValueOnce(mockProject); + vi.mocked(prisma.team.findMany).mockRejectedValueOnce(new Error("unexpected")); + await expect(getTeamsByProjectId("p1")).rejects.toThrow("unexpected"); + }); +}); diff --git a/apps/web/modules/ee/teams/project-teams/loading.test.tsx b/apps/web/modules/ee/teams/project-teams/loading.test.tsx new file mode 100644 index 0000000000..dba81dd2dc --- /dev/null +++ b/apps/web/modules/ee/teams/project-teams/loading.test.tsx @@ -0,0 +1,41 @@ +import { cleanup, render, screen } from "@testing-library/react"; +import { afterEach, describe, expect, test, vi } from "vitest"; +import { TeamsLoading } from "./loading"; + +vi.mock("@/modules/projects/settings/components/project-config-navigation", () => ({ + ProjectConfigNavigation: ({ activeId, loading }: any) => ( +
{`${activeId}-${loading}`}
+ ), +})); +vi.mock("@/modules/ui/components/page-content-wrapper", () => ({ + PageContentWrapper: ({ children }: any) =>
{children}
, +})); +vi.mock("@/modules/ui/components/page-header", () => ({ + PageHeader: ({ children, pageTitle }: any) => ( +
+ {pageTitle} + {children} +
+ ), +})); + +describe("TeamsLoading", () => { + afterEach(() => { + cleanup(); + }); + + test("renders loading skeletons and navigation", () => { + render(); + expect(screen.getByTestId("PageContentWrapper")).toBeInTheDocument(); + expect(screen.getByTestId("PageHeader")).toBeInTheDocument(); + expect(screen.getByTestId("ProjectConfigNavigation")).toHaveTextContent("teams-true"); + + // Check for the presence of multiple skeleton loaders (at least one) + const skeletonLoaders = screen.getAllByRole("generic", { name: "" }); // Assuming skeleton divs don't have specific roles/names + // Filter for elements with animate-pulse class + const pulseElements = skeletonLoaders.filter((el) => el.classList.contains("animate-pulse")); + expect(pulseElements.length).toBeGreaterThan(0); + + expect(screen.getByText("common.project_configuration")).toBeInTheDocument(); + }); +}); diff --git a/apps/web/modules/ee/teams/project-teams/page.test.tsx b/apps/web/modules/ee/teams/project-teams/page.test.tsx new file mode 100644 index 0000000000..b044b964b6 --- /dev/null +++ b/apps/web/modules/ee/teams/project-teams/page.test.tsx @@ -0,0 +1,73 @@ +import { getEnvironmentAuth } from "@/modules/environments/lib/utils"; +import { getTranslate } from "@/tolgee/server"; +import { cleanup, render, screen } from "@testing-library/react"; +import { afterEach, beforeEach, describe, expect, test, vi } from "vitest"; +import { getTeamsByProjectId } from "./lib/team"; +import { ProjectTeams } from "./page"; + +vi.mock("@/modules/ee/teams/project-teams/components/access-view", () => ({ + AccessView: (props: any) =>
{JSON.stringify(props)}
, +})); +vi.mock("@/modules/environments/lib/utils", () => ({ + getEnvironmentAuth: vi.fn(), +})); +vi.mock("@/modules/projects/settings/components/project-config-navigation", () => ({ + ProjectConfigNavigation: (props: any) => ( +
{JSON.stringify(props)}
+ ), +})); +vi.mock("@/modules/ui/components/page-content-wrapper", () => ({ + PageContentWrapper: ({ children }: any) =>
{children}
, +})); +vi.mock("@/modules/ui/components/page-header", () => ({ + PageHeader: ({ children, pageTitle }: any) => ( +
+ {pageTitle} + {children} +
+ ), +})); +vi.mock("./lib/team", () => ({ + getTeamsByProjectId: vi.fn(), +})); + +vi.mock("@/tolgee/server", () => ({ + getTranslate: vi.fn(), +})); + +describe("ProjectTeams", () => { + const params = Promise.resolve({ environmentId: "env-1" }); + + beforeEach(() => { + vi.mocked(getTeamsByProjectId).mockResolvedValue([ + { id: "team-1", name: "Team 1", memberCount: 2, permission: "readWrite" }, + { id: "team-2", name: "Team 2", memberCount: 1, permission: "read" }, + ]); + vi.mocked(getTranslate).mockResolvedValue((key) => key); + + vi.mocked(getEnvironmentAuth).mockResolvedValue({ + project: { id: "project-1" }, + isOwner: true, + isManager: false, + } as any); + }); + afterEach(() => { + cleanup(); + }); + + test("renders all main components and passes correct props", async () => { + const ui = await ProjectTeams({ params }); + render(ui); + expect(screen.getByTestId("PageContentWrapper")).toBeInTheDocument(); + expect(screen.getByTestId("PageHeader")).toBeInTheDocument(); + expect(screen.getByText("common.project_configuration")).toBeInTheDocument(); + expect(screen.getByTestId("ProjectConfigNavigation")).toBeInTheDocument(); + expect(screen.getByTestId("AccessView")).toHaveTextContent('"environmentId":"env-1"'); + expect(screen.getByTestId("AccessView")).toHaveTextContent('"isOwnerOrManager":true'); + }); + + test("throws error if teams is null", async () => { + vi.mocked(getTeamsByProjectId).mockResolvedValue(null); + await expect(ProjectTeams({ params })).rejects.toThrow("common.teams_not_found"); + }); +}); diff --git a/apps/web/modules/ee/teams/team-list/actions.test.ts b/apps/web/modules/ee/teams/team-list/actions.test.ts new file mode 100644 index 0000000000..54fcdfb31f --- /dev/null +++ b/apps/web/modules/ee/teams/team-list/actions.test.ts @@ -0,0 +1,86 @@ +import { ZTeamSettingsFormSchema } from "@/modules/ee/teams/team-list/types/team"; +import { cleanup } from "@testing-library/react"; +import { afterEach, describe, expect, test, vi } from "vitest"; +import { + createTeamAction, + deleteTeamAction, + getTeamDetailsAction, + getTeamRoleAction, + updateTeamDetailsAction, +} from "./actions"; + +vi.mock("@/lib/utils/action-client", () => ({ + authenticatedActionClient: { + schema: () => ({ + action: (fn: any) => fn, + }), + }, + checkAuthorizationUpdated: vi.fn(), +})); +vi.mock("@/lib/utils/action-client-middleware", () => ({ + checkAuthorizationUpdated: vi.fn(), +})); +vi.mock("@/lib/utils/helper", () => ({ + getOrganizationIdFromTeamId: vi.fn(async (id: string) => `org-${id}`), +})); +vi.mock("@/modules/ee/role-management/actions", () => ({ + checkRoleManagementPermission: vi.fn(), +})); +vi.mock("@/modules/ee/teams/lib/roles", () => ({ + getTeamRoleByTeamIdUserId: vi.fn(async () => "admin"), +})); +vi.mock("@/modules/ee/teams/team-list/lib/team", () => ({ + createTeam: vi.fn(async () => "team-created"), + getTeamDetails: vi.fn(async () => ({ id: "team-1" })), + deleteTeam: vi.fn(async () => true), + updateTeamDetails: vi.fn(async () => ({ updated: true })), +})); + +describe("action.ts", () => { + const ctx = { + user: { id: "user-1" }, + } as any; + afterEach(() => { + cleanup(); + }); + + test("createTeamAction calls dependencies and returns result", async () => { + const result = await createTeamAction({ + ctx, + parsedInput: { organizationId: "org-1", name: "Team X" }, + } as any); + expect(result).toBe("team-created"); + }); + + test("getTeamDetailsAction calls dependencies and returns result", async () => { + const result = await getTeamDetailsAction({ + ctx, + parsedInput: { teamId: "team-1" }, + } as any); + expect(result).toEqual({ id: "team-1" }); + }); + + test("deleteTeamAction calls dependencies and returns result", async () => { + const result = await deleteTeamAction({ + ctx, + parsedInput: { teamId: "team-1" }, + } as any); + expect(result).toBe(true); + }); + + test("updateTeamDetailsAction calls dependencies and returns result", async () => { + const result = await updateTeamDetailsAction({ + ctx, + parsedInput: { teamId: "team-1", data: {} as typeof ZTeamSettingsFormSchema._type }, + } as any); + expect(result).toEqual({ updated: true }); + }); + + test("getTeamRoleAction calls dependencies and returns result", async () => { + const result = await getTeamRoleAction({ + ctx, + parsedInput: { teamId: "team-1" }, + } as any); + expect(result).toBe("admin"); + }); +}); diff --git a/apps/web/modules/ee/teams/team-list/action.ts b/apps/web/modules/ee/teams/team-list/actions.ts similarity index 100% rename from apps/web/modules/ee/teams/team-list/action.ts rename to apps/web/modules/ee/teams/team-list/actions.ts diff --git a/apps/web/modules/ee/teams/team-list/components/create-team-button.test.tsx b/apps/web/modules/ee/teams/team-list/components/create-team-button.test.tsx new file mode 100644 index 0000000000..5a9e7cf105 --- /dev/null +++ b/apps/web/modules/ee/teams/team-list/components/create-team-button.test.tsx @@ -0,0 +1,27 @@ +import { cleanup, render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { afterEach, describe, expect, test, vi } from "vitest"; +import { CreateTeamButton } from "./create-team-button"; + +vi.mock("@/modules/ee/teams/team-list/components/create-team-modal", () => ({ + CreateTeamModal: ({ open, setOpen, organizationId }: any) => + open ?
{organizationId}
: null, +})); + +describe("CreateTeamButton", () => { + afterEach(() => { + cleanup(); + }); + + test("renders button with tolgee string", () => { + render(); + expect(screen.getByRole("button")).toBeInTheDocument(); + expect(screen.getByText("environments.settings.teams.create_new_team")).toBeInTheDocument(); + }); + + test("opens CreateTeamModal on button click", async () => { + render(); + await userEvent.click(screen.getByRole("button")); + expect(screen.getByTestId("CreateTeamModal")).toHaveTextContent("org-2"); + }); +}); diff --git a/apps/web/modules/ee/teams/team-list/components/create-team-modal.test.tsx b/apps/web/modules/ee/teams/team-list/components/create-team-modal.test.tsx new file mode 100644 index 0000000000..09671e52fc --- /dev/null +++ b/apps/web/modules/ee/teams/team-list/components/create-team-modal.test.tsx @@ -0,0 +1,77 @@ +import { getFormattedErrorMessage } from "@/lib/utils/helper"; +import { createTeamAction } from "@/modules/ee/teams/team-list/actions"; +import { cleanup, render, screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import toast from "react-hot-toast"; +import { afterEach, describe, expect, test, vi } from "vitest"; +import { CreateTeamModal } from "./create-team-modal"; + +vi.mock("@/modules/ui/components/modal", () => ({ + Modal: ({ children }: any) =>
{children}
, +})); + +vi.mock("@/modules/ee/teams/team-list/actions", () => ({ + createTeamAction: vi.fn(), +})); +vi.mock("@/lib/utils/helper", () => ({ + getFormattedErrorMessage: vi.fn(() => "error-message"), +})); + +describe("CreateTeamModal", () => { + afterEach(() => { + cleanup(); + }); + + const setOpen = vi.fn(); + + test("renders modal, form, and tolgee strings", () => { + render(); + expect(screen.getByTestId("Modal")).toBeInTheDocument(); + expect(screen.getByText("environments.settings.teams.create_new_team")).toBeInTheDocument(); + expect(screen.getByText("environments.settings.teams.team_name")).toBeInTheDocument(); + expect(screen.getByText("common.cancel")).toBeInTheDocument(); + expect(screen.getByText("environments.settings.teams.create")).toBeInTheDocument(); + }); + + test("calls setOpen(false) and resets teamName on cancel", async () => { + render(); + const input = screen.getByPlaceholderText("environments.settings.teams.enter_team_name"); + await userEvent.type(input, "My Team"); + await userEvent.click(screen.getByText("common.cancel")); + expect(setOpen).toHaveBeenCalledWith(false); + expect((input as HTMLInputElement).value).toBe(""); + }); + + test("submit button is disabled when input is empty", () => { + render(); + expect(screen.getByText("environments.settings.teams.create")).toBeDisabled(); + }); + + test("calls createTeamAction, shows success toast, calls onCreate, refreshes and closes modal on success", async () => { + vi.mocked(createTeamAction).mockResolvedValue({ data: "team-123" }); + const onCreate = vi.fn(); + render(); + const input = screen.getByPlaceholderText("environments.settings.teams.enter_team_name"); + await userEvent.type(input, "My Team"); + await userEvent.click(screen.getByText("environments.settings.teams.create")); + await waitFor(() => { + expect(createTeamAction).toHaveBeenCalledWith({ name: "My Team", organizationId: "org-1" }); + expect(toast.success).toHaveBeenCalledWith("environments.settings.teams.team_created_successfully"); + expect(onCreate).toHaveBeenCalledWith("team-123"); + expect(setOpen).toHaveBeenCalledWith(false); + expect((input as HTMLInputElement).value).toBe(""); + }); + }); + + test("shows error toast if createTeamAction fails", async () => { + vi.mocked(createTeamAction).mockResolvedValue({}); + render(); + const input = screen.getByPlaceholderText("environments.settings.teams.enter_team_name"); + await userEvent.type(input, "My Team"); + await userEvent.click(screen.getByText("environments.settings.teams.create")); + await waitFor(() => { + expect(getFormattedErrorMessage).toHaveBeenCalled(); + expect(toast.error).toHaveBeenCalledWith("error-message"); + }); + }); +}); diff --git a/apps/web/modules/ee/teams/team-list/components/create-team-modal.tsx b/apps/web/modules/ee/teams/team-list/components/create-team-modal.tsx index 41da0a1e1a..65dd5a0a0a 100644 --- a/apps/web/modules/ee/teams/team-list/components/create-team-modal.tsx +++ b/apps/web/modules/ee/teams/team-list/components/create-team-modal.tsx @@ -1,7 +1,7 @@ "use client"; import { getFormattedErrorMessage } from "@/lib/utils/helper"; -import { createTeamAction } from "@/modules/ee/teams/team-list/action"; +import { createTeamAction } from "@/modules/ee/teams/team-list/actions"; import { Button } from "@/modules/ui/components/button"; import { Input } from "@/modules/ui/components/input"; import { Label } from "@/modules/ui/components/label"; diff --git a/apps/web/modules/ee/teams/team-list/components/manage-team-button.test.tsx b/apps/web/modules/ee/teams/team-list/components/manage-team-button.test.tsx new file mode 100644 index 0000000000..df0bdc309d --- /dev/null +++ b/apps/web/modules/ee/teams/team-list/components/manage-team-button.test.tsx @@ -0,0 +1,42 @@ +import { cleanup, render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { afterEach, describe, expect, test, vi } from "vitest"; +import { ManageTeamButton } from "./manage-team-button"; + +vi.mock("@/modules/ui/components/tooltip", () => ({ + TooltipRenderer: ({ shouldRender, tooltipContent, children }: any) => + shouldRender ? ( +
+ {tooltipContent} + {children} +
+ ) : ( + <>{children} + ), +})); + +describe("ManageTeamButton", () => { + afterEach(() => { + cleanup(); + }); + + test("renders enabled button and calls onClick", async () => { + const onClick = vi.fn(); + render(); + const button = screen.getByRole("button"); + expect(button).toBeEnabled(); + expect(screen.getByText("environments.settings.teams.manage_team")).toBeInTheDocument(); + await userEvent.click(button); + expect(onClick).toHaveBeenCalled(); + }); + + test("renders disabled button with tooltip", () => { + const onClick = vi.fn(); + render(); + const button = screen.getByRole("button"); + expect(button).toBeDisabled(); + expect(screen.getByText("environments.settings.teams.manage_team")).toBeInTheDocument(); + expect(screen.getByTestId("TooltipRenderer")).toBeInTheDocument(); + expect(screen.getByText("environments.settings.teams.manage_team_disabled")).toBeInTheDocument(); + }); +}); diff --git a/apps/web/modules/ee/teams/team-list/components/team-settings/delete-team.test.tsx b/apps/web/modules/ee/teams/team-list/components/team-settings/delete-team.test.tsx new file mode 100644 index 0000000000..96635bcf9e --- /dev/null +++ b/apps/web/modules/ee/teams/team-list/components/team-settings/delete-team.test.tsx @@ -0,0 +1,99 @@ +import { deleteTeamAction } from "@/modules/ee/teams/team-list/actions"; +import { TTeam } from "@/modules/ee/teams/team-list/types/team"; +import { cleanup, render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import toast from "react-hot-toast"; +import { afterEach, describe, expect, test, vi } from "vitest"; +import { DeleteTeam } from "./delete-team"; + +vi.mock("@/modules/ui/components/label", () => ({ + Label: ({ children }: any) => , +})); + +vi.mock("@/modules/ui/components/button", () => ({ + Button: ({ children, ...props }: any) => , +})); +vi.mock("@/modules/ui/components/tooltip", () => ({ + TooltipRenderer: ({ shouldRender, tooltipContent, children }: any) => + shouldRender ? ( +
+ {tooltipContent} + {children} +
+ ) : ( + <>{children} + ), +})); +vi.mock("@/modules/ui/components/delete-dialog", () => ({ + DeleteDialog: ({ open, setOpen, deleteWhat, text, onDelete, isDeleting }: any) => + open ? ( +
+ {deleteWhat} + {text} + +
+ ) : null, +})); +vi.mock("next/navigation", () => ({ + useRouter: () => ({ refresh: vi.fn() }), +})); + +vi.mock("@/modules/ee/teams/team-list/actions", () => ({ + deleteTeamAction: vi.fn(), +})); + +describe("DeleteTeam", () => { + afterEach(() => { + cleanup(); + }); + + const baseProps = { + teamId: "team-1" as TTeam["id"], + onDelete: vi.fn(), + isOwnerOrManager: true, + }; + + test("renders danger zone label and delete button enabled for owner/manager", () => { + render(); + expect(screen.getByText("common.danger_zone")).toBeInTheDocument(); + expect(screen.getByRole("button", { name: "environments.settings.teams.delete_team" })).toBeEnabled(); + }); + + test("renders tooltip and disables button if not owner/manager", () => { + render(); + expect(screen.getByTestId("TooltipRenderer")).toBeInTheDocument(); + expect(screen.getByText("environments.settings.teams.team_deletion_not_allowed")).toBeInTheDocument(); + expect(screen.getByRole("button", { name: "environments.settings.teams.delete_team" })).toBeDisabled(); + }); + + test("opens dialog on delete button click", async () => { + render(); + await userEvent.click(screen.getByRole("button", { name: "environments.settings.teams.delete_team" })); + expect(screen.getByTestId("DeleteDialog")).toBeInTheDocument(); + expect(screen.getByText("common.team")).toBeInTheDocument(); + expect( + screen.getByText("environments.settings.teams.are_you_sure_you_want_to_delete_this_team") + ).toBeInTheDocument(); + }); + + test("calls deleteTeamAction, shows success toast, calls onDelete, and refreshes on confirm", async () => { + vi.mocked(deleteTeamAction).mockResolvedValue({ data: true }); + const onDelete = vi.fn(); + render(); + await userEvent.click(screen.getByRole("button", { name: "environments.settings.teams.delete_team" })); + await userEvent.click(screen.getByText("Confirm")); + expect(deleteTeamAction).toHaveBeenCalledWith({ teamId: baseProps.teamId }); + expect(toast.success).toHaveBeenCalledWith("environments.settings.teams.team_deleted_successfully"); + expect(onDelete).toHaveBeenCalled(); + }); + + test("shows error toast if deleteTeamAction fails", async () => { + vi.mocked(deleteTeamAction).mockResolvedValue({ data: false }); + render(); + await userEvent.click(screen.getByRole("button", { name: "environments.settings.teams.delete_team" })); + await userEvent.click(screen.getByText("Confirm")); + expect(toast.error).toHaveBeenCalledWith("common.something_went_wrong_please_try_again"); + }); +}); diff --git a/apps/web/modules/ee/teams/team-list/components/team-settings/delete-team.tsx b/apps/web/modules/ee/teams/team-list/components/team-settings/delete-team.tsx index 2c1a6f75da..629a45a35f 100644 --- a/apps/web/modules/ee/teams/team-list/components/team-settings/delete-team.tsx +++ b/apps/web/modules/ee/teams/team-list/components/team-settings/delete-team.tsx @@ -1,6 +1,6 @@ "use client"; -import { deleteTeamAction } from "@/modules/ee/teams/team-list/action"; +import { deleteTeamAction } from "@/modules/ee/teams/team-list/actions"; import { TTeam } from "@/modules/ee/teams/team-list/types/team"; import { Button } from "@/modules/ui/components/button"; import { DeleteDialog } from "@/modules/ui/components/delete-dialog"; diff --git a/apps/web/modules/ee/teams/team-list/components/team-settings/team-settings-modal.test.tsx b/apps/web/modules/ee/teams/team-list/components/team-settings/team-settings-modal.test.tsx new file mode 100644 index 0000000000..8fc3466b73 --- /dev/null +++ b/apps/web/modules/ee/teams/team-list/components/team-settings/team-settings-modal.test.tsx @@ -0,0 +1,136 @@ +import { ZTeamPermission } from "@/modules/ee/teams/project-teams/types/team"; +import { updateTeamDetailsAction } from "@/modules/ee/teams/team-list/actions"; +import { TOrganizationMember, TTeamDetails, ZTeamRole } from "@/modules/ee/teams/team-list/types/team"; +import { cleanup, render, screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import toast from "react-hot-toast"; +import { afterEach, describe, expect, test, vi } from "vitest"; +import { TeamSettingsModal } from "./team-settings-modal"; + +vi.mock("@/modules/ui/components/modal", () => ({ + Modal: ({ children, ...props }: any) =>
{children}
, +})); + +vi.mock("@/modules/ee/teams/team-list/components/team-settings/delete-team", () => ({ + DeleteTeam: () =>
, +})); +vi.mock("@/modules/ee/teams/team-list/actions", () => ({ + updateTeamDetailsAction: vi.fn(), +})); + +vi.mock("next/navigation", () => ({ + useRouter: () => ({ refresh: vi.fn() }), +})); + +describe("TeamSettingsModal", () => { + afterEach(() => { + cleanup(); + }); + + const orgMembers: TOrganizationMember[] = [ + { id: "1", name: "Alice", role: "member" }, + { id: "2", name: "Bob", role: "manager" }, + ]; + const orgProjects = [ + { id: "p1", name: "Project 1" }, + { id: "p2", name: "Project 2" }, + ]; + const team: TTeamDetails = { + id: "t1", + name: "Team 1", + members: [{ name: "Alice", userId: "1", role: ZTeamRole.enum.contributor }], + projects: [ + { projectName: "pro1", projectId: "p1", permission: ZTeamPermission.enum.read }, + { projectName: "pro2", projectId: "p2", permission: ZTeamPermission.enum.readWrite }, + ], + organizationId: "org1", + }; + const setOpen = vi.fn(); + + test("renders modal, form, and tolgee strings", () => { + render( + + ); + expect(screen.getByTestId("Modal")).toBeInTheDocument(); + expect(screen.getByText("environments.settings.teams.team_name_settings_title")).toBeInTheDocument(); + expect(screen.getByText("environments.settings.teams.team_settings_description")).toBeInTheDocument(); + expect(screen.getByText("common.team_name")).toBeInTheDocument(); + expect(screen.getByText("common.members")).toBeInTheDocument(); + expect(screen.getByText("environments.settings.teams.add_members_description")).toBeInTheDocument(); + expect(screen.getByText("Add member")).toBeInTheDocument(); + expect(screen.getByText("Projects")).toBeInTheDocument(); + expect(screen.getByText("Add project")).toBeInTheDocument(); + expect(screen.getByText("environments.settings.teams.add_projects_description")).toBeInTheDocument(); + expect(screen.getByText("common.cancel")).toBeInTheDocument(); + expect(screen.getByText("common.save")).toBeInTheDocument(); + expect(screen.getByTestId("DeleteTeam")).toBeInTheDocument(); + }); + + test("calls setOpen(false) when cancel button is clicked", async () => { + render( + + ); + await userEvent.click(screen.getByText("common.cancel")); + expect(setOpen).toHaveBeenCalledWith(false); + }); + + test("calls updateTeamDetailsAction and shows success toast on submit", async () => { + vi.mocked(updateTeamDetailsAction).mockResolvedValue({ data: true }); + render( + + ); + await userEvent.click(screen.getByText("common.save")); + await waitFor(() => { + expect(updateTeamDetailsAction).toHaveBeenCalled(); + expect(toast.success).toHaveBeenCalledWith("environments.settings.teams.team_updated_successfully"); + expect(setOpen).toHaveBeenCalledWith(false); + }); + }); + + test("shows error toast if updateTeamDetailsAction fails", async () => { + vi.mocked(updateTeamDetailsAction).mockResolvedValue({ data: false }); + render( + + ); + await userEvent.click(screen.getByText("common.save")); + await waitFor(() => { + expect(toast.error).toHaveBeenCalled(); + }); + }); +}); diff --git a/apps/web/modules/ee/teams/team-list/components/team-settings/team-settings-modal.tsx b/apps/web/modules/ee/teams/team-list/components/team-settings/team-settings-modal.tsx index e4c994d834..3eb75fc44f 100644 --- a/apps/web/modules/ee/teams/team-list/components/team-settings/team-settings-modal.tsx +++ b/apps/web/modules/ee/teams/team-list/components/team-settings/team-settings-modal.tsx @@ -4,7 +4,7 @@ import { cn } from "@/lib/cn"; import { getAccessFlags } from "@/lib/membership/utils"; import { getFormattedErrorMessage } from "@/lib/utils/helper"; import { ZTeamPermission } from "@/modules/ee/teams/project-teams/types/team"; -import { updateTeamDetailsAction } from "@/modules/ee/teams/team-list/action"; +import { updateTeamDetailsAction } from "@/modules/ee/teams/team-list/actions"; import { DeleteTeam } from "@/modules/ee/teams/team-list/components/team-settings/delete-team"; import { TOrganizationProject } from "@/modules/ee/teams/team-list/types/project"; import { diff --git a/apps/web/modules/ee/teams/team-list/components/teams-table.test.tsx b/apps/web/modules/ee/teams/team-list/components/teams-table.test.tsx new file mode 100644 index 0000000000..6791ec770c --- /dev/null +++ b/apps/web/modules/ee/teams/team-list/components/teams-table.test.tsx @@ -0,0 +1,154 @@ +import { getTeamDetailsAction, getTeamRoleAction } from "@/modules/ee/teams/team-list/actions"; +import { TOrganizationMember, TOtherTeam, TUserTeam } from "@/modules/ee/teams/team-list/types/team"; +import { cleanup, render, screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import toast from "react-hot-toast"; +import { afterEach, describe, expect, test, vi } from "vitest"; +import { TeamsTable } from "./teams-table"; + +vi.mock("@/modules/ee/teams/team-list/components/create-team-button", () => ({ + CreateTeamButton: ({ organizationId }: any) => ( + + ), +})); + +vi.mock("@/modules/ee/teams/team-list/components/manage-team-button", () => ({ + ManageTeamButton: ({ disabled, onClick }: any) => ( + + ), +})); +vi.mock("@/modules/ee/teams/team-list/components/team-settings/team-settings-modal", () => ({ + TeamSettingsModal: (props: any) =>
{props.team?.name}
, +})); + +vi.mock("@/modules/ee/teams/team-list/actions", () => ({ + getTeamDetailsAction: vi.fn(), + getTeamRoleAction: vi.fn(), +})); + +vi.mock("@/modules/ui/components/badge", () => ({ + Badge: ({ text }: any) => {text}, +})); + +const userTeams: TUserTeam[] = [ + { id: "1", name: "Alpha", memberCount: 2, userRole: "admin" }, + { id: "2", name: "Beta", memberCount: 1, userRole: "contributor" }, +]; +const otherTeams: TOtherTeam[] = [ + { id: "3", name: "Gamma", memberCount: 3 }, + { id: "4", name: "Delta", memberCount: 1 }, +]; +const orgMembers: TOrganizationMember[] = [{ id: "u1", name: "User 1", role: "manager" }]; +const orgProjects = [{ id: "p1", name: "Project 1" }]; + +describe("TeamsTable", () => { + afterEach(() => { + cleanup(); + }); + + test("renders CreateTeamButton for owner/manager", () => { + render( + + ); + expect(screen.getByTestId("CreateTeamButton")).toHaveTextContent("org-1"); + }); + + test("does not render CreateTeamButton for non-owner/manager", () => { + render( + + ); + expect(screen.queryByTestId("CreateTeamButton")).toBeNull(); + }); + + test("renders empty state row if no teams", () => { + render( + + ); + expect(screen.getByText("environments.settings.teams.empty_teams_state")).toBeInTheDocument(); + }); + + test("renders userTeams and otherTeams rows", () => { + render( + + ); + expect(screen.getByText("Alpha")).toBeInTheDocument(); + expect(screen.getByText("Beta")).toBeInTheDocument(); + expect(screen.getByText("Gamma")).toBeInTheDocument(); + expect(screen.getByText("Delta")).toBeInTheDocument(); + expect(screen.getAllByTestId("ManageTeamButton").length).toBe(4); + expect(screen.getAllByTestId("Badge")[0]).toHaveTextContent( + "environments.settings.teams.you_are_a_member" + ); + expect(screen.getByText("2 common.members")).toBeInTheDocument(); + }); + + test("opens TeamSettingsModal when ManageTeamButton is clicked and team details are returned", async () => { + vi.mocked(getTeamDetailsAction).mockResolvedValue({ + data: { id: "1", name: "Alpha", organizationId: "org-1", members: [], projects: [] }, + }); + vi.mocked(getTeamRoleAction).mockResolvedValue({ data: "admin" }); + render( + + ); + await userEvent.click(screen.getAllByTestId("ManageTeamButton")[0]); + await waitFor(() => { + expect(screen.getByTestId("TeamSettingsModal")).toHaveTextContent("Alpha"); + }); + }); + + test("shows error toast if getTeamDetailsAction fails", async () => { + vi.mocked(getTeamDetailsAction).mockResolvedValue({ data: undefined }); + vi.mocked(getTeamRoleAction).mockResolvedValue({ data: undefined }); + render( + + ); + await userEvent.click(screen.getAllByTestId("ManageTeamButton")[0]); + await waitFor(() => { + expect(toast.error).toHaveBeenCalled(); + }); + }); +}); diff --git a/apps/web/modules/ee/teams/team-list/components/teams-table.tsx b/apps/web/modules/ee/teams/team-list/components/teams-table.tsx index c897ecc3de..c2544936e3 100644 --- a/apps/web/modules/ee/teams/team-list/components/teams-table.tsx +++ b/apps/web/modules/ee/teams/team-list/components/teams-table.tsx @@ -2,7 +2,7 @@ import { getAccessFlags } from "@/lib/membership/utils"; import { getFormattedErrorMessage } from "@/lib/utils/helper"; -import { getTeamDetailsAction, getTeamRoleAction } from "@/modules/ee/teams/team-list/action"; +import { getTeamDetailsAction, getTeamRoleAction } from "@/modules/ee/teams/team-list/actions"; import { CreateTeamButton } from "@/modules/ee/teams/team-list/components/create-team-button"; import { ManageTeamButton } from "@/modules/ee/teams/team-list/components/manage-team-button"; import { TeamSettingsModal } from "@/modules/ee/teams/team-list/components/team-settings/team-settings-modal"; diff --git a/apps/web/modules/ee/teams/team-list/lib/project.test.ts b/apps/web/modules/ee/teams/team-list/lib/project.test.ts new file mode 100644 index 0000000000..2e0da83fdb --- /dev/null +++ b/apps/web/modules/ee/teams/team-list/lib/project.test.ts @@ -0,0 +1,50 @@ +import { Prisma } from "@prisma/client"; +import { beforeEach, describe, expect, test, vi } from "vitest"; +import { prisma } from "@formbricks/database"; +import { logger } from "@formbricks/logger"; +import { DatabaseError, UnknownError } from "@formbricks/types/errors"; +import { getProjectsByOrganizationId } from "./project"; + +vi.mock("@formbricks/database", () => ({ + prisma: { + project: { findMany: vi.fn() }, + }, +})); +vi.mock("@formbricks/logger", () => ({ logger: { error: vi.fn() } })); + +const mockProjects = [ + { id: "p1", name: "Project 1" }, + { id: "p2", name: "Project 2" }, +]; + +describe("getProjectsByOrganizationId", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + test("returns mapped projects for valid organization", async () => { + vi.mocked(prisma.project.findMany).mockResolvedValueOnce(mockProjects); + const result = await getProjectsByOrganizationId("org1"); + expect(result).toEqual([ + { id: "p1", name: "Project 1" }, + { id: "p2", name: "Project 2" }, + ]); + expect(prisma.project.findMany).toHaveBeenCalledWith({ + where: { organizationId: "org1" }, + select: { id: true, name: true }, + }); + }); + + test("throws DatabaseError on Prisma known error", async () => { + const error = new Prisma.PrismaClientKnownRequestError("fail", { code: "P2002", clientVersion: "1.0.0" }); + vi.mocked(prisma.project.findMany).mockRejectedValueOnce(error); + await expect(getProjectsByOrganizationId("org1")).rejects.toThrow(DatabaseError); + expect(logger.error).toHaveBeenCalledWith(error, "Error fetching projects by organization id"); + }); + + test("throws UnknownError on unknown error", async () => { + const error = new Error("fail"); + vi.mocked(prisma.project.findMany).mockRejectedValueOnce(error); + await expect(getProjectsByOrganizationId("org1")).rejects.toThrow(UnknownError); + }); +}); diff --git a/apps/web/modules/ee/teams/team-list/lib/team.test.ts b/apps/web/modules/ee/teams/team-list/lib/team.test.ts new file mode 100644 index 0000000000..70d92ba0f6 --- /dev/null +++ b/apps/web/modules/ee/teams/team-list/lib/team.test.ts @@ -0,0 +1,343 @@ +import { organizationCache } from "@/lib/cache/organization"; +import { teamCache } from "@/lib/cache/team"; +import { projectCache } from "@/lib/project/cache"; +import { TTeamSettingsFormSchema } from "@/modules/ee/teams/team-list/types/team"; +import { Prisma } from "@prisma/client"; +import { beforeEach, describe, expect, test, vi } from "vitest"; +import { prisma } from "@formbricks/database"; +import { DatabaseError, InvalidInputError, ResourceNotFoundError } from "@formbricks/types/errors"; +import { + createTeam, + deleteTeam, + getOtherTeams, + getTeamDetails, + getTeams, + getTeamsByOrganizationId, + getUserTeams, + updateTeamDetails, +} from "./team"; + +vi.mock("@formbricks/database", () => ({ + prisma: { + team: { + findMany: vi.fn(), + findFirst: vi.fn(), + create: vi.fn(), + findUnique: vi.fn(), + update: vi.fn(), + delete: vi.fn(), + }, + membership: { findUnique: vi.fn(), count: vi.fn() }, + project: { count: vi.fn() }, + environment: { findMany: vi.fn() }, + }, +})); +vi.mock("@/lib/cache/team", () => ({ + teamCache: { + tag: { byOrganizationId: vi.fn(), byUserId: vi.fn(), byId: vi.fn(), projectId: vi.fn() }, + revalidate: vi.fn(), + }, +})); +vi.mock("@/lib/project/cache", () => ({ + projectCache: { tag: { byId: vi.fn(), byOrganizationId: vi.fn() }, revalidate: vi.fn() }, +})); +vi.mock("@/lib/cache/organization", () => ({ organizationCache: { revalidate: vi.fn() } })); + +const mockTeams = [ + { id: "t1", name: "Team 1" }, + { id: "t2", name: "Team 2" }, +]; +const mockUserTeams = [ + { + id: "t1", + name: "Team 1", + teamUsers: [{ role: "admin" }], + _count: { teamUsers: 2 }, + }, +]; +const mockOtherTeams = [ + { + id: "t2", + name: "Team 2", + _count: { teamUsers: 3 }, + }, +]; +const mockMembership = { role: "admin" }; +const mockTeamDetails = { + id: "t1", + name: "Team 1", + organizationId: "org1", + teamUsers: [ + { userId: "u1", role: "admin", user: { name: "User 1" } }, + { userId: "u2", role: "member", user: { name: "User 2" } }, + ], + projectTeams: [{ projectId: "p1", project: { name: "Project 1" }, permission: "manage" }], +}; + +describe("getTeamsByOrganizationId", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + test("returns mapped teams", async () => { + vi.mocked(prisma.team.findMany).mockResolvedValueOnce(mockTeams); + const result = await getTeamsByOrganizationId("org1"); + expect(result).toEqual([ + { id: "t1", name: "Team 1" }, + { id: "t2", name: "Team 2" }, + ]); + }); + test("throws DatabaseError on Prisma error", async () => { + vi.mocked(prisma.team.findMany).mockRejectedValueOnce( + new Prisma.PrismaClientKnownRequestError("fail", { code: "P2002", clientVersion: "1.0.0" }) + ); + await expect(getTeamsByOrganizationId("org1")).rejects.toThrow(DatabaseError); + }); +}); + +describe("getUserTeams", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + test("returns mapped user teams", async () => { + vi.mocked(prisma.team.findMany).mockResolvedValueOnce(mockUserTeams); + + const result = await getUserTeams("u1", "org1"); + expect(result).toEqual([{ id: "t1", name: "Team 1", userRole: "admin", memberCount: 2 }]); + }); + test("throws DatabaseError on Prisma error", async () => { + vi.mocked(prisma.team.findMany).mockRejectedValueOnce( + new Prisma.PrismaClientKnownRequestError("fail", { code: "P2002", clientVersion: "1.0.0" }) + ); + await expect(getUserTeams("u1", "org1")).rejects.toThrow(DatabaseError); + }); +}); + +describe("getOtherTeams", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + test("returns mapped other teams", async () => { + vi.mocked(prisma.team.findMany).mockResolvedValueOnce(mockOtherTeams); + const result = await getOtherTeams("u1", "org1"); + expect(result).toEqual([{ id: "t2", name: "Team 2", memberCount: 3 }]); + }); + test("throws DatabaseError on Prisma error", async () => { + vi.mocked(prisma.team.findMany).mockRejectedValueOnce( + new Prisma.PrismaClientKnownRequestError("fail", { code: "P2002", clientVersion: "1.0.0" }) + ); + await expect(getOtherTeams("u1", "org1")).rejects.toThrow(DatabaseError); + }); +}); + +describe("getTeams", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + test("returns userTeams and otherTeams", async () => { + vi.mocked(prisma.membership.findUnique).mockResolvedValueOnce(mockMembership); + vi.mocked(prisma.team.findMany).mockResolvedValueOnce(mockUserTeams); + vi.mocked(prisma.team.findMany).mockResolvedValueOnce(mockOtherTeams); + const result = await getTeams("u1", "org1"); + expect(result).toEqual({ + userTeams: [{ id: "t1", name: "Team 1", userRole: "admin", memberCount: 2 }], + otherTeams: [{ id: "t2", name: "Team 2", memberCount: 3 }], + }); + }); + test("throws ResourceNotFoundError if membership not found", async () => { + vi.mocked(prisma.membership.findUnique).mockResolvedValueOnce(null); + await expect(getTeams("u1", "org1")).rejects.toThrow(ResourceNotFoundError); + }); +}); + +describe("createTeam", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + test("creates and returns team id", async () => { + vi.mocked(prisma.team.findFirst).mockResolvedValueOnce(null); + vi.mocked(prisma.team.create).mockResolvedValueOnce({ + id: "t1", + name: "Team 1", + organizationId: "org1", + createdAt: new Date(), + updatedAt: new Date(), + }); + const result = await createTeam("org1", "Team 1"); + expect(result).toBe("t1"); + expect(teamCache.revalidate).toHaveBeenCalledWith({ organizationId: "org1" }); + }); + test("throws InvalidInputError if team exists", async () => { + vi.mocked(prisma.team.findFirst).mockResolvedValueOnce({ id: "t1" }); + await expect(createTeam("org1", "Team 1")).rejects.toThrow(InvalidInputError); + }); + test("throws InvalidInputError if name too short", async () => { + vi.mocked(prisma.team.findFirst).mockResolvedValueOnce(null); + await expect(createTeam("org1", "")).rejects.toThrow(InvalidInputError); + }); + test("throws DatabaseError on Prisma error", async () => { + vi.mocked(prisma.team.findFirst).mockRejectedValueOnce( + new Prisma.PrismaClientKnownRequestError("fail", { code: "P2002", clientVersion: "1.0.0" }) + ); + await expect(createTeam("org1", "Team 1")).rejects.toThrow(DatabaseError); + }); +}); + +describe("getTeamDetails", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + test("returns mapped team details", async () => { + vi.mocked(prisma.team.findUnique).mockResolvedValueOnce(mockTeamDetails); + const result = await getTeamDetails("t1"); + expect(result).toEqual({ + id: "t1", + name: "Team 1", + organizationId: "org1", + members: [ + { userId: "u1", name: "User 1", role: "admin" }, + { userId: "u2", name: "User 2", role: "member" }, + ], + projects: [{ projectId: "p1", projectName: "Project 1", permission: "manage" }], + }); + }); + test("returns null if team not found", async () => { + vi.mocked(prisma.team.findUnique).mockResolvedValueOnce(null); + const result = await getTeamDetails("t1"); + expect(result).toBeNull(); + }); + test("throws DatabaseError on Prisma error", async () => { + vi.mocked(prisma.team.findUnique).mockRejectedValueOnce( + new Prisma.PrismaClientKnownRequestError("fail", { code: "P2002", clientVersion: "1.0.0" }) + ); + await expect(getTeamDetails("t1")).rejects.toThrow(DatabaseError); + }); +}); + +describe("deleteTeam", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + test("deletes team and revalidates caches", async () => { + const mockTeam = { + id: "t1", + organizationId: "org1", + name: "Team 1", + createdAt: new Date(), + updatedAt: new Date(), + projectTeams: [{ projectId: "p1" }], + }; + vi.mocked(prisma.team.delete).mockResolvedValueOnce(mockTeam); + const result = await deleteTeam("t1"); + expect(result).toBe(true); + expect(teamCache.revalidate).toHaveBeenCalledWith({ id: "t1", organizationId: "org1" }); + expect(teamCache.revalidate).toHaveBeenCalledWith({ projectId: "p1" }); + }); + test("throws DatabaseError on Prisma error", async () => { + vi.mocked(prisma.team.delete).mockRejectedValueOnce( + new Prisma.PrismaClientKnownRequestError("fail", { code: "P2002", clientVersion: "1.0.0" }) + ); + await expect(deleteTeam("t1")).rejects.toThrow(DatabaseError); + }); +}); + +describe("updateTeamDetails", () => { + const data: TTeamSettingsFormSchema = { + name: "Team 1 Updated", + members: [{ userId: "u1", role: "admin" }], + projects: [{ projectId: "p1", permission: "manage" }], + }; + beforeEach(() => { + vi.clearAllMocks(); + }); + test("updates team details and revalidates caches", async () => { + vi.mocked(prisma.team.findUnique).mockResolvedValueOnce({ + id: "t1", + organizationId: "org1", + name: "Team 1", + createdAt: new Date(), + updatedAt: new Date(), + }); + vi.mocked(prisma.team.findUnique).mockResolvedValueOnce(mockTeamDetails); + vi.mocked(prisma.team.findMany).mockResolvedValueOnce(mockUserTeams); + + vi.mocked(prisma.membership.count).mockResolvedValueOnce(1); + vi.mocked(prisma.project.count).mockResolvedValueOnce(1); + vi.mocked(prisma.team.update).mockResolvedValueOnce({ + id: "t1", + name: "Team 1 Updated", + organizationId: "org1", + createdAt: new Date(), + updatedAt: new Date(), + }); + vi.mocked(prisma.environment.findMany).mockResolvedValueOnce([{ id: "env1" }]); + const result = await updateTeamDetails("t1", data); + expect(result).toBe(true); + expect(teamCache.revalidate).toHaveBeenCalled(); + expect(projectCache.revalidate).toHaveBeenCalled(); + expect(organizationCache.revalidate).toHaveBeenCalledWith({ environmentId: "env1" }); + }); + test("throws ResourceNotFoundError if team not found", async () => { + vi.mocked(prisma.team.findUnique).mockResolvedValueOnce(null); + await expect(updateTeamDetails("t1", data)).rejects.toThrow(ResourceNotFoundError); + }); + test("throws error if getTeamDetails returns null", async () => { + vi.mocked(prisma.team.findUnique).mockResolvedValueOnce({ + id: "t1", + organizationId: "org1", + name: "Team 1", + createdAt: new Date(), + updatedAt: new Date(), + }); + vi.mocked(prisma.team.findUnique).mockResolvedValueOnce(null); + await expect(updateTeamDetails("t1", data)).rejects.toThrow("Team not found"); + }); + test("throws error if user not in org membership", async () => { + vi.mocked(prisma.team.findUnique).mockResolvedValueOnce({ + id: "t1", + organizationId: "org1", + name: "Team 1", + createdAt: new Date(), + updatedAt: new Date(), + }); + vi.mocked(prisma.team.findUnique).mockResolvedValueOnce({ + id: "t1", + name: "Team 1", + organizationId: "org1", + members: [], + projects: [], + }); + vi.mocked(prisma.membership.count).mockResolvedValueOnce(0); + await expect(updateTeamDetails("t1", data)).rejects.toThrow(); + }); + test("throws error if project not in org", async () => { + vi.mocked(prisma.team.findUnique).mockResolvedValueOnce({ + id: "t1", + organizationId: "org1", + name: "Team 1", + createdAt: new Date(), + updatedAt: new Date(), + }); + vi.mocked(prisma.team.findUnique).mockResolvedValueOnce({ + id: "t1", + name: "Team 1", + organizationId: "org1", + members: [], + projects: [], + }); + vi.mocked(prisma.membership.count).mockResolvedValueOnce(1); + vi.mocked(prisma.project.count).mockResolvedValueOnce(0); + await expect( + updateTeamDetails("t1", { + name: "x", + members: [], + projects: [{ projectId: "p1", permission: "manage" }], + }) + ).rejects.toThrow(); + }); + test("throws DatabaseError on Prisma error", async () => { + vi.mocked(prisma.team.findUnique).mockRejectedValueOnce( + new Prisma.PrismaClientKnownRequestError("fail", { code: "P2002", clientVersion: "1.0.0" }) + ); + await expect(updateTeamDetails("t1", data)).rejects.toThrow(DatabaseError); + }); +}); diff --git a/apps/web/modules/ee/teams/team-list/lib/team.ts b/apps/web/modules/ee/teams/team-list/lib/team.ts index 0b746293db..a135dcdec9 100644 --- a/apps/web/modules/ee/teams/team-list/lib/team.ts +++ b/apps/web/modules/ee/teams/team-list/lib/team.ts @@ -57,7 +57,7 @@ export const getTeamsByOrganizationId = reactCache( )() ); -const getUserTeams = reactCache( +export const getUserTeams = reactCache( async (userId: string, organizationId: string): Promise => cache( async () => { diff --git a/apps/web/modules/ee/teams/utils/teams.test.ts b/apps/web/modules/ee/teams/utils/teams.test.ts new file mode 100644 index 0000000000..074cf8aaf8 --- /dev/null +++ b/apps/web/modules/ee/teams/utils/teams.test.ts @@ -0,0 +1,67 @@ +import { ProjectTeamPermission, TeamUserRole } from "@prisma/client"; +import { describe, expect, test } from "vitest"; +import { TeamPermissionMapping, TeamRoleMapping, getTeamAccessFlags, getTeamPermissionFlags } from "./teams"; + +describe("TeamPermissionMapping", () => { + test("maps ProjectTeamPermission to correct labels", () => { + expect(TeamPermissionMapping[ProjectTeamPermission.read]).toBe("Read"); + expect(TeamPermissionMapping[ProjectTeamPermission.readWrite]).toBe("Read & write"); + expect(TeamPermissionMapping[ProjectTeamPermission.manage]).toBe("Manage"); + }); +}); + +describe("TeamRoleMapping", () => { + test("maps TeamUserRole to correct labels", () => { + expect(TeamRoleMapping[TeamUserRole.admin]).toBe("Team Admin"); + expect(TeamRoleMapping[TeamUserRole.contributor]).toBe("Contributor"); + }); +}); + +describe("getTeamAccessFlags", () => { + test("returns correct flags for admin", () => { + expect(getTeamAccessFlags(TeamUserRole.admin)).toEqual({ isAdmin: true, isContributor: false }); + }); + test("returns correct flags for contributor", () => { + expect(getTeamAccessFlags(TeamUserRole.contributor)).toEqual({ isAdmin: false, isContributor: true }); + }); + test("returns false flags for undefined/null", () => { + expect(getTeamAccessFlags()).toEqual({ isAdmin: false, isContributor: false }); + expect(getTeamAccessFlags(null)).toEqual({ isAdmin: false, isContributor: false }); + }); +}); + +describe("getTeamPermissionFlags", () => { + test("returns correct flags for read", () => { + expect(getTeamPermissionFlags(ProjectTeamPermission.read)).toEqual({ + hasReadAccess: true, + hasReadWriteAccess: false, + hasManageAccess: false, + }); + }); + test("returns correct flags for readWrite", () => { + expect(getTeamPermissionFlags(ProjectTeamPermission.readWrite)).toEqual({ + hasReadAccess: false, + hasReadWriteAccess: true, + hasManageAccess: false, + }); + }); + test("returns correct flags for manage", () => { + expect(getTeamPermissionFlags(ProjectTeamPermission.manage)).toEqual({ + hasReadAccess: false, + hasReadWriteAccess: false, + hasManageAccess: true, + }); + }); + test("returns all false for undefined/null", () => { + expect(getTeamPermissionFlags()).toEqual({ + hasReadAccess: false, + hasReadWriteAccess: false, + hasManageAccess: false, + }); + expect(getTeamPermissionFlags(null)).toEqual({ + hasReadAccess: false, + hasReadWriteAccess: false, + hasManageAccess: false, + }); + }); +}); diff --git a/apps/web/vite.config.mts b/apps/web/vite.config.mts index 28c12a0c9d..ec96241a76 100644 --- a/apps/web/vite.config.mts +++ b/apps/web/vite.config.mts @@ -126,6 +126,8 @@ export default defineConfig({ "modules/survey/editor/components/file-upload-question-form.tsx", "modules/survey/editor/components/how-to-send-card.tsx", "modules/survey/editor/components/image-survey-bg.tsx", + "modules/ee/teams/**/*.ts", + "modules/ee/teams/**/*.tsx", "app/(app)/environments/**/*.tsx", "app/(app)/environments/**/*.ts", ], From d67d62df45afb804f234cd6ec0ec4a0b05b86cc7 Mon Sep 17 00:00:00 2001 From: Matti Nannt Date: Tue, 6 May 2025 18:18:27 +0200 Subject: [PATCH 04/17] chore: update zod dependency, remove unused labeler action (#5678) --- .github/workflows/labeler.yml | 27 - apps/web/package.json | 2 +- packages/config-eslint/package.json | 16 +- packages/config-typescript/package.json | 4 +- packages/database/package.json | 4 +- packages/logger/package.json | 6 +- packages/surveys/package.json | 6 +- packages/types/package.json | 8 +- pnpm-lock.yaml | 1460 +++++++++++------------ 9 files changed, 753 insertions(+), 780 deletions(-) delete mode 100644 .github/workflows/labeler.yml diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml deleted file mode 100644 index 904956abb2..0000000000 --- a/.github/workflows/labeler.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: "Pull Request Labeler" -on: - - pull_request_target -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true -permissions: - contents: read - -jobs: - labeler: - name: Pull Request Labeler - permissions: - contents: read - pull-requests: write - runs-on: ubuntu-latest - steps: - - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 - with: - egress-policy: audit - - - uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0 - with: - repo-token: "${{ secrets.GITHUB_TOKEN }}" - # https://github.com/actions/labeler/issues/442#issuecomment-1297359481 - sync-labels: "" diff --git a/apps/web/package.json b/apps/web/package.json index 32ee3c43a0..622c977f20 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -137,7 +137,7 @@ "uuid": "11.1.0", "webpack": "5.99.7", "xlsx": "0.18.5", - "zod": "3.24.1", + "zod": "3.24.4", "zod-openapi": "4.2.4" }, "devDependencies": { diff --git a/packages/config-eslint/package.json b/packages/config-eslint/package.json index 7080147bf8..310f0dcc54 100644 --- a/packages/config-eslint/package.json +++ b/packages/config-eslint/package.json @@ -3,17 +3,17 @@ "version": "0.0.0", "private": true, "devDependencies": { - "@next/eslint-plugin-next": "15.3.0", - "@typescript-eslint/eslint-plugin": "8.29.1", - "@typescript-eslint/parser": "8.29.1", + "@next/eslint-plugin-next": "15.3.1", + "@typescript-eslint/eslint-plugin": "8.32.0", + "@typescript-eslint/parser": "8.32.0", "@vercel/style-guide": "6.0.0", - "eslint-config-next": "15.3.0", - "eslint-config-prettier": "10.1.1", - "eslint-config-turbo": "2.5.0", + "eslint-config-next": "15.3.1", + "eslint-config-prettier": "10.1.2", + "eslint-config-turbo": "2.5.2", "eslint-plugin-i18n-json": "4.0.1", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.2.0", - "eslint-plugin-react-refresh": "0.4.19", - "@vitest/eslint-plugin": "1.1.42" + "eslint-plugin-react-refresh": "0.4.20", + "@vitest/eslint-plugin": "1.1.44" } } diff --git a/packages/config-typescript/package.json b/packages/config-typescript/package.json index 7e43a8cd70..cae0fb870c 100644 --- a/packages/config-typescript/package.json +++ b/packages/config-typescript/package.json @@ -7,8 +7,8 @@ "clean": "rimraf node_modules dist turbo" }, "devDependencies": { - "@types/node": "22.15.3", - "@types/react": "19.1.2", + "@types/node": "22.15.12", + "@types/react": "19.1.3", "@types/react-dom": "19.1.3", "typescript": "5.8.3" } diff --git a/packages/database/package.json b/packages/database/package.json index 2f69e3002e..9599964eaf 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -34,8 +34,8 @@ "@formbricks/eslint-config": "workspace:*", "@paralleldrive/cuid2": "2.2.2", "prisma": "6.7.0", - "prisma-json-types-generator": "3.2.3", + "prisma-json-types-generator": "3.3.1", "ts-node": "10.9.2", - "zod": "3.24.1" + "zod": "3.24.4" } } diff --git a/packages/logger/package.json b/packages/logger/package.json index 56634e2a3c..a80ba2c881 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -35,9 +35,9 @@ }, "author": "Formbricks ", "dependencies": { - "zod": "3.24.2", - "pino": "^9.6.0", - "pino-pretty": "^13.0.0" + "zod": "3.24.4", + "pino": "9.6.0", + "pino-pretty": "13.0.0" }, "devDependencies": { "vite": "6.3.5", diff --git a/packages/surveys/package.json b/packages/surveys/package.json index e03f4eca62..a8ee179a8c 100644 --- a/packages/surveys/package.json +++ b/packages/surveys/package.json @@ -38,17 +38,17 @@ "test:coverage": "vitest run --coverage" }, "devDependencies": { - "@calcom/embed-snippet": "1.3.2", + "@calcom/embed-snippet": "1.3.3", "@formbricks/config-typescript": "workspace:*", "@formbricks/eslint-config": "workspace:*", "@formbricks/i18n-utils": "workspace:*", "@formbricks/types": "workspace:*", "@preact/preset-vite": "2.10.1", "@testing-library/preact": "3.2.4", - "@types/react": "19.1.0", + "@types/react": "19.1.3", "autoprefixer": "10.4.21", "concurrently": "9.1.2", - "isomorphic-dompurify": "2.23.0", + "isomorphic-dompurify": "2.24.0", "postcss": "8.5.3", "preact": "10.26.5", "react-date-picker": "11.0.0", diff --git a/packages/types/package.json b/packages/types/package.json index e44e1c3ec3..b5e208a92f 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -8,12 +8,12 @@ "lint": "eslint . --ext .ts,.js,.tsx,.jsx", "clean": "rimraf node_modules .turbo" }, + "dependencies": { + "@prisma/client": "6.7.0", + "zod": "3.24.4" + }, "devDependencies": { "@formbricks/config-typescript": "workspace:*", "@formbricks/database": "workspace:*" - }, - "dependencies": { - "@prisma/client": "6.7.0", - "zod": "3.24.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b54078fdab..58c9565d77 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -60,7 +60,7 @@ importers: version: 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-essentials': specifier: 8.6.12 - version: 8.6.12(@types/react@19.1.2)(storybook@8.6.12(prettier@3.5.3)) + version: 8.6.12(@types/react@19.1.3)(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-interactions': specifier: 8.6.12 version: 8.6.12(storybook@8.6.12(prettier@3.5.3)) @@ -78,7 +78,7 @@ importers: version: 8.6.12(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3) '@storybook/react-vite': specifier: 8.6.12 - version: 8.6.12(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.40.0)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + version: 8.6.12(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.40.0)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) '@storybook/test': specifier: 8.6.12 version: 8.6.12(storybook@8.6.12(prettier@3.5.3)) @@ -90,7 +90,7 @@ importers: version: 8.31.1(eslint@8.57.0)(typescript@5.8.3) '@vitejs/plugin-react': specifier: 4.4.1 - version: 4.4.1(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + version: 4.4.1(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) esbuild: specifier: 0.25.2 version: 0.25.2 @@ -105,7 +105,7 @@ importers: version: 8.6.12(prettier@3.5.3) vite: specifier: 6.3.5 - version: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) apps/web: dependencies: @@ -120,7 +120,7 @@ importers: version: 3.802.0 '@boxyhq/saml-jackson': specifier: 1.45.2 - version: 1.45.2(aws-crt@1.26.2)(socks@2.8.4)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)) + version: 1.45.2(aws-crt@1.26.2)(socks@2.8.4)(ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3)) '@dnd-kit/core': specifier: 6.3.1 version: 6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -210,55 +210,55 @@ importers: version: 6.7.0(prisma@6.7.0(typescript@5.8.3))(typescript@5.8.3) '@radix-ui/react-accordion': specifier: 1.2.9 - version: 1.2.9(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-checkbox': specifier: 1.3.0 - version: 1.3.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.3.0(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-collapsible': specifier: 1.1.9 - version: 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-dialog': specifier: 1.1.12 - version: 1.1.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.12(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-dropdown-menu': specifier: 2.1.13 - version: 2.1.13(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-label': specifier: 2.1.5 - version: 2.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-popover': specifier: 1.1.12 - version: 1.1.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.12(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-radio-group': specifier: 1.3.5 - version: 1.3.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.3.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-select': specifier: 2.2.3 - version: 2.2.3(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.2.3(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-separator': specifier: 1.1.5 - version: 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slider': specifier: 1.3.3 - version: 1.3.3(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.3.3(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': specifier: 1.2.0 - version: 1.2.0(@types/react@19.1.2)(react@19.1.0) + version: 1.2.0(@types/react@19.1.3)(react@19.1.0) '@radix-ui/react-switch': specifier: 1.2.3 - version: 1.2.3(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.3(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-tabs': specifier: 1.1.10 - version: 1.1.10(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.10(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-toggle': specifier: 1.1.7 - version: 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-toggle-group': specifier: 1.1.8 - version: 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-tooltip': specifier: 1.2.5 - version: 1.2.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-email/components': specifier: 0.0.38 version: 0.0.38(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -267,13 +267,13 @@ importers: version: 9.15.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.200.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.99.7) '@t3-oss/env-nextjs': specifier: 0.13.4 - version: 0.13.4(arktype@2.1.20)(typescript@5.8.3)(zod@3.24.1) + version: 0.13.4(arktype@2.1.20)(typescript@5.8.3)(zod@3.24.4) '@tailwindcss/forms': specifier: 0.5.10 - version: 0.5.10(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3))) + version: 0.5.10(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3))) '@tailwindcss/typography': specifier: 0.5.16 - version: 0.5.16(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3))) + version: 0.5.16(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3))) '@tanstack/react-table': specifier: 8.21.3 version: 8.21.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -318,7 +318,7 @@ importers: version: 2.1.1 cmdk: specifier: 1.1.1 - version: 1.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) csv-parse: specifier: 5.6.0 version: 5.6.0 @@ -378,7 +378,7 @@ importers: version: 4.24.11(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(nodemailer@7.0.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next-safe-action: specifier: 7.10.8 - version: 7.10.8(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(zod@3.24.1) + version: 7.10.8(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(zod@3.24.4) node-fetch: specifier: 3.3.2 version: 3.3.2 @@ -456,7 +456,7 @@ importers: version: 3.2.0 tailwindcss: specifier: 3.4.16 - version: 3.4.16(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)) + version: 3.4.16(ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3)) ua-parser-js: specifier: 2.0.3 version: 2.0.3(encoding@0.1.13) @@ -470,11 +470,11 @@ importers: specifier: 0.18.5 version: 0.18.5 zod: - specifier: 3.24.1 - version: 3.24.1 + specifier: 3.24.4 + version: 3.24.4 zod-openapi: specifier: 4.2.4 - version: 4.2.4(zod@3.24.1) + version: 4.2.4(zod@3.24.4) devDependencies: '@formbricks/config-typescript': specifier: workspace:* @@ -487,7 +487,7 @@ importers: version: 1.9.0(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(redis@4.7.0) '@testing-library/react': specifier: 16.3.0 - version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/bcryptjs': specifier: 2.4.6 version: 2.4.6 @@ -517,58 +517,58 @@ importers: version: 1.5.5 '@types/testing-library__react': specifier: 10.2.0 - version: 10.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 10.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/ungap__structured-clone': specifier: 1.2.0 version: 1.2.0 '@vitest/coverage-v8': specifier: 3.1.3 - version: 3.1.3(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + version: 3.1.3(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) resize-observer-polyfill: specifier: 1.5.1 version: 1.5.1 ts-node: specifier: 10.9.2 - version: 10.9.2(@types/node@22.15.3)(typescript@5.8.3) + version: 10.9.2(@types/node@22.15.12)(typescript@5.8.3) vite: specifier: 6.3.5 - version: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) vite-tsconfig-paths: specifier: 5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) vitest: specifier: 3.1.3 - version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) vitest-mock-extended: specifier: 3.1.0 - version: 3.1.0(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + version: 3.1.0(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) packages/config-eslint: devDependencies: '@next/eslint-plugin-next': - specifier: 15.3.0 - version: 15.3.0 + specifier: 15.3.1 + version: 15.3.1 '@typescript-eslint/eslint-plugin': - specifier: 8.29.1 - version: 8.29.1(@typescript-eslint/parser@8.29.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) + specifier: 8.32.0 + version: 8.32.0(@typescript-eslint/parser@8.32.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) '@typescript-eslint/parser': - specifier: 8.29.1 - version: 8.29.1(eslint@8.57.0)(typescript@5.8.3) + specifier: 8.32.0 + version: 8.32.0(eslint@8.57.0)(typescript@5.8.3) '@vercel/style-guide': specifier: 6.0.0 - version: 6.0.0(@next/eslint-plugin-next@15.3.0)(eslint@8.57.0)(prettier@3.5.3)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + version: 6.0.0(@next/eslint-plugin-next@15.3.1)(eslint@8.57.0)(prettier@3.5.3)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) '@vitest/eslint-plugin': - specifier: 1.1.42 - version: 1.1.42(@typescript-eslint/utils@8.31.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + specifier: 1.1.44 + version: 1.1.44(@typescript-eslint/utils@8.32.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) eslint-config-next: - specifier: 15.3.0 - version: 15.3.0(eslint@8.57.0)(typescript@5.8.3) + specifier: 15.3.1 + version: 15.3.1(eslint@8.57.0)(typescript@5.8.3) eslint-config-prettier: - specifier: 10.1.1 - version: 10.1.1(eslint@8.57.0) + specifier: 10.1.2 + version: 10.1.2(eslint@8.57.0) eslint-config-turbo: - specifier: 2.5.0 - version: 2.5.0(eslint@8.57.0)(turbo@2.5.2) + specifier: 2.5.2 + version: 2.5.2(eslint@8.57.0)(turbo@2.5.2) eslint-plugin-i18n-json: specifier: 4.0.1 version: 4.0.1(eslint@8.57.0) @@ -579,8 +579,8 @@ importers: specifier: 5.2.0 version: 5.2.0(eslint@8.57.0) eslint-plugin-react-refresh: - specifier: 0.4.19 - version: 0.4.19(eslint@8.57.0) + specifier: 0.4.20 + version: 0.4.20(eslint@8.57.0) packages/config-prettier: devDependencies: @@ -600,14 +600,14 @@ importers: packages/config-typescript: devDependencies: '@types/node': - specifier: 22.15.3 - version: 22.15.3 + specifier: 22.15.12 + version: 22.15.12 '@types/react': - specifier: 19.1.2 - version: 19.1.2 + specifier: 19.1.3 + version: 19.1.3 '@types/react-dom': specifier: 19.1.3 - version: 19.1.3(@types/react@19.1.2) + version: 19.1.3(@types/react@19.1.3) typescript: specifier: 5.8.3 version: 5.8.3 @@ -628,7 +628,7 @@ importers: version: 8.0.0 zod-openapi: specifier: 4.2.4 - version: 4.2.4(zod@3.24.1) + version: 4.2.4(zod@3.24.4) devDependencies: '@formbricks/config-typescript': specifier: workspace:* @@ -643,14 +643,14 @@ importers: specifier: 6.7.0 version: 6.7.0(typescript@5.8.3) prisma-json-types-generator: - specifier: 3.2.3 - version: 3.2.3(prisma@6.7.0(typescript@5.8.3))(typescript@5.8.3) + specifier: 3.3.1 + version: 3.3.1(prisma@6.7.0(typescript@5.8.3))(typescript@5.8.3) ts-node: specifier: 10.9.2 - version: 10.9.2(@types/node@22.15.3)(typescript@5.8.3) + version: 10.9.2(@types/node@22.15.12)(typescript@5.8.3) zod: - specifier: 3.24.1 - version: 3.24.1 + specifier: 3.24.4 + version: 3.24.4 packages/i18n-utils: devDependencies: @@ -662,13 +662,13 @@ importers: version: link:../config-eslint vite: specifier: 6.3.5 - version: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) vite-plugin-dts: specifier: 4.5.3 - version: 4.5.3(@types/node@22.15.3)(rollup@4.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + version: 4.5.3(@types/node@22.15.12)(rollup@4.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) vitest: specifier: 3.1.3 - version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) packages/js-core: devDependencies: @@ -680,31 +680,31 @@ importers: version: link:../config-eslint '@vitest/coverage-v8': specifier: 3.1.3 - version: 3.1.3(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + version: 3.1.3(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) terser: specifier: 5.39.0 version: 5.39.0 vite: specifier: 6.3.5 - version: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) vite-plugin-dts: specifier: 4.5.3 - version: 4.5.3(@types/node@22.15.3)(rollup@4.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + version: 4.5.3(@types/node@22.15.12)(rollup@4.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) vitest: specifier: 3.1.3 - version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) packages/logger: dependencies: pino: - specifier: ^9.6.0 + specifier: 9.6.0 version: 9.6.0 pino-pretty: - specifier: ^13.0.0 + specifier: 13.0.0 version: 13.0.0 zod: - specifier: 3.24.2 - version: 3.24.2 + specifier: 3.24.4 + version: 3.24.4 devDependencies: '@formbricks/config-typescript': specifier: workspace:* @@ -714,13 +714,13 @@ importers: version: link:../config-eslint vite: specifier: 6.3.5 - version: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) vite-plugin-dts: specifier: 4.5.3 - version: 4.5.3(@types/node@22.15.3)(rollup@4.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + version: 4.5.3(@types/node@22.15.12)(rollup@4.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) vitest: specifier: 3.1.3 - version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) packages/surveys: dependencies: @@ -729,11 +729,11 @@ importers: version: 0.8.2 react-calendar: specifier: 5.1.0 - version: 5.1.0(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 5.1.0(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@calcom/embed-snippet': - specifier: 1.3.2 - version: 1.3.2 + specifier: 1.3.3 + version: 1.3.3 '@formbricks/config-typescript': specifier: workspace:* version: link:../config-typescript @@ -748,13 +748,13 @@ importers: version: link:../types '@preact/preset-vite': specifier: 2.10.1 - version: 2.10.1(@babel/core@7.26.10)(preact@10.26.5)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + version: 2.10.1(@babel/core@7.26.10)(preact@10.26.5)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) '@testing-library/preact': specifier: 3.2.4 version: 3.2.4(preact@10.26.5) '@types/react': - specifier: 19.1.0 - version: 19.1.0 + specifier: 19.1.3 + version: 19.1.3 autoprefixer: specifier: 10.4.21 version: 10.4.21(postcss@8.5.3) @@ -762,8 +762,8 @@ importers: specifier: 9.1.2 version: 9.1.2 isomorphic-dompurify: - specifier: 2.23.0 - version: 2.23.0 + specifier: 2.24.0 + version: 2.24.0 postcss: specifier: 8.5.3 version: 8.5.3 @@ -772,25 +772,25 @@ importers: version: 10.26.5 react-date-picker: specifier: 11.0.0 - version: 11.0.0(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 11.0.0(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) serve: specifier: 14.2.4 version: 14.2.4 tailwindcss: specifier: 3.4.16 - version: 3.4.16(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)) + version: 3.4.16(ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3)) terser: specifier: 5.39.0 version: 5.39.0 vite: specifier: 6.3.5 - version: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) vite-plugin-dts: specifier: 4.5.3 - version: 4.5.3(@types/node@22.15.3)(rollup@4.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + version: 4.5.3(@types/node@22.15.12)(rollup@4.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) vite-tsconfig-paths: specifier: 5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) packages/types: dependencies: @@ -798,8 +798,8 @@ importers: specifier: 6.7.0 version: 6.7.0(prisma@6.7.0(typescript@5.8.3))(typescript@5.8.3) zod: - specifier: 3.24.1 - version: 3.24.1 + specifier: 3.24.4 + version: 3.24.4 devDependencies: '@formbricks/config-typescript': specifier: workspace:* @@ -818,7 +818,7 @@ importers: version: link:../config-eslint vite: specifier: 6.3.5 - version: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) packages: @@ -1249,11 +1249,11 @@ packages: '@boxyhq/saml20@1.10.2': resolution: {integrity: sha512-B7Z3bbgc2T3+284nqyciHeQpu4+isBITuRKeLsznHIkunXb/viakkfGJOmW78ohmtGz0P73lu6mAuQBm8ASAJA==} - '@calcom/embed-core@1.5.2': - resolution: {integrity: sha512-y1mpVDfcaVdLJ/CN17c7N2SyJAMiM3u9NYvL5mWFDBe4aa5HLTDc5g/DBbO2oCq859W3bxs11voC/E3KkJH3Iw==} + '@calcom/embed-core@1.5.3': + resolution: {integrity: sha512-GeId9gaByJ5EWiPmuvelZOvFWPOTWkcWZr5vGTCbIUTX125oE5yn0n8lDF1MJk5Xj1WO+/dk9jKIE08Ad9ytiQ==} - '@calcom/embed-snippet@1.3.2': - resolution: {integrity: sha512-EmW/ZjaQD0HjLI8yFNA5Mtb8zCOQQnj9RhChujuMijUK8EVyE1KtU9t3xIxm1hBMNHr4R1qMaBo2QYaZqQhzsw==} + '@calcom/embed-snippet@1.3.3': + resolution: {integrity: sha512-pqqKaeLB8R6BvyegcpI9gAyY6Xyx1bKYfWvIGOvIbTpguWyM1BBBVcT9DCeGe8Zw7Ujp5K56ci7isRUrT2Uadg==} '@changesets/apply-release-plan@7.0.12': resolution: {integrity: sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ==} @@ -1544,6 +1544,12 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.7.0': + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -1924,8 +1930,8 @@ packages: '@next/env@15.3.1': resolution: {integrity: sha512-cwK27QdzrMblHSn9DZRV+DQscHXRuJv6MydlJRpFSqJWZrTYMLzKDeyueJNN9MGd8NNiUKzDQADAf+dMLXX7YQ==} - '@next/eslint-plugin-next@15.3.0': - resolution: {integrity: sha512-511UUcpWw5GWTyKfzW58U2F/bYJyjLE9e3SlnGK/zSXq7RqLlqFO8B9bitJjumLpj317fycC96KZ2RZsjGNfBw==} + '@next/eslint-plugin-next@15.3.1': + resolution: {integrity: sha512-oEs4dsfM6iyER3jTzMm4kDSbrQJq8wZw5fmT6fg2V3SMo+kgG+cShzLfEV20senZzv8VF+puNLheiGPlBGsv2A==} '@next/swc-darwin-arm64@15.3.1': resolution: {integrity: sha512-hjDw4f4/nla+6wysBL07z52Gs55Gttp5Bsk5/8AncQLJoisvTBP0pRIBK/B16/KqQyH+uN4Ww8KkcAqJODYH3w==} @@ -2380,12 +2386,12 @@ packages: '@prisma/config@6.7.0': resolution: {integrity: sha512-di8QDdvSz7DLUi3OOcCHSwxRNeW7jtGRUD2+Z3SdNE3A+pPiNT8WgUJoUyOwJmUr5t+JA2W15P78C/N+8RXrOA==} - '@prisma/debug@6.5.0': - resolution: {integrity: sha512-fc/nusYBlJMzDmDepdUtH9aBsJrda2JNErP9AzuHbgUEQY0/9zQYZdNlXmKoIWENtio+qarPNe/+DQtrX5kMcQ==} - '@prisma/debug@6.7.0': resolution: {integrity: sha512-RabHn9emKoYFsv99RLxvfG2GHzWk2ZI1BuVzqYtmMSIcuGboHY5uFt3Q3boOREM9de6z5s3bQoyKeWnq8Fz22w==} + '@prisma/dmmf@6.7.0': + resolution: {integrity: sha512-Nabzf5H7KUwYV/1u8R5gTQ7x3ffdPIhtxVJsjhnLOjeuem8YzVu39jOgQbiOlfOvjU4sPYkV9wEXc5tIHumdUw==} + '@prisma/engines-version@6.7.0-36.3cff47a7f5d65c3ea74883f1d736e41d68ce91ed': resolution: {integrity: sha512-EvpOFEWf1KkJpDsBCrih0kg3HdHuaCnXmMn7XFPObpFTzagK1N0Q0FMnYPsEhvARfANP5Ok11QyoTIRA2hgJTA==} @@ -2401,8 +2407,11 @@ packages: '@prisma/fetch-engine@6.7.0': resolution: {integrity: sha512-zLlAGnrkmioPKJR4Yf7NfW3hftcvqeNNEHleMZK9yX7RZSkhmxacAYyfGsCcqRt47jiZ7RKdgE0Wh2fWnm7WsQ==} - '@prisma/generator-helper@6.5.0': - resolution: {integrity: sha512-71ELYxnSE4soeV0BlWJEMgO4KkCowuzHsPY3o7quFOtlcmds5ZX190VZK/k9HMJWdPQ893HooBv3BkKvieR7vA==} + '@prisma/generator-helper@6.7.0': + resolution: {integrity: sha512-z4ey7n8eUFx7Ol7RJCoEo9SVK2roy80qLXdrUFlmswcs0e/z03wDl4tpaA02BE2Yi9KCZl2Tkd6oMes81vUefA==} + + '@prisma/generator@6.7.0': + resolution: {integrity: sha512-wCsD7QJn1JBKJfv5uOMhwBCvZPGerPJ3EC2HocFPFaHSzVIXLi/zNb/8gpBxervOXTbQRJ2dpqvMsJnwAnPi8A==} '@prisma/get-platform@6.7.0': resolution: {integrity: sha512-i9IH5lO4fQwnMLvQLYNdgVh9TK3PuWBfQd7QLk/YurnAIg+VeADcZDbmhAi4XBBDD+hDif9hrKyASu0hbjwabw==} @@ -4131,8 +4140,8 @@ packages: '@types/node@22.14.0': resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==} - '@types/node@22.15.3': - resolution: {integrity: sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==} + '@types/node@22.15.12': + resolution: {integrity: sha512-K0fpC/ZVeb8G9rm7bH7vI0KAec4XHEhBam616nVJCV51bKzJ6oA3luG4WdKoaztxe70QaNjS/xBmcDLmr4PiGw==} '@types/nodemailer@6.4.17': resolution: {integrity: sha512-I9CCaIp6DTldEg7vyUTZi8+9Vo0hi1/T8gv3C89yk1rSAAzoKQ8H8ki/jBYJSFoH/BisgLP8tkZMlQ91CIquww==} @@ -4157,11 +4166,8 @@ packages: peerDependencies: '@types/react': ^19.0.0 - '@types/react@19.1.0': - resolution: {integrity: sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==} - - '@types/react@19.1.2': - resolution: {integrity: sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==} + '@types/react@19.1.3': + resolution: {integrity: sha512-dLWQ+Z0CkIvK1J8+wrDPwGxEYFA4RAyHoZPxHVGspYmFVnwGSNT24cGIhFJrtfRnWVuW8X7NO52gCXmhkVUWGQ==} '@types/readable-stream@4.0.18': resolution: {integrity: sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==} @@ -4211,16 +4217,16 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.29.1': - resolution: {integrity: sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==} + '@typescript-eslint/eslint-plugin@8.31.1': + resolution: {integrity: sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/eslint-plugin@8.31.1': - resolution: {integrity: sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==} + '@typescript-eslint/eslint-plugin@8.32.0': + resolution: {integrity: sha512-/jU9ettcntkBFmWUzzGgsClEi2ZFiikMX5eEQsmxIAWMOn4H3D4rvHssstmAHGVvrYnaMqdWWWg0b5M6IN/MTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -4237,15 +4243,15 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.29.1': - resolution: {integrity: sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==} + '@typescript-eslint/parser@8.31.1': + resolution: {integrity: sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.31.1': - resolution: {integrity: sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==} + '@typescript-eslint/parser@8.32.0': + resolution: {integrity: sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4259,10 +4265,6 @@ packages: resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.29.1': - resolution: {integrity: sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.30.1': resolution: {integrity: sha512-+C0B6ChFXZkuaNDl73FJxRYT0G7ufVPOSQkqkpM/U198wUwUFOtgo1k/QzFh1KjpBitaK7R1tgjVz6o9HmsRPg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4271,6 +4273,10 @@ packages: resolution: {integrity: sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.32.0': + resolution: {integrity: sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/type-utils@7.18.0': resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} engines: {node: ^18.18.0 || >=20.0.0} @@ -4281,15 +4287,15 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.29.1': - resolution: {integrity: sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==} + '@typescript-eslint/type-utils@8.31.1': + resolution: {integrity: sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.31.1': - resolution: {integrity: sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==} + '@typescript-eslint/type-utils@8.32.0': + resolution: {integrity: sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4303,10 +4309,6 @@ packages: resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.29.1': - resolution: {integrity: sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.30.1': resolution: {integrity: sha512-81KawPfkuulyWo5QdyG/LOKbspyyiW+p4vpn4bYO7DM/hZImlVnFwrpCTnmNMOt8CvLRr5ojI9nU1Ekpw4RcEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4315,6 +4317,10 @@ packages: resolution: {integrity: sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.32.0': + resolution: {integrity: sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@5.62.0': resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4333,12 +4339,6 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.29.1': - resolution: {integrity: sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/typescript-estree@8.30.1': resolution: {integrity: sha512-kQQnxymiUy9tTb1F2uep9W6aBiYODgq5EMSk6Nxh4Z+BDUoYUSa029ISs5zTzKBFnexQEh71KqwjKnRz58lusQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4351,6 +4351,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/typescript-estree@8.32.0': + resolution: {integrity: sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/utils@5.62.0': resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4363,13 +4369,6 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@8.29.1': - resolution: {integrity: sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.30.1': resolution: {integrity: sha512-T/8q4R9En2tcEsWPQgB5BQ0XJVOtfARcUvOa8yJP3fh9M/mXraLxZrkCfGb6ChrO/V3W+Xbd04RacUEqk1CFEQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4384,6 +4383,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/utils@8.32.0': + resolution: {integrity: sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/visitor-keys@5.62.0': resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4392,10 +4398,6 @@ packages: resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.29.1': - resolution: {integrity: sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.30.1': resolution: {integrity: sha512-aEhgas7aJ6vZnNFC7K4/vMGDGyOiqWcYZPpIWrTKuTAlsvDNKy2GFDqh9smL+iq069ZvR0YzEeq0B8NJlLzjFA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4404,6 +4406,10 @@ packages: resolution: {integrity: sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.32.0': + resolution: {integrity: sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -4545,8 +4551,8 @@ packages: '@vitest/browser': optional: true - '@vitest/eslint-plugin@1.1.42': - resolution: {integrity: sha512-dTGNbh/angh+hoqp5L5A8YO/29mOXDXmDQ/1fzt/jiYzLvU6FvrMqJpGqMqh5g+Fz6MDoZi0AlxefnFUg93Q5A==} + '@vitest/eslint-plugin@1.1.44': + resolution: {integrity: sha512-m4XeohMT+Dj2RZfxnbiFR+Cv5dEC0H7C6TlxRQT7GK2556solm99kxgzJp/trKrZvanZcOFyw7aABykUTfWyrg==} peerDependencies: '@typescript-eslint/utils': '>= 8.24.0' eslint: '>= 8.57.0' @@ -4555,6 +4561,8 @@ packages: peerDependenciesMeta: typescript: optional: true + vitest: + optional: true '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} @@ -5815,8 +5823,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-next@15.3.0: - resolution: {integrity: sha512-+Z3M1W9MnJjX3W4vI9CHfKlEyhTWOUHvc5dB89FyRnzPsUkJlLWZOi8+1pInuVcSztSM4MwBFB0hIHf4Rbwu4g==} + eslint-config-next@15.3.1: + resolution: {integrity: sha512-GnmyVd9TE/Ihe3RrvcafFhXErErtr2jS0JDeCSp3vWvy86AXwHsRBt0E3MqP/m8ACS1ivcsi5uaqjbhsG18qKw==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 typescript: '>=3.3.1' @@ -5824,8 +5832,8 @@ packages: typescript: optional: true - eslint-config-prettier@10.1.1: - resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==} + eslint-config-prettier@10.1.2: + resolution: {integrity: sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -5836,8 +5844,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-config-turbo@2.5.0: - resolution: {integrity: sha512-QJvZBEWDWQx1JyQCr0uwf4aQYhDSAGoHBdx+cPtpPzNEjZw16Ig8BglXxHZBh3I8/fI1U53cLgXwvb28BUZhPA==} + eslint-config-turbo@2.5.2: + resolution: {integrity: sha512-aZdMUCJE5sC9UHZPOu6GiqCijw0HzlcxTbGZeESMFanYShhxrO6mAZy02zYOYK+y184HnxAngcfmtgDt8cIUxw==} peerDependencies: eslint: '>6.6.0' turbo: '>2.0.0' @@ -5948,11 +5956,6 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react-refresh@0.4.19: - resolution: {integrity: sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==} - peerDependencies: - eslint: '>=8.40' - eslint-plugin-react-refresh@0.4.20: resolution: {integrity: sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==} peerDependencies: @@ -5979,8 +5982,8 @@ packages: eslint-plugin-tsdoc@0.2.17: resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} - eslint-plugin-turbo@2.5.0: - resolution: {integrity: sha512-qQk54MrUZv0gnpxV23sccTc+FL3UJ8q7vG7HmXuS2RP8gdjWDwI1CCJTJD8EdRIDjsMxF0xi0AKcMY0CwIlXVg==} + eslint-plugin-turbo@2.5.2: + resolution: {integrity: sha512-B+vdgOtBuDbRI3sIRayV3HZK1XcwlNuksmJJIgggkXTsNehMEbreJBkIda4qvA/STHnGAl2bUGev0Jx8Rijiwg==} peerDependencies: eslint: '>6.6.0' turbo: '>2.0.0' @@ -6858,8 +6861,8 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isomorphic-dompurify@2.23.0: - resolution: {integrity: sha512-f9w5fPJwlu+VK1uowFy4eWYgd7uxl0nQJbtorGp1OAs6JeY1qPkBQKNee1RXrnr68GqZ86PwQ6LF/5rW1TrOZQ==} + isomorphic-dompurify@2.24.0: + resolution: {integrity: sha512-SgKoDBCQveodymGMBPpzs9MOTCk4Luq0bTfwoPrUKa7q0FnCLZMtqR25Rnq228zJfMTsX1ZItiJbDtjb2lyv4A==} engines: {node: '>=18'} isomorphic-ws@4.0.1: @@ -8269,13 +8272,13 @@ packages: pretty-format@3.8.0: resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} - prisma-json-types-generator@3.2.3: - resolution: {integrity: sha512-YxdrYMyj5xPnQfDrQtl6kVQcdHZMZW99hWWbvsAjkJ1QZdn7ZB0q87UcjoMR1DUFyW45i0rH3Ffums+qNVuolg==} + prisma-json-types-generator@3.3.1: + resolution: {integrity: sha512-zKC4Api2lGtOk3RaE1V/RG3CRWbrdJdB23GasxkOqZ1W8vwaGOxDGxGvub+Zc7/48GwwZr2Mn+mhp30tvyVNbg==} engines: {node: '>=14.0'} hasBin: true peerDependencies: - prisma: ^5 || ^6 - typescript: ^5.6.2 + prisma: ^6.6 + typescript: ^5.8 prisma@6.7.0: resolution: {integrity: sha512-vArg+4UqnQ13CVhc2WUosemwh6hr6cr6FY2uzDvCIFwH8pu8BXVv38PktoMLVjtX7sbYThxbnZF5YiR8sN2clw==} @@ -10029,11 +10032,8 @@ packages: peerDependencies: zod: ^3.21.4 - zod@3.24.1: - resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} - - zod@3.24.2: - resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + zod@3.24.4: + resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} snapshots: @@ -11053,7 +11053,7 @@ snapshots: '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.29.0 - '@boxyhq/saml-jackson@1.45.2(aws-crt@1.26.2)(socks@2.8.4)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3))': + '@boxyhq/saml-jackson@1.45.2(aws-crt@1.26.2)(socks@2.8.4)(ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3))': dependencies: '@aws-sdk/client-dynamodb': 3.799.0(aws-crt@1.26.2) '@aws-sdk/credential-providers': 3.799.0(aws-crt@1.26.2) @@ -11079,7 +11079,7 @@ snapshots: reflect-metadata: 0.2.2 ripemd160: 2.0.2 sqlite3: 5.1.7 - typeorm: 0.3.22(mongodb@6.16.0(@aws-sdk/credential-providers@3.799.0(aws-crt@1.26.2))(socks@2.8.4))(mssql@11.0.1)(mysql2@3.14.1)(pg@8.15.6)(redis@4.7.0)(reflect-metadata@0.2.2)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)) + typeorm: 0.3.22(mongodb@6.16.0(@aws-sdk/credential-providers@3.799.0(aws-crt@1.26.2))(socks@2.8.4))(mssql@11.0.1)(mysql2@3.14.1)(pg@8.15.6)(redis@4.7.0)(reflect-metadata@0.2.2)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3)) transitivePeerDependencies: - '@google-cloud/spanner' - '@mongodb-js/zstd' @@ -11113,11 +11113,11 @@ snapshots: xml2js: 0.6.2 xmlbuilder: 15.1.1 - '@calcom/embed-core@1.5.2': {} + '@calcom/embed-core@1.5.3': {} - '@calcom/embed-snippet@1.3.2': + '@calcom/embed-snippet@1.3.3': dependencies: - '@calcom/embed-core': 1.5.2 + '@calcom/embed-core': 1.5.3 '@changesets/apply-release-plan@7.0.12': dependencies: @@ -11428,6 +11428,11 @@ snapshots: eslint: 8.57.0 eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.7.0(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.1': {} '@eslint/eslintrc@2.1.4': @@ -11636,12 +11641,12 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': dependencies: glob: 10.4.5 magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.8.3) - vite: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) optionalDependencies: typescript: 5.8.3 @@ -11881,29 +11886,29 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@mdx-js/react@3.1.0(@types/react@19.1.2)(react@19.1.0)': + '@mdx-js/react@3.1.0(@types/react@19.1.3)(react@19.1.0)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.1.2 + '@types/react': 19.1.3 react: 19.1.0 - '@microsoft/api-extractor-model@7.30.5(@types/node@22.15.3)': + '@microsoft/api-extractor-model@7.30.5(@types/node@22.15.12)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.13.0(@types/node@22.15.3) + '@rushstack/node-core-library': 5.13.0(@types/node@22.15.12) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.52.4(@types/node@22.15.3)': + '@microsoft/api-extractor@7.52.4(@types/node@22.15.12)': dependencies: - '@microsoft/api-extractor-model': 7.30.5(@types/node@22.15.3) + '@microsoft/api-extractor-model': 7.30.5(@types/node@22.15.12) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.13.0(@types/node@22.15.3) + '@rushstack/node-core-library': 5.13.0(@types/node@22.15.12) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.15.2(@types/node@22.15.3) - '@rushstack/ts-command-line': 4.23.7(@types/node@22.15.3) + '@rushstack/terminal': 0.15.2(@types/node@22.15.12) + '@rushstack/ts-command-line': 4.23.7(@types/node@22.15.12) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.10 @@ -11951,7 +11956,7 @@ snapshots: '@next/env@15.3.1': {} - '@next/eslint-plugin-next@15.3.0': + '@next/eslint-plugin-next@15.3.1': dependencies: fast-glob: 3.3.1 @@ -12433,18 +12438,18 @@ snapshots: dependencies: playwright: 1.52.0 - '@preact/preset-vite@2.10.1(@babel/core@7.26.10)(preact@10.26.5)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': + '@preact/preset-vite@2.10.1(@babel/core@7.26.10)(preact@10.26.5)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.10) - '@prefresh/vite': 2.4.7(preact@10.26.5)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + '@prefresh/vite': 2.4.7(preact@10.26.5)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.26.10) debug: 4.4.0 kolorist: 1.8.0 - vite: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) - vite-prerender-plugin: 0.5.10(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + vite: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vite-prerender-plugin: 0.5.10(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) transitivePeerDependencies: - preact - supports-color @@ -12457,7 +12462,7 @@ snapshots: '@prefresh/utils@1.2.0': {} - '@prefresh/vite@2.4.7(preact@10.26.5)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': + '@prefresh/vite@2.4.7(preact@10.26.5)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': dependencies: '@babel/core': 7.26.10 '@prefresh/babel-plugin': 0.5.1 @@ -12465,7 +12470,7 @@ snapshots: '@prefresh/utils': 1.2.0 '@rollup/pluginutils': 4.2.1 preact: 10.26.5 - vite: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) transitivePeerDependencies: - supports-color @@ -12481,10 +12486,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@prisma/debug@6.5.0': {} - '@prisma/debug@6.7.0': {} + '@prisma/dmmf@6.7.0': {} + '@prisma/engines-version@6.7.0-36.3cff47a7f5d65c3ea74883f1d736e41d68ce91ed': {} '@prisma/engines@6.7.0': @@ -12504,9 +12509,13 @@ snapshots: '@prisma/engines-version': 6.7.0-36.3cff47a7f5d65c3ea74883f1d736e41d68ce91ed '@prisma/get-platform': 6.7.0 - '@prisma/generator-helper@6.5.0': + '@prisma/generator-helper@6.7.0': dependencies: - '@prisma/debug': 6.5.0 + '@prisma/debug': 6.7.0 + '@prisma/dmmf': 6.7.0 + '@prisma/generator': 6.7.0 + + '@prisma/generator@6.7.0': {} '@prisma/get-platform@6.7.0': dependencies: @@ -12546,527 +12555,527 @@ snapshots: '@radix-ui/primitive@1.1.2': {} - '@radix-ui/react-accordion@1.2.9(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-accordion@1.2.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collapsible': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-collection': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-collapsible': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-arrow@1.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-arrow@1.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-checkbox@1.3.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-checkbox@1.3.0(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-collapsible@1.1.9(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collapsible@1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-collection@1.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collection@1.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.2)(react@19.1.0)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.3)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@radix-ui/react-context@1.1.2(@types/react@19.1.2)(react@19.1.0)': + '@radix-ui/react-context@1.1.2(@types/react@19.1.3)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@radix-ui/react-dialog@1.1.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dialog@1.1.12(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-portal': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-portal': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) aria-hidden: 1.2.4 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@19.1.0) + react-remove-scroll: 2.6.3(@types/react@19.1.3)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-direction@1.1.1(@types/react@19.1.2)(react@19.1.0)': + '@radix-ui/react-direction@1.1.1(@types/react@19.1.3)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@radix-ui/react-dismissable-layer@1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dismissable-layer@1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-dropdown-menu@2.1.13(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dropdown-menu@2.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-menu': 2.1.13(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-menu': 2.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.2)(react@19.1.0)': + '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.3)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@radix-ui/react-focus-scope@1.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-focus-scope@1.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-id@1.1.1(@types/react@19.1.2)(react@19.1.0)': + '@radix-ui/react-id@1.1.1(@types/react@19.1.3)(react@19.1.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@radix-ui/react-label@2.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-label@2.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-menu@2.1.13(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-menu@2.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-popper': 1.2.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-collection': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-popper': 1.2.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) aria-hidden: 1.2.4 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@19.1.0) + react-remove-scroll: 2.6.3(@types/react@19.1.3)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-popover@1.1.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-popover@1.1.12(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-popper': 1.2.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-popper': 1.2.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) aria-hidden: 1.2.4 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@19.1.0) + react-remove-scroll: 2.6.3(@types/react@19.1.3)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-popper@1.2.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-popper@1.2.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-arrow': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-arrow': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.3)(react@19.1.0) '@radix-ui/rect': 1.1.1 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-portal@1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-portal@1.1.7(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-primitive@2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-primitive@2.1.0(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-slot': 1.2.0(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-primitive@2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-primitive@2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-slot': 1.2.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-slot': 1.2.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-radio-group@1.3.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-radio-group@1.3.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-roving-focus@1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-roving-focus@1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-collection': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-select@2.2.3(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-select@2.2.3(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-popper': 1.2.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-popper': 1.2.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) aria-hidden: 1.2.4 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@19.1.0) + react-remove-scroll: 2.6.3(@types/react@19.1.3)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-separator@1.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-separator@1.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-slider@1.3.3(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-slider@1.3.3(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-collection': 1.1.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-slot@1.2.0(@types/react@19.1.2)(react@19.1.0)': + '@radix-ui/react-slot@1.2.0(@types/react@19.1.3)(react@19.1.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@radix-ui/react-slot@1.2.1(@types/react@19.1.2)(react@19.1.0)': + '@radix-ui/react-slot@1.2.1(@types/react@19.1.3)(react@19.1.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@radix-ui/react-switch@1.2.3(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-switch@1.2.3(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-tabs@1.1.10(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-tabs@1.1.10(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-toggle-group@1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toggle-group@1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-toggle': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-toggle@1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toggle@1.1.7(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-tooltip@1.2.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-tooltip@1.2.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-popper': 1.2.5(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-popper': 1.2.5(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.2)(react@19.1.0)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.3)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.2)(react@19.1.0)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.3)(react@19.1.0)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.2)(react@19.1.0)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.3)(react@19.1.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.2)(react@19.1.0)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.3)(react@19.1.0)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.2)(react@19.1.0)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.3)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.2)(react@19.1.0)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.3)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.2)(react@19.1.0)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.3)(react@19.1.0)': dependencies: '@radix-ui/rect': 1.1.1 react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@radix-ui/react-use-size@1.1.1(@types/react@19.1.2)(react@19.1.0)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.3)(react@19.1.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@radix-ui/react-visually-hidden@1.2.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-visually-hidden@1.2.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) '@radix-ui/rect@1.1.1': {} @@ -13364,7 +13373,7 @@ snapshots: '@rushstack/eslint-patch@1.11.0': {} - '@rushstack/node-core-library@5.13.0(@types/node@22.15.3)': + '@rushstack/node-core-library@5.13.0(@types/node@22.15.12)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -13375,23 +13384,23 @@ snapshots: resolve: 1.22.10 semver: 7.5.4 optionalDependencies: - '@types/node': 22.15.3 + '@types/node': 22.15.12 '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.10 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.15.2(@types/node@22.15.3)': + '@rushstack/terminal@0.15.2(@types/node@22.15.12)': dependencies: - '@rushstack/node-core-library': 5.13.0(@types/node@22.15.3) + '@rushstack/node-core-library': 5.13.0(@types/node@22.15.12) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.15.3 + '@types/node': 22.15.12 - '@rushstack/ts-command-line@4.23.7(@types/node@22.15.3)': + '@rushstack/ts-command-line@4.23.7(@types/node@22.15.12)': dependencies: - '@rushstack/terminal': 0.15.2(@types/node@22.15.3) + '@rushstack/terminal': 0.15.2(@types/node@22.15.12) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -13966,9 +13975,9 @@ snapshots: storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/addon-docs@8.6.12(@types/react@19.1.2)(storybook@8.6.12(prettier@3.5.3))': + '@storybook/addon-docs@8.6.12(@types/react@19.1.3)(storybook@8.6.12(prettier@3.5.3))': dependencies: - '@mdx-js/react': 3.1.0(@types/react@19.1.2)(react@19.1.0) + '@mdx-js/react': 3.1.0(@types/react@19.1.3)(react@19.1.0) '@storybook/blocks': 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3)) '@storybook/csf-plugin': 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/react-dom-shim': 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3)) @@ -13979,12 +13988,12 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@storybook/addon-essentials@8.6.12(@types/react@19.1.2)(storybook@8.6.12(prettier@3.5.3))': + '@storybook/addon-essentials@8.6.12(@types/react@19.1.3)(storybook@8.6.12(prettier@3.5.3))': dependencies: '@storybook/addon-actions': 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-backgrounds': 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-controls': 8.6.12(storybook@8.6.12(prettier@3.5.3)) - '@storybook/addon-docs': 8.6.12(@types/react@19.1.2)(storybook@8.6.12(prettier@3.5.3)) + '@storybook/addon-docs': 8.6.12(@types/react@19.1.3)(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-highlight': 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-measure': 8.6.12(storybook@8.6.12(prettier@3.5.3)) '@storybook/addon-outline': 8.6.12(storybook@8.6.12(prettier@3.5.3)) @@ -14051,13 +14060,13 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@storybook/builder-vite@8.6.12(storybook@8.6.12(prettier@3.5.3))(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': + '@storybook/builder-vite@8.6.12(storybook@8.6.12(prettier@3.5.3))(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': dependencies: '@storybook/csf-plugin': 8.6.12(storybook@8.6.12(prettier@3.5.3)) browser-assert: 1.2.1 storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 - vite: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) '@storybook/components@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: @@ -14120,11 +14129,11 @@ snapshots: react-dom: 19.1.0(react@19.1.0) storybook: 8.6.12(prettier@3.5.3) - '@storybook/react-vite@8.6.12(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.40.0)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': + '@storybook/react-vite@8.6.12(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.40.0)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) '@rollup/pluginutils': 5.1.4(rollup@4.40.0) - '@storybook/builder-vite': 8.6.12(storybook@8.6.12(prettier@3.5.3))(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + '@storybook/builder-vite': 8.6.12(storybook@8.6.12(prettier@3.5.3))(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) '@storybook/react': 8.6.12(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3) find-up: 5.0.0 magic-string: 0.30.17 @@ -14134,7 +14143,7 @@ snapshots: resolve: 1.22.10 storybook: 8.6.12(prettier@3.5.3) tsconfig-paths: 4.2.0 - vite: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) optionalDependencies: '@storybook/test': 8.6.12(storybook@8.6.12(prettier@3.5.3)) transitivePeerDependencies: @@ -14180,34 +14189,34 @@ snapshots: dependencies: tslib: 2.8.1 - '@t3-oss/env-core@0.13.4(arktype@2.1.20)(typescript@5.8.3)(zod@3.24.1)': + '@t3-oss/env-core@0.13.4(arktype@2.1.20)(typescript@5.8.3)(zod@3.24.4)': dependencies: arktype: 2.1.20 optionalDependencies: typescript: 5.8.3 - zod: 3.24.1 + zod: 3.24.4 - '@t3-oss/env-nextjs@0.13.4(arktype@2.1.20)(typescript@5.8.3)(zod@3.24.1)': + '@t3-oss/env-nextjs@0.13.4(arktype@2.1.20)(typescript@5.8.3)(zod@3.24.4)': dependencies: - '@t3-oss/env-core': 0.13.4(arktype@2.1.20)(typescript@5.8.3)(zod@3.24.1) + '@t3-oss/env-core': 0.13.4(arktype@2.1.20)(typescript@5.8.3)(zod@3.24.4) optionalDependencies: typescript: 5.8.3 - zod: 3.24.1 + zod: 3.24.4 transitivePeerDependencies: - arktype - '@tailwindcss/forms@0.5.10(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)))': + '@tailwindcss/forms@0.5.10(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3)))': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.16(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)) + tailwindcss: 3.4.16(ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3)) - '@tailwindcss/typography@0.5.16(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)))': + '@tailwindcss/typography@0.5.16(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3)))': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.16(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)) + tailwindcss: 3.4.16(ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3)) '@tanstack/react-table@8.21.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: @@ -14266,15 +14275,15 @@ snapshots: '@testing-library/dom': 8.20.1 preact: 10.26.5 - '@testing-library/react@16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@testing-library/react@16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.27.0 '@testing-library/dom': 10.4.0 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 - '@types/react-dom': 19.1.3(@types/react@19.1.2) + '@types/react': 19.1.3 + '@types/react-dom': 19.1.3(@types/react@19.1.3) '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': dependencies: @@ -14369,7 +14378,7 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 22.15.3 + '@types/node': 22.15.12 '@types/debug@4.1.12': dependencies: @@ -14424,11 +14433,11 @@ snapshots: '@types/mysql@2.15.26': dependencies: - '@types/node': 22.15.3 + '@types/node': 22.15.12 '@types/node-fetch@2.6.12': dependencies: - '@types/node': 22.15.3 + '@types/node': 22.15.12 form-data: 4.0.2 '@types/node@12.20.55': {} @@ -14437,7 +14446,7 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@22.15.3': + '@types/node@22.15.12': dependencies: undici-types: 6.21.0 @@ -14457,7 +14466,7 @@ snapshots: '@types/pg@8.6.1': dependencies: - '@types/node': 22.15.3 + '@types/node': 22.15.12 pg-protocol: 1.9.5 pg-types: 2.2.0 @@ -14465,21 +14474,17 @@ snapshots: dependencies: '@types/node': 22.14.0 - '@types/react-dom@19.1.3(@types/react@19.1.2)': + '@types/react-dom@19.1.3(@types/react@19.1.3)': dependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - '@types/react@19.1.0': - dependencies: - csstype: 3.1.3 - - '@types/react@19.1.2': + '@types/react@19.1.3': dependencies: csstype: 3.1.3 '@types/readable-stream@4.0.18': dependencies: - '@types/node': 22.15.3 + '@types/node': 22.15.12 safe-buffer: 5.1.2 '@types/resolve@1.20.6': {} @@ -14490,11 +14495,11 @@ snapshots: '@types/tedious@4.0.14': dependencies: - '@types/node': 22.15.3 + '@types/node': 22.15.12 - '@types/testing-library__react@10.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@types/testing-library__react@10.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@testing-library/react': 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@testing-library/react': 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - '@testing-library/dom' - '@types/react' @@ -14517,7 +14522,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 22.15.3 + '@types/node': 22.15.12 '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3)': dependencies: @@ -14537,14 +14542,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.29.1(@typescript-eslint/parser@8.29.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.29.1(eslint@8.57.0)(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.29.1 - '@typescript-eslint/type-utils': 8.29.1(eslint@8.57.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.29.1(eslint@8.57.0)(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.29.1 + '@typescript-eslint/parser': 8.31.1(eslint@8.57.0)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.31.1 + '@typescript-eslint/type-utils': 8.31.1(eslint@8.57.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.31.1(eslint@8.57.0)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.31.1 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.2 @@ -14554,14 +14559,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.32.0(@typescript-eslint/parser@8.32.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.31.1(eslint@8.57.0)(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/type-utils': 8.31.1(eslint@8.57.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.31.1(eslint@8.57.0)(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.31.1 + '@typescript-eslint/parser': 8.32.0(eslint@8.57.0)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.32.0 + '@typescript-eslint/type-utils': 8.32.0(eslint@8.57.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.0(eslint@8.57.0)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.32.0 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.2 @@ -14584,18 +14589,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.29.1(eslint@8.57.0)(typescript@5.8.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.29.1 - '@typescript-eslint/types': 8.29.1 - '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.29.1 - debug: 4.4.0 - eslint: 8.57.0 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/parser@8.31.1(eslint@8.57.0)(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.31.1 @@ -14608,6 +14601,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.32.0(eslint@8.57.0)(typescript@5.8.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.32.0 + '@typescript-eslint/types': 8.32.0 + '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.32.0 + debug: 4.4.0 + eslint: 8.57.0 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 @@ -14618,11 +14623,6 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/scope-manager@8.29.1': - dependencies: - '@typescript-eslint/types': 8.29.1 - '@typescript-eslint/visitor-keys': 8.29.1 - '@typescript-eslint/scope-manager@8.30.1': dependencies: '@typescript-eslint/types': 8.30.1 @@ -14633,6 +14633,11 @@ snapshots: '@typescript-eslint/types': 8.31.1 '@typescript-eslint/visitor-keys': 8.31.1 + '@typescript-eslint/scope-manager@8.32.0': + dependencies: + '@typescript-eslint/types': 8.32.0 + '@typescript-eslint/visitor-keys': 8.32.0 + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) @@ -14645,17 +14650,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.29.1(eslint@8.57.0)(typescript@5.8.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.29.1(eslint@8.57.0)(typescript@5.8.3) - debug: 4.4.0 - eslint: 8.57.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/type-utils@8.31.1(eslint@8.57.0)(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) @@ -14667,16 +14661,27 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.32.0(eslint@8.57.0)(typescript@5.8.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.0(eslint@8.57.0)(typescript@5.8.3) + debug: 4.4.0 + eslint: 8.57.0 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@5.62.0': {} '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/types@8.29.1': {} - '@typescript-eslint/types@8.30.1': {} '@typescript-eslint/types@8.31.1': {} + '@typescript-eslint/types@8.32.0': {} + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 5.62.0 @@ -14706,20 +14711,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.29.1(typescript@5.8.3)': - dependencies: - '@typescript-eslint/types': 8.29.1 - '@typescript-eslint/visitor-keys': 8.29.1 - debug: 4.4.0 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.30.1(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 8.30.1 @@ -14748,6 +14739,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.32.0(typescript@5.8.3)': + dependencies: + '@typescript-eslint/types': 8.32.0 + '@typescript-eslint/visitor-keys': 8.32.0 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.6.1(eslint@8.57.0) @@ -14774,17 +14779,6 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.29.1(eslint@8.57.0)(typescript@5.8.3)': - dependencies: - '@eslint-community/eslint-utils': 4.6.1(eslint@8.57.0) - '@typescript-eslint/scope-manager': 8.29.1 - '@typescript-eslint/types': 8.29.1 - '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.8.3) - eslint: 8.57.0 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/utils@8.30.1(eslint@8.57.0)(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.6.1(eslint@8.57.0) @@ -14807,6 +14801,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.32.0(eslint@8.57.0)(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.0) + '@typescript-eslint/scope-manager': 8.32.0 + '@typescript-eslint/types': 8.32.0 + '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3) + eslint: 8.57.0 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 @@ -14817,11 +14822,6 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.29.1': - dependencies: - '@typescript-eslint/types': 8.29.1 - eslint-visitor-keys: 4.2.0 - '@typescript-eslint/visitor-keys@8.30.1': dependencies: '@typescript-eslint/types': 8.30.1 @@ -14832,6 +14832,11 @@ snapshots: '@typescript-eslint/types': 8.31.1 eslint-visitor-keys: 4.2.0 + '@typescript-eslint/visitor-keys@8.32.0': + dependencies: + '@typescript-eslint/types': 8.32.0 + eslint-visitor-keys: 4.2.0 + '@ungap/structured-clone@1.3.0': {} '@unkey/api@0.33.1': @@ -14840,7 +14845,7 @@ snapshots: '@unkey/error@0.2.0': dependencies: - zod: 3.24.2 + zod: 3.24.4 '@unkey/ratelimit@0.5.5': dependencies: @@ -14849,7 +14854,7 @@ snapshots: '@unkey/rbac@0.3.1': dependencies: '@unkey/error': 0.2.0 - zod: 3.24.2 + zod: 3.24.4 '@unrs/resolver-binding-darwin-arm64@1.6.2': optional: true @@ -14911,7 +14916,7 @@ snapshots: satori: 0.12.2 yoga-wasm-web: 0.3.3 - '@vercel/style-guide@6.0.0(@next/eslint-plugin-next@15.3.0)(eslint@8.57.0)(prettier@3.5.3)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': + '@vercel/style-guide@6.0.0(@next/eslint-plugin-next@15.3.1)(eslint@8.57.0)(prettier@3.5.3)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': dependencies: '@babel/core': 7.26.0 '@babel/eslint-parser': 7.27.0(@babel/core@7.26.0)(eslint@8.57.0) @@ -14919,11 +14924,11 @@ snapshots: '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.8.3) eslint-config-prettier: 9.1.0(eslint@8.57.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0)) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.31.0) eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@8.29.1(@typescript-eslint/parser@8.29.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@8.32.0(@typescript-eslint/parser@8.32.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.0) eslint-plugin-playwright: 1.8.3(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0) eslint-plugin-react: 7.37.5(eslint@8.57.0) @@ -14931,10 +14936,10 @@ snapshots: eslint-plugin-testing-library: 6.5.0(eslint@8.57.0)(typescript@5.8.3) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 51.0.1(eslint@8.57.0) - eslint-plugin-vitest: 0.3.26(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + eslint-plugin-vitest: 0.3.26(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) prettier-plugin-packagejson: 2.5.10(prettier@3.5.3) optionalDependencies: - '@next/eslint-plugin-next': 15.3.0 + '@next/eslint-plugin-next': 15.3.1 eslint: 8.57.0 prettier: 3.5.3 typescript: 5.8.3 @@ -14945,18 +14950,18 @@ snapshots: - supports-color - vitest - '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': + '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@3.1.3(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': + '@vitest/coverage-v8@3.1.3(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -14970,17 +14975,17 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vitest: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.1.42(@typescript-eslint/utils@8.31.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': + '@vitest/eslint-plugin@1.1.44(@typescript-eslint/utils@8.32.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': dependencies: - '@typescript-eslint/utils': 8.31.1(eslint@8.57.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.0(eslint@8.57.0)(typescript@5.8.3) eslint: 8.57.0 - vitest: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) optionalDependencies: typescript: 5.8.3 + vitest: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) '@vitest/expect@2.0.5': dependencies: @@ -14996,13 +15001,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': + '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))': dependencies: '@vitest/spy': 3.1.3 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) '@vitest/pretty-format@2.0.5': dependencies: @@ -15775,12 +15780,12 @@ snapshots: cluster-key-slot@1.1.2: {} - cmdk@1.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + cmdk@1.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dialog': 1.1.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-dialog': 1.1.12(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) transitivePeerDependencies: @@ -16395,16 +16400,16 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@15.3.0(eslint@8.57.0)(typescript@5.8.3): + eslint-config-next@15.3.1(eslint@8.57.0)(typescript@5.8.3): dependencies: - '@next/eslint-plugin-next': 15.3.0 + '@next/eslint-plugin-next': 15.3.1 '@rushstack/eslint-patch': 1.11.0 - '@typescript-eslint/eslint-plugin': 8.31.1(@typescript-eslint/parser@8.31.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) - '@typescript-eslint/parser': 8.31.1(eslint@8.57.0)(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.32.0(@typescript-eslint/parser@8.32.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.32.0(eslint@8.57.0)(typescript@5.8.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.0) eslint-plugin-react: 7.37.5(eslint@8.57.0) eslint-plugin-react-hooks: 5.2.0(eslint@8.57.0) @@ -16415,7 +16420,7 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-prettier@10.1.1(eslint@8.57.0): + eslint-config-prettier@10.1.2(eslint@8.57.0): dependencies: eslint: 8.57.0 @@ -16423,15 +16428,15 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-config-turbo@2.5.0(eslint@8.57.0)(turbo@2.5.2): + eslint-config-turbo@2.5.2(eslint@8.57.0)(turbo@2.5.2): dependencies: eslint: 8.57.0 - eslint-plugin-turbo: 2.5.0(eslint@8.57.0)(turbo@2.5.2) + eslint-plugin-turbo: 2.5.2(eslint@8.57.0)(turbo@2.5.2) turbo: 2.5.2 - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0)): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0): dependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0) eslint-import-resolver-node@0.3.9: dependencies: @@ -16452,11 +16457,11 @@ snapshots: tinyglobby: 0.2.13 unrs-resolver: 1.6.2 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: @@ -16467,13 +16472,14 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.29.1(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.29.1(eslint@8.57.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.32.0(eslint@8.57.0)(typescript@5.8.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.0) transitivePeerDependencies: - supports-color @@ -16507,7 +16513,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -16525,7 +16531,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.29.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -16536,7 +16542,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.29.1(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -16548,18 +16554,18 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.29.1(eslint@8.57.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.32.0(eslint@8.57.0)(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@8.29.1(@typescript-eslint/parser@8.29.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@8.32.0(@typescript-eslint/parser@8.32.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.8.3) eslint: 8.57.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.29.1(@typescript-eslint/parser@8.29.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.32.0(@typescript-eslint/parser@8.32.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) transitivePeerDependencies: - supports-color - typescript @@ -16588,7 +16594,7 @@ snapshots: eslint: 8.57.0 globals: 13.24.0 optionalDependencies: - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@8.29.1(@typescript-eslint/parser@8.29.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@8.32.0(@typescript-eslint/parser@8.32.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): dependencies: @@ -16598,10 +16604,6 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-react-refresh@0.4.19(eslint@8.57.0): - dependencies: - eslint: 8.57.0 - eslint-plugin-react-refresh@0.4.20(eslint@8.57.0): dependencies: eslint: 8.57.0 @@ -16651,7 +16653,7 @@ snapshots: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - eslint-plugin-turbo@2.5.0(eslint@8.57.0)(turbo@2.5.2): + eslint-plugin-turbo@2.5.2(eslint@8.57.0)(turbo@2.5.2): dependencies: dotenv: 16.0.3 eslint: 8.57.0 @@ -16679,13 +16681,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-vitest@0.3.26(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)): + eslint-plugin-vitest@0.3.26(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)): dependencies: '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.8.3) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) - vitest: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vitest: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) transitivePeerDependencies: - supports-color - typescript @@ -17597,7 +17599,7 @@ snapshots: isexe@2.0.0: {} - isomorphic-dompurify@2.23.0: + isomorphic-dompurify@2.24.0: dependencies: dompurify: 3.2.5 jsdom: 26.1.0 @@ -17667,7 +17669,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.15.3 + '@types/node': 22.15.12 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -18378,13 +18380,13 @@ snapshots: optionalDependencies: nodemailer: 7.0.2 - next-safe-action@7.10.8(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(zod@3.24.1): + next-safe-action@7.10.8(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(zod@3.24.4): dependencies: next: 15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - zod: 3.24.1 + zod: 3.24.4 next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: @@ -18877,13 +18879,13 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.5.3 - postcss-load-config@4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)): + postcss-load-config@4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3)): dependencies: lilconfig: 3.1.3 yaml: 2.7.1 optionalDependencies: postcss: 8.5.3 - ts-node: 10.9.2(@types/node@22.15.3)(typescript@5.8.3) + ts-node: 10.9.2(@types/node@22.15.12)(typescript@5.8.3) postcss-nested@6.2.0(postcss@8.5.3): dependencies: @@ -18995,9 +18997,9 @@ snapshots: pretty-format@3.8.0: {} - prisma-json-types-generator@3.2.3(prisma@6.7.0(typescript@5.8.3))(typescript@5.8.3): + prisma-json-types-generator@3.3.1(prisma@6.7.0(typescript@5.8.3))(typescript@5.8.3): dependencies: - '@prisma/generator-helper': 6.5.0 + '@prisma/generator-helper': 6.7.0 prisma: 6.7.0(typescript@5.8.3) tslib: 2.8.1 typescript: 5.8.3 @@ -19050,7 +19052,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.15.3 + '@types/node': 22.15.12 long: 5.3.2 proxy-from-env@1.1.0: {} @@ -19099,7 +19101,7 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-calendar@5.1.0(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-calendar@5.1.0(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@wojtekmaj/date-utils': 1.5.1 clsx: 2.1.1 @@ -19108,7 +19110,7 @@ snapshots: react-dom: 19.1.0(react@19.1.0) warning: 4.0.3 optionalDependencies: - '@types/react': 19.1.0 + '@types/react': 19.1.3 react-colorful@5.6.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: @@ -19120,19 +19122,19 @@ snapshots: react: 19.1.0 tween-functions: 1.2.0 - react-date-picker@11.0.0(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-date-picker@11.0.0(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@wojtekmaj/date-utils': 1.5.1 clsx: 2.1.1 get-user-locale: 2.3.2 make-event-props: 1.6.2 react: 19.1.0 - react-calendar: 5.1.0(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react-calendar: 5.1.0(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-dom: 19.1.0(react@19.1.0) - react-fit: 2.0.1(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react-fit: 2.0.1(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) update-input-width: 1.4.2 optionalDependencies: - '@types/react': 19.1.0 + '@types/react': 19.1.3 transitivePeerDependencies: - '@types/react-dom' @@ -19172,14 +19174,14 @@ snapshots: '@babel/runtime': 7.27.0 react: 19.1.0 - react-fit@2.0.1(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-fit@2.0.1(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: detect-element-overflow: 1.4.2 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) warning: 4.0.3 optionalDependencies: - '@types/react': 19.1.0 + '@types/react': 19.1.3 react-hook-form@7.56.2(react@19.1.0): dependencies: @@ -19202,32 +19204,32 @@ snapshots: react-refresh@0.17.0: {} - react-remove-scroll-bar@2.3.8(@types/react@19.1.2)(react@19.1.0): + react-remove-scroll-bar@2.3.8(@types/react@19.1.3)(react@19.1.0): dependencies: react: 19.1.0 - react-style-singleton: 2.2.3(@types/react@19.1.2)(react@19.1.0) + react-style-singleton: 2.2.3(@types/react@19.1.3)(react@19.1.0) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - react-remove-scroll@2.6.3(@types/react@19.1.2)(react@19.1.0): + react-remove-scroll@2.6.3(@types/react@19.1.3)(react@19.1.0): dependencies: react: 19.1.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.2)(react@19.1.0) - react-style-singleton: 2.2.3(@types/react@19.1.2)(react@19.1.0) + react-remove-scroll-bar: 2.3.8(@types/react@19.1.3)(react@19.1.0) + react-style-singleton: 2.2.3(@types/react@19.1.3)(react@19.1.0) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.2)(react@19.1.0) - use-sidecar: 1.1.3(@types/react@19.1.2)(react@19.1.0) + use-callback-ref: 1.3.3(@types/react@19.1.3)(react@19.1.0) + use-sidecar: 1.1.3(@types/react@19.1.3)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - react-style-singleton@2.2.3(@types/react@19.1.2)(react@19.1.0): + react-style-singleton@2.2.3(@types/react@19.1.3)(react@19.1.0): dependencies: get-nonce: 1.0.1 react: 19.1.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 react-turnstile@1.1.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: @@ -20081,7 +20083,7 @@ snapshots: tailwind-merge@3.2.0: {} - tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)): + tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -20100,7 +20102,7 @@ snapshots: postcss: 8.5.3 postcss-import: 15.1.0(postcss@8.5.3) postcss-js: 4.0.1(postcss@8.5.3) - postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)) + postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3)) postcss-nested: 6.2.0(postcss@8.5.3) postcss-selector-parser: 6.1.2 resolve: 1.22.10 @@ -20142,7 +20144,7 @@ snapshots: '@azure/identity': 4.9.0 '@azure/keyvault-keys': 4.9.0 '@js-joda/core': 5.6.5 - '@types/node': 22.15.3 + '@types/node': 22.15.12 bl: 6.1.0 iconv-lite: 0.6.3 js-md4: 0.3.2 @@ -20260,14 +20262,14 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3): + ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.15.3 + '@types/node': 22.15.12 acorn: 8.14.1 acorn-walk: 8.3.4 arg: 4.1.3 @@ -20394,7 +20396,7 @@ snapshots: typedarray@0.0.6: optional: true - typeorm@0.3.22(mongodb@6.16.0(@aws-sdk/credential-providers@3.799.0(aws-crt@1.26.2))(socks@2.8.4))(mssql@11.0.1)(mysql2@3.14.1)(pg@8.15.6)(redis@4.7.0)(reflect-metadata@0.2.2)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.3)): + typeorm@0.3.22(mongodb@6.16.0(@aws-sdk/credential-providers@3.799.0(aws-crt@1.26.2))(socks@2.8.4))(mssql@11.0.1)(mysql2@3.14.1)(pg@8.15.6)(redis@4.7.0)(reflect-metadata@0.2.2)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.3)): dependencies: '@sqltools/formatter': 1.2.5 ansis: 3.17.0 @@ -20417,7 +20419,7 @@ snapshots: pg: 8.15.6 redis: 4.7.0 sqlite3: 5.1.7 - ts-node: 10.9.2(@types/node@22.15.3)(typescript@5.8.3) + ts-node: 10.9.2(@types/node@22.15.12)(typescript@5.8.3) transitivePeerDependencies: - supports-color @@ -20525,20 +20527,20 @@ snapshots: url-template@2.0.8: {} - use-callback-ref@1.3.3(@types/react@19.1.2)(react@19.1.0): + use-callback-ref@1.3.3(@types/react@19.1.3)(react@19.1.0): dependencies: react: 19.1.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 - use-sidecar@1.1.3(@types/react@19.1.2)(react@19.1.0): + use-sidecar@1.1.3(@types/react@19.1.3)(react@19.1.0): dependencies: detect-node-es: 1.1.0 react: 19.1.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.3 util-deprecate@1.0.2: {} @@ -20565,13 +20567,13 @@ snapshots: vary@1.1.2: {} - vite-node@3.1.3(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1): + vite-node@3.1.3(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - jiti @@ -20586,9 +20588,9 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.5.3(@types/node@22.15.3)(rollup@4.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)): + vite-plugin-dts@4.5.3(@types/node@22.15.12)(rollup@4.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)): dependencies: - '@microsoft/api-extractor': 7.52.4(@types/node@22.15.3) + '@microsoft/api-extractor': 7.52.4(@types/node@22.15.12) '@rollup/pluginutils': 5.1.4(rollup@4.40.0) '@volar/typescript': 2.4.12 '@vue/language-core': 2.2.0(typescript@5.8.3) @@ -20599,13 +20601,13 @@ snapshots: magic-string: 0.30.17 typescript: 5.8.3 optionalDependencies: - vite: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-prerender-plugin@0.5.10(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)): + vite-prerender-plugin@0.5.10(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)): dependencies: kolorist: 1.8.0 magic-string: 0.30.17 @@ -20613,20 +20615,20 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.4 stack-trace: 1.0.0-pre2 - vite: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.8.3) optionalDependencies: - vite: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) transitivePeerDependencies: - supports-color - typescript - vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1): + vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1): dependencies: esbuild: 0.25.2 fdir: 6.4.4(picomatch@4.0.2) @@ -20635,7 +20637,7 @@ snapshots: rollup: 4.40.0 tinyglobby: 0.2.13 optionalDependencies: - '@types/node': 22.15.3 + '@types/node': 22.15.12 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.29.2 @@ -20643,16 +20645,16 @@ snapshots: tsx: 4.19.4 yaml: 2.7.1 - vitest-mock-extended@3.1.0(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)): + vitest-mock-extended@3.1.0(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)): dependencies: ts-essentials: 10.0.4(typescript@5.8.3) typescript: 5.8.3 - vitest: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vitest: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) - vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1): + vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1): dependencies: '@vitest/expect': 3.1.3 - '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) '@vitest/pretty-format': 3.1.3 '@vitest/runner': 3.1.3 '@vitest/snapshot': 3.1.3 @@ -20669,12 +20671,12 @@ snapshots: tinyglobby: 0.2.13 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) - vite-node: 3.1.3(@types/node@22.15.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vite-node: 3.1.3(@types/node@22.15.12)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.15.3 + '@types/node': 22.15.12 jsdom: 26.1.0 transitivePeerDependencies: - jiti @@ -20965,10 +20967,8 @@ snapshots: yoga-wasm-web@0.3.3: {} - zod-openapi@4.2.4(zod@3.24.1): + zod-openapi@4.2.4(zod@3.24.4): dependencies: - zod: 3.24.1 + zod: 3.24.4 - zod@3.24.1: {} - - zod@3.24.2: {} + zod@3.24.4: {} From 0052dc88f03459c0936769ad5951b30f1125e00d Mon Sep 17 00:00:00 2001 From: Anshuman Pandey <54475686+pandeymangg@users.noreply.github.com> Date: Tue, 6 May 2025 21:37:26 +0530 Subject: [PATCH 05/17] fix: increases language button size (#5677) --- packages/surveys/src/components/general/language-switch.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/surveys/src/components/general/language-switch.tsx b/packages/surveys/src/components/general/language-switch.tsx index af6322cec1..336cc2ccfe 100644 --- a/packages/surveys/src/components/general/language-switch.tsx +++ b/packages/surveys/src/components/general/language-switch.tsx @@ -41,16 +41,16 @@ export function LanguageSwitch({ }); return ( -
+
{showLanguageDropdown ? (
Date: Tue, 6 May 2025 18:57:51 +0200 Subject: [PATCH 06/17] chore: move dependencies to devDependencies if possible (#5679) --- apps/web/package.json | 9 ++-- packages/database/package.json | 10 ++-- packages/i18n-utils/package.json | 1 - packages/surveys/package.json | 16 +++---- pnpm-lock.yaml | 80 ++++++++++++++++---------------- 5 files changed, 57 insertions(+), 59 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index 622c977f20..110ce85658 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -73,15 +73,12 @@ "@tailwindcss/forms": "0.5.10", "@tailwindcss/typography": "0.5.16", "@tanstack/react-table": "8.21.3", - "@testing-library/jest-dom": "6.6.3", - "@tolgee/cli": "2.10.2", "@tolgee/format-icu": "6.2.4", "@tolgee/react": "6.2.4", "@ungap/structured-clone": "1.3.0", "@unkey/ratelimit": "0.5.5", "@vercel/functions": "2.0.1", "@vercel/og": "0.6.8", - "autoprefixer": "10.4.21", "bcryptjs": "3.0.2", "boring-avatars": "1.11.2", "class-variance-authority": "0.7.1", @@ -89,7 +86,6 @@ "cmdk": "1.1.1", "csv-parse": "5.6.0", "date-fns": "4.1.0", - "dotenv": "16.5.0", "file-loader": "6.2.0", "framer-motion": "12.9.7", "googleapis": "148.0.0", @@ -111,7 +107,6 @@ "nodemailer": "7.0.2", "otplib": "12.0.1", "papaparse": "5.5.2", - "postcss": "8.5.3", "posthog-js": "1.239.1", "posthog-node": "4.17.1", "prismjs": "1.30.0", @@ -144,7 +139,9 @@ "@formbricks/config-typescript": "workspace:*", "@formbricks/eslint-config": "workspace:*", "@neshca/cache-handler": "1.9.0", + "@testing-library/jest-dom": "6.6.3", "@testing-library/react": "16.3.0", + "@tolgee/cli": "2.10.2", "@types/bcryptjs": "2.4.6", "@types/heic-convert": "2.1.0", "@types/jsonwebtoken": "9.0.9", @@ -157,7 +154,9 @@ "@types/testing-library__react": "10.2.0", "@types/ungap__structured-clone": "1.2.0", "@vitest/coverage-v8": "3.1.3", + "autoprefixer": "10.4.21", "dotenv": "16.5.0", + "postcss": "8.5.3", "ts-node": "10.9.2", "resize-observer-polyfill": "1.5.1", "vite": "6.3.5", diff --git a/packages/database/package.json b/packages/database/package.json index 9599964eaf..dc886fb6c0 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -24,18 +24,18 @@ }, "dependencies": { "@formbricks/logger": "workspace:*", + "@paralleldrive/cuid2": "2.2.2", "@prisma/client": "6.7.0", "@prisma/extension-accelerate": "1.3.0", - "dotenv-cli": "8.0.0", - "zod-openapi": "4.2.4" + "zod-openapi": "4.2.4", + "zod": "3.24.4" }, "devDependencies": { "@formbricks/config-typescript": "workspace:*", "@formbricks/eslint-config": "workspace:*", - "@paralleldrive/cuid2": "2.2.2", + "dotenv-cli": "8.0.0", "prisma": "6.7.0", "prisma-json-types-generator": "3.3.1", - "ts-node": "10.9.2", - "zod": "3.24.4" + "ts-node": "10.9.2" } } diff --git a/packages/i18n-utils/package.json b/packages/i18n-utils/package.json index 153b443016..e9544e9b80 100644 --- a/packages/i18n-utils/package.json +++ b/packages/i18n-utils/package.json @@ -30,7 +30,6 @@ "lint:report": "eslint . --format json --output-file ../../lint-results/app-store.json", "build": "tsc && vite build" }, - "peerDependencies": {}, "devDependencies": { "vite": "6.3.5", "@formbricks/config-typescript": "workspace:*", diff --git a/packages/surveys/package.json b/packages/surveys/package.json index a8ee179a8c..f78c8bed08 100644 --- a/packages/surveys/package.json +++ b/packages/surveys/package.json @@ -37,8 +37,15 @@ "test": "vitest run", "test:coverage": "vitest run --coverage" }, - "devDependencies": { + "dependencies": { "@calcom/embed-snippet": "1.3.3", + "@formkit/auto-animate": "0.8.2", + "isomorphic-dompurify": "2.24.0", + "preact": "10.26.5", + "react-date-picker": "11.0.0", + "react-calendar": "5.1.0" + }, + "devDependencies": { "@formbricks/config-typescript": "workspace:*", "@formbricks/eslint-config": "workspace:*", "@formbricks/i18n-utils": "workspace:*", @@ -48,19 +55,12 @@ "@types/react": "19.1.3", "autoprefixer": "10.4.21", "concurrently": "9.1.2", - "isomorphic-dompurify": "2.24.0", "postcss": "8.5.3", - "preact": "10.26.5", - "react-date-picker": "11.0.0", "serve": "14.2.4", "tailwindcss": "3.4.16", "terser": "5.39.0", "vite": "6.3.5", "vite-plugin-dts": "4.5.3", "vite-tsconfig-paths": "5.1.4" - }, - "dependencies": { - "@formkit/auto-animate": "0.8.2", - "react-calendar": "5.1.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 58c9565d77..fadcb97901 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -277,12 +277,6 @@ importers: '@tanstack/react-table': specifier: 8.21.3 version: 8.21.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@testing-library/jest-dom': - specifier: 6.6.3 - version: 6.6.3 - '@tolgee/cli': - specifier: 2.10.2 - version: 2.10.2(jiti@2.4.2)(typescript@5.8.3) '@tolgee/format-icu': specifier: 6.2.4 version: 6.2.4 @@ -301,9 +295,6 @@ importers: '@vercel/og': specifier: 0.6.8 version: 0.6.8 - autoprefixer: - specifier: 10.4.21 - version: 10.4.21(postcss@8.5.3) bcryptjs: specifier: 3.0.2 version: 3.0.2 @@ -325,9 +316,6 @@ importers: date-fns: specifier: 4.1.0 version: 4.1.0 - dotenv: - specifier: 16.5.0 - version: 16.5.0 file-loader: specifier: 6.2.0 version: 6.2.0(webpack@5.99.7) @@ -391,9 +379,6 @@ importers: papaparse: specifier: 5.5.2 version: 5.5.2 - postcss: - specifier: 8.5.3 - version: 8.5.3 posthog-js: specifier: 1.239.1 version: 1.239.1 @@ -485,9 +470,15 @@ importers: '@neshca/cache-handler': specifier: 1.9.0 version: 1.9.0(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(redis@4.7.0) + '@testing-library/jest-dom': + specifier: 6.6.3 + version: 6.6.3 '@testing-library/react': specifier: 16.3.0 version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tolgee/cli': + specifier: 2.10.2 + version: 2.10.2(jiti@2.4.2)(typescript@5.8.3) '@types/bcryptjs': specifier: 2.4.6 version: 2.4.6 @@ -524,6 +515,15 @@ importers: '@vitest/coverage-v8': specifier: 3.1.3 version: 3.1.3(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.12)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + autoprefixer: + specifier: 10.4.21 + version: 10.4.21(postcss@8.5.3) + dotenv: + specifier: 16.5.0 + version: 16.5.0 + postcss: + specifier: 8.5.3 + version: 8.5.3 resize-observer-polyfill: specifier: 1.5.1 version: 1.5.1 @@ -617,15 +617,18 @@ importers: '@formbricks/logger': specifier: workspace:* version: link:../logger + '@paralleldrive/cuid2': + specifier: 2.2.2 + version: 2.2.2 '@prisma/client': specifier: 6.7.0 version: 6.7.0(prisma@6.7.0(typescript@5.8.3))(typescript@5.8.3) '@prisma/extension-accelerate': specifier: 1.3.0 version: 1.3.0(@prisma/client@6.7.0(prisma@6.7.0(typescript@5.8.3))(typescript@5.8.3)) - dotenv-cli: - specifier: 8.0.0 - version: 8.0.0 + zod: + specifier: 3.24.4 + version: 3.24.4 zod-openapi: specifier: 4.2.4 version: 4.2.4(zod@3.24.4) @@ -636,9 +639,9 @@ importers: '@formbricks/eslint-config': specifier: workspace:* version: link:../config-eslint - '@paralleldrive/cuid2': - specifier: 2.2.2 - version: 2.2.2 + dotenv-cli: + specifier: 8.0.0 + version: 8.0.0 prisma: specifier: 6.7.0 version: 6.7.0(typescript@5.8.3) @@ -648,9 +651,6 @@ importers: ts-node: specifier: 10.9.2 version: 10.9.2(@types/node@22.15.12)(typescript@5.8.3) - zod: - specifier: 3.24.4 - version: 3.24.4 packages/i18n-utils: devDependencies: @@ -724,16 +724,25 @@ importers: packages/surveys: dependencies: - '@formkit/auto-animate': - specifier: 0.8.2 - version: 0.8.2 - react-calendar: - specifier: 5.1.0 - version: 5.1.0(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - devDependencies: '@calcom/embed-snippet': specifier: 1.3.3 version: 1.3.3 + '@formkit/auto-animate': + specifier: 0.8.2 + version: 0.8.2 + isomorphic-dompurify: + specifier: 2.24.0 + version: 2.24.0 + preact: + specifier: 10.26.5 + version: 10.26.5 + react-calendar: + specifier: 5.1.0 + version: 5.1.0(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react-date-picker: + specifier: 11.0.0 + version: 11.0.0(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + devDependencies: '@formbricks/config-typescript': specifier: workspace:* version: link:../config-typescript @@ -761,18 +770,9 @@ importers: concurrently: specifier: 9.1.2 version: 9.1.2 - isomorphic-dompurify: - specifier: 2.24.0 - version: 2.24.0 postcss: specifier: 8.5.3 version: 8.5.3 - preact: - specifier: 10.26.5 - version: 10.26.5 - react-date-picker: - specifier: 11.0.0 - version: 11.0.0(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) serve: specifier: 14.2.4 version: 14.2.4 From ae2cb150556e1399f5e8264c9db65c405768d082 Mon Sep 17 00:00:00 2001 From: Vijay Date: Tue, 6 May 2025 22:44:51 +0530 Subject: [PATCH 07/17] fix: sonar security hotspot (permission issue - non-root user in Dockerfile) (#5411) Co-authored-by: Matthias Nannt --- apps/web/Dockerfile | 4 +++- .../environments/[environmentId]/actions/loading.tsx | 2 +- .../[environmentId]/components/MainNavigation.tsx | 2 +- .../settings/(organization)/enterprise/page.tsx | 2 +- .../responses/components/ResponseTableCell.tsx | 2 +- .../(analysis)/summary/components/ConsentSummary.tsx | 2 +- .../summary/components/FileUploadSummary.tsx | 2 +- .../summary/components/MatrixQuestionSummary.tsx | 4 ++-- .../summary/components/MultipleChoiceSummary.tsx | 2 +- .../(analysis)/summary/components/NPSSummary.tsx | 6 +++--- .../summary/components/PictureChoiceSummary.tsx | 2 +- .../(analysis)/summary/components/RatingSummary.tsx | 2 +- .../[surveyId]/components/QuestionFilterComboBox.tsx | 4 ++-- .../[surveyId]/components/QuestionsComboBox.tsx | 2 +- .../ee/contacts/segments/components/segment-filter.tsx | 6 +++--- .../components/team-settings/team-settings-modal.tsx | 2 +- .../modules/organization/settings/api-keys/loading.tsx | 2 +- .../modules/survey/components/template-list/index.tsx | 2 +- .../survey/editor/components/animated-survey-bg.tsx | 2 +- .../survey/editor/components/edit-welcome-card.tsx | 2 +- .../editor/components/file-upload-question-form.tsx | 4 ++-- .../survey/editor/components/hidden-fields-card.tsx | 4 ++-- .../survey/editor/components/how-to-send-card.tsx | 2 +- .../modules/survey/editor/components/question-card.tsx | 2 +- .../editor/components/recontact-options-card.tsx | 4 ++-- .../survey/editor/components/response-options-card.tsx | 10 +++++----- .../survey/editor/components/saved-actions-tab.tsx | 2 +- .../survey/editor/components/survey-menu-bar.tsx | 2 +- .../survey/editor/components/survey-placement-card.tsx | 2 +- .../survey/editor/components/survey-variables-card.tsx | 4 ++-- .../survey/editor/components/targeting-locked-card.tsx | 2 +- .../survey/editor/components/unsplash-images.tsx | 4 ++-- .../components/follow-up-action-multi-email-input.tsx | 2 +- .../survey/list/components/copy-survey-form.tsx | 8 ++++---- .../list/components/tests/copy-survey-form.test.tsx | 2 +- .../survey/templates/components/template-container.tsx | 2 +- apps/web/modules/ui/components/card/index.tsx | 2 +- apps/web/modules/ui/components/modal/index.tsx | 8 ++++---- .../web/modules/ui/components/preview-survey/index.tsx | 8 ++++---- apps/web/package.json | 1 + packages/database/package.json | 1 + 41 files changed, 67 insertions(+), 63 deletions(-) diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index 410bdc2d5a..447f012845 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -20,6 +20,7 @@ FROM base AS installer # Enable corepack and prepare pnpm RUN npm install -g corepack@latest RUN corepack enable +RUN corepack prepare pnpm@9.15.0 --activate # Install necessary build tools and compilers RUN apk update && apk add --no-cache cmake g++ gcc jq make openssl-dev python3 @@ -77,6 +78,7 @@ FROM base AS runner RUN npm install -g corepack@latest RUN corepack enable +RUN corepack prepare pnpm@9.15.0 --activate RUN apk add --no-cache curl \ && apk add --no-cache supercronic \ @@ -146,7 +148,7 @@ RUN npm install -g tsx typescript prisma pino-pretty EXPOSE 3000 ENV HOSTNAME "0.0.0.0" ENV NODE_ENV="production" -# USER nextjs +USER nextjs # Prepare volume for uploads RUN mkdir -p /home/nextjs/apps/web/uploads/ diff --git a/apps/web/app/(app)/environments/[environmentId]/actions/loading.tsx b/apps/web/app/(app)/environments/[environmentId]/actions/loading.tsx index b3cc1c9e45..ead337d5e3 100644 --- a/apps/web/app/(app)/environments/[environmentId]/actions/loading.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/actions/loading.tsx @@ -33,7 +33,7 @@ const Loading = () => {
-
+
diff --git a/apps/web/app/(app)/environments/[environmentId]/components/MainNavigation.tsx b/apps/web/app/(app)/environments/[environmentId]/components/MainNavigation.tsx index ba884367df..a1ae639a63 100644 --- a/apps/web/app/(app)/environments/[environmentId]/components/MainNavigation.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/components/MainNavigation.tsx @@ -264,7 +264,7 @@ export const MainNavigation = ({ size="icon" onClick={toggleSidebar} className={cn( - "rounded-xl bg-slate-50 p-1 text-slate-600 transition-all hover:bg-slate-100 focus:ring-0 focus:ring-transparent focus:outline-none" + "rounded-xl bg-slate-50 p-1 text-slate-600 transition-all hover:bg-slate-100 focus:outline-none focus:ring-0 focus:ring-transparent" )}> {isCollapsed ? ( diff --git a/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/enterprise/page.tsx b/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/enterprise/page.tsx index b9699d14b1..526bd7d96d 100644 --- a/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/enterprise/page.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/enterprise/page.tsx @@ -118,7 +118,7 @@ const Page = async (props) => {
-
+
{summaryItems.map((summaryItem) => { return (