From 5c8619b2821b186b71b383ad616dd144c1c46d04 Mon Sep 17 00:00:00 2001 From: Fahri Can Date: Sun, 10 May 2026 22:59:27 +0300 Subject: [PATCH] gg --- .DS_Store | Bin 6148 -> 6148 bytes .env.development | 29 + .gitea/workflows/deploy.yml | 23 +- .gitignore | 1 + Dockerfile | 27 +- certificates/localhost-key.pem | 28 - certificates/localhost.pem | 26 - eslint.config.mjs | 16 +- messages/en.json | 88 ++ messages/tr.json | 88 ++ next.config.ts | 16 + package-lock.json | 384 ++++---- package.json | 6 +- src/app/[locale]/(auth)/layout.tsx | 10 +- src/app/[locale]/(error)/[...slug]/page.tsx | 2 +- src/app/[locale]/(site)/about/page.tsx | 10 +- src/app/[locale]/(site)/admin/page.tsx | 8 +- src/app/[locale]/(site)/analysis/page.tsx | 8 +- .../[locale]/(site)/coupon-builder/page.tsx | 8 +- .../[locale]/(site)/coupon-history/page.tsx | 8 +- src/app/[locale]/(site)/dashboard/page.tsx | 8 +- src/app/[locale]/(site)/h2h/page.tsx | 8 +- src/app/[locale]/(site)/home/page.tsx | 8 +- src/app/[locale]/(site)/layout.tsx | 14 +- src/app/[locale]/(site)/leagues/[id]/page.tsx | 10 +- src/app/[locale]/(site)/leagues/page.tsx | 8 +- src/app/[locale]/(site)/matches/[id]/page.tsx | 8 +- src/app/[locale]/(site)/matches/page.tsx | 8 +- src/app/[locale]/(site)/predictions/page.tsx | 8 +- src/app/[locale]/(site)/pricing/page.tsx | 29 + src/app/[locale]/(site)/profile/page.tsx | 8 +- src/app/[locale]/(site)/spor-toto/page.tsx | 8 +- src/app/[locale]/(site)/teams/[id]/page.tsx | 8 +- src/app/[locale]/(site)/teams/page.tsx | 8 +- src/app/[locale]/layout.tsx | 24 +- src/app/[locale]/not-found.tsx | 37 +- src/app/[locale]/page.tsx | 4 +- src/app/robots.ts | 10 +- src/app/sitemap.ts | 32 +- src/components/admin/admin-content.tsx | 44 +- src/components/analysis/analysis-content.tsx | 7 +- src/components/auth/login-modal.tsx | 6 +- .../coupons/coupon-builder-content.tsx | 357 ++++---- src/components/coupons/frequency-panel.tsx | 23 +- .../dashboard/dashboard-content.tsx | 124 +-- src/components/home/home-content.tsx | 14 +- src/components/layout/header/header.tsx | 102 ++- .../leagues/league-detail-content.tsx | 125 ++- src/components/leagues/leagues-content.tsx | 597 ++++++++++--- src/components/matches/league-filter-bar.tsx | 20 +- src/components/matches/lineups-card.tsx | 38 +- .../matches/match-detail-content.tsx | 128 ++- src/components/matches/match-list.tsx | 14 +- src/components/matches/matches-content.tsx | 43 +- src/components/matches/prediction-card.tsx | 493 ++++++++--- .../matches/v28-odds-band-panel.tsx | 59 +- .../predictions/predictions-content.tsx | 5 +- src/components/pricing/pricing-content.tsx | 325 +++++++ src/components/profile/profile-content.tsx | 4 + src/components/site/home/home-card.tsx | 8 +- .../spor-toto/spor-toto-content.tsx | 53 +- src/components/subscription/index.ts | 3 + src/components/subscription/plan-badge.tsx | 39 + src/components/subscription/pricing-card.tsx | 192 ++++ .../subscription/subscription-card.tsx | 220 +++++ src/components/teams/team-detail-content.tsx | 169 +++- src/components/teams/teams-content.tsx | 14 +- src/components/ui/back-to-top.tsx | 36 +- src/components/ui/buttons/button.tsx | 57 +- src/components/ui/buttons/close-button.tsx | 15 +- src/components/ui/buttons/link-button.tsx | 15 +- src/components/ui/buttons/toggle.tsx | 73 +- src/components/ui/collections/combobox.tsx | 150 ++-- src/components/ui/collections/listbox.tsx | 27 +- src/components/ui/collections/select.tsx | 153 ++-- src/components/ui/collections/treeview.tsx | 60 +- src/components/ui/color-mode.tsx | 129 +-- src/components/ui/data-display/avatar.tsx | 34 +- src/components/ui/data-display/clipboard.tsx | 131 +-- src/components/ui/data-display/data-list.tsx | 36 +- src/components/ui/data-display/qr-code.tsx | 35 +- src/components/ui/data-display/stat.tsx | 75 +- src/components/ui/data-display/tag.tsx | 47 +- src/components/ui/data-display/timeline.tsx | 12 +- src/components/ui/disclosure/accordion.tsx | 72 +- src/components/ui/disclosure/breadcrumb.tsx | 53 +- src/components/ui/disclosure/pagination.tsx | 276 +++--- src/components/ui/disclosure/steps.tsx | 68 +- src/components/ui/feedback/alert.tsx | 42 +- src/components/ui/feedback/empty-state.tsx | 46 +- .../ui/feedback/progress-circle.tsx | 55 +- src/components/ui/feedback/progress.tsx | 30 +- src/components/ui/feedback/skeleton.tsx | 60 +- src/components/ui/feedback/status.tsx | 38 +- src/components/ui/feedback/toaster.tsx | 33 +- src/components/ui/forms/checkbox-card.tsx | 33 +- src/components/ui/forms/checkbox.tsx | 30 +- src/components/ui/forms/color-picker.tsx | 268 +++--- src/components/ui/forms/field.tsx | 45 +- src/components/ui/forms/file-upload.tsx | 230 ++--- src/components/ui/forms/input-group.tsx | 81 +- src/components/ui/forms/native-select.tsx | 71 +- src/components/ui/forms/number-input.tsx | 11 +- src/components/ui/forms/password-input.tsx | 153 ++-- src/components/ui/forms/pin-input.tsx | 36 +- src/components/ui/forms/radio-card.tsx | 25 +- src/components/ui/forms/radio.tsx | 28 +- src/components/ui/forms/rating.tsx | 38 +- src/components/ui/forms/segmented-control.tsx | 51 +- src/components/ui/forms/slider.tsx | 98 ++- src/components/ui/forms/stepper-input.tsx | 76 +- src/components/ui/forms/switch.tsx | 47 +- src/components/ui/locale-switcher.tsx | 32 +- src/components/ui/overlays/action-bar.tsx | 54 +- src/components/ui/overlays/dialog.tsx | 48 +- src/components/ui/overlays/drawer.tsx | 38 +- src/components/ui/overlays/hover-card.tsx | 48 +- src/components/ui/overlays/menu.tsx | 147 ++-- src/components/ui/overlays/popover.tsx | 76 +- src/components/ui/overlays/toggle-tip.tsx | 100 ++- src/components/ui/overlays/tooltip.tsx | 57 +- src/components/ui/provider.tsx | 13 +- src/components/ui/top-loader.tsx | 8 +- src/components/ui/typography/blockquote.tsx | 36 +- src/components/ui/typography/prose.tsx | 408 ++++----- src/config/navigation.ts | 23 +- src/data/constants.ts | 818 +++++++++--------- src/hooks/useActiveNavItem.tsx | 18 +- src/i18n/navigation.ts | 7 +- src/i18n/request.ts | 10 +- src/i18n/routing.ts | 8 +- src/lib/api/admin/service.ts | 9 + src/lib/api/admin/types.ts | 3 +- src/lib/api/admin/use-hooks.ts | 12 + src/lib/api/analysis/service.ts | 6 +- src/lib/api/api-service.ts | 17 +- src/lib/api/auth/service.ts | 7 +- src/lib/api/client-map.ts | 6 +- src/lib/api/coupons/service.ts | 1 - src/lib/api/coupons/use-hooks.ts | 1 - src/lib/api/predictions/types.ts | 16 +- src/lib/api/predictions/use-hooks.ts | 2 +- src/lib/api/spor-toto/use-hooks.ts | 6 +- src/lib/api/subscriptions/index.ts | 22 + src/lib/api/subscriptions/service.ts | 59 ++ src/lib/api/subscriptions/types.ts | 79 ++ src/lib/api/subscriptions/use-hooks.ts | 58 ++ src/lib/api/users/service.ts | 9 + src/lib/api/users/use-hooks.ts | 10 +- src/lib/auth/auth-options.ts | 28 +- src/lib/paddle/index.ts | 4 + src/lib/paddle/paddle-config.ts | 19 + src/lib/paddle/paddle-provider.tsx | 108 +++ src/lib/paddle/use-paddle-checkout.ts | 99 +++ src/lib/utils/ai-helper.ts | 23 +- src/lib/utils/language.ts | 24 +- src/lib/utils/prompt-builder.ts | 38 +- src/providers/aos-provider.tsx | 8 +- src/providers/react-query-provider.tsx | 12 +- src/theme/theme.ts | 66 +- src/types/next-auth.d.ts | 3 + 161 files changed, 6708 insertions(+), 3435 deletions(-) create mode 100644 .env.development delete mode 100644 certificates/localhost-key.pem delete mode 100644 certificates/localhost.pem create mode 100644 src/app/[locale]/(site)/pricing/page.tsx create mode 100644 src/components/pricing/pricing-content.tsx create mode 100644 src/components/subscription/index.ts create mode 100644 src/components/subscription/plan-badge.tsx create mode 100644 src/components/subscription/pricing-card.tsx create mode 100644 src/components/subscription/subscription-card.tsx create mode 100644 src/lib/api/subscriptions/index.ts create mode 100644 src/lib/api/subscriptions/service.ts create mode 100644 src/lib/api/subscriptions/types.ts create mode 100644 src/lib/api/subscriptions/use-hooks.ts create mode 100644 src/lib/paddle/index.ts create mode 100644 src/lib/paddle/paddle-config.ts create mode 100644 src/lib/paddle/paddle-provider.tsx create mode 100644 src/lib/paddle/use-paddle-checkout.ts diff --git a/.DS_Store b/.DS_Store index 2074a2f73ec2ad2f118820db72b8903447b315b3..5f5c890fea84806707ac0a8ec1b3ae47000480ad 100644 GIT binary patch delta 182 zcmZoMXfc@JFDk*nz`)4BAi%(o%8;0oZWx@LpIfk5kYhP>JxGd;L60GwA(Np5SsEw~ z1T0)Y0!2PI-^C> .env.production + echo "NEXT_PUBLIC_APP_URL=${{ secrets.NEXT_PUBLIC_APP_URL }}" >> .env.production + echo "NEXTAUTH_URL=${{ secrets.NEXTAUTH_URL }}" >> .env.production + echo "NEXTAUTH_SECRET=${{ secrets.NEXTAUTH_SECRET }}" >> .env.production + echo "NEXT_PUBLIC_AUTH_REQUIRED=${{ secrets.NEXT_PUBLIC_AUTH_REQUIRED }}" >> .env.production + echo "NEXT_PUBLIC_PADDLE_CLIENT_TOKEN=${{ secrets.NEXT_PUBLIC_PADDLE_CLIENT_TOKEN }}" >> .env.production + echo "NEXT_PUBLIC_PADDLE_ENVIRONMENT=${{ secrets.NEXT_PUBLIC_PADDLE_ENVIRONMENT }}" >> .env.production + echo "NEXT_PUBLIC_PADDLE_SELLER_ID=${{ secrets.NEXT_PUBLIC_PADDLE_SELLER_ID }}" >> .env.production + cp .env.production .env.development + + - name: Docker Build + run: docker build -t iddaai-fe:latest . - name: Eski Konteyneri Sil run: docker rm -f iddaai-fe || true @@ -29,8 +37,5 @@ jobs: --network iddaai_iddaai-network \ -p 127.0.0.1:1510:3000 \ -e NODE_ENV=production \ - -e NEXT_PUBLIC_API_URL='https://api.iddaai.com/api' \ - -e NEXTAUTH_URL='https://iddaai.com' \ - -e NEXTAUTH_SECRET='fFw34R134jRof1H2jofh2!32hU3gfjA1' \ - -e NEXT_PUBLIC_AUTH_REQUIRED='false' \ + --env-file .env.production \ iddaai-fe:latest diff --git a/.gitignore b/.gitignore index 02aa75f..be0a2c0 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules .next .env.local +certificates/ diff --git a/Dockerfile b/Dockerfile index e57c3f7..2596c17 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,9 +10,6 @@ RUN npm install COPY . . # Build Next.js app -# NEXT_PUBLIC_API_URL should be set during build if used in static generation -# For production, we usually point to the domain name -ENV NEXT_PUBLIC_API_URL=https://api.iddaai.com/api RUN npm run build # --- STAGE 2: RUNNER --- @@ -21,16 +18,22 @@ WORKDIR /app ENV NODE_ENV=production -# Copy only necessary files -COPY --from=builder /app/package*.json ./ -COPY --from=builder /app/.next ./.next +# Don't run as root +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +# Copy standalone build COPY --from=builder /app/public ./public -COPY --from=builder /app/node_modules ./node_modules -COPY --from=builder /app/next.config.ts ./ -# Copy messages for internationalization -COPY --from=builder /app/messages ./messages + +# Set permissions for standalone build +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + +USER nextjs EXPOSE 3000 +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" -# Start Next.js -CMD ["npm", "start"] +# Start standalone server +CMD ["node", "server.js"] diff --git a/certificates/localhost-key.pem b/certificates/localhost-key.pem deleted file mode 100644 index 6a82260..0000000 --- a/certificates/localhost-key.pem +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC38ryU+6/sNDQR -OL1pWCKrIms5cTMoSS8UOKhVaHB2n5J4f8pIuAX/sNBycI4/9oFztGGp3UIs+HD4 -dIsOmFZmHJCpAVhivyPD0MeXYq1t6V5VSNMOnH0y7huvWYmFuAWZ9/41QKSkM/an -oYQQvcvLkuS0vbrYCr0jmndbfBIF4zYQEPyBR/fcS5W4lFCPUojhXlfSOvWN/tuY -MU5RxOzHbC4DuKnj1Mj/WNBVzpN4BNkBqUakrjhQw2DYhFFlCTxez9+gFPfZXtrm -EfZjAvOn+BMDUJhNzMZvBoU5rKAEGYmxhT2NHj0rGoEIUPBuiLguvngWl3OXdAQE -brdyG507AgMBAAECggEAAJnET+A6hNTuzpeW1r847cIhA4EBH8KNas18jzrWEy0W -N1qDeJVRP7J+G8GOVVsitRQDtaBJVQhCpi0LPzL0JUU2m7araTcikMMfw7jIxDEc -475nIgcUyZPJd1sdfdhJ/GS46ceaQgcBaS631a4o+jMyl/x+nbH7SCB6/0t6a5Z+ -7cMe/NoDbypGyEo8sEZw6idHBdogZO1E+aLOBfGTkc42jzfV4UCbcuWtpGa3QHDw -scXEIwHRza5XO8kdn064tHb6JWyjkXh3abeyZU2uoOGFyEZxR0FjxxC579pA2LoB -qmmXeFo8uVFIs4L0fXSj3ohW1i+I10qSFvFY7SgSIQKBgQDe7RsY5QbuwQxfgeIa -R8VNHLC5ux02q3bEqCr8UoPZaop4Ckg7gIiHumU6/YK6Qke0w0XEkAy2Fhv2Vby5 -RehgmSZ5+LSXpsW3uutgTMOw/4HaXLlW51icPK0rsdBth6AaOI3uX1j3XzSpgXyI -6yYQtJnmvDGtNsfkC2+t6uCpWQKBgQDTPTf7kXyBtxti/nLV9z8/15atfJ6lsxVd -oVWuaQEPUS3VwfBQYFKX/jhSQlXVbu4GrklMhSG8P0Q6glyjk/NiuhRUbQRFv7cu -6TmXSGWfSvkEQdX+xVsA+rfaCNQu6+cFs0ZnK7pqN41LzwRAvdiyCXHiEi2EyqWw -GypCWJRUswKBgQCtuDn4kWlwnxHET5PiBPH04Jm7ctwWIVJBeAdfb/H9eLAFUYXu -kIBUvOVsLeg0u7fjXpS808CEGQCbWz7hZl/q/w3j2PLqhvTm84u/FLMe+E252642 -0bvUrNgKB9wzrpAOPuojyzuqMg/408Y3cH/OXt7b1uYjZGArDtptvm5qqQKBgQC1 -8lgDDshAbnhfZy2AkMtg8RAu9FUuAjeYAzvq0zT/fXvOT5LvmFfr5SOb7tlB0p+h -D4PBLjblj1T0VI74spoD4qVaJuB0N3LQLEDXxpsJfqlIenCZVmJRUKMFYW9pzvWZ -WlZ8zRRvItRIhNJz9VHt3+bAw8mDRI08R9m5ddSlswKBgGETkel47kg3l1oR++9s -RExiQgTPM9mnFXMJhXpTKqTFZ7ETrNCQMui/ghbnBSpGmYRzrQEsftEMIp9rU7Z4 -q6m0F28CtJd3QUazE4t/Y62gUrTpQYGpW9fNqjtY8tEyzjxae5cY3zssB49yYfpQ -h2KRQnPO3vzLdJMq+PRp2//o ------END PRIVATE KEY----- diff --git a/certificates/localhost.pem b/certificates/localhost.pem deleted file mode 100644 index fcf6188..0000000 --- a/certificates/localhost.pem +++ /dev/null @@ -1,26 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEXTCCAsWgAwIBAgIRAJwh1nDeNCaehj5TSbwpPpEwDQYJKoZIhvcNAQELBQAw -gYkxHjAcBgNVBAoTFW1rY2VydCBkZXZlbG9wbWVudCBDQTEvMC0GA1UECwwmcGl0 -b25AUGl0b25zLU1hY0Jvb2stQWlyLmxvY2FsIChQaXRvbikxNjA0BgNVBAMMLW1r -Y2VydCBwaXRvbkBQaXRvbnMtTWFjQm9vay1BaXIubG9jYWwgKFBpdG9uKTAeFw0y -NjA0MTQxMzQ1MjZaFw0yODA3MTQxMzQ1MjZaMFIxJzAlBgNVBAoTHm1rY2VydCBk -ZXZlbG9wbWVudCBjZXJ0aWZpY2F0ZTEnMCUGA1UECwwecGl0b25AUGl0b25zLU1h -Y0Jvb2stQWlyLmxvY2FsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -t/K8lPuv7DQ0ETi9aVgiqyJrOXEzKEkvFDioVWhwdp+SeH/KSLgF/7DQcnCOP/aB -c7Rhqd1CLPhw+HSLDphWZhyQqQFYYr8jw9DHl2KtbeleVUjTDpx9Mu4br1mJhbgF -mff+NUCkpDP2p6GEEL3Ly5LktL262Aq9I5p3W3wSBeM2EBD8gUf33EuVuJRQj1KI -4V5X0jr1jf7bmDFOUcTsx2wuA7ip49TI/1jQVc6TeATZAalGpK44UMNg2IRRZQk8 -Xs/foBT32V7a5hH2YwLzp/gTA1CYTczGbwaFOaygBBmJsYU9jR49KxqBCFDwboi4 -Lr54Fpdzl3QEBG63chudOwIDAQABo3YwdDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0l -BAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAU+PxiJ531CXgmujenTGLWFtdGwW8w -LAYDVR0RBCUwI4IJbG9jYWxob3N0hwR/AAABhxAAAAAAAAAAAAAAAAAAAAABMA0G -CSqGSIb3DQEBCwUAA4IBgQAMw+91DrGNCdqLngTCvG8fPU6ikAOBNvuB7Q0tf/q4 -adfgTse/pU7e9lkgChdYSYifh3FStmkaHmYNZg1ljgpMJICUxT2zL7rmOE9GlUqv -2/umlzZcHE3yC3fLqS8Ik7D5qhAES0HM3WbJLrs4OzRY77iEkDYptgzmZJqMA72j -CEyfuqRaAMR/QR0D4Lrt8xZlrMA19t8mkdc0GixzlKD0naIISbVyNmXz4Dc2uqv2 -asGWByPm/m4UmocO9rBX/WlylqC7hLffKRiO1sXdIYWjc2GyGCWt5MrVBanXyXFz -SElBFF5XJbVY5gtw+9sGWXyDOiLaTVOd55Td5Rf1Lst6QKWMMk3vdpUAIXMciAPh -UiAipbDFwl5Vxjri/nZoCuQWlEOQ6rthKDZJz4qAu4GN1WFeB8pgIPHKkGA9v6Nn -1ZvnewsNqq6jYy9WUE/Y4NgZPtdoH8dHQiKav7KXu2yVpbR0iaDJP8oRUNhiE8fe -x41Iim7YWjwoYtc97L194WQ= ------END CERTIFICATE----- diff --git a/eslint.config.mjs b/eslint.config.mjs index a5a130a..bbd359f 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,20 +1,14 @@ -import { dirname } from 'path'; -import { fileURLToPath } from 'url'; -import { FlatCompat } from '@eslint/eslintrc'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); - -const compat = new FlatCompat({ - baseDirectory: __dirname, -}); +import nextConfig from 'eslint-config-next'; +import prettierConfig from 'eslint-config-prettier'; const eslintConfig = [ - ...compat.extends('next/core-web-vitals', 'next/typescript', 'prettier'), + ...nextConfig, + prettierConfig, { ignores: ['node_modules/**', '.next/**', 'out/**', 'build/**', 'next-env.d.ts'], }, { + files: ['**/*.ts', '**/*.tsx'], rules: { '@typescript-eslint/no-empty-object-type': 'off', '@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }], diff --git a/messages/en.json b/messages/en.json index 798130a..e2a409c 100644 --- a/messages/en.json +++ b/messages/en.json @@ -160,6 +160,7 @@ "bet-summary": "Bet Summary", "expected-value": "Expected Value", "no-predictions": "No predictions available.", + "generate": "Analyze with AI", "accuracy": "Accuracy", "total-predictions": "Total Predictions", "correct-predictions": "Correct Predictions", @@ -497,6 +498,10 @@ "no-users": "No users found." }, "common": { + "limits": { + "analysis_left": "Analyses", + "out_of_analysis": "Daily analysis limit exceeded." + }, "loading": "Loading...", "save": "Save", "cancel": "Cancel", @@ -594,6 +599,89 @@ "signin": { "title": "Sign In", "description": "Sign in to your iddaai.com account to access AI predictions and tools." + }, + "pricing": { + "title": "Pricing — iddaai", + "description": "Explore iddaai AI-powered betting analysis plans. Free, Plus, and Premium plans available." + } + }, + "pricing": { + "title": "Choose Your Plan", + "subtitle": "Boost your winning odds with AI-powered analyses", + "monthly": "Monthly", + "yearly": "Yearly", + "yearly-save": "Save 2 months", + "most-popular": "Most Popular", + "current-plan": "Current Plan", + "get-started": "Get Started", + "upgrade": "Upgrade", + "downgrade": "Downgrade", + "contact-sales": "Contact Us", + "per-month": "/mo", + "per-year": "/yr", + "free-forever": "Free forever", + "billed-yearly": "Billed yearly", + "compare-plans": "Compare Plans", + "faq-title": "Frequently Asked Questions", + "plan": { + "free": { + "name": "Free", + "description": "Get started with basic AI analyses" + }, + "plus": { + "name": "Plus", + "description": "More analyses and exclusive features" + }, + "premium": { + "name": "Premium", + "description": "Unlimited access and professional tools" + } + }, + "feature": { + "daily-analyses": "Daily AI analyses", + "daily-coupons": "Daily coupons", + "basic-analysis": "Basic match analysis", + "detailed-analysis": "Detailed AI analysis", + "h2h-comparison": "H2H comparison", + "coupon-builder": "Coupon builder", + "spor-toto": "Spor Toto analysis", + "ad-free": "Ad-free experience", + "priority-support": "Priority support", + "unlimited": "Unlimited" + }, + "faq": { + "q1": "Can I change my plan anytime?", + "a1": "Yes, you can upgrade or downgrade your plan anytime. Upgrades take effect immediately.", + "q2": "How does cancellation work?", + "a2": "Your access continues until the end of your current billing period. You'll automatically switch to the Free plan.", + "q3": "What payment methods are accepted?", + "a3": "You can pay securely with credit cards and debit cards. All payments are processed through Paddle.", + "q4": "Is there a trial period?", + "a4": "You can try all basic features with the Free plan. When you upgrade, you get instant access to premium features." + } + }, + "subscription": { + "title": "Subscription", + "current-plan": "Current Plan", + "plan-badge": { + "free": "Free", + "plus": "Plus", + "premium": "Premium" + }, + "upgrade-cta": "Upgrade Plan", + "manage": "Manage Subscription", + "cancel": "Cancel Subscription", + "cancel-confirm-title": "Cancel Subscription", + "cancel-confirm-message": "Your access will continue until the end of your current billing period. Are you sure you want to cancel?", + "cancel-reason-placeholder": "Would you like to share your reason? (Optional)", + "cancelled-info": "Your subscription ends on {date}", + "next-billing": "Next billing date", + "usage": { + "title": "Daily Usage", + "analyses": "AI Analyses", + "coupons": "Coupons", + "of": "/", + "remaining": "remaining" } } } diff --git a/messages/tr.json b/messages/tr.json index b8ace5b..b77bcb0 100644 --- a/messages/tr.json +++ b/messages/tr.json @@ -160,6 +160,7 @@ "bet-summary": "Bahis Özeti", "expected-value": "Beklenen Değer", "no-predictions": "Tahmin bulunmuyor.", + "generate": "Yapay Zeka ile Analiz Et", "accuracy": "Doğruluk", "total-predictions": "Toplam Tahmin", "correct-predictions": "Doğru Tahmin", @@ -487,6 +488,10 @@ "no-users": "Kullanıcı bulunamadı." }, "common": { + "limits": { + "analysis_left": "Analiz", + "out_of_analysis": "Günlük analiz limitiniz doldu." + }, "loading": "Yükleniyor...", "save": "Kaydet", "cancel": "İptal", @@ -584,6 +589,89 @@ "signin": { "title": "Giriş Yap", "description": "Yapay zeka tahminlerine ve araçlarına erişmek için iddaai.com hesabınıza giriş yapın." + }, + "pricing": { + "title": "Fiyatlandırma — iddaai", + "description": "iddaai AI destekli iddaa analiz planlarını keşfedin. Ücretsiz, Plus ve Premium planlar." + } + }, + "pricing": { + "title": "Planınızı Seçin", + "subtitle": "AI destekli analizlerle kazanma şansınızı artırın", + "monthly": "Aylık", + "yearly": "Yıllık", + "yearly-save": "2 ay tasarruf", + "most-popular": "En Popüler", + "current-plan": "Mevcut Plan", + "get-started": "Başla", + "upgrade": "Yükselt", + "downgrade": "Düşür", + "contact-sales": "Bize Ulaşın", + "per-month": "/ay", + "per-year": "/yıl", + "free-forever": "Sonsuza kadar ücretsiz", + "billed-yearly": "Yıllık faturalandırılır", + "compare-plans": "Planları Karşılaştır", + "faq-title": "Sıkça Sorulan Sorular", + "plan": { + "free": { + "name": "Ücretsiz", + "description": "Temel AI analizleri ile başlayın" + }, + "plus": { + "name": "Plus", + "description": "Daha fazla analiz ve özel özellikler" + }, + "premium": { + "name": "Premium", + "description": "Sınırsız erişim ve profesyonel araçlar" + } + }, + "feature": { + "daily-analyses": "Günlük AI analiz", + "daily-coupons": "Günlük kupon", + "basic-analysis": "Temel maç analizi", + "detailed-analysis": "Detaylı AI analizi", + "h2h-comparison": "H2H karşılaştırma", + "coupon-builder": "Kupon oluşturucu", + "spor-toto": "Spor Toto analizi", + "ad-free": "Reklamsız deneyim", + "priority-support": "Öncelikli destek", + "unlimited": "Sınırsız" + }, + "faq": { + "q1": "Planımı istediğim zaman değiştirebilir miyim?", + "a1": "Evet, planınızı istediğiniz zaman yükseltebilir veya düşürebilirsiniz. Yükseltmeler anında aktif olur.", + "q2": "İptal nasıl çalışır?", + "a2": "Mevcut fatura döneminizin sonuna kadar erişiminiz devam eder. Otomatik olarak Ücretsiz plana geçersiniz.", + "q3": "Ödeme yöntemleri nelerdir?", + "a3": "Kredi kartı ve banka kartı ile güvenli ödeme yapabilirsiniz. Tüm ödemeler Paddle altyapısı ile işlenir.", + "q4": "Deneme süresi var mı?", + "a4": "Ücretsiz plan ile tüm temel özellikleri deneyebilirsiniz. Yükseltme yaptığınızda anında premium özelliklere erişirsiniz." + } + }, + "subscription": { + "title": "Abonelik Bilgileri", + "current-plan": "Mevcut Plan", + "plan-badge": { + "free": "Ücretsiz", + "plus": "Plus", + "premium": "Premium" + }, + "upgrade-cta": "Planı Yükselt", + "manage": "Aboneliği Yönet", + "cancel": "Aboneliği İptal Et", + "cancel-confirm-title": "Aboneliği İptal Et", + "cancel-confirm-message": "Mevcut fatura döneminizin sonuna kadar erişiminiz devam edecek. İptal etmek istediğinizden emin misiniz?", + "cancel-reason-placeholder": "İptal nedeninizi paylaşır mısınız? (Opsiyonel)", + "cancelled-info": "Aboneliğiniz {date} tarihinde sona erecek", + "next-billing": "Sonraki fatura tarihi", + "usage": { + "title": "Günlük Kullanım", + "analyses": "AI Analiz", + "coupons": "Kupon", + "of": "/", + "remaining": "kalan" } } } diff --git a/next.config.ts b/next.config.ts index 1f73211..1441bda 100644 --- a/next.config.ts +++ b/next.config.ts @@ -7,6 +7,22 @@ const nextConfig: NextConfig = { optimizePackageImports: ["@chakra-ui/react"], }, reactCompiler: true, + async headers() { + return [ + { + source: "/(.*)", + headers: [ + { key: "X-Frame-Options", value: "DENY" }, + { key: "X-Content-Type-Options", value: "nosniff" }, + { key: "Referrer-Policy", value: "strict-origin-when-cross-origin" }, + { + key: "Strict-Transport-Security", + value: "max-age=31536000; includeSubDomains", + }, + ], + }, + ]; + }, async rewrites() { const apiUrl = process.env.NEXT_PUBLIC_API_URL; if (!apiUrl) { diff --git a/package-lock.json b/package-lock.json index 5690919..4898821 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,16 +12,18 @@ "@emotion/react": "^11.14.0", "@google/genai": "^1.35.0", "@hookform/resolvers": "^5.2.2", + "@paddle/paddle-js": "^1.6.4", "@tanstack/react-query": "^5.90.16", "aos": "^2.3.4", "axios": "^1.13.1", "framer-motion": "^12.34.1", "i18next": "^25.6.0", - "next": "16.0.0", + "next": "^16.2.5", "next-auth": "^4.24.13", "next-intl": "^4.4.0", "next-themes": "^0.4.6", "nextjs-toploader": "^3.9.17", + "postcss": "^8.5.14", "react": "19.2.0", "react-dom": "19.2.0", "react-hook-form": "^7.65.0", @@ -147,7 +149,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -516,7 +517,6 @@ "version": "3.33.0", "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-3.33.0.tgz", "integrity": "sha512-HNbUFsFABjVL5IHBxsqtuT+AH/vQT1+xsEWrxnG0GBM2VjlzlMqlqCxNiDyQOsjLZXQC1ciCMbzPNcSCc63Y9w==", - "peer": true, "dependencies": { "@ark-ui/react": "^5.31.0", "@emotion/is-prop-valid": "^1.4.0", @@ -627,7 +627,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz", "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==", - "peer": true, "dependencies": { "@emotion/memoize": "^0.9.0" } @@ -641,7 +640,6 @@ "version": "11.14.0", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", - "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -1280,51 +1278,30 @@ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==" }, - "node_modules/@formatjs/ecma402-abstract": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-3.1.1.tgz", - "integrity": "sha512-jhZbTwda+2tcNrs4kKvxrPLPjx8QsBCLCUgrrJ/S+G9YrGHWLhAyFMMBHJBnBoOwuLHd7L14FgYudviKaxkO2Q==", - "dependencies": { - "@formatjs/fast-memoize": "3.1.0", - "@formatjs/intl-localematcher": "0.8.1", - "decimal.js": "^10.6.0", - "tslib": "^2.8.1" - } - }, "node_modules/@formatjs/fast-memoize": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.1.0.tgz", - "integrity": "sha512-b5mvSWCI+XVKiz5WhnBCY3RJ4ZwfjAidU0yVlKa3d3MSgKmH1hC3tBGEAtYyN5mqL7N0G5x0BOUYyO8CEupWgg==", - "dependencies": { - "tslib": "^2.8.1" - } + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.1.4.tgz", + "integrity": "sha512-Lbke1aOrsygKKR09Ux0NrZgbTqpDmiwXOgzyDOJ8Owr1zd5qOKTauf62hH+Seeku3ju77rHWH9I5SfX2CN0vuA==" }, "node_modules/@formatjs/icu-messageformat-parser": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-3.5.1.tgz", - "integrity": "sha512-sSDmSvmmoVQ92XqWb499KrIhv/vLisJU8ITFrx7T7NZHUmMY7EL9xgRowAosaljhqnj/5iufG24QrdzB6X3ItA==", + "version": "3.5.7", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-3.5.7.tgz", + "integrity": "sha512-wJxRZ+SiUCIMTL86bQlZU9bEKDQqqvgk2ezQ1BySUdWRfHqOzj4IKUVFeUZKS9w58M4e7wMSG0Sl86LAPb7Qww==", "dependencies": { - "@formatjs/ecma402-abstract": "3.1.1", - "@formatjs/icu-skeleton-parser": "2.1.1", - "tslib": "^2.8.1" + "@formatjs/icu-skeleton-parser": "2.1.7" } }, "node_modules/@formatjs/icu-skeleton-parser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-2.1.1.tgz", - "integrity": "sha512-PSFABlcNefjI6yyk8f7nyX1DC7NHmq6WaCHZLySEXBrXuLOB2f935YsnzuPjlz+ibhb9yWTdPeVX1OVcj24w2Q==", - "dependencies": { - "@formatjs/ecma402-abstract": "3.1.1", - "tslib": "^2.8.1" - } + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-2.1.7.tgz", + "integrity": "sha512-cIw1SFP0bi0CUBiJ2jzp99ws3OJNQDfStcHq9Z0iHWzItmiIikihFO+npR8C80yDlp7ZuBCLXCcKjgWjHicksA==" }, "node_modules/@formatjs/intl-localematcher": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.8.1.tgz", - "integrity": "sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA==", + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.8.6.tgz", + "integrity": "sha512-AZRgUxj0q93lyF7Z5lFS85bLINXuBLX4R3tCKicO6fSWo6cvh9GQfoR3B1WlsqQwefZ1QORTivhInx7gM6HUzQ==", "dependencies": { - "@formatjs/fast-memoize": "3.1.0", - "tslib": "^2.8.1" + "@formatjs/fast-memoize": "3.1.4" } }, "node_modules/@google/genai": { @@ -1853,7 +1830,6 @@ "version": "3.10.0", "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.10.0.tgz", "integrity": "sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==", - "peer": true, "dependencies": { "@swc/helpers": "^0.5.0" } @@ -1936,9 +1912,9 @@ } }, "node_modules/@next/env": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@next/env/-/env-16.0.0.tgz", - "integrity": "sha512-s5j2iFGp38QsG1LWRQaE2iUY3h1jc014/melHFfLdrsMJPqxqDQwWNwyQTcNoUSGZlCVZuM7t7JDMmSyRilsnA==" + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.5.tgz", + "integrity": "sha512-Lb9ElHD2klcyeVD25vW+siPFqz9QMzDUSgvFZNO+dZEKoMHex4viJhVuzBhrXKqb+UKnih7mVYbt50/7KLsSCA==" }, "node_modules/@next/eslint-plugin-next": { "version": "16.0.0", @@ -1950,9 +1926,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.0.0.tgz", - "integrity": "sha512-/CntqDCnk5w2qIwMiF0a9r6+9qunZzFmU0cBX4T82LOflE72zzH6gnOjCwUXYKOBlQi8OpP/rMj8cBIr18x4TA==", + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.5.tgz", + "integrity": "sha512-BW+8PGVmsruomXHsitD8JG6gny9lEdobctjBwvtPF8AKtxGDR7nR35FOl/oK9UAPXBOBm+vx0k8qtpeHOXQMGQ==", "cpu": [ "arm64" ], @@ -1965,9 +1941,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.0.0.tgz", - "integrity": "sha512-hB4GZnJGKa8m4efvTGNyii6qs76vTNl+3dKHTCAUaksN6KjYy4iEO3Q5ira405NW2PKb3EcqWiRaL9DrYJfMHg==", + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.5.tgz", + "integrity": "sha512-ZoCGnCl9LlQJWmqXrZAUlNxvuNmclvE+7zUif+nDydkkehl9FKxHJ+wxSQMj+C37BYFerKiEdX9s9o02ir975Q==", "cpu": [ "x64" ], @@ -1980,9 +1956,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.0.0.tgz", - "integrity": "sha512-E2IHMdE+C1k+nUgndM13/BY/iJY9KGCphCftMh7SXWcaQqExq/pJU/1Hgn8n/tFwSoLoYC/yUghOv97tAsIxqg==", + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.5.tgz", + "integrity": "sha512-AwcZzMChaWkOTZt3vu+2ZMIj8g4dYQY+B8VUVhlFSQ2JtvyZpefyYHTe00D6b6L7BysYw7vl3zsvs9jix8tl5Q==", "cpu": [ "arm64" ], @@ -1995,9 +1971,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.0.0.tgz", - "integrity": "sha512-xzgl7c7BVk4+7PDWldU+On2nlwnGgFqJ1siWp3/8S0KBBLCjonB6zwJYPtl4MUY7YZJrzzumdUpUoquu5zk8vg==", + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.5.tgz", + "integrity": "sha512-QqMgqWbCBFsfiQ7BF3dUlW8HJy1LWhpcqbTpoHMWA9IV+TnWwDKozQJA5NdIAHjQ00yX2Q7AUkLr/XK4n77q8A==", "cpu": [ "arm64" ], @@ -2010,9 +1986,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.0.0.tgz", - "integrity": "sha512-sdyOg4cbiCw7YUr0F/7ya42oiVBXLD21EYkSwN+PhE4csJH4MSXUsYyslliiiBwkM+KsuQH/y9wuxVz6s7Nstg==", + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.5.tgz", + "integrity": "sha512-3hzeiFGZtyATVx9pCeuzTshXmh50vHZitqaeZiyJZaUmjQyrfjsVUgS8apOj1vEJCIpKJM/55F45yPAV2kpjsA==", "cpu": [ "x64" ], @@ -2025,9 +2001,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.0.0.tgz", - "integrity": "sha512-IAXv3OBYqVaNOgyd3kxR4L3msuhmSy1bcchPHxDOjypG33i2yDWvGBwFD94OuuTjjTt/7cuIKtAmoOOml6kfbg==", + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.5.tgz", + "integrity": "sha512-0mzZV/mAt7Qj2tYNdTB6AqrS8dwng/AQLSYC5Z1YLpZdi2wxqKDPK7RY2RvjB1fXyJfOfdA3l/yTF5yLi+WfuQ==", "cpu": [ "x64" ], @@ -2040,9 +2016,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.0.0.tgz", - "integrity": "sha512-bmo3ncIJKUS9PWK1JD9pEVv0yuvp1KPuOsyJTHXTv8KDrEmgV/K+U0C75rl9rhIaODcS7JEb6/7eJhdwXI0XmA==", + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.5.tgz", + "integrity": "sha512-f/H4nZ2zJBvA8/+HpsB9mNonF9zfQoAU6D0WxJrfzhJDvJLfngVN85oqxUyrDVK99DIFfFYhLpGa5K+c5uotSw==", "cpu": [ "arm64" ], @@ -2055,9 +2031,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.0.0.tgz", - "integrity": "sha512-O1cJbT+lZp+cTjYyZGiDwsOjO3UHHzSqobkPNipdlnnuPb1swfcuY6r3p8dsKU4hAIEO4cO67ZCfVVH/M1ETXA==", + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.5.tgz", + "integrity": "sha512-nuP7DHs4koAojsIxVPkihNgKiRUKtCU65j5X6DAbSy8VBrfT/o90bCLLHPf51JEdOZwZMFzM6e0NiGWfIWjVAg==", "cpu": [ "x64" ], @@ -2113,6 +2089,11 @@ "node": ">=12.4.0" } }, + "node_modules/@paddle/paddle-js": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@paddle/paddle-js/-/paddle-js-1.6.4.tgz", + "integrity": "sha512-ncfnS6I8mCX6krZ3Sgz2iAYivGmhdI81yt9mT6prtPj4Ipd9J3M12LCJRUFL4FB7BYeeuV04c33RSEnbZUBCaA==" + }, "node_modules/@pandacss/is-valid-prop": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/@pandacss/is-valid-prop/-/is-valid-prop-1.8.1.tgz", @@ -2408,9 +2389,9 @@ } }, "node_modules/@parcel/watcher/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "engines": { "node": ">=12" }, @@ -2438,9 +2419,9 @@ "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" }, "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", @@ -2462,9 +2443,9 @@ "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" }, "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.1.tgz", + "integrity": "sha512-mnzgDV26ueAvk7rsbt9L7bE0SuAoqyuys/sMMrmVcN5x9VsxpcG3rqAUSgDyLp0UZlmNfIbQ4fHfCtreVBk8Ew==" }, "node_modules/@protobufjs/path": { "version": "1.1.2", @@ -2477,9 +2458,9 @@ "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" }, "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", + "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==" }, "node_modules/@rtsao/scc": { "version": "1.1.0", @@ -2705,7 +2686,6 @@ "version": "0.5.18", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.18.tgz", "integrity": "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==", - "peer": true, "dependencies": { "tslib": "^2.8.0" } @@ -2857,7 +2837,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", "devOptional": true, - "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -2913,7 +2892,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.0.tgz", "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==", "dev": true, - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.56.0", "@typescript-eslint/types": "8.56.0", @@ -3052,21 +3030,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -4248,7 +4226,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4274,9 +4251,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -4548,13 +4525,13 @@ } }, "node_modules/axios": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", - "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz", + "integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==", "dependencies": { - "follow-redirects": "^1.15.11", + "follow-redirects": "^1.16.0", "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" + "proxy-from-env": "^2.1.0" } }, "node_modules/axobject-query": { @@ -4585,7 +4562,6 @@ "resolved": "https://registry.npmjs.org/babel-plugin-react-compiler/-/babel-plugin-react-compiler-1.0.0.tgz", "integrity": "sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==", "devOptional": true, - "peer": true, "dependencies": { "@babel/types": "^7.26.0" } @@ -4618,7 +4594,6 @@ "version": "2.9.19", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", - "dev": true, "bin": { "baseline-browser-mapping": "dist/cli.js" } @@ -4632,9 +4607,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", @@ -4672,7 +4647,6 @@ "url": "https://github.com/sponsors/ai" } ], - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -5025,11 +4999,6 @@ } } }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==" - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -5386,7 +5355,6 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -5579,7 +5547,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -5961,15 +5928,15 @@ } }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", @@ -6246,19 +6213,19 @@ } }, "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -6562,9 +6529,9 @@ } }, "node_modules/icu-minify": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/icu-minify/-/icu-minify-4.8.3.tgz", - "integrity": "sha512-65Av7FLosNk7bPbmQx5z5XG2Y3T2GFppcjiXh4z1idHeVgQxlDpAmkGoYI0eFzAvrOnjpWTL5FmPDhsdfRMPEA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/icu-minify/-/icu-minify-4.11.0.tgz", + "integrity": "sha512-XRvblCwLqWXio5ZLcmDqXvJv7alSACK6UjXuuMOdQWB//d25AQX6xlVlI1FEbc3Q6iPLXXo6HaVLn8LcAFhn1Q==", "funding": [ { "type": "individual", @@ -6623,14 +6590,12 @@ } }, "node_modules/intl-messageformat": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-11.1.2.tgz", - "integrity": "sha512-ucSrQmZGAxfiBHfBRXW/k7UC8MaGFlEj4Ry1tKiDcmgwQm1y3EDl40u+4VNHYomxJQMJi9NEI3riDRlth96jKg==", + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-11.2.4.tgz", + "integrity": "sha512-iKP6+uJXn+XcfRgYfGPE3+mqCoODV2vATrXDLo/YkYgIdelJHJPBEbc0GZThipAYPuk+8QJFiPgOfblU085ABg==", "dependencies": { - "@formatjs/ecma402-abstract": "3.1.1", - "@formatjs/fast-memoize": "3.1.0", - "@formatjs/icu-messageformat-parser": "3.5.1", - "tslib": "^2.8.1" + "@formatjs/fast-memoize": "3.1.4", + "@formatjs/icu-messageformat-parser": "3.5.7" } }, "node_modules/is-array-buffer": { @@ -7354,9 +7319,9 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -7447,14 +7412,13 @@ } }, "node_modules/next": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/next/-/next-16.0.0.tgz", - "integrity": "sha512-nYohiNdxGu4OmBzggxy9rczmjIGI+TpR5vbKTsE1HqYwNm1B+YSiugSrFguX6omMOKnDHAmBPY4+8TNJk0Idyg==", - "deprecated": "This version has a security vulnerability. Please upgrade to a patched version. See https://nextjs.org/blog/CVE-2025-66478 for more details.", - "peer": true, + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/next/-/next-16.2.5.tgz", + "integrity": "sha512-TkVTm9F2WEulkgGljm4wPwNgvCCWCVw6StUHsZb8WZpHFRjepoUWg3d7L4IMg7IyjcJ4Co9eVhpro8e8O+KarQ==", "dependencies": { - "@next/env": "16.0.0", + "@next/env": "16.2.5", "@swc/helpers": "0.5.15", + "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" @@ -7466,15 +7430,15 @@ "node": ">=20.9.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "16.0.0", - "@next/swc-darwin-x64": "16.0.0", - "@next/swc-linux-arm64-gnu": "16.0.0", - "@next/swc-linux-arm64-musl": "16.0.0", - "@next/swc-linux-x64-gnu": "16.0.0", - "@next/swc-linux-x64-musl": "16.0.0", - "@next/swc-win32-arm64-msvc": "16.0.0", - "@next/swc-win32-x64-msvc": "16.0.0", - "sharp": "^0.34.4" + "@next/swc-darwin-arm64": "16.2.5", + "@next/swc-darwin-x64": "16.2.5", + "@next/swc-linux-arm64-gnu": "16.2.5", + "@next/swc-linux-arm64-musl": "16.2.5", + "@next/swc-linux-x64-gnu": "16.2.5", + "@next/swc-linux-x64-musl": "16.2.5", + "@next/swc-win32-arm64-msvc": "16.2.5", + "@next/swc-win32-x64-msvc": "16.2.5", + "sharp": "^0.34.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -7531,9 +7495,9 @@ } }, "node_modules/next-intl": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.8.3.tgz", - "integrity": "sha512-PvdBDWg+Leh7BR7GJUQbCDVVaBRn37GwDBWc9sv0rVQOJDQ5JU1rVzx9EEGuOGYo0DHAl70++9LQ7HxTawdL7w==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.11.0.tgz", + "integrity": "sha512-Chp8rgEVUYOX/bCtYy+PXH6lDX3X+GPT9sR9HScHroL283em/4urP9btfdHEMEHJJXdq2W/5wDaDDtWONPdNSA==", "funding": [ { "type": "individual", @@ -7544,16 +7508,15 @@ "@formatjs/intl-localematcher": "^0.8.1", "@parcel/watcher": "^2.4.1", "@swc/core": "^1.15.2", - "icu-minify": "^4.8.3", + "icu-minify": "^4.11.0", "negotiator": "^1.0.0", - "next-intl-swc-plugin-extractor": "^4.8.3", + "next-intl-swc-plugin-extractor": "^4.11.0", "po-parser": "^2.1.1", - "use-intl": "^4.8.3" + "use-intl": "^4.11.0" }, "peerDependencies": { "next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0", - "typescript": "^5.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -7562,9 +7525,9 @@ } }, "node_modules/next-intl-swc-plugin-extractor": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/next-intl-swc-plugin-extractor/-/next-intl-swc-plugin-extractor-4.8.3.tgz", - "integrity": "sha512-YcaT+R9z69XkGhpDarVFWUprrCMbxgIQYPUaXoE6LGVnLjGdo8hu3gL6bramDVjNKViYY8a/pXPy7Bna0mXORg==" + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/next-intl-swc-plugin-extractor/-/next-intl-swc-plugin-extractor-4.11.0.tgz", + "integrity": "sha512-WUGBSxGNd8eQ0rAsJHFmRw2H7+SZAXQIY/HAnYM57JaUsj5D2vx4KOz4zFtXlyKDtsw9awHfgWVvBae2/RDF9A==" }, "node_modules/next-themes": { "version": "0.4.6", @@ -7583,6 +7546,33 @@ "tslib": "^2.8.0" } }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/nextjs-toploader": { "version": "3.9.17", "resolved": "https://registry.npmjs.org/nextjs-toploader/-/nextjs-toploader-3.9.17.tgz", @@ -8034,9 +8024,9 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "engines": { "node": ">=8.6" @@ -8060,9 +8050,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", + "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", "funding": [ { "type": "opencollective", @@ -8078,9 +8068,9 @@ } ], "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -8090,7 +8080,6 @@ "version": "10.28.3", "resolved": "https://registry.npmjs.org/preact/-/preact-10.28.3.tgz", "integrity": "sha512-tCmoRkPQLpBeWzpmbhryairGnhW9tKV6c6gr/w+RhoRoKEJwsjzipwp//1oCpGPOchvSLaAPlpcJi9MwMmoPyA==", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -8152,21 +8141,21 @@ "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==" }, "node_modules/protobufjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", - "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.6.tgz", + "integrity": "sha512-M71sTMB146U3u0di3yup8iM+zv8yPRNQVr1KK4tyBitl3qFvEGucq/rGDRShD2rsJhtN02RJaJ7j5X5hmy8SJg==", "hasInstallScript": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", + "@protobufjs/codegen": "^2.0.5", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", + "@protobufjs/inquire": "^1.1.1", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", "@types/node": ">=13.7.0", "long": "^5.0.0" }, @@ -8180,9 +8169,12 @@ "integrity": "sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==" }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "engines": { + "node": ">=10" + } }, "node_modules/proxy-memoize": { "version": "3.0.1", @@ -8225,7 +8217,6 @@ "version": "19.2.0", "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -8234,7 +8225,6 @@ "version": "19.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -8246,7 +8236,6 @@ "version": "7.71.1", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.71.1.tgz", "integrity": "sha512-9SUJKCGKo8HUSsCO+y0CtqkqI5nNuaDqTxyqPsZPqIwudpj4rCrAz/jZV+jn57bx5gtZKOh3neQu94DXMc+w5w==", - "peer": true, "engines": { "node": ">=18.0.0" }, @@ -9093,11 +9082,10 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, - "peer": true, "engines": { "node": ">=12" }, @@ -9265,7 +9253,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -9411,9 +9398,9 @@ } }, "node_modules/use-intl": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.8.3.tgz", - "integrity": "sha512-nLxlC/RH+le6g3amA508Itnn/00mE+J22ui21QhOWo5V9hCEC43+WtnRAITbJW0ztVZphev5X9gvOf2/Dk9PLA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.11.0.tgz", + "integrity": "sha512-7ILhTLuo3fnSKhoTGDk5X9591pjtWr6qB4inrlvGkN9OEyKhoiG73GZFoLSs68wz3BsSGtoWa62iWvrYEYU+iA==", "funding": [ { "type": "individual", @@ -9423,7 +9410,7 @@ "dependencies": { "@formatjs/fast-memoize": "^3.1.0", "@schummar/icu-type-parser": "1.21.5", - "icu-minify": "^4.8.3", + "icu-minify": "^4.11.0", "intl-messageformat": "^11.1.0" }, "peerDependencies": { @@ -9662,9 +9649,9 @@ "dev": true }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "engines": { "node": ">= 6" } @@ -9697,7 +9684,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 7191ae3..bb144f5 100644 --- a/package.json +++ b/package.json @@ -13,16 +13,18 @@ "@emotion/react": "^11.14.0", "@google/genai": "^1.35.0", "@hookform/resolvers": "^5.2.2", + "@paddle/paddle-js": "^1.6.4", "@tanstack/react-query": "^5.90.16", "aos": "^2.3.4", "axios": "^1.13.1", "framer-motion": "^12.34.1", "i18next": "^25.6.0", - "next": "16.0.0", + "next": "^16.2.5", "next-auth": "^4.24.13", "next-intl": "^4.4.0", "next-themes": "^0.4.6", "nextjs-toploader": "^3.9.17", + "postcss": "^8.5.14", "react": "19.2.0", "react-dom": "19.2.0", "react-hook-form": "^7.65.0", @@ -46,4 +48,4 @@ "typescript": "^5" }, "description": "Generated by Frontend CLI" -} \ No newline at end of file +} diff --git a/src/app/[locale]/(auth)/layout.tsx b/src/app/[locale]/(auth)/layout.tsx index b533ea9..9144901 100644 --- a/src/app/[locale]/(auth)/layout.tsx +++ b/src/app/[locale]/(auth)/layout.tsx @@ -1,12 +1,12 @@ -'use client'; +"use client"; -import Footer from '@/components/layout/footer/footer'; -import { Box, Flex } from '@chakra-ui/react'; +import Footer from "@/components/layout/footer/footer"; +import { Box, Flex } from "@chakra-ui/react"; function AuthLayout({ children }: { children: React.ReactNode }) { return ( - - {children} + + {children}