From 80343c9ca880a7ab6d8136bb57978a65bd84b9ce Mon Sep 17 00:00:00 2001 From: "nabijonovdavronbek619@gmail.com" Date: Wed, 1 Apr 2026 01:22:31 +0500 Subject: [PATCH 1/3] landing page added --- package-lock.json | 55 ++++-- package.json | 5 +- src/app/[locale]/layout.tsx | 2 + src/app/[locale]/page.tsx | 6 +- src/app/[locale]/plagat/page.tsx | 11 ++ src/app/globals.css | 4 + src/features/auth/login/lib/useLoginForm.ts | 26 +++ .../auth/register/lib/useRegisterForm.ts | 50 +++-- .../auth/register/lib/validateRegister.ts | 4 +- src/features/auth/register/ui/form.tsx | 9 +- src/shared/request/apiRequest.ts | 29 +++ src/shared/request/getLanguage.ts | 30 +++ src/shared/request/links.ts | 4 + src/{ => shared}/request/plagiarismapi.ts | 0 src/widgets/detail/index.tsx | 6 +- src/widgets/fileUpload/lib/usePlagiraism.ts | 2 +- src/widgets/home/animations.ts | 15 ++ src/widgets/home/components/Badge.tsx | 43 +++++ .../home/components/DocIllustration.tsx | 137 ++++++++++++++ src/widgets/home/components/Hero.tsx | 177 ++++++++++++++++++ src/widgets/home/components/InfoCard.tsx | 87 +++++++++ src/widgets/home/components/InfoSection.tsx | 55 ++++++ src/widgets/home/components/Section.tsx | 16 ++ src/widgets/home/components/StartButton.tsx | 43 +++++ src/widgets/home/components/Stat.tsx | 32 ++++ src/widgets/home/components/StepCard.tsx | 108 +++++++++++ src/widgets/home/components/StepsSection.tsx | 129 +++++++++++++ src/widgets/home/components/Ticker.tsx | 51 +++++ src/widgets/home/constants.ts | 86 +++++++++ src/widgets/home/hooks/useIsMobile.ts | 16 ++ src/widgets/home/index.tsx | 29 +++ src/widgets/home/tokens.ts | 20 ++ src/widgets/home/types.ts | 20 ++ src/widgets/navbar/ui/index.tsx | 4 +- 34 files changed, 1262 insertions(+), 49 deletions(-) create mode 100644 src/app/[locale]/plagat/page.tsx create mode 100644 src/shared/request/apiRequest.ts create mode 100644 src/shared/request/getLanguage.ts create mode 100644 src/shared/request/links.ts rename src/{ => shared}/request/plagiarismapi.ts (100%) create mode 100644 src/widgets/home/animations.ts create mode 100644 src/widgets/home/components/Badge.tsx create mode 100644 src/widgets/home/components/DocIllustration.tsx create mode 100644 src/widgets/home/components/Hero.tsx create mode 100644 src/widgets/home/components/InfoCard.tsx create mode 100644 src/widgets/home/components/InfoSection.tsx create mode 100644 src/widgets/home/components/Section.tsx create mode 100644 src/widgets/home/components/StartButton.tsx create mode 100644 src/widgets/home/components/Stat.tsx create mode 100644 src/widgets/home/components/StepCard.tsx create mode 100644 src/widgets/home/components/StepsSection.tsx create mode 100644 src/widgets/home/components/Ticker.tsx create mode 100644 src/widgets/home/constants.ts create mode 100644 src/widgets/home/hooks/useIsMobile.ts create mode 100644 src/widgets/home/index.tsx create mode 100644 src/widgets/home/tokens.ts create mode 100644 src/widgets/home/types.ts diff --git a/package-lock.json b/package-lock.json index 1ff4093..49ef2d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,9 +27,9 @@ "@radix-ui/react-toggle-group": "^1.1.7", "@radix-ui/react-tooltip": "^1.2.4", "@tabler/icons-react": "^3.31.0", - "@tanstack/react-query": "^5.76.0", + "@tanstack/react-query": "^5.96.0", "@tanstack/react-table": "^8.21.3", - "axios": "^1.12.2", + "axios": "^1.14.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "dayjs": "^1.11.13", @@ -40,6 +40,7 @@ "next-themes": "^0.4.6", "react": "^19.1.2", "react-dom": "^19.1.2", + "react-toastify": "^11.0.5", "recharts": "^2.15.3", "sonner": "^2.0.3", "tailwind-merge": "^3.2.0", @@ -3208,9 +3209,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.90.16", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.16.tgz", - "integrity": "sha512-MvtWckSVufs/ja463/K4PyJeqT+HMlJWtw6PrCpywznd2NSgO3m4KwO9RqbFqGg6iDE8vVMFWMeQI4Io3eEYww==", + "version": "5.96.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.96.0.tgz", + "integrity": "sha512-sfO3uQeol1BU7cRP6NYY7nAiX3GiNY20lI/dtSbKLwcIkYw/X+w/tEsQAkc544AfIhBX/IvH/QYtPHrPhyAKGw==", "license": "MIT", "funding": { "type": "github", @@ -3218,12 +3219,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.90.16", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.16.tgz", - "integrity": "sha512-bpMGOmV4OPmif7TNMteU/Ehf/hoC0Kf98PDc0F4BZkFrEapRMEqI/V6YS0lyzwSV6PQpY1y4xxArUIfBW5LVxQ==", + "version": "5.96.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.96.0.tgz", + "integrity": "sha512-6qbjdm1K5kizVKv9TNqhIN3doq2anRhdF2XaFMFSn4m8L22S69RV+FilvlyVT4RoJyMxtPU5rs4RpdFa/PEC7A==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.90.16" + "@tanstack/query-core": "5.96.0" }, "funding": { "type": "github", @@ -4240,14 +4241,14 @@ } }, "node_modules/axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.14.0.tgz", + "integrity": "sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" } }, "node_modules/axobject-query": { @@ -7829,10 +7830,13 @@ } }, "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==", - "license": "MIT" + "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==", + "license": "MIT", + "engines": { + "node": ">=10" + } }, "node_modules/punycode": { "version": "2.3.1", @@ -7976,6 +7980,19 @@ } } }, + "node_modules/react-toastify": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-11.0.5.tgz", + "integrity": "sha512-EpqHBGvnSTtHYhCPLxML05NLY2ZX0JURbAdNYa6BUkk+amz4wbKBQvoKQAB0ardvSarUBuY4Q4s1sluAzZwkmA==", + "license": "MIT", + "dependencies": { + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": "^18 || ^19", + "react-dom": "^18 || ^19" + } + }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", diff --git a/package.json b/package.json index ea0c581..cd5bc6d 100644 --- a/package.json +++ b/package.json @@ -30,9 +30,9 @@ "@radix-ui/react-toggle-group": "^1.1.7", "@radix-ui/react-tooltip": "^1.2.4", "@tabler/icons-react": "^3.31.0", - "@tanstack/react-query": "^5.76.0", + "@tanstack/react-query": "^5.96.0", "@tanstack/react-table": "^8.21.3", - "axios": "^1.12.2", + "axios": "^1.14.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "dayjs": "^1.11.13", @@ -43,6 +43,7 @@ "next-themes": "^0.4.6", "react": "^19.1.2", "react-dom": "^19.1.2", + "react-toastify": "^11.0.5", "recharts": "^2.15.3", "sonner": "^2.0.3", "tailwind-merge": "^3.2.0", diff --git a/src/app/[locale]/layout.tsx b/src/app/[locale]/layout.tsx index 229166b..298e695 100644 --- a/src/app/[locale]/layout.tsx +++ b/src/app/[locale]/layout.tsx @@ -11,6 +11,7 @@ import { setRequestLocale } from 'next-intl/server'; import QueryProvider from '@/shared/config/react-query/QueryProvider'; import Script from 'next/script'; import Provider from '@/features/providers/provider'; +import { ToastContainer } from 'react-toastify'; type Props = { children: ReactNode; @@ -45,6 +46,7 @@ export default async function RootLayout({ children, params }: Props) { {children}