fix(frontend): pin deps (#10121)

<!-- Clearly explain the need for these changes: -->

### Changes 🏗️

This PR updates the .npmrc file to improve dependency consistency across
local and CI environments when using pnpm.

Specifically:

- `save-exact=true` ensures all dependencies are pinned to exact
versions, preventing version drift ( _especially important for tools
like `prettier`, where even minor changes can lead to inconsistent
formatting in commits_ ).

This change aims to reduce formatting discrepancies and improve
reproducibility across machines and contributors.


### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - [x] formatting & lint passes on the CI
This commit is contained in:
Ubbe
2025-06-05 19:02:27 +04:00
committed by GitHub
parent 5b324abc7c
commit 7d10dc4e7b
5 changed files with 733 additions and 745 deletions

View File

@@ -52,4 +52,5 @@ node_modules/
storybook-static
*.ignore.*
*.ign.*
!.npmrc
.cursorrules

View File

@@ -0,0 +1,2 @@
# Configure pnpm to save exact versions
save-exact=true

View File

@@ -24,104 +24,104 @@
"defaults"
],
"dependencies": {
"@faker-js/faker": "^9.8.0",
"@hookform/resolvers": "^3.10.0",
"@next/third-parties": "^15.3.2",
"@radix-ui/react-alert-dialog": "^1.1.13",
"@radix-ui/react-avatar": "^1.1.9",
"@radix-ui/react-checkbox": "^1.3.1",
"@radix-ui/react-collapsible": "^1.1.10",
"@radix-ui/react-context-menu": "^2.2.14",
"@radix-ui/react-dialog": "^1.1.2",
"@radix-ui/react-dropdown-menu": "^2.1.14",
"@radix-ui/react-icons": "^1.3.2",
"@radix-ui/react-label": "^2.1.6",
"@radix-ui/react-popover": "^1.1.13",
"@radix-ui/react-radio-group": "^1.3.6",
"@radix-ui/react-scroll-area": "^1.2.8",
"@radix-ui/react-select": "^2.2.4",
"@radix-ui/react-separator": "^1.1.6",
"@radix-ui/react-slot": "^1.1.0",
"@radix-ui/react-switch": "^1.2.4",
"@radix-ui/react-tabs": "^1.1.11",
"@radix-ui/react-toast": "^1.2.13",
"@radix-ui/react-tooltip": "^1.2.6",
"@sentry/nextjs": "^9",
"@supabase/ssr": "^0.6.1",
"@supabase/supabase-js": "^2.49.10",
"@tanstack/react-table": "^8.21.3",
"@types/jaro-winkler": "^0.2.4",
"@faker-js/faker": "9.8.0",
"@hookform/resolvers": "3.10.0",
"@next/third-parties": "15.3.3",
"@radix-ui/react-alert-dialog": "1.1.14",
"@radix-ui/react-avatar": "1.1.10",
"@radix-ui/react-checkbox": "1.3.2",
"@radix-ui/react-collapsible": "1.1.11",
"@radix-ui/react-context-menu": "2.2.15",
"@radix-ui/react-dialog": "1.1.14",
"@radix-ui/react-dropdown-menu": "2.1.15",
"@radix-ui/react-icons": "1.3.2",
"@radix-ui/react-label": "2.1.7",
"@radix-ui/react-popover": "1.1.14",
"@radix-ui/react-radio-group": "1.3.7",
"@radix-ui/react-scroll-area": "1.2.9",
"@radix-ui/react-select": "2.2.5",
"@radix-ui/react-separator": "1.1.7",
"@radix-ui/react-slot": "1.2.3",
"@radix-ui/react-switch": "1.2.5",
"@radix-ui/react-tabs": "1.1.12",
"@radix-ui/react-toast": "1.2.14",
"@radix-ui/react-tooltip": "1.2.7",
"@sentry/nextjs": "9.26.0",
"@supabase/ssr": "0.6.1",
"@supabase/supabase-js": "2.49.10",
"@tanstack/react-table": "8.21.3",
"@types/jaro-winkler": "0.2.4",
"@xyflow/react": "12.6.4",
"ajv": "^8.17.1",
"boring-avatars": "^1.11.2",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"ajv": "8.17.1",
"boring-avatars": "1.11.2",
"class-variance-authority": "0.7.1",
"clsx": "2.1.1",
"cmdk": "1.1.1",
"cookie": "1.0.2",
"date-fns": "^4.1.0",
"dotenv": "^16.5.0",
"date-fns": "4.1.0",
"dotenv": "16.5.0",
"elliptic": "6.6.1",
"embla-carousel-react": "^8.6.0",
"framer-motion": "^12.16.0",
"geist": "^1.4.2",
"jaro-winkler": "^0.2.8",
"launchdarkly-react-client-sdk": "^3.7.0",
"lodash": "^4.17.21",
"lucide-react": "^0.513.0",
"moment": "^2.30.1",
"next": "^15.3.2",
"next-themes": "^0.4.6",
"party-js": "^2.2.0",
"react": "^18",
"react-day-picker": "^9.7.0",
"react-dom": "^18",
"react-drag-drop-files": "^2.4.0",
"react-hook-form": "^7.56.3",
"react-icons": "^5.5.0",
"react-markdown": "^9.0.3",
"react-modal": "^3.16.3",
"react-shepherd": "^6.1.8",
"recharts": "^2.15.3",
"shepherd.js": "^14.5.0",
"tailwind-merge": "^2.6.0",
"tailwindcss-animate": "^1.0.7",
"uuid": "^11.1.0",
"zod": "^3.25.51"
"embla-carousel-react": "8.6.0",
"framer-motion": "12.16.0",
"geist": "1.4.2",
"jaro-winkler": "0.2.8",
"launchdarkly-react-client-sdk": "3.8.1",
"lodash": "4.17.21",
"lucide-react": "0.513.0",
"moment": "2.30.1",
"next": "15.3.3",
"next-themes": "0.4.6",
"party-js": "2.2.0",
"react": "18.3.1",
"react-day-picker": "9.7.0",
"react-dom": "18.3.1",
"react-drag-drop-files": "2.4.0",
"react-hook-form": "7.57.0",
"react-icons": "5.5.0",
"react-markdown": "9.0.3",
"react-modal": "3.16.3",
"react-shepherd": "6.1.8",
"recharts": "2.15.3",
"shepherd.js": "14.5.0",
"tailwind-merge": "2.6.0",
"tailwindcss-animate": "1.0.7",
"uuid": "11.1.0",
"zod": "3.25.51"
},
"devDependencies": {
"@chromatic-com/storybook": "^3.2.4",
"@playwright/test": "^1.50.1",
"@storybook/addon-a11y": "^8.5.3",
"@storybook/addon-essentials": "^8.5.3",
"@storybook/addon-interactions": "^8.5.3",
"@storybook/addon-links": "^8.5.3",
"@storybook/addon-onboarding": "^8.5.3",
"@storybook/blocks": "^8.5.3",
"@storybook/nextjs": "^8.5.3",
"@storybook/react": "^8.3.5",
"@storybook/test": "^8.3.5",
"@storybook/test-runner": "^0.22.0",
"@types/canvas-confetti": "^1.9.0",
"@types/lodash": "^4.17.17",
"@types/negotiator": "^0.6.3",
"@types/node": "^22.13.0",
"@types/react": "^18",
"@types/react-dom": "^18",
"@types/react-modal": "^3.16.3",
"axe-playwright": "^2.0.3",
"chromatic": "^11.25.2",
"concurrently": "^9.1.2",
"eslint": "^8",
"@chromatic-com/storybook": "3.2.4",
"@playwright/test": "1.52.0",
"@storybook/addon-a11y": "8.6.14",
"@storybook/addon-essentials": "8.6.14",
"@storybook/addon-interactions": "8.6.14",
"@storybook/addon-links": "8.6.14",
"@storybook/addon-onboarding": "8.6.14",
"@storybook/blocks": "8.6.14",
"@storybook/nextjs": "8.6.14",
"@storybook/react": "8.6.14",
"@storybook/test": "8.6.14",
"@storybook/test-runner": "0.22.0",
"@types/canvas-confetti": "1.9.0",
"@types/lodash": "4.17.17",
"@types/negotiator": "0.6.3",
"@types/node": "22.15.29",
"@types/react": "18.3.17",
"@types/react-dom": "18.3.5",
"@types/react-modal": "3.16.3",
"axe-playwright": "2.1.0",
"chromatic": "11.25.2",
"concurrently": "9.1.2",
"eslint": "8.57.1",
"eslint-config-next": "15.3.3",
"eslint-plugin-storybook": "^0.12.0",
"msw": "^2.9.0",
"msw-storybook-addon": "^2.0.3",
"postcss": "^8",
"prettier": "^3.3.3",
"prettier-plugin-tailwindcss": "^0.6.11",
"storybook": "^8.5.3",
"tailwindcss": "^3.4.17",
"typescript": "^5"
"eslint-plugin-storybook": "0.12.0",
"msw": "2.9.0",
"msw-storybook-addon": "2.0.4",
"postcss": "8.5.4",
"prettier": "3.5.3",
"prettier-plugin-tailwindcss": "0.6.12",
"storybook": "8.6.14",
"tailwindcss": "3.4.17",
"typescript": "5.8.3"
},
"msw": {
"workerDirectory": [

File diff suppressed because it is too large Load Diff

View File

@@ -47,10 +47,13 @@ export function useTurnstile({
useEffect(() => {
const behaveAs = getBehaveAs();
const hasTurnstileKey = !!TURNSTILE_SITE_KEY;
const turnstileDisabled = process.env.NEXT_PUBLIC_DISABLE_TURNSTILE === "true";
const turnstileDisabled =
process.env.NEXT_PUBLIC_DISABLE_TURNSTILE === "true";
// Only render Turnstile in cloud environment if not explicitly disabled
setShouldRender(behaveAs === BehaveAs.CLOUD && hasTurnstileKey && !turnstileDisabled);
setShouldRender(
behaveAs === BehaveAs.CLOUD && hasTurnstileKey && !turnstileDisabled,
);
// Skip verification if disabled, in local development, or no key
if (turnstileDisabled || behaveAs !== BehaveAs.CLOUD || !hasTurnstileKey) {