From 8ff9b4f5f88a31170725f2a8adb3e0e5ccb15f0c Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Mon, 23 Jun 2025 14:47:14 +0300 Subject: [PATCH 01/65] feat: add husky, lint-staged, prettier, update ts aliases --- .husky/pre-commit | 5 + .idea/.gitignore | 8 + .idea/inspectionProfiles/Project_Default.xml | 6 + .idea/modules.xml | 8 + .idea/ocenka-web.iml | 12 + .idea/vcs.xml | 6 + .prettierignore | 6 + .prettierrc | 14 + README.md | 35 -- eslint.config.mjs | 11 +- package-lock.json | 515 +++++++++++++++++++ package.json | 21 +- src/core/.gitkeep | 1 + src/entities/.gitkeep | 1 + src/shared/.gitkeep | 1 + src/views/.gitkeep | 1 + src/widgets/.gitkeep | 1 + tsconfig.json | 8 +- 18 files changed, 616 insertions(+), 44 deletions(-) create mode 100644 .husky/pre-commit create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/ocenka-web.iml create mode 100644 .idea/vcs.xml create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 src/core/.gitkeep create mode 100644 src/entities/.gitkeep create mode 100644 src/shared/.gitkeep create mode 100644 src/views/.gitkeep create mode 100644 src/widgets/.gitkeep diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..d0d1113 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,5 @@ +npx lint-staged + +echo "" +echo "🚀 Running test build..." +npm run build diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..03d9549 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..1448a1e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/ocenka-web.iml b/.idea/ocenka-web.iml new file mode 100644 index 0000000..24643cc --- /dev/null +++ b/.idea/ocenka-web.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..6a12cc2 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +.git +.idea +.vscode +.next +/node_modules +*.md diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..6151634 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,14 @@ +{ + "tabWidth": 2, + "semi": true, + "printWidth": 80, + "trailingComma": "all", + "singleQuote": true, + "bracketSpacing": true, + "arrowParens": "always", + "bracketSameLine": false, + "proseWrap": "always", + "useTabs": false, + "endOfLine": "lf", + "jsxSingleQuote": true +} diff --git a/README.md b/README.md index e215bc4..d4e4649 100644 --- a/README.md +++ b/README.md @@ -1,36 +1 @@ -This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/eslint.config.mjs b/eslint.config.mjs index c85fb67..ce96b91 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,6 +1,6 @@ -import { dirname } from "path"; -import { fileURLToPath } from "url"; -import { FlatCompat } from "@eslint/eslintrc"; +import {dirname} from "path"; +import {fileURLToPath} from "url"; +import {FlatCompat} from "@eslint/eslintrc"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); @@ -11,6 +11,11 @@ const compat = new FlatCompat({ const eslintConfig = [ ...compat.extends("next/core-web-vitals", "next/typescript"), + { + rules: { + "@typescript-eslint/no-unused-vars": "off", + }, + }, ]; export default eslintConfig; diff --git a/package-lock.json b/package-lock.json index d3cadc1..31bab32 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,9 @@ "@types/react-dom": "^19", "eslint": "^9", "eslint-config-next": "15.3.4", + "husky": "^9.1.7", + "lint-staged": "^16.1.2", + "prettier": "3.6.0", "typescript": "^5" } }, @@ -1563,6 +1566,35 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -1948,6 +1980,39 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -1999,6 +2064,23 @@ "simple-swizzle": "^0.2.2" } }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", + "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2195,6 +2277,19 @@ "dev": true, "license": "MIT" }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/es-abstract": { "version": "1.24.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", @@ -2811,6 +2906,13 @@ "node": ">=0.10.0" } }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2993,6 +3095,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -3220,6 +3335,22 @@ "node": ">= 0.4" } }, + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "dev": true, + "license": "MIT", + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -3450,6 +3581,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-generator-function": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", @@ -3826,6 +3970,78 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lint-staged": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.1.2.tgz", + "integrity": "sha512-sQKw2Si2g9KUZNY3XNvRuDq4UJqpHwF0/FQzZR2M7I5MvtpWvibikCjUVJzZdGE0ByurEl3KQNvsGetd1ty1/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.4.1", + "commander": "^14.0.0", + "debug": "^4.4.1", + "lilconfig": "^3.1.3", + "listr2": "^8.3.3", + "micromatch": "^4.0.8", + "nano-spawn": "^1.0.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.2", + "yaml": "^2.8.0" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=20.17" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/listr2": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", + "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3849,6 +4065,72 @@ "dev": true, "license": "MIT" }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -3896,6 +4178,19 @@ "node": ">=8.6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3926,6 +4221,19 @@ "dev": true, "license": "MIT" }, + "node_modules/nano-spawn": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-1.0.2.tgz", + "integrity": "sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/nano-spawn?sponsor=1" + } + }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -4144,6 +4452,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -4271,6 +4595,19 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -4319,6 +4656,22 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.0.tgz", + "integrity": "sha512-ujSB9uXHJKzM/2GBuE0hBOUgC77CN3Bnpqa+g80bkv3T3A93wL/xlzDATHhnhkzifz/UE2SNOvmbTz5hSkDlHw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -4475,6 +4828,23 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -4486,6 +4856,13 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -4774,6 +5151,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -4784,6 +5174,36 @@ "is-arrayish": "^0.3.1" } }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -4822,6 +5242,41 @@ "node": ">=10.0.0" } }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, "node_modules/string.prototype.includes": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", @@ -4935,6 +5390,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -5388,6 +5859,50 @@ "node": ">=0.10.0" } }, + "node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/yaml": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 48e263b..1324a5a 100644 --- a/package.json +++ b/package.json @@ -6,20 +6,31 @@ "dev": "next dev --turbopack", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "prettier": "prettier --write .", + "prepare": "husky" }, "dependencies": { + "next": "15.3.4", "react": "^19.0.0", - "react-dom": "^19.0.0", - "next": "15.3.4" + "react-dom": "^19.0.0" }, "devDependencies": { - "typescript": "^5", + "@eslint/eslintrc": "^3", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", "eslint": "^9", "eslint-config-next": "15.3.4", - "@eslint/eslintrc": "^3" + "husky": "^9.1.7", + "lint-staged": "^16.1.2", + "prettier": "3.6.0", + "typescript": "^5" + }, + "lint-staged": { + "*.{js,jsx,ts,tsx}": [ + "prettier --write", + "eslint --fix" + ] } } diff --git a/src/core/.gitkeep b/src/core/.gitkeep new file mode 100644 index 0000000..620bb1a --- /dev/null +++ b/src/core/.gitkeep @@ -0,0 +1 @@ +keep folder file \ No newline at end of file diff --git a/src/entities/.gitkeep b/src/entities/.gitkeep new file mode 100644 index 0000000..620bb1a --- /dev/null +++ b/src/entities/.gitkeep @@ -0,0 +1 @@ +keep folder file \ No newline at end of file diff --git a/src/shared/.gitkeep b/src/shared/.gitkeep new file mode 100644 index 0000000..620bb1a --- /dev/null +++ b/src/shared/.gitkeep @@ -0,0 +1 @@ +keep folder file \ No newline at end of file diff --git a/src/views/.gitkeep b/src/views/.gitkeep new file mode 100644 index 0000000..620bb1a --- /dev/null +++ b/src/views/.gitkeep @@ -0,0 +1 @@ +keep folder file \ No newline at end of file diff --git a/src/widgets/.gitkeep b/src/widgets/.gitkeep new file mode 100644 index 0000000..620bb1a --- /dev/null +++ b/src/widgets/.gitkeep @@ -0,0 +1 @@ +keep folder file \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index c133409..545c45f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,7 +19,13 @@ } ], "paths": { - "@/*": ["./src/*"] + "@/*": ["./src/*"], + "@core/*": ["./src/core/*"], + "@entities/*": ["./src/entities/*"], + "@shared/*": ["./src/shared/*"], + "@views/*": ["./src/views/*"], + "@widgets/*": ["./src/widgets/*"], + "@public/*": ["./public/*"] } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], -- 2.49.1 From 8086223f232d51a98ae57f5afd3d5029cbae896b Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Mon, 23 Jun 2025 15:20:35 +0300 Subject: [PATCH 02/65] feat: add scss, nodemailer --- .gitattributes | 1 + Dockerfile | 49 +++++ docker-compose.yaml | 9 + package-lock.json | 412 ++++++++++++++++++++++++++++++++++++++++ package.json | 3 + public/file.svg | 1 - public/globe.svg | 1 - public/vercel.svg | 1 - public/window.svg | 1 - src/app/layout.tsx | 21 +- src/app/page.module.css | 168 ---------------- src/app/page.tsx | 94 +-------- 12 files changed, 486 insertions(+), 275 deletions(-) create mode 100644 .gitattributes create mode 100644 Dockerfile create mode 100644 docker-compose.yaml delete mode 100644 public/file.svg delete mode 100644 public/globe.svg delete mode 100644 public/vercel.svg delete mode 100644 public/window.svg delete mode 100644 src/app/page.module.css diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..2125666 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d9242e6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,49 @@ +# Стадия сборки (builder) +FROM node:22-alpine AS builder + +# Устанавливаем рабочую директорию +WORKDIR /app + +# Копируем package.json и package-lock.json (или yarn.lock) +COPY package*.json ./ + +# Устанавливаем зависимости +RUN npm install --frozen-lockfile + +# Копируем все файлы проекта +COPY . . + +# Собираем приложение +RUN npm run build + +# Стадия запуска (runner) +FROM node:22-alpine AS runner +WORKDIR /app + +ENV NODE_ENV=production \ + NEXT_TELEMETRY_DISABLED=1 + +# Включаем node пользователя +RUN addgroup -g 1001 -S nodejs +RUN adduser -S nextjs -u 1001 + +# Set the correct permission for prerender cache +RUN mkdir .next +RUN chown nextjs:nodejs .next + +# Копируем необходимые файлы из стадии builder +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static +COPY --from=builder --chown=nextjs:nodejs /app/public /app/public + +# Переключаем на пользователя nextjs +USER nextjs + +# Открываем порт +EXPOSE 3000 + +# Запускаем приложение +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" + +CMD ["node", "server.js"] diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..cc41bd2 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,9 @@ +version: '3.8' + +services: + ocenka-web: + image: smallbuster/ocenka-web:latest + container_name: ocenka-web + restart: unless-stopped + ports: + - '5003:3000' diff --git a/package-lock.json b/package-lock.json index 31bab32..dbc4477 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.1.0", "dependencies": { "next": "15.3.4", + "nodemailer": "^7.0.3", "react": "^19.0.0", "react-dom": "^19.0.0" }, @@ -17,11 +18,13 @@ "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", + "clsx": "^2.1.1", "eslint": "^9", "eslint-config-next": "15.3.4", "husky": "^9.1.7", "lint-staged": "^16.1.2", "prettier": "3.6.0", + "sass": "^1.89.2", "typescript": "^5" } }, @@ -879,6 +882,330 @@ "node": ">=12.4.0" } }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -1980,6 +2307,22 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/cli-cursor": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", @@ -2019,6 +2362,16 @@ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -3361,6 +3714,13 @@ "node": ">= 4" } }, + "node_modules/immutable": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", + "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -4329,6 +4689,23 @@ } } }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/nodemailer": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.3.tgz", + "integrity": "sha512-Ajq6Sz1x7cIK3pN6KesGTah+1gnwMnx5gKl3piQlQQE/PwyJ4Mbc8is2psWYxK3RJTVeqsDaCv8ZzXLCDHMTZw==", + "license": "MIT-0", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4743,6 +5120,20 @@ "dev": true, "license": "MIT" }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -4942,6 +5333,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sass": { + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", + "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, "node_modules/scheduler": { "version": "0.26.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", diff --git a/package.json b/package.json index 1324a5a..3e78a42 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ }, "dependencies": { "next": "15.3.4", + "nodemailer": "^7.0.3", "react": "^19.0.0", "react-dom": "^19.0.0" }, @@ -20,11 +21,13 @@ "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", + "clsx": "^2.1.1", "eslint": "^9", "eslint-config-next": "15.3.4", "husky": "^9.1.7", "lint-staged": "^16.1.2", "prettier": "3.6.0", + "sass": "^1.89.2", "typescript": "^5" }, "lint-staged": { diff --git a/public/file.svg b/public/file.svg deleted file mode 100644 index 004145c..0000000 --- a/public/file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/globe.svg b/public/globe.svg deleted file mode 100644 index 567f17b..0000000 --- a/public/globe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/vercel.svg b/public/vercel.svg deleted file mode 100644 index 7705396..0000000 --- a/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/window.svg b/public/window.svg deleted file mode 100644 index b2b2a44..0000000 --- a/public/window.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 42fc323..a915cba 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,20 +1,21 @@ -import type { Metadata } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; -import "./globals.css"; +import type { Metadata } from 'next'; +import { Geist, Geist_Mono } from 'next/font/google'; +import './globals.css'; const geistSans = Geist({ - variable: "--font-geist-sans", - subsets: ["latin"], + variable: '--font-geist-sans', + subsets: ['latin'], }); const geistMono = Geist_Mono({ - variable: "--font-geist-mono", - subsets: ["latin"], + variable: '--font-geist-mono', + subsets: ['latin'], }); export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: 'Независимая оценка и судебная экспертиза | Компания ДИТРАСО', + description: + 'Услуги независимой оценки и судебной экспертизы в Сочи и Краснодаре. Тел. +7 (900) 241-34-34', }; export default function RootLayout({ @@ -23,7 +24,7 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - + {children} diff --git a/src/app/page.module.css b/src/app/page.module.css deleted file mode 100644 index a11c8f3..0000000 --- a/src/app/page.module.css +++ /dev/null @@ -1,168 +0,0 @@ -.page { - --gray-rgb: 0, 0, 0; - --gray-alpha-200: rgba(var(--gray-rgb), 0.08); - --gray-alpha-100: rgba(var(--gray-rgb), 0.05); - - --button-primary-hover: #383838; - --button-secondary-hover: #f2f2f2; - - display: grid; - grid-template-rows: 20px 1fr 20px; - align-items: center; - justify-items: center; - min-height: 100svh; - padding: 80px; - gap: 64px; - font-family: var(--font-geist-sans); -} - -@media (prefers-color-scheme: dark) { - .page { - --gray-rgb: 255, 255, 255; - --gray-alpha-200: rgba(var(--gray-rgb), 0.145); - --gray-alpha-100: rgba(var(--gray-rgb), 0.06); - - --button-primary-hover: #ccc; - --button-secondary-hover: #1a1a1a; - } -} - -.main { - display: flex; - flex-direction: column; - gap: 32px; - grid-row-start: 2; -} - -.main ol { - font-family: var(--font-geist-mono); - padding-left: 0; - margin: 0; - font-size: 14px; - line-height: 24px; - letter-spacing: -0.01em; - list-style-position: inside; -} - -.main li:not(:last-of-type) { - margin-bottom: 8px; -} - -.main code { - font-family: inherit; - background: var(--gray-alpha-100); - padding: 2px 4px; - border-radius: 4px; - font-weight: 600; -} - -.ctas { - display: flex; - gap: 16px; -} - -.ctas a { - appearance: none; - border-radius: 128px; - height: 48px; - padding: 0 20px; - border: none; - border: 1px solid transparent; - transition: - background 0.2s, - color 0.2s, - border-color 0.2s; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - font-size: 16px; - line-height: 20px; - font-weight: 500; -} - -a.primary { - background: var(--foreground); - color: var(--background); - gap: 8px; -} - -a.secondary { - border-color: var(--gray-alpha-200); - min-width: 158px; -} - -.footer { - grid-row-start: 3; - display: flex; - gap: 24px; -} - -.footer a { - display: flex; - align-items: center; - gap: 8px; -} - -.footer img { - flex-shrink: 0; -} - -/* Enable hover only on non-touch devices */ -@media (hover: hover) and (pointer: fine) { - a.primary:hover { - background: var(--button-primary-hover); - border-color: transparent; - } - - a.secondary:hover { - background: var(--button-secondary-hover); - border-color: transparent; - } - - .footer a:hover { - text-decoration: underline; - text-underline-offset: 4px; - } -} - -@media (max-width: 600px) { - .page { - padding: 32px; - padding-bottom: 80px; - } - - .main { - align-items: center; - } - - .main ol { - text-align: center; - } - - .ctas { - flex-direction: column; - } - - .ctas a { - font-size: 14px; - height: 40px; - padding: 0 16px; - } - - a.secondary { - min-width: auto; - } - - .footer { - flex-wrap: wrap; - align-items: center; - justify-content: center; - } -} - -@media (prefers-color-scheme: dark) { - .logo { - filter: invert(); - } -} diff --git a/src/app/page.tsx b/src/app/page.tsx index 84af2cb..8e52ae9 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,95 +1,3 @@ -import Image from "next/image"; -import styles from "./page.module.css"; - export default function Home() { - return ( -
-
- Next.js logo -
    -
  1. - Get started by editing src/app/page.tsx. -
  2. -
  3. Save and see your changes instantly.
  4. -
- -
- - Vercel logomark - Deploy now - - - Read our docs - -
-
- -
- ); + return
Main
; } -- 2.49.1 From 21111e93f9142f4abef708a5aa1c7c449d4079c8 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Mon, 23 Jun 2025 15:32:25 +0300 Subject: [PATCH 03/65] fix: update settings --- next.config.ts | 12 +- src/app/layout.tsx | 26 ++--- src/core/{ => constants}/.gitkeep | 0 src/core/styles/functions.scss | 6 + .../globals.css => core/styles/globals.scss} | 15 +-- src/core/styles/index.scss | 3 + src/core/styles/mixins.scss | 23 ++++ src/core/styles/reset.scss | 106 ++++++++++++++++++ src/core/styles/variables.scss | 30 +++++ 9 files changed, 190 insertions(+), 31 deletions(-) rename src/core/{ => constants}/.gitkeep (100%) create mode 100644 src/core/styles/functions.scss rename src/{app/globals.css => core/styles/globals.scss} (65%) create mode 100644 src/core/styles/index.scss create mode 100644 src/core/styles/mixins.scss create mode 100644 src/core/styles/reset.scss create mode 100644 src/core/styles/variables.scss diff --git a/next.config.ts b/next.config.ts index e9ffa30..1f7ea33 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,7 +1,17 @@ -import type { NextConfig } from "next"; +import type { NextConfig } from 'next'; +import path from 'path'; const nextConfig: NextConfig = { /* config options here */ + output: 'standalone', + sassOptions: { + includePaths: [path.resolve('./src/core/styles')], + prependData: `@import "index.scss";`, + }, + compiler: { + removeConsole: + process.env.NODE_ENV === 'production' ? { exclude: ['error'] } : false, + }, }; export default nextConfig; diff --git a/src/app/layout.tsx b/src/app/layout.tsx index a915cba..ab5d140 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,15 +1,13 @@ import type { Metadata } from 'next'; -import { Geist, Geist_Mono } from 'next/font/google'; -import './globals.css'; +import { ReactNode } from 'react'; +import { Roboto } from 'next/font/google'; +import '@core/styles/globals.scss'; +import '@core/styles/reset.scss'; -const geistSans = Geist({ - variable: '--font-geist-sans', - subsets: ['latin'], -}); - -const geistMono = Geist_Mono({ - variable: '--font-geist-mono', - subsets: ['latin'], +const roboto = Roboto({ + subsets: ['cyrillic'], + weight: ['300', '400', '500', '600', '700'], + variable: '--font-roboto', }); export const metadata: Metadata = { @@ -20,14 +18,10 @@ export const metadata: Metadata = { export default function RootLayout({ children, -}: Readonly<{ - children: React.ReactNode; -}>) { +}: Readonly<{ children: ReactNode }>) { return ( - - {children} - + {children} ); } diff --git a/src/core/.gitkeep b/src/core/constants/.gitkeep similarity index 100% rename from src/core/.gitkeep rename to src/core/constants/.gitkeep diff --git a/src/core/styles/functions.scss b/src/core/styles/functions.scss new file mode 100644 index 0000000..26695ad --- /dev/null +++ b/src/core/styles/functions.scss @@ -0,0 +1,6 @@ +@use 'sass:math'; + +@function rem($size) { + $remSize: math.div($size, $base-font-size); + @return $remSize * 1rem; +} \ No newline at end of file diff --git a/src/app/globals.css b/src/core/styles/globals.scss similarity index 65% rename from src/app/globals.css rename to src/core/styles/globals.scss index e3734be..a252305 100644 --- a/src/app/globals.css +++ b/src/core/styles/globals.scss @@ -1,13 +1,6 @@ :root { --background: #ffffff; - --foreground: #171717; -} - -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } + --foreground: #333333; } html, @@ -34,9 +27,3 @@ a { color: inherit; text-decoration: none; } - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } -} diff --git a/src/core/styles/index.scss b/src/core/styles/index.scss new file mode 100644 index 0000000..2b78af2 --- /dev/null +++ b/src/core/styles/index.scss @@ -0,0 +1,3 @@ +@import './variables.scss'; +@import './mixins.scss'; +@import './functions.scss'; \ No newline at end of file diff --git a/src/core/styles/mixins.scss b/src/core/styles/mixins.scss new file mode 100644 index 0000000..ebe01bb --- /dev/null +++ b/src/core/styles/mixins.scss @@ -0,0 +1,23 @@ +@mixin onlymobile { + @media (min-width: 0px) and (max-width: calc($tablet - 1px)) { + @content; + } +} + +@mixin iftablet { + @media (min-width: $tablet) { + @content; + } +} + +@mixin iflaptop { + @media (min-width: $laptop) { + @content; + } +} + +@mixin ifdesktop { + @media (min-width: $desktop) { + @content; + } +} diff --git a/src/core/styles/reset.scss b/src/core/styles/reset.scss new file mode 100644 index 0000000..0fa9db3 --- /dev/null +++ b/src/core/styles/reset.scss @@ -0,0 +1,106 @@ +/* Reset and base styles */ +* { + padding: 0; + margin: 0; + border: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); // stop highlights element blue when tapping +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +/* Links */ + +a, +a:link, +a:visited { + text-decoration: none; + color: unset; +} + +a:hover { + text-decoration: none; +} + +/* Components */ + +aside, +nav, +footer, +header, +section, +main { + display: block; +} + +h1, +h2, +h3, +h4, +h5, +h6, +p { + font-size: inherit; + font-weight: inherit; + margin: 0; + padding: 0; + //margin-block-start: 0; + //margin-block-end: 0; +} + +ul[role='list'], ol[role='list'] { + list-style: none; +} + +ul, +ul li { + list-style: none; +} + +/* Form */ + +input, +textarea, +button, +select { + font-family: inherit; + font-size: inherit; + color: inherit; + background-color: transparent; +} + +input::-ms-clear { + display: none; +} + +button, +input[type='submit'] { + display: inline-block; + box-shadow: none; + background-color: transparent; + background: none; +} + +input:focus, +input:active, +button:focus, +button:active { + outline: none; +} + +button::-moz-focus-inner { + padding: 0; + border: 0; +} + +legend { + display: block; +} + +img, picture, svg, video, canvas { + background-repeat: no-repeat; + background-size: cover; +} diff --git a/src/core/styles/variables.scss b/src/core/styles/variables.scss new file mode 100644 index 0000000..a08b916 --- /dev/null +++ b/src/core/styles/variables.scss @@ -0,0 +1,30 @@ +//frontend breakpoint +$mobile: 360px; +$tablet: 768px; +$laptop: 1024px; +$desktop: 1440px; + +//fonts +$font-open-sans: var(--font-roboto), sans-serif; + +$base-font-size: 16px; + +$font-light: 300; +$font-regular: 400; +$font-medium: 500; +$font-semi-bold: 600; +$font-bold: 700; + +// colors +$color-white: #FFFFFF; +$color-black: #000000; +$color-orange: #E96526; +$color-orange-hover: #ea4b05; +$color-lightgray: #E4E1E1; +$color-darkgray: #999999; +$color-text: #333333; +$color-text-light: #222222; +$color-mark: #E96526; +$color-error: #ff0000; +$color-error-light: #ff9191; +$color-gray-border: #555555; \ No newline at end of file -- 2.49.1 From b013bf97b64fd17959bbf505a3759a82c3282f0b Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Mon, 23 Jun 2025 15:34:56 +0300 Subject: [PATCH 04/65] fix: downgrade sass lib --- package-lock.json | 479 +++++++++++----------------------------------- package.json | 2 +- 2 files changed, 116 insertions(+), 365 deletions(-) diff --git a/package-lock.json b/package-lock.json index dbc4477..808c1b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "husky": "^9.1.7", "lint-staged": "^16.1.2", "prettier": "3.6.0", - "sass": "^1.89.2", + "sass": "1.77.8", "typescript": "^5" } }, @@ -882,330 +882,6 @@ "node": ">=12.4.0" } }, - "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" - } - }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -1938,6 +1614,20 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -2175,6 +1865,19 @@ "dev": true, "license": "MIT" }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -2190,7 +1893,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -2308,19 +2011,41 @@ } }, "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "devOptional": true, "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">= 14.16.0" + "node": ">= 8.10.0" }, "funding": { "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/cli-cursor": { @@ -3344,7 +3069,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -3407,6 +3132,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -3715,9 +3455,9 @@ } }, "node_modules/immutable": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", - "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", "devOptional": true, "license": "MIT" }, @@ -3824,6 +3564,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", @@ -3919,7 +3672,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -3977,7 +3730,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -4016,7 +3769,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -4689,14 +4442,6 @@ } } }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true, - "license": "MIT", - "optional": true - }, "node_modules/nodemailer": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.3.tgz", @@ -4706,6 +4451,16 @@ "node": ">=6.0.0" } }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4963,7 +4718,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -5121,17 +4876,16 @@ "license": "MIT" }, "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "devOptional": true, "license": "MIT", - "engines": { - "node": ">= 14.18.0" + "dependencies": { + "picomatch": "^2.2.1" }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=8.10.0" } }, "node_modules/reflect.getprototypeof": { @@ -5334,14 +5088,14 @@ } }, "node_modules/sass": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", - "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", + "version": "1.77.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", + "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", "devOptional": true, "license": "MIT", "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -5349,9 +5103,6 @@ }, "engines": { "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" } }, "node_modules/scheduler": { @@ -5939,7 +5690,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" diff --git a/package.json b/package.json index 3e78a42..bdb7904 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "husky": "^9.1.7", "lint-staged": "^16.1.2", "prettier": "3.6.0", - "sass": "^1.89.2", + "sass": "1.77.8", "typescript": "^5" }, "lint-staged": { -- 2.49.1 From 101a4f42286b95685b535387ce51fab878bba571 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Mon, 23 Jun 2025 16:01:45 +0300 Subject: [PATCH 05/65] feat: add pages structure --- src/app/contacts/page.tsx | 3 +++ src/app/ekspertiza/avtotehnicheskaja/page.tsx | 3 +++ src/app/ekspertiza/buhgalterskaja/page.tsx | 3 +++ src/app/ekspertiza/dokumentov/page.tsx | 3 +++ src/app/ekspertiza/finansovo-jekonomicheskaja/page.tsx | 3 +++ src/app/ekspertiza/kadastrovaja/page.tsx | 3 +++ src/app/ekspertiza/kompjuterno-tehnicheskaja/page.tsx | 3 +++ src/app/ekspertiza/ocenochnaja/page.tsx | 3 +++ src/app/ekspertiza/page.tsx | 3 +++ src/app/ekspertiza/pocherkovedcheskaja/page.tsx | 3 +++ src/app/ekspertiza/pozharno-tehnicheskaja/page.tsx | 3 +++ src/app/ekspertiza/recenzirovanie/page.tsx | 3 +++ src/app/ekspertiza/stroitelno-tehnicheskaja/page.tsx | 3 +++ src/app/ekspertiza/tehniko-kriminalisticheskaja/page.tsx | 3 +++ src/app/ekspertiza/tovarovedcheskaja/page.tsx | 3 +++ src/app/ekspertiza/trasologicheskaja/page.tsx | 3 +++ src/app/ekspertiza/zemle-ustroitelnaja/page.tsx | 3 +++ src/app/experts/page.tsx | 3 +++ src/app/jurist/bankrotstvo-fizicheskih-lic/page.tsx | 3 +++ src/app/jurist/page.tsx | 3 +++ src/app/jurist/pomoshh-dolzhnikam/page.tsx | 3 +++ src/app/jurist/predstavitelstvo-v-sude/page.tsx | 3 +++ src/app/jurist/semejnye-i-nasledstvennye-spory/page.tsx | 3 +++ .../page.tsx | 3 +++ src/app/jurist/spory-po-dtp/page.tsx | 3 +++ src/app/jurist/strahovye-spory/page.tsx | 3 +++ src/app/jurist/trudovye-spory/page.tsx | 3 +++ src/app/jurist/vozvrat-strahovki-i-komissij-bankov/page.tsx | 3 +++ src/app/jurist/vzyskanie-dolgov-s-juridicheskih-lic/page.tsx | 3 +++ src/app/jurist/zemelnye-i-imushhestvennye-spory/page.tsx | 3 +++ src/app/ocenka/avtomobilja-dlja-suda/page.tsx | 3 +++ src/app/ocenka/cennyh-bumag/page.tsx | 3 +++ src/app/ocenka/dlja-banka-vtb/page.tsx | 3 +++ src/app/ocenka/dlja-banka/page.tsx | 3 +++ src/app/ocenka/dlja-ipoteki/page.tsx | 3 +++ src/app/ocenka/dlja-notariusa/page.tsx | 3 +++ src/app/ocenka/dlja-opeki/page.tsx | 3 +++ src/app/ocenka/dlja-opredelenija-stoimosti-ushherba/page.tsx | 3 +++ src/app/ocenka/dlja-sberbanka/page.tsx | 3 +++ src/app/ocenka/dlja-strahovanija/page.tsx | 3 +++ src/app/ocenka/garazha/page.tsx | 3 +++ src/app/ocenka/imushhestva-dlja-bankrotstva/page.tsx | 3 +++ .../imushhestva-dlja-vnesenija-v-ustavnoj-kapital/page.tsx | 3 +++ .../ocenka/imushhestva-dlja-vstuplenija-v-nasledstvo/page.tsx | 3 +++ .../jekspertiza-i-recenzirovanie-otcheta-ob-ocenke/page.tsx | 3 +++ src/app/ocenka/kvartiry/page.tsx | 3 +++ src/app/ocenka/mashin-i-oborudovanija/page.tsx | 3 +++ src/app/ocenka/morskih-i-rechnyh-sudov/page.tsx | 3 +++ src/app/ocenka/motociklov-i-mototehniki/page.tsx | 3 +++ src/app/ocenka/nedvizhimosti-dlja-suda/page.tsx | 3 +++ src/app/ocenka/nedvizhimosti/page.tsx | 3 +++ src/app/ocenka/nematerialnyh-aktivov/page.tsx | 3 +++ src/app/ocenka/nezavershennogo-stroitelstva/page.tsx | 3 +++ src/app/ocenka/nezavisimaja/page.tsx | 3 +++ src/app/ocenka/nezhilogo-pomeshhenija/page.tsx | 3 +++ src/app/ocenka/ocenka-imushhestva-pri-razvode/page.tsx | 3 +++ src/app/ocenka/ofisa/page.tsx | 3 +++ src/app/ocenka/page.tsx | 3 +++ src/app/ocenka/rynochnoj-stoimosti-avtomobilja/page.tsx | 3 +++ src/app/ocenka/sooruzhenij/page.tsx | 3 +++ src/app/ocenka/spectehniki/page.tsx | 3 +++ src/app/ocenka/stoimosti-arendnoj-stavki/page.tsx | 3 +++ src/app/ocenka/stoimosti-predprijatija-biznesa/page.tsx | 3 +++ src/app/ocenka/ushherba-nedvizhimosti/page.tsx | 3 +++ src/app/ocenka/ushherba-ot-pozhara/page.tsx | 3 +++ src/app/ocenka/ushherba-ot-zaliva/page.tsx | 3 +++ src/app/ocenka/ushherba-v-dtp/page.tsx | 3 +++ .../ocenka/uts-utraty-tovarnoj-stoimosti-avtomobilja/page.tsx | 3 +++ .../ocenka/vozdushnyh-sudov-i-letatelnyh-apparatov/page.tsx | 3 +++ src/app/ocenka/zdanija/page.tsx | 3 +++ src/app/ocenka/zemel/page.tsx | 3 +++ src/app/ocenka/zemelnogo-uchastka/page.tsx | 3 +++ src/app/ocenka/zhilogo-doma/page.tsx | 3 +++ 73 files changed, 219 insertions(+) create mode 100644 src/app/contacts/page.tsx create mode 100644 src/app/ekspertiza/avtotehnicheskaja/page.tsx create mode 100644 src/app/ekspertiza/buhgalterskaja/page.tsx create mode 100644 src/app/ekspertiza/dokumentov/page.tsx create mode 100644 src/app/ekspertiza/finansovo-jekonomicheskaja/page.tsx create mode 100644 src/app/ekspertiza/kadastrovaja/page.tsx create mode 100644 src/app/ekspertiza/kompjuterno-tehnicheskaja/page.tsx create mode 100644 src/app/ekspertiza/ocenochnaja/page.tsx create mode 100644 src/app/ekspertiza/page.tsx create mode 100644 src/app/ekspertiza/pocherkovedcheskaja/page.tsx create mode 100644 src/app/ekspertiza/pozharno-tehnicheskaja/page.tsx create mode 100644 src/app/ekspertiza/recenzirovanie/page.tsx create mode 100644 src/app/ekspertiza/stroitelno-tehnicheskaja/page.tsx create mode 100644 src/app/ekspertiza/tehniko-kriminalisticheskaja/page.tsx create mode 100644 src/app/ekspertiza/tovarovedcheskaja/page.tsx create mode 100644 src/app/ekspertiza/trasologicheskaja/page.tsx create mode 100644 src/app/ekspertiza/zemle-ustroitelnaja/page.tsx create mode 100644 src/app/experts/page.tsx create mode 100644 src/app/jurist/bankrotstvo-fizicheskih-lic/page.tsx create mode 100644 src/app/jurist/page.tsx create mode 100644 src/app/jurist/pomoshh-dolzhnikam/page.tsx create mode 100644 src/app/jurist/predstavitelstvo-v-sude/page.tsx create mode 100644 src/app/jurist/semejnye-i-nasledstvennye-spory/page.tsx create mode 100644 src/app/jurist/soprovozhdenie-sdelok-sostavlenie-dogovorov-konsultaciya/page.tsx create mode 100644 src/app/jurist/spory-po-dtp/page.tsx create mode 100644 src/app/jurist/strahovye-spory/page.tsx create mode 100644 src/app/jurist/trudovye-spory/page.tsx create mode 100644 src/app/jurist/vozvrat-strahovki-i-komissij-bankov/page.tsx create mode 100644 src/app/jurist/vzyskanie-dolgov-s-juridicheskih-lic/page.tsx create mode 100644 src/app/jurist/zemelnye-i-imushhestvennye-spory/page.tsx create mode 100644 src/app/ocenka/avtomobilja-dlja-suda/page.tsx create mode 100644 src/app/ocenka/cennyh-bumag/page.tsx create mode 100644 src/app/ocenka/dlja-banka-vtb/page.tsx create mode 100644 src/app/ocenka/dlja-banka/page.tsx create mode 100644 src/app/ocenka/dlja-ipoteki/page.tsx create mode 100644 src/app/ocenka/dlja-notariusa/page.tsx create mode 100644 src/app/ocenka/dlja-opeki/page.tsx create mode 100644 src/app/ocenka/dlja-opredelenija-stoimosti-ushherba/page.tsx create mode 100644 src/app/ocenka/dlja-sberbanka/page.tsx create mode 100644 src/app/ocenka/dlja-strahovanija/page.tsx create mode 100644 src/app/ocenka/garazha/page.tsx create mode 100644 src/app/ocenka/imushhestva-dlja-bankrotstva/page.tsx create mode 100644 src/app/ocenka/imushhestva-dlja-vnesenija-v-ustavnoj-kapital/page.tsx create mode 100644 src/app/ocenka/imushhestva-dlja-vstuplenija-v-nasledstvo/page.tsx create mode 100644 src/app/ocenka/jekspertiza-i-recenzirovanie-otcheta-ob-ocenke/page.tsx create mode 100644 src/app/ocenka/kvartiry/page.tsx create mode 100644 src/app/ocenka/mashin-i-oborudovanija/page.tsx create mode 100644 src/app/ocenka/morskih-i-rechnyh-sudov/page.tsx create mode 100644 src/app/ocenka/motociklov-i-mototehniki/page.tsx create mode 100644 src/app/ocenka/nedvizhimosti-dlja-suda/page.tsx create mode 100644 src/app/ocenka/nedvizhimosti/page.tsx create mode 100644 src/app/ocenka/nematerialnyh-aktivov/page.tsx create mode 100644 src/app/ocenka/nezavershennogo-stroitelstva/page.tsx create mode 100644 src/app/ocenka/nezavisimaja/page.tsx create mode 100644 src/app/ocenka/nezhilogo-pomeshhenija/page.tsx create mode 100644 src/app/ocenka/ocenka-imushhestva-pri-razvode/page.tsx create mode 100644 src/app/ocenka/ofisa/page.tsx create mode 100644 src/app/ocenka/page.tsx create mode 100644 src/app/ocenka/rynochnoj-stoimosti-avtomobilja/page.tsx create mode 100644 src/app/ocenka/sooruzhenij/page.tsx create mode 100644 src/app/ocenka/spectehniki/page.tsx create mode 100644 src/app/ocenka/stoimosti-arendnoj-stavki/page.tsx create mode 100644 src/app/ocenka/stoimosti-predprijatija-biznesa/page.tsx create mode 100644 src/app/ocenka/ushherba-nedvizhimosti/page.tsx create mode 100644 src/app/ocenka/ushherba-ot-pozhara/page.tsx create mode 100644 src/app/ocenka/ushherba-ot-zaliva/page.tsx create mode 100644 src/app/ocenka/ushherba-v-dtp/page.tsx create mode 100644 src/app/ocenka/uts-utraty-tovarnoj-stoimosti-avtomobilja/page.tsx create mode 100644 src/app/ocenka/vozdushnyh-sudov-i-letatelnyh-apparatov/page.tsx create mode 100644 src/app/ocenka/zdanija/page.tsx create mode 100644 src/app/ocenka/zemel/page.tsx create mode 100644 src/app/ocenka/zemelnogo-uchastka/page.tsx create mode 100644 src/app/ocenka/zhilogo-doma/page.tsx diff --git a/src/app/contacts/page.tsx b/src/app/contacts/page.tsx new file mode 100644 index 0000000..d757635 --- /dev/null +++ b/src/app/contacts/page.tsx @@ -0,0 +1,3 @@ +export default function ContactsPage() { + return
Contacts
; +} diff --git a/src/app/ekspertiza/avtotehnicheskaja/page.tsx b/src/app/ekspertiza/avtotehnicheskaja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ekspertiza/avtotehnicheskaja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ekspertiza/buhgalterskaja/page.tsx b/src/app/ekspertiza/buhgalterskaja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ekspertiza/buhgalterskaja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ekspertiza/dokumentov/page.tsx b/src/app/ekspertiza/dokumentov/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ekspertiza/dokumentov/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ekspertiza/finansovo-jekonomicheskaja/page.tsx b/src/app/ekspertiza/finansovo-jekonomicheskaja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ekspertiza/finansovo-jekonomicheskaja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ekspertiza/kadastrovaja/page.tsx b/src/app/ekspertiza/kadastrovaja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ekspertiza/kadastrovaja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ekspertiza/kompjuterno-tehnicheskaja/page.tsx b/src/app/ekspertiza/kompjuterno-tehnicheskaja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ekspertiza/kompjuterno-tehnicheskaja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ekspertiza/ocenochnaja/page.tsx b/src/app/ekspertiza/ocenochnaja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ekspertiza/ocenochnaja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ekspertiza/page.tsx b/src/app/ekspertiza/page.tsx new file mode 100644 index 0000000..e5a2d4e --- /dev/null +++ b/src/app/ekspertiza/page.tsx @@ -0,0 +1,3 @@ +export default function ExpertizaPage() { + return
Expertiza
; +} diff --git a/src/app/ekspertiza/pocherkovedcheskaja/page.tsx b/src/app/ekspertiza/pocherkovedcheskaja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ekspertiza/pocherkovedcheskaja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ekspertiza/pozharno-tehnicheskaja/page.tsx b/src/app/ekspertiza/pozharno-tehnicheskaja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ekspertiza/pozharno-tehnicheskaja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ekspertiza/recenzirovanie/page.tsx b/src/app/ekspertiza/recenzirovanie/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ekspertiza/recenzirovanie/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ekspertiza/stroitelno-tehnicheskaja/page.tsx b/src/app/ekspertiza/stroitelno-tehnicheskaja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ekspertiza/stroitelno-tehnicheskaja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ekspertiza/tehniko-kriminalisticheskaja/page.tsx b/src/app/ekspertiza/tehniko-kriminalisticheskaja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ekspertiza/tehniko-kriminalisticheskaja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ekspertiza/tovarovedcheskaja/page.tsx b/src/app/ekspertiza/tovarovedcheskaja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ekspertiza/tovarovedcheskaja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ekspertiza/trasologicheskaja/page.tsx b/src/app/ekspertiza/trasologicheskaja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ekspertiza/trasologicheskaja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ekspertiza/zemle-ustroitelnaja/page.tsx b/src/app/ekspertiza/zemle-ustroitelnaja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ekspertiza/zemle-ustroitelnaja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/experts/page.tsx b/src/app/experts/page.tsx new file mode 100644 index 0000000..799ac91 --- /dev/null +++ b/src/app/experts/page.tsx @@ -0,0 +1,3 @@ +export default function ExpertsPage() { + return
Experts
; +} diff --git a/src/app/jurist/bankrotstvo-fizicheskih-lic/page.tsx b/src/app/jurist/bankrotstvo-fizicheskih-lic/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/jurist/bankrotstvo-fizicheskih-lic/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/jurist/page.tsx b/src/app/jurist/page.tsx new file mode 100644 index 0000000..73d7ead --- /dev/null +++ b/src/app/jurist/page.tsx @@ -0,0 +1,3 @@ +export default function JuristPage() { + return
Jurist
; +} diff --git a/src/app/jurist/pomoshh-dolzhnikam/page.tsx b/src/app/jurist/pomoshh-dolzhnikam/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/jurist/pomoshh-dolzhnikam/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/jurist/predstavitelstvo-v-sude/page.tsx b/src/app/jurist/predstavitelstvo-v-sude/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/jurist/predstavitelstvo-v-sude/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/jurist/semejnye-i-nasledstvennye-spory/page.tsx b/src/app/jurist/semejnye-i-nasledstvennye-spory/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/jurist/semejnye-i-nasledstvennye-spory/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/jurist/soprovozhdenie-sdelok-sostavlenie-dogovorov-konsultaciya/page.tsx b/src/app/jurist/soprovozhdenie-sdelok-sostavlenie-dogovorov-konsultaciya/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/jurist/soprovozhdenie-sdelok-sostavlenie-dogovorov-konsultaciya/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/jurist/spory-po-dtp/page.tsx b/src/app/jurist/spory-po-dtp/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/jurist/spory-po-dtp/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/jurist/strahovye-spory/page.tsx b/src/app/jurist/strahovye-spory/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/jurist/strahovye-spory/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/jurist/trudovye-spory/page.tsx b/src/app/jurist/trudovye-spory/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/jurist/trudovye-spory/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/jurist/vozvrat-strahovki-i-komissij-bankov/page.tsx b/src/app/jurist/vozvrat-strahovki-i-komissij-bankov/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/jurist/vozvrat-strahovki-i-komissij-bankov/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/jurist/vzyskanie-dolgov-s-juridicheskih-lic/page.tsx b/src/app/jurist/vzyskanie-dolgov-s-juridicheskih-lic/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/jurist/vzyskanie-dolgov-s-juridicheskih-lic/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/jurist/zemelnye-i-imushhestvennye-spory/page.tsx b/src/app/jurist/zemelnye-i-imushhestvennye-spory/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/jurist/zemelnye-i-imushhestvennye-spory/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/avtomobilja-dlja-suda/page.tsx b/src/app/ocenka/avtomobilja-dlja-suda/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/avtomobilja-dlja-suda/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/cennyh-bumag/page.tsx b/src/app/ocenka/cennyh-bumag/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/cennyh-bumag/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/dlja-banka-vtb/page.tsx b/src/app/ocenka/dlja-banka-vtb/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/dlja-banka-vtb/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/dlja-banka/page.tsx b/src/app/ocenka/dlja-banka/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/dlja-banka/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/dlja-ipoteki/page.tsx b/src/app/ocenka/dlja-ipoteki/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/dlja-ipoteki/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/dlja-notariusa/page.tsx b/src/app/ocenka/dlja-notariusa/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/dlja-notariusa/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/dlja-opeki/page.tsx b/src/app/ocenka/dlja-opeki/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/dlja-opeki/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/dlja-opredelenija-stoimosti-ushherba/page.tsx b/src/app/ocenka/dlja-opredelenija-stoimosti-ushherba/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/dlja-opredelenija-stoimosti-ushherba/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/dlja-sberbanka/page.tsx b/src/app/ocenka/dlja-sberbanka/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/dlja-sberbanka/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/dlja-strahovanija/page.tsx b/src/app/ocenka/dlja-strahovanija/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/dlja-strahovanija/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/garazha/page.tsx b/src/app/ocenka/garazha/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/garazha/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/imushhestva-dlja-bankrotstva/page.tsx b/src/app/ocenka/imushhestva-dlja-bankrotstva/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/imushhestva-dlja-bankrotstva/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/imushhestva-dlja-vnesenija-v-ustavnoj-kapital/page.tsx b/src/app/ocenka/imushhestva-dlja-vnesenija-v-ustavnoj-kapital/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/imushhestva-dlja-vnesenija-v-ustavnoj-kapital/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/imushhestva-dlja-vstuplenija-v-nasledstvo/page.tsx b/src/app/ocenka/imushhestva-dlja-vstuplenija-v-nasledstvo/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/imushhestva-dlja-vstuplenija-v-nasledstvo/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/jekspertiza-i-recenzirovanie-otcheta-ob-ocenke/page.tsx b/src/app/ocenka/jekspertiza-i-recenzirovanie-otcheta-ob-ocenke/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/jekspertiza-i-recenzirovanie-otcheta-ob-ocenke/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/kvartiry/page.tsx b/src/app/ocenka/kvartiry/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/kvartiry/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/mashin-i-oborudovanija/page.tsx b/src/app/ocenka/mashin-i-oborudovanija/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/mashin-i-oborudovanija/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/morskih-i-rechnyh-sudov/page.tsx b/src/app/ocenka/morskih-i-rechnyh-sudov/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/morskih-i-rechnyh-sudov/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/motociklov-i-mototehniki/page.tsx b/src/app/ocenka/motociklov-i-mototehniki/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/motociklov-i-mototehniki/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/nedvizhimosti-dlja-suda/page.tsx b/src/app/ocenka/nedvizhimosti-dlja-suda/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/nedvizhimosti-dlja-suda/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/nedvizhimosti/page.tsx b/src/app/ocenka/nedvizhimosti/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/nedvizhimosti/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/nematerialnyh-aktivov/page.tsx b/src/app/ocenka/nematerialnyh-aktivov/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/nematerialnyh-aktivov/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/nezavershennogo-stroitelstva/page.tsx b/src/app/ocenka/nezavershennogo-stroitelstva/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/nezavershennogo-stroitelstva/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/nezavisimaja/page.tsx b/src/app/ocenka/nezavisimaja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/nezavisimaja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/nezhilogo-pomeshhenija/page.tsx b/src/app/ocenka/nezhilogo-pomeshhenija/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/nezhilogo-pomeshhenija/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/ocenka-imushhestva-pri-razvode/page.tsx b/src/app/ocenka/ocenka-imushhestva-pri-razvode/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/ocenka-imushhestva-pri-razvode/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/ofisa/page.tsx b/src/app/ocenka/ofisa/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/ofisa/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/page.tsx b/src/app/ocenka/page.tsx new file mode 100644 index 0000000..30bf92f --- /dev/null +++ b/src/app/ocenka/page.tsx @@ -0,0 +1,3 @@ +export default function OcenkaPage() { + return
Ocenka
; +} diff --git a/src/app/ocenka/rynochnoj-stoimosti-avtomobilja/page.tsx b/src/app/ocenka/rynochnoj-stoimosti-avtomobilja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/rynochnoj-stoimosti-avtomobilja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/sooruzhenij/page.tsx b/src/app/ocenka/sooruzhenij/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/sooruzhenij/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/spectehniki/page.tsx b/src/app/ocenka/spectehniki/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/spectehniki/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/stoimosti-arendnoj-stavki/page.tsx b/src/app/ocenka/stoimosti-arendnoj-stavki/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/stoimosti-arendnoj-stavki/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/stoimosti-predprijatija-biznesa/page.tsx b/src/app/ocenka/stoimosti-predprijatija-biznesa/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/stoimosti-predprijatija-biznesa/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/ushherba-nedvizhimosti/page.tsx b/src/app/ocenka/ushherba-nedvizhimosti/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/ushherba-nedvizhimosti/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/ushherba-ot-pozhara/page.tsx b/src/app/ocenka/ushherba-ot-pozhara/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/ushherba-ot-pozhara/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/ushherba-ot-zaliva/page.tsx b/src/app/ocenka/ushherba-ot-zaliva/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/ushherba-ot-zaliva/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/ushherba-v-dtp/page.tsx b/src/app/ocenka/ushherba-v-dtp/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/ushherba-v-dtp/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/uts-utraty-tovarnoj-stoimosti-avtomobilja/page.tsx b/src/app/ocenka/uts-utraty-tovarnoj-stoimosti-avtomobilja/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/uts-utraty-tovarnoj-stoimosti-avtomobilja/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/vozdushnyh-sudov-i-letatelnyh-apparatov/page.tsx b/src/app/ocenka/vozdushnyh-sudov-i-letatelnyh-apparatov/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/vozdushnyh-sudov-i-letatelnyh-apparatov/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/zdanija/page.tsx b/src/app/ocenka/zdanija/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/zdanija/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/zemel/page.tsx b/src/app/ocenka/zemel/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/zemel/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/zemelnogo-uchastka/page.tsx b/src/app/ocenka/zemelnogo-uchastka/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/zemelnogo-uchastka/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} diff --git a/src/app/ocenka/zhilogo-doma/page.tsx b/src/app/ocenka/zhilogo-doma/page.tsx new file mode 100644 index 0000000..e63b7c0 --- /dev/null +++ b/src/app/ocenka/zhilogo-doma/page.tsx @@ -0,0 +1,3 @@ +export default function Page() { + return
Page
; +} -- 2.49.1 From cbd1f97ebaa844ed85f838082a7b67de26b7123c Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Mon, 23 Jun 2025 16:29:58 +0300 Subject: [PATCH 06/65] fix: add header, footer components --- src/widgets/footer/styles.module.scss | 3 +++ src/widgets/footer/ui.tsx | 5 +++++ src/widgets/header/styles.module.scss | 2 ++ src/widgets/header/ui.tsx | 5 +++++ 4 files changed, 15 insertions(+) create mode 100644 src/widgets/footer/styles.module.scss create mode 100644 src/widgets/footer/ui.tsx create mode 100644 src/widgets/header/styles.module.scss create mode 100644 src/widgets/header/ui.tsx diff --git a/src/widgets/footer/styles.module.scss b/src/widgets/footer/styles.module.scss new file mode 100644 index 0000000..cb80c9b --- /dev/null +++ b/src/widgets/footer/styles.module.scss @@ -0,0 +1,3 @@ +.Footer { + +} \ No newline at end of file diff --git a/src/widgets/footer/ui.tsx b/src/widgets/footer/ui.tsx new file mode 100644 index 0000000..8a6cc39 --- /dev/null +++ b/src/widgets/footer/ui.tsx @@ -0,0 +1,5 @@ +import s from './styles.module.scss'; + +export default function Footer() { + return
footer
; +} diff --git a/src/widgets/header/styles.module.scss b/src/widgets/header/styles.module.scss new file mode 100644 index 0000000..5c8eb59 --- /dev/null +++ b/src/widgets/header/styles.module.scss @@ -0,0 +1,2 @@ +.Header { +} \ No newline at end of file diff --git a/src/widgets/header/ui.tsx b/src/widgets/header/ui.tsx new file mode 100644 index 0000000..181455f --- /dev/null +++ b/src/widgets/header/ui.tsx @@ -0,0 +1,5 @@ +import s from './styles.module.scss'; + +export default function Header() { + return
header
; +} -- 2.49.1 From 5c05f9c2bbef433ae6f3e9599a5f4f9149d8d3f5 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Thu, 26 Jun 2025 16:12:20 +0300 Subject: [PATCH 07/65] feat: header menus --- package-lock.json | 37 +++ package.json | 1 + public/images/dtr-logo-eagle.png | Bin 0 -> 16143 bytes public/{ => svg}/next.svg | 0 src/app/layout.tsx | 12 +- src/app/page.tsx | 10 +- src/core/styles/variables.scss | 8 +- src/entities/base-menu/index.ts | 1 + src/entities/base-menu/styles.module.scss | 106 ++++++++ src/entities/base-menu/ui.tsx | 135 +++++++++++ src/entities/index.ts | 2 + src/entities/top-menu/index.ts | 1 + src/entities/top-menu/styles.module.scss | 49 ++++ src/entities/top-menu/ui.tsx | 35 +++ src/shared/ui/icon/index.ts | 1 + src/shared/ui/icon/styles.module.scss | 0 src/shared/ui/icon/ui.tsx | 106 ++++++++ src/views/home/index.ts | 1 + src/views/home/styles.module.scss | 15 ++ src/views/home/ui.tsx | 279 ++++++++++++++++++++++ src/views/index.ts | 1 + 21 files changed, 792 insertions(+), 8 deletions(-) create mode 100644 public/images/dtr-logo-eagle.png rename public/{ => svg}/next.svg (100%) create mode 100644 src/entities/base-menu/index.ts create mode 100644 src/entities/base-menu/styles.module.scss create mode 100644 src/entities/base-menu/ui.tsx create mode 100644 src/entities/index.ts create mode 100644 src/entities/top-menu/index.ts create mode 100644 src/entities/top-menu/styles.module.scss create mode 100644 src/entities/top-menu/ui.tsx create mode 100644 src/shared/ui/icon/index.ts create mode 100644 src/shared/ui/icon/styles.module.scss create mode 100644 src/shared/ui/icon/ui.tsx create mode 100644 src/views/home/index.ts create mode 100644 src/views/home/styles.module.scss create mode 100644 src/views/home/ui.tsx create mode 100644 src/views/index.ts diff --git a/package-lock.json b/package-lock.json index 808c1b5..07f5d04 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ }, "devDependencies": { "@eslint/eslintrc": "^3", + "@iconify-icon/react": "^3.0.0", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", @@ -281,6 +282,29 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@iconify-icon/react": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@iconify-icon/react/-/react-3.0.0.tgz", + "integrity": "sha512-TOyzGUIfOFbmRQflMbf8k8bBGbeVAVCnvJ/rKz2SgBOV6VZLv7E9gzLvkPzfkZ2HZL+GbRtLNX/GJq2EI54OFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconify-icon": "^3.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/cyberalien" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "dev": true, + "license": "MIT" + }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.34.2", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", @@ -3444,6 +3468,19 @@ "url": "https://github.com/sponsors/typicode" } }, + "node_modules/iconify-icon": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/iconify-icon/-/iconify-icon-3.0.0.tgz", + "integrity": "sha512-yPcnpkn8HUEUckrxxJBOer3jbGv3bqozHsLMLBRxhk3As1X76BgV2mS2a1HTNOIagR8nUs30H3qAd9GLe8Mnlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@iconify/types": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/cyberalien" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", diff --git a/package.json b/package.json index bdb7904..d449e5a 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ }, "devDependencies": { "@eslint/eslintrc": "^3", + "@iconify-icon/react": "^3.0.0", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", diff --git a/public/images/dtr-logo-eagle.png b/public/images/dtr-logo-eagle.png new file mode 100644 index 0000000000000000000000000000000000000000..68ca859b81863e504dad59536e8b012e33be9620 GIT binary patch literal 16143 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 hf2Uz_sM{Y9&FS0ktw@IS;az(N23 literal 0 HcmV?d00001 diff --git a/public/next.svg b/public/svg/next.svg similarity index 100% rename from public/next.svg rename to public/svg/next.svg diff --git a/src/app/layout.tsx b/src/app/layout.tsx index ab5d140..82989fa 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,6 +1,6 @@ import type { Metadata } from 'next'; import { ReactNode } from 'react'; -import { Roboto } from 'next/font/google'; +import { Montserrat, Roboto } from 'next/font/google'; import '@core/styles/globals.scss'; import '@core/styles/reset.scss'; @@ -10,6 +10,12 @@ const roboto = Roboto({ variable: '--font-roboto', }); +const montseratt = Montserrat({ + subsets: ['cyrillic'], + weight: ['300', '400', '500', '600', '700'], + variable: '--font-montseratt', +}); + export const metadata: Metadata = { title: 'Независимая оценка и судебная экспертиза | Компания ДИТРАСО', description: @@ -21,7 +27,9 @@ export default function RootLayout({ }: Readonly<{ children: ReactNode }>) { return ( - {children} + + {children} + ); } diff --git a/src/app/page.tsx b/src/app/page.tsx index 8e52ae9..5f51e64 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,3 +1,9 @@ -export default function Home() { - return
Main
; +import { Home } from '@/views'; + +export default function HomePage() { + return ( +
+ +
+ ); } diff --git a/src/core/styles/variables.scss b/src/core/styles/variables.scss index a08b916..123cb88 100644 --- a/src/core/styles/variables.scss +++ b/src/core/styles/variables.scss @@ -5,7 +5,8 @@ $laptop: 1024px; $desktop: 1440px; //fonts -$font-open-sans: var(--font-roboto), sans-serif; +$font-roboto: var(--font-roboto), sans-serif; +$font-montseratt: var(--font-montseratt), sans-serif; $base-font-size: 16px; @@ -18,13 +19,12 @@ $font-bold: 700; // colors $color-white: #FFFFFF; $color-black: #000000; -$color-orange: #E96526; -$color-orange-hover: #ea4b05; $color-lightgray: #E4E1E1; $color-darkgray: #999999; $color-text: #333333; $color-text-light: #222222; -$color-mark: #E96526; +$color-link: #333333; +$color-link-hover: #009283; $color-error: #ff0000; $color-error-light: #ff9191; $color-gray-border: #555555; \ No newline at end of file diff --git a/src/entities/base-menu/index.ts b/src/entities/base-menu/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/entities/base-menu/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/entities/base-menu/styles.module.scss b/src/entities/base-menu/styles.module.scss new file mode 100644 index 0000000..e05306e --- /dev/null +++ b/src/entities/base-menu/styles.module.scss @@ -0,0 +1,106 @@ +.ContainerNavbar { + box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.5); +} + +.Navbar { + margin: 0 auto; + width: rem(1540px); + height: 100px; + display: flex; + flex-direction: row; + align-items: center; + gap: 20px; + + + .Nav { + margin-left: auto; + + .Menu { + display: flex; + flex-direction: row; + align-items: center; + gap: rem(24px); + } + + .Parent { + display: block; + position: relative; + float: left; + line-height: 40px; + //background-color: #ffc72c; + //border-right: #CCC 1px solid; + } + + .Parent a { + //margin: 10px 24px; + //color: #5d3200; + text-decoration: none; + } + + .Parent:hover > ul { + display: block; + position: absolute; + box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, 0.5); + } + + .Child { + display: none; + } + + .Child li { + background-color: #FFFFFF; + line-height: 40px; + padding: 0 10px; + width: 100%; + } + + .Child li a { + color: $color-text; + } + + ul { + list-style: none; + margin: 0; + padding: 0px; + min-width: 12em; + font-family: $font-montseratt; + font-weight: $font-medium; + font-size: rem(16px); + line-height: 100%; + color: $color-text; + } + + ul ul ul { + left: 100%; + top: 0; + margin-left: 1px; + } + + li:hover { + color: $color-link-hover; + } + + .Parent li:hover { + background-color: $color-link-hover; //#F0F0F0 + color: $color-white; + + & > a { + color: $color-white; + } + + & > .Expand { + color: $color-white; + } + } + + .Expand { + font-size: 16px; + float: right; + margin-left: 8px; + color: $color-text + } + } + + .Invite { + } +} \ No newline at end of file diff --git a/src/entities/base-menu/ui.tsx b/src/entities/base-menu/ui.tsx new file mode 100644 index 0000000..8ac689d --- /dev/null +++ b/src/entities/base-menu/ui.tsx @@ -0,0 +1,135 @@ +import s from './styles.module.scss'; +import Image from 'next/image'; +import dtrLogo from '@public/images/dtr-logo-eagle.png'; + +function BaseMenu() { + return ( +
+
+ {'ДиТрасо'} + +
+ +
+
+
+ ); +} + +export { BaseMenu }; + +const Menu = [ + { + menuItem: { + name: 'Home', + link: '/home', + }, + }, + { + menuItem: { + name: 'Link1', + children: [ + { + menuItem: { + name: 'link1-1', + link: '/home', + }, + }, + { + menuItem: { + name: 'link1-2', + link: '/home', + }, + }, + { + menuItem: { + name: 'link1-3', + link: '/home', + }, + }, + ], + }, + }, + { + menuItem: { + name: 'Link2', + children: [ + { + menuItem: { + name: 'link2-1', + link: '/home', + }, + }, + { + menuItem: { + name: 'link2-2', + children: [ + { + menuItem: { + name: 'link2-1', + link: '/home', + }, + }, + { + menuItem: { + name: 'link2-2', + link: '/home', + }, + }, + { + menuItem: { + name: 'link2-3', + link: '/home', + }, + }, + ], + }, + }, + { + menuItem: { + name: 'link2-3', + link: '/home', + }, + }, + ], + }, + }, +]; diff --git a/src/entities/index.ts b/src/entities/index.ts new file mode 100644 index 0000000..181c0b2 --- /dev/null +++ b/src/entities/index.ts @@ -0,0 +1,2 @@ +export { TopMenu } from './top-menu'; +export { BaseMenu } from './base-menu'; diff --git a/src/entities/top-menu/index.ts b/src/entities/top-menu/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/entities/top-menu/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/entities/top-menu/styles.module.scss b/src/entities/top-menu/styles.module.scss new file mode 100644 index 0000000..4065af5 --- /dev/null +++ b/src/entities/top-menu/styles.module.scss @@ -0,0 +1,49 @@ +.Container { + background: #007c6f; + padding: rem(8px) 0; +} + +.Top { + margin: 0 auto; + width: rem(1540px); + display: flex; + justify-content: space-between; + + .Icons { + display: flex; + flex-direction: row; + align-items: center; + gap: rem(20px); + + .Icon { + cursor: pointer; + } + } + + .Contacts { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + gap: rem(60px); + + .Item { + font-family: $font-roboto; + font-weight: $font-bold; + font-size: rem(16px); + line-height: 100%; + color: $color-white; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + gap: rem(8px); + + .IconBox { + padding: rem(4px); + border-radius: 50%; + background: $color-white; + } + } + } +} \ No newline at end of file diff --git a/src/entities/top-menu/ui.tsx b/src/entities/top-menu/ui.tsx new file mode 100644 index 0000000..b81023f --- /dev/null +++ b/src/entities/top-menu/ui.tsx @@ -0,0 +1,35 @@ +import s from './styles.module.scss'; +import { + CiPhoneIcon, + EnvelopeIcon, + MapIcon, + TgIcon, + WaIcon, +} from '@shared/ui/icon'; + +function TopMenu() { + return ( +
+
+
+ + + +
+
+

+ + spo-71@yandex.ru +

+ +

+ + г. Сочи, Навагинская д. 9д, оф. 35 +

+
+
+
+ ); +} + +export { TopMenu }; diff --git a/src/shared/ui/icon/index.ts b/src/shared/ui/icon/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/shared/ui/icon/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/shared/ui/icon/styles.module.scss b/src/shared/ui/icon/styles.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ui/icon/ui.tsx b/src/shared/ui/icon/ui.tsx new file mode 100644 index 0000000..1cd4e89 --- /dev/null +++ b/src/shared/ui/icon/ui.tsx @@ -0,0 +1,106 @@ +/** Based on https://iconify.design/ + * + */ +import type { SVGProps } from 'react'; + +type SVGIcon = SVGProps; + +//RiMapPinLine +function MapIcon(props: SVGIcon) { + return ( + + + + ); +} + +//MynauiEnvelope +function EnvelopeIcon(props: SVGIcon) { + return ( + + + + ); +} + +//IcBaselineWhatsapp +function WaIcon(props: SVGIcon) { + return ( + + + + ); +} + +//IcBaselineTelegram +function TgIcon(props: SVGIcon) { + return ( + + + + ); +} + +// CiPhone +function CiPhoneIcon(props: SVGIcon) { + return ( + + + + ); +} + +export { MapIcon, EnvelopeIcon, WaIcon, TgIcon, CiPhoneIcon }; diff --git a/src/views/home/index.ts b/src/views/home/index.ts new file mode 100644 index 0000000..e23ecc4 --- /dev/null +++ b/src/views/home/index.ts @@ -0,0 +1 @@ +export { default as Home } from './ui'; diff --git a/src/views/home/styles.module.scss b/src/views/home/styles.module.scss new file mode 100644 index 0000000..b758439 --- /dev/null +++ b/src/views/home/styles.module.scss @@ -0,0 +1,15 @@ +.Header { + display: flex; + flex-direction: column; +} + +.Container { + margin: 0 auto; + width: rem(1540px); + padding: 40px 0; +} + +.Footer { + margin: 0 auto; + width: rem(1540px); +} \ No newline at end of file diff --git a/src/views/home/ui.tsx b/src/views/home/ui.tsx new file mode 100644 index 0000000..6bd8516 --- /dev/null +++ b/src/views/home/ui.tsx @@ -0,0 +1,279 @@ +import s from './styles.module.scss'; +import { BaseMenu, TopMenu } from '@/entities'; + +export default function Main() { + return ( +
+
+ + +
+ +
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Asperiores + cupiditate delectus dicta dignissimos eius esse est eum harum minus + omnis perspiciatis quaerat, quasi quia, quod ratione tempora vel velit + voluptates. +
+
+ Accusamus aliquam cumque dignissimos quasi repudiandae suscipit + veniam! Accusamus atque commodi distinctio dolorum esse exercitationem + explicabo, facilis in mollitia neque nostrum officia praesentium quod + ratione, repudiandae, tempora totam ut vel? +
+
+ Atque corporis dignissimos dolorem enim et eum fuga fugiat fugit + inventore iure iusto minima, nesciunt odio sed soluta vel voluptates. + A accusamus dolor earum excepturi odit quaerat repudiandae sed + tempore! +
+
+ Commodi cumque ducimus incidunt, nam numquam quo tempora voluptas? + Debitis iure, vero. Aperiam atque beatae delectus dolores enim facilis + fuga, ipsam laborum minus, molestiae obcaecati odio pariatur quis + reiciendis voluptate? +
+
+ Adipisci aspernatur consequatur cum distinctio ea error ex explicabo + fuga harum hic itaque molestiae nesciunt, omnis placeat reprehenderit + rerum sed temporibus vel! Doloribus facilis id labore quia quisquam + sequi voluptate. +
+
+ Adipisci atque dolorem ducimus enim facere fugit incidunt ipsam ipsum + laudantium magni minima mollitia neque nesciunt nostrum odio officia + perferendis quam, qui quia quisquam similique sunt temporibus vel + veritatis vitae? +
+
+ Culpa fuga incidunt magni nemo porro quas quia quod sunt voluptas + voluptate. Blanditiis ducimus eos eum facere fuga hic laborum minus, + mollitia necessitatibus officiis perspiciatis recusandae, rerum saepe, + temporibus ut? +
+
+ Consequatur ducimus eius, illo ipsa laborum magnam nesciunt numquam + officia porro provident quasi reprehenderit sapiente sed temporibus + unde vel veniam voluptatem. Amet commodi illum minus optio praesentium + quis repellat, repudiandae. +
+
+ A ad aperiam architecto aut autem consequuntur cumque dolor ducimus ea + eligendi ipsa iste laudantium magni maxime minima nostrum officia + pariatur quae quasi quia quo, reiciendis repudiandae, saepe ullam + voluptatum! +
+
+ Aperiam, aut commodi corporis dignissimos, eaque enim eos harum ipsa + optio quia quos reiciendis, repellat. Architecto dolores error minus + nihil non numquam, omnis optio porro tempora! Error eveniet nisi quod? +
+
+ Ab ad adipisci alias amet consequatur delectus deserunt dignissimos + distinctio dolor eius id ipsa, laboriosam libero nam natus non numquam + quidem quis quod rem saepe, tempora tenetur unde vel velit? +
+
+ Aliquam at consectetur culpa debitis doloribus ducimus eligendi + eveniet facere fugiat ipsam itaque, laudantium maiores maxime + molestiae molestias mollitia necessitatibus nisi numquam obcaecati + quaerat quidem quis recusandae rerum, vel voluptas? +
+
+ Ab ad alias aliquam, amet corporis cumque doloribus ducimus ea error + et excepturi exercitationem, explicabo impedit iste iure laudantium + necessitatibus optio pariatur quia quidem ratione, rem similique sint + totam voluptatem? +
+
+ Eius ipsa nihil odio perspiciatis sed sequi tempora, ullam? + Consequuntur enim ex illo laborum nam, repellat tempore totam ut + voluptatibus! Ad assumenda blanditiis distinctio dolorem, ex illum + iusto magnam tempore. +
+
+ Aspernatur consequatur delectus deleniti est fugit laborum minima nisi + quos suscipit vero. Accusantium ex illum maxime numquam obcaecati + perspiciatis, quod reiciendis temporibus vitae. Eos laboriosam nostrum + odit quidem reiciendis vitae. +
+
+ Animi at libero minima necessitatibus obcaecati, officia perferendis + quo! Ab ad dolorum excepturi laborum libero, officia quibusdam + sapiente! Accusamus adipisci consectetur cumque debitis dolore id + impedit nesciunt nisi omnis voluptas. +
+
+ Accusantium animi debitis ducimus, iste molestias quos rem. + Consectetur dicta, doloremque error eveniet excepturi fugit in, + incidunt natus nulla omnis, quia quidem quisquam sint soluta + voluptatibus. Eveniet maxime quae recusandae. +
+
+ Ad aliquam architecto distinctio eius eos maxime minima optio porro + quis voluptatem. Accusantium atque debitis eligendi esse hic ipsam + ipsum, nihil officia perspiciatis quasi rerum soluta, tempora vel + voluptas voluptatibus. +
+
+ Aperiam dolor exercitationem expedita illum labore modi molestias + repudiandae saepe velit voluptas. Accusamus consequuntur, dignissimos + eius eligendi fuga harum illo illum nam, nulla, odit officia quaerat + quis reiciendis sit tempore! +
+
+ A aliquam asperiores consequatur cum dignissimos distinctio dolorem + eius eos eum excepturi expedita impedit laborum molestiae mollitia, + natus quam quidem quis quo reprehenderit similique tempore unde + veritatis voluptatem, voluptatibus voluptatum? +
+
+ Accusamus adipisci assumenda beatae consequatur, eum exercitationem + explicabo maxime obcaecati officiis porro quae qui ratione sapiente + sequi suscipit velit veritatis? Harum molestiae quis quod? Et harum + neque quam reprehenderit voluptates! +
+
+ Aspernatur deleniti distinctio, illum, inventore iure labore maiores + nemo quod sapiente sit voluptas, voluptatem! Minus nobis perspiciatis + rem velit. Delectus, dolores natus? Eos laborum laudantium molestiae, + nobis perferendis unde. Animi. +
+
+ Dolores magni nulla quasi? Accusamus aliquam animi aperiam corporis + distinctio eligendi explicabo illo ipsum laboriosam laborum maiores + molestias obcaecati optio provident, quae, quaerat quas quisquam rerum + saepe voluptatum? Asperiores, unde. +
+
+ Dignissimos distinctio dolore, ea error fugiat ipsum modi pariatur + praesentium quia velit. Aliquam aut consequuntur corporis, debitis + esse hic iste laboriosam magni mollitia natus non obcaecati placeat + quia recusandae veniam? +
+
+ Accusantium aliquam corporis debitis distinctio dolore dolorem earum + eligendi fugiat harum impedit ipsam, libero magni minus molestias nisi + odit officiis possimus quae, quaerat quia quibusdam sit sunt totam ut + vel? +
+
+ Animi assumenda dicta dignissimos itaque, nesciunt quo. Aliquam + asperiores aspernatur delectus deleniti dolorem, dolorum eaque ex + exercitationem expedita fugit id, iusto mollitia nesciunt officia quam + suscipit temporibus ullam ut voluptates. +
+
+ Ad, at consequuntur dicta dolor, eius ex excepturi, fugit ipsum nisi + nostrum numquam qui reprehenderit sint suscipit tempora unde + voluptatibus. Dicta doloremque eaque est in nemo perspiciatis quae + quisquam, similique? +
+
+ Accusantium culpa eaque eius id incidunt ipsam ipsum, laboriosam + nesciunt recusandae, repellendus temporibus vel voluptates voluptatum. + Aliquid consectetur dolores in praesentium voluptate? Accusamus + consequuntur delectus facilis fuga nulla saepe veritatis? +
+
+ A aliquid animi commodi dolor est in, iure magnam molestias nesciunt + numquam quam, repellat sunt, veniam! Consectetur facere neque nulla + quos saepe! Dicta eum impedit molestias officiis temporibus tenetur + vitae? +
+
+ Animi dignissimos fugiat nihil odit perspiciatis soluta! Commodi + consectetur cupiditate iusto, possimus veritatis voluptas voluptatem. + Adipisci, alias consequuntur cum impedit itaque, minima modi natus + nulla quaerat quam quidem sed unde! +
+
+ Accusantium ad aliquid animi aspernatur corporis cumque cupiditate + delectus dolore ea expedita id iste, iure laudantium maiores modi odio + quae quas quis quod quos recusandae rerum sunt totam veniam + voluptatibus? +
+
+ Aperiam, aspernatur cum dolorum error exercitationem fuga id + necessitatibus nisi quo rem repudiandae soluta veniam? A architecto + commodi consequuntur culpa deserunt ducimus est et fugit, iusto nihil + odio quo rem? +
+
+ Alias distinctio dolorem ducimus eaque, eligendi error eveniet harum + iste iure modi mollitia odit perspiciatis praesentium quaerat quam + quidem rem repudiandae rerum sed sequi sit soluta ut veniam veritatis + voluptate. +
+
+ Cumque debitis eaque, error fugiat hic molestias placeat unde? + Accusamus, ad, amet architecto at beatae culpa deleniti expedita + labore magni maiores maxime odio quos repudiandae soluta voluptate? + Esse, nisi, provident. +
+
+ A aperiam autem eius error expedita id incidunt ipsum molestias nulla + porro reprehenderit, velit, vero voluptatem voluptatibus voluptatum! + Doloremque ducimus eum expedita molestias numquam porro quisquam + ratione repellendus tenetur voluptatibus. +
+
+ A accusamus architecto asperiores consectetur, consequuntur culpa cum + error est, explicabo illum impedit ipsum magnam, molestias nulla + obcaecati officiis pariatur possimus quia recusandae reprehenderit + tempora tempore ullam vitae voluptatem voluptatibus! +
+
+ A accusantium alias aliquam aut blanditiis consequatur cumque delectus + distinctio doloremque eligendi error et inventore ipsa ipsum iste + laborum neque odit qui quia, quo repudiandae saepe sit, totam vitae + voluptatem! +
+
+ Alias, aliquam animi aspernatur blanditiis consectetur consequatur + corporis cupiditate, dolorum error esse impedit laudantium magni + maiores natus non nulla odit perferendis quam, similique soluta + suscipit tenetur totam vel veniam voluptatem! +
+
+ Consequatur corporis cumque, dolore earum esse et fuga itaque laborum + magni maiores modi nihil odit officia officiis omnis praesentium, quae + quo quod ratione repellendus soluta suscipit, ullam! Accusamus, est, + reprehenderit! +
+
+ At consectetur debitis dolores, dolorum et expedita laboriosam minus + nemo nihil numquam perspiciatis quas quibusdam repellendus repudiandae + sint tenetur, voluptatibus. Alias dignissimos, labore laudantium nemo + numquam reprehenderit repudiandae similique vero? +
+
+ Architecto dignissimos enim et laboriosam quibusdam quisquam + reprehenderit rerum vel veniam voluptatum. Delectus facere modi + veritatis. A ad eaque eligendi enim fugiat harum maiores mollitia nisi + optio quibusdam sint, voluptate. +
+
+ Ab commodi iste laboriosam laudantium maiores maxime non odit placeat + quaerat quas reiciendis, sequi temporibus, totam vel veritatis! + Doloremque eveniet expedita, fuga quam quis recusandae veniam? + Exercitationem repellendus veniam voluptates? +
+
+ Animi aperiam asperiores autem delectus dignissimos illo impedit + ipsam, iusto natus numquam pariatur quae qui quis quisquam ratione + sequi sit suscipit ullam unde vel! Alias autem nemo odit quod + voluptate. +
+
+ Accusamus aspernatur consectetur culpa cum cumque cupiditate doloribus + ducimus explicabo hic, id ipsa laboriosam maiores, molestiae nobis + quasi quia quod rem tempora tempore, voluptatem. Alias atque labore + maiores quia reprehenderit. +
+
+
footer
+
+ ); +} diff --git a/src/views/index.ts b/src/views/index.ts new file mode 100644 index 0000000..e20557b --- /dev/null +++ b/src/views/index.ts @@ -0,0 +1 @@ +export * from './home'; -- 2.49.1 From cc492e5e64a6c25965274f4c158f2c962a603fb9 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Fri, 27 Jun 2025 10:04:57 +0300 Subject: [PATCH 08/65] fix: footer --- package.json | 1 - public/images/logo-dtr-white.png | Bin 0 -> 4517 bytes src/core/constants/route.ts | 12 ++ src/entities/top-menu/ui.tsx | 18 +-- src/shared/ui/icon/ui.tsx | 58 +++++++- src/views/home/ui.tsx | 160 +------------------- src/widgets/footer/index.ts | 1 + src/widgets/footer/styles.module.scss | 207 ++++++++++++++++++++++++++ src/widgets/footer/ui.tsx | 118 ++++++++++++++- src/widgets/header/index.ts | 1 + src/widgets/header/ui.tsx | 12 +- src/widgets/index.ts | 2 + 12 files changed, 410 insertions(+), 180 deletions(-) create mode 100644 public/images/logo-dtr-white.png create mode 100644 src/core/constants/route.ts create mode 100644 src/widgets/footer/index.ts create mode 100644 src/widgets/header/index.ts create mode 100644 src/widgets/index.ts diff --git a/package.json b/package.json index d449e5a..bdb7904 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,6 @@ }, "devDependencies": { "@eslint/eslintrc": "^3", - "@iconify-icon/react": "^3.0.0", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", diff --git a/public/images/logo-dtr-white.png b/public/images/logo-dtr-white.png new file mode 100644 index 0000000000000000000000000000000000000000..ed6a54eee01ba0845e9b6df2cb9d7e2555063ad6 GIT binary patch literal 4517 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
- - - + + +

- + spo-71@yandex.ru

- + г. Сочи, Навагинская д. 9д, оф. 35

diff --git a/src/shared/ui/icon/ui.tsx b/src/shared/ui/icon/ui.tsx index 1cd4e89..9d0afd4 100644 --- a/src/shared/ui/icon/ui.tsx +++ b/src/shared/ui/icon/ui.tsx @@ -6,7 +6,7 @@ import type { SVGProps } from 'react'; type SVGIcon = SVGProps; //RiMapPinLine -function MapIcon(props: SVGIcon) { +function Map(props: SVGIcon) { return ( + + + ); +} + +//MdiYoutube +function Youtube(props: SVGIcon) { + return ( + + + + ); +} + +const Icons = Object.assign( + {}, + { Map, Envelope, Whatsapp, Telegram, Phone, Vk, Youtube }, +); + +export { Icons }; diff --git a/src/views/home/ui.tsx b/src/views/home/ui.tsx index 6bd8516..b4f0fd9 100644 --- a/src/views/home/ui.tsx +++ b/src/views/home/ui.tsx @@ -1,14 +1,10 @@ import s from './styles.module.scss'; -import { BaseMenu, TopMenu } from '@/entities'; +import { Footer, Header } from '@/widgets'; export default function Main() { return (
-
- - -
- +
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Asperiores @@ -122,158 +118,8 @@ export default function Main() { eius eligendi fuga harum illo illum nam, nulla, odit officia quaerat quis reiciendis sit tempore!
-
- A aliquam asperiores consequatur cum dignissimos distinctio dolorem - eius eos eum excepturi expedita impedit laborum molestiae mollitia, - natus quam quidem quis quo reprehenderit similique tempore unde - veritatis voluptatem, voluptatibus voluptatum? -
-
- Accusamus adipisci assumenda beatae consequatur, eum exercitationem - explicabo maxime obcaecati officiis porro quae qui ratione sapiente - sequi suscipit velit veritatis? Harum molestiae quis quod? Et harum - neque quam reprehenderit voluptates! -
-
- Aspernatur deleniti distinctio, illum, inventore iure labore maiores - nemo quod sapiente sit voluptas, voluptatem! Minus nobis perspiciatis - rem velit. Delectus, dolores natus? Eos laborum laudantium molestiae, - nobis perferendis unde. Animi. -
-
- Dolores magni nulla quasi? Accusamus aliquam animi aperiam corporis - distinctio eligendi explicabo illo ipsum laboriosam laborum maiores - molestias obcaecati optio provident, quae, quaerat quas quisquam rerum - saepe voluptatum? Asperiores, unde. -
-
- Dignissimos distinctio dolore, ea error fugiat ipsum modi pariatur - praesentium quia velit. Aliquam aut consequuntur corporis, debitis - esse hic iste laboriosam magni mollitia natus non obcaecati placeat - quia recusandae veniam? -
-
- Accusantium aliquam corporis debitis distinctio dolore dolorem earum - eligendi fugiat harum impedit ipsam, libero magni minus molestias nisi - odit officiis possimus quae, quaerat quia quibusdam sit sunt totam ut - vel? -
-
- Animi assumenda dicta dignissimos itaque, nesciunt quo. Aliquam - asperiores aspernatur delectus deleniti dolorem, dolorum eaque ex - exercitationem expedita fugit id, iusto mollitia nesciunt officia quam - suscipit temporibus ullam ut voluptates. -
-
- Ad, at consequuntur dicta dolor, eius ex excepturi, fugit ipsum nisi - nostrum numquam qui reprehenderit sint suscipit tempora unde - voluptatibus. Dicta doloremque eaque est in nemo perspiciatis quae - quisquam, similique? -
-
- Accusantium culpa eaque eius id incidunt ipsam ipsum, laboriosam - nesciunt recusandae, repellendus temporibus vel voluptates voluptatum. - Aliquid consectetur dolores in praesentium voluptate? Accusamus - consequuntur delectus facilis fuga nulla saepe veritatis? -
-
- A aliquid animi commodi dolor est in, iure magnam molestias nesciunt - numquam quam, repellat sunt, veniam! Consectetur facere neque nulla - quos saepe! Dicta eum impedit molestias officiis temporibus tenetur - vitae? -
-
- Animi dignissimos fugiat nihil odit perspiciatis soluta! Commodi - consectetur cupiditate iusto, possimus veritatis voluptas voluptatem. - Adipisci, alias consequuntur cum impedit itaque, minima modi natus - nulla quaerat quam quidem sed unde! -
-
- Accusantium ad aliquid animi aspernatur corporis cumque cupiditate - delectus dolore ea expedita id iste, iure laudantium maiores modi odio - quae quas quis quod quos recusandae rerum sunt totam veniam - voluptatibus? -
-
- Aperiam, aspernatur cum dolorum error exercitationem fuga id - necessitatibus nisi quo rem repudiandae soluta veniam? A architecto - commodi consequuntur culpa deserunt ducimus est et fugit, iusto nihil - odio quo rem? -
-
- Alias distinctio dolorem ducimus eaque, eligendi error eveniet harum - iste iure modi mollitia odit perspiciatis praesentium quaerat quam - quidem rem repudiandae rerum sed sequi sit soluta ut veniam veritatis - voluptate. -
-
- Cumque debitis eaque, error fugiat hic molestias placeat unde? - Accusamus, ad, amet architecto at beatae culpa deleniti expedita - labore magni maiores maxime odio quos repudiandae soluta voluptate? - Esse, nisi, provident. -
-
- A aperiam autem eius error expedita id incidunt ipsum molestias nulla - porro reprehenderit, velit, vero voluptatem voluptatibus voluptatum! - Doloremque ducimus eum expedita molestias numquam porro quisquam - ratione repellendus tenetur voluptatibus. -
-
- A accusamus architecto asperiores consectetur, consequuntur culpa cum - error est, explicabo illum impedit ipsum magnam, molestias nulla - obcaecati officiis pariatur possimus quia recusandae reprehenderit - tempora tempore ullam vitae voluptatem voluptatibus! -
-
- A accusantium alias aliquam aut blanditiis consequatur cumque delectus - distinctio doloremque eligendi error et inventore ipsa ipsum iste - laborum neque odit qui quia, quo repudiandae saepe sit, totam vitae - voluptatem! -
-
- Alias, aliquam animi aspernatur blanditiis consectetur consequatur - corporis cupiditate, dolorum error esse impedit laudantium magni - maiores natus non nulla odit perferendis quam, similique soluta - suscipit tenetur totam vel veniam voluptatem! -
-
- Consequatur corporis cumque, dolore earum esse et fuga itaque laborum - magni maiores modi nihil odit officia officiis omnis praesentium, quae - quo quod ratione repellendus soluta suscipit, ullam! Accusamus, est, - reprehenderit! -
-
- At consectetur debitis dolores, dolorum et expedita laboriosam minus - nemo nihil numquam perspiciatis quas quibusdam repellendus repudiandae - sint tenetur, voluptatibus. Alias dignissimos, labore laudantium nemo - numquam reprehenderit repudiandae similique vero? -
-
- Architecto dignissimos enim et laboriosam quibusdam quisquam - reprehenderit rerum vel veniam voluptatum. Delectus facere modi - veritatis. A ad eaque eligendi enim fugiat harum maiores mollitia nisi - optio quibusdam sint, voluptate. -
-
- Ab commodi iste laboriosam laudantium maiores maxime non odit placeat - quaerat quas reiciendis, sequi temporibus, totam vel veritatis! - Doloremque eveniet expedita, fuga quam quis recusandae veniam? - Exercitationem repellendus veniam voluptates? -
-
- Animi aperiam asperiores autem delectus dignissimos illo impedit - ipsam, iusto natus numquam pariatur quae qui quis quisquam ratione - sequi sit suscipit ullam unde vel! Alias autem nemo odit quod - voluptate. -
-
- Accusamus aspernatur consectetur culpa cum cumque cupiditate doloribus - ducimus explicabo hic, id ipsa laboriosam maiores, molestiae nobis - quasi quia quod rem tempora tempore, voluptatem. Alias atque labore - maiores quia reprehenderit. -
-
footer
+
); } diff --git a/src/widgets/footer/index.ts b/src/widgets/footer/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/widgets/footer/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/widgets/footer/styles.module.scss b/src/widgets/footer/styles.module.scss index cb80c9b..7813517 100644 --- a/src/widgets/footer/styles.module.scss +++ b/src/widgets/footer/styles.module.scss @@ -1,3 +1,210 @@ .Footer { + display: flex; + flex-direction: column; +} +.Container { + &_green { + background: #007c6f; + } + + &_gray { + background: #3d3d3d; + } +} + +.Grid { + margin: 0 auto; + width: 1540px; + padding: 40px 0 0; + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + ///grid-template-rows: 1fr 1fr; + grid-auto-columns: 1fr; + gap: 0px 0px; + grid-auto-flow: row; + grid-template-areas: + "about linksa linksb linksc" + "contacts contacts social social"; + + .About { + grid-area: about; + + .Image { + margin-bottom: 20px; + } + + .Description { + font-family: $font-roboto; + font-weight: $font-regular; + font-size: 20px; + line-height: 160%; + color: $color-white; + } + } + + .LinksA { + grid-area: linksa; + padding: 10px; + + .Title { + @extend %title; + } + + .List { + @extend %list; + } + + .ListItem { + @extend %list-item; + } + } + + .LinksB { + grid-area: linksb; + padding: 10px; + + .Title { + @extend %title; + } + + .List { + @extend %list; + } + + .ListItem { + @extend %list-item; + } + } + + .LinksC { + grid-area: linksc; + padding: 10px; + + .Title { + @extend %title; + } + + .List { + @extend %list; + } + + .ListItem { + @extend %list-item; + } + } + + .Contacts { + grid-area: contacts; + + .Title { + @extend %title; + } + + .Icons { + display: flex; + flex-direction: row; + justify-content: center; + gap: 24px; + + .IconBox { + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; + + .Icon { + border-radius: 50%; + width: 48px; + height: 48px; + padding: 8px; + background: $color-white; + } + + .Text { + @extend %icon-desc; + } + } + } + } + + .Social { + grid-area: social; + padding-left: 200px; + + .Title { + @extend %title; + } + + .Row { + display: flex; + flex-direction: row; + align-items: center; + gap: 20px; + } + + .Icon { + + } + } +} + +.Bottom { + margin: 0 auto; + width: 1540px; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + padding: 16px 0; + + font-family: $font-roboto; + font-weight: $font-regular; + font-size: 16px; + line-height: 100%; + color: $color-white; + + & a { + text-decoration: none; + color: $color-link-hover; + margin: 0 8px; + + &:hover { + text-decoration: underline; + } + } +} + +%title { + font-family: $font-roboto; + font-weight: $font-regular; + font-size: 20px; + line-height: 100%; + color: $color-white; + margin-bottom: 20px; +} + +%list { + display: flex; + flex-direction: column; + gap: 10px; + list-style: disc; +} + +%list-item { + font-family: $font-roboto; + font-weight: $font-regular; + font-size: 16px; + line-height: 130%; + color: $color-white; + margin-left: 20px; +} + +%icon-desc { + font-family: $font-roboto; + font-weight: $font-regular; + font-size: 18px; + line-height: 100%; + color: $color-white; + margin-bottom: 20px; } \ No newline at end of file diff --git a/src/widgets/footer/ui.tsx b/src/widgets/footer/ui.tsx index 8a6cc39..96517e2 100644 --- a/src/widgets/footer/ui.tsx +++ b/src/widgets/footer/ui.tsx @@ -1,5 +1,119 @@ import s from './styles.module.scss'; +import Link from 'next/link'; +import Image from 'next/image'; +import { ROUTES, ROUTES_EXTERNAL } from '@core/constants/route'; +import dtrLogo from '@public/images/logo-dtr-white.png'; +import { Icons } from '@shared/ui/icon'; -export default function Footer() { - return
footer
; +function Footer() { + return ( +
+
+
+
+ ДиТрасо +

+ В соответствии с п.5.1 ст.18 №128-фз лицензия для оценочной + деятельности не требуется с 01.07.2006г. +

+
+
+

Оценка имущества

+
    +
  1. Оценка жилой недвижимости
  2. +
  3. Оценка коммерческой недвижимости
  4. +
  5. Оценка ущерба недвижимости
  6. +
  7. Оценка сооружений
  8. +
  9. Оценка машин и оборудования
  10. +
  11. + Оценка стоимости предприятия (бизнеса) +
  12. +
+
+
+

Экспертиза

+
    +
  1. Автотехническая экспертиза
  2. +
  3. Товароведческая экспертиза
  4. +
  5. Трасологическая экспертиза
  6. +
  7. Кадастровая экспертиза
  8. +
  9. Строительно-техническая экспертиза
  10. +
  11. Оценочная экспертиза
  12. +
+
+
+

Юриспруденция

+
    +
  1. Семейные и наследственные споры
  2. +
  3. Земельные и имущественные споры
  4. +
  5. Взыскание долгов с юридических лиц
  6. +
  7. Страховые споры
  8. +
  9. + Сопровождение сделок и составление договоров +
  10. +
  11. Представительство в суде
  12. +
+
+
+

Контакты и адреса

+ +
+
+

Социальные сети:

+ +
+
+
+ +
+
+ © ООО “ДИ ТРАСО” | + Политика конфиденциальности | + Карта сайта +
+
+
+ ); } + +export { Footer }; diff --git a/src/widgets/header/index.ts b/src/widgets/header/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/widgets/header/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/widgets/header/ui.tsx b/src/widgets/header/ui.tsx index 181455f..1ad3b2b 100644 --- a/src/widgets/header/ui.tsx +++ b/src/widgets/header/ui.tsx @@ -1,5 +1,13 @@ import s from './styles.module.scss'; +import { BaseMenu, TopMenu } from '@/entities'; -export default function Header() { - return
header
; +function Header() { + return ( +
+ + +
+ ); } + +export { Header }; diff --git a/src/widgets/index.ts b/src/widgets/index.ts new file mode 100644 index 0000000..f4c09fc --- /dev/null +++ b/src/widgets/index.ts @@ -0,0 +1,2 @@ +export * from './header'; +export * from './footer'; -- 2.49.1 From 3a8f31515a5804231196e59052df9cee3deafd03 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Fri, 27 Jun 2025 12:30:22 +0300 Subject: [PATCH 09/65] fix: add route, menu constants --- src/core/constants/menu.ts | 406 ++++++++++++++++++++++++++++++++++++ src/core/constants/route.ts | 95 ++++++++- 2 files changed, 496 insertions(+), 5 deletions(-) create mode 100644 src/core/constants/menu.ts diff --git a/src/core/constants/menu.ts b/src/core/constants/menu.ts new file mode 100644 index 0000000..8ee257f --- /dev/null +++ b/src/core/constants/menu.ts @@ -0,0 +1,406 @@ +import { ROUTES } from '@core/constants/route'; + +export const Menu = [ + { + menuItem: { + name: 'Экспертиза', + children: [ + { + menuItem: { + name: 'Автотехническая', + link: ROUTES.EXPERTIZA_AUTOTECH, + }, + }, + { + menuItem: { + name: 'Трасологическая', + link: ROUTES.EXPERTIZA_TRASOLOGIA, + }, + }, + { + menuItem: { + name: 'Пожарно-техническая', + link: ROUTES.EXPERTIZA_POZHAR, + }, + }, + { + menuItem: { + name: 'Товароведческая', + link: ROUTES.EXPERTIZA_TOVAR, + }, + }, + { + menuItem: { + name: 'Рецензирование и проверка экспертизы', + link: ROUTES.EXPERTIZA_RECENZII, + }, + }, + { + menuItem: { + name: 'Документарная', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, + }, + { + menuItem: { + name: 'Бухгалтерская', + link: ROUTES.EXPERTIZA_BUHGALTER, + }, + }, + { + menuItem: { + name: 'Финансово-экономическая', + link: ROUTES.EXPERTIZA_FINANS, + }, + }, + { + menuItem: { + name: 'Земле-устроительная', + link: ROUTES.EXPERTIZA_ZEM_STROY, + }, + }, + { + menuItem: { + name: 'Кадастровая', + link: ROUTES.EXPERTIZA_KADASTR, + }, + }, + { + menuItem: { + name: 'Строительно-техническая', + link: ROUTES.EXPERTIZA_STROIT, + }, + }, + { + menuItem: { + name: 'Компьютерно-техническая', + link: ROUTES.EXPERTIZA_COPMPUTER, + }, + }, + { + menuItem: { + name: 'Почерковедческая', + link: ROUTES.EXPERTIZA_POCHERK, + }, + }, + { + menuItem: { + name: 'Технико-криминалистическая', + link: ROUTES.EXPERTIZA_TECH_CRIM, + }, + }, + ], + }, + }, + { + menuItem: { + name: 'Оценка', + children: [ + { + menuItem: { + name: 'По ситуации', + children: [ + { + menuItem: { + name: 'Независимая оценка', + link: ROUTES.OCENKA_NEZAVISIM, + }, + }, + { + menuItem: { + name: 'Оценка для опеки', + link: ROUTES.OCENKA_OPEKA, + }, + }, + { + menuItem: { + name: 'Оценка для нотариуса', + link: ROUTES.OCENKA_NOTARIUS, + }, + }, + { + menuItem: { + name: 'Оценка для вступления в наследство', + link: ROUTES.OCENKA_NASLEDSTVO, + }, + }, + { + menuItem: { + name: 'Оценка для страхования', + link: ROUTES.OCENKA_STRAHOVANIE, + }, + }, + { + menuItem: { + name: 'Оценка для определения стоимости ущерба', + link: ROUTES.OCENKA_USCHERB, + }, + }, + { + menuItem: { + name: 'Оценка имущества при разводе', + link: ROUTES.OCENKA_RAZVOD, + }, + }, + { + menuItem: { + name: 'Оценка недвижимости для суда', + link: ROUTES.OCENKA_SUD, + }, + }, + { + menuItem: { + name: 'Оценка для внесения в уставный капитал', + link: ROUTES.OCENKA_USTAV_KAPITAL, + }, + }, + { + menuItem: { + name: 'Оценка для ипотеки', + link: ROUTES.OCENKA_IPOTEKA, + }, + }, + { + menuItem: { + name: 'Оценка для банка', + link: ROUTES.OCENKA_BANK, + }, + }, + { + menuItem: { + name: 'Оценка имущества для банкротства', + link: ROUTES.OCENKA_BANKROTSTV, + }, + }, + ], + }, + }, + { + menuItem: { + name: 'Жилая недвижимость', + children: [ + { + menuItem: { + name: 'Оценка квартиры', + link: ROUTES.OCENKA_KVARTIRA, + }, + }, + { + menuItem: { + name: 'Оценка жилого дома', + link: ROUTES.OCENKA_DOM, + }, + }, + { + menuItem: { + name: 'Оценка земельного участка', + link: ROUTES.OCENKA_UCHASTOK, + }, + }, + { + menuItem: { + name: 'Оценка гаража', + link: ROUTES.OCENKA_GARAZH, + }, + }, + { + menuItem: { + name: 'Оценка ущерба недвижимости', + link: ROUTES.OCENKA_USCHERB_NEDVIGI, + }, + }, + { + menuItem: { + name: 'Оценка ущерба от залива', + link: ROUTES.OCENKA_ZATOPLENIE, + }, + }, + { + menuItem: { + name: 'Оценка ущерба от пожара', + link: ROUTES.OCENKA_POZHAR, + }, + }, + ], + }, + }, + { + menuItem: { + name: 'Коммерческая недвижимость', + children: [ + { + name: 'Оценка стоимости арендной ставки', + link: ROUTES.OCENKA_ARENDA, + }, + { + name: 'Оценка здания', + link: ROUTES.OCENKA_ZDANIE, + }, + { + name: 'Оценка земель', + link: ROUTES.OCENKA_ZEMLYA, + }, + { + name: 'Оценка нежилого помещения', + link: ROUTES.OCENKA_POMESCHENIE, + }, + { + name: 'Оценка офиса', + link: ROUTES.OCENKA_OFFICE, + }, + { + name: 'Оценка сооружений', + link: ROUTES.OCENKA_SOORUZHENIE, + }, + { + name: 'Оценка незавершенного строительства', + link: ROUTES.OCENKA_NEZAV_STROIT, + }, + ], + }, + }, + { + menuItem: { + name: 'Имущество', + children: [ + { + name: 'Оценка недвижимости', + link: ROUTES.OCENKA_NEDVIGA, + }, + { + name: 'Оценка машин и оборудования', + link: ROUTES.OCENKA_MASHINES, + }, + { + name: 'Оценка спецтехники', + link: ROUTES.OCENKA_SPECTECHNIKA, + }, + { + name: 'Оценка нематериальных активов', + link: ROUTES.OCENKA_ACTIVES, + }, + { + name: 'Оценка стоимости предприятия', + link: ROUTES.OCENKA_BUSINESS, + }, + { + name: 'Оценка ценных бумаг', + link: ROUTES.OCENKA_CENN_BUMAGI, + }, + { + name: 'Экспертиза и рецензирование отчета об оценке', + link: ROUTES.OCENKA_RECINSIA_OTCHETA, + }, + ], + }, + }, + { + menuItem: { + name: 'Ипотека', + children: [ + { + name: 'Оценка для ипотеки в Сбербанке', + link: ROUTES.OCENKA_IPOTEKA_SBER, + }, + { + name: 'Оценка для ипотеки в банке ВТБ', + link: ROUTES.OCENKA_IPOTEKA_VTB, + }, + ], + }, + }, + { + menuItem: { + name: 'Транспорт', + children: [ + { + name: 'Оценка ущерба в ДТП', + link: ROUTES.OCENKA_DTP, + }, + { + name: 'Оценка УТС – утраты товарной стоимости', + link: ROUTES.OCENKA_UTS, + }, + { + name: 'Оценка рыночной стоимости автомобиля', + link: ROUTES.OCENKA_RYNOCHNAYA, + }, + { + name: 'Оценка автомобиля для суда', + link: ROUTES.OCENKA_AUTO_SUD, + }, + { + name: 'Оценка мотоциклов и мототехники', + link: ROUTES.OCENKA_MOTO, + }, + { + name: 'Оценка морских и речных судов', + link: ROUTES.OCENKA_PLAVSREDSTV, + }, + { + name: 'Оценка воздушных судов и летательных аппаратов', + link: ROUTES.OCENKA_VOZDUSHNYH_SUDOV, + }, + ], + }, + }, + ], + }, + }, + { + menuItem: { + name: 'Юрист', + children: [ + { + name: 'Решение споров', + children: [ + { + name: 'Страховые споры', + link: ROUTES.JURIST_STRAHOVKA, + }, + { + name: 'Земельные и имущественные', + link: ROUTES.JURIST_ZEMLYA_IMUSHESTVO, + }, + { + name: 'Семейные и наследственные', + link: ROUTES.JURIST_NASLEDSTVO, + }, + { + name: 'Трудовые споры', + link: ROUTES.JURIST_TRUD, + }, + { + name: 'Споры по ДТП', + link: ROUTES.JURIST_DTP, + }, + ], + }, + { + name: 'Сопровождение сделок', + link: ROUTES.JURIST_SDELKI_DOGOVORA, + }, + { + name: 'Представительство в суде', + link: ROUTES.JURIST_PREDSTAVITELSTVO, + }, + { + name: 'Банкротство физических лиц', + link: ROUTES.JURIST_BANKROTSTVO, + }, + { + name: 'Взыскание задолженности', + link: ROUTES.JURIST_DOLGI, + }, + { + name: 'Помощь должникам', + link: ROUTES.JURIST_DOLZHNIKAM, + }, + { + name: 'Возврат страховки и комиссии банков', + link: ROUTES.JURIST_BANKI, + }, + ], + }, + }, +]; diff --git a/src/core/constants/route.ts b/src/core/constants/route.ts index ba30bb0..8d01ef7 100644 --- a/src/core/constants/route.ts +++ b/src/core/constants/route.ts @@ -1,12 +1,97 @@ export const ROUTES = { EMPTY: '#', HOME: '/home', + CONTACTS: '/contacts', + EXPERTS: '/', + PRIVACY_POLICY: '/privacy-policy', + SITEMAP: '/sitemap', + COOKIES: '/cookies', + EXPERTIZA: '/ekspertiza', + EXPERTIZA_AUTOTECH: '/ekspertiza/avtotehnicheskaja', + EXPERTIZA_TRASOLOGIA: '/ekspertiza/trasologicheskaja', + EXPERTIZA_OCENKI: '/ekspertiza/ocenochnaja', + EXPERTIZA_POZHAR: '/ekspertiza/pozharno-tehnicheskaja', + EXPERTIZA_TOVAR: '/ekspertiza/tovarovedcheskaja', + EXPERTIZA_RECENZII: '/ekspertiza/recenzirovanie', + EXPERTIZA_DOCUMENT: '/ekspertiza/dokumentov', + EXPERTIZA_BUHGALTER: '/ekspertiza/buhgalterskaja', + EXPERTIZA_FINANS: '/ekspertiza/finansovo-jekonomicheskaja', + EXPERTIZA_ZEM_STROY: '/ekspertiza/zemle-ustroitelnaja', + EXPERTIZA_KADASTR: '/ekspertiza/kadastrovaja', + EXPERTIZA_STROIT: '/ekspertiza/stroitelno-tehnicheskaja', + EXPERTIZA_COPMPUTER: '/ekspertiza/kompjuterno-tehnicheskaja', + EXPERTIZA_POCHERK: '/ekspertiza/pocherkovedcheskaja', + EXPERTIZA_TECH_CRIM: '/ekspertiza/tehniko-kriminalisticheskaja', + OCENKA: '/ocenka', + //ПО СИТУАЦИИ + OCENKA_NEZAVISIM: '/ocenka/nezavisimaja', + OCENKA_OPEKA: '/ocenka/dlja-opeki', + OCENKA_NOTARIUS: '/ocenka/dlja-notariusa', + OCENKA_NASLEDSTVO: '/ocenka/imushhestva-dlja-vstuplenija-v-nasledstvo', + OCENKA_STRAHOVANIE: '/ocenka/dlja-strahovanija', + OCENKA_USCHERB: '/ocenka/dlja-opredelenija-stoimosti-ushherba', + OCENKA_RAZVOD: '/ocenka/ocenka-imushhestva-pri-razvode', + OCENKA_SUD: '/ocenka/nedvizhimosti-dlja-suda', + OCENKA_USTAV_KAPITAL: '/ocenka/imushhestva-dlja-vnesenija-v-ustavnoj-kapital', + OCENKA_IPOTEKA: '/ocenka/dlja-ipoteki', + OCENKA_BANK: '/ocenka/dlja-banka', + OCENKA_BANKROTSTV: '/ocenka/imushhestva-dlja-bankrotstva', + // ИМУЩЕСТВО + OCENKA_NEDVIGA: '/ocenka/nedvizhimosti', + OCENKA_MASHINES: '/ocenka/mashin-i-oborudovanija', + OCENKA_SPECTECHNIKA: '/ocenka/spectehniki', + OCENKA_ACTIVES: '/ocenka/nematerialnyh-aktivov', + OCENKA_BUSINESS: '/ocenka/stoimosti-predprijatija-biznesa', + OCENKA_CENN_BUMAGI: '/ocenka/cennyh-bumag', + OCENKA_RECINSIA_OTCHETA: + '/ocenka/jekspertiza-i-recenzirovanie-otcheta-ob-ocenke', + // ЖИЛАЯ НЕДВИЖИМОСТЬ + OCENKA_KVARTIRA: '/ocenka/kvartiry', + OCENKA_DOM: '/ocenka/zhilogo-doma', + OCENKA_UCHASTOK: '/ocenka/zemelnogo-uchastka', + OCENKA_GARAZH: '/ocenka/garazha', + OCENKA_USCHERB_NEDVIGI: '/ocenka/ushherba-nedvizhimosti', + OCENKA_ZATOPLENIE: '/ocenka/ushherba-ot-zaliva', + OCENKA_POZHAR: '/ocenka/ushherba-ot-pozhara', + //ИПОТЕКА + OCENKA_IPOTEKA_SBER: '/ocenka/dlja-sberbanka', + OCENKA_IPOTEKA_VTB: '/ocenka/dlja-banka-vtb', + //КОММЕРЧЕСКАЯ НЕДВИЖИМОСТЬ + OCENKA_ARENDA: '/ocenka/stoimosti-arendnoj-stavki', + OCENKA_ZDANIE: '/ocenka/zdanija', + OCENKA_ZEMLYA: '/ocenka/zemel', + OCENKA_POMESCHENIE: '/ocenka/nezhilogo-pomeshhenija', + OCENKA_OFFICE: '/ocenka/ofisa', + OCENKA_SOORUZHENIE: '/ocenka/sooruzhenij', + OCENKA_NEZAV_STROIT: '/ocenka/nezavershennogo-stroitelstva', + //ТРАНСПОРТ + OCENKA_DTP: '/ocenka/ushherba-v-dtp', + OCENKA_UTS: '/ocenka/uts-utraty-tovarnoj-stoimosti-avtomobilja', + OCENKA_RYNOCHNAYA: '/ocenka/rynochnoj-stoimosti-avtomobilja', + OCENKA_AUTO_SUD: '/ocenka/avtomobilja-dlja-suda', + OCENKA_MOTO: '/ocenka/motociklov-i-mototehniki', + OCENKA_PLAVSREDSTV: '/ocenka/morskih-i-rechnyh-sudov', + OCENKA_VOZDUSHNYH_SUDOV: '/ocenka/vozdushnyh-sudov-i-letatelnyh-apparatov', + JURIST: '/jurist', + JURIST_BANKROTSTVO: '/jurist/bankrotstvo-fizicheskih-lic', + JURIST_DOLGI: '/jurist/vzyskanie-dolgov-s-juridicheskih-lic', + JURIST_BANKI: '/jurist/vozvrat-strahovki-i-komissij-bankov', + JURIST_ZEMLYA_IMUSHESTVO: '/jurist/zemelnye-i-imushhestvennye-spory', + JURIST_DOLZHNIKAM: '/jurist/pomoshh-dolzhnikam', + JURIST_PREDSTAVITELSTVO: '/jurist/predstavitelstvo-v-sude', + JURIST_NASLEDSTVO: '/jurist/semejnye-i-nasledstvennye-spory', + JURIST_SDELKI_DOGOVORA: + '/jurist/soprovozhdenie-sdelok-sostavlenie-dogovorov-konsultaciya', + JURIST_DTP: '/jurist/spory-po-dtp', + JURIST_ZEM_SPORY: '/jurist/zemelnye-i-imushhestvennye-spory', + JURIST_STRAHOVKA: '/jurist/strahovye-spory', + JURIST_TRUD: '/jurist/trudovye-spory', } as const; export const ROUTES_EXTERNAL = { - YANDEX_MAP: '#', - WHATSAPP: '#', - TELEGRAM: '#', - VK: '#', - YOUTUBE: '#', + YANDEX_MAP: 'https://map.yandex.ru', + WHATSAPP: 'https://wa.com', + TELEGRAM: 'https://telegram.com', + VK: 'https://vk.com', + YOUTUBE: 'https://youtube.com', } as const; -- 2.49.1 From a52db8dbcb7ff8879298662b627edaf268058a91 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Fri, 27 Jun 2025 12:43:16 +0300 Subject: [PATCH 10/65] refactor: move components by fsd --- src/app/layout.tsx | 5 +- src/app/page.tsx | 6 +- src/core/constants/.gitkeep | 1 - src/entities/.gitkeep | 1 - src/shared/.gitkeep | 1 - src/views/.gitkeep | 1 - src/views/home/ui.tsx | 231 +++++++++++++++++------------------- src/widgets/.gitkeep | 1 - 8 files changed, 117 insertions(+), 130 deletions(-) delete mode 100644 src/core/constants/.gitkeep delete mode 100644 src/entities/.gitkeep delete mode 100644 src/shared/.gitkeep delete mode 100644 src/views/.gitkeep delete mode 100644 src/widgets/.gitkeep diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 82989fa..b7d4052 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -3,6 +3,7 @@ import { ReactNode } from 'react'; import { Montserrat, Roboto } from 'next/font/google'; import '@core/styles/globals.scss'; import '@core/styles/reset.scss'; +import { Footer, Header } from '@/widgets'; const roboto = Roboto({ subsets: ['cyrillic'], @@ -28,7 +29,9 @@ export default function RootLayout({ return ( - {children} +
+
{children}
+
); diff --git a/src/app/page.tsx b/src/app/page.tsx index 5f51e64..5aae61c 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,9 +1,5 @@ import { Home } from '@/views'; export default function HomePage() { - return ( -
- -
- ); + return ; } diff --git a/src/core/constants/.gitkeep b/src/core/constants/.gitkeep deleted file mode 100644 index 620bb1a..0000000 --- a/src/core/constants/.gitkeep +++ /dev/null @@ -1 +0,0 @@ -keep folder file \ No newline at end of file diff --git a/src/entities/.gitkeep b/src/entities/.gitkeep deleted file mode 100644 index 620bb1a..0000000 --- a/src/entities/.gitkeep +++ /dev/null @@ -1 +0,0 @@ -keep folder file \ No newline at end of file diff --git a/src/shared/.gitkeep b/src/shared/.gitkeep deleted file mode 100644 index 620bb1a..0000000 --- a/src/shared/.gitkeep +++ /dev/null @@ -1 +0,0 @@ -keep folder file \ No newline at end of file diff --git a/src/views/.gitkeep b/src/views/.gitkeep deleted file mode 100644 index 620bb1a..0000000 --- a/src/views/.gitkeep +++ /dev/null @@ -1 +0,0 @@ -keep folder file \ No newline at end of file diff --git a/src/views/home/ui.tsx b/src/views/home/ui.tsx index b4f0fd9..11736bc 100644 --- a/src/views/home/ui.tsx +++ b/src/views/home/ui.tsx @@ -1,125 +1,118 @@ import s from './styles.module.scss'; -import { Footer, Header } from '@/widgets'; export default function Main() { return ( -
-
-
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit. Asperiores - cupiditate delectus dicta dignissimos eius esse est eum harum minus - omnis perspiciatis quaerat, quasi quia, quod ratione tempora vel velit - voluptates. -
-
- Accusamus aliquam cumque dignissimos quasi repudiandae suscipit - veniam! Accusamus atque commodi distinctio dolorum esse exercitationem - explicabo, facilis in mollitia neque nostrum officia praesentium quod - ratione, repudiandae, tempora totam ut vel? -
-
- Atque corporis dignissimos dolorem enim et eum fuga fugiat fugit - inventore iure iusto minima, nesciunt odio sed soluta vel voluptates. - A accusamus dolor earum excepturi odit quaerat repudiandae sed - tempore! -
-
- Commodi cumque ducimus incidunt, nam numquam quo tempora voluptas? - Debitis iure, vero. Aperiam atque beatae delectus dolores enim facilis - fuga, ipsam laborum minus, molestiae obcaecati odio pariatur quis - reiciendis voluptate? -
-
- Adipisci aspernatur consequatur cum distinctio ea error ex explicabo - fuga harum hic itaque molestiae nesciunt, omnis placeat reprehenderit - rerum sed temporibus vel! Doloribus facilis id labore quia quisquam - sequi voluptate. -
-
- Adipisci atque dolorem ducimus enim facere fugit incidunt ipsam ipsum - laudantium magni minima mollitia neque nesciunt nostrum odio officia - perferendis quam, qui quia quisquam similique sunt temporibus vel - veritatis vitae? -
-
- Culpa fuga incidunt magni nemo porro quas quia quod sunt voluptas - voluptate. Blanditiis ducimus eos eum facere fuga hic laborum minus, - mollitia necessitatibus officiis perspiciatis recusandae, rerum saepe, - temporibus ut? -
-
- Consequatur ducimus eius, illo ipsa laborum magnam nesciunt numquam - officia porro provident quasi reprehenderit sapiente sed temporibus - unde vel veniam voluptatem. Amet commodi illum minus optio praesentium - quis repellat, repudiandae. -
-
- A ad aperiam architecto aut autem consequuntur cumque dolor ducimus ea - eligendi ipsa iste laudantium magni maxime minima nostrum officia - pariatur quae quasi quia quo, reiciendis repudiandae, saepe ullam - voluptatum! -
-
- Aperiam, aut commodi corporis dignissimos, eaque enim eos harum ipsa - optio quia quos reiciendis, repellat. Architecto dolores error minus - nihil non numquam, omnis optio porro tempora! Error eveniet nisi quod? -
-
- Ab ad adipisci alias amet consequatur delectus deserunt dignissimos - distinctio dolor eius id ipsa, laboriosam libero nam natus non numquam - quidem quis quod rem saepe, tempora tenetur unde vel velit? -
-
- Aliquam at consectetur culpa debitis doloribus ducimus eligendi - eveniet facere fugiat ipsam itaque, laudantium maiores maxime - molestiae molestias mollitia necessitatibus nisi numquam obcaecati - quaerat quidem quis recusandae rerum, vel voluptas? -
-
- Ab ad alias aliquam, amet corporis cumque doloribus ducimus ea error - et excepturi exercitationem, explicabo impedit iste iure laudantium - necessitatibus optio pariatur quia quidem ratione, rem similique sint - totam voluptatem? -
-
- Eius ipsa nihil odio perspiciatis sed sequi tempora, ullam? - Consequuntur enim ex illo laborum nam, repellat tempore totam ut - voluptatibus! Ad assumenda blanditiis distinctio dolorem, ex illum - iusto magnam tempore. -
-
- Aspernatur consequatur delectus deleniti est fugit laborum minima nisi - quos suscipit vero. Accusantium ex illum maxime numquam obcaecati - perspiciatis, quod reiciendis temporibus vitae. Eos laboriosam nostrum - odit quidem reiciendis vitae. -
-
- Animi at libero minima necessitatibus obcaecati, officia perferendis - quo! Ab ad dolorum excepturi laborum libero, officia quibusdam - sapiente! Accusamus adipisci consectetur cumque debitis dolore id - impedit nesciunt nisi omnis voluptas. -
-
- Accusantium animi debitis ducimus, iste molestias quos rem. - Consectetur dicta, doloremque error eveniet excepturi fugit in, - incidunt natus nulla omnis, quia quidem quisquam sint soluta - voluptatibus. Eveniet maxime quae recusandae. -
-
- Ad aliquam architecto distinctio eius eos maxime minima optio porro - quis voluptatem. Accusantium atque debitis eligendi esse hic ipsam - ipsum, nihil officia perspiciatis quasi rerum soluta, tempora vel - voluptas voluptatibus. -
-
- Aperiam dolor exercitationem expedita illum labore modi molestias - repudiandae saepe velit voluptas. Accusamus consequuntur, dignissimos - eius eligendi fuga harum illo illum nam, nulla, odit officia quaerat - quis reiciendis sit tempore! -
-
-
-
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Asperiores + cupiditate delectus dicta dignissimos eius esse est eum harum minus + omnis perspiciatis quaerat, quasi quia, quod ratione tempora vel velit + voluptates. +
+
+ Accusamus aliquam cumque dignissimos quasi repudiandae suscipit veniam! + Accusamus atque commodi distinctio dolorum esse exercitationem + explicabo, facilis in mollitia neque nostrum officia praesentium quod + ratione, repudiandae, tempora totam ut vel? +
+
+ Atque corporis dignissimos dolorem enim et eum fuga fugiat fugit + inventore iure iusto minima, nesciunt odio sed soluta vel voluptates. A + accusamus dolor earum excepturi odit quaerat repudiandae sed tempore! +
+
+ Commodi cumque ducimus incidunt, nam numquam quo tempora voluptas? + Debitis iure, vero. Aperiam atque beatae delectus dolores enim facilis + fuga, ipsam laborum minus, molestiae obcaecati odio pariatur quis + reiciendis voluptate? +
+
+ Adipisci aspernatur consequatur cum distinctio ea error ex explicabo + fuga harum hic itaque molestiae nesciunt, omnis placeat reprehenderit + rerum sed temporibus vel! Doloribus facilis id labore quia quisquam + sequi voluptate. +
+
+ Adipisci atque dolorem ducimus enim facere fugit incidunt ipsam ipsum + laudantium magni minima mollitia neque nesciunt nostrum odio officia + perferendis quam, qui quia quisquam similique sunt temporibus vel + veritatis vitae? +
+
+ Culpa fuga incidunt magni nemo porro quas quia quod sunt voluptas + voluptate. Blanditiis ducimus eos eum facere fuga hic laborum minus, + mollitia necessitatibus officiis perspiciatis recusandae, rerum saepe, + temporibus ut? +
+
+ Consequatur ducimus eius, illo ipsa laborum magnam nesciunt numquam + officia porro provident quasi reprehenderit sapiente sed temporibus unde + vel veniam voluptatem. Amet commodi illum minus optio praesentium quis + repellat, repudiandae. +
+
+ A ad aperiam architecto aut autem consequuntur cumque dolor ducimus ea + eligendi ipsa iste laudantium magni maxime minima nostrum officia + pariatur quae quasi quia quo, reiciendis repudiandae, saepe ullam + voluptatum! +
+
+ Aperiam, aut commodi corporis dignissimos, eaque enim eos harum ipsa + optio quia quos reiciendis, repellat. Architecto dolores error minus + nihil non numquam, omnis optio porro tempora! Error eveniet nisi quod? +
+
+ Ab ad adipisci alias amet consequatur delectus deserunt dignissimos + distinctio dolor eius id ipsa, laboriosam libero nam natus non numquam + quidem quis quod rem saepe, tempora tenetur unde vel velit? +
+
+ Aliquam at consectetur culpa debitis doloribus ducimus eligendi eveniet + facere fugiat ipsam itaque, laudantium maiores maxime molestiae + molestias mollitia necessitatibus nisi numquam obcaecati quaerat quidem + quis recusandae rerum, vel voluptas? +
+
+ Ab ad alias aliquam, amet corporis cumque doloribus ducimus ea error et + excepturi exercitationem, explicabo impedit iste iure laudantium + necessitatibus optio pariatur quia quidem ratione, rem similique sint + totam voluptatem? +
+
+ Eius ipsa nihil odio perspiciatis sed sequi tempora, ullam? Consequuntur + enim ex illo laborum nam, repellat tempore totam ut voluptatibus! Ad + assumenda blanditiis distinctio dolorem, ex illum iusto magnam tempore. +
+
+ Aspernatur consequatur delectus deleniti est fugit laborum minima nisi + quos suscipit vero. Accusantium ex illum maxime numquam obcaecati + perspiciatis, quod reiciendis temporibus vitae. Eos laboriosam nostrum + odit quidem reiciendis vitae. +
+
+ Animi at libero minima necessitatibus obcaecati, officia perferendis + quo! Ab ad dolorum excepturi laborum libero, officia quibusdam sapiente! + Accusamus adipisci consectetur cumque debitis dolore id impedit nesciunt + nisi omnis voluptas. +
+
+ Accusantium animi debitis ducimus, iste molestias quos rem. Consectetur + dicta, doloremque error eveniet excepturi fugit in, incidunt natus nulla + omnis, quia quidem quisquam sint soluta voluptatibus. Eveniet maxime + quae recusandae. +
+
+ Ad aliquam architecto distinctio eius eos maxime minima optio porro quis + voluptatem. Accusantium atque debitis eligendi esse hic ipsam ipsum, + nihil officia perspiciatis quasi rerum soluta, tempora vel voluptas + voluptatibus. +
+
+ Aperiam dolor exercitationem expedita illum labore modi molestias + repudiandae saepe velit voluptas. Accusamus consequuntur, dignissimos + eius eligendi fuga harum illo illum nam, nulla, odit officia quaerat + quis reiciendis sit tempore! +
+
); } diff --git a/src/widgets/.gitkeep b/src/widgets/.gitkeep deleted file mode 100644 index 620bb1a..0000000 --- a/src/widgets/.gitkeep +++ /dev/null @@ -1 +0,0 @@ -keep folder file \ No newline at end of file -- 2.49.1 From 359f3a32c43b0d8ebdf447d79e40fb159316db0b Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Tue, 1 Jul 2025 11:10:38 +0300 Subject: [PATCH 11/65] fix: update base menu --- src/core/constants/menu.ts | 712 ++++++++++------------ src/entities/base-menu/styles.module.scss | 62 +- src/entities/base-menu/ui.tsx | 150 +---- src/shared/ui/icon/ui.tsx | 21 +- 4 files changed, 407 insertions(+), 538 deletions(-) diff --git a/src/core/constants/menu.ts b/src/core/constants/menu.ts index 8ee257f..20893b1 100644 --- a/src/core/constants/menu.ts +++ b/src/core/constants/menu.ts @@ -1,406 +1,336 @@ import { ROUTES } from '@core/constants/route'; -export const Menu = [ +export type TMenu = { + name: string; + link?: string; + children?: TMenu; +}[]; + +export const baseMenu: TMenu = [ { - menuItem: { - name: 'Экспертиза', - children: [ - { - menuItem: { - name: 'Автотехническая', - link: ROUTES.EXPERTIZA_AUTOTECH, - }, - }, - { - menuItem: { - name: 'Трасологическая', - link: ROUTES.EXPERTIZA_TRASOLOGIA, - }, - }, - { - menuItem: { - name: 'Пожарно-техническая', - link: ROUTES.EXPERTIZA_POZHAR, - }, - }, - { - menuItem: { - name: 'Товароведческая', - link: ROUTES.EXPERTIZA_TOVAR, - }, - }, - { - menuItem: { - name: 'Рецензирование и проверка экспертизы', - link: ROUTES.EXPERTIZA_RECENZII, - }, - }, - { - menuItem: { - name: 'Документарная', - link: ROUTES.EXPERTIZA_DOCUMENT, - }, - }, - { - menuItem: { - name: 'Бухгалтерская', - link: ROUTES.EXPERTIZA_BUHGALTER, - }, - }, - { - menuItem: { - name: 'Финансово-экономическая', - link: ROUTES.EXPERTIZA_FINANS, - }, - }, - { - menuItem: { - name: 'Земле-устроительная', - link: ROUTES.EXPERTIZA_ZEM_STROY, - }, - }, - { - menuItem: { - name: 'Кадастровая', - link: ROUTES.EXPERTIZA_KADASTR, - }, - }, - { - menuItem: { - name: 'Строительно-техническая', - link: ROUTES.EXPERTIZA_STROIT, - }, - }, - { - menuItem: { - name: 'Компьютерно-техническая', - link: ROUTES.EXPERTIZA_COPMPUTER, - }, - }, - { - menuItem: { - name: 'Почерковедческая', - link: ROUTES.EXPERTIZA_POCHERK, - }, - }, - { - menuItem: { - name: 'Технико-криминалистическая', - link: ROUTES.EXPERTIZA_TECH_CRIM, - }, - }, - ], - }, + name: 'Экспертиза', + children: [ + { + name: 'Автотехническая', + link: ROUTES.EXPERTIZA_AUTOTECH, + }, + { + name: 'Трасологическая', + link: ROUTES.EXPERTIZA_TRASOLOGIA, + }, + { + name: 'Пожарно-техническая', + link: ROUTES.EXPERTIZA_POZHAR, + }, + { + name: 'Товароведческая', + link: ROUTES.EXPERTIZA_TOVAR, + }, + { + name: 'Рецензирование и проверка экспертизы', + link: ROUTES.EXPERTIZA_RECENZII, + }, + { + name: 'Документарная', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, + { + name: 'Бухгалтерская', + link: ROUTES.EXPERTIZA_BUHGALTER, + }, + { + name: 'Финансово-экономическая', + link: ROUTES.EXPERTIZA_FINANS, + }, + { + name: 'Земле-устроительная', + link: ROUTES.EXPERTIZA_ZEM_STROY, + }, + { + name: 'Кадастровая', + link: ROUTES.EXPERTIZA_KADASTR, + }, + { + name: 'Строительно-техническая', + link: ROUTES.EXPERTIZA_STROIT, + }, + { + name: 'Компьютерно-техническая', + link: ROUTES.EXPERTIZA_COPMPUTER, + }, + { + name: 'Почерковедческая', + link: ROUTES.EXPERTIZA_POCHERK, + }, + { + name: 'Технико-криминалистическая', + link: ROUTES.EXPERTIZA_TECH_CRIM, + }, + ], }, { - menuItem: { - name: 'Оценка', - children: [ - { - menuItem: { - name: 'По ситуации', - children: [ - { - menuItem: { - name: 'Независимая оценка', - link: ROUTES.OCENKA_NEZAVISIM, - }, - }, - { - menuItem: { - name: 'Оценка для опеки', - link: ROUTES.OCENKA_OPEKA, - }, - }, - { - menuItem: { - name: 'Оценка для нотариуса', - link: ROUTES.OCENKA_NOTARIUS, - }, - }, - { - menuItem: { - name: 'Оценка для вступления в наследство', - link: ROUTES.OCENKA_NASLEDSTVO, - }, - }, - { - menuItem: { - name: 'Оценка для страхования', - link: ROUTES.OCENKA_STRAHOVANIE, - }, - }, - { - menuItem: { - name: 'Оценка для определения стоимости ущерба', - link: ROUTES.OCENKA_USCHERB, - }, - }, - { - menuItem: { - name: 'Оценка имущества при разводе', - link: ROUTES.OCENKA_RAZVOD, - }, - }, - { - menuItem: { - name: 'Оценка недвижимости для суда', - link: ROUTES.OCENKA_SUD, - }, - }, - { - menuItem: { - name: 'Оценка для внесения в уставный капитал', - link: ROUTES.OCENKA_USTAV_KAPITAL, - }, - }, - { - menuItem: { - name: 'Оценка для ипотеки', - link: ROUTES.OCENKA_IPOTEKA, - }, - }, - { - menuItem: { - name: 'Оценка для банка', - link: ROUTES.OCENKA_BANK, - }, - }, - { - menuItem: { - name: 'Оценка имущества для банкротства', - link: ROUTES.OCENKA_BANKROTSTV, - }, - }, - ], + name: 'Оценка', + children: [ + { + name: 'По ситуации', + children: [ + { + name: 'Независимая оценка', + link: ROUTES.OCENKA_NEZAVISIM, }, - }, - { - menuItem: { - name: 'Жилая недвижимость', - children: [ - { - menuItem: { - name: 'Оценка квартиры', - link: ROUTES.OCENKA_KVARTIRA, - }, - }, - { - menuItem: { - name: 'Оценка жилого дома', - link: ROUTES.OCENKA_DOM, - }, - }, - { - menuItem: { - name: 'Оценка земельного участка', - link: ROUTES.OCENKA_UCHASTOK, - }, - }, - { - menuItem: { - name: 'Оценка гаража', - link: ROUTES.OCENKA_GARAZH, - }, - }, - { - menuItem: { - name: 'Оценка ущерба недвижимости', - link: ROUTES.OCENKA_USCHERB_NEDVIGI, - }, - }, - { - menuItem: { - name: 'Оценка ущерба от залива', - link: ROUTES.OCENKA_ZATOPLENIE, - }, - }, - { - menuItem: { - name: 'Оценка ущерба от пожара', - link: ROUTES.OCENKA_POZHAR, - }, - }, - ], + { + name: 'Оценка для опеки', + link: ROUTES.OCENKA_OPEKA, }, - }, - { - menuItem: { - name: 'Коммерческая недвижимость', - children: [ - { - name: 'Оценка стоимости арендной ставки', - link: ROUTES.OCENKA_ARENDA, - }, - { - name: 'Оценка здания', - link: ROUTES.OCENKA_ZDANIE, - }, - { - name: 'Оценка земель', - link: ROUTES.OCENKA_ZEMLYA, - }, - { - name: 'Оценка нежилого помещения', - link: ROUTES.OCENKA_POMESCHENIE, - }, - { - name: 'Оценка офиса', - link: ROUTES.OCENKA_OFFICE, - }, - { - name: 'Оценка сооружений', - link: ROUTES.OCENKA_SOORUZHENIE, - }, - { - name: 'Оценка незавершенного строительства', - link: ROUTES.OCENKA_NEZAV_STROIT, - }, - ], + { + name: 'Оценка для нотариуса', + link: ROUTES.OCENKA_NOTARIUS, }, - }, - { - menuItem: { - name: 'Имущество', - children: [ - { - name: 'Оценка недвижимости', - link: ROUTES.OCENKA_NEDVIGA, - }, - { - name: 'Оценка машин и оборудования', - link: ROUTES.OCENKA_MASHINES, - }, - { - name: 'Оценка спецтехники', - link: ROUTES.OCENKA_SPECTECHNIKA, - }, - { - name: 'Оценка нематериальных активов', - link: ROUTES.OCENKA_ACTIVES, - }, - { - name: 'Оценка стоимости предприятия', - link: ROUTES.OCENKA_BUSINESS, - }, - { - name: 'Оценка ценных бумаг', - link: ROUTES.OCENKA_CENN_BUMAGI, - }, - { - name: 'Экспертиза и рецензирование отчета об оценке', - link: ROUTES.OCENKA_RECINSIA_OTCHETA, - }, - ], + { + name: 'Оценка для вступления в наследство', + link: ROUTES.OCENKA_NASLEDSTVO, }, - }, - { - menuItem: { - name: 'Ипотека', - children: [ - { - name: 'Оценка для ипотеки в Сбербанке', - link: ROUTES.OCENKA_IPOTEKA_SBER, - }, - { - name: 'Оценка для ипотеки в банке ВТБ', - link: ROUTES.OCENKA_IPOTEKA_VTB, - }, - ], + { + name: 'Оценка для страхования', + link: ROUTES.OCENKA_STRAHOVANIE, }, - }, - { - menuItem: { - name: 'Транспорт', - children: [ - { - name: 'Оценка ущерба в ДТП', - link: ROUTES.OCENKA_DTP, - }, - { - name: 'Оценка УТС – утраты товарной стоимости', - link: ROUTES.OCENKA_UTS, - }, - { - name: 'Оценка рыночной стоимости автомобиля', - link: ROUTES.OCENKA_RYNOCHNAYA, - }, - { - name: 'Оценка автомобиля для суда', - link: ROUTES.OCENKA_AUTO_SUD, - }, - { - name: 'Оценка мотоциклов и мототехники', - link: ROUTES.OCENKA_MOTO, - }, - { - name: 'Оценка морских и речных судов', - link: ROUTES.OCENKA_PLAVSREDSTV, - }, - { - name: 'Оценка воздушных судов и летательных аппаратов', - link: ROUTES.OCENKA_VOZDUSHNYH_SUDOV, - }, - ], + { + name: 'Оценка для определения стоимости ущерба', + link: ROUTES.OCENKA_USCHERB, }, - }, - ], - }, + { + name: 'Оценка имущества при разводе', + link: ROUTES.OCENKA_RAZVOD, + }, + { + name: 'Оценка недвижимости для суда', + link: ROUTES.OCENKA_SUD, + }, + { + name: 'Оценка для внесения в уставный капитал', + link: ROUTES.OCENKA_USTAV_KAPITAL, + }, + { + name: 'Оценка для ипотеки', + link: ROUTES.OCENKA_IPOTEKA, + }, + { + name: 'Оценка для банка', + link: ROUTES.OCENKA_BANK, + }, + { + name: 'Оценка имущества для банкротства', + link: ROUTES.OCENKA_BANKROTSTV, + }, + ], + }, + { + name: 'Жилая недвижимость', + children: [ + { + name: 'Оценка квартиры', + link: ROUTES.OCENKA_KVARTIRA, + }, + { + name: 'Оценка жилого дома', + link: ROUTES.OCENKA_DOM, + }, + { + name: 'Оценка земельного участка', + link: ROUTES.OCENKA_UCHASTOK, + }, + { + name: 'Оценка гаража', + link: ROUTES.OCENKA_GARAZH, + }, + { + name: 'Оценка ущерба недвижимости', + link: ROUTES.OCENKA_USCHERB_NEDVIGI, + }, + { + name: 'Оценка ущерба от залива', + link: ROUTES.OCENKA_ZATOPLENIE, + }, + { + name: 'Оценка ущерба от пожара', + link: ROUTES.OCENKA_POZHAR, + }, + ], + }, + { + name: 'Коммерческая недвижимость', + children: [ + { + name: 'Оценка стоимости арендной ставки', + link: ROUTES.OCENKA_ARENDA, + }, + { + name: 'Оценка здания', + link: ROUTES.OCENKA_ZDANIE, + }, + { + name: 'Оценка земель', + link: ROUTES.OCENKA_ZEMLYA, + }, + { + name: 'Оценка нежилого помещения', + link: ROUTES.OCENKA_POMESCHENIE, + }, + { + name: 'Оценка офиса', + link: ROUTES.OCENKA_OFFICE, + }, + { + name: 'Оценка сооружений', + link: ROUTES.OCENKA_SOORUZHENIE, + }, + { + name: 'Оценка незавершенного строительства', + link: ROUTES.OCENKA_NEZAV_STROIT, + }, + ], + }, + { + name: 'Имущество', + children: [ + { + name: 'Оценка недвижимости', + link: ROUTES.OCENKA_NEDVIGA, + }, + { + name: 'Оценка машин и оборудования', + link: ROUTES.OCENKA_MASHINES, + }, + { + name: 'Оценка спецтехники', + link: ROUTES.OCENKA_SPECTECHNIKA, + }, + { + name: 'Оценка нематериальных активов', + link: ROUTES.OCENKA_ACTIVES, + }, + { + name: 'Оценка стоимости предприятия', + link: ROUTES.OCENKA_BUSINESS, + }, + { + name: 'Оценка ценных бумаг', + link: ROUTES.OCENKA_CENN_BUMAGI, + }, + { + name: 'Экспертиза и рецензирование отчета об оценке', + link: ROUTES.OCENKA_RECINSIA_OTCHETA, + }, + ], + }, + { + name: 'Ипотека', + children: [ + { + name: 'Оценка для ипотеки в Сбербанке', + link: ROUTES.OCENKA_IPOTEKA_SBER, + }, + { + name: 'Оценка для ипотеки в банке ВТБ', + link: ROUTES.OCENKA_IPOTEKA_VTB, + }, + ], + }, + { + name: 'Транспорт', + children: [ + { + name: 'Оценка ущерба в ДТП', + link: ROUTES.OCENKA_DTP, + }, + { + name: 'Оценка УТС – утраты товарной стоимости', + link: ROUTES.OCENKA_UTS, + }, + { + name: 'Оценка рыночной стоимости автомобиля', + link: ROUTES.OCENKA_RYNOCHNAYA, + }, + { + name: 'Оценка автомобиля для суда', + link: ROUTES.OCENKA_AUTO_SUD, + }, + { + name: 'Оценка мотоциклов и мототехники', + link: ROUTES.OCENKA_MOTO, + }, + { + name: 'Оценка морских и речных судов', + link: ROUTES.OCENKA_PLAVSREDSTV, + }, + { + name: 'Оценка воздушных судов и летательных аппаратов', + link: ROUTES.OCENKA_VOZDUSHNYH_SUDOV, + }, + ], + }, + ], }, { - menuItem: { - name: 'Юрист', - children: [ - { - name: 'Решение споров', - children: [ - { - name: 'Страховые споры', - link: ROUTES.JURIST_STRAHOVKA, - }, - { - name: 'Земельные и имущественные', - link: ROUTES.JURIST_ZEMLYA_IMUSHESTVO, - }, - { - name: 'Семейные и наследственные', - link: ROUTES.JURIST_NASLEDSTVO, - }, - { - name: 'Трудовые споры', - link: ROUTES.JURIST_TRUD, - }, - { - name: 'Споры по ДТП', - link: ROUTES.JURIST_DTP, - }, - ], - }, - { - name: 'Сопровождение сделок', - link: ROUTES.JURIST_SDELKI_DOGOVORA, - }, - { - name: 'Представительство в суде', - link: ROUTES.JURIST_PREDSTAVITELSTVO, - }, - { - name: 'Банкротство физических лиц', - link: ROUTES.JURIST_BANKROTSTVO, - }, - { - name: 'Взыскание задолженности', - link: ROUTES.JURIST_DOLGI, - }, - { - name: 'Помощь должникам', - link: ROUTES.JURIST_DOLZHNIKAM, - }, - { - name: 'Возврат страховки и комиссии банков', - link: ROUTES.JURIST_BANKI, - }, - ], - }, + name: 'Юрист', + children: [ + { + name: 'Решение споров', + children: [ + { + name: 'Страховые споры', + link: ROUTES.JURIST_STRAHOVKA, + }, + { + name: 'Земельные и имущественные', + link: ROUTES.JURIST_ZEMLYA_IMUSHESTVO, + }, + { + name: 'Семейные и наследственные', + link: ROUTES.JURIST_NASLEDSTVO, + }, + { + name: 'Трудовые споры', + link: ROUTES.JURIST_TRUD, + }, + { + name: 'Споры по ДТП', + link: ROUTES.JURIST_DTP, + }, + ], + }, + { + name: 'Сопровождение сделок', + link: ROUTES.JURIST_SDELKI_DOGOVORA, + }, + { + name: 'Представительство в суде', + link: ROUTES.JURIST_PREDSTAVITELSTVO, + }, + { + name: 'Банкротство физических лиц', + link: ROUTES.JURIST_BANKROTSTVO, + }, + { + name: 'Взыскание задолженности', + link: ROUTES.JURIST_DOLGI, + }, + { + name: 'Помощь должникам', + link: ROUTES.JURIST_DOLZHNIKAM, + }, + { + name: 'Возврат страховки и комиссии банков', + link: ROUTES.JURIST_BANKI, + }, + ], + }, + { + name: 'Эксперты', + link: ROUTES.EXPERTS, + }, + { + name: 'Контакты', + link: ROUTES.CONTACTS, }, ]; diff --git a/src/entities/base-menu/styles.module.scss b/src/entities/base-menu/styles.module.scss index e05306e..7ee3daa 100644 --- a/src/entities/base-menu/styles.module.scss +++ b/src/entities/base-menu/styles.module.scss @@ -19,7 +19,7 @@ display: flex; flex-direction: row; align-items: center; - gap: rem(24px); + gap: rem(32px); } .Parent { @@ -27,35 +27,45 @@ position: relative; float: left; line-height: 40px; - //background-color: #ffc72c; - //border-right: #CCC 1px solid; - } - .Parent a { - //margin: 10px 24px; - //color: #5d3200; - text-decoration: none; - } + .Row { + display: flex; + justify-content: space-between; + gap: 16px; + align-items: center; + cursor: default; + } - .Parent:hover > ul { - display: block; - position: absolute; - box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, 0.5); + & a { + text-decoration: none; + } + + &:hover > ul { + display: block; + position: absolute; + box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, 0.5); + } } .Child { display: none; - } - .Child li { - background-color: #FFFFFF; - line-height: 40px; - padding: 0 10px; - width: 100%; - } + & li { + background-color: #FFFFFF; + line-height: 40px; + padding: 4px 16px; + width: 100%; + text-wrap: nowrap; - .Child li a { - color: $color-text; + & a { + color: $color-text; + display: block; + } + } + + & .Parent > .Row > .Expand { + transform: rotateZ(0deg); + } } ul { @@ -94,13 +104,7 @@ } .Expand { - font-size: 16px; - float: right; - margin-left: 8px; - color: $color-text + transform: rotateZ(90deg); } } - - .Invite { - } } \ No newline at end of file diff --git a/src/entities/base-menu/ui.tsx b/src/entities/base-menu/ui.tsx index 8ac689d..a5e1aab 100644 --- a/src/entities/base-menu/ui.tsx +++ b/src/entities/base-menu/ui.tsx @@ -1,51 +1,45 @@ import s from './styles.module.scss'; import Image from 'next/image'; import dtrLogo from '@public/images/dtr-logo-eagle.png'; +import { baseMenu, TMenu } from '@core/constants/menu'; +import { Icons } from '@shared/ui/icon'; +import Link from 'next/link'; function BaseMenu() { + const Menu = ({ list }: { list: TMenu }) => { + const nodeList = (list: TMenu) => { + return list.map((item, index) => { + if (item.children && item.children.length) { + return ( +
  • +
    + {item.name} + +
    +
      {nodeList(item.children)}
    +
  • + ); + } + + return ( +
  • + {item.name} +
  • + ); + }); + }; + return ( + + ); + }; + return (
    {'ДиТрасо'} - +
    @@ -55,81 +49,3 @@ function BaseMenu() { } export { BaseMenu }; - -const Menu = [ - { - menuItem: { - name: 'Home', - link: '/home', - }, - }, - { - menuItem: { - name: 'Link1', - children: [ - { - menuItem: { - name: 'link1-1', - link: '/home', - }, - }, - { - menuItem: { - name: 'link1-2', - link: '/home', - }, - }, - { - menuItem: { - name: 'link1-3', - link: '/home', - }, - }, - ], - }, - }, - { - menuItem: { - name: 'Link2', - children: [ - { - menuItem: { - name: 'link2-1', - link: '/home', - }, - }, - { - menuItem: { - name: 'link2-2', - children: [ - { - menuItem: { - name: 'link2-1', - link: '/home', - }, - }, - { - menuItem: { - name: 'link2-2', - link: '/home', - }, - }, - { - menuItem: { - name: 'link2-3', - link: '/home', - }, - }, - ], - }, - }, - { - menuItem: { - name: 'link2-3', - link: '/home', - }, - }, - ], - }, - }, -]; diff --git a/src/shared/ui/icon/ui.tsx b/src/shared/ui/icon/ui.tsx index 9d0afd4..54ec610 100644 --- a/src/shared/ui/icon/ui.tsx +++ b/src/shared/ui/icon/ui.tsx @@ -144,9 +144,28 @@ function Youtube(props: SVGIcon) { ); } +//WeuiArrowFilled +export function MenuArrow(props: SVGIcon) { + return ( + + + + ); +} + const Icons = Object.assign( {}, - { Map, Envelope, Whatsapp, Telegram, Phone, Vk, Youtube }, + { Map, Envelope, Whatsapp, Telegram, Phone, Vk, Youtube, MenuArrow }, ); export { Icons }; -- 2.49.1 From 8bb29cc042251da85ef41c0a2ec93e1ef9140fde Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Tue, 1 Jul 2025 13:29:38 +0300 Subject: [PATCH 12/65] feat: page template --- public/images/sber-domclick.jpg | Bin 0 -> 43069 bytes src/app/ekspertiza/avtotehnicheskaja/page.tsx | 24 ++++- src/core/constants/route.ts | 4 +- src/entities/base-menu/styles.module.scss | 21 +++-- src/views/expertise/autotech/index.ts | 1 + .../expertise/autotech/styles.module.scss | 48 ++++++++++ src/views/expertise/autotech/ui.tsx | 85 ++++++++++++++++++ src/views/index.ts | 3 + src/widgets/breadcrumbs/styles.module.scss | 74 +++++++++++++++ src/widgets/breadcrumbs/ui.tsx | 36 ++++++++ 10 files changed, 286 insertions(+), 10 deletions(-) create mode 100644 public/images/sber-domclick.jpg create mode 100644 src/views/expertise/autotech/index.ts create mode 100644 src/views/expertise/autotech/styles.module.scss create mode 100644 src/views/expertise/autotech/ui.tsx create mode 100644 src/widgets/breadcrumbs/styles.module.scss create mode 100644 src/widgets/breadcrumbs/ui.tsx diff --git a/public/images/sber-domclick.jpg b/public/images/sber-domclick.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3fbc58955490a39d30440a58003be899d85663ae GIT binary patch literal 43069 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%0AZpK)XtX=&o&A1ZAO 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
    ; + return ( + <> + + + + ); } diff --git a/src/core/constants/route.ts b/src/core/constants/route.ts index 8d01ef7..5cb1c26 100644 --- a/src/core/constants/route.ts +++ b/src/core/constants/route.ts @@ -1,8 +1,8 @@ export const ROUTES = { EMPTY: '#', - HOME: '/home', + HOME: '/', CONTACTS: '/contacts', - EXPERTS: '/', + EXPERTS: '/experts', PRIVACY_POLICY: '/privacy-policy', SITEMAP: '/sitemap', COOKIES: '/cookies', diff --git a/src/entities/base-menu/styles.module.scss b/src/entities/base-menu/styles.module.scss index 7ee3daa..d4ea4c3 100644 --- a/src/entities/base-menu/styles.module.scss +++ b/src/entities/base-menu/styles.module.scss @@ -5,11 +5,11 @@ .Navbar { margin: 0 auto; width: rem(1540px); - height: 100px; + height: rem(100px); display: flex; flex-direction: row; align-items: center; - gap: 20px; + gap: rem(20px); .Nav { @@ -26,12 +26,12 @@ display: block; position: relative; float: left; - line-height: 40px; + line-height: rem(40px); .Row { display: flex; justify-content: space-between; - gap: 16px; + gap: rem(16px); align-items: center; cursor: default; } @@ -40,6 +40,10 @@ text-decoration: none; } + & li { + transition: background-color 0.2s ease-in-out; + } + &:hover > ul { display: block; position: absolute; @@ -51,12 +55,15 @@ display: none; & li { - background-color: #FFFFFF; - line-height: 40px; - padding: 4px 16px; + padding: rem(4px) rem(16px); width: 100%; + font-size: rem(14px); + line-height: rem(40px); text-wrap: nowrap; + background-color: #FFFFFF; + transition: background-color 0.2s ease-in-out; + & a { color: $color-text; display: block; diff --git a/src/views/expertise/autotech/index.ts b/src/views/expertise/autotech/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/expertise/autotech/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/expertise/autotech/styles.module.scss b/src/views/expertise/autotech/styles.module.scss new file mode 100644 index 0000000..9edf554 --- /dev/null +++ b/src/views/expertise/autotech/styles.module.scss @@ -0,0 +1,48 @@ +.Container { + margin: 0 auto; + width: rem(1540px); + display: grid; + grid-template-columns: auto 360px; + gap: 160px; +} + +.Article { + display: flex; + flex-direction: column; + padding: rem(40px) 0; + + .Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .List { + display: flex; + flex-direction: column; + list-style-type: disc; + margin-left: 16px; + margin-bottom: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + } + + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } +} \ No newline at end of file diff --git a/src/views/expertise/autotech/ui.tsx b/src/views/expertise/autotech/ui.tsx new file mode 100644 index 0000000..b3d82d6 --- /dev/null +++ b/src/views/expertise/autotech/ui.tsx @@ -0,0 +1,85 @@ +import s from './styles.module.scss'; + +function AutoTech() { + return ( +
    +
    +
    +

    + При возникновении ситуаций, возникающих в результате ДТП + (дорожно-транспортных происшествий), для решения наиболее сложных + проблем, требуется проведение специальной автоэкспертизы, + позволяющей реализовать право водителя на получение страховки. В + судебной практике нередки случаи, когда независимая техническая + экспертиза значительно выгоднее и эффективнее, чем автотехническая + экспертиза, проводимая по инициативе страховой компании. Это вполне + понятно, поскольку страховые компании стремятся сделать выплаты + минимальными, в отличие от них независимые эксперты такой цели не + имеют. +

    +

    + Автотехническая экспертиза тек же может потребоваться в следующих + случаях: +

    +
      +
    • + В неясных и спорных ситуациях, когда правоохранительные органы не + могут точно определить виновника происшествия. +
    • +
    • + Если в аварии пострадал один и больше человек. +
    • +
    • + При изучении дела по факту аварийной ситуации на дороге. +
    • +
    • + В случае несогласия с судебным постановлением. +
    • +
    • + При рассмотрении дела о возмещении материального ущерба, который + был нанесен транспортному средству. Сумма ущерба определяется на + основании полученных в результате экспертизы данных. +
    • +
    • + При проверке со стороны таможенных органов. +
    • +
    • + Если возникает подозрение на то, что номер кузова авто был + изменен. +
    • +
    + WIDGET +

    Документы, необходимые для экспертизы:

    +

    + Для начала работ по автомобильной экспертизе эксперту понадобятся + основные документы: +

    +
      +
    • + свидетельство о государственной регистрации транспортного + средства; +
    • +
    • справка с места ДТП
    • +
    • паспортные данные заказчика;
    • +
    +

    Заказать экспертизу очень просто:

    + WIDGET +

    + Экспертное заключение, полученный от компании «ДИ ТРАСО», будет + являться официальным документом, подтверждающим результат работы + эксперта. В нем будет содержаться вся полная информация.. +

    +

    Как провести автотехническую экспертизу

    +

    + Для того, чтобы заказать выполнение автотехнической экспертизы, вы + можете воспользоваться любым удобным способом. +

    + WIDGET +
    +
    sidebar
    +
    +
    + ); +} + +export { AutoTech }; diff --git a/src/views/index.ts b/src/views/index.ts index e20557b..6efa6eb 100644 --- a/src/views/index.ts +++ b/src/views/index.ts @@ -1 +1,4 @@ export * from './home'; + +//Expertise +export * from './expertise/autotech'; diff --git a/src/widgets/breadcrumbs/styles.module.scss b/src/widgets/breadcrumbs/styles.module.scss new file mode 100644 index 0000000..be4da3d --- /dev/null +++ b/src/widgets/breadcrumbs/styles.module.scss @@ -0,0 +1,74 @@ +.Container { + background-color: transparent; + background-image: linear-gradient(150deg, #23a455 60%, #58c644 80%); + + box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.5); + transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s; + margin-top: 0px; + margin-bottom: 0px; +} + +.Breadcrumbs { + margin: 0 auto; + width: rem(1540px); + padding: rem(20px) 0; + display: flex; + flex-direction: row; + justify-content: space-between; + + .Block { + display: flex; + flex-direction: column; + justify-content: center; + + .List { + display: flex; + flex-direction: row; + //gap: 12px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: $font-regular; + font-size: rem(16px); + line-height: 100%; + color: $color-white; + + &:after { + content: '/'; + padding: 0 4px; + } + + &:last-child:after { + content: ''; + } + } + } + + .Advertise { + display: flex; + flex-direction: column; + align-items: center; + + border-radius: rem(20px); + background: $color-white; + padding: rem(20px); + + .Description { + font-family: $font-roboto; + font-weight: $font-light; + font-size: rem(16px); + line-height: 100%; + color: $color-text; + } + } + +} + +.Header { + font-family: $font-roboto; + font-weight: $font-regular; + font-size: rem(48px); + line-height: 110%; + color: $color-white; +} \ No newline at end of file diff --git a/src/widgets/breadcrumbs/ui.tsx b/src/widgets/breadcrumbs/ui.tsx new file mode 100644 index 0000000..87ffe6b --- /dev/null +++ b/src/widgets/breadcrumbs/ui.tsx @@ -0,0 +1,36 @@ +import s from './styles.module.scss'; +import Link from 'next/link'; +import { ROUTES } from '@core/constants/route'; +import Image from 'next/image'; +import sberImg from '@public/images/sber-domclick.jpg'; + +type BreadcrumbsProps = { + breadcrumbs: { + name: string; + path: string; + }[]; +}; + +export default function Breadcrumbs({ breadcrumbs }: BreadcrumbsProps) { + return ( +
    +
    +
    +
      +
    • + ДИ ТРАСО +
    • +
    • + {breadcrumbs[0].name} +
    • +
    +

    {breadcrumbs[1].name}

    +
    +
    + {'Сбербанк, +

    Аккредитованая оценочная компания

    +
    +
    +
    + ); +} -- 2.49.1 From b70b2026d575320b3b57ef7131cf101441d607b6 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Tue, 1 Jul 2025 15:26:42 +0300 Subject: [PATCH 13/65] fix: add connect form --- package-lock.json | 85 ++++++++------ package.json | 3 + public/images/em-rounded-logo.png | Bin 0 -> 11608 bytes public/images/step1.png | Bin 0 -> 12376 bytes public/images/step2.png | Bin 0 -> 16262 bytes public/images/step3.png | Bin 0 -> 13833 bytes public/images/step4.png | Bin 0 -> 13629 bytes public/images/tg-rounded-logo.png | Bin 0 -> 9111 bytes public/images/wa-rounded-logo.png | Bin 0 -> 10753 bytes src/core/styles/variables.scss | 1 + src/entities/callback-form/index.ts | 1 + src/entities/callback-form/styles.module.scss | 26 +++++ src/entities/callback-form/ui.tsx | 27 +++++ src/entities/connect/index.ts | 1 + src/entities/connect/style.module.scss | 61 ++++++++++ src/entities/connect/ui.tsx | 36 ++++++ src/entities/index.ts | 6 +- src/shared/ui/button/index.ts | 1 + src/shared/ui/button/styles.module.scss | 105 ++++++++++++++++++ src/shared/ui/button/ui.tsx | 53 +++++++++ src/shared/ui/index.ts | 3 + src/shared/ui/input/index.ts | 1 + src/shared/ui/input/styles.module.scss | 98 ++++++++++++++++ src/shared/ui/input/ui.tsx | 50 +++++++++ src/shared/ui/phone-input/index.ts | 1 + src/shared/ui/phone-input/ui.tsx | 27 +++++ .../expertise/autotech/styles.module.scss | 2 +- src/views/expertise/autotech/ui.tsx | 5 +- 28 files changed, 551 insertions(+), 42 deletions(-) create mode 100644 public/images/em-rounded-logo.png create mode 100644 public/images/step1.png create mode 100644 public/images/step2.png create mode 100644 public/images/step3.png create mode 100644 public/images/step4.png create mode 100644 public/images/tg-rounded-logo.png create mode 100644 public/images/wa-rounded-logo.png create mode 100644 src/entities/callback-form/index.ts create mode 100644 src/entities/callback-form/styles.module.scss create mode 100644 src/entities/callback-form/ui.tsx create mode 100644 src/entities/connect/index.ts create mode 100644 src/entities/connect/style.module.scss create mode 100644 src/entities/connect/ui.tsx create mode 100644 src/shared/ui/button/index.ts create mode 100644 src/shared/ui/button/styles.module.scss create mode 100644 src/shared/ui/button/ui.tsx create mode 100644 src/shared/ui/index.ts create mode 100644 src/shared/ui/input/index.ts create mode 100644 src/shared/ui/input/styles.module.scss create mode 100644 src/shared/ui/input/ui.tsx create mode 100644 src/shared/ui/phone-input/index.ts create mode 100644 src/shared/ui/phone-input/ui.tsx diff --git a/package-lock.json b/package-lock.json index 07f5d04..68e6db0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "ocenka-web", "version": "0.1.0", "dependencies": { + "@maskito/core": "^3.9.1", + "@maskito/phone": "^3.9.1", + "@maskito/react": "^3.9.1", "next": "15.3.4", "nodemailer": "^7.0.3", "react": "^19.0.0", @@ -15,7 +18,6 @@ }, "devDependencies": { "@eslint/eslintrc": "^3", - "@iconify-icon/react": "^3.0.0", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", @@ -282,29 +284,6 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@iconify-icon/react": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@iconify-icon/react/-/react-3.0.0.tgz", - "integrity": "sha512-TOyzGUIfOFbmRQflMbf8k8bBGbeVAVCnvJ/rKz2SgBOV6VZLv7E9gzLvkPzfkZ2HZL+GbRtLNX/GJq2EI54OFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "iconify-icon": "^3.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/cyberalien" - }, - "peerDependencies": { - "react": ">=16" - } - }, - "node_modules/@iconify/types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", - "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", - "dev": true, - "license": "MIT" - }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.34.2", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", @@ -701,6 +680,44 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@maskito/core": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@maskito/core/-/core-3.9.1.tgz", + "integrity": "sha512-Sa3GFdgWZKRBLAVrrHbT0uI6fI8zMy2/yPvBuhxG5W4a+uYRCb9mpC52yZaUcVa7Gq4OvFIy03c53LntuXStmw==", + "license": "Apache-2.0" + }, + "node_modules/@maskito/kit": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@maskito/kit/-/kit-3.9.1.tgz", + "integrity": "sha512-r9kR4mwKz7jILUknHYpQPMBy7sXsptoOivt8S8ymf7yzTlJpfhfS+C2WiAKR24UyilhKBezC5kFR3nljKnHBCw==", + "license": "Apache-2.0", + "peer": true, + "peerDependencies": { + "@maskito/core": "^3.9.1" + } + }, + "node_modules/@maskito/phone": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@maskito/phone/-/phone-3.9.1.tgz", + "integrity": "sha512-a/pefAll5iwhdB/o/t/h+LJfUG94dt6JsQyhC7owxAzGicDq3O6qZ/fApsdNWfI7VvBc846Hd0IEb4ds5tNX/g==", + "license": "Apache-2.0", + "peerDependencies": { + "@maskito/core": "^3.9.1", + "@maskito/kit": "^3.9.1", + "libphonenumber-js": ">=1.0.0" + } + }, + "node_modules/@maskito/react": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@maskito/react/-/react-3.9.1.tgz", + "integrity": "sha512-DF125ifk8X8cye9zsPvJScaPo9I/hhVCYcIC2UrBdS3BtVgxk+/tPeA5qQWUHi7xGKNDDniYMFXqVlZaofWw4w==", + "license": "Apache-2.0", + "peerDependencies": { + "@maskito/core": "^3.9.1", + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.11", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz", @@ -3468,19 +3485,6 @@ "url": "https://github.com/sponsors/typicode" } }, - "node_modules/iconify-icon": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/iconify-icon/-/iconify-icon-3.0.0.tgz", - "integrity": "sha512-yPcnpkn8HUEUckrxxJBOer3jbGv3bqozHsLMLBRxhk3As1X76BgV2mS2a1HTNOIagR8nUs30H3qAd9GLe8Mnlg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@iconify/types": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/cyberalien" - } - }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -4120,6 +4124,13 @@ "node": ">= 0.8.0" } }, + "node_modules/libphonenumber-js": { + "version": "1.12.9", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.9.tgz", + "integrity": "sha512-VWwAdNeJgN7jFOD+wN4qx83DTPMVPPAUyx9/TUkBXKLiNkuWWk6anV0439tgdtwaJDrEdqkvdN22iA6J4bUCZg==", + "license": "MIT", + "peer": true + }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", diff --git a/package.json b/package.json index bdb7904..bae9d84 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,9 @@ "prepare": "husky" }, "dependencies": { + "@maskito/core": "^3.9.1", + "@maskito/phone": "^3.9.1", + "@maskito/react": "^3.9.1", "next": "15.3.4", "nodemailer": "^7.0.3", "react": "^19.0.0", diff --git a/public/images/em-rounded-logo.png b/public/images/em-rounded-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e25a70d7960907465f9062baf109b07d91dafcd8 GIT binary patch literal 11608 zcmV-eEvM3nP)r^L@u5Z$K`Szw;AP*JC4iXG77_> zqL*}u7)dVycW_1>H$>UjRCRy^!V*Ff2-$k6^V~mvClF$wtEyAg9q9M-sZajsO4X_J zd(OK&?T>pV{e-yW5nzTP~0B{)M zMS>%MeSm2xXeI)gUG$Y@U^DPIumN}w(`UE=xC?l|Ltfo?dSUB0uyzxfvnZx%BF#~x z{eXiN@e1JOz&v2~4w|PQ*aU1$|6N1SHfv=b2OdK_4h*D!-(DsHdt&wkrdmt~_7Uux z0(N5hngmSPUef_9fx8WVwfVE4MA@rVroVVbVH{Xv2}~_hXtA}I#Ib_o5w8Od0j2=W zz)%X1HL2FP$FNdnh2#}RYiyoC3}TmM5}-_m1aNUdA=&;rb4%k$AeV`N$RdN3#bkhq z!uuM{LL4k;1r7%00{an6Yj!)pmN37w_`MQtF@8jY3>MEQcpO-xB!_m#QzCQ};v|U^ zQ!woXM5#u)4=CDP58Q+(f!7K)Y!w457u5Ig<}8iXQl>>>iqUkzTnF&K6gV7sK??i? zSPQJM`6X~of^T2mUU+OASd9ZyOC%jAcoX7O;7DLP;M9@62ly}GkG6}6xqmQ2|H=hp z!_3TC8q<_8Ap-{?<$&XX*8>M__fR|v+={uK;vU36al!M0z1|L7kkEpd4>}8Ya|*B_;7*%M!9UUv>x!q34edQ9fYsWYZ<2W_ z;={lxz#hP(m~P-wi`zA zTaup?WqAkiLEtb#4(-P_-@v}L)badq%y*&oYC;@~^iRM^ggoV4zy-+=KkPfLbK`Rw zSo3=GQo?M+XCyiZxxA9$izNPWsiW}tI7~*Q!DfKoj5s&dUK?z>u|IFPzptZlj(yZH zP<7?Ag5wo&sYE`F_|#qp=QO z5>qx!&ggB5I2SmEkcRngVlIv%-&=f+5u9Uyo=}qL;7FVUyeBn{H#y;am3wbI_$+pJUwdK0I1F~Zqz~#nxt{p*NOuBX0A8Yq3qcc{aW_y` zr@pQltF<>j6Zi+gxxi%LdYkhU`I_Q_LU|kl4bfg1CpuZ;Q^2ulp!DyCZFF23(k!q#z8e!7>S7cQ)_a0dPW}*oSXW?V@qS@7RR`W35xV_;3KI| z)g?GLlJC27oK6^1a`@6%iFKgid|)A=RqZR3{f)%*_nkI!Dq`1YtcWI|4&bAyPxUL= zAB*IbnjumA%E@jmB1FpyZG;rtmk?lSTEIqU9 zf&CP5uCg3AuQ#tz0~Vov>R$;aW>>Y64cSCqDu4PT(tq zeB-yVKVRI9a({Cc#k5Rj52PvJgA_Wdk0R8P&*rHv`oqwu3uyQ^50}%g@P^q{K`z#`E9LuFIbGzawlJ=H3263uF zTl+z2m^~Vj0IPu;Y_0@;ts&oEJbm=dW!lsDVx-FnQ+lqp{oYc0VO8CLm3Gs77V*!( zpaa8xS*fja%sK0G7R5AAQj5eq#9I_Pi;p98QIDm5$^k-)TQ8>D=B`r5=yoKv_U0qt zOurlP94AqKLC4P9v0vH1B4?>443(z;{UaNoir@8zG+5Ts`?0OI!*Z z4RqW7-=+4#qq~g9n%|Xg2E9EUXtv()?@oOESUQc?p8Sk#q<3U8bV+=cFqvj|0~J8C z#A_ukR>XH&d-6x-mc-dnxf1(U!^MP=m!}AwK5t3BX_slNTu=Umi0>1K&>rBNVjZgw zt8zAb^BK$$h>sFR0L>hs$ulsRzWURf`bhfk=9EU*cJC$O{3s%?V|v$HbMpPyG!kzw~ZKBx$d}yNaq0`0yf*6Cj9GS`{+l3txNKI zD#IHH8tN!UR=BtsSWcJ`dMEZ>mP(lQh)uQ!1w%61A~z)>E65K-O=7zc#y>XPWUN3QZ8bx17*`FM)LtVpw3Z$1Kew;py|CuB{ zcPxy~Y3<1$DEMeP=4VEY2eyVV1N67RZw)2Mj}+TR{`+!Wag!tVLpoIEIKs@Uqtg3W zODb&>=DSIm^P{p?H*!X4t}AXLqYHrd0uS1pYWv1#o6j{Iu(C)OBi;iPfrZ7k;niSW z0rjIeLsmy9;!D6Apz1P@5Pg}S0Kde(4e>Y$L&b%=KDs@mHzsQ`f=Nin6J}k#nJ`zr zrOJ=%4-KfCr$H}oD7bp!W4CczHs7;-PT#Y1tn1mdm8BO+T$R!b|6%y#Xij~}{V2{j ztCvZ98Sx6LYhO!%Wk46^$0=X5rJ>g!$j3cHV4*Y93574H(ihumv(#n&X<(BdTKTTV zP(A6Co6n~%(Q2Ew*}nOiwAM2ojHQVRV{&Gt2XfhHg6i-kaVCj$3gSzM7gli?Ny-m( z1B;NC7e{H>NSdA41YFnJ8{aCp9CSADb}G*TOpxdx!MMGotVv*nD=aKwKij;Ih+2G(LOu{o8pKUHk& zEbTb6eYB+1R@hQ(D_lq7k6``}a4R8!U5PYFyd%o;q1N7f=|ixO#K#rsr42IW zkgyE6It@JDVsv2TrZ7w?ZUxrc{9v@qhnsW)5f`OldL`y>18{-iJzFDRS8CsV=4{=$ zpkU+&fRETLdM4jxC&5>%B0kyLmEUL1qPYIxT38se=_HIppNn`?MZn5+$J5e{4_V;P z;5!bH42_^tE@c-5uw>7Z()hmmjhCtlEeb>z>$`Y+EH6R{m`0dN(sD~ zz;c^kHoAbXbxD4L#d`@7Mwazk6=bBkjs!$}hV$lq=?-I=TdzG{0h zA!+=ak>bLF9op!=occ4vNk*_hf!%L_QSmCnFH`E_L|c1p|M%>6hl(SPRw&tBXZXED z!zhMacZ|@!4ijo#P{DuM3|xYJNvY1c%Xv#;h{!}zWXL25&5k@d@{`pKIM4+BN_avU zZAK*6Ns>^ONor|ZFSQqF?TN3JbR}Uc#c&#YAK>lty5ryXbrkBFtR9Tm+G74h*tm9x z#IbW0#Xs4W33!Tm&(I?CYQzlSM(|AyHG>H)&Tuy3gbMsB1HVY@3;HT7JgY?x?T#l# z(k#I&!;y$X1+AG3GeIqg=I!p`5KtzfpU^n*kkN`Lq9k!oYj6I35BZ^}%*JYRe5Lln z`dn}RLc)&2qlS5VR^kny`QZ%f>kH27jsGfi5AYJf@l6xCnow%}6tJAtzJk{PQEETe zHcVSBjzvbt5qzuW3P5$M&8MP>hj-<5%h9+XUXzykEQ`=@TD$W<$G*{G<1;062O4=E>{}yY|7` z39yDz+Mypf1at5E(oivFd}vr0t>I@pMaV z5|^hM;q(;X6R1z~MV63oeyPMiDdPJ?YU5do6jv@NFc9$|=4TZ~i1V})3SgH97;OdH zE~a3bl2)8N6&2>Lh$kS9OU=-o$)Hy@&}rWr@eiqn7*1|9{ClarFk&;^+MAz{>&~B? ziL_W^5n+AqG#cB*HZBVN1$bKp*L(tj0;q3vn4v#1*DLU!^P(mW0Pc+r>Wx8q0Wb&X$6Vj2;<341 z@g9hGP?=+VhwY!2+H2beHfK@Hyso@}V~Mx`@u4(4AMIYlwHA-w`_AF-`9Q=*!=HGn zq2pPdc;vYaAWOmAl=|kgh4w$F5EEq+BFteaA^9+&E4Lw$U?$SbQ*AZugJILz*HL(= z*6(ZCgRDZrbP=I6cu&TLtifJe@gasNtdjTdCG^rci{eH+I3+^=z$C$8&3h6>87b0J zk;ZcHx`y1&CQVeBf4Nr$^ukTR(wafMB;JFpPFKVwgi+KHV@DqJAeFb$*$)ub7!M~C z5HD<*#2)qk30_OsHipHE$S8^o8N|Hw2v<;UP|{f(gm_H_@7!$DWxFPA)p|wT>_`h0 zaUP*|e=JEEST#_EPpd$_R@%@qhe%T!;J|Mnlz$^QA{nGPYkNOQ2M|g$O8uMapT@~8 zjw8ey2%Fi5lT{MGs(JB1MkgxbUsDQUS2U2WCgdo$q}p^3LLzoX4d!*w&{vgD8?hBr zOnsW+$mH1y!-gNK=Xnlh7>E*9rYXREl=aN4#H^H8*=T%kz1dm-H?vndn`*d&Fz{2G zz8Yu@5$P!4ON3UdT4f8c++n)#?|^$ryk4*cV~Yt$(}DdYE{0V5S9m50AgP=?T2OFn zPrO3X;}uXedl~Aku~sf9IMD}wE3b|8sJXM4{R?*x<8Qzm+zc7exS8GUW-(1#Jbt$-WslLHNhkf2drkq0gbWh zUIE$&OpDNdS;4-k=D6S1>IV51FHMm>oU9PsRBa<^Yj1vn&ASvztZOlU12#(p-$dMA zYOkPrLd+zXovI>2sRo}`JVIrq%Ngvw8*-x3n)I4p0PLSN%u+}vJfeuY51lx)C!Ubj z)DPQPl5#dx=eyD>jrXShPqp$GVeQ(5{gEH9xWqXOz^&HotT3*jI8hs^jQA7{Fohvl zSpis)lCMu4k9+=B~5OK#=?V0t5T5dA6ZWxz$3QnTG4QDZ;Znr z+5Ibc`y)W#;AUI}s3N2jfLGSQRc!_?#Qt8f3Qz%LOcSoURelI~z)?+6xKTwEg{b3B z${iJfw-L8u??@>@DYIU#ug1!nEavD6P1Jqh2dfIj#Wdh-YGKvQFM#h9YiP!ZM2o~h zRRh_+udkM3N zrK%26f!zB7Wv{LAhqVxLt<}f|k1Tzb8B4%Qg2s9*#r^cGVX^>6Y%WKtFR;o?BtvT@ zp}t{RsfsNZS!o*Llp6e;O*Y?Ch!mlC${+{H5o#fT!Gp95Z7!)4t8bQKpAYVY!~52yjqs}xcpHCaNb zqA7vKZd6~WN$cGOEfHy(mCU9UZ@#q7rm*73Y0wTOt`#9_aV#QEB$UBaBmFj)+g>rk zUpBj1YQv^vT+=S*B$OFVtn967Nbf>AhG83BHL0;#eyLJmJtkG|U(v*LLgPcV4G*gj z|MP5<=_=G92UQy|NR+lc;WcQ;X%+s~GGbJQ5H}21xutQWry3N7ll88qr%~EBHHFpc z?%Nn){aJ2loFQo9YQ{be0xKNV*03Tmy+RGypVBtZU0@9j(c%irfDLPHS5qE+7$G%P zZHRmgiAPk1os^kK;N_~}ur?ST?W?)VNC!~a1i;nQLcs1KU~L4jn0U}n&#oKLG9oKi zJPvUquBv7Jm>R_`syVDRBz~Zl@0;5dOJYuiz`7s1A@eM9OXFxe zzi(sYrzXfX%XO^(7EP!!U@6pwRdnEUmc}3sqxxj?BiOsb|Ja}E%W@v4%(~iu%tQwb zJ^X`Y?rT)xrpsuXpK0ii(uzcsFtw?_TsMtn$hcDH+H8qjng5X~vnL@>SFJqCuIctZ zj_MM<1|II;T$_oCq{$k-)gHpbxvUX|n*e1K*#TIBCn7?dG=^!eBb%!*4P{~#H@`9y z8&XoWjP7}Cpd~Y+Sz7Z#rN+rrH)}pI+*xZur9+TXNuaXcaAPA1H&a(9Qu=@y)<-5) z$zm!RGff5+n>7XVx@Yz0!`6}TcDcnd3d1*!qB=92)Ik0QATNmpoIqtH^LXkRHGln}B^ml_qsJLro#|K@pmt>#E!w<`&0b=1P1T zYVLliT8k)Qn#B94tTbmeW=W%m5`$)?zfuC1*7Y_yVDIEvorWRHv=74hz#yui*a<+Vt4IwULmTvosc=`FIkr zL1tByM0%8vsBDp#(=@q0dz2M1NEjSZ3GvxXg%z2Kcob?@`)@RyoEv5rO|CZ|xmiaL z@x^qx!boVDJyc-!eL-wI|;LtVC?VOiH7^w}eT=)jRsn zAbSC?gD3C#-^jcr`R1W4ua@~N@UjZc=S_%j^|coozL4B#FNOWr05>=x$qqy$&2X23 zCfPfEI+oSx0#>Axc8AODML}#JS%5H4J%K@wD*Z%vltZ*@JARNe2kdPOoQ9g`ir4`4V^)qa$z3BCTu)N3fJV57~73g3P(*6du@@Yf>yZs58a&EfU{Yfeqop@d9C zmP*J-xB$4aitjoC_&OP#+1eAoxV0xfx@C$^$u{W&k?2%txIL&sP;JF@TKuZm-uNwT zX?4l5sf(}@{J@I15S&oMg9JY%D>$}k!ifEdXW}{r1lLx&oQU{ONmoj`O5z6+UrWtorMb_60BB!WYU|uQ8mg)(VS>Uejx2Du z#OiG(hraegzs;Z13(ZB%6>l=FP9la3f2H!d18-G@O$x@pH2ijiTB}+<>Ux_`5wQ;Y z7O1=dB>jDp2y?sU5c)f-@ezlBE3iLaY%h$K3EVa^;qVkYe=W8Zwz5Om{3pU9$pevE z54q}HyPVGoq@DYq!qGkAaEsPTOmiaEU@jqO-$sDycI@-8?E;7i7L5m-y4`)4PGth;7Zn3>^PpQ4p4ExhK#4O_Y z)Hf}qucremu^$G06CQs4-epg($HgpfFANX{;a8G*ZY5ZQyRq$4LB-#rDG8jIt9P4$!A#4l$>O~T7%5}vRvE2jmV>X{oHP^abc&LvUzK8e+%yq@~ zzvb5kBQ{6yb;2_4@-F=Db-<4??=)OOhV`Qjs?a2?W76n#t>O3DZgS3(hqZD+VcUV< z15C%fqG?j~8?P!tdKfAFJ1R@>Oa@MKq>3sp!rmD_415tdkC5gViMbdA{)qVq_9wT> zeZ`KQo1c{n3OMmS*q=_d@<_)*Z3X@t^HH1sP2_7!?VUr#F|hC2Sz3Ts6A0fGf?Kw~ zu4sn?UuU=mki;7^k!IE7qKX}b&4!;+8N)B&<$||V`uQst6ezZJu0_7crY&{qmr;2Y zL^&lqe{S=Bn}vz}!%}-;*d^x0jzU7jEjI54K0#Q$TMZSknRNCkCU(LZB>sM>z4M{Q zS1deRgs<6Yy?j48`T*ifsa9Qp{KxHqpWX3E&vnPQ zBHaeOT5wA9Bo@~r(n-XIjQJs9{YWK&LaR{T&3u_EyL*cZ3uRzMt}DKeh@T-%An;?` zm&|Om*#aIgY$>%DM(iV{gEAgGd}(}D*<535LOLa8kL~=YO?FuOYurB&F|cwBn7U_` zER$1hwI}cw+qai?m?phbP0`wu|FFdQz!R7^727+ntH<@t?Tsg9t;L8pSE#if!hDp( zT`5?`WfY{fCx5)e&(a6;pNnms|M54L@)^9EpQTaT3`9QH71xE+y1T8g$?zXkUQMw- z;V|>}HECYDn{WX51Y+4N(23F(mo1t&UNpUTowM_~)_Jt|*3 z6alZ4_yl8b>C$sr)T9=N3fhB#hiraYe1>J|(X+5}w-YJ`gm?$iA$8+K?Ar`qq4HS@ zS>T<5^ILoK2ag|lgSac0k9cQbrsx4~c($j1=jgOI87?CvIge1pyIQ;Qbt$JQwHJnj ze}efIR6M?@8F;(kf?Q92e(pzcG=B8;lle>XErh0yLsLv#W_wfBz$$hWkbOJm>hus# zRm72XyYezyj4uIxPvz;5Cg5bmx180nt=;*iaR}5&TV-fXqxWW;t8L%j*HNHqV5Krd z$hoZo<|59{b;Wf#yyC(FrS`)84s7+!RGx;(0fr$6FcIBsy!(bOX?cH$;;@yN2 zinL#$>=1) zV##W&Srg!1o27;yfR|zVhr1E=mU-QAlh91W%Yo}k?VS(q9@;9uHxU;D?S$Rj?<}@; z-cd>DKD_&5FSF?cwjka>#Hp>_^&w3GmbDiKv9BhSzpSFV>VycGEAgR7{7~qVl8$V> zBHm*(4rcD+xT&=#pOf@{MO-HFEy8x$-N6JlrGC}x2`R5j(;m)>Oh{!au_vA>>03Yt zaElYpE_HO?SXVXN9cLx|J>qkOg8fu=@38Aa#$F|QdwHMazQeYjnG*)800$5BSCa-YW zAL!r6<5g|ws`khA#u=ky1YahsG^sUs*tU{mC7~?khET=8-Hv!1dux)gRc5H~v}Xt0 zoJBF&J;*9cb0$)Y%^o&0B@Pq3B<xylaJ&aXpfO$P}QzU%`_!wbb$OkZ&mpVG@THcXc8b?@%0-p!o1iNI8*H%K+ z#`+X&%WdwHSZ%YOu)tvZ>CFOKFndZ&wb={UU*f=&+u0|*t|{zLHL?@gXgF=KDf;ET zZ@JWC4OsKL^O40_h>Ow(`D@tc727M{H>4Ug$Slw$z)3(K_L&TDV?E5u-+XsZytk#( z1s?(Gl?g~vKnn|Mm128gjqHoTrxThM9%I+{5k`bMqp5^$=)JdlO-uha zV!B1}Iw#B+YuYM3%kxrD-DUH|YC%QqH^?_)E&w(lPEf=-tv&IS27xO<+<^Ir&A$*@ z>j&8VWVV7+KX$ZLZ+?m*&Ow|2YzSxU>uY^FtCmuGVQU%x(4pLA0`MMCM{aT4kg3bX z1qBz|J0D5p?}7gp@Nb0LpxveTZxc`yjT!D=p$W`jI>K2p!O&gCKPr5I9E=b4% z)6-4%uTKI00zwIGqpKgvgr?c`zzvvRgMV+-m&jX|w~dWPiPqkH1iV!6&6F#=0r*go z_}adX+Ce|!Cwg9QzDe*l!G$T>e{1+~sjc(&QB&(nW05ckX_nzt3KLxBr?kN2I)1eY zN!pc|y9|F4+-Q8S64s5yuAA20{1GXrP9QYpe$a4LUt8zkNIrL$n2KC)+=O)|;v4C~ z{TGSflO){VciQN8oaB1rX3XA3vjj(29GOm_o1Jn`+d5~O(^s?uSO!ztVUXY#^%MI4 zHUsMn_sEnG%P{wX*OX!H^7g_YV^j`b5;GJrTams?NHJ~1d;s~1V%x~CdzS#~@TD>3 zAzFy^5yZK`6ik=RxlVlFa7=b1&83sD;AKdTnqaEUOkgjhshB+#rYUbva3*$2l!`6D zX6%hJj}h_M5PCdgl9csuseO#MZt>)N(*rHeM=T@|#out^uPDRTUD0X1OP$+XPdpRp zT;P2`Gv;!e&pYwTv7oueC1|Q7(j1G=AkIvKitk{5rPyBBWwU2@sY6?AFFcCMGvj( zy4mAL-B_MV5ieEfg!((eR^9Jnf3?_Nc)T9pSvRJ9?UGxzq~ID#Ij&a0QG$nNE;#z` zwLQ0tgR2n%%i=hrtWK2pGVn^m*o5=J|52>4wrb3n!l$X=?s$Tv4#ZaobzBeId*%ZA8h<^Gr)Atx`A#@t)Mry}@w4dvntfxgOJ@KRrdI#b| zghfc3fUBMGb>r*%I>v4)WK2>C-EkIllp;O?yp@oqT86oxjDNVi4s^np1QtMRPdov1 zti&e?N#YE!%<%6@_^BfvEwy!y`(DpZBSe{qnHHy}I}HyfkeL55-!|X2{fEAeLjO2~{#NF8#Z8g)+DN=V-4#8BuxP6w{GDZOqqhcS zOaKcY*Aq7(y#)A|RC`SV)?+RM{+|;{rG=g203%F&NirM>oGsBo*rT`w_&M-R?7tMp zKvl(;1ET;3pkZ9pkoNQ zEp(~-icG}XyT-`K?lCuNG1nWnfDR=Lp*Wk+9Wwwd2flA}r3TzrJfrZu$T`mKinG~B z^9dc*XAnkuHxs(Me*|1s#>*Pdh7_=(N}8PljbPP6wnNyHSK;r z7RaT3Q_FS_#XUCH09VVtwb-%yR)6gF1NhTcuO_5@3`Z-hI(yA_=A=0_DgA_TJj-oX z5IU#twY>^!wIVhl%C?6v<-{ZwNjZa8E_iwbI%jDd0m_z%BFG>jp$yPuF`mn5>|2b{zD!(a^6@JHFnqPG${Zll^^$hrka<;@&cPR4_o|WFR70(f0hv8vK7) WdIDP+kt_570000~VLK>t~y1PUg1{j8xkQV72x&@@WOIi^DNdak) zkKgylTW_8F?!D`+x6a#V?|t5j)=*O*CZHj}z`!7Wtq9k`z`%q)9vFZpk0X@J{xOdy zOiwKZ7zTRc+3&{y$5uvF1_Pruf$+{8_c6wIQ#A0zz0yphEc1NEjzCNdaaubqwGS@QTHITec}3~oAtF-wRcd=7(z&rCr97eep)>iFuh?~2 zQMebO;7mMeL05T=jt@z%1hkp1Bg6q*OR=jBGKQHM@>7h`hE%O9L+=(TJ-W>1qL;s9 zzu3$kLynOpZK$K-hYp4+$A&!rovcl~T#Gl?mabl0fwmvIj3$U&(#dv4{j+2^ZkN~^ zJV+Sv8Kc`t*f{oSKZuL8fLYh^wQC5|dyaWNoBW`XxO&04^z<|vFgIE!LOO^T z`m+hgOB$BjQCb?QOxKo40ha2mp2*ba&GaCKhTM8Q3!GYa8Ks?{$n+SF^u0#lf9AJA z;7@1I*q*F1(qheNJC<yl&TTbxT4orqi)`UlSj~+)m{SoiCF2o>M@!VA?^-$dl*^u|APo^-^6(w{rE-t< zT|2KYujtlWoRZ0`(ReEqE@r8s5|EWy57momDZzn$MCp%~_{e?lD5qo;Nl!Ro*lxo` z{Bb2K4*Mjj$18l}k|-jvs;sx-8RIlQekUT3!&G zDxCDAjH6byU?~<63pm4e^ngUC<6-cqa@`taNhklh0)6ioAv8WqLXER+?KbIRe@)d>bsHe?b|(qX>OzYz(ZE6 zn0}mLMH2fIaVuJdkfT)YHnJ0%rJC%4){15dG;W$&Lt~%gs-tB@wu;G~3wqk85CjG2 zL;1d2z&BKX3EfrsTM3-7M>)o7Brqxc1dyg>;D6u?Ec~&?W2CZ1fJOQ%X!zRZT4h2% z?SsE+EMrEyjS7jqQ>_b??~XnubfM40X9i2cGI2Ld?q%>Z8UFpDQWE>OE%Kk?Ymi^Y z^+Cl77b`>HXP-QG1_7kjw2_*0Go>|QHBK-j0n9Vk36O0dHH&8+jXEA`y=(d$*5_wK zN1e<>%sxN>C1&7|wsP3Tk*C2SB;6SXCtrx{4^ffWzY=WH;A9g8j{6-2FsWML4p%Z2 z&=+I z?ehLq6*Q}MFK2jR;|F=|nc0>yyBA+wsmOPd&S3S9+vU{ZisAZ6+;Co472~EfByQRc zd{-a9+ zL1S{BI?Yy+mW%1->Hf=hPcN0)TPErJlYBzob}$=dxba0lR3%Te3lgdz2blBSc?FVTl6Y!rEizQd8^cC=9m+0doLn^&xarcsMXZn`z9dAx zK8Q24%i1S4(kI^pt^Khbm9>BrS{#F-q-nmQ4(u@GpnZ2!f`w2}&lh3Np+BK5R-TY5 zsb~Gsb2@bt+@#X9)-#PWIMLILTX@97v9&|Fs5>cd8C_~;1k8wC#dzpJK)5zm-gb@% zPipJt*Z>d;r??K5-yp-|jis^^h&Z8tjLtrqTg+KqVJ-$Mq|Su#Uq4J)DD?i(Gz@2X zP#5x{9!4eMRuH;L87CFVO4o4F|IIttUQmCyBQf*J6+1QDnW`lbcV)QEJDaBbWIZ`9 z5R=vHBb?*rvGd{0;nHU_ znrp~+Ha`qs6mwJvTJXECmp!7E{W+GbKHg`yI77VTjvpZxGjjyvcNmUN!cU4KfU_0y zHIU-i9j~a{rX_$TPZwOH09q7>FWC9`AvF0|pq^I)q?w!`*gKzxQ@;8T4h+z8<2zYf zzm?`S0aL^0@+|Pcp#+6MbxnfKgFzB@A1At~_`s>_i3*ajz=IM8AMW*Z0|nggxtgNN zhs%Iai-tF*U3>Aik@!inL4r@vP$-Qx6khw2Y(HTeZ&SLRou4OLgO*?D}lfU1>4c>K7= zq&h3Q$GG}VnTphSoNd&)ozc!EAZ&eM@-I9wlSv5U5D|G{>NQ)`;jfInXSE)IOxKt$ zw7Fwjx9Il+Lyji=N%~3lOqT<6cZ^E7eI{Q0o|`BpQ}>yipk%nesOPG`y0JZOvF(9m zH9hRzikV4${<};Ot!Xg*Gsy3-PCS>!lM{{!gH5N495GdMkD?pFm5i02sQ@iJuI*gK zVJ+v0=F9_NBTqTQ;6<$^L>~26#4qQ9nIP&9+T>(8?+t@_BG|r1wWtRHsuhPFclgEA z>TkbV<}@-@w<`3z;j#X-#3~F2tUYWe=TO2^U|(t8pHx3U`Z&V!ooEhMXy16K2vte> zb~{{S{z;~OC^~Tq1!%GgHbei?9&Iv2c~imJc#HWK-E!zV{`%(_O|(u(yit+#c>%1m zUx&z};{@VrpUlRnaKDq#gE3QryIO{%B-x}AMTqx;Qu4(L7J5y@8|*-!{A6nL)xhrY z?)>{6*1oK8%{OQ0D#vqK12gx)VxR4CXb<_kc5ZB_h~f^sRPpO}*wj;?=(|}eED_

    <3r?Mx{;#S^$)R}BHrsImH{ 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 literal 0 HcmV?d00001 diff --git a/public/images/step2.png b/public/images/step2.png new file mode 100644 index 0000000000000000000000000000000000000000..462c61ef67d1807d31838d56043ea85f90c59edf GIT binary patch literal 16262 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 literal 0 HcmV?d00001 diff --git a/public/images/step3.png b/public/images/step3.png new file mode 100644 index 0000000000000000000000000000000000000000..7e873d1ea8f02032f9179ba814164cf0eda55af0 GIT binary patch literal 13833 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

    Zt76Rhk>$?#K&@iD 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 BZPfq( literal 0 HcmV?d00001 diff --git a/public/images/step4.png b/public/images/step4.png new file mode 100644 index 0000000000000000000000000000000000000000..26492e72f502b9b3ad6ee17077f95bd8fc09a54d GIT binary patch literal 13629 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 P00000NkvXXu0mjf;;aeZ literal 0 HcmV?d00001 diff --git a/public/images/tg-rounded-logo.png b/public/images/tg-rounded-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..711b983c17053c1a922f89231c054fe476d4178e GIT binary patch literal 9111 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 V#)cM^m+Alj002ovPDHLkV1kaSiFyD4 literal 0 HcmV?d00001 diff --git a/public/images/wa-rounded-logo.png b/public/images/wa-rounded-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..97823c18fa5d78254b6c537326d2d663b60eadc5 GIT binary patch literal 10753 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 +

    Узнать точную стоимость и срок экспертизы

    +
    + + + + +
    + ); +} + +export { CallbackForm }; diff --git a/src/entities/connect/index.ts b/src/entities/connect/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/entities/connect/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/entities/connect/style.module.scss b/src/entities/connect/style.module.scss new file mode 100644 index 0000000..ddf8895 --- /dev/null +++ b/src/entities/connect/style.module.scss @@ -0,0 +1,61 @@ +.Container { + display: grid; + grid-template-columns: auto 200px; + gap: 100px; +} + +.Icons { + display: flex; + flex-direction: row; + justify-content: space-around; + + .Icon { + display: flex; + flex-direction: column; + align-items: center; + + .Image { + margin-bottom: 16px; + } + + .Description { + font-family: $font-roboto; + font-weight: 400; + font-size: 16px; + line-height: 130%; + color: $color-green; + text-transform: uppercase; + } + } +} + +.CallOrder { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: 16px; + + .Title { + font-family: $font-roboto; + font-weight: 400; + font-size: 20px; + line-height: 100%; + color: $color-text; + } + + .Btn { + border-width: 1px 1px 1px 1px; + border-color: $color-green; + border-radius: 15px 15px 15px 15px; + box-shadow: 2px 2px 5px 0px $color-green; + } + + .Description { + font-family: $font-roboto; + font-weight: 300; + font-size: 14px; + line-height: 100%; + color: $color-text; + } +} \ No newline at end of file diff --git a/src/entities/connect/ui.tsx b/src/entities/connect/ui.tsx new file mode 100644 index 0000000..8c419f0 --- /dev/null +++ b/src/entities/connect/ui.tsx @@ -0,0 +1,36 @@ +import s from './style.module.scss'; +import { Button } from '@shared/ui'; +import Image from 'next/image'; +import emailImg from '@public/images/em-rounded-logo.png'; +import tgImg from '@public/images/tg-rounded-logo.png'; +import waImg from '@public/images/wa-rounded-logo.png'; + +function Connect() { + return ( +
    +
    +
    + {''} +

    WHATSAPP

    +
    +
    + {''} +

    TELEGRAM

    +
    +
    + {''} +

    EMAIL

    +
    +
    +
    +

    Звоните по телефону

    + +

    мы работаем с 08:00 до 17:00

    +
    +
    + ); +} + +export { Connect }; diff --git a/src/entities/index.ts b/src/entities/index.ts index 181c0b2..30029b8 100644 --- a/src/entities/index.ts +++ b/src/entities/index.ts @@ -1,2 +1,4 @@ -export { TopMenu } from './top-menu'; -export { BaseMenu } from './base-menu'; +export * from './top-menu'; +export * from './base-menu'; +export * from './callback-form'; +export * from './connect'; diff --git a/src/shared/ui/button/index.ts b/src/shared/ui/button/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/shared/ui/button/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/shared/ui/button/styles.module.scss b/src/shared/ui/button/styles.module.scss new file mode 100644 index 0000000..12a4e0c --- /dev/null +++ b/src/shared/ui/button/styles.module.scss @@ -0,0 +1,105 @@ +.Button { + display: flex; + align-items: center; + justify-content: center; + padding: rem(8px) rem(10px); + border-radius: rem(16px); + min-height: rem(40px); + + font-family: $font-roboto; + font-weight: $font-regular; + font-size: rem(16px); + line-height: 100%; + + transition: all 0.15s linear; + white-space: nowrap; + width: max-content; + + @include ifdesktop{ + font-size: rem(20px); + border-radius: rem(16px); + padding: rem(4px) rem(24px); + min-height: rem(48px); + } + + &_fullWidth { + width: 100%; + } + + svg { + width: rem(18px); + height: rem(18px); + //fill: var(--text-primary); + + margin-right: rem(18px); + } + + &:hover { + cursor: pointer; + box-shadow: 1px 1px 1px 0px $color-darkgray; + } + + &:active { + box-shadow: inset 1px 1px 2px 0px $color-darkgray; + } + + &:hover svg { + fill: var(--white); + } + + &_default { + background: $color-green; + color: $color-white; + } + + &_green { + background: $color-green; + color: $color-white; + } + + &_ghost { + background: transparent; + color: $color-white; + border: 1px solid $color-white; + + &:hover { + cursor: pointer; + box-shadow: 0 0 0 0.2rem rgb(76 175 80 / 50%); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + } + + &:active { + box-shadow: 0 0 0 0.2rem rgb(76 175 80 / 50%); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + } + + &:hover svg { + fill: var(--white); + } + } + + &_white { + background: $color-white; + color: $color-green; + border: 1px solid $color-green; + + &:hover { + cursor: pointer; + box-shadow: 0 0 0 0.2rem rgb(76 175 80 / 50%); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + } + + &:active { + box-shadow: 0 0 0 0.2rem rgb(76 175 80 / 50%); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + } + + &:hover svg { + fill: var(--white); + } + } + + &_disabled { + cursor: not-allowed; + } +} \ No newline at end of file diff --git a/src/shared/ui/button/ui.tsx b/src/shared/ui/button/ui.tsx new file mode 100644 index 0000000..ffa8844 --- /dev/null +++ b/src/shared/ui/button/ui.tsx @@ -0,0 +1,53 @@ +import s from './styles.module.scss'; +import { + ButtonHTMLAttributes, + DetailedHTMLProps, + FunctionComponent, + ReactNode, + SVGProps, +} from 'react'; +import { clsx } from 'clsx'; + +type ButtonProps = { + className?: string; + children?: ReactNode; + disabled?: boolean; + Icon?: FunctionComponent>; + onClick?: () => void; + variant?: 'default' | 'green' | 'ghost' | 'white'; + fullWidth?: boolean; +} & DetailedHTMLProps< + ButtonHTMLAttributes, + HTMLButtonElement +>; + +function Button({ + className, + children, + onClick, + Icon, + disabled, + variant = 'default', + fullWidth = false, + ...props +}: ButtonProps) { + return ( + + ); +} + +export { Button }; diff --git a/src/shared/ui/index.ts b/src/shared/ui/index.ts new file mode 100644 index 0000000..8b6fb1a --- /dev/null +++ b/src/shared/ui/index.ts @@ -0,0 +1,3 @@ +export * from './input'; +export * from './phone-input'; +export * from './button'; diff --git a/src/shared/ui/input/index.ts b/src/shared/ui/input/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/shared/ui/input/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/shared/ui/input/styles.module.scss b/src/shared/ui/input/styles.module.scss new file mode 100644 index 0000000..6f9017b --- /dev/null +++ b/src/shared/ui/input/styles.module.scss @@ -0,0 +1,98 @@ +.Container { + position: relative; + display: block; +} + +.Input { + display: flex; + background: $color-white; + border: 1px solid $color-darkgray; + border-radius: rem(16px); + padding: rem(4px) rem(10px); + transition: border ease .5s; + + font-family: $font-roboto; + font-weight: $font-regular; + font-size: rem(16px); + line-height: 100%; + color: $color-text; + width: max-content; + + @include iftablet { + font-size: rem(16px); + } + + @include iflaptop { + font-size: rem(18px); + padding: rem(10px) rem(16px); + } + + @include ifdesktop { + font-size: rem(20px); + } + + &:focus { + border-color: $color-green; + transition: border-color ease .5s; + } + + &:hover { + border-color: $color-text; + transition: border-color ease .5s; + } + + &:focus:hover { + border-color: $color-green; + transition: border-color ease .5s; + } + + &_error { + border-color: $color-error; + } + + &_fullWidth { + width: 100%; + } + + &_ghost { + background: transparent; + color: $color-white; + border: 1px solid $color-white; + + &:focus { + //border-color: $color-orange; + border-color: $color-white; + box-shadow: 0 0 0 0.2rem rgb(76 175 80 / 50%); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + } + + &:hover { + border-color: $color-white; + box-shadow: 0 0 0 0.2rem rgb(76 175 80 / 50%); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + } + + &:focus:hover { + //border-color: $color-orange; + border-color: $color-white; + box-shadow: 0 0 0 0.2rem rgb(76 175 80 / 50%); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + } + + &::placeholder { + color: $color-white; + } + } +} + +.Error { + position: absolute; + z-index: 2; + left: rem(8px); + bottom: rem(-16px); + font-family: $font-roboto; + font-weight: $font-light; + font-size: rem(12px); + line-height: 100%; + color: $color-error; +} \ No newline at end of file diff --git a/src/shared/ui/input/ui.tsx b/src/shared/ui/input/ui.tsx new file mode 100644 index 0000000..b471341 --- /dev/null +++ b/src/shared/ui/input/ui.tsx @@ -0,0 +1,50 @@ +'use client'; + +import s from './styles.module.scss'; + +import { DetailedHTMLProps, forwardRef, InputHTMLAttributes, Ref } from 'react'; +import { clsx } from 'clsx'; + +type InputProps = { + wrapperClassName?: string; + className?: string; + fullWidth?: boolean; + variant?: 'default' | 'ghost'; + error?: string | boolean; + errorTextColor?: string; +} & DetailedHTMLProps, HTMLInputElement>; + +const Input = forwardRef(function Input( + { + className, + fullWidth = false, + variant = 'default', + error = false, + errorTextColor, + ...props + }: InputProps, + ref: Ref, +) { + return ( +
    + + {error && ( + + {error} + + )} +
    + ); +}); + +export { Input }; diff --git a/src/shared/ui/phone-input/index.ts b/src/shared/ui/phone-input/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/shared/ui/phone-input/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/shared/ui/phone-input/ui.tsx b/src/shared/ui/phone-input/ui.tsx new file mode 100644 index 0000000..ef92ef6 --- /dev/null +++ b/src/shared/ui/phone-input/ui.tsx @@ -0,0 +1,27 @@ +'use client'; + +import { useMaskito } from '@maskito/react'; +import { maskitoPhoneOptionsGenerator } from '@maskito/phone'; +import metadata from 'libphonenumber-js/min/metadata'; +import { DetailedHTMLProps, InputHTMLAttributes } from 'react'; +import { Input } from '@shared/ui'; + +type PhoneInput = { + className?: string; + variant?: 'default' | 'ghost'; + error?: string | boolean; + errorTextColor?: string; + fullWidth?: boolean; +} & DetailedHTMLProps, HTMLInputElement>; + +function PhoneInput({ ...props }: PhoneInput) { + const options = maskitoPhoneOptionsGenerator({ + countryIsoCode: 'RU', + metadata, + }); + const maskedInputRef = useMaskito({ options }); + + return ; +} + +export { PhoneInput }; diff --git a/src/views/expertise/autotech/styles.module.scss b/src/views/expertise/autotech/styles.module.scss index 9edf554..86962f5 100644 --- a/src/views/expertise/autotech/styles.module.scss +++ b/src/views/expertise/autotech/styles.module.scss @@ -45,4 +45,4 @@ color: $color-text; margin-bottom: 16px; } -} \ No newline at end of file +} diff --git a/src/views/expertise/autotech/ui.tsx b/src/views/expertise/autotech/ui.tsx index b3d82d6..2b29362 100644 --- a/src/views/expertise/autotech/ui.tsx +++ b/src/views/expertise/autotech/ui.tsx @@ -1,4 +1,5 @@ import s from './styles.module.scss'; +import { CallbackForm, Connect } from '@/entities'; function AutoTech() { return ( @@ -48,7 +49,7 @@ function AutoTech() { изменен. - WIDGET +

    Документы, необходимые для экспертизы:

    Для начала работ по автомобильной экспертизе эксперту понадобятся @@ -74,7 +75,7 @@ function AutoTech() { Для того, чтобы заказать выполнение автотехнической экспертизы, вы можете воспользоваться любым удобным способом.

    - WIDGET +
    sidebar
    -- 2.49.1 From 31dd93a9e7c10016e39fb76a024cd8186e173564 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Tue, 1 Jul 2025 16:06:50 +0300 Subject: [PATCH 14/65] feat: add order-schema --- public/images/arrow.png | Bin 0 -> 756 bytes src/entities/index.ts | 1 + src/entities/order-schema/index.ts | 1 + src/entities/order-schema/styles.module.scss | 29 +++++++++++ src/entities/order-schema/ui.tsx | 52 +++++++++++++++++++ src/views/expertise/autotech/ui.tsx | 6 ++- 6 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 public/images/arrow.png create mode 100644 src/entities/order-schema/index.ts create mode 100644 src/entities/order-schema/styles.module.scss create mode 100644 src/entities/order-schema/ui.tsx diff --git a/public/images/arrow.png b/public/images/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..9744c1f7a048e548ad069d7c8a84b76a57b0a38f GIT binary patch literal 756 zcmV@<+Z%I`Z&5qE_j=qZlRU`HXZ# zE4h|^Cf=|BuO%&=_*v2u55W7h)>{Ny{?U5I&f^kcMDc3OUR;wj0q2sIPQ0$}#8mLs z_e{dIWHut=62*(;KHY0(X22xr)vAbJC7qa=72vevY-VPq6a(&_iz9 zbd<=VuZ!pAxU6UAqwL%4 zUUSzTxa<`h*Z}V&{hW(;1w8h^T0?7QZi+gg*ELzY> +
    + {''} +

    Заявка на сайте

    +

    или

    +

    звонок по телефону

    +

    +7 (900) 241-34-34

    +
    +
    + {''} +
    +
    + {''} +

    Мы свяжемся

    +

    с вами

    +

    и уточним

    +

    детали

    +
    +
    + {''} +
    +
    + {''} +

    Подписываем договор,

    +

    Вы оплачиваете услуги,

    +

    предоставляете необходимые

    +

    документы

    +
    +
    + {''} +
    +
    + {''} +

    Составляем

    +

    Экспертное заключение,

    +

    вы получаете результат

    +
    + + ); +} + +export { OrderSchema }; diff --git a/src/views/expertise/autotech/ui.tsx b/src/views/expertise/autotech/ui.tsx index 2b29362..115d33c 100644 --- a/src/views/expertise/autotech/ui.tsx +++ b/src/views/expertise/autotech/ui.tsx @@ -1,5 +1,5 @@ import s from './styles.module.scss'; -import { CallbackForm, Connect } from '@/entities'; +import { CallbackForm, Connect, OrderSchema } from '@/entities'; function AutoTech() { return ( @@ -64,7 +64,9 @@ function AutoTech() {
  • паспортные данные заказчика;
  • Заказать экспертизу очень просто:

    - WIDGET + + +

    Экспертное заключение, полученный от компании «ДИ ТРАСО», будет являться официальным документом, подтверждающим результат работы -- 2.49.1 From 89d5946407572f9a35b8c40062acbf242a2dc29e Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Tue, 1 Jul 2025 16:34:01 +0300 Subject: [PATCH 15/65] fix: add related section --- .../expertise/autotech/styles.module.scss | 36 +++ src/views/expertise/autotech/ui.tsx | 210 +++++++++++------- 2 files changed, 170 insertions(+), 76 deletions(-) diff --git a/src/views/expertise/autotech/styles.module.scss b/src/views/expertise/autotech/styles.module.scss index 86962f5..72116a7 100644 --- a/src/views/expertise/autotech/styles.module.scss +++ b/src/views/expertise/autotech/styles.module.scss @@ -46,3 +46,39 @@ margin-bottom: 16px; } } + + +.Related { + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .Grid { + display: grid; + grid-template-columns: auto auto; + gap: 16px; + margin-bottom: 20px; + + .Title { + font-family: $font-roboto; + font-weight: 500; + font-size: 20px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .Description { + font-family: $font-roboto; + font-weight: 400; + font-size: 16px; + line-height: 130%; + color: $color-text; + } + } +} \ No newline at end of file diff --git a/src/views/expertise/autotech/ui.tsx b/src/views/expertise/autotech/ui.tsx index 115d33c..e021f79 100644 --- a/src/views/expertise/autotech/ui.tsx +++ b/src/views/expertise/autotech/ui.tsx @@ -3,85 +3,143 @@ import { CallbackForm, Connect, OrderSchema } from '@/entities'; function AutoTech() { return ( -

    -
    -
    -

    - При возникновении ситуаций, возникающих в результате ДТП - (дорожно-транспортных происшествий), для решения наиболее сложных - проблем, требуется проведение специальной автоэкспертизы, - позволяющей реализовать право водителя на получение страховки. В - судебной практике нередки случаи, когда независимая техническая - экспертиза значительно выгоднее и эффективнее, чем автотехническая - экспертиза, проводимая по инициативе страховой компании. Это вполне - понятно, поскольку страховые компании стремятся сделать выплаты - минимальными, в отличие от них независимые эксперты такой цели не - имеют. -

    -

    - Автотехническая экспертиза тек же может потребоваться в следующих - случаях: -

    -
      -
    • - В неясных и спорных ситуациях, когда правоохранительные органы не - могут точно определить виновника происшествия. -
    • -
    • - Если в аварии пострадал один и больше человек. -
    • -
    • - При изучении дела по факту аварийной ситуации на дороге. -
    • -
    • - В случае несогласия с судебным постановлением. -
    • -
    • - При рассмотрении дела о возмещении материального ущерба, который - был нанесен транспортному средству. Сумма ущерба определяется на - основании полученных в результате экспертизы данных. -
    • -
    • - При проверке со стороны таможенных органов. -
    • -
    • - Если возникает подозрение на то, что номер кузова авто был - изменен. -
    • -
    - -

    Документы, необходимые для экспертизы:

    -

    - Для начала работ по автомобильной экспертизе эксперту понадобятся - основные документы: -

    -
      -
    • - свидетельство о государственной регистрации транспортного - средства; -
    • -
    • справка с места ДТП
    • -
    • паспортные данные заказчика;
    • -
    -

    Заказать экспертизу очень просто:

    + <> +
    +
    +
    +

    + При возникновении ситуаций, возникающих в результате ДТП + (дорожно-транспортных происшествий), для решения наиболее сложных + проблем, требуется проведение специальной автоэкспертизы, + позволяющей реализовать право водителя на получение страховки. В + судебной практике нередки случаи, когда независимая техническая + экспертиза значительно выгоднее и эффективнее, чем автотехническая + экспертиза, проводимая по инициативе страховой компании. Это + вполне понятно, поскольку страховые компании стремятся сделать + выплаты минимальными, в отличие от них независимые эксперты такой + цели не имеют. +

    +

    + Автотехническая экспертиза тек же может потребоваться в следующих + случаях: +

    +
      +
    • + В неясных и спорных ситуациях, когда правоохранительные органы + не могут точно определить виновника происшествия. +
    • +
    • + Если в аварии пострадал один и больше человек. +
    • +
    • + При изучении дела по факту аварийной ситуации на дороге. +
    • +
    • + В случае несогласия с судебным постановлением. +
    • +
    • + При рассмотрении дела о возмещении материального ущерба, который + был нанесен транспортному средству. Сумма ущерба определяется на + основании полученных в результате экспертизы данных. +
    • +
    • + При проверке со стороны таможенных органов. +
    • +
    • + Если возникает подозрение на то, что номер кузова авто был + изменен. +
    • +
    + +

    Документы, необходимые для экспертизы:

    +

    + Для начала работ по автомобильной экспертизе эксперту понадобятся + основные документы: +

    +
      +
    • + свидетельство о государственной регистрации транспортного + средства; +
    • +
    • справка с места ДТП
    • +
    • паспортные данные заказчика;
    • +
    +

    Заказать экспертизу очень просто:

    - + -

    - Экспертное заключение, полученный от компании «ДИ ТРАСО», будет - являться официальным документом, подтверждающим результат работы - эксперта. В нем будет содержаться вся полная информация.. -

    -

    Как провести автотехническую экспертизу

    -

    - Для того, чтобы заказать выполнение автотехнической экспертизы, вы - можете воспользоваться любым удобным способом. -

    - +

    + Экспертное заключение, полученный от компании «ДИ ТРАСО», будет + являться официальным документом, подтверждающим результат работы + эксперта. В нем будет содержаться вся полная информация.. +

    +

    + Как провести автотехническую экспертизу +

    +

    + Для того, чтобы заказать выполнение автотехнической экспертизы, вы + можете воспользоваться любым удобным способом. +

    + +
    +
    sidebar
    -
    sidebar
    -
    -
    + +
    +
    +
    +
    +
    +
    +
    +

    + Похожие услуги, которые возможно Вас заинтересуют +

    +
    +
    +

    Трасологическая экспертиза

    +

    + Эксперты нашей компании быстро и точно восстановят картину + происшествия и дадут профессиональную оценку ситуации. Также + во время трасологической экспертизы изучаются имеющиеся + повреждения и следы на месте… +

    +
    +
    +

    Товароведческая экспертиза

    +

    + Судебная экспертиза товаров должна проводиться только + специалистом, получившим узкопрофильную квалификацию. Если Вам + необходима товароведческая экспертиза и для суда, мы готовы + подробно исследовать любой товар. Результат работы… +

    +
    +
    +

    Оценочная экспертиза

    +

    + Судебная оценочная (стоимостная) экспертиза представляет собой + вид экспертизы, главной задачей которой является определение + рыночной стоимости объектов оценки… +

    +
    +
    +

    Рецензия (Проверка) экспертизы

    +

    + Необходимость в составлении рецензии на судебную экспертизу + появляется в ситуациях, когда выводы заключения являются не + обоснованными, а квалификация и опыт эксперта не вызывают + доверия. В ходе рецензирования экспертное заключение + проверяется… +

    +
    +
    + +
    +
    +
    +
    +
    + ); } -- 2.49.1 From a8391964f173ae6bcfb1d6294be61ba7d09a2d51 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Thu, 3 Jul 2025 09:02:52 +0300 Subject: [PATCH 16/65] feat: add consultation section --- public/images/photo/yancen-yana.png | Bin 0 -> 28245 bytes src/core/styles/variables.scss | 2 +- src/feature/article/consultation/index.ts | 1 + .../article/consultation/styles.module.scss | 65 ++++++++++++++++++ src/feature/article/consultation/ui.tsx | 34 +++++++++ src/feature/article/index.ts | 2 + src/feature/article/related-articles/index.ts | 1 + .../related-articles/styles.module.scss | 42 +++++++++++ src/feature/article/related-articles/ui.tsx | 58 ++++++++++++++++ .../expertise/autotech/styles.module.scss | 35 ---------- src/views/expertise/autotech/ui.tsx | 58 ++-------------- 11 files changed, 209 insertions(+), 89 deletions(-) create mode 100644 public/images/photo/yancen-yana.png create mode 100644 src/feature/article/consultation/index.ts create mode 100644 src/feature/article/consultation/styles.module.scss create mode 100644 src/feature/article/consultation/ui.tsx create mode 100644 src/feature/article/index.ts create mode 100644 src/feature/article/related-articles/index.ts create mode 100644 src/feature/article/related-articles/styles.module.scss create mode 100644 src/feature/article/related-articles/ui.tsx diff --git a/public/images/photo/yancen-yana.png b/public/images/photo/yancen-yana.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b7bebd8abf487c1877ffa851e8ce620932d2c5 GIT binary patch literal 28245 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%0D8P+6m!9%-iQOW)?YZ5U3 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 YKU8Zre?%I5 +
    +
    +

    Бесплатная консультация специалиста

    +
    + + + + +
    +
    + {'Автоэксперт +

    Янцен Яна

    +

    Автоэксперт

    +
    +
    + + ); +} + +export { Consultation }; diff --git a/src/feature/article/index.ts b/src/feature/article/index.ts new file mode 100644 index 0000000..39b02e1 --- /dev/null +++ b/src/feature/article/index.ts @@ -0,0 +1,2 @@ +export * from './related-articles'; +export * from './consultation'; diff --git a/src/feature/article/related-articles/index.ts b/src/feature/article/related-articles/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/feature/article/related-articles/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/feature/article/related-articles/styles.module.scss b/src/feature/article/related-articles/styles.module.scss new file mode 100644 index 0000000..05311ca --- /dev/null +++ b/src/feature/article/related-articles/styles.module.scss @@ -0,0 +1,42 @@ +.Related { + .Container { + margin: 0 auto; + width: rem(1540px); + display: grid; + grid-template-columns: auto 360px; + gap: 160px; + } + + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .Grid { + display: grid; + grid-template-columns: auto auto; + gap: 16px; + margin-bottom: 20px; + + .Title { + font-family: $font-roboto; + font-weight: 500; + font-size: 20px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .Description { + font-family: $font-roboto; + font-weight: 400; + font-size: 16px; + line-height: 130%; + color: $color-text; + } + } +} \ No newline at end of file diff --git a/src/feature/article/related-articles/ui.tsx b/src/feature/article/related-articles/ui.tsx new file mode 100644 index 0000000..005f142 --- /dev/null +++ b/src/feature/article/related-articles/ui.tsx @@ -0,0 +1,58 @@ +import s from './styles.module.scss'; +import { CallbackForm } from '@/entities'; + +function RelatedArticles() { + return ( +
    +
    +
    +

    + Похожие услуги, которые возможно Вас заинтересуют +

    +
    +
    +

    Трасологическая экспертиза

    +

    + Эксперты нашей компании быстро и точно восстановят картину + происшествия и дадут профессиональную оценку ситуации. Также во + время трасологической экспертизы изучаются имеющиеся повреждения + и следы на месте… +

    +
    +
    +

    Товароведческая экспертиза

    +

    + Судебная экспертиза товаров должна проводиться только + специалистом, получившим узкопрофильную квалификацию. Если Вам + необходима товароведческая экспертиза и для суда, мы готовы + подробно исследовать любой товар. Результат работы… +

    +
    +
    +

    Оценочная экспертиза

    +

    + Судебная оценочная (стоимостная) экспертиза представляет собой + вид экспертизы, главной задачей которой является определение + рыночной стоимости объектов оценки… +

    +
    +
    +

    Рецензия (Проверка) экспертизы

    +

    + Необходимость в составлении рецензии на судебную экспертизу + появляется в ситуациях, когда выводы заключения являются не + обоснованными, а квалификация и опыт эксперта не вызывают + доверия. В ходе рецензирования экспертное заключение + проверяется… +

    +
    +
    + +
    +
    +
    +
    + ); +} + +export { RelatedArticles }; diff --git a/src/views/expertise/autotech/styles.module.scss b/src/views/expertise/autotech/styles.module.scss index 72116a7..9ef07f6 100644 --- a/src/views/expertise/autotech/styles.module.scss +++ b/src/views/expertise/autotech/styles.module.scss @@ -47,38 +47,3 @@ } } - -.Related { - .Header { - font-family: $font-roboto; - font-weight: 300; - font-size: 32px; - line-height: 130%; - color: $color-text; - margin-bottom: 16px; - } - - .Grid { - display: grid; - grid-template-columns: auto auto; - gap: 16px; - margin-bottom: 20px; - - .Title { - font-family: $font-roboto; - font-weight: 500; - font-size: 20px; - line-height: 130%; - color: $color-text; - margin-bottom: 16px; - } - - .Description { - font-family: $font-roboto; - font-weight: 400; - font-size: 16px; - line-height: 130%; - color: $color-text; - } - } -} \ No newline at end of file diff --git a/src/views/expertise/autotech/ui.tsx b/src/views/expertise/autotech/ui.tsx index e021f79..c21dc13 100644 --- a/src/views/expertise/autotech/ui.tsx +++ b/src/views/expertise/autotech/ui.tsx @@ -1,5 +1,6 @@ import s from './styles.module.scss'; import { CallbackForm, Connect, OrderSchema } from '@/entities'; +import { Consultation, RelatedArticles } from '@/feature/article'; function AutoTech() { return ( @@ -85,59 +86,10 @@ function AutoTech() {
    sidebar
    -
    -
    -
    -
    -
    -
    -
    -

    - Похожие услуги, которые возможно Вас заинтересуют -

    -
    -
    -

    Трасологическая экспертиза

    -

    - Эксперты нашей компании быстро и точно восстановят картину - происшествия и дадут профессиональную оценку ситуации. Также - во время трасологической экспертизы изучаются имеющиеся - повреждения и следы на месте… -

    -
    -
    -

    Товароведческая экспертиза

    -

    - Судебная экспертиза товаров должна проводиться только - специалистом, получившим узкопрофильную квалификацию. Если Вам - необходима товароведческая экспертиза и для суда, мы готовы - подробно исследовать любой товар. Результат работы… -

    -
    -
    -

    Оценочная экспертиза

    -

    - Судебная оценочная (стоимостная) экспертиза представляет собой - вид экспертизы, главной задачей которой является определение - рыночной стоимости объектов оценки… -

    -
    -
    -

    Рецензия (Проверка) экспертизы

    -

    - Необходимость в составлении рецензии на судебную экспертизу - появляется в ситуациях, когда выводы заключения являются не - обоснованными, а квалификация и опыт эксперта не вызывают - доверия. В ходе рецензирования экспертное заключение - проверяется… -

    -
    -
    - -
    -
    -
    -
    + + + +
    ); -- 2.49.1 From 9ef1ec461777057b9c32c24ef183d6f984605c85 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Thu, 3 Jul 2025 15:08:59 +0300 Subject: [PATCH 17/65] fix: add sidebar --- .../images/partners/edinyi-centr-zashhity.png | Bin 0 -> 4443 bytes public/images/partners/etd.png | Bin 0 -> 3557 bytes public/images/partners/jur-firma-zevs.png | Bin 0 -> 14262 bytes public/images/partners/laura-sochi.png | Bin 0 -> 4672 bytes public/images/partners/megafon.png | Bin 0 -> 2286 bytes public/images/partners/mig.png | Bin 0 -> 4317 bytes public/images/partners/mts.png | Bin 0 -> 1324 bytes public/images/partners/sah.png | Bin 0 -> 1051 bytes public/images/partners/sochi-park.png | Bin 0 -> 3378 bytes public/images/partners/sputnik.png | Bin 0 -> 2638 bytes public/images/partners/yugoriya.png | Bin 0 -> 3720 bytes src/feature/article/index.ts | 1 + src/feature/article/sidebar/index.ts | 1 + .../article/sidebar/styles.module.scss | 87 ++++++++++++++++++ src/feature/article/sidebar/ui.tsx | 47 ++++++++++ .../expertise/autotech/styles.module.scss | 1 - src/views/expertise/autotech/ui.tsx | 7 +- 17 files changed, 141 insertions(+), 3 deletions(-) create mode 100644 public/images/partners/edinyi-centr-zashhity.png create mode 100644 public/images/partners/etd.png create mode 100644 public/images/partners/jur-firma-zevs.png create mode 100644 public/images/partners/laura-sochi.png create mode 100644 public/images/partners/megafon.png create mode 100644 public/images/partners/mig.png create mode 100644 public/images/partners/mts.png create mode 100644 public/images/partners/sah.png create mode 100644 public/images/partners/sochi-park.png create mode 100644 public/images/partners/sputnik.png create mode 100644 public/images/partners/yugoriya.png create mode 100644 src/feature/article/sidebar/index.ts create mode 100644 src/feature/article/sidebar/styles.module.scss create mode 100644 src/feature/article/sidebar/ui.tsx diff --git a/public/images/partners/edinyi-centr-zashhity.png b/public/images/partners/edinyi-centr-zashhity.png new file mode 100644 index 0000000000000000000000000000000000000000..50c5b0d38d165705599ef5603580722555454cc1 GIT binary patch literal 4443 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 z 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 literal 0 HcmV?d00001 diff --git a/public/images/partners/laura-sochi.png b/public/images/partners/laura-sochi.png new file mode 100644 index 0000000000000000000000000000000000000000..2ff6c7a11ed390faae2be8e5e87ef75bfc63a398 GIT binary patch literal 4672 zcmZXYc{CJk*#Bp-k7X>0u}w(zWS5-`Mn;y9wd`ghTZk+ngBaO&Wf}VxgF$5rr3~3A z`x;{xvX$-iJN@3ybKd8i`&{RHeXq}T-OHbMq`sae109SG001y(p^%0E01$evwP?WS z@dJNk`MDvfuVbWfo}RP-1f-+?M*jcR=i=NyUw_0o@Q3*~{1^CB{WtRm`_uB@>VKX8 z?)%>ff1N*L|DB#Yf6saD|G#Oi|NmZp_WD2Yp9z0Tf8#mx2m2%b-SW32$GjeM{%UA1 zL%q9zpIcYJQ0jpbi8V5Pm(p)m!igc}oHEDeDy*A!*X)k&;lB8V*@hGv&FnPR+c19ZD+^Lnl)$aVZkmrp9&I&K85gv2UN9g?ndm z#y#j*pAx<(y51NwVz89yFfGqpgS%?Vo}7cv&$>IDz*m^|AmY9G{HNL1?{o2aS>Nkk zO?YQD?JR~d3%nRhWPXH~~t^gZh!A;c98_9ZNjcC_dY~M%b zoI!Bj9`d<mN%V%P2hG%{vs%lT)&LNuPwCXPskMVX(Y&k~(!z zVNET&CjC_$b@Jrdv(LL$OoR)XeyLHyT$la6nQkKno_J-F#0YcgS&)su3~C+!8) zD`YVIS7AZ!Sa=9ujk%xQvzHfjXCF9Bu0WWOPJX|2iM(867Vxqh~MINmf8B`na^^i z2k1F5NZVf6XP6$6Cq*4Wf4v$H9%{nF(LjX-?w*ueed;M|ktX>C zX=N!2#-)8iQ+#KNnv;lCvwR_Eb5trqah_YLB!3(-_WfFS_i~|h59SQB7f}7!>hciIts7-bF z^q1O56=29ee(&^GSTEqrTf2wse6L*LrFl-Vb<9B;aIS%>q z>{ofiyQUM6KoE#Zi z;IUWD)gz?VGjwK>sHmNKxN-b`JH-euNym&T?_z}h?V+LjM88BWnsH{k%cX_(gYou+ z9c;2gL9(!h)qN%p{VdD)ZQUoz=8X_y z8$~2^q?v@L+qu%xWM?k!G-kVmwk8>Y&@ox!q;GF9_1@OphOqWzVk4maj5=bycCJe< zG?s#Uhb!J|av9ih$(O$1AAx29v}FOBk?Q&FXK3psxZ>zf>@u~JPNb7}g` zj02Tl*z-f_g@-j6#1W-fef3NQ$}BrWYruv@jE)X)%Gtyfs<#TV-Zld#yV-eqW)t8_GzAS={ zzc=&L&D6gA<6 zYUi5hdOp5QMYxGVYVv%#&1uGP(SAepr;CtND}l0w0Qw9eFGc``FUpaYlypll%mQwx z3-+X9s@Vmi?Bk4A59yF3;bUBP_Lg7Qa6B!qrxAIXVmp~Hr_1Uf{8^QU!Ufl7v}7(u z4JLFtS}5>a1R{kDmUmFo#Amo;;dcx5W7auaPsIh7n@jKU1dIPtP1$(Jfzi8fnP;rR z)@k1$KVLS`P@kjR!?C|>Kq;baAA`u$OZjC_iyM)^;FypNUP=!onx4$k0v3$>u^Ar* zui{CmkG(6Teuluw82B(B%RP$38O6L4e;^IfiX2#1G(RZ)zL^r#gIwIn9udNcvAWRu z)0f_Au?@^QK)|7Z4=0s5p&_Zk@TrUkP~%k_-=(^tii(Ty&0U#GNjWaM7cDEO-lkz= z+1X|`+(a`@eP8)LesekUa3eLLR0Tj&=~CAU?h02VH*I$;>evs1-`x~iGw)Vr%5pLR z-+F9Pzxlxo9sBO!>kIB?12f3oH{Mcy)F1sSaP>+|`BeURh&@v?PTVtKZ$EQaI z5@+LIeHxJqJf3+9F^wGeU)G zN31JlwLfr0CBDX$qk|z#it4P$G5@&7Oa9@{f%l4WUKB)2p}a3!?LJ3###>-;dGrkIq%lw<^paJ;^lJ+B z2LozRZ8ROX^QiREKF*!D;Ga%{gr$@Cj(mQ=0O(x;<>#rOvt@(;frm@HYZZ8p=&T@J zIFo)ElK;89@k^+a=T30mLxaV=tW;lm=oSB^q5rnh_t4QNoO{bQteN9aJgXg)ofbn zH5zAs-`bLO$~FD7r~7y+3;%ZAazlpcm+b&vg+W<)MKaY-G&8|w-H_X zzRfxoYvprwOcnaLI;EPE4mWj>}nV=$g`AR*1^uv=U!K?hki=Ozs#JENm34dtbn*ec>n$ zo{-hQV{T9f9%he~j!!Vn2Cm>ixyLr5x{lpcBJWo+0g-eD0TZC=-e4Wa&RRr4T(JJ_ zdeV1p8b8q&sR2|Jezgd4p4s}#r$M(@TpqsihKt>xLXM8Xq6Q{!JYr>%SaNB;sUGt- zXPG{y&AKs4AWR|)8~WGP zOSU7m5i*n-$19iBn;&*!g&A?_e2|%JfL|z%%mA%>t6XkH%}zb2^-+A73;y8U6d|wr z86DchrF+L74kq?H2QPmsdQ2qQ1W*YQylL$Oew!-_q~| z#63KS_&FBa(Nz-9JAJ6`nZ$R&Cz-7nfo^%I;wZnU1qow$pust4TesA?BpJ5QDdlOs zDvbyc!_YjXUVXnW0hLlB2`OJycM0~QnaOD5gmUIyV2Hn`ZN_+$65Zv{|Iu-pFHejg zgQ6GA=%tNUv$>lnd`(F9Bh?rIyQP!AaLHWj5f{8o6OoO2L`wZUBK(3YkR2D49KIc$ z3hPgdOw?t`{svW1wQzD7MxeS2?OM(cAw?R7vfVGhNx&2#O*_z9@Xf807!DkR^@HRSu*vSc z($Ec&`{mi4jS&*sm8YCg?=!Tbee-w+m(=5s9YpIC6S-TfJAQvSS(`-Mc_Vqx%hU;>)H?oUIzt0e@Wo3xrIM7Qu=Htvw)0L^ zLHZF=pt8tO4#=v! zed;vqzIV9Xv@2F8aF};f{GwOE2;MOODl@-P^~lsJSGDxT^=x!CYDO+Tp-4v(1GK() znp%H^;bHJr0tZDwp*2&dlrxH%Eh;}wC-Kk=u7QgK9-kxpinL8HOIseoEXldvn32HVW{{!xlwK@O* literal 0 HcmV?d00001 diff --git a/public/images/partners/megafon.png b/public/images/partners/megafon.png new file mode 100644 index 0000000000000000000000000000000000000000..3b18a3d19460ed4e22fe83d285fe079354eedfb1 GIT binary patch literal 2286 zcmd6p`9Bkm1I8VdUgk<}GD+t8A~x4zrpS;h3gxD`qB%x{+(#j2lic?`$H?3@k-3kL z8MY|*9E;DAb$osQi|_08JkR^r=lShPu{6KK%_+vo!otFhFurYlM&_CSbCLZlor!x@ zXLxOCW@C6p7L4=%k3u&vptDLU!Pe&YSk4^^&Yv=h#4dL7?k)kc5_MV)VZ@=S{>Gqa zTTm%xqdII=Lsj~v*HaTq7exozw34%(92CTDxQ!QO{q15|nJQNzvF}={T&z^AlENsn ze?{Lx&hl7`n0rK(sGVZ?&d3}mSFLG+Lq71qm$U z$oLyisfl#*(Z7Lg#`jxy;D7NRH%(~v3e2^{wa)1~D_ z`|L8!5%vt(`soFe^TBzAA5TmI(4_uLlYsk%kHY3bFqp)(XI?e{HuxzX0$^8c7Lm<4~j zWN;Ckx2}CH{Oep#W(e@^&OQOZ;N59u-C5l1Sh%$RF_|GkKs7wNG*fkhQs3d)F*32~ zPFR`h12PNqW^_t}!WVou$S}UvxOi`8(Uo=+Q7*oEFm|MZVC}G1x&QEYg&bWnqoSUD zS~>g9EN&u{8#=?9D)1&;$Sf*pYUrKHHQ}}JC|UWr$25M)UI}PJ@<9Tc9hH>mnXy&E z6)`_a$zOMFQMQ5exp5qo=pg{;{yeN0$se{*S---Ee#)dVfuXPKroV+b~_lES7h`F+5a`-7&=t7pwx!HedtvF#0&w`7kpp@AZZDX_p zBbAiC!P^vDFG$zM3LK=@TOAnqv*#C4O>#!&({NDFj4XL-?ycAvf>(?qK2V(@^`k`C zedKvyXfeONE|k%y+%|D8Bo~Lwd&)6wicdXwa2up3e0KHWkI!3^Wt(gbgF(q_a=dOiG@Au zixgMwOB&>nBa^3KZ2f{B$3VlLI78pxuGeKDL6pg<>l%+~-;mWRwUPn0P&aZD+1!H? zc*;d{B9Th1RJ9sBzK$(G&p&4ig=vgnI2Koxu#!x@Qwr0LSRhCkN+$XXWWGr?PBHXG zwO%w8-|OG$<UxQA1IzK^2AUtEzzqBn#D6?1&S@qaSuN zxrH5yiyg(hq&xWt9}!dNm;Nn<>%;}0?An>zE}J1PmY2PWz)axo7j!;G|#w|s-pcFcS`bYMNW&@}zE<62{l zMCb0mhOFJN1Zjr_y=A}qUdczvN z@ri?$+okIE1}14KW8m3CEtu+o0*`f3B$9q))Mi}fY8PfBRLod^=R%t}MY`MLt*Vo> z=CSl0Q`(k%2r>E}=8Lh`{&r|Y><6O<`}vUOb!V@nG{aq;uRecl76v0Eh|0hnlK@!t zq?&KVUE6K&+zr~0YgDV@BE8@{j`Kn#4o`?WH$Ygr{7iJe`C%S8+v)YuCL}*2Y4zh1 zoA%L_ERaf40BM@+L7G)oFIiSE-Wyo>BrJt7mLG1N1p`Jo!APV>mnjYTP66m!)+2<9 ze3cO&Dmv+Rah7Z&vpe(SJ%QRzrWf}NUmZu1h*hx|d>fPp(A-OaO#v9oyVd0-^4+V^ zBYik258-x00AiI*VIN*gKygV*?d}a{-+OZY_Oprp-+y>eZ_|!c%h+*a*MoEzHW#Lx zcmpI(6upy)QZ&;_R_$#F6D5hMLxfE7&MVon*wVPItil+}vJgtq(m>3WuSem4)%~Ay zMh2v?OT&$g-(spZLt1ZQ0oQqLAZ4_$=GxTH7T5QnXhc>_q#OD`Eyl_#AF()Yl=q@A zGc!B|tliw*3u}&xX%l7Q02bc9_CdBofzWEOz&7)0Rd167GGsH+l*&ID$9t!xZ*dF9 zjjV=0y#jDsDOW0-`RuK%H^5Fl_i3elW)`tT_6BkR+H2Ojbi&*~78$dRx=N{3Mq63O zU=-S-YvXR7Kg-7-3&RlA>BWQ?jLw)eFmWQ{*Zh1M&{SgqY(}LUls&`fBGf@ ztxTwQ30VEV33#flLxiyQVYHEb$6EC%OeFF|_ldHUCdDu3`%WGCLH1uZp9=*@JwLId Q{~Z^Eq51751DDwU0=I8)bN~PV literal 0 HcmV?d00001 diff --git a/public/images/partners/mig.png b/public/images/partners/mig.png new file mode 100644 index 0000000000000000000000000000000000000000..cc97048aadb4ca6c501389d2c9d7d6af19936f14 GIT binary patch literal 4317 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 literal 0 HcmV?d00001 diff --git a/public/images/partners/sah.png b/public/images/partners/sah.png new file mode 100644 index 0000000000000000000000000000000000000000..eae3728cf745644830e55d5be0735e9273e3e6df GIT binary patch literal 1051 zcmeAS@N?(olHy`uVBq!ia0vp^PC%^7!3-ibd_#fMv;dzFS0Md==Ac793+L?uy3DX7 z$S;`TlJM{2PjBvCx4cX5>~@pcHOvn;XQ(TFeRHrx;%-!kEc>Yi{4bjle7WB{On1$< z{y0%v;2$Fc12eOyi(`n#@wZp67cDjrVSB(V;bVT3QMyC(UFzgN@BbHRD{f%9d2?=O z{`cJ-5H&J z?XRD3i3F^Dn zMNi%H!vE(%hUA*2m-R=aip?(>e(HD;^eV<@`sUrNn{~6q_PtK!_vPMvX6vpuy_+v= zKD60yqxim`2Y%J$c~tQi9k_8zbie0B={Fqf-uw`sROnH4>_##->qhcfq4@zi3))7l08a{hQ9lmfy!uAO?O z$cw#`zc5bDXr3~Iha*GGE%JfKBt5ru;mK1RmH8j#|5A@Wb7(`r#77` zXxJ5__vn1=8MeSUMejN1SI@M(>lJpP=jtuaw{OJ6&Ms-VXmelKO}Cv-I$_uHRrcm7 z%G?Fa9~3V~Tw|-cYGOLu?bD`@#cwp5x3k%F8RQ<6z4NzPZb$D%X@@U&{MXItZI)47 z_FK-yF0beB*PYEwGhV%39dKNC0jIE+@?)-uzW(YJnJ zqO|wim#sS-tj=wFS2Sa`pW1XMjrN$eC)F;#{i#;Kkn-o^&*NWgRi*dGe{J?vexnEMVq3}dYw7D zaMKzU&okQAle3!cZ(FtAB;n4EQ8{=e>l`TTD)Hyn-o RQ~}IO44$rjF6*2UngHO8{P+L> literal 0 HcmV?d00001 diff --git a/public/images/partners/sochi-park.png b/public/images/partners/sochi-park.png new file mode 100644 index 0000000000000000000000000000000000000000..ea3eb32a9d0e5d76ddc74aa1913424714d27e9e1 GIT binary patch literal 3378 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 A^#A|> literal 0 HcmV?d00001 diff --git a/public/images/partners/sputnik.png b/public/images/partners/sputnik.png new file mode 100644 index 0000000000000000000000000000000000000000..1edc3983ffb7cf55e66fedf73904a469dc9c6430 GIT binary patch literal 2638 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 mV4bk)Do^>siV5_CmGLLAy5q_E$PX+40000 +
    +

    Срок выполнения:

    +

    от 3 дней

    +

    + Наш эксперт свяжется с вами для уточнения обстоятельств дела и + определения точной стоимости. +

    +

    Оставьте заявку или позвоните по телефону

    + +

    +7 (900) 241-34-34

    +
    +
    +

    Сопутствующие экспертизы

    +
      +
    • Трасологическая
    • +
    • Оценочная
    • +
    • Товароведческая
    • +
    • Рецензирование (проверка)
    • +
    +
    +
    +

    Наши гарантии

    +
      +
    • + Эксперты компании являются членами Саморегулируемой организации + судебных экспертов +
    • +
    • + Деятельность компании застрахована на 60 000 000 рублей +
    • +
    • + Экспертизы выполняются в соответствии с Федеральными + Законодательными Актами +
    • +
    +
    + + ); +} + +export { Sidebar }; diff --git a/src/views/expertise/autotech/styles.module.scss b/src/views/expertise/autotech/styles.module.scss index 9ef07f6..86962f5 100644 --- a/src/views/expertise/autotech/styles.module.scss +++ b/src/views/expertise/autotech/styles.module.scss @@ -46,4 +46,3 @@ margin-bottom: 16px; } } - diff --git a/src/views/expertise/autotech/ui.tsx b/src/views/expertise/autotech/ui.tsx index c21dc13..7b2b7a8 100644 --- a/src/views/expertise/autotech/ui.tsx +++ b/src/views/expertise/autotech/ui.tsx @@ -1,6 +1,7 @@ import s from './styles.module.scss'; import { CallbackForm, Connect, OrderSchema } from '@/entities'; -import { Consultation, RelatedArticles } from '@/feature/article'; +import { Consultation, RelatedArticles, Sidebar } from '@/feature/article'; +import { Button } from '@shared/ui'; function AutoTech() { return ( @@ -83,7 +84,9 @@ function AutoTech() {

    -
    sidebar
    + -- 2.49.1 From 62e06873589041fc84eefb3177c8852b4cf667c2 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Thu, 3 Jul 2025 16:26:00 +0300 Subject: [PATCH 18/65] refactor: create article model --- public/svg/rotated-lines.svg | 1 + src/core/types/expert.ts | 7 +++ src/core/types/relatedArticles.ts | 5 ++ src/core/types/sidebar.ts | 10 +++ src/feature/article/consultation/ui.tsx | 12 ++-- src/feature/article/related-articles/ui.tsx | 54 +++++----------- src/feature/article/sidebar/ui.tsx | 63 +++++++++++-------- src/views/expertise/autotech/model/expert.ts | 8 +++ .../autotech/model/relatedArticles.ts | 29 +++++++++ src/views/expertise/autotech/model/sidebar.ts | 33 ++++++++++ .../expertise/autotech/styles.module.scss | 21 +++++++ src/views/expertise/autotech/ui.tsx | 23 +++++-- 12 files changed, 191 insertions(+), 75 deletions(-) create mode 100644 public/svg/rotated-lines.svg create mode 100644 src/core/types/expert.ts create mode 100644 src/core/types/relatedArticles.ts create mode 100644 src/core/types/sidebar.ts create mode 100644 src/views/expertise/autotech/model/expert.ts create mode 100644 src/views/expertise/autotech/model/relatedArticles.ts create mode 100644 src/views/expertise/autotech/model/sidebar.ts diff --git a/public/svg/rotated-lines.svg b/public/svg/rotated-lines.svg new file mode 100644 index 0000000..ca4955a --- /dev/null +++ b/public/svg/rotated-lines.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/core/types/expert.ts b/src/core/types/expert.ts new file mode 100644 index 0000000..c2faf4d --- /dev/null +++ b/src/core/types/expert.ts @@ -0,0 +1,7 @@ +import { StaticImageData } from 'next/image'; + +export type TExpert = { + position: string; + name: string; + photo: string | StaticImageData; +}; diff --git a/src/core/types/relatedArticles.ts b/src/core/types/relatedArticles.ts new file mode 100644 index 0000000..fba493f --- /dev/null +++ b/src/core/types/relatedArticles.ts @@ -0,0 +1,5 @@ +export type TRelatedArticles = { + title: string; + description: string; + link: string; +}; diff --git a/src/core/types/sidebar.ts b/src/core/types/sidebar.ts new file mode 100644 index 0000000..f21c976 --- /dev/null +++ b/src/core/types/sidebar.ts @@ -0,0 +1,10 @@ +export type TSidebar = { + estimate: string; + relatedTitle?: string; + related?: { + title: string; + link: string; + }[]; + warrantiesTitle?: string; + warranties?: string[]; +}; diff --git a/src/feature/article/consultation/ui.tsx b/src/feature/article/consultation/ui.tsx index efa566a..ac621b7 100644 --- a/src/feature/article/consultation/ui.tsx +++ b/src/feature/article/consultation/ui.tsx @@ -1,9 +1,11 @@ import s from './styles.module.scss'; import { Button, Input, PhoneInput } from '@shared/ui'; import Image from 'next/image'; -import expertPhoto from '@public/images/photo/yancen-yana.png'; +import { TExpert } from '@core/types/expert'; -function Consultation() { +type ConsultationProps = TExpert; + +function Consultation({ name, position, photo }: ConsultationProps) { return (
    @@ -22,9 +24,9 @@ function Consultation() {
    - {'Автоэксперт -

    Янцен Яна

    -

    Автоэксперт

    + {`${position} +

    {name}

    +

    {position}

    diff --git a/src/feature/article/related-articles/ui.tsx b/src/feature/article/related-articles/ui.tsx index 005f142..d9de3d5 100644 --- a/src/feature/article/related-articles/ui.tsx +++ b/src/feature/article/related-articles/ui.tsx @@ -1,7 +1,13 @@ import s from './styles.module.scss'; +import Link from 'next/link'; +import { TRelatedArticles } from '@core/types/relatedArticles'; import { CallbackForm } from '@/entities'; -function RelatedArticles() { +type RelatedArticlesProps = { + related: TRelatedArticles[]; +}; + +function RelatedArticles({ related }: RelatedArticlesProps) { return (
    @@ -10,42 +16,16 @@ function RelatedArticles() { Похожие услуги, которые возможно Вас заинтересуют
    -
    -

    Трасологическая экспертиза

    -

    - Эксперты нашей компании быстро и точно восстановят картину - происшествия и дадут профессиональную оценку ситуации. Также во - время трасологической экспертизы изучаются имеющиеся повреждения - и следы на месте… -

    -
    -
    -

    Товароведческая экспертиза

    -

    - Судебная экспертиза товаров должна проводиться только - специалистом, получившим узкопрофильную квалификацию. Если Вам - необходима товароведческая экспертиза и для суда, мы готовы - подробно исследовать любой товар. Результат работы… -

    -
    -
    -

    Оценочная экспертиза

    -

    - Судебная оценочная (стоимостная) экспертиза представляет собой - вид экспертизы, главной задачей которой является определение - рыночной стоимости объектов оценки… -

    -
    -
    -

    Рецензия (Проверка) экспертизы

    -

    - Необходимость в составлении рецензии на судебную экспертизу - появляется в ситуациях, когда выводы заключения являются не - обоснованными, а квалификация и опыт эксперта не вызывают - доверия. В ходе рецензирования экспертное заключение - проверяется… -

    -
    + {related.map(({ title, description, link }, index) => ( +
    +

    + {title} +

    +

    + {description} +

    +
    + ))}
    diff --git a/src/feature/article/sidebar/ui.tsx b/src/feature/article/sidebar/ui.tsx index 9907630..43a02fb 100644 --- a/src/feature/article/sidebar/ui.tsx +++ b/src/feature/article/sidebar/ui.tsx @@ -1,12 +1,22 @@ import s from './styles.module.scss'; +import Link from 'next/link'; import { Button } from '@shared/ui'; +import { TSidebar } from '@core/types/sidebar'; -function Sidebar() { +type SidebarProps = TSidebar; + +function Sidebar({ + estimate = '3', + relatedTitle, + related, + warrantiesTitle, + warranties, +}: SidebarProps) { return (

    Срок выполнения:

    -

    от 3 дней

    +

    от {estimate} дней

    Наш эксперт свяжется с вами для уточнения обстоятельств дела и определения точной стоимости. @@ -15,31 +25,30 @@ function Sidebar() {

    +7 (900) 241-34-34

    -
    -

    Сопутствующие экспертизы

    -
      -
    • Трасологическая
    • -
    • Оценочная
    • -
    • Товароведческая
    • -
    • Рецензирование (проверка)
    • -
    -
    -
    -

    Наши гарантии

    -
      -
    • - Эксперты компании являются членами Саморегулируемой организации - судебных экспертов -
    • -
    • - Деятельность компании застрахована на 60 000 000 рублей -
    • -
    • - Экспертизы выполняются в соответствии с Федеральными - Законодательными Актами -
    • -
    -
    + {related && ( +
    +

    {relatedTitle}

    +
      + {related?.map(({ title, link }, index) => ( +
    • + {title} +
    • + ))} +
    +
    + )} + {warranties && ( +
    +

    {warrantiesTitle}

    +
      + {warranties.map((warranty, index) => ( +
    • + {warranty} +
    • + ))} +
    +
    + )}
    ); } diff --git a/src/views/expertise/autotech/model/expert.ts b/src/views/expertise/autotech/model/expert.ts new file mode 100644 index 0000000..888ed8c --- /dev/null +++ b/src/views/expertise/autotech/model/expert.ts @@ -0,0 +1,8 @@ +import { TExpert } from '@core/types/expert'; +import expertPhoto from '@public/images/photo/yancen-yana.png'; + +export const expertData: TExpert = { + name: 'Янцен Яна', + position: 'Автоэксперт', + photo: expertPhoto, +}; diff --git a/src/views/expertise/autotech/model/relatedArticles.ts b/src/views/expertise/autotech/model/relatedArticles.ts new file mode 100644 index 0000000..c23209c --- /dev/null +++ b/src/views/expertise/autotech/model/relatedArticles.ts @@ -0,0 +1,29 @@ +import { TRelatedArticles } from '@core/types/relatedArticles'; +import { ROUTES } from '@core/constants/route'; + +export const relatedArticlesData: TRelatedArticles[] = [ + { + title: 'Трасологическая экспертиза', + description: + 'Эксперты нашей компании быстро и точно восстановят картину происшествия и дадут профессиональную оценку ситуации. Также во время трасологической экспертизы изучаются имеющиеся повреждения и следы на месте…', + link: ROUTES.EXPERTIZA_TRASOLOGIA, + }, + { + title: 'Оценочная экспертиза', + description: + 'Судебная оценочная (стоимостная) экспертиза представляет собой вид экспертизы, главной задачей которой является определение рыночной стоимости объектов оценки…', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Товароведческая экспертиза', + description: + 'Судебная экспертиза товаров должна проводиться только специалистом, получившим узкопрофильную квалификацию. Если Вам необходима товароведческая экспертиза и для суда, мы готовы подробно исследовать любой товар. Результат работы…', + link: ROUTES.EXPERTIZA_TOVAR, + }, + { + title: 'Рецензия (Проверка) экспертизы', + description: + 'Необходимость в составлении рецензии на судебную экспертизу появляется в ситуациях, когда выводы заключения являются не обоснованными, а квалификация и опыт эксперта не вызывают доверия. В ходе рецензирования экспертное заключение проверяется…', + link: ROUTES.EXPERTIZA_RECENZII, + }, +]; diff --git a/src/views/expertise/autotech/model/sidebar.ts b/src/views/expertise/autotech/model/sidebar.ts new file mode 100644 index 0000000..4cc179b --- /dev/null +++ b/src/views/expertise/autotech/model/sidebar.ts @@ -0,0 +1,33 @@ +import { TSidebar } from '@core/types/sidebar'; +import { ROUTES } from '@core/constants/route'; + +const sidebarData: TSidebar = { + estimate: '3', + relatedTitle: 'Сопутствующие экспертизы', + related: [ + { + title: 'Трасологическая', + link: ROUTES.EXPERTIZA_TRASOLOGIA, + }, + { + title: 'Оценочная', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Товароведческая', + link: ROUTES.EXPERTIZA_TOVAR, + }, + { + title: 'Рецензирование (проверка)', + link: ROUTES.EXPERTIZA_RECENZII, + }, + ], + warrantiesTitle: 'Наши гарантии', + warranties: [ + 'Эксперты компании являются членами Саморегулируемой организации судебных экспертов', + 'Деятельность компании застрахована на 60 000 000 рублей', + 'Экспертизы выполняются в соответствии с Федеральными Законодательными Актами', + ], +}; + +export { sidebarData }; diff --git a/src/views/expertise/autotech/styles.module.scss b/src/views/expertise/autotech/styles.module.scss index 86962f5..9861d33 100644 --- a/src/views/expertise/autotech/styles.module.scss +++ b/src/views/expertise/autotech/styles.module.scss @@ -46,3 +46,24 @@ margin-bottom: 16px; } } + +.Partners { + .Divider { + width: 100%; + display: flex; + text-align: center; + padding-top: 20px; + padding-bottom: 20px; + + .Separator { + display: flex; + width: 100%; + margin: 0 auto; + min-height: 15px; + mask-size: 20px 100%; + mask-repeat: repeat-x; + background-color: $color-green; + mask-image: url(/svg/rotated-lines.svg); + } + } +} diff --git a/src/views/expertise/autotech/ui.tsx b/src/views/expertise/autotech/ui.tsx index 7b2b7a8..99a48da 100644 --- a/src/views/expertise/autotech/ui.tsx +++ b/src/views/expertise/autotech/ui.tsx @@ -1,7 +1,9 @@ import s from './styles.module.scss'; import { CallbackForm, Connect, OrderSchema } from '@/entities'; import { Consultation, RelatedArticles, Sidebar } from '@/feature/article'; -import { Button } from '@shared/ui'; +import { sidebarData } from './model/sidebar'; +import { relatedArticlesData } from './model/relatedArticles'; +import { expertData } from './model/expert'; function AutoTech() { return ( @@ -52,7 +54,9 @@ function AutoTech() { изменен. + +

    Документы, необходимые для экспертизы:

    Для начала работ по автомобильной экспертизе эксперту понадобятся @@ -85,15 +89,22 @@ function AutoTech() {

    - - - -
    + + +
    +
    + +
    + Slider +
    + +
    +
    ); } -- 2.49.1 From a400d34a40fc81bb9f78e50c8c12748ebfb22d1b Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Fri, 4 Jul 2025 13:37:52 +0300 Subject: [PATCH 19/65] refactor: move const, types to shared --- src/app/ekspertiza/avtotehnicheskaja/page.tsx | 2 +- src/entities/base-menu/ui.tsx | 7 ++++--- src/feature/article/consultation/ui.tsx | 4 ++-- src/feature/article/related-articles/ui.tsx | 2 +- src/feature/article/sidebar/ui.tsx | 2 +- src/{core/constants => shared/const}/menu.ts | 9 ++------- src/{core/constants => shared/const}/route.ts | 0 src/{core => shared}/types/expert.ts | 0 src/shared/types/menu.ts | 5 +++++ src/{core => shared}/types/relatedArticles.ts | 0 src/{core => shared}/types/sidebar.ts | 0 src/views/expertise/autotech/model/expert.ts | 2 +- src/views/expertise/autotech/model/relatedArticles.ts | 4 ++-- src/views/expertise/autotech/model/sidebar.ts | 4 ++-- src/widgets/breadcrumbs/ui.tsx | 2 +- src/widgets/footer/ui.tsx | 4 ++-- src/widgets/partners/index.ts | 0 src/widgets/partners/styles.module.scss | 0 src/widgets/partners/ui.tsx | 0 19 files changed, 24 insertions(+), 23 deletions(-) rename src/{core/constants => shared/const}/menu.ts (98%) rename src/{core/constants => shared/const}/route.ts (100%) rename src/{core => shared}/types/expert.ts (100%) create mode 100644 src/shared/types/menu.ts rename src/{core => shared}/types/relatedArticles.ts (100%) rename src/{core => shared}/types/sidebar.ts (100%) create mode 100644 src/widgets/partners/index.ts create mode 100644 src/widgets/partners/styles.module.scss create mode 100644 src/widgets/partners/ui.tsx diff --git a/src/app/ekspertiza/avtotehnicheskaja/page.tsx b/src/app/ekspertiza/avtotehnicheskaja/page.tsx index 34a8d71..e94df04 100644 --- a/src/app/ekspertiza/avtotehnicheskaja/page.tsx +++ b/src/app/ekspertiza/avtotehnicheskaja/page.tsx @@ -1,5 +1,5 @@ import { AutoTech } from '@/views'; -import { ROUTES } from '@core/constants/route'; +import { ROUTES } from '@shared/const/route'; import Breadcrumbs from '@widgets/breadcrumbs/ui'; const breadcrumbData = [ diff --git a/src/entities/base-menu/ui.tsx b/src/entities/base-menu/ui.tsx index a5e1aab..48b4d68 100644 --- a/src/entities/base-menu/ui.tsx +++ b/src/entities/base-menu/ui.tsx @@ -1,9 +1,10 @@ import s from './styles.module.scss'; import Image from 'next/image'; -import dtrLogo from '@public/images/dtr-logo-eagle.png'; -import { baseMenu, TMenu } from '@core/constants/menu'; -import { Icons } from '@shared/ui/icon'; import Link from 'next/link'; +import { Icons } from '@shared/ui/icon'; +import { baseMenu } from '@shared/const/menu'; +import { TMenu } from '@shared/types/menu'; +import dtrLogo from '@public/images/dtr-logo-eagle.png'; function BaseMenu() { const Menu = ({ list }: { list: TMenu }) => { diff --git a/src/feature/article/consultation/ui.tsx b/src/feature/article/consultation/ui.tsx index ac621b7..c1a9f03 100644 --- a/src/feature/article/consultation/ui.tsx +++ b/src/feature/article/consultation/ui.tsx @@ -1,7 +1,7 @@ import s from './styles.module.scss'; -import { Button, Input, PhoneInput } from '@shared/ui'; import Image from 'next/image'; -import { TExpert } from '@core/types/expert'; +import { TExpert } from '@/shared/types/expert'; +import { Button, Input, PhoneInput } from '@shared/ui'; type ConsultationProps = TExpert; diff --git a/src/feature/article/related-articles/ui.tsx b/src/feature/article/related-articles/ui.tsx index d9de3d5..e0e3669 100644 --- a/src/feature/article/related-articles/ui.tsx +++ b/src/feature/article/related-articles/ui.tsx @@ -1,6 +1,6 @@ import s from './styles.module.scss'; import Link from 'next/link'; -import { TRelatedArticles } from '@core/types/relatedArticles'; +import { TRelatedArticles } from '@shared/types/relatedArticles'; import { CallbackForm } from '@/entities'; type RelatedArticlesProps = { diff --git a/src/feature/article/sidebar/ui.tsx b/src/feature/article/sidebar/ui.tsx index 43a02fb..36e6c77 100644 --- a/src/feature/article/sidebar/ui.tsx +++ b/src/feature/article/sidebar/ui.tsx @@ -1,7 +1,7 @@ import s from './styles.module.scss'; import Link from 'next/link'; import { Button } from '@shared/ui'; -import { TSidebar } from '@core/types/sidebar'; +import { TSidebar } from '@shared/types/sidebar'; type SidebarProps = TSidebar; diff --git a/src/core/constants/menu.ts b/src/shared/const/menu.ts similarity index 98% rename from src/core/constants/menu.ts rename to src/shared/const/menu.ts index 20893b1..1a5c58d 100644 --- a/src/core/constants/menu.ts +++ b/src/shared/const/menu.ts @@ -1,10 +1,5 @@ -import { ROUTES } from '@core/constants/route'; - -export type TMenu = { - name: string; - link?: string; - children?: TMenu; -}[]; +import { TMenu } from '@shared/types/menu'; +import { ROUTES } from './route'; export const baseMenu: TMenu = [ { diff --git a/src/core/constants/route.ts b/src/shared/const/route.ts similarity index 100% rename from src/core/constants/route.ts rename to src/shared/const/route.ts diff --git a/src/core/types/expert.ts b/src/shared/types/expert.ts similarity index 100% rename from src/core/types/expert.ts rename to src/shared/types/expert.ts diff --git a/src/shared/types/menu.ts b/src/shared/types/menu.ts new file mode 100644 index 0000000..35fe774 --- /dev/null +++ b/src/shared/types/menu.ts @@ -0,0 +1,5 @@ +export type TMenu = { + name: string; + link?: string; + children?: TMenu; +}[]; diff --git a/src/core/types/relatedArticles.ts b/src/shared/types/relatedArticles.ts similarity index 100% rename from src/core/types/relatedArticles.ts rename to src/shared/types/relatedArticles.ts diff --git a/src/core/types/sidebar.ts b/src/shared/types/sidebar.ts similarity index 100% rename from src/core/types/sidebar.ts rename to src/shared/types/sidebar.ts diff --git a/src/views/expertise/autotech/model/expert.ts b/src/views/expertise/autotech/model/expert.ts index 888ed8c..8a7a066 100644 --- a/src/views/expertise/autotech/model/expert.ts +++ b/src/views/expertise/autotech/model/expert.ts @@ -1,4 +1,4 @@ -import { TExpert } from '@core/types/expert'; +import { TExpert } from '@shared/types/expert'; import expertPhoto from '@public/images/photo/yancen-yana.png'; export const expertData: TExpert = { diff --git a/src/views/expertise/autotech/model/relatedArticles.ts b/src/views/expertise/autotech/model/relatedArticles.ts index c23209c..dc67dda 100644 --- a/src/views/expertise/autotech/model/relatedArticles.ts +++ b/src/views/expertise/autotech/model/relatedArticles.ts @@ -1,5 +1,5 @@ -import { TRelatedArticles } from '@core/types/relatedArticles'; -import { ROUTES } from '@core/constants/route'; +import { TRelatedArticles } from '@shared/types/relatedArticles'; +import { ROUTES } from '@shared/const/route'; export const relatedArticlesData: TRelatedArticles[] = [ { diff --git a/src/views/expertise/autotech/model/sidebar.ts b/src/views/expertise/autotech/model/sidebar.ts index 4cc179b..3c5bd4e 100644 --- a/src/views/expertise/autotech/model/sidebar.ts +++ b/src/views/expertise/autotech/model/sidebar.ts @@ -1,5 +1,5 @@ -import { TSidebar } from '@core/types/sidebar'; -import { ROUTES } from '@core/constants/route'; +import { TSidebar } from '@/shared/types/sidebar'; +import { ROUTES } from '@shared/const/route'; const sidebarData: TSidebar = { estimate: '3', diff --git a/src/widgets/breadcrumbs/ui.tsx b/src/widgets/breadcrumbs/ui.tsx index 87ffe6b..1a2d0b7 100644 --- a/src/widgets/breadcrumbs/ui.tsx +++ b/src/widgets/breadcrumbs/ui.tsx @@ -1,7 +1,7 @@ import s from './styles.module.scss'; import Link from 'next/link'; -import { ROUTES } from '@core/constants/route'; import Image from 'next/image'; +import { ROUTES } from '@shared/const/route'; import sberImg from '@public/images/sber-domclick.jpg'; type BreadcrumbsProps = { diff --git a/src/widgets/footer/ui.tsx b/src/widgets/footer/ui.tsx index 96517e2..da2388a 100644 --- a/src/widgets/footer/ui.tsx +++ b/src/widgets/footer/ui.tsx @@ -1,9 +1,9 @@ import s from './styles.module.scss'; import Link from 'next/link'; import Image from 'next/image'; -import { ROUTES, ROUTES_EXTERNAL } from '@core/constants/route'; -import dtrLogo from '@public/images/logo-dtr-white.png'; +import { ROUTES, ROUTES_EXTERNAL } from '@shared/const/route'; import { Icons } from '@shared/ui/icon'; +import dtrLogo from '@public/images/logo-dtr-white.png'; function Footer() { return ( diff --git a/src/widgets/partners/index.ts b/src/widgets/partners/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/widgets/partners/styles.module.scss b/src/widgets/partners/styles.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/widgets/partners/ui.tsx b/src/widgets/partners/ui.tsx new file mode 100644 index 0000000..e69de29 -- 2.49.1 From 628bc94280c2a27bdae110789d973133ed5932ab Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Fri, 4 Jul 2025 14:38:24 +0300 Subject: [PATCH 20/65] feat: add partners slider --- package-lock.json | 22 ++++- package.json | 3 +- public/images/partners/jur-firma-zevs.png | Bin 14262 -> 15360 bytes public/images/partners/transdekra.png | Bin 0 -> 1719 bytes .../expertise/autotech/styles.module.scss | 3 +- src/views/expertise/autotech/ui.tsx | 3 +- src/widgets/breadcrumbs/index.ts | 1 + src/widgets/index.ts | 2 + src/widgets/partners-slider/index.ts | 1 + src/widgets/partners-slider/model/slides.ts | 75 ++++++++++++++++++ .../partners-slider/styles.module.scss | 14 ++++ src/widgets/partners-slider/ui.tsx | 54 +++++++++++++ src/widgets/partners/index.ts | 0 src/widgets/partners/styles.module.scss | 0 src/widgets/partners/ui.tsx | 0 15 files changed, 173 insertions(+), 5 deletions(-) create mode 100644 public/images/partners/transdekra.png create mode 100644 src/widgets/breadcrumbs/index.ts create mode 100644 src/widgets/partners-slider/index.ts create mode 100644 src/widgets/partners-slider/model/slides.ts create mode 100644 src/widgets/partners-slider/styles.module.scss create mode 100644 src/widgets/partners-slider/ui.tsx delete mode 100644 src/widgets/partners/index.ts delete mode 100644 src/widgets/partners/styles.module.scss delete mode 100644 src/widgets/partners/ui.tsx diff --git a/package-lock.json b/package-lock.json index 68e6db0..6e0d63e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,8 @@ "next": "15.3.4", "nodemailer": "^7.0.3", "react": "^19.0.0", - "react-dom": "^19.0.0" + "react-dom": "^19.0.0", + "swiper": "^11.2.10" }, "devDependencies": { "@eslint/eslintrc": "^3", @@ -5689,6 +5690,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swiper": { + "version": "11.2.10", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.10.tgz", + "integrity": "sha512-RMeVUUjTQH+6N3ckimK93oxz6Sn5la4aDlgPzB+rBrG/smPdCTicXyhxa+woIpopz+jewEloiEE3lKo1h9w2YQ==", + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/swiperjs" + }, + { + "type": "open_collective", + "url": "http://opencollective.com/swiper" + } + ], + "license": "MIT", + "engines": { + "node": ">= 4.7.0" + } + }, "node_modules/tinyglobby": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", diff --git a/package.json b/package.json index bae9d84..ab7497d 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "next": "15.3.4", "nodemailer": "^7.0.3", "react": "^19.0.0", - "react-dom": "^19.0.0" + "react-dom": "^19.0.0", + "swiper": "^11.2.10" }, "devDependencies": { "@eslint/eslintrc": "^3", diff --git a/public/images/partners/jur-firma-zevs.png b/public/images/partners/jur-firma-zevs.png index 5870ce83274dc20a2ddd8e2b0b711f63477d1d88..ea438fd04bd28ef327fcb4f53f87e10db370b619 100644 GIT binary patch literal 15360 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 z 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 diff --git a/public/images/partners/transdekra.png b/public/images/partners/transdekra.png new file mode 100644 index 0000000000000000000000000000000000000000..aa3be9eee1bdac3dff8393c036c1bcc15555e3c4 GIT binary patch literal 1719 zcmV;o21xmdP)TFvL$yWY*J)W8sjPBWNiceMX*!T*QK^1gp?_qpi+8S+lh3oF)4s3O#Ix4M$=}%4 zCq@<36duK~MFf0`bvuaivCJHUJ000FNNkln1$yrl1+_ zoqy2OiY9e0fVKe~XLjyF(ZWY~Sr>3pG(E@Z_4dc@$Ge(Tjm1^ds#L1$8mSI7D=1bN z2umCabcUfbP(!CPq$*Ia%4+;_9h*6|SW#c5sOqY1y23gMn&EIVn*-7Q;_~$vjT0Bp zghf`TGnl9t!C0Y4G*HrMV01n+@eC=XiE1o%d5d8)kJ>ClL)oI%QfwpsQZ&xQy4aaH z7(Q2@C2a#o$u_a>IZcP4S#?Ab!n9Dok5#Y?nw{K+A&~UH^D=<_BO(P<$p)E}uU@i@gxuHoK zoH|b95VF;r)?H;A(5px7;|YY%v}5Mc9MB=r^#JEfrNLG-A>wf1L?@u(bi0V=t3!A# z?8~Vuw!x1=gL;19+#W>F;zAxxUmT()QRXXY^ik+rqPHqF4t2VcU_tjL%SuHb3EutP^xvVb1aH1L|VZ8#;IK01ZEPlJCo zZb*DGarS>3`EkRHAU`ktUsy@zU%aA$%u;yZXOf0QG&m6!G^OH3r>Qs;hT2Tn1_LLx zvzhfqcc^0S+yYOVRx6n_UzV6PX}ZYm6x%2?c=^E3whf7EahiUZKkIn$0BDu?&y5=<69<=l*_3dWzQ4q-bKj>K zgQL!qn^4%gwtYMw_ImT9tGl^0jPf(i^#Cap8u}uUDG%~#@K8h2$c0*$rn1xPO={P< zeHD3cyq@mia?{z|%3N<4$Tny>lcvhZX^m7$>#w0{vUrAOpcd4~4@mW7PV;D=76~tS z@!%Y=^qlF&{pV24qN&9ir1+Zk#^AxuY}LiDb#XSS4v2*HhlvyxeS$CqoCe z(N)?9tfi^PqTX6T6LTBG0vd*nnM*^vAzh&{S=d<;5=mr+rdz$)UW`Qak8eNO)lNvm zLZe%lqg9$_xKGoW!?AX-hK5|qQfO>+KpM?vzHOdf8Sgo`p?O4i&!v&mWk)`(t29uE z?V+(O#dyXZy27wAMN`K{3RWv_oAi29!_7=@INjKRXMq#bv}n3$3!~D2Y(ij`$(^Kl z*7FU=a7)q{EqL3yYa{M&j3smlcmrdXS?Nr}ykijGk zWBl*Ehn6|5@?$idoxk@~E2e-&07;tZ;&Kt+3&v~%3Tf`%f^AG;Mf - Slider +
    diff --git a/src/widgets/breadcrumbs/index.ts b/src/widgets/breadcrumbs/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/widgets/breadcrumbs/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/widgets/index.ts b/src/widgets/index.ts index f4c09fc..d6929da 100644 --- a/src/widgets/index.ts +++ b/src/widgets/index.ts @@ -1,2 +1,4 @@ export * from './header'; export * from './footer'; +export * from './breadcrumbs'; +export * from './partners-slider'; diff --git a/src/widgets/partners-slider/index.ts b/src/widgets/partners-slider/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/widgets/partners-slider/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/widgets/partners-slider/model/slides.ts b/src/widgets/partners-slider/model/slides.ts new file mode 100644 index 0000000..67ea41a --- /dev/null +++ b/src/widgets/partners-slider/model/slides.ts @@ -0,0 +1,75 @@ +import logoMegafon from '@public/images/partners/megafon.png'; +import logoMig from '@public/images/partners/mig.png'; +import logoECZ from '@public/images/partners/edinyi-centr-zashhity.png'; +import logoZevs from '@public/images/partners/jur-firma-zevs.png'; +import logoETD from '@public/images/partners/etd.png'; +import logoLaura from '@public/images/partners/laura-sochi.png'; +import logoMTS from '@public/images/partners/mts.png'; +import logoSAH from '@public/images/partners/sah.png'; +import logoSochiPark from '@public/images/partners/sochi-park.png'; +import logoSputnik from '@public/images/partners/sputnik.png'; +import logoYugoria from '@public/images/partners/yugoriya.png'; +import logoTransdekra from '@public/images/partners/transdekra.png'; + +export const slidesData = [ + { + id: '0', + name: '', + image: logoMegafon, + }, + { + id: '1', + name: '', + image: logoMig, + }, + { + id: '2', + name: '', + image: logoECZ, + }, + { + id: '3', + name: '', + image: logoZevs, + }, + { + id: '4', + name: '', + image: logoETD, + }, + { + id: '5', + name: '', + image: logoLaura, + }, + { + id: '6', + name: '', + image: logoMTS, + }, + { + id: '7', + name: '', + image: logoSAH, + }, + { + id: '8', + name: '', + image: logoSochiPark, + }, + { + id: '9', + name: '', + image: logoSputnik, + }, + { + id: '10', + name: '', + image: logoYugoria, + }, + { + id: '11', + name: '', + image: logoTransdekra, + }, +]; diff --git a/src/widgets/partners-slider/styles.module.scss b/src/widgets/partners-slider/styles.module.scss new file mode 100644 index 0000000..2f26668 --- /dev/null +++ b/src/widgets/partners-slider/styles.module.scss @@ -0,0 +1,14 @@ +.Slider { + display: block; + padding: 0 20px; + //flex-direction: row; + //justify-content: space-between; +} + +.Slide { + display: flex; + justify-content: center; + align-items: center; + width: 200px; + height: auto; +} \ No newline at end of file diff --git a/src/widgets/partners-slider/ui.tsx b/src/widgets/partners-slider/ui.tsx new file mode 100644 index 0000000..29fa92f --- /dev/null +++ b/src/widgets/partners-slider/ui.tsx @@ -0,0 +1,54 @@ +'use client'; + +import 'swiper/css'; +import 'swiper/css/navigation'; +import 'swiper/css/grid'; +import 'swiper/css/autoplay'; +import s from './styles.module.scss'; + +import Image from 'next/image'; +import { Swiper, SwiperSlide } from 'swiper/react'; +import { Autoplay, Grid } from 'swiper/modules'; +import { slidesData } from '@widgets/partners-slider/model/slides'; + +const swiperBreakpoints = { + 360: { + slidesPerView: 1, + spaceBetween: 10, + }, + 768: { + slidesPerView: 3, + spaceBetween: 30, + }, + 1024: { + slidesPerView: 4, + spaceBetween: 30, + }, + 1440: { + slidesPerView: 5, + spaceBetween: 30, + }, +}; + +function PartnersSlider() { + return ( + + {slidesData.map(({ id, name, image }) => ( + + {name} + + ))} + + ); +} + +export { PartnersSlider }; diff --git a/src/widgets/partners/index.ts b/src/widgets/partners/index.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/widgets/partners/styles.module.scss b/src/widgets/partners/styles.module.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/widgets/partners/ui.tsx b/src/widgets/partners/ui.tsx deleted file mode 100644 index e69de29..0000000 -- 2.49.1 From 40e010bafd935e1ad72c69e7b937257f6655efc8 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Mon, 7 Jul 2025 13:38:58 +0300 Subject: [PATCH 21/65] fix: add adaptive to header, footer --- .idea/watcherTasks.xml | 4 + src/app/ekspertiza/avtotehnicheskaja/page.tsx | 22 +--- src/entities/base-menu/styles.module.scss | 50 +++++++- src/entities/top-menu/styles.module.scss | 46 +++++-- src/entities/top-menu/ui.tsx | 6 +- .../article/consultation/styles.module.scss | 1 + .../related-articles/styles.module.scss | 1 + .../expertise/autotech/model/breadcrums.ts | 14 +++ .../expertise/autotech/styles.module.scss | 1 + src/views/expertise/autotech/ui.tsx | 4 +- src/views/home/styles.module.scss | 24 ++-- src/widgets/breadcrumbs/styles.module.scss | 2 +- src/widgets/breadcrumbs/ui.tsx | 4 +- src/widgets/footer/styles.module.scss | 112 ++++++++++++++++-- src/widgets/footer/ui.tsx | 12 +- 15 files changed, 239 insertions(+), 64 deletions(-) create mode 100644 .idea/watcherTasks.xml create mode 100644 src/views/expertise/autotech/model/breadcrums.ts diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml new file mode 100644 index 0000000..fb0d65a --- /dev/null +++ b/.idea/watcherTasks.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/app/ekspertiza/avtotehnicheskaja/page.tsx b/src/app/ekspertiza/avtotehnicheskaja/page.tsx index e94df04..10072ef 100644 --- a/src/app/ekspertiza/avtotehnicheskaja/page.tsx +++ b/src/app/ekspertiza/avtotehnicheskaja/page.tsx @@ -1,25 +1,5 @@ import { AutoTech } from '@/views'; -import { ROUTES } from '@shared/const/route'; -import Breadcrumbs from '@widgets/breadcrumbs/ui'; - -const breadcrumbData = [ - { - name: 'Экспертиза', - path: ROUTES.EXPERTIZA, - }, - { - name: 'Автотехническая экспертиза', - path: '', - }, -]; - -const PAGE_NAME = 'Автотехническая экспертиза'; export default function Page() { - return ( - <> - - - - ); + return ; } diff --git a/src/entities/base-menu/styles.module.scss b/src/entities/base-menu/styles.module.scss index d4ea4c3..b9a5340 100644 --- a/src/entities/base-menu/styles.module.scss +++ b/src/entities/base-menu/styles.module.scss @@ -4,22 +4,56 @@ .Navbar { margin: 0 auto; - width: rem(1540px); + max-width: rem(1540px); + padding: 0 10px; height: rem(100px); display: flex; flex-direction: row; align-items: center; gap: rem(20px); + @include iftablet { + padding: 0 20px; + } + + @include iflaptop { + max-width: rem(1540px); + padding: 0 28px; + height: rem(100px); + gap: rem(20px); + } + + @include ifdesktop { + padding: 0 40px; + } + + .Invite{ + display: none; + + @include iflaptop{ + display: flex; + } + } + .Nav { margin-left: auto; .Menu { - display: flex; - flex-direction: row; - align-items: center; - gap: rem(32px); + display: none; + + @include iflaptop { + display: flex; + flex-direction: row; + align-items: center; + gap: rem(16px); + } + @include iflaptop { + gap: rem(16px); + } + @include ifdesktop { + gap: rem(32px); + } } .Parent { @@ -31,9 +65,13 @@ .Row { display: flex; justify-content: space-between; - gap: rem(16px); align-items: center; + gap: rem(8px); cursor: default; + + @include ifdesktop { + gap: rem(16px); + } } & a { diff --git a/src/entities/top-menu/styles.module.scss b/src/entities/top-menu/styles.module.scss index 4065af5..b32c9f7 100644 --- a/src/entities/top-menu/styles.module.scss +++ b/src/entities/top-menu/styles.module.scss @@ -5,10 +5,21 @@ .Top { margin: 0 auto; - width: rem(1540px); + max-width: rem(1540px); + padding: 0 10px; display: flex; justify-content: space-between; + @include iftablet { + padding: 0 20px; + } + @include iflaptop { + padding: 0 28px; + } + @include ifdesktop { + padding: 0 40px; + } + .Icons { display: flex; flex-direction: row; @@ -25,14 +36,19 @@ flex-direction: row; justify-content: center; align-items: center; - gap: rem(60px); + gap: rem(10px); + + @include iftablet { + gap: rem(20px); + } + @include iflaptop { + gap: rem(40px); + } + @include ifdesktop { + gap: rem(60px); + } .Item { - font-family: $font-roboto; - font-weight: $font-bold; - font-size: rem(16px); - line-height: 100%; - color: $color-white; display: flex; flex-direction: row; justify-content: center; @@ -44,6 +60,22 @@ border-radius: 50%; background: $color-white; } + + .Description { + display: none; + font-family: $font-roboto; + font-weight: $font-bold; + font-size: rem(14px); + line-height: 100%; + color: $color-white; + + @include iftablet { + display: inline-block; + } + @include iflaptop { + font-size: rem(16px); + } + } } } } \ No newline at end of file diff --git a/src/entities/top-menu/ui.tsx b/src/entities/top-menu/ui.tsx index 53196e2..6cc0bbc 100644 --- a/src/entities/top-menu/ui.tsx +++ b/src/entities/top-menu/ui.tsx @@ -13,12 +13,14 @@ function TopMenu() {

    - spo-71@yandex.ru + spo-71@yandex.ru

    - г. Сочи, Навагинская д. 9д, оф. 35 + + г. Сочи, Навагинская д. 9д, оф. 35 +

    diff --git a/src/feature/article/consultation/styles.module.scss b/src/feature/article/consultation/styles.module.scss index fdc559b..2853782 100644 --- a/src/feature/article/consultation/styles.module.scss +++ b/src/feature/article/consultation/styles.module.scss @@ -4,6 +4,7 @@ display: grid; grid-template-columns: auto 360px; gap: 160px; + padding: 0 40px; } .Consultation { diff --git a/src/feature/article/related-articles/styles.module.scss b/src/feature/article/related-articles/styles.module.scss index 05311ca..92c6968 100644 --- a/src/feature/article/related-articles/styles.module.scss +++ b/src/feature/article/related-articles/styles.module.scss @@ -5,6 +5,7 @@ display: grid; grid-template-columns: auto 360px; gap: 160px; + padding: 0 40px; } .Header { diff --git a/src/views/expertise/autotech/model/breadcrums.ts b/src/views/expertise/autotech/model/breadcrums.ts new file mode 100644 index 0000000..4fdca66 --- /dev/null +++ b/src/views/expertise/autotech/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Автотехническая экспертиза'; + +export const breadcrumbData = [ + { + name: 'Экспертиза', + path: ROUTES.EXPERTIZA, + }, + { + name: 'Автотехническая экспертиза', + path: '', + }, +]; diff --git a/src/views/expertise/autotech/styles.module.scss b/src/views/expertise/autotech/styles.module.scss index 36d3507..31ff09f 100644 --- a/src/views/expertise/autotech/styles.module.scss +++ b/src/views/expertise/autotech/styles.module.scss @@ -4,6 +4,7 @@ display: grid; grid-template-columns: auto 360px; gap: 160px; + padding: 0 40px; } .Article { diff --git a/src/views/expertise/autotech/ui.tsx b/src/views/expertise/autotech/ui.tsx index c8048f9..34f0e35 100644 --- a/src/views/expertise/autotech/ui.tsx +++ b/src/views/expertise/autotech/ui.tsx @@ -1,14 +1,16 @@ import s from './styles.module.scss'; import { CallbackForm, Connect, OrderSchema } from '@/entities'; import { Consultation, RelatedArticles, Sidebar } from '@/feature/article'; -import { PartnersSlider } from '@/widgets'; +import { Breadcrumbs, PartnersSlider } from '@/widgets'; import { sidebarData } from './model/sidebar'; import { relatedArticlesData } from './model/relatedArticles'; import { expertData } from './model/expert'; +import { breadcrumbData } from './model/breadcrums'; function AutoTech() { return ( <> +
    diff --git a/src/views/home/styles.module.scss b/src/views/home/styles.module.scss index b758439..7325cc7 100644 --- a/src/views/home/styles.module.scss +++ b/src/views/home/styles.module.scss @@ -1,15 +1,15 @@ -.Header { - display: flex; - flex-direction: column; -} - .Container { margin: 0 auto; - width: rem(1540px); - padding: 40px 0; -} + max-width: rem(1540px); + padding: 40px 10px; -.Footer { - margin: 0 auto; - width: rem(1540px); -} \ No newline at end of file + @include iftablet{ + padding: 40px 20px; + } + @include iflaptop{ + padding: 40px 28px; + } + @include ifdesktop{ + padding: 40px; + } +} diff --git a/src/widgets/breadcrumbs/styles.module.scss b/src/widgets/breadcrumbs/styles.module.scss index be4da3d..c3222b6 100644 --- a/src/widgets/breadcrumbs/styles.module.scss +++ b/src/widgets/breadcrumbs/styles.module.scss @@ -11,7 +11,7 @@ .Breadcrumbs { margin: 0 auto; width: rem(1540px); - padding: rem(20px) 0; + padding: rem(20px) 40px; display: flex; flex-direction: row; justify-content: space-between; diff --git a/src/widgets/breadcrumbs/ui.tsx b/src/widgets/breadcrumbs/ui.tsx index 1a2d0b7..27681f7 100644 --- a/src/widgets/breadcrumbs/ui.tsx +++ b/src/widgets/breadcrumbs/ui.tsx @@ -11,7 +11,7 @@ type BreadcrumbsProps = { }[]; }; -export default function Breadcrumbs({ breadcrumbs }: BreadcrumbsProps) { +function Breadcrumbs({ breadcrumbs }: BreadcrumbsProps) { return (
    @@ -34,3 +34,5 @@ export default function Breadcrumbs({ breadcrumbs }: BreadcrumbsProps) {
    ); } + +export { Breadcrumbs }; diff --git a/src/widgets/footer/styles.module.scss b/src/widgets/footer/styles.module.scss index 7813517..c09e799 100644 --- a/src/widgets/footer/styles.module.scss +++ b/src/widgets/footer/styles.module.scss @@ -15,17 +15,37 @@ .Grid { margin: 0 auto; - width: 1540px; - padding: 40px 0 0; + max-width: 1540px; + padding: 20px 10px 20px; display: grid; - grid-template-columns: 1fr 1fr 1fr 1fr; - ///grid-template-rows: 1fr 1fr; + grid-template-columns: auto; grid-auto-columns: 1fr; - gap: 0px 0px; + gap: 40px 20px; grid-auto-flow: row; grid-template-areas: + "about" + "contacts" + "social"; + + @include iftablet { + grid-template-columns: 1fr 1fr; + grid-template-areas: + "about about" + "contacts social"; + padding: 40px 20px 0; + gap: 20px 2px; + } + @include iflaptop { + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-template-areas: "about linksa linksb linksc" "contacts contacts social social"; + padding: 40px 28px 0; + gap: 0px 0px; + } + @include ifdesktop { + padding: 40px 40px 0; + } .About { grid-area: about; @@ -46,6 +66,14 @@ .LinksA { grid-area: linksa; padding: 10px; + display: none; + @include iftablet { + } + @include iflaptop { + display: block; + } + @include ifdesktop { + } .Title { @extend %title; @@ -63,6 +91,11 @@ .LinksB { grid-area: linksb; padding: 10px; + display: none; + + @include iflaptop { + display: block; + } .Title { @extend %title; @@ -80,6 +113,11 @@ .LinksC { grid-area: linksc; padding: 10px; + display: none; + + @include iflaptop { + display: block; + } .Title { @extend %title; @@ -103,16 +141,30 @@ .Icons { display: flex; - flex-direction: row; + flex-direction: column; justify-content: center; gap: 24px; + @include iflaptop { + flex-direction: row; + justify-content: center; + } + .IconBox { display: flex; - flex-direction: column; + flex-direction: row; align-items: center; gap: 16px; + @include iftablet { + } + + @include iflaptop { + display: flex; + flex-direction: column; + align-items: center; + } + .Icon { border-radius: 50%; width: 48px; @@ -130,7 +182,13 @@ .Social { grid-area: social; - padding-left: 200px; + + @include iflaptop { + padding-left: 100px; + } + @include ifdesktop { + padding-left: 200px; + } .Title { @extend %title; @@ -151,12 +209,12 @@ .Bottom { margin: 0 auto; - width: 1540px; + max-width: 1540px; display: flex; flex-direction: row; justify-content: flex-start; align-items: center; - padding: 16px 0; + padding: 16px 10px; font-family: $font-roboto; font-weight: $font-regular; @@ -164,6 +222,40 @@ line-height: 100%; color: $color-white; + @include iftablet { + padding: 16px 20px; + } + @include iflaptop { + padding: 16px 28px; + } + @include ifdesktop { + padding: 16px 40px; + } + + .List { + display: flex; + flex-direction: column; + gap: 10px; + + @include iftablet{ + flex-direction: row; + } + } + + .ListItem { + &:after{ + padding-left: 0; + + @include iftablet { + content: '|'; + padding-left: 8px; + } + } + &:last-child:after { + content: unset; + } + } + & a { text-decoration: none; color: $color-link-hover; diff --git a/src/widgets/footer/ui.tsx b/src/widgets/footer/ui.tsx index da2388a..53d663f 100644 --- a/src/widgets/footer/ui.tsx +++ b/src/widgets/footer/ui.tsx @@ -107,9 +107,15 @@ function Footer() {
    - © ООО “ДИ ТРАСО” | - Политика конфиденциальности | - Карта сайта +
      +
    • © ООО “ДИ ТРАСО”
    • +
    • + Политика конфиденциальности +
    • +
    • + Карта сайта +
    • +
    -- 2.49.1 From f20785993abc3c18f6823f1c8af7af201519dbb4 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Mon, 7 Jul 2025 15:24:13 +0300 Subject: [PATCH 22/65] fix: add adaptive to article --- src/entities/callback-form/styles.module.scss | 22 +++++- src/entities/connect/style.module.scss | 34 +++++++- src/entities/order-schema/styles.module.scss | 79 +++++++++++++++++-- .../article/consultation/styles.module.scss | 78 ++++++++++++++++-- .../related-articles/styles.module.scss | 33 ++++++-- src/feature/article/related-articles/ui.tsx | 2 +- .../article/sidebar/styles.module.scss | 16 +++- src/feature/article/sidebar/ui.tsx | 4 +- src/shared/ui/input/styles.module.scss | 3 +- .../expertise/autotech/styles.module.scss | 25 +++++- src/views/expertise/autotech/ui.tsx | 4 +- src/widgets/breadcrumbs/styles.module.scss | 62 +++++++++++++-- src/widgets/breadcrumbs/ui.tsx | 7 +- 13 files changed, 326 insertions(+), 43 deletions(-) diff --git a/src/entities/callback-form/styles.module.scss b/src/entities/callback-form/styles.module.scss index aeb8818..47a5d7c 100644 --- a/src/entities/callback-form/styles.module.scss +++ b/src/entities/callback-form/styles.module.scss @@ -6,6 +6,13 @@ margin-bottom: 20px; display: flex; flex-direction: column; + max-width: 460px; + align-self: center; + + @include iftablet{ + max-width: unset; + align-self: unset; + } } @@ -21,6 +28,17 @@ .Form { display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 40px; + grid-template-rows: repeat(3, 1fr); + grid-template-columns: auto; + gap: 10px; + + @include iftablet{ + display: grid; + grid-template-rows: auto; + grid-template-columns: repeat(3, 1fr); + } + @include iflaptop{ + } + @include ifdesktop{ + } } \ No newline at end of file diff --git a/src/entities/connect/style.module.scss b/src/entities/connect/style.module.scss index ddf8895..10dd027 100644 --- a/src/entities/connect/style.module.scss +++ b/src/entities/connect/style.module.scss @@ -1,7 +1,22 @@ .Container { display: grid; - grid-template-columns: auto 200px; - gap: 100px; + grid-template-columns: auto; + gap: 20px; + + @include iftablet{ + grid-template-columns: auto 200px; + gap: 40px; + } + + @include iflaptop{ + grid-template-columns: auto 200px; + gap: 40px; + } + + @include ifdesktop{ + grid-template-columns: auto 200px; + gap: 100px; + } } .Icons { @@ -16,6 +31,21 @@ .Image { margin-bottom: 16px; + width: 100px; + height: auto; + + @include iftablet{ + width: 120px; + height: auto; + } + @include iflaptop{ + width: 120px; + height: auto; + } + @include ifdesktop{ + width: 150px; + height: auto; + } } .Description { diff --git a/src/entities/order-schema/styles.module.scss b/src/entities/order-schema/styles.module.scss index 769585f..7c7a8f5 100644 --- a/src/entities/order-schema/styles.module.scss +++ b/src/entities/order-schema/styles.module.scss @@ -1,29 +1,96 @@ .Container { display: grid; - grid-template-columns: repeat(7, 1fr); + grid-template-columns: 1fr; + gap: 20px 0; background: $color-green; padding: rem(20px); border-radius: rem(16px); margin-bottom: rem(40px); - .Block{ + @include iftablet{ + grid-template-columns: repeat(4, 1fr); + grid-template-rows: auto auto; + gap: 20px 0; + } + @include iflaptop{ + grid-template-columns: repeat(7, 1fr); + grid-template-rows: auto; + justify-content: center; + } + @include ifdesktop{ + } + + .Block { display: flex; flex-direction: column; align-items: center; gap: rem(4px); - .Arrow{ - margin-top: rem(50px); + .Arrow { + display: none; + + @include iftablet{ + display: block; + width: 50%; + height: auto; + margin-top: 5vh; + } + + @include iflaptop{ + width: 70%; + height: auto; + margin-top: 4vh; + } + + @include ifdesktop{ + width: 100%; + height: auto; + margin-top: 7vh; + margin-left: 1vw; + } } - .Text{ + .Image { + width: auto; + height: 150px; + + @include iftablet{ + width: auto; + height: 120px; + } + + @include iflaptop{ + width: auto; + height: 80px; + } + @include ifdesktop{ + width: auto; + height: 140px; + } + } + + .Text { font-family: $font-roboto; font-weight: 400; - font-size: rem(14px); + font-size: rem(18px); line-height: 150%; color: $color-white; text-align: center; text-transform: uppercase; + + @include iftablet { + font-size: rem(14px); + } + + @include iflaptop { + font-size: rem(12px); + line-height: 120%; + } + + @include ifdesktop { + font-size: rem(14px); + line-height: 150%; + } } } } \ No newline at end of file diff --git a/src/feature/article/consultation/styles.module.scss b/src/feature/article/consultation/styles.module.scss index 2853782..837b3a5 100644 --- a/src/feature/article/consultation/styles.module.scss +++ b/src/feature/article/consultation/styles.module.scss @@ -1,10 +1,31 @@ .Container { margin: 0 auto; - width: rem(1540px); + max-width: rem(1540px); display: grid; - grid-template-columns: auto 360px; - gap: 160px; - padding: 0 40px; + grid-template-columns: auto; + grid-template-rows: auto auto; + justify-content: center; + gap: 10px; + padding: 0 10px; + + @include iftablet{ + grid-template-columns: auto 200px; + grid-template-rows: auto; + justify-content: unset; + gap: 20px; + padding: 0 20px; + } + + @include iflaptop{ + grid-template-columns: auto 300px; + gap: 40px; + padding: 0 28px; + } + @include ifdesktop{ + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } } .Consultation { @@ -16,23 +37,54 @@ flex-direction: column; justify-content: center; align-items: center; - gap: rem(60px); + gap: rem(16px); padding: rem(20px) 0; + @include iftablet{ + gap: rem(20px); + } + @include iflaptop{ + gap: rem(40px); + } + @include ifdesktop{ + gap: rem(60px); + } + .Header { font-family: $font-roboto; font-weight: 300; - font-size: rem(38px); + font-size: rem(20px); line-height: 100%; color: $color-white; text-transform: uppercase; + + @include iftablet{ + font-size: rem(24px); + } + + @include iflaptop{ + font-size: rem(28px); + } + + @include ifdesktop{ + font-size: rem(38px); + } } .Form { display: grid; - grid-template-columns: repeat(3, 1fr); + grid-template-columns: auto; + grid-template-rows: repeat(3, 1fr); gap: rem(20px); width: 100%; + max-width: rem(460px); + + @include iftablet{ + grid-template-columns: repeat(3, 1fr); + grid-template-rows: auto; + width: 100%; + max-width: 100%; + } } } @@ -45,6 +97,18 @@ margin: rem(20px) 0; padding: rem(20px); border-radius: rem(20px); + max-width: 460px; + + @include iftablet{ + margin: rem(10px) 0; + padding: rem(10px); + } + + @include iflaptop{ + margin: rem(20px) 0; + padding: rem(20px); + } + .Title { font-family: $font-roboto; diff --git a/src/feature/article/related-articles/styles.module.scss b/src/feature/article/related-articles/styles.module.scss index 92c6968..19f915e 100644 --- a/src/feature/article/related-articles/styles.module.scss +++ b/src/feature/article/related-articles/styles.module.scss @@ -1,11 +1,30 @@ .Related { .Container { margin: 0 auto; - width: rem(1540px); + max-width: rem(1540px); display: grid; - grid-template-columns: auto 360px; - gap: 160px; - padding: 0 40px; + grid-template-columns: auto auto; + gap: 0; + padding: 0 10px; + + @include iftablet { + padding: 0 20px; + } + @include iflaptop { + grid-template-columns: auto 300px; + gap: 40px; + padding: 0 28px; + } + @include ifdesktop { + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } + + .Block { + display: flex; + flex-direction: column; + } } .Header { @@ -19,10 +38,14 @@ .Grid { display: grid; - grid-template-columns: auto auto; + grid-template-columns: auto; gap: 16px; margin-bottom: 20px; + @include iftablet{ + grid-template-columns: auto auto; + } + .Title { font-family: $font-roboto; font-weight: 500; diff --git a/src/feature/article/related-articles/ui.tsx b/src/feature/article/related-articles/ui.tsx index e0e3669..93027ff 100644 --- a/src/feature/article/related-articles/ui.tsx +++ b/src/feature/article/related-articles/ui.tsx @@ -11,7 +11,7 @@ function RelatedArticles({ related }: RelatedArticlesProps) { return (
    -
    +

    Похожие услуги, которые возможно Вас заинтересуют

    diff --git a/src/feature/article/sidebar/styles.module.scss b/src/feature/article/sidebar/styles.module.scss index c5cbb29..fe0d7a7 100644 --- a/src/feature/article/sidebar/styles.module.scss +++ b/src/feature/article/sidebar/styles.module.scss @@ -1,8 +1,12 @@ .Sidebar { - display: flex; - flex-direction: column; - gap: rem(40px); + display: none; + + @include iflaptop{ + display: flex; + flex-direction: column; + gap: rem(40px); + } .Estimation { background: $color-green; @@ -45,10 +49,14 @@ .Phone { font-family: $font-roboto; font-weight: 500; - font-size: rem(32px); + font-size: rem(24px); line-height: 100%; color: $color-white; text-transform: uppercase; + + @include ifdesktop{ + font-size: rem(32px); + } } } diff --git a/src/feature/article/sidebar/ui.tsx b/src/feature/article/sidebar/ui.tsx index 36e6c77..c37b0a2 100644 --- a/src/feature/article/sidebar/ui.tsx +++ b/src/feature/article/sidebar/ui.tsx @@ -13,7 +13,7 @@ function Sidebar({ warranties, }: SidebarProps) { return ( -
    +
    + ); } diff --git a/src/shared/ui/input/styles.module.scss b/src/shared/ui/input/styles.module.scss index 6f9017b..8e75a8b 100644 --- a/src/shared/ui/input/styles.module.scss +++ b/src/shared/ui/input/styles.module.scss @@ -8,7 +8,7 @@ background: $color-white; border: 1px solid $color-darkgray; border-radius: rem(16px); - padding: rem(4px) rem(10px); + padding: rem(10px) rem(10px); transition: border ease .5s; font-family: $font-roboto; @@ -20,6 +20,7 @@ @include iftablet { font-size: rem(16px); + padding: rem(10px) rem(16px); } @include iflaptop { diff --git a/src/views/expertise/autotech/styles.module.scss b/src/views/expertise/autotech/styles.module.scss index 31ff09f..2b02494 100644 --- a/src/views/expertise/autotech/styles.module.scss +++ b/src/views/expertise/autotech/styles.module.scss @@ -1,10 +1,27 @@ .Container { margin: 0 auto; - width: rem(1540px); + max-width: rem(1540px); display: grid; - grid-template-columns: auto 360px; - gap: 160px; - padding: 0 40px; + grid-template-columns: auto; + gap: 0px; + padding: 0 10px; + + @include iftablet { + grid-template-columns: auto; + padding: 0 20px; + } + + @include iflaptop { + padding: 0 28px; + gap: 40px; + grid-template-columns: auto 300px; + } + + @include ifdesktop { + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } } .Article { diff --git a/src/views/expertise/autotech/ui.tsx b/src/views/expertise/autotech/ui.tsx index 34f0e35..18c234e 100644 --- a/src/views/expertise/autotech/ui.tsx +++ b/src/views/expertise/autotech/ui.tsx @@ -91,9 +91,7 @@ function AutoTech() {

    - +
    diff --git a/src/widgets/breadcrumbs/styles.module.scss b/src/widgets/breadcrumbs/styles.module.scss index c3222b6..9146a0e 100644 --- a/src/widgets/breadcrumbs/styles.module.scss +++ b/src/widgets/breadcrumbs/styles.module.scss @@ -10,12 +10,24 @@ .Breadcrumbs { margin: 0 auto; - width: rem(1540px); - padding: rem(20px) 40px; + max-width: rem(1540px); + padding: rem(20px) 10px; display: flex; flex-direction: row; justify-content: space-between; + @include iftablet{ + padding: rem(20px) 20px; + } + + @include iflaptop{ + padding: rem(20px) 28px; + } + + @include ifdesktop{ + padding: rem(20px) 40px; + } + .Block { display: flex; flex-direction: column; @@ -46,7 +58,7 @@ } .Advertise { - display: flex; + display: none; flex-direction: column; align-items: center; @@ -54,12 +66,40 @@ background: $color-white; padding: rem(20px); + @include iftablet{ + display: flex; + } + @include iflaptop{ + } + @include ifdesktop{ + } + + .Image { + height: auto; + + @include iftablet { + width: 200px; + } + + @include iflaptop { + width: 300px; + } + + @include ifdesktop { + width: auto; + } + } + .Description { font-family: $font-roboto; font-weight: $font-light; - font-size: rem(16px); + font-size: rem(14px); line-height: 100%; color: $color-text; + + @include iflaptop { + font-size: rem(16px); + } } } @@ -68,7 +108,19 @@ .Header { font-family: $font-roboto; font-weight: $font-regular; - font-size: rem(48px); + font-size: rem(24px); line-height: 110%; color: $color-white; + + @include iftablet { + font-size: rem(28px); + } + + @include iflaptop { + font-size: rem(40px); + } + + @include ifdesktop { + font-size: rem(48px); + } } \ No newline at end of file diff --git a/src/widgets/breadcrumbs/ui.tsx b/src/widgets/breadcrumbs/ui.tsx index 27681f7..5316a39 100644 --- a/src/widgets/breadcrumbs/ui.tsx +++ b/src/widgets/breadcrumbs/ui.tsx @@ -27,7 +27,12 @@ function Breadcrumbs({ breadcrumbs }: BreadcrumbsProps) {

    {breadcrumbs[1].name}

    - {'Сбербанк, + {'Сбербанк,

    Аккредитованая оценочная компания

    -- 2.49.1 From 9b39cf285dc5764cc85155c1606b5c4fcdf02e8a Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Mon, 7 Jul 2025 15:45:25 +0300 Subject: [PATCH 23/65] feat: add api requests --- package-lock.json | 19 +++++++--- package.json | 3 +- src/app/api/heartbeat/route.ts | 9 +++++ src/app/api/sendform/route.ts | 66 ++++++++++++++++++++++++++++++++++ src/shared/api/api.service.ts | 35 ++++++++++++++++++ src/shared/api/api.types.ts | 6 ++++ src/shared/config/core.ts | 7 ++++ src/shared/config/routes.ts | 4 +++ 8 files changed, 144 insertions(+), 5 deletions(-) create mode 100644 src/app/api/heartbeat/route.ts create mode 100644 src/app/api/sendform/route.ts create mode 100644 src/shared/api/api.service.ts create mode 100644 src/shared/api/api.types.ts create mode 100644 src/shared/config/core.ts create mode 100644 src/shared/config/routes.ts diff --git a/package-lock.json b/package-lock.json index 6e0d63e..eb79ec2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@maskito/phone": "^3.9.1", "@maskito/react": "^3.9.1", "next": "15.3.4", - "nodemailer": "^7.0.3", + "nodemailer": "^7.0.5", "react": "^19.0.0", "react-dom": "^19.0.0", "swiper": "^11.2.10" @@ -20,6 +20,7 @@ "devDependencies": { "@eslint/eslintrc": "^3", "@types/node": "^20", + "@types/nodemailer": "^6.4.17", "@types/react": "^19", "@types/react-dom": "^19", "clsx": "^2.1.1", @@ -995,6 +996,16 @@ "undici-types": "~6.21.0" } }, + "node_modules/@types/nodemailer": { + "version": "6.4.17", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.17.tgz", + "integrity": "sha512-I9CCaIp6DTldEg7vyUTZi8+9Vo0hi1/T8gv3C89yk1rSAAzoKQ8H8ki/jBYJSFoH/BisgLP8tkZMlQ91CIquww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/react": { "version": "19.1.8", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", @@ -4492,9 +4503,9 @@ } }, "node_modules/nodemailer": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.3.tgz", - "integrity": "sha512-Ajq6Sz1x7cIK3pN6KesGTah+1gnwMnx5gKl3piQlQQE/PwyJ4Mbc8is2psWYxK3RJTVeqsDaCv8ZzXLCDHMTZw==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.5.tgz", + "integrity": "sha512-nsrh2lO3j4GkLLXoeEksAMgAOqxOv6QumNRVQTJwKH4nuiww6iC2y7GyANs9kRAxCexg3+lTWM3PZ91iLlVjfg==", "license": "MIT-0", "engines": { "node": ">=6.0.0" diff --git a/package.json b/package.json index ab7497d..bacafd1 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "@maskito/phone": "^3.9.1", "@maskito/react": "^3.9.1", "next": "15.3.4", - "nodemailer": "^7.0.3", + "nodemailer": "^7.0.5", "react": "^19.0.0", "react-dom": "^19.0.0", "swiper": "^11.2.10" @@ -23,6 +23,7 @@ "devDependencies": { "@eslint/eslintrc": "^3", "@types/node": "^20", + "@types/nodemailer": "^6.4.17", "@types/react": "^19", "@types/react-dom": "^19", "clsx": "^2.1.1", diff --git a/src/app/api/heartbeat/route.ts b/src/app/api/heartbeat/route.ts new file mode 100644 index 0000000..4867ec7 --- /dev/null +++ b/src/app/api/heartbeat/route.ts @@ -0,0 +1,9 @@ +export async function GET(request: Request) { + return new Response('Heartbeat is OK!', { + status: 200, + headers: { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', + }, + }); +} diff --git a/src/app/api/sendform/route.ts b/src/app/api/sendform/route.ts new file mode 100644 index 0000000..a563d1c --- /dev/null +++ b/src/app/api/sendform/route.ts @@ -0,0 +1,66 @@ +import nodemailer from 'nodemailer'; +import { TBaseForm } from '@shared/api/api.types'; +import { CORE } from '@shared/config/core'; + +async function sendMail(data: TBaseForm) { + const { name, phone, message, form } = data; + + const formattedBody = ` + + +

    Сообщение с сайта "Экспертиза и Оценка"

    +

    Форма отправки: ${form}

    +

    Имя отправителя: ${name ?? 'не указано'}

    +

    Номер телефона: ${phone}

    +

    Сообщение: ${message ?? 'отсутствует'}

    + + + `; + + const transporter = nodemailer.createTransport({ + service: 'Yandex', + auth: { + user: CORE.MAIL_USER, + pass: CORE.MAIL_PASS, + }, + }); + + return await transporter.sendMail({ + from: CORE.MAIL_FROM, + to: CORE.MAIL_TO, + subject: 'Заявка с сайта Ocenka-Sochi', + html: formattedBody, + }); +} + +export async function POST(request: Request) { + try { + const payload = await request.json(); + + if (payload.secure !== CORE.MAIL_SECURE_KEY) { + await Promise.reject('Request failure!'); + } + + const sendResult = await sendMail({ ...payload }); + + const data = { message: 'Form accepted' }; + const headers = new Headers({ + 'Content-Type': 'application/json', + }); + const options = { + status: 200, + statusText: 'OK', + headers: headers, + }; + + if (sendResult?.messageId) { + return new Response(JSON.stringify(data), options); + } else { + await Promise.reject('Sending request failure!'); + } + } catch (error) { + return new Response(`Api error: ${error}`, { + status: 400, + }); + } +} diff --git a/src/shared/api/api.service.ts b/src/shared/api/api.service.ts new file mode 100644 index 0000000..2ee7171 --- /dev/null +++ b/src/shared/api/api.service.ts @@ -0,0 +1,35 @@ +import { API_ROUTES } from '@shared/config/routes'; +import { TBaseForm } from '@shared/api/api.types'; +import { CORE } from '@shared/config/core'; + +type TRequest = TBaseForm; + +const sendFormFn = async ({ ...props }: TRequest) => { + try { + const response = await fetch('/api' + API_ROUTES.SEND_FORM, { + method: 'POST', + credentials: 'include', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + ...props, + secure: CORE.MAIL_SECURE_KEY, + }), + }); + + if (response.ok) { + return response; + } else { + if (response.status === 400) throw new Error(`400 Bad request`); + if (response.status === 401) throw new Error(`401 Unauthorized`); + if (response.status === 500) throw new Error('500 Internal server error'); + + throw new Error(`${response.status} - Network response failure`); + } + } catch (e) { + console.error(e); + } +}; + +export { sendFormFn }; diff --git a/src/shared/api/api.types.ts b/src/shared/api/api.types.ts new file mode 100644 index 0000000..e46571f --- /dev/null +++ b/src/shared/api/api.types.ts @@ -0,0 +1,6 @@ +export type TBaseForm = { + form: string; + name?: string; + phone: string; + message?: string; +}; diff --git a/src/shared/config/core.ts b/src/shared/config/core.ts new file mode 100644 index 0000000..6b301d4 --- /dev/null +++ b/src/shared/config/core.ts @@ -0,0 +1,7 @@ +export const CORE = { + MAIL_USER: process.env.NEXT_PUBLIC_MAIL_USER, + MAIL_PASS: process.env.NEXT_PUBLIC_MAIL_PASS, + MAIL_FROM: process.env.NEXT_PUBLIC_MAIL_FROM, + MAIL_TO: process.env.NEXT_PUBLIC_MAIL_TO, + MAIL_SECURE_KEY: process.env.NEXT_PUBLIC_MAIL_SECURE_KEY, +} as const; diff --git a/src/shared/config/routes.ts b/src/shared/config/routes.ts new file mode 100644 index 0000000..cebba69 --- /dev/null +++ b/src/shared/config/routes.ts @@ -0,0 +1,4 @@ +export const API_ROUTES = { + SEND_FORM: '/sendform', + HEARTBEAT: '/heartbeat', +} as const; -- 2.49.1 From 8def3b0d993b296b4f0ed163ee07d81e4f8be56d Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Mon, 7 Jul 2025 15:48:35 +0300 Subject: [PATCH 24/65] feat: add libs --- package-lock.json | 96 ++++++++++++++++++++++++++++++++++++++++++----- package.json | 8 +++- 2 files changed, 94 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index eb79ec2..498579f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,14 +8,20 @@ "name": "ocenka-web", "version": "0.1.0", "dependencies": { + "@hookform/resolvers": "^5.1.1", "@maskito/core": "^3.9.1", "@maskito/phone": "^3.9.1", "@maskito/react": "^3.9.1", + "libphonenumber-js": "^1.12.9", "next": "15.3.4", "nodemailer": "^7.0.5", "react": "^19.0.0", "react-dom": "^19.0.0", - "swiper": "^11.2.10" + "react-hook-form": "^7.60.0", + "react-hot-toast": "^2.5.2", + "react-yandex-metrika": "^2.6.0", + "swiper": "^11.2.10", + "zod": "^3.25.75" }, "devDependencies": { "@eslint/eslintrc": "^3", @@ -220,6 +226,18 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@hookform/resolvers": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.1.1.tgz", + "integrity": "sha512-J/NVING3LMAEvexJkyTLjruSm7aOFx7QX21pzkiJfMoNG0wl5aFEjLTl7ay7IQb9EWY6AkrBy7tHL2Alijpdcg==", + "license": "MIT", + "dependencies": { + "@standard-schema/utils": "^0.3.0" + }, + "peerDependencies": { + "react-hook-form": "^7.55.0" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -939,6 +957,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", @@ -2238,7 +2262,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, "license": "MIT" }, "node_modules/damerau-levenshtein": { @@ -3367,6 +3390,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/goober": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.16.tgz", + "integrity": "sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==", + "license": "MIT", + "peerDependencies": { + "csstype": "^3.0.10" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -4026,7 +4058,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -4140,8 +4171,7 @@ "version": "1.12.9", "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.9.tgz", "integrity": "sha512-VWwAdNeJgN7jFOD+wN4qx83DTPMVPPAUyx9/TUkBXKLiNkuWWk6anV0439tgdtwaJDrEdqkvdN22iA6J4bUCZg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/lilconfig": { "version": "3.1.3", @@ -4308,7 +4338,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -4525,7 +4554,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4868,7 +4896,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", @@ -4928,13 +4955,55 @@ "react": "^19.1.0" } }, + "node_modules/react-hook-form": { + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.60.0.tgz", + "integrity": "sha512-SBrYOvMbDB7cV8ZfNpaiLcgjH/a1c7aK0lK+aNigpf4xWLO8q+o4tcvVurv3c4EOyzn/3dCsYt4GKD42VvJ/+A==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-hot-toast": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.5.2.tgz", + "integrity": "sha512-Tun3BbCxzmXXM7C+NI4qiv6lT0uwGh4oAfeJyNOjYUejTsm35mK9iCaYLGv8cBz9L5YxZLx/2ii7zsIwPtPUdw==", + "license": "MIT", + "dependencies": { + "csstype": "^3.1.3", + "goober": "^2.1.16" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, "license": "MIT" }, + "node_modules/react-yandex-metrika": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-yandex-metrika/-/react-yandex-metrika-2.6.0.tgz", + "integrity": "sha512-8K4wExsNZtY3DTxh1G8a+zWH9Pg8fw23MJcoJ4I/562qrHRnh7L5nteq3lnNL58dnNQbuuHIRoGgMjIo+r1GjA==", + "license": "MIT", + "peerDependencies": { + "prop-types": "*", + "react": "*" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -6157,6 +6226,15 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "3.25.75", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.75.tgz", + "integrity": "sha512-OhpzAmVzabPOL6C3A3gpAifqr9MqihV/Msx3gor2b2kviCgcb+HM9SEOpMWwwNp9MRunWnhtAKUoo0AHhjyPPg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index bacafd1..5a16a1f 100644 --- a/package.json +++ b/package.json @@ -11,14 +11,20 @@ "prepare": "husky" }, "dependencies": { + "@hookform/resolvers": "^5.1.1", "@maskito/core": "^3.9.1", "@maskito/phone": "^3.9.1", "@maskito/react": "^3.9.1", + "libphonenumber-js": "^1.12.9", "next": "15.3.4", "nodemailer": "^7.0.5", "react": "^19.0.0", "react-dom": "^19.0.0", - "swiper": "^11.2.10" + "react-hook-form": "^7.60.0", + "react-hot-toast": "^2.5.2", + "react-yandex-metrika": "^2.6.0", + "swiper": "^11.2.10", + "zod": "^3.25.75" }, "devDependencies": { "@eslint/eslintrc": "^3", -- 2.49.1 From be57858e9059d4fe240af6fced3fef94d1bc60b3 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Mon, 7 Jul 2025 16:18:35 +0300 Subject: [PATCH 25/65] fix: add forms sending --- src/entities/callback-form/ui.tsx | 99 ++++++++++++++++-- src/feature/article/consultation/ui.tsx | 106 ++++++++++++++++++-- src/feature/article/related-articles/ui.tsx | 5 +- src/views/expertise/autotech/ui.tsx | 8 +- 4 files changed, 196 insertions(+), 22 deletions(-) diff --git a/src/entities/callback-form/ui.tsx b/src/entities/callback-form/ui.tsx index 5e2f392..10e58f8 100644 --- a/src/entities/callback-form/ui.tsx +++ b/src/entities/callback-form/ui.tsx @@ -1,20 +1,103 @@ +'use client'; + import s from './styles.module.scss'; import { Button, Input, PhoneInput } from '@shared/ui'; +import { Controller, useForm } from 'react-hook-form'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { isValidPhoneNumber } from 'libphonenumber-js/min'; +import { z } from 'zod'; +import { sendFormFn } from '@shared/api/api.service'; +import toast from 'react-hot-toast'; type CallbackFormProps = { - pageName: string; + pageName?: string; }; -function CallbackForm({ pageName }: CallbackFormProps) { +const FormSchema = z.object({ + name: z + .string() + .min(3, { message: 'Поле должно содержать не менее 3-х букв' }) + .regex(/^[A-Za-zА-Яа-яЁё]+(?:[ '-][A-Za-zА-Яа-яЁё]+)*$/, { + message: 'Поле содержит некорректные символы', + }), + phone: z.string().refine(isValidPhoneNumber, 'Некорректный номер телефона'), +}); + +type TForm = z.infer; + +const defaultValues = { + name: '', + phone: '', +}; + +function CallbackForm({ pageName = 'noname-form' }: CallbackFormProps) { + const { + handleSubmit, + control, + reset, + clearErrors, + formState: { errors }, + } = useForm({ + mode: 'onSubmit', + reValidateMode: 'onBlur', + resolver: zodResolver(FormSchema), + defaultValues, + }); + + const onSubmit = async (data: TForm) => { + const payload = { + ...data, + form: pageName, + }; + + try { + await sendFormFn(payload); + toast.success('Заявка на консультацию принята'); + reset(defaultValues); + } catch (e) { + toast.error('Ошибка при отправке заявки...', { + duration: 3000, + }); + } + }; + return (

    Узнать точную стоимость и срок экспертизы

    -
    - - + ( + { + clearErrors('name'); + field.onChange(e); + }} + error={errors && errors.name?.message} + /> + )} + /> + ( + { + clearErrors('phone'); + field.onChange(e); + }} + error={errors && errors.phone?.message} + /> + )} />
    - +
    diff --git a/src/views/expertise/autotech/ui.tsx b/src/views/expertise/autotech/ui.tsx index 18c234e..966ab88 100644 --- a/src/views/expertise/autotech/ui.tsx +++ b/src/views/expertise/autotech/ui.tsx @@ -5,7 +5,7 @@ import { Breadcrumbs, PartnersSlider } from '@/widgets'; import { sidebarData } from './model/sidebar'; import { relatedArticlesData } from './model/relatedArticles'; import { expertData } from './model/expert'; -import { breadcrumbData } from './model/breadcrums'; +import { breadcrumbData, PAGE_NAME } from './model/breadcrums'; function AutoTech() { return ( @@ -58,7 +58,7 @@ function AutoTech() { - +

    Документы, необходимые для экспертизы:

    @@ -95,8 +95,8 @@ function AutoTech() {

    - - + +
    -- 2.49.1 From 65499499b45a8183c3c0009dbca8aaaf1731c4f0 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Tue, 8 Jul 2025 09:22:45 +0300 Subject: [PATCH 26/65] fix: connect section --- src/entities/connect/ui.tsx | 38 +++++++++++++++++----- src/shared/const/contacts.ts | 6 ++++ src/widgets/breadcrumbs/styles.module.scss | 2 +- 3 files changed, 36 insertions(+), 10 deletions(-) create mode 100644 src/shared/const/contacts.ts diff --git a/src/entities/connect/ui.tsx b/src/entities/connect/ui.tsx index 8c419f0..d3bc663 100644 --- a/src/entities/connect/ui.tsx +++ b/src/entities/connect/ui.tsx @@ -4,29 +4,49 @@ import Image from 'next/image'; import emailImg from '@public/images/em-rounded-logo.png'; import tgImg from '@public/images/tg-rounded-logo.png'; import waImg from '@public/images/wa-rounded-logo.png'; +import { CONTACTS } from '@shared/const/contacts'; function Connect() { + const emailTo = `mailto:${CONTACTS.EMAIL}`; + const callTo = `tel:${CONTACTS.PHONE}`; + const telegramTo = CONTACTS.TELEGRAM; + const whatsappTo = CONTACTS.WHATSAPP; + return (
    - {''} -

    WHATSAPP

    + + {''} + + +

    WHATSAPP

    +
    - {''} -

    TELEGRAM

    + + {''} + + +

    TELEGRAM

    +
    - {''} -

    EMAIL

    + + {''} + + +

    EMAIL

    +

    Звоните по телефону

    - + + +

    мы работаем с 08:00 до 17:00

    diff --git a/src/shared/const/contacts.ts b/src/shared/const/contacts.ts new file mode 100644 index 0000000..00b80ab --- /dev/null +++ b/src/shared/const/contacts.ts @@ -0,0 +1,6 @@ +export const CONTACTS = { + EMAIL: 'spo-71@yandex.ru', + PHONE: '+79002413434', + TELEGRAM: 'https://telegram.me/ditraso', + WHATSAPP: 'https://api.whatsapp.com/send?phone=79002413434', +} as const; diff --git a/src/widgets/breadcrumbs/styles.module.scss b/src/widgets/breadcrumbs/styles.module.scss index 9146a0e..8356735 100644 --- a/src/widgets/breadcrumbs/styles.module.scss +++ b/src/widgets/breadcrumbs/styles.module.scss @@ -86,7 +86,7 @@ } @include ifdesktop { - width: auto; + width: 400px; } } -- 2.49.1 From ea8a15271198db6d846e0165d3389390cf92f467 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Tue, 8 Jul 2025 09:52:34 +0300 Subject: [PATCH 27/65] feat: add modal --- src/app/layout.tsx | 5 +- src/core/providers/modal-provider.tsx | 41 +++++ src/core/styles/variables.scss | 1 + .../article/consultation-modal/index.ts | 1 + .../consultation-modal/styles.module.scss | 46 ++++++ src/feature/article/consultation-modal/ui.tsx | 145 ++++++++++++++++++ src/feature/article/index.ts | 1 + .../article/sidebar/styles.module.scss | 12 +- src/feature/article/sidebar/ui.tsx | 18 ++- src/shared/lib/clickOutside/index.ts | 1 + .../lib/clickOutside/useClickOutside.tsx | 28 ++++ src/shared/lib/detectIOS/detectIOS.ts | 15 ++ src/shared/lib/detectIOS/index.ts | 1 + src/shared/lib/index.ts | 2 + src/shared/ui/index.ts | 2 + src/shared/ui/modal/close-icon.tsx | 23 +++ src/shared/ui/modal/index.ts | 2 + src/shared/ui/modal/modal-content.module.scss | 79 ++++++++++ src/shared/ui/modal/modal-content.tsx | 49 ++++++ src/shared/ui/modal/modal.module.scss | 54 +++++++ src/shared/ui/modal/modal.tsx | 44 ++++++ src/shared/ui/text-area/index.ts | 1 + src/shared/ui/text-area/styles.module.scss | 139 +++++++++++++++++ src/shared/ui/text-area/ui.tsx | 58 +++++++ 24 files changed, 763 insertions(+), 5 deletions(-) create mode 100644 src/core/providers/modal-provider.tsx create mode 100644 src/feature/article/consultation-modal/index.ts create mode 100644 src/feature/article/consultation-modal/styles.module.scss create mode 100644 src/feature/article/consultation-modal/ui.tsx create mode 100644 src/shared/lib/clickOutside/index.ts create mode 100644 src/shared/lib/clickOutside/useClickOutside.tsx create mode 100644 src/shared/lib/detectIOS/detectIOS.ts create mode 100644 src/shared/lib/detectIOS/index.ts create mode 100644 src/shared/lib/index.ts create mode 100644 src/shared/ui/modal/close-icon.tsx create mode 100644 src/shared/ui/modal/index.ts create mode 100644 src/shared/ui/modal/modal-content.module.scss create mode 100644 src/shared/ui/modal/modal-content.tsx create mode 100644 src/shared/ui/modal/modal.module.scss create mode 100644 src/shared/ui/modal/modal.tsx create mode 100644 src/shared/ui/text-area/index.ts create mode 100644 src/shared/ui/text-area/styles.module.scss create mode 100644 src/shared/ui/text-area/ui.tsx diff --git a/src/app/layout.tsx b/src/app/layout.tsx index b7d4052..0781bff 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -4,6 +4,7 @@ import { Montserrat, Roboto } from 'next/font/google'; import '@core/styles/globals.scss'; import '@core/styles/reset.scss'; import { Footer, Header } from '@/widgets'; +import { ModalProvider } from '@core/providers/modal-provider'; const roboto = Roboto({ subsets: ['cyrillic'], @@ -30,7 +31,9 @@ export default function RootLayout({
    -
    {children}
    + +
    {children}
    +
    diff --git a/src/core/providers/modal-provider.tsx b/src/core/providers/modal-provider.tsx new file mode 100644 index 0000000..af19951 --- /dev/null +++ b/src/core/providers/modal-provider.tsx @@ -0,0 +1,41 @@ +'use client'; + +import { + useState, + useContext, + useCallback, + ReactNode, + createContext, +} from 'react'; +import { Modal } from '@shared/ui/modal'; + +const ModalContext = createContext({ + hideModal: () => {}, + showModal: (content: ReactNode) => {}, +}); + +const useModal = () => useContext(ModalContext); + +const ModalProvider = ({ children }: { children: ReactNode }) => { + const [modalContent, setModalContent] = useState(null); + + const showModal = useCallback((content: ReactNode) => { + setModalContent(content); + }, []); + + const hideModal = useCallback(() => { + setModalContent(null); + }, []); + + return ( + + {children} + {/* Ваш Modal компонент здесь */} + + {modalContent} + + + ); +}; + +export { useModal, ModalProvider }; diff --git a/src/core/styles/variables.scss b/src/core/styles/variables.scss index 5c8c13e..e314f32 100644 --- a/src/core/styles/variables.scss +++ b/src/core/styles/variables.scss @@ -24,6 +24,7 @@ $color-darkgray: #999999; $color-text: #333333; $color-text-light: #777777; $color-green: #23A455; +$color-green-hover: #23A455C2; $color-link: #333333; $color-link-hover: #009283; $color-error: #ff0000; diff --git a/src/feature/article/consultation-modal/index.ts b/src/feature/article/consultation-modal/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/feature/article/consultation-modal/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/feature/article/consultation-modal/styles.module.scss b/src/feature/article/consultation-modal/styles.module.scss new file mode 100644 index 0000000..8bb35ad --- /dev/null +++ b/src/feature/article/consultation-modal/styles.module.scss @@ -0,0 +1,46 @@ +.Form { + display: flex; + flex-direction: column; + gap: rem(16px); + + @include iflaptop { + gap: rem(20px); + } +} + +.Title { + font-family: $font-roboto; + font-weight: $font-medium; + font-size: rem(20px); + line-height: 130%; + color: $color-text; + + @include ifdesktop { + font-size: rem(24px); + } +} + +.Description { + font-family: $font-roboto; + font-weight: $font-regular; + font-size: rem(16px); + line-height: 100%; + color: $color-text; +} + +.Agreement { + font-family: $font-roboto; + font-weight: $font-regular; + font-size: rem(14px); + line-height: 100%; + color: $color-text; + + a { + color: $color-green; + + &:hover { + color: $color-green; + text-decoration: underline; + } + } +} \ No newline at end of file diff --git a/src/feature/article/consultation-modal/ui.tsx b/src/feature/article/consultation-modal/ui.tsx new file mode 100644 index 0000000..beba03d --- /dev/null +++ b/src/feature/article/consultation-modal/ui.tsx @@ -0,0 +1,145 @@ +'use client'; + +import s from './styles.module.scss'; +import { Button, Input } from '@/shared/ui'; +import { PhoneInput, TextArea } from '@shared/ui'; +import { z } from 'zod'; +import { isValidPhoneNumber } from 'libphonenumber-js/min'; +import { Controller, useForm } from 'react-hook-form'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { sendFormFn } from '@shared/api/api.service'; +import toast from 'react-hot-toast'; +import { ModalContent } from '@shared/ui/modal/modal-content'; +import { useModal } from '@core/providers/modal-provider'; +import Link from 'next/link'; + +const FormSchema = z.object({ + name: z + .string() + .min(3, { message: 'Поле должно содержать не менее 3-х букв' }) + .regex(/^[A-Za-zА-Яа-яЁё]+(?:[ '-][A-Za-zА-Яа-яЁё]+)*$/, { + message: 'Поле содержит некорректные символы', + }), + phone: z.string().refine(isValidPhoneNumber, 'Некорректный номер телефона'), + message: z + .string() + .min(21, { message: 'Оставьте сообщение мин. 20 символов' }), +}); +type TForm = z.infer; + +const defaultValues = { + name: '', + phone: '', + message: '', +}; + +type ConsultationModalProps = { + className?: string; +}; + +function ConsultationModal({}: ConsultationModalProps) { + const { + handleSubmit, + control, + reset, + clearErrors, + formState: { errors }, + } = useForm({ + resolver: zodResolver(FormSchema), + defaultValues, + }); + + const modal = useModal(); + + const onSubmit = async (data: TForm) => { + const payload = { + ...data, + form: 'consultation-modal-form', + }; + + try { + await sendFormFn(payload); + toast.success('Заявка на консультацию принята'); + } catch (e) { + toast.error('Ошибка при отправке заявки...', { + duration: 3000, + }); + } finally { + modal.hideModal(); + reset(defaultValues); + } + }; + + return ( + + +

    + Мы подскажем, как решить ваши вопросы по пожарной безопасности. +

    + ( + { + clearErrors('name'); + field.onChange(e); + }} + error={errors && errors.name?.message} + /> + )} + /> + ( + { + clearErrors('phone'); + field.onChange(e); + }} + error={errors && errors.phone?.message} + /> + )} + /> +

    Кратко опишите интересующий Вас вопрос

    + ( + + {error && ( + + {error} + + )} +
    + ); +}); + +export { TextArea }; -- 2.49.1 From 919c3c462e2cb10f520bfdb97bc3bfdd21d9ffc4 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Tue, 8 Jul 2025 10:57:44 +0300 Subject: [PATCH 28/65] fix: update beauty-button --- src/app/layout.tsx | 4 +- src/entities/base-menu/ui.tsx | 5 +- src/entities/beauty-button/index.ts | 1 + src/entities/beauty-button/styles.module.scss | 54 +++++++++++++++++++ src/entities/beauty-button/ui.tsx | 46 ++++++++++++++++ src/entities/index.ts | 1 + src/feature/article/consultation-modal/ui.tsx | 2 +- 7 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 src/entities/beauty-button/index.ts create mode 100644 src/entities/beauty-button/styles.module.scss create mode 100644 src/entities/beauty-button/ui.tsx diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 0781bff..a5265a5 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -30,11 +30,11 @@ export default function RootLayout({ return ( -
    +
    {children}
    +
    -
    ); diff --git a/src/entities/base-menu/ui.tsx b/src/entities/base-menu/ui.tsx index 48b4d68..8f6987d 100644 --- a/src/entities/base-menu/ui.tsx +++ b/src/entities/base-menu/ui.tsx @@ -5,8 +5,11 @@ import { Icons } from '@shared/ui/icon'; import { baseMenu } from '@shared/const/menu'; import { TMenu } from '@shared/types/menu'; import dtrLogo from '@public/images/dtr-logo-eagle.png'; +import { BeautyButton } from '@/entities'; function BaseMenu() { + const phone = '+7 (900) 241-34-34'; + const Menu = ({ list }: { list: TMenu }) => { const nodeList = (list: TMenu) => { return list.map((item, index) => { @@ -42,7 +45,7 @@ function BaseMenu() { {'ДиТрасо'}
    - + {phone}
    diff --git a/src/entities/beauty-button/index.ts b/src/entities/beauty-button/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/entities/beauty-button/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/entities/beauty-button/styles.module.scss b/src/entities/beauty-button/styles.module.scss new file mode 100644 index 0000000..7be7163 --- /dev/null +++ b/src/entities/beauty-button/styles.module.scss @@ -0,0 +1,54 @@ +.Container { + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; + + @include ifdesktop { + gap: 8px; + } + + .Button { + cursor: pointer; + display: flex; + justify-content: center; + align-items: center; + gap: 4px; + padding: 6px 10px; + border-radius: 28px; + background: #58c644; + background: -webkit-gradient(linear, left top, right top, from(#58c644), to(#009283)); + background: linear-gradient(to right, #58c644 0%, #009283 100%); + + @include ifdesktop { + gap: 8px; + padding: 10px 20px; + } + } + + .Phone { + font-family: $font-roboto; + font-weight: 600; + font-size: 14px; + line-height: 100%; + color: $color-white; + + @include ifdesktop { + font-size: 16px; + } + } + + .Action { + cursor: pointer; + font-family: $font-roboto; + font-weight: 400; + font-size: rem(14px); + line-height: 100%; + color: $color-green; + text-transform: lowercase; + + @include ifdesktop { + font-size: rem(16px); + } + } +} \ No newline at end of file diff --git a/src/entities/beauty-button/ui.tsx b/src/entities/beauty-button/ui.tsx new file mode 100644 index 0000000..6ac2b22 --- /dev/null +++ b/src/entities/beauty-button/ui.tsx @@ -0,0 +1,46 @@ +'use client'; + +import s from './styles.module.scss'; +import type { ReactNode, SVGProps } from 'react'; +import { useModal } from '@core/providers/modal-provider'; +import { ConsultationModal } from '@/feature/article'; + +type TBeautyButtonProps = { + children?: ReactNode; + onClick?: () => void; +}; + +function BeautyButton({ children, onClick }: TBeautyButtonProps) { + const modal = useModal(); + const openModal = () => modal.showModal(); + + return ( +
    + +

    + Записаться +

    +
    + ); +} + +//MagePhoneFill +const PhoneIcon = (props: SVGProps) => ( + + + +); + +export { BeautyButton }; diff --git a/src/entities/index.ts b/src/entities/index.ts index 61fdc79..49efe18 100644 --- a/src/entities/index.ts +++ b/src/entities/index.ts @@ -3,3 +3,4 @@ export * from './base-menu'; export * from './callback-form'; export * from './connect'; export * from './order-schema'; +export * from './beauty-button'; diff --git a/src/feature/article/consultation-modal/ui.tsx b/src/feature/article/consultation-modal/ui.tsx index beba03d..29c03bd 100644 --- a/src/feature/article/consultation-modal/ui.tsx +++ b/src/feature/article/consultation-modal/ui.tsx @@ -78,7 +78,7 @@ function ConsultationModal({}: ConsultationModalProps) { onSubmit={handleSubmit(onSubmit)} >

    - Мы подскажем, как решить ваши вопросы по пожарной безопасности. + Мы подскажем, как решить ваши вопросы по экспертизе или оценке.

    Date: Tue, 8 Jul 2025 16:21:40 +0300 Subject: [PATCH 29/65] fix: add content to expertise pages --- public/images/photo/empty-photo.jpg | Bin 0 -> 3704 bytes public/images/photo/kaminskiy-dmitriy.png | Bin 0 -> 38494 bytes public/images/photo/kolodiy-aleksandr.png | Bin 0 -> 36266 bytes public/images/photo/mikova-inna.png | Bin 0 -> 40496 bytes public/images/photo/tlif-olga.png | Bin 0 -> 32186 bytes src/app/ekspertiza/buhgalterskaja/page.tsx | 4 +- src/app/ekspertiza/dokumentov/page.tsx | 4 +- .../finansovo-jekonomicheskaja/page.tsx | 4 +- src/app/ekspertiza/kadastrovaja/page.tsx | 4 +- .../kompjuterno-tehnicheskaja/page.tsx | 4 +- .../ekspertiza/pocherkovedcheskaja/page.tsx | 4 +- .../pozharno-tehnicheskaja/page.tsx | 4 +- src/app/ekspertiza/recenzirovanie/page.tsx | 4 +- .../stroitelno-tehnicheskaja/page.tsx | 4 +- .../tehniko-kriminalisticheskaja/page.tsx | 4 +- src/app/ekspertiza/tovarovedcheskaja/page.tsx | 4 +- src/app/ekspertiza/trasologicheskaja/page.tsx | 4 +- .../ekspertiza/zemle-ustroitelnaja/page.tsx | 4 +- src/entities/callback-form/ui.tsx | 4 +- src/entities/connect/style.module.scss | 22 +++++ src/entities/connect/ui.tsx | 77 ++++++++------- src/entities/order-schema/styles.module.scss | 23 +++++ src/entities/order-schema/ui.tsx | 85 ++++++++-------- src/feature/article/consultation-modal/ui.tsx | 8 +- src/feature/article/consultation/ui.tsx | 16 ++- .../article/documents}/index.ts | 0 .../article/documents/styles.module.scss | 39 ++++++++ src/feature/article/documents/ui.tsx | 25 +++++ src/feature/article/index.ts | 2 + src/feature/article/partners/index.ts | 1 + .../article/partners/styles.module.scss | 19 ++++ src/feature/article/partners/ui.tsx | 18 ++++ src/feature/article/sidebar/ui.tsx | 6 +- src/shared/ui/index.ts | 1 + src/shared/ui/partners-slider/index.ts | 1 + .../ui}/partners-slider/model/slides.ts | 0 .../ui}/partners-slider/styles.module.scss | 0 .../ui}/partners-slider/ui.tsx | 2 +- src/views/expertise/autotech/model/article.ts | 24 +++++ .../model/{relatedArticles.ts => related.ts} | 0 .../expertise/autotech/styles.module.scss | 23 +---- src/views/expertise/autotech/ui.tsx | 72 ++++---------- src/views/expertise/buhgalter/index.ts | 1 + .../expertise/buhgalter/model/article.ts | 24 +++++ .../expertise/buhgalter/model/breadcrums.ts | 14 +++ src/views/expertise/buhgalter/model/expert.ts | 8 ++ .../expertise/buhgalter/model/related.ts | 29 ++++++ .../expertise/buhgalter/model/sidebar.ts | 41 ++++++++ .../expertise/buhgalter/styles.module.scss | 71 ++++++++++++++ src/views/expertise/buhgalter/ui.tsx | 67 +++++++++++++ src/views/expertise/computer/index.ts | 1 + src/views/expertise/computer/model/article.ts | 29 ++++++ .../expertise/computer/model/breadcrums.ts | 14 +++ src/views/expertise/computer/model/expert.ts | 8 ++ src/views/expertise/computer/model/related.ts | 29 ++++++ src/views/expertise/computer/model/sidebar.ts | 37 +++++++ .../expertise/computer/styles.module.scss | 71 ++++++++++++++ src/views/expertise/computer/ui.tsx | 62 ++++++++++++ src/views/expertise/document/index.ts | 1 + src/views/expertise/document/model/article.ts | 22 +++++ .../expertise/document/model/breadcrums.ts | 14 +++ src/views/expertise/document/model/expert.ts | 8 ++ src/views/expertise/document/model/related.ts | 29 ++++++ src/views/expertise/document/model/sidebar.ts | 37 +++++++ .../expertise/document/styles.module.scss | 71 ++++++++++++++ src/views/expertise/document/ui.tsx | 57 +++++++++++ src/views/expertise/finans/index.ts | 1 + src/views/expertise/finans/model/article.ts | 25 +++++ .../expertise/finans/model/breadcrums.ts | 14 +++ src/views/expertise/finans/model/expert.ts | 8 ++ src/views/expertise/finans/model/related.ts | 29 ++++++ src/views/expertise/finans/model/sidebar.ts | 41 ++++++++ src/views/expertise/finans/styles.module.scss | 71 ++++++++++++++ src/views/expertise/finans/ui.tsx | 70 ++++++++++++++ src/views/expertise/kadastr/index.ts | 1 + src/views/expertise/kadastr/model/article.ts | 27 ++++++ .../expertise/kadastr/model/breadcrums.ts | 14 +++ src/views/expertise/kadastr/model/expert.ts | 8 ++ src/views/expertise/kadastr/model/related.ts | 29 ++++++ src/views/expertise/kadastr/model/sidebar.ts | 37 +++++++ .../expertise/kadastr/styles.module.scss | 71 ++++++++++++++ src/views/expertise/kadastr/ui.tsx | 62 ++++++++++++ src/views/expertise/pocherk/index.ts | 1 + src/views/expertise/pocherk/model/article.ts | 24 +++++ .../expertise/pocherk/model/breadcrums.ts | 14 +++ src/views/expertise/pocherk/model/expert.ts | 8 ++ src/views/expertise/pocherk/model/related.ts | 29 ++++++ src/views/expertise/pocherk/model/sidebar.ts | 37 +++++++ .../expertise/pocherk/styles.module.scss | 71 ++++++++++++++ src/views/expertise/pocherk/ui.tsx | 91 ++++++++++++++++++ src/views/expertise/pozhar/index.ts | 1 + src/views/expertise/pozhar/model/article.ts | 26 +++++ .../expertise/pozhar/model/breadcrums.ts | 14 +++ src/views/expertise/pozhar/model/expert.ts | 8 ++ src/views/expertise/pozhar/model/related.ts | 29 ++++++ src/views/expertise/pozhar/model/sidebar.ts | 37 +++++++ src/views/expertise/pozhar/styles.module.scss | 71 ++++++++++++++ src/views/expertise/pozhar/ui.tsx | 87 +++++++++++++++++ src/views/expertise/recenzii/index.ts | 1 + src/views/expertise/recenzii/model/article.ts | 26 +++++ .../expertise/recenzii/model/breadcrums.ts | 14 +++ src/views/expertise/recenzii/model/expert.ts | 8 ++ src/views/expertise/recenzii/model/related.ts | 29 ++++++ src/views/expertise/recenzii/model/sidebar.ts | 37 +++++++ .../expertise/recenzii/styles.module.scss | 71 ++++++++++++++ src/views/expertise/recenzii/ui.tsx | 63 ++++++++++++ src/views/expertise/stroit/index.ts | 1 + src/views/expertise/stroit/model/article.ts | 26 +++++ .../expertise/stroit/model/breadcrums.ts | 14 +++ src/views/expertise/stroit/model/expert.ts | 8 ++ src/views/expertise/stroit/model/related.ts | 29 ++++++ src/views/expertise/stroit/model/sidebar.ts | 41 ++++++++ src/views/expertise/stroit/styles.module.scss | 71 ++++++++++++++ src/views/expertise/stroit/ui.tsx | 59 ++++++++++++ src/views/expertise/tech-crim/index.ts | 1 + .../expertise/tech-crim/model/article.ts | 19 ++++ .../expertise/tech-crim/model/breadcrums.ts | 14 +++ src/views/expertise/tech-crim/model/expert.ts | 8 ++ .../expertise/tech-crim/model/related.ts | 29 ++++++ .../expertise/tech-crim/model/sidebar.ts | 41 ++++++++ .../expertise/tech-crim/styles.module.scss | 71 ++++++++++++++ src/views/expertise/tech-crim/ui.tsx | 75 +++++++++++++++ src/views/expertise/tovar/index.ts | 1 + src/views/expertise/tovar/model/article.ts | 37 +++++++ src/views/expertise/tovar/model/breadcrums.ts | 14 +++ src/views/expertise/tovar/model/expert.ts | 8 ++ src/views/expertise/tovar/model/related.ts | 29 ++++++ src/views/expertise/tovar/model/sidebar.ts | 37 +++++++ src/views/expertise/tovar/styles.module.scss | 71 ++++++++++++++ src/views/expertise/tovar/ui.tsx | 71 ++++++++++++++ src/views/expertise/trasologia/index.ts | 1 + .../expertise/trasologia/model/article.ts | 27 ++++++ .../expertise/trasologia/model/breadcrums.ts | 14 +++ .../expertise/trasologia/model/expert.ts | 8 ++ .../expertise/trasologia/model/related.ts | 29 ++++++ .../expertise/trasologia/model/sidebar.ts | 37 +++++++ .../expertise/trasologia/styles.module.scss | 71 ++++++++++++++ src/views/expertise/trasologia/ui.tsx | 78 +++++++++++++++ src/views/expertise/zem-stroy/index.ts | 1 + .../expertise/zem-stroy/model/article.ts | 27 ++++++ .../expertise/zem-stroy/model/breadcrums.ts | 14 +++ src/views/expertise/zem-stroy/model/expert.ts | 8 ++ .../expertise/zem-stroy/model/related.ts | 29 ++++++ .../expertise/zem-stroy/model/sidebar.ts | 41 ++++++++ .../expertise/zem-stroy/styles.module.scss | 71 ++++++++++++++ src/views/expertise/zem-stroy/ui.tsx | 62 ++++++++++++ src/views/index.ts | 13 +++ src/widgets/index.ts | 1 - 148 files changed, 3708 insertions(+), 169 deletions(-) create mode 100644 public/images/photo/empty-photo.jpg create mode 100644 public/images/photo/kaminskiy-dmitriy.png create mode 100644 public/images/photo/kolodiy-aleksandr.png create mode 100644 public/images/photo/mikova-inna.png create mode 100644 public/images/photo/tlif-olga.png rename src/{widgets/partners-slider => feature/article/documents}/index.ts (100%) create mode 100644 src/feature/article/documents/styles.module.scss create mode 100644 src/feature/article/documents/ui.tsx create mode 100644 src/feature/article/partners/index.ts create mode 100644 src/feature/article/partners/styles.module.scss create mode 100644 src/feature/article/partners/ui.tsx create mode 100644 src/shared/ui/partners-slider/index.ts rename src/{widgets => shared/ui}/partners-slider/model/slides.ts (100%) rename src/{widgets => shared/ui}/partners-slider/styles.module.scss (100%) rename src/{widgets => shared/ui}/partners-slider/ui.tsx (93%) create mode 100644 src/views/expertise/autotech/model/article.ts rename src/views/expertise/autotech/model/{relatedArticles.ts => related.ts} (100%) create mode 100644 src/views/expertise/buhgalter/index.ts create mode 100644 src/views/expertise/buhgalter/model/article.ts create mode 100644 src/views/expertise/buhgalter/model/breadcrums.ts create mode 100644 src/views/expertise/buhgalter/model/expert.ts create mode 100644 src/views/expertise/buhgalter/model/related.ts create mode 100644 src/views/expertise/buhgalter/model/sidebar.ts create mode 100644 src/views/expertise/buhgalter/styles.module.scss create mode 100644 src/views/expertise/buhgalter/ui.tsx create mode 100644 src/views/expertise/computer/index.ts create mode 100644 src/views/expertise/computer/model/article.ts create mode 100644 src/views/expertise/computer/model/breadcrums.ts create mode 100644 src/views/expertise/computer/model/expert.ts create mode 100644 src/views/expertise/computer/model/related.ts create mode 100644 src/views/expertise/computer/model/sidebar.ts create mode 100644 src/views/expertise/computer/styles.module.scss create mode 100644 src/views/expertise/computer/ui.tsx create mode 100644 src/views/expertise/document/index.ts create mode 100644 src/views/expertise/document/model/article.ts create mode 100644 src/views/expertise/document/model/breadcrums.ts create mode 100644 src/views/expertise/document/model/expert.ts create mode 100644 src/views/expertise/document/model/related.ts create mode 100644 src/views/expertise/document/model/sidebar.ts create mode 100644 src/views/expertise/document/styles.module.scss create mode 100644 src/views/expertise/document/ui.tsx create mode 100644 src/views/expertise/finans/index.ts create mode 100644 src/views/expertise/finans/model/article.ts create mode 100644 src/views/expertise/finans/model/breadcrums.ts create mode 100644 src/views/expertise/finans/model/expert.ts create mode 100644 src/views/expertise/finans/model/related.ts create mode 100644 src/views/expertise/finans/model/sidebar.ts create mode 100644 src/views/expertise/finans/styles.module.scss create mode 100644 src/views/expertise/finans/ui.tsx create mode 100644 src/views/expertise/kadastr/index.ts create mode 100644 src/views/expertise/kadastr/model/article.ts create mode 100644 src/views/expertise/kadastr/model/breadcrums.ts create mode 100644 src/views/expertise/kadastr/model/expert.ts create mode 100644 src/views/expertise/kadastr/model/related.ts create mode 100644 src/views/expertise/kadastr/model/sidebar.ts create mode 100644 src/views/expertise/kadastr/styles.module.scss create mode 100644 src/views/expertise/kadastr/ui.tsx create mode 100644 src/views/expertise/pocherk/index.ts create mode 100644 src/views/expertise/pocherk/model/article.ts create mode 100644 src/views/expertise/pocherk/model/breadcrums.ts create mode 100644 src/views/expertise/pocherk/model/expert.ts create mode 100644 src/views/expertise/pocherk/model/related.ts create mode 100644 src/views/expertise/pocherk/model/sidebar.ts create mode 100644 src/views/expertise/pocherk/styles.module.scss create mode 100644 src/views/expertise/pocherk/ui.tsx create mode 100644 src/views/expertise/pozhar/index.ts create mode 100644 src/views/expertise/pozhar/model/article.ts create mode 100644 src/views/expertise/pozhar/model/breadcrums.ts create mode 100644 src/views/expertise/pozhar/model/expert.ts create mode 100644 src/views/expertise/pozhar/model/related.ts create mode 100644 src/views/expertise/pozhar/model/sidebar.ts create mode 100644 src/views/expertise/pozhar/styles.module.scss create mode 100644 src/views/expertise/pozhar/ui.tsx create mode 100644 src/views/expertise/recenzii/index.ts create mode 100644 src/views/expertise/recenzii/model/article.ts create mode 100644 src/views/expertise/recenzii/model/breadcrums.ts create mode 100644 src/views/expertise/recenzii/model/expert.ts create mode 100644 src/views/expertise/recenzii/model/related.ts create mode 100644 src/views/expertise/recenzii/model/sidebar.ts create mode 100644 src/views/expertise/recenzii/styles.module.scss create mode 100644 src/views/expertise/recenzii/ui.tsx create mode 100644 src/views/expertise/stroit/index.ts create mode 100644 src/views/expertise/stroit/model/article.ts create mode 100644 src/views/expertise/stroit/model/breadcrums.ts create mode 100644 src/views/expertise/stroit/model/expert.ts create mode 100644 src/views/expertise/stroit/model/related.ts create mode 100644 src/views/expertise/stroit/model/sidebar.ts create mode 100644 src/views/expertise/stroit/styles.module.scss create mode 100644 src/views/expertise/stroit/ui.tsx create mode 100644 src/views/expertise/tech-crim/index.ts create mode 100644 src/views/expertise/tech-crim/model/article.ts create mode 100644 src/views/expertise/tech-crim/model/breadcrums.ts create mode 100644 src/views/expertise/tech-crim/model/expert.ts create mode 100644 src/views/expertise/tech-crim/model/related.ts create mode 100644 src/views/expertise/tech-crim/model/sidebar.ts create mode 100644 src/views/expertise/tech-crim/styles.module.scss create mode 100644 src/views/expertise/tech-crim/ui.tsx create mode 100644 src/views/expertise/tovar/index.ts create mode 100644 src/views/expertise/tovar/model/article.ts create mode 100644 src/views/expertise/tovar/model/breadcrums.ts create mode 100644 src/views/expertise/tovar/model/expert.ts create mode 100644 src/views/expertise/tovar/model/related.ts create mode 100644 src/views/expertise/tovar/model/sidebar.ts create mode 100644 src/views/expertise/tovar/styles.module.scss create mode 100644 src/views/expertise/tovar/ui.tsx create mode 100644 src/views/expertise/trasologia/index.ts create mode 100644 src/views/expertise/trasologia/model/article.ts create mode 100644 src/views/expertise/trasologia/model/breadcrums.ts create mode 100644 src/views/expertise/trasologia/model/expert.ts create mode 100644 src/views/expertise/trasologia/model/related.ts create mode 100644 src/views/expertise/trasologia/model/sidebar.ts create mode 100644 src/views/expertise/trasologia/styles.module.scss create mode 100644 src/views/expertise/trasologia/ui.tsx create mode 100644 src/views/expertise/zem-stroy/index.ts create mode 100644 src/views/expertise/zem-stroy/model/article.ts create mode 100644 src/views/expertise/zem-stroy/model/breadcrums.ts create mode 100644 src/views/expertise/zem-stroy/model/expert.ts create mode 100644 src/views/expertise/zem-stroy/model/related.ts create mode 100644 src/views/expertise/zem-stroy/model/sidebar.ts create mode 100644 src/views/expertise/zem-stroy/styles.module.scss create mode 100644 src/views/expertise/zem-stroy/ui.tsx diff --git a/public/images/photo/empty-photo.jpg b/public/images/photo/empty-photo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8090466529c8f8c2681eee0e1fa71c767a1c6c5 GIT binary patch literal 3704 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 z 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ÝIo@EcHGS778NJT9TwPG+ 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 + return ; } diff --git a/src/app/ekspertiza/dokumentov/page.tsx b/src/app/ekspertiza/dokumentov/page.tsx index e63b7c0..5458db2 100644 --- a/src/app/ekspertiza/dokumentov/page.tsx +++ b/src/app/ekspertiza/dokumentov/page.tsx @@ -1,3 +1,5 @@ +import { Document } from '@/views'; + export default function Page() { - return
    Page
    ; + return ; } diff --git a/src/app/ekspertiza/finansovo-jekonomicheskaja/page.tsx b/src/app/ekspertiza/finansovo-jekonomicheskaja/page.tsx index e63b7c0..daffc9a 100644 --- a/src/app/ekspertiza/finansovo-jekonomicheskaja/page.tsx +++ b/src/app/ekspertiza/finansovo-jekonomicheskaja/page.tsx @@ -1,3 +1,5 @@ +import { Finans } from '@/views'; + export default function Page() { - return
    Page
    ; + return ; } diff --git a/src/app/ekspertiza/kadastrovaja/page.tsx b/src/app/ekspertiza/kadastrovaja/page.tsx index e63b7c0..e6a72f4 100644 --- a/src/app/ekspertiza/kadastrovaja/page.tsx +++ b/src/app/ekspertiza/kadastrovaja/page.tsx @@ -1,3 +1,5 @@ +import { Kadastr } from '@/views'; + export default function Page() { - return
    Page
    ; + return ; } diff --git a/src/app/ekspertiza/kompjuterno-tehnicheskaja/page.tsx b/src/app/ekspertiza/kompjuterno-tehnicheskaja/page.tsx index e63b7c0..74b6f52 100644 --- a/src/app/ekspertiza/kompjuterno-tehnicheskaja/page.tsx +++ b/src/app/ekspertiza/kompjuterno-tehnicheskaja/page.tsx @@ -1,3 +1,5 @@ +import { Computer } from '@/views'; + export default function Page() { - return
    Page
    ; + return ; } diff --git a/src/app/ekspertiza/pocherkovedcheskaja/page.tsx b/src/app/ekspertiza/pocherkovedcheskaja/page.tsx index e63b7c0..1a74660 100644 --- a/src/app/ekspertiza/pocherkovedcheskaja/page.tsx +++ b/src/app/ekspertiza/pocherkovedcheskaja/page.tsx @@ -1,3 +1,5 @@ +import { Pocherk } from '@/views'; + export default function Page() { - return
    Page
    ; + return ; } diff --git a/src/app/ekspertiza/pozharno-tehnicheskaja/page.tsx b/src/app/ekspertiza/pozharno-tehnicheskaja/page.tsx index e63b7c0..4b2bbc8 100644 --- a/src/app/ekspertiza/pozharno-tehnicheskaja/page.tsx +++ b/src/app/ekspertiza/pozharno-tehnicheskaja/page.tsx @@ -1,3 +1,5 @@ +import { Pozhar } from '@/views'; + export default function Page() { - return
    Page
    ; + return ; } diff --git a/src/app/ekspertiza/recenzirovanie/page.tsx b/src/app/ekspertiza/recenzirovanie/page.tsx index e63b7c0..108feeb 100644 --- a/src/app/ekspertiza/recenzirovanie/page.tsx +++ b/src/app/ekspertiza/recenzirovanie/page.tsx @@ -1,3 +1,5 @@ +import { Recenzii } from '@/views'; + export default function Page() { - return
    Page
    ; + return ; } diff --git a/src/app/ekspertiza/stroitelno-tehnicheskaja/page.tsx b/src/app/ekspertiza/stroitelno-tehnicheskaja/page.tsx index e63b7c0..aa9b077 100644 --- a/src/app/ekspertiza/stroitelno-tehnicheskaja/page.tsx +++ b/src/app/ekspertiza/stroitelno-tehnicheskaja/page.tsx @@ -1,3 +1,5 @@ +import { Stroit } from '@/views'; + export default function Page() { - return
    Page
    ; + return ; } diff --git a/src/app/ekspertiza/tehniko-kriminalisticheskaja/page.tsx b/src/app/ekspertiza/tehniko-kriminalisticheskaja/page.tsx index e63b7c0..13e9844 100644 --- a/src/app/ekspertiza/tehniko-kriminalisticheskaja/page.tsx +++ b/src/app/ekspertiza/tehniko-kriminalisticheskaja/page.tsx @@ -1,3 +1,5 @@ +import { TechCrim } from '@/views'; + export default function Page() { - return
    Page
    ; + return ; } diff --git a/src/app/ekspertiza/tovarovedcheskaja/page.tsx b/src/app/ekspertiza/tovarovedcheskaja/page.tsx index e63b7c0..329264d 100644 --- a/src/app/ekspertiza/tovarovedcheskaja/page.tsx +++ b/src/app/ekspertiza/tovarovedcheskaja/page.tsx @@ -1,3 +1,5 @@ +import { Tovar } from '@/views'; + export default function Page() { - return
    Page
    ; + return ; } diff --git a/src/app/ekspertiza/trasologicheskaja/page.tsx b/src/app/ekspertiza/trasologicheskaja/page.tsx index e63b7c0..09d3fcc 100644 --- a/src/app/ekspertiza/trasologicheskaja/page.tsx +++ b/src/app/ekspertiza/trasologicheskaja/page.tsx @@ -1,3 +1,5 @@ +import { Trasologia } from '@/views'; + export default function Page() { - return
    Page
    ; + return ; } diff --git a/src/app/ekspertiza/zemle-ustroitelnaja/page.tsx b/src/app/ekspertiza/zemle-ustroitelnaja/page.tsx index e63b7c0..c9c6475 100644 --- a/src/app/ekspertiza/zemle-ustroitelnaja/page.tsx +++ b/src/app/ekspertiza/zemle-ustroitelnaja/page.tsx @@ -1,3 +1,5 @@ +import { ZemStroy } from '@/views'; + export default function Page() { - return
    Page
    ; + return ; } diff --git a/src/entities/callback-form/ui.tsx b/src/entities/callback-form/ui.tsx index 10e58f8..5d3bea8 100644 --- a/src/entities/callback-form/ui.tsx +++ b/src/entities/callback-form/ui.tsx @@ -62,7 +62,7 @@ function CallbackForm({ pageName = 'noname-form' }: CallbackFormProps) { }; return ( -
    +

    Узнать точную стоимость и срок экспертизы

    -
    + ); } diff --git a/src/entities/connect/style.module.scss b/src/entities/connect/style.module.scss index 10dd027..0e0aacb 100644 --- a/src/entities/connect/style.module.scss +++ b/src/entities/connect/style.module.scss @@ -1,3 +1,25 @@ +.Section { + display: block; +} + +.Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; +} + +.Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; +} + .Container { display: grid; grid-template-columns: auto; diff --git a/src/entities/connect/ui.tsx b/src/entities/connect/ui.tsx index d3bc663..58d1f6a 100644 --- a/src/entities/connect/ui.tsx +++ b/src/entities/connect/ui.tsx @@ -6,50 +6,59 @@ import tgImg from '@public/images/tg-rounded-logo.png'; import waImg from '@public/images/wa-rounded-logo.png'; import { CONTACTS } from '@shared/const/contacts'; -function Connect() { +type ConnectProps = { + title: string; + description: string; +}; + +function Connect({ title, description }: ConnectProps) { const emailTo = `mailto:${CONTACTS.EMAIL}`; const callTo = `tel:${CONTACTS.PHONE}`; const telegramTo = CONTACTS.TELEGRAM; const whatsappTo = CONTACTS.WHATSAPP; return ( -
    -
    -
    - - {''} - - -

    WHATSAPP

    -
    +
    +

    {title}

    +

    {description}

    +
    + - - -
    -

    Звоните по телефону

    - - - -

    мы работаем с 08:00 до 17:00

    -
    -
    +
    ); } diff --git a/src/entities/order-schema/styles.module.scss b/src/entities/order-schema/styles.module.scss index 7c7a8f5..8d93d37 100644 --- a/src/entities/order-schema/styles.module.scss +++ b/src/entities/order-schema/styles.module.scss @@ -1,3 +1,25 @@ +.Section { + display: block; +} + +.Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; +} + +.Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; +} + .Container { display: grid; grid-template-columns: 1fr; @@ -77,6 +99,7 @@ color: $color-white; text-align: center; text-transform: uppercase; + margin: 0; @include iftablet { font-size: rem(14px); diff --git a/src/entities/order-schema/ui.tsx b/src/entities/order-schema/ui.tsx index 725ffd3..2b4f4e4 100644 --- a/src/entities/order-schema/ui.tsx +++ b/src/entities/order-schema/ui.tsx @@ -6,46 +6,55 @@ import stepThree from '@public/images/step3.png'; import stepFour from '@public/images/step4.png'; import arrow from '@public/images/arrow.png'; -function OrderSchema() { +type OrderSchemaProps = { + title: string; + description: string; +}; + +function OrderSchema({ title, description }: OrderSchemaProps) { return ( -
    -
    - {''} -

    Заявка на сайте

    -

    или

    -

    звонок по телефону

    -

    +7 (900) 241-34-34

    +
    +

    {title}

    +
    +
    + {''} +

    Заявка на сайте

    +

    или

    +

    звонок по телефону

    +

    +7 (900) 241-34-34

    +
    +
    + {''} +
    +
    + {''} +

    Мы свяжемся

    +

    с вами

    +

    и уточним

    +

    детали

    +
    +
    + {''} +
    +
    + {''} +

    Подписываем договор,

    +

    Вы оплачиваете услуги,

    +

    предоставляете необходимые

    +

    документы

    +
    +
    + {''} +
    +
    + {''} +

    Составляем

    +

    Экспертное заключение,

    +

    вы получаете результат

    +
    -
    - {''} -
    -
    - {''} -

    Мы свяжемся

    -

    с вами

    -

    и уточним

    -

    детали

    -
    -
    - {''} -
    -
    - {''} -

    Подписываем договор,

    -

    Вы оплачиваете услуги,

    -

    предоставляете необходимые

    -

    документы

    -
    -
    - {''} -
    -
    - {''} -

    Составляем

    -

    Экспертное заключение,

    -

    вы получаете результат

    -
    -
    +

    {description}

    + ); } diff --git a/src/feature/article/consultation-modal/ui.tsx b/src/feature/article/consultation-modal/ui.tsx index 29c03bd..9eb95c6 100644 --- a/src/feature/article/consultation-modal/ui.tsx +++ b/src/feature/article/consultation-modal/ui.tsx @@ -34,10 +34,12 @@ const defaultValues = { }; type ConsultationModalProps = { - className?: string; + pageName?: string; }; -function ConsultationModal({}: ConsultationModalProps) { +function ConsultationModal({ + pageName = 'noname-modal', +}: ConsultationModalProps) { const { handleSubmit, control, @@ -54,7 +56,7 @@ function ConsultationModal({}: ConsultationModalProps) { const onSubmit = async (data: TForm) => { const payload = { ...data, - form: 'consultation-modal-form', + form: pageName, }; try { diff --git a/src/feature/article/consultation/ui.tsx b/src/feature/article/consultation/ui.tsx index 9d9fc50..4aed4e4 100644 --- a/src/feature/article/consultation/ui.tsx +++ b/src/feature/article/consultation/ui.tsx @@ -13,6 +13,7 @@ import toast from 'react-hot-toast'; type ConsultationProps = { pageName?: string; + disableExpert?: boolean; } & TExpert; const FormSchema = z.object({ @@ -37,6 +38,7 @@ function Consultation({ name, position, photo, + disableExpert = false, }: ConsultationProps) { const { handleSubmit, @@ -113,11 +115,15 @@ function Consultation({
    -
    - {`${position} -

    {name}

    -

    {position}

    -
    + {disableExpert ? ( +
    + ) : ( +
    + {`${position} +

    {name}

    +

    {position}

    +
    + )}
    ); diff --git a/src/widgets/partners-slider/index.ts b/src/feature/article/documents/index.ts similarity index 100% rename from src/widgets/partners-slider/index.ts rename to src/feature/article/documents/index.ts diff --git a/src/feature/article/documents/styles.module.scss b/src/feature/article/documents/styles.module.scss new file mode 100644 index 0000000..2f57bd5 --- /dev/null +++ b/src/feature/article/documents/styles.module.scss @@ -0,0 +1,39 @@ +.Section { + display: block; +} + +.Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; +} + +.Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; +} + +.List { + display: flex; + flex-direction: column; + list-style-type: disc; + margin-left: 16px; + margin-bottom: 16px; +} + +.ListItem { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; +} + diff --git a/src/feature/article/documents/ui.tsx b/src/feature/article/documents/ui.tsx new file mode 100644 index 0000000..27bb91d --- /dev/null +++ b/src/feature/article/documents/ui.tsx @@ -0,0 +1,25 @@ +import s from './styles.module.scss'; + +type DocumentsProps = { + title: string; + description?: string; + docs: string[]; +}; + +function Documents({ title, description, docs }: DocumentsProps) { + return ( +
    +

    {title}

    +

    {description}

    +
      + {docs.map((document, index) => ( +
    • + {document} +
    • + ))} +
    +
    + ); +} + +export { Documents }; diff --git a/src/feature/article/index.ts b/src/feature/article/index.ts index b164fea..ea5a7d9 100644 --- a/src/feature/article/index.ts +++ b/src/feature/article/index.ts @@ -2,3 +2,5 @@ export * from './related-articles'; export * from './consultation'; export * from './sidebar'; export * from './consultation-modal'; +export * from './partners'; +export * from './documents'; diff --git a/src/feature/article/partners/index.ts b/src/feature/article/partners/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/feature/article/partners/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/feature/article/partners/styles.module.scss b/src/feature/article/partners/styles.module.scss new file mode 100644 index 0000000..7dc1a1e --- /dev/null +++ b/src/feature/article/partners/styles.module.scss @@ -0,0 +1,19 @@ +.Partners { + .Divider { + width: 100%; + display: flex; + text-align: center; + padding: rem(40px) 0; + + .Separator { + display: flex; + width: 100%; + margin: 0 auto; + min-height: 15px; + mask-size: 20px 100%; + mask-repeat: repeat-x; + background-color: $color-green; + mask-image: url(/svg/rotated-lines.svg); + } + } +} diff --git a/src/feature/article/partners/ui.tsx b/src/feature/article/partners/ui.tsx new file mode 100644 index 0000000..34e8948 --- /dev/null +++ b/src/feature/article/partners/ui.tsx @@ -0,0 +1,18 @@ +import s from './styles.module.scss'; +import { PartnersSlider } from '@shared/ui'; + +function Partners() { + return ( +
    +
    + +
    + +
    + +
    +
    + ); +} + +export { Partners }; diff --git a/src/feature/article/sidebar/ui.tsx b/src/feature/article/sidebar/ui.tsx index a7e7673..8aabd39 100644 --- a/src/feature/article/sidebar/ui.tsx +++ b/src/feature/article/sidebar/ui.tsx @@ -8,7 +8,7 @@ import { useModal } from '@core/providers/modal-provider'; import { ConsultationModal } from '@/feature/article'; import { CONTACTS } from '@shared/const/contacts'; -type SidebarProps = TSidebar; +type SidebarProps = { pageName?: string } & TSidebar; function Sidebar({ estimate = '3', @@ -16,9 +16,11 @@ function Sidebar({ related, warrantiesTitle, warranties, + pageName, }: SidebarProps) { const modal = useModal(); - const openModal = () => modal.showModal(); + const openModal = () => + modal.showModal(); const callTo = `tel:${CONTACTS.PHONE}`; diff --git a/src/shared/ui/index.ts b/src/shared/ui/index.ts index 2b3a1c8..e678b34 100644 --- a/src/shared/ui/index.ts +++ b/src/shared/ui/index.ts @@ -3,3 +3,4 @@ export * from './phone-input'; export * from './button'; export * from './modal'; export * from './text-area'; +export * from './partners-slider'; diff --git a/src/shared/ui/partners-slider/index.ts b/src/shared/ui/partners-slider/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/shared/ui/partners-slider/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/widgets/partners-slider/model/slides.ts b/src/shared/ui/partners-slider/model/slides.ts similarity index 100% rename from src/widgets/partners-slider/model/slides.ts rename to src/shared/ui/partners-slider/model/slides.ts diff --git a/src/widgets/partners-slider/styles.module.scss b/src/shared/ui/partners-slider/styles.module.scss similarity index 100% rename from src/widgets/partners-slider/styles.module.scss rename to src/shared/ui/partners-slider/styles.module.scss diff --git a/src/widgets/partners-slider/ui.tsx b/src/shared/ui/partners-slider/ui.tsx similarity index 93% rename from src/widgets/partners-slider/ui.tsx rename to src/shared/ui/partners-slider/ui.tsx index 29fa92f..01a6b10 100644 --- a/src/widgets/partners-slider/ui.tsx +++ b/src/shared/ui/partners-slider/ui.tsx @@ -9,7 +9,7 @@ import s from './styles.module.scss'; import Image from 'next/image'; import { Swiper, SwiperSlide } from 'swiper/react'; import { Autoplay, Grid } from 'swiper/modules'; -import { slidesData } from '@widgets/partners-slider/model/slides'; +import { slidesData } from './model/slides'; const swiperBreakpoints = { 360: { diff --git a/src/views/expertise/autotech/model/article.ts b/src/views/expertise/autotech/model/article.ts new file mode 100644 index 0000000..43a47a2 --- /dev/null +++ b/src/views/expertise/autotech/model/article.ts @@ -0,0 +1,24 @@ +const documentsData = { + title: 'Документы, необходимые для экспертизы', + description: + 'Для начала работ по автомобильной экспертизе эксперту понадобятся основные документы:', + docs: [ + 'свидетельство о государственной регистрации транспортного средства;', + 'справка с места ДТП;', + 'паспортные данные заказчика;', + ], +}; + +const howToData = { + title: 'Заказать экспертизу очень просто', + description: + 'Экспертное заключение, полученный от компании «ДИ ТРАСО», будет являться официальным документом, подтверждающим результат работы эксперта. В нем будет содержаться вся полная информация..', +}; + +const connectData = { + title: 'Как провести автотехническую экспертизу', + description: + 'Для того, чтобы заказать выполнение автотехнической экспертизы, вы можете воспользоваться любым удобным способом.', +}; + +export { documentsData, howToData, connectData }; diff --git a/src/views/expertise/autotech/model/relatedArticles.ts b/src/views/expertise/autotech/model/related.ts similarity index 100% rename from src/views/expertise/autotech/model/relatedArticles.ts rename to src/views/expertise/autotech/model/related.ts diff --git a/src/views/expertise/autotech/styles.module.scss b/src/views/expertise/autotech/styles.module.scss index 2b02494..12e439f 100644 --- a/src/views/expertise/autotech/styles.module.scss +++ b/src/views/expertise/autotech/styles.module.scss @@ -29,6 +29,10 @@ flex-direction: column; padding: rem(40px) 0; + .Section { + display: block; + } + .Text { font-family: $font-roboto; font-weight: 400; @@ -65,22 +69,3 @@ } } -.Partners { - .Divider { - width: 100%; - display: flex; - text-align: center; - padding: rem(40px) 0; - - .Separator { - display: flex; - width: 100%; - margin: 0 auto; - min-height: 15px; - mask-size: 20px 100%; - mask-repeat: repeat-x; - background-color: $color-green; - mask-image: url(/svg/rotated-lines.svg); - } - } -} diff --git a/src/views/expertise/autotech/ui.tsx b/src/views/expertise/autotech/ui.tsx index 966ab88..35c4ba7 100644 --- a/src/views/expertise/autotech/ui.tsx +++ b/src/views/expertise/autotech/ui.tsx @@ -1,19 +1,26 @@ import s from './styles.module.scss'; import { CallbackForm, Connect, OrderSchema } from '@/entities'; -import { Consultation, RelatedArticles, Sidebar } from '@/feature/article'; -import { Breadcrumbs, PartnersSlider } from '@/widgets'; +import { + Consultation, + Documents, + Partners, + RelatedArticles, + Sidebar, +} from '@/feature/article'; +import { Breadcrumbs } from '@/widgets'; import { sidebarData } from './model/sidebar'; -import { relatedArticlesData } from './model/relatedArticles'; +import { relatedArticlesData } from './model/related'; import { expertData } from './model/expert'; import { breadcrumbData, PAGE_NAME } from './model/breadcrums'; +import { connectData, documentsData, howToData } from './model/article'; function AutoTech() { return ( <> -
    -
    -
    +
    +
    +

    При возникновении ситуаций, возникающих в результате ДТП (дорожно-транспортных происшествий), для решения наиболее сложных @@ -57,55 +64,18 @@ function AutoTech() { изменен. - - - -

    Документы, необходимые для экспертизы:

    -

    - Для начала работ по автомобильной экспертизе эксперту понадобятся - основные документы: -

    -
      -
    • - свидетельство о государственной регистрации транспортного - средства; -
    • -
    • справка с места ДТП
    • -
    • паспортные данные заказчика;
    • -
    -

    Заказать экспертизу очень просто:

    - - - -

    - Экспертное заключение, полученный от компании «ДИ ТРАСО», будет - являться официальным документом, подтверждающим результат работы - эксперта. В нем будет содержаться вся полная информация.. -

    -

    - Как провести автотехническую экспертизу -

    -

    - Для того, чтобы заказать выполнение автотехнической экспертизы, вы - можете воспользоваться любым удобным способом. -

    - -
    - +
    + + + +
    - + + -
    -
    - -
    - -
    - -
    -
    + ); } diff --git a/src/views/expertise/buhgalter/index.ts b/src/views/expertise/buhgalter/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/expertise/buhgalter/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/expertise/buhgalter/model/article.ts b/src/views/expertise/buhgalter/model/article.ts new file mode 100644 index 0000000..452e9c9 --- /dev/null +++ b/src/views/expertise/buhgalter/model/article.ts @@ -0,0 +1,24 @@ +const documentsData = { + title: 'Цели экспертизы:', + description: '', + docs: [ + 'Исследование неправомерного использования денежных средств в организации, где ведется проверка;', + 'Выявление несоответствий в порядке ведения бухгалтерского учета законодательству;', + 'Выявление суммы недостачи, образовавшийся за определенный период, размера излишков товаров определенного наименования, неподтвержденного расхода денежных средств;', + 'Расчет размера причиненного ущерба.', + ], +}; + +const howToData = { + title: 'Заказать экспертизу очень просто', + description: + 'Экспертное заключение, полученный от компании «ДИ ТРАСО», будет являться официальным документом, подтверждающим результат работы эксперта. В нем будет содержаться вся полная информация..', +}; + +const connectData = { + title: 'Как провести бухгалтерскую экспертизу', + description: + 'Для того, чтобы заказать выполнение бухгалтерской экспертизы, вы можете воспользоваться любым удобным способом.', +}; + +export { documentsData, howToData, connectData }; diff --git a/src/views/expertise/buhgalter/model/breadcrums.ts b/src/views/expertise/buhgalter/model/breadcrums.ts new file mode 100644 index 0000000..e8a428b --- /dev/null +++ b/src/views/expertise/buhgalter/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Бухгалтерская экспертиза'; + +export const breadcrumbData = [ + { + name: 'Экспертиза', + path: ROUTES.EXPERTIZA, + }, + { + name: PAGE_NAME, + path: '', + }, +]; diff --git a/src/views/expertise/buhgalter/model/expert.ts b/src/views/expertise/buhgalter/model/expert.ts new file mode 100644 index 0000000..27c5647 --- /dev/null +++ b/src/views/expertise/buhgalter/model/expert.ts @@ -0,0 +1,8 @@ +import { TExpert } from '@shared/types/expert'; +import expertPhoto from '@public/images/photo/kolodiy-aleksandr.png'; + +export const expertData: TExpert = { + name: 'Колодий Александр', + position: 'Товароведческий эксперт, Компьютерно-технический эксперт', + photo: expertPhoto, +}; diff --git a/src/views/expertise/buhgalter/model/related.ts b/src/views/expertise/buhgalter/model/related.ts new file mode 100644 index 0000000..e57933a --- /dev/null +++ b/src/views/expertise/buhgalter/model/related.ts @@ -0,0 +1,29 @@ +import { TRelatedArticles } from '@shared/types/relatedArticles'; +import { ROUTES } from '@shared/const/route'; + +export const relatedArticlesData: TRelatedArticles[] = [ + { + title: 'Финансово-экономическая экспертиза', + description: + 'Зачастую, бухгалтерская экспертиза является информационной основой для финансово-экономической экспертизы, по причине необходимости исследования одних и тех же объектов. Основная цель – выявление фактов и обстоятельств…', + link: ROUTES.EXPERTIZA_FINANS, + }, + { + title: 'Компьютерно-техническая экспертиза', + description: + 'Проведение такого исследования может потребоваться, например, когда необходимо восстановить или расшифровать ту или иную информацию, установить, какие действия были совершены…', + link: ROUTES.EXPERTIZA_COPMPUTER, + }, + { + title: 'Почерковедческая экспертиза', + description: + 'Почерковедческая экспертиза, т.е. исследование рукописных текстов и подписей, широко используется в криминалистике. Она востребована в судебной практике, поскольку рукописный текст может фигурировать в деле в качестве доказательства…', + link: ROUTES.EXPERTIZA_POCHERK, + }, + { + title: 'Рецензия (Проверка) экспертизы', + description: + 'Необходимость в составлении рецензии на судебную экспертизу появляется в ситуациях, когда выводы заключения являются не обоснованными, а квалификация и опыт эксперта не вызывают доверия. В ходе рецензирования экспертное заключение проверяется…', + link: ROUTES.EXPERTIZA_RECENZII, + }, +]; diff --git a/src/views/expertise/buhgalter/model/sidebar.ts b/src/views/expertise/buhgalter/model/sidebar.ts new file mode 100644 index 0000000..77991aa --- /dev/null +++ b/src/views/expertise/buhgalter/model/sidebar.ts @@ -0,0 +1,41 @@ +import { TSidebar } from '@/shared/types/sidebar'; +import { ROUTES } from '@shared/const/route'; + +const sidebarData: TSidebar = { + estimate: '3', + relatedTitle: 'Сопутствующие экспертизы', + related: [ + { + title: 'Бухгалтерская', + link: ROUTES.EXPERTIZA_BUHGALTER, + }, + { + title: 'Финансово-экономическая', + link: ROUTES.EXPERTIZA_FINANS, + }, + { + title: 'Земле-устроительная', + link: ROUTES.EXPERTIZA_ZEM_STROY, + }, + { + title: 'Кадастровая', + link: ROUTES.EXPERTIZA_KADASTR, + }, + { + title: 'Строительно-техническая', + link: ROUTES.EXPERTIZA_STROIT, + }, + { + title: 'Рецензирование (Проверка)', + link: ROUTES.EXPERTIZA_RECENZII, + }, + ], + warrantiesTitle: 'Наши гарантии', + warranties: [ + 'Эксперты компании являются членами Саморегулируемой организации судебных экспертов', + 'Деятельность компании застрахована на 60 000 000 рублей', + 'Экспертизы выполняются в соответствии с Федеральными Законодательными Актами', + ], +}; + +export { sidebarData }; diff --git a/src/views/expertise/buhgalter/styles.module.scss b/src/views/expertise/buhgalter/styles.module.scss new file mode 100644 index 0000000..12e439f --- /dev/null +++ b/src/views/expertise/buhgalter/styles.module.scss @@ -0,0 +1,71 @@ +.Container { + margin: 0 auto; + max-width: rem(1540px); + display: grid; + grid-template-columns: auto; + gap: 0px; + padding: 0 10px; + + @include iftablet { + grid-template-columns: auto; + padding: 0 20px; + } + + @include iflaptop { + padding: 0 28px; + gap: 40px; + grid-template-columns: auto 300px; + } + + @include ifdesktop { + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } +} + +.Article { + display: flex; + flex-direction: column; + padding: rem(40px) 0; + + .Section { + display: block; + } + + .Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .List { + display: flex; + flex-direction: column; + list-style-type: disc; + margin-left: 16px; + margin-bottom: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + } + + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } +} + diff --git a/src/views/expertise/buhgalter/ui.tsx b/src/views/expertise/buhgalter/ui.tsx new file mode 100644 index 0000000..3242d10 --- /dev/null +++ b/src/views/expertise/buhgalter/ui.tsx @@ -0,0 +1,67 @@ +import s from './styles.module.scss'; +import { CallbackForm, Connect, OrderSchema } from '@/entities'; +import { + Consultation, + Documents, + Partners, + RelatedArticles, + Sidebar, +} from '@/feature/article'; +import { Breadcrumbs } from '@/widgets'; +import { sidebarData } from './model/sidebar'; +import { relatedArticlesData } from './model/related'; +import { expertData } from './model/expert'; +import { breadcrumbData, PAGE_NAME } from './model/breadcrums'; +import { connectData, documentsData, howToData } from './model/article'; + +function Buhgalter() { + return ( + <> + +
    +
    +
    +

    + Необходимость в судебно-бухгалтерской экспертизе возникает в связи + с расследованием или судебным рассмотрением уголовных дел о + присвоениях или должностных преступлениях. По гражданским делам – + при возникновении потребности в анализе данных о + финансово-хозяйственных операциях, отраженных в бухгалтерском + учете. В процессе производства экспертиз подобного рода анализу + подлежит производственная и финансово-хозяйственная деятельность + предприятий самых различных форм собственности, в которых допущены + убытки, потери, бесхозяйственность, находит место присвоения + товарно-материальных ценностей и определяются суммы материальной + ответственности за причиненный материальный ущерб. +

    +

    + Наши эксперты-бухгалтеры обладают соответствующей квалификацией, + что подтверждено специальной аттестацией. Кроме того, наряду со + знаниями бухучета, экономики и финансов, эксперты-бухгалтеры + обладают знаниями законодательства и процессуальных норм, в + частности. +

    +

    + После проведения экспертизы клиент получает экспертное заключение, + содержащее информацию о применяемых способах, список поднятых + вопросов и заключения о найденных нарушениях. Экспертное + заключение может быть применено как аргументируемое доказательство + в судебных тяжбах. +

    +
    + + + + +
    + +
    + + + + + + ); +} + +export { Buhgalter }; diff --git a/src/views/expertise/computer/index.ts b/src/views/expertise/computer/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/expertise/computer/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/expertise/computer/model/article.ts b/src/views/expertise/computer/model/article.ts new file mode 100644 index 0000000..2d5f32c --- /dev/null +++ b/src/views/expertise/computer/model/article.ts @@ -0,0 +1,29 @@ +const documentsData = { + title: 'Цели экспертизы:', + description: '', + docs: [ + 'необходимость определения технических характеристик оборудования;', + 'необходимость определения функционального предназначения;', + 'необходимость определения наличия и происхождения дефектов;', + 'необходимость определения времени и инструментов доступа к носителю информации;', + 'необходимость определения содержания скрытой информации;', + 'необходимость определения взаимосвязи неисправности с неправильной эксплуатацией;', + 'необходимость определения вида носителя информации;', + 'необходимость определения установок и протоколов соединения с Интернетом;', + 'необходимость определения признаков контрафактного программного обеспечения.', + ], +}; + +const howToData = { + title: 'Заказать экспертизу очень просто', + description: + 'Экспертное заключение, полученный от компании «ДИ ТРАСО», будет являться официальным документом, подтверждающим результат работы эксперта. В нем будет содержаться вся полная информация..', +}; + +const connectData = { + title: 'Как провести компьютерно-техническую экспертизу ', + description: + 'Для того, чтобы заказать выполнение компьютерно-технической экспертизы, вы можете воспользоваться любым удобным способом.', +}; + +export { documentsData, howToData, connectData }; diff --git a/src/views/expertise/computer/model/breadcrums.ts b/src/views/expertise/computer/model/breadcrums.ts new file mode 100644 index 0000000..ecd8425 --- /dev/null +++ b/src/views/expertise/computer/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Компьютерно-техническая экспертиза'; + +export const breadcrumbData = [ + { + name: 'Экспертиза', + path: ROUTES.EXPERTIZA, + }, + { + name: PAGE_NAME, + path: '', + }, +]; diff --git a/src/views/expertise/computer/model/expert.ts b/src/views/expertise/computer/model/expert.ts new file mode 100644 index 0000000..27c5647 --- /dev/null +++ b/src/views/expertise/computer/model/expert.ts @@ -0,0 +1,8 @@ +import { TExpert } from '@shared/types/expert'; +import expertPhoto from '@public/images/photo/kolodiy-aleksandr.png'; + +export const expertData: TExpert = { + name: 'Колодий Александр', + position: 'Товароведческий эксперт, Компьютерно-технический эксперт', + photo: expertPhoto, +}; diff --git a/src/views/expertise/computer/model/related.ts b/src/views/expertise/computer/model/related.ts new file mode 100644 index 0000000..5f8b4b3 --- /dev/null +++ b/src/views/expertise/computer/model/related.ts @@ -0,0 +1,29 @@ +import { TRelatedArticles } from '@shared/types/relatedArticles'; +import { ROUTES } from '@shared/const/route'; + +export const relatedArticlesData: TRelatedArticles[] = [ + { + title: 'Товароведческая экспертиза', + description: + 'Судебная экспертиза товаров должна проводиться только специалистом, получившим узкопрофильную квалификацию. Если Вам необходима товароведческая экспертиза и для суда, мы готовы подробно исследовать любой товар. Результат работы…', + link: ROUTES.EXPERTIZA_TOVAR, + }, + { + title: 'Технико-криминалистическая экспертиза', + description: + 'Если ваши имущественные или гражданские права были поставлены под сомнение на основании поддельной документации, то технико-криминалистическая экспертиза может оказаться единственным реальным шансом оспорить необоснованные претензии…', + link: ROUTES.EXPERTIZA_TECH_CRIM, + }, + { + title: 'Оценочная экспертиза', + description: + 'Судебная оценочная (стоимостная) экспертиза представляет собой вид экспертизы, главной задачей которой является определение рыночной стоимости объектов оценки…', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Документарная экспертиза', + description: + 'Если возникают сомнения в подлинности документа, например, завещания или долговой расписки, если Вы не уверены в достоверности реквизитов или подписи на договоре, то Вы вправе обратиться за технической экспертизой документа…', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, +]; diff --git a/src/views/expertise/computer/model/sidebar.ts b/src/views/expertise/computer/model/sidebar.ts new file mode 100644 index 0000000..cac8c8f --- /dev/null +++ b/src/views/expertise/computer/model/sidebar.ts @@ -0,0 +1,37 @@ +import { TSidebar } from '@/shared/types/sidebar'; +import { ROUTES } from '@shared/const/route'; + +const sidebarData: TSidebar = { + estimate: '3', + relatedTitle: 'Сопутствующие экспертизы', + related: [ + { + title: 'Товароведческая', + link: ROUTES.EXPERTIZA_TOVAR, + }, + { + title: 'Оценочная', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Технико-криминалистическая', + link: ROUTES.EXPERTIZA_TECH_CRIM, + }, + { + title: 'Документарная', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, + { + title: 'Рецензирование (Проверка)', + link: ROUTES.EXPERTIZA_RECENZII, + }, + ], + warrantiesTitle: 'Наши гарантии', + warranties: [ + 'Эксперты компании являются членами Саморегулируемой организации судебных экспертов', + 'Деятельность компании застрахована на 60 000 000 рублей', + 'Экспертизы выполняются в соответствии с Федеральными Законодательными Актами', + ], +}; + +export { sidebarData }; diff --git a/src/views/expertise/computer/styles.module.scss b/src/views/expertise/computer/styles.module.scss new file mode 100644 index 0000000..12e439f --- /dev/null +++ b/src/views/expertise/computer/styles.module.scss @@ -0,0 +1,71 @@ +.Container { + margin: 0 auto; + max-width: rem(1540px); + display: grid; + grid-template-columns: auto; + gap: 0px; + padding: 0 10px; + + @include iftablet { + grid-template-columns: auto; + padding: 0 20px; + } + + @include iflaptop { + padding: 0 28px; + gap: 40px; + grid-template-columns: auto 300px; + } + + @include ifdesktop { + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } +} + +.Article { + display: flex; + flex-direction: column; + padding: rem(40px) 0; + + .Section { + display: block; + } + + .Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .List { + display: flex; + flex-direction: column; + list-style-type: disc; + margin-left: 16px; + margin-bottom: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + } + + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } +} + diff --git a/src/views/expertise/computer/ui.tsx b/src/views/expertise/computer/ui.tsx new file mode 100644 index 0000000..5eb03b5 --- /dev/null +++ b/src/views/expertise/computer/ui.tsx @@ -0,0 +1,62 @@ +import s from './styles.module.scss'; +import { CallbackForm, Connect, OrderSchema } from '@/entities'; +import { + Consultation, + Documents, + Partners, + RelatedArticles, + Sidebar, +} from '@/feature/article'; +import { Breadcrumbs } from '@/widgets'; +import { sidebarData } from './model/sidebar'; +import { relatedArticlesData } from './model/related'; +import { expertData } from './model/expert'; +import { breadcrumbData, PAGE_NAME } from './model/breadcrums'; +import { connectData, documentsData, howToData } from './model/article'; + +function Computer() { + return ( + <> + +
    +
    +
    +

    + Компьютерная экспертиза (которую в зависимости от объекта + исследования принято подразделять на аппаратно-компьютерную, + программно-компьютерную, информационно-компьютерную и + компьютерно-сетевую) имеет дело как с компьютерной техникой, так и + с программным обеспечением и базами данных. +

    +

    + Проведение такого исследования может потребоваться, например, + когда необходимо восстановить или расшифровать ту или иную + информацию (в том числе, в рамках уголовного дела), установить, + какие действия были совершены с помощью конкретного устройства, + выявить факты использования «пиратского» ПО и в ряде других + ситуаций, связанных с компьютерной техникой и носителями + информации. +

    +

    + Проведение экспертизы программных комплексов и программного + обеспечения может также потребоваться при наличии необходимости + рассчитать ущерб, понесенный в результате некорректной работы + компьютерной техники. +

    +
    + + + + +
    + +
    + + + + + + ); +} + +export { Computer }; diff --git a/src/views/expertise/document/index.ts b/src/views/expertise/document/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/expertise/document/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/expertise/document/model/article.ts b/src/views/expertise/document/model/article.ts new file mode 100644 index 0000000..1a4efc3 --- /dev/null +++ b/src/views/expertise/document/model/article.ts @@ -0,0 +1,22 @@ +const documentsData = { + title: 'Документы, необходимые для экспертизы', + description: '', + docs: [ + 'документы экспертизу, которых необходимо провести', + 'паспортные данные заказчика;', + ], +}; + +const howToData = { + title: 'Заказать экспертизу очень просто', + description: + 'Экспертное заключение, полученный от компании «ДИ ТРАСО», будет являться официальным документом, подтверждающим результат работы эксперта. В нем будет содержаться вся полная информация..', +}; + +const connectData = { + title: 'Как провести экспертизу документов', + description: + 'Для того, чтобы заказать выполнение экспертизы документов, вы можете воспользоваться любым удобным способом.', +}; + +export { documentsData, howToData, connectData }; diff --git a/src/views/expertise/document/model/breadcrums.ts b/src/views/expertise/document/model/breadcrums.ts new file mode 100644 index 0000000..ab75088 --- /dev/null +++ b/src/views/expertise/document/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Экспертиза документов'; + +export const breadcrumbData = [ + { + name: 'Экспертиза', + path: ROUTES.EXPERTIZA, + }, + { + name: PAGE_NAME, + path: '', + }, +]; diff --git a/src/views/expertise/document/model/expert.ts b/src/views/expertise/document/model/expert.ts new file mode 100644 index 0000000..c7cdb5c --- /dev/null +++ b/src/views/expertise/document/model/expert.ts @@ -0,0 +1,8 @@ +import { TExpert } from '@shared/types/expert'; +import expertPhoto from '@public/images/photo/mikova-inna.png'; + +export const expertData: TExpert = { + name: 'Микова Инна', + position: 'Технический эксперт, Судебный эксперт', + photo: expertPhoto, +}; diff --git a/src/views/expertise/document/model/related.ts b/src/views/expertise/document/model/related.ts new file mode 100644 index 0000000..5bfe65f --- /dev/null +++ b/src/views/expertise/document/model/related.ts @@ -0,0 +1,29 @@ +import { TRelatedArticles } from '@shared/types/relatedArticles'; +import { ROUTES } from '@shared/const/route'; + +export const relatedArticlesData: TRelatedArticles[] = [ + { + title: 'Оценочная экспертиза', + description: + 'Судебная оценочная (стоимостная) экспертиза представляет собой вид экспертизы, главной задачей которой является определение рыночной стоимости объектов оценки…', + link: ROUTES.EXPERTIZA_TRASOLOGIA, + }, + { + title: 'Финансово-экономическая экспертиза', + description: + 'Зачастую, бухгалтерская экспертиза является информационной основой для финансово-экономической экспертизы, по причине необходимости исследования одних и тех же объектов. Основная цель – выявление фактов и обстоятельств…', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Бухгалтерская экспертиза', + description: + 'Необходимость в судебно-бухгалтерской экспертизе возникает в связи с расследованием или судебным рассмотрением уголовных дел о присвоениях или должностных преступлениях…', + link: ROUTES.EXPERTIZA_TOVAR, + }, + { + title: 'Товароведческая экспертиза', + description: + 'Судебная экспертиза товаров должна проводиться только специалистом, получившим узкопрофильную квалификацию. Если Вам необходима товароведческая экспертиза и для суда, мы готовы подробно исследовать любой товар. Результат работы…', + link: ROUTES.EXPERTIZA_RECENZII, + }, +]; diff --git a/src/views/expertise/document/model/sidebar.ts b/src/views/expertise/document/model/sidebar.ts new file mode 100644 index 0000000..2be7833 --- /dev/null +++ b/src/views/expertise/document/model/sidebar.ts @@ -0,0 +1,37 @@ +import { TSidebar } from '@/shared/types/sidebar'; +import { ROUTES } from '@shared/const/route'; + +const sidebarData: TSidebar = { + estimate: '3', + relatedTitle: 'Сопутствующие экспертизы', + related: [ + { + title: 'Оценочная', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Финансово-экономическая', + link: ROUTES.EXPERTIZA_FINANS, + }, + { + title: 'Бухгалтерская', + link: ROUTES.EXPERTIZA_BUHGALTER, + }, + { + title: 'Товароведческая', + link: ROUTES.EXPERTIZA_TOVAR, + }, + { + title: 'Рецензирование (проверка)', + link: ROUTES.EXPERTIZA_RECENZII, + }, + ], + warrantiesTitle: 'Наши гарантии', + warranties: [ + 'Эксперты компании являются членами Саморегулируемой организации судебных экспертов', + 'Деятельность компании застрахована на 60 000 000 рублей', + 'Экспертизы выполняются в соответствии с Федеральными Законодательными Актами', + ], +}; + +export { sidebarData }; diff --git a/src/views/expertise/document/styles.module.scss b/src/views/expertise/document/styles.module.scss new file mode 100644 index 0000000..12e439f --- /dev/null +++ b/src/views/expertise/document/styles.module.scss @@ -0,0 +1,71 @@ +.Container { + margin: 0 auto; + max-width: rem(1540px); + display: grid; + grid-template-columns: auto; + gap: 0px; + padding: 0 10px; + + @include iftablet { + grid-template-columns: auto; + padding: 0 20px; + } + + @include iflaptop { + padding: 0 28px; + gap: 40px; + grid-template-columns: auto 300px; + } + + @include ifdesktop { + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } +} + +.Article { + display: flex; + flex-direction: column; + padding: rem(40px) 0; + + .Section { + display: block; + } + + .Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .List { + display: flex; + flex-direction: column; + list-style-type: disc; + margin-left: 16px; + margin-bottom: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + } + + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } +} + diff --git a/src/views/expertise/document/ui.tsx b/src/views/expertise/document/ui.tsx new file mode 100644 index 0000000..1812839 --- /dev/null +++ b/src/views/expertise/document/ui.tsx @@ -0,0 +1,57 @@ +import s from './styles.module.scss'; +import { CallbackForm, Connect, OrderSchema } from '@/entities'; +import { + Consultation, + Documents, + Partners, + RelatedArticles, + Sidebar, +} from '@/feature/article'; +import { Breadcrumbs } from '@/widgets'; +import { sidebarData } from './model/sidebar'; +import { relatedArticlesData } from './model/related'; +import { expertData } from './model/expert'; +import { breadcrumbData, PAGE_NAME } from './model/breadcrums'; +import { connectData, documentsData, howToData } from './model/article'; + +function Document() { + return ( + <> + +
    +
    +
    +

    + Если возникают сомнения в подлинности документа, например, + завещания или долговой расписки, если Вы не уверены в + достоверности реквизитов или подписи на договоре, то Вы вправе + обратиться за технической экспертизой документа. Необходимость в + такой экспертизе может возникнуть как у рядовых граждан, так и у + разного рода специалистов: юристов, сотрудников банков, работников + таможни, нотариусов, арбитражных управляющих. +

    +

    + Технико-криминалистическая экспертиза документов (ТКЭД) + производится в целях установления способа изготовления документа, + определения использованных при этом технических средств и + материалов; установления факта внесения в документ каких-либо + изменений; восстановления содержания измененных и поврежденных + документов. +

    +
    + + + + +
    + +
    + + + + + + ); +} + +export { Document }; diff --git a/src/views/expertise/finans/index.ts b/src/views/expertise/finans/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/expertise/finans/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/expertise/finans/model/article.ts b/src/views/expertise/finans/model/article.ts new file mode 100644 index 0000000..c8aa1e9 --- /dev/null +++ b/src/views/expertise/finans/model/article.ts @@ -0,0 +1,25 @@ +const documentsData = { + title: 'Цели экспертизы:', + description: '', + docs: [ + 'Первичные учетные документы, отражающие факт осуществления хозяйственной операции;', + 'Иные первичные документы, раскрывающие содержание хозяйственных операций, например, договоры и деловая переписка между хозяйствующими субъектами;', + 'Учетные регистры, содержащие агрегированную и систематизированную информацию о совокупности однородных хозяйственных операций за определенный период времени;', + 'Бухгалтерская отчетность хозяйствующего субъекта, содержащая сведения о состоянии имущества и обязательств на отчетную дату, совокупности совершенных за отчетный период хозяйственных операций. Используется, когда в задачу эксперта входит анализ динамики какого-либо финансового показателя/группы показателей, установление соответствия порядка формирования строк отчетности, требованиям законодательства;', + 'Иные материалы уголовного, арбитражного, гражданского дела.', + ], +}; + +const howToData = { + title: 'Заказать экспертизу очень просто', + description: + 'Экспертное заключение, полученный от компании «ДИ ТРАСО», будет являться официальным документом, подтверждающим результат работы эксперта. В нем будет содержаться вся полная информация..', +}; + +const connectData = { + title: 'Как провести финансово-экономическую экспертизу ', + description: + 'Для того, чтобы заказать выполнение финансово-экономической экспертизы, вы можете воспользоваться любым удобным способом.', +}; + +export { documentsData, howToData, connectData }; diff --git a/src/views/expertise/finans/model/breadcrums.ts b/src/views/expertise/finans/model/breadcrums.ts new file mode 100644 index 0000000..8c04911 --- /dev/null +++ b/src/views/expertise/finans/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Финансово-экономическая экспертиза'; + +export const breadcrumbData = [ + { + name: 'Экспертиза', + path: ROUTES.EXPERTIZA, + }, + { + name: PAGE_NAME, + path: '', + }, +]; diff --git a/src/views/expertise/finans/model/expert.ts b/src/views/expertise/finans/model/expert.ts new file mode 100644 index 0000000..27c5647 --- /dev/null +++ b/src/views/expertise/finans/model/expert.ts @@ -0,0 +1,8 @@ +import { TExpert } from '@shared/types/expert'; +import expertPhoto from '@public/images/photo/kolodiy-aleksandr.png'; + +export const expertData: TExpert = { + name: 'Колодий Александр', + position: 'Товароведческий эксперт, Компьютерно-технический эксперт', + photo: expertPhoto, +}; diff --git a/src/views/expertise/finans/model/related.ts b/src/views/expertise/finans/model/related.ts new file mode 100644 index 0000000..fdee8f9 --- /dev/null +++ b/src/views/expertise/finans/model/related.ts @@ -0,0 +1,29 @@ +import { TRelatedArticles } from '@shared/types/relatedArticles'; +import { ROUTES } from '@shared/const/route'; + +export const relatedArticlesData: TRelatedArticles[] = [ + { + title: 'Бухгалтерская экспертиза', + description: + 'Необходимость в судебно-бухгалтерской экспертизе возникает в связи с расследованием или судебным рассмотрением уголовных дел о присвоениях или должностных преступлениях…', + link: ROUTES.EXPERTIZA_BUHGALTER, + }, + { + title: 'Финансово-экономическая экспертиза', + description: + 'Зачастую, бухгалтерская экспертиза является информационной основой для финансово-экономической экспертизы, по причине необходимости исследования одних и тех же объектов. Основная цель – выявление фактов и обстоятельств…', + link: ROUTES.EXPERTIZA_FINANS, + }, + { + title: 'Документарная экспертиза', + description: + 'Если возникают сомнения в подлинности документа, например, завещания или долговой расписки, если Вы не уверены в достоверности реквизитов или подписи на договоре, то Вы вправе обратиться за технической экспертизой документа…', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, + { + title: 'Оценочная экспертиза', + description: + 'Судебная оценочная (стоимостная) экспертиза представляет собой вид экспертизы, главной задачей которой является определение рыночной стоимости объектов оценки…', + link: ROUTES.EXPERTIZA_OCENKI, + }, +]; diff --git a/src/views/expertise/finans/model/sidebar.ts b/src/views/expertise/finans/model/sidebar.ts new file mode 100644 index 0000000..1cbc086 --- /dev/null +++ b/src/views/expertise/finans/model/sidebar.ts @@ -0,0 +1,41 @@ +import { TSidebar } from '@/shared/types/sidebar'; +import { ROUTES } from '@shared/const/route'; + +const sidebarData: TSidebar = { + estimate: '3', + relatedTitle: 'Сопутствующие экспертизы', + related: [ + { + title: 'Бухгалтерская', + link: ROUTES.EXPERTIZA_BUHGALTER, + }, + { + title: 'Финансово-экономическая ', + link: ROUTES.EXPERTIZA_FINANS, + }, + { + title: 'Документарная', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, + { + title: 'Почерковедческая', + link: ROUTES.EXPERTIZA_POCHERK, + }, + { + title: 'Оценочная', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Рецензирование (проверка)', + link: ROUTES.EXPERTIZA_RECENZII, + }, + ], + warrantiesTitle: 'Наши гарантии', + warranties: [ + 'Эксперты компании являются членами Саморегулируемой организации судебных экспертов', + 'Деятельность компании застрахована на 60 000 000 рублей', + 'Экспертизы выполняются в соответствии с Федеральными Законодательными Актами', + ], +}; + +export { sidebarData }; diff --git a/src/views/expertise/finans/styles.module.scss b/src/views/expertise/finans/styles.module.scss new file mode 100644 index 0000000..12e439f --- /dev/null +++ b/src/views/expertise/finans/styles.module.scss @@ -0,0 +1,71 @@ +.Container { + margin: 0 auto; + max-width: rem(1540px); + display: grid; + grid-template-columns: auto; + gap: 0px; + padding: 0 10px; + + @include iftablet { + grid-template-columns: auto; + padding: 0 20px; + } + + @include iflaptop { + padding: 0 28px; + gap: 40px; + grid-template-columns: auto 300px; + } + + @include ifdesktop { + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } +} + +.Article { + display: flex; + flex-direction: column; + padding: rem(40px) 0; + + .Section { + display: block; + } + + .Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .List { + display: flex; + flex-direction: column; + list-style-type: disc; + margin-left: 16px; + margin-bottom: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + } + + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } +} + diff --git a/src/views/expertise/finans/ui.tsx b/src/views/expertise/finans/ui.tsx new file mode 100644 index 0000000..1b844b6 --- /dev/null +++ b/src/views/expertise/finans/ui.tsx @@ -0,0 +1,70 @@ +import s from './styles.module.scss'; +import { CallbackForm, Connect, OrderSchema } from '@/entities'; +import { + Consultation, + Documents, + Partners, + RelatedArticles, + Sidebar, +} from '@/feature/article'; +import { Breadcrumbs } from '@/widgets'; +import { sidebarData } from './model/sidebar'; +import { relatedArticlesData } from './model/related'; +import { expertData } from './model/expert'; +import { breadcrumbData, PAGE_NAME } from './model/breadcrums'; +import { connectData, documentsData, howToData } from './model/article'; + +function Finans() { + return ( + <> + +
    +
    +
    +

    + Основная цель решения задач, стоящих при производстве + экономической экспертизы – выявление фактов и обстоятельств + искажения экономической информации. +

    +

    + Экономическая экспертиза – класс экспертных исследований, который + подразделяется на такие основные виды, как финансово-экономическая + и бухгалтерская экспертиза, объединенные спецификой предмета, + задач, объектов и методов экспертного исследования. +

    +

    + Зачастую, бухгалтерская экспертиза является информационной основой + для финансово-экономической экспертизы, по причине необходимости + исследования одних и тех же объектов. +

    +

    + При производстве экспертных исследований применяются специальные + знания из области права, экономики (бухгалтерского учета, + кредитования, банковской деятельности, финансового анализа, о + налогах и налогообложении и др.) и экспертной деятельности. +

    +

    + Предмет экономической экспертизы – хозяйственная деятельность + хозяйствующего субъекта, в том числе финансовые операции и + показатели, процесс их формирования и отражения в учете. Предмет + каждого отдельного экспертного исследования – конкретные + операции/факты, выявленные/установленные, требующие экономической + и стоимостной оценки. +

    +
    + + + + +
    + +
    + + + + + + ); +} + +export { Finans }; diff --git a/src/views/expertise/kadastr/index.ts b/src/views/expertise/kadastr/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/expertise/kadastr/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/expertise/kadastr/model/article.ts b/src/views/expertise/kadastr/model/article.ts new file mode 100644 index 0000000..bfc1ae3 --- /dev/null +++ b/src/views/expertise/kadastr/model/article.ts @@ -0,0 +1,27 @@ +const documentsData = { + title: 'Цели экспертизы:', + description: '', + docs: [ + 'при наличии территориальных споров между владельцами соседствующих земель;', + 'при определении права пользования земельного участка собственниками;', + 'при разделе земли (земельных участков) между несколькими собственниками;', + 'при необходимости определить правомерность, законность возведения построек на участке или существующих объектов (комплексная землеустроительная строительно-техническая экспертиза);', + 'исследование земли (земельного участка) на предмет нарушения каких-либо правовых норм из области землеустройства;', + 'при наложении границ смежных участков друг на друга;', + 'при необходимости определить точные географические координаты участка.', + ], +}; + +const howToData = { + title: 'Заказать экспертизу очень просто', + description: + 'Экспертное заключение, полученный от компании «ДИ ТРАСО», будет являться официальным документом, подтверждающим результат работы эксперта. В нем будет содержаться вся полная информация..', +}; + +const connectData = { + title: 'Как провести кадастровую экспертизу', + description: + 'Для того, чтобы заказать выполнение кадастровой экспертизы, вы можете воспользоваться любым удобным способом.', +}; + +export { documentsData, howToData, connectData }; diff --git a/src/views/expertise/kadastr/model/breadcrums.ts b/src/views/expertise/kadastr/model/breadcrums.ts new file mode 100644 index 0000000..e8bdcf3 --- /dev/null +++ b/src/views/expertise/kadastr/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Кадастровая экспертиза'; + +export const breadcrumbData = [ + { + name: 'Экспертиза', + path: ROUTES.EXPERTIZA, + }, + { + name: PAGE_NAME, + path: '', + }, +]; diff --git a/src/views/expertise/kadastr/model/expert.ts b/src/views/expertise/kadastr/model/expert.ts new file mode 100644 index 0000000..1cdd109 --- /dev/null +++ b/src/views/expertise/kadastr/model/expert.ts @@ -0,0 +1,8 @@ +import { TExpert } from '@shared/types/expert'; +import expertPhoto from '@public/images/photo/tlif-olga.png'; + +export const expertData: TExpert = { + name: 'Тлиф Ольга', + position: 'Кадастровый инженер', + photo: expertPhoto, +}; diff --git a/src/views/expertise/kadastr/model/related.ts b/src/views/expertise/kadastr/model/related.ts new file mode 100644 index 0000000..5e39816 --- /dev/null +++ b/src/views/expertise/kadastr/model/related.ts @@ -0,0 +1,29 @@ +import { TRelatedArticles } from '@shared/types/relatedArticles'; +import { ROUTES } from '@shared/const/route'; + +export const relatedArticlesData: TRelatedArticles[] = [ + { + title: 'Земле-устроительная экспертиза', + description: + 'Безусловно, принятие решения о продаже имущества в Сочи возникает не на пустом месте. Кто-то продает имущество, так как срочно нужны деньги. Кто-то решается на процедуру продажи ….', + link: ROUTES.EXPERTIZA_ZEM_STROY, + }, + { + title: 'Строительно-техническая экспертиза', + description: + 'Строительная экспертиза – это услуга, которая позволяет контролировать проведение строительных работ, а также улучшить качество строительства, монтажа и ремонтных работ…', + link: ROUTES.EXPERTIZA_STROIT, + }, + { + title: 'Оценочная экспертиза', + description: + 'Судебная оценочная (стоимостная) экспертиза представляет собой вид экспертизы, главной задачей которой является определение рыночной стоимости объектов оценки…', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Рецензия (Проверка) экспертизы', + description: + 'Необходимость в составлении рецензии на судебную экспертизу появляется в ситуациях, когда выводы заключения являются не обоснованными, а квалификация и опыт эксперта не вызывают доверия. В ходе рецензирования экспертное заключение проверяется…', + link: ROUTES.EXPERTIZA_RECENZII, + }, +]; diff --git a/src/views/expertise/kadastr/model/sidebar.ts b/src/views/expertise/kadastr/model/sidebar.ts new file mode 100644 index 0000000..89f7dd4 --- /dev/null +++ b/src/views/expertise/kadastr/model/sidebar.ts @@ -0,0 +1,37 @@ +import { TSidebar } from '@/shared/types/sidebar'; +import { ROUTES } from '@shared/const/route'; + +const sidebarData: TSidebar = { + estimate: '3', + relatedTitle: 'Сопутствующие экспертизы', + related: [ + { + title: 'Земле-устроительная', + link: ROUTES.EXPERTIZA_ZEM_STROY, + }, + { + title: 'Строительно-техническая ', + link: ROUTES.EXPERTIZA_STROIT, + }, + { + title: 'Оценочная', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Документарная', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, + { + title: 'Рецензирование (проверка)', + link: ROUTES.EXPERTIZA_RECENZII, + }, + ], + warrantiesTitle: 'Наши гарантии', + warranties: [ + 'Эксперты компании являются членами Саморегулируемой организации судебных экспертов', + 'Деятельность компании застрахована на 60 000 000 рублей', + 'Экспертизы выполняются в соответствии с Федеральными Законодательными Актами', + ], +}; + +export { sidebarData }; diff --git a/src/views/expertise/kadastr/styles.module.scss b/src/views/expertise/kadastr/styles.module.scss new file mode 100644 index 0000000..12e439f --- /dev/null +++ b/src/views/expertise/kadastr/styles.module.scss @@ -0,0 +1,71 @@ +.Container { + margin: 0 auto; + max-width: rem(1540px); + display: grid; + grid-template-columns: auto; + gap: 0px; + padding: 0 10px; + + @include iftablet { + grid-template-columns: auto; + padding: 0 20px; + } + + @include iflaptop { + padding: 0 28px; + gap: 40px; + grid-template-columns: auto 300px; + } + + @include ifdesktop { + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } +} + +.Article { + display: flex; + flex-direction: column; + padding: rem(40px) 0; + + .Section { + display: block; + } + + .Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .List { + display: flex; + flex-direction: column; + list-style-type: disc; + margin-left: 16px; + margin-bottom: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + } + + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } +} + diff --git a/src/views/expertise/kadastr/ui.tsx b/src/views/expertise/kadastr/ui.tsx new file mode 100644 index 0000000..81851fb --- /dev/null +++ b/src/views/expertise/kadastr/ui.tsx @@ -0,0 +1,62 @@ +import s from './styles.module.scss'; +import { CallbackForm, Connect, OrderSchema } from '@/entities'; +import { + Consultation, + Documents, + Partners, + RelatedArticles, + Sidebar, +} from '@/feature/article'; +import { Breadcrumbs } from '@/widgets'; +import { sidebarData } from './model/sidebar'; +import { relatedArticlesData } from './model/related'; +import { expertData } from './model/expert'; +import { breadcrumbData, PAGE_NAME } from './model/breadcrums'; +import { connectData, documentsData, howToData } from './model/article'; + +function Kadastr() { + return ( + <> + +
    +
    +
    +

    + Кадастровая экспертиза выполняется в целях определения + характеристик земельных участков, таких как: фактическая площадь, + точное расположение и др. +

    +

    + Все процессы, которые проводятся в рамках экспертизы, обусловлены + необходимостью определения фактических границ земельного участка, + установления возможности разделения земельного участка на + несколько и определением их границ. +

    +

    + Внесудебное исследование проводится по инициативе + землепользователей, собственников и арендаторов участков, иных + заинтересованных лиц. Также судебная кадастровая экспертиза может + быть назначена по ходатайству одной из сторон, участвующих в + рассмотрении дела. Исследование может быть проведено на любой + стадии процесса, но до вынесения решения по конкретному + разбирательству. Если суд удовлетворяет ходатайство, то копию + постановления необходимо направить в компанию, которая и будет + проводить экспертное исследование. +

    +
    + + + + +
    + +
    + + + + + + ); +} + +export { Kadastr }; diff --git a/src/views/expertise/pocherk/index.ts b/src/views/expertise/pocherk/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/expertise/pocherk/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/expertise/pocherk/model/article.ts b/src/views/expertise/pocherk/model/article.ts new file mode 100644 index 0000000..ee91dac --- /dev/null +++ b/src/views/expertise/pocherk/model/article.ts @@ -0,0 +1,24 @@ +const documentsData = { + title: 'Цели экспертизы:', + description: + 'В качестве объекта судебно-почерковедческой экспертизы могут выступать как тексты большого объема, так и краткие записи, подписи, а также их копии.', + docs: [ + 'узнать, КТО написал текст или выполнил подпись;', + 'выявить ЦЕЛЬ подделки почерка (например, подражание чужому почерку или искажение собственного);', + 'решить диагностические задачи — определить ПОЛ, ВОЗРАСТ и СОСТОЯНИЕ человека, написавшего текст.', + ], +}; + +const howToData = { + title: 'Заказать экспертизу очень просто', + description: + 'Экспертное заключение, полученный от компании «ДИ ТРАСО», будет являться официальным документом, подтверждающим результат работы эксперта. В нем будет содержаться вся полная информация..', +}; + +const connectData = { + title: 'Как провести почерковедческую экспертизу', + description: + 'Для того, чтобы заказать выполнение почерковедческой экспертизы, вы можете воспользоваться любым удобным способом.', +}; + +export { documentsData, howToData, connectData }; diff --git a/src/views/expertise/pocherk/model/breadcrums.ts b/src/views/expertise/pocherk/model/breadcrums.ts new file mode 100644 index 0000000..d0da906 --- /dev/null +++ b/src/views/expertise/pocherk/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Почерковедческая экспертиза'; + +export const breadcrumbData = [ + { + name: 'Экспертиза', + path: ROUTES.EXPERTIZA, + }, + { + name: PAGE_NAME, + path: '', + }, +]; diff --git a/src/views/expertise/pocherk/model/expert.ts b/src/views/expertise/pocherk/model/expert.ts new file mode 100644 index 0000000..c7cdb5c --- /dev/null +++ b/src/views/expertise/pocherk/model/expert.ts @@ -0,0 +1,8 @@ +import { TExpert } from '@shared/types/expert'; +import expertPhoto from '@public/images/photo/mikova-inna.png'; + +export const expertData: TExpert = { + name: 'Микова Инна', + position: 'Технический эксперт, Судебный эксперт', + photo: expertPhoto, +}; diff --git a/src/views/expertise/pocherk/model/related.ts b/src/views/expertise/pocherk/model/related.ts new file mode 100644 index 0000000..f75b818 --- /dev/null +++ b/src/views/expertise/pocherk/model/related.ts @@ -0,0 +1,29 @@ +import { TRelatedArticles } from '@shared/types/relatedArticles'; +import { ROUTES } from '@shared/const/route'; + +export const relatedArticlesData: TRelatedArticles[] = [ + { + title: 'Оценочная экспертиза', + description: + 'Судебная оценочная (стоимостная) экспертиза представляет собой вид экспертизы, главной задачей которой является определение рыночной стоимости объектов оценки…', + link: ROUTES.EXPERTIZA_TRASOLOGIA, + }, + { + title: 'Документарная экспертиза', + description: + 'Если возникают сомнения в подлинности документа, например, завещания или долговой расписки, если Вы не уверены в достоверности реквизитов или подписи на договоре, то Вы вправе обратиться за технической экспертизой документа…', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Товароведческая экспертиза', + description: + 'Судебная экспертиза товаров должна проводиться только специалистом, получившим узкопрофильную квалификацию. Если Вам необходима товароведческая экспертиза и для суда, мы готовы подробно исследовать любой товар. Результат работы…', + link: ROUTES.EXPERTIZA_TOVAR, + }, + { + title: 'Рецензия (Проверка) экспертизы', + description: + 'Необходимость в составлении рецензии на судебную экспертизу появляется в ситуациях, когда выводы заключения являются не обоснованными, а квалификация и опыт эксперта не вызывают доверия. В ходе рецензирования экспертное заключение проверяется…', + link: ROUTES.EXPERTIZA_RECENZII, + }, +]; diff --git a/src/views/expertise/pocherk/model/sidebar.ts b/src/views/expertise/pocherk/model/sidebar.ts new file mode 100644 index 0000000..b38f949 --- /dev/null +++ b/src/views/expertise/pocherk/model/sidebar.ts @@ -0,0 +1,37 @@ +import { TSidebar } from '@/shared/types/sidebar'; +import { ROUTES } from '@shared/const/route'; + +const sidebarData: TSidebar = { + estimate: '3', + relatedTitle: 'Сопутствующие экспертизы', + related: [ + { + title: 'Оценочная', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Документарная', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, + { + title: 'Товароведческая', + link: ROUTES.EXPERTIZA_TOVAR, + }, + { + title: 'Компьютерно-техническая ', + link: ROUTES.EXPERTIZA_COPMPUTER, + }, + { + title: 'Рецензирование (проверка)', + link: ROUTES.EXPERTIZA_RECENZII, + }, + ], + warrantiesTitle: 'Наши гарантии', + warranties: [ + 'Эксперты компании являются членами Саморегулируемой организации судебных экспертов', + 'Деятельность компании застрахована на 60 000 000 рублей', + 'Экспертизы выполняются в соответствии с Федеральными Законодательными Актами', + ], +}; + +export { sidebarData }; diff --git a/src/views/expertise/pocherk/styles.module.scss b/src/views/expertise/pocherk/styles.module.scss new file mode 100644 index 0000000..12e439f --- /dev/null +++ b/src/views/expertise/pocherk/styles.module.scss @@ -0,0 +1,71 @@ +.Container { + margin: 0 auto; + max-width: rem(1540px); + display: grid; + grid-template-columns: auto; + gap: 0px; + padding: 0 10px; + + @include iftablet { + grid-template-columns: auto; + padding: 0 20px; + } + + @include iflaptop { + padding: 0 28px; + gap: 40px; + grid-template-columns: auto 300px; + } + + @include ifdesktop { + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } +} + +.Article { + display: flex; + flex-direction: column; + padding: rem(40px) 0; + + .Section { + display: block; + } + + .Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .List { + display: flex; + flex-direction: column; + list-style-type: disc; + margin-left: 16px; + margin-bottom: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + } + + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } +} + diff --git a/src/views/expertise/pocherk/ui.tsx b/src/views/expertise/pocherk/ui.tsx new file mode 100644 index 0000000..4ed2e0d --- /dev/null +++ b/src/views/expertise/pocherk/ui.tsx @@ -0,0 +1,91 @@ +import s from './styles.module.scss'; +import { CallbackForm, Connect, OrderSchema } from '@/entities'; +import { + Consultation, + Documents, + Partners, + RelatedArticles, + Sidebar, +} from '@/feature/article'; +import { Breadcrumbs } from '@/widgets'; +import { sidebarData } from './model/sidebar'; +import { relatedArticlesData } from './model/related'; +import { expertData } from './model/expert'; +import { breadcrumbData, PAGE_NAME } from './model/breadcrums'; +import { connectData, documentsData, howToData } from './model/article'; + +function Pocherk() { + return ( + <> + +
    +
    +
    +

    + Почерковедческая экспертиза, т.е. исследование рукописных текстов + и подписей, широко используется в криминалистике. Она востребована + в судебной практике, поскольку рукописный текст может фигурировать + в деле в качестве доказательства. В этом случае заказчики + экспертизы — юристы, арбитражные управляющие, работники суда, + нотариусы. Кроме того, в качестве инициаторов экспертизы могут + выступать физические лица, ставшие жертвами мошенничества. +

    +

    + Фальсификация подписи в договоре купли-продажи, финансовом + документе или принуждение к заключению сделки, оформлению + дарственной – все это может выявить анализ почерка. Можно не + только определить конкретного исполнителя, но и его состояние в + момент подписания бумаг (нервозность, стресс, алкогольное + опьянение и т. п.). +

    +

    + Личная подпись используется при заключении сделки, написании + завещаний оформлении дарственной и кредитного договора. + Практически все остальные сведения в документах прописываются с + помощью печатного текста, поэтому только экспертиза подписи + подтверждает факт реальной юридической силы документа. Только на + основании экспертного анализа можно правомочно говорить о подлогах + с документацией в судах и досудебных разбирательствах. Касательно + расписок. Если вы берете их с кого-то, то обязательно убедитесь, + что в ней полностью прописаны: ФИО, сумма, данные из паспорта, + сроки возврата долга. +

    +

    + Что может быть использовано в качестве образцов для изучения + принадлежности подписи конкретному лицу? +

    +
      +
    • Написанные лицом цифровые данные.
    • +
    • Рукописные тексты, подписи.
    • +
    • Копии вышеперечисленных объектов.
    • +
    +

    + Почерк в криминалистике зачастую может служить аналогом отпечатков + пальцев. При этом эксперт может сличить его даже при проявлении у + человека различных неврологических заболеваний, ухудшения зрения + или при воздействии внешних негативных факторов. Специалист + распознает и намеренное искажение почерка при достаточном + количестве образцов. Лучше, когда они написаны приблизительно в те + же даты, что и эталон (судебная улика). +

    +

    + Специалисту дополнительно, кроме образцов, понадобятся также + постановление суда и адвокатский запрос. +

    +
    + + + + +
    + +
    + + + + + + ); +} + +export { Pocherk }; diff --git a/src/views/expertise/pozhar/index.ts b/src/views/expertise/pozhar/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/expertise/pozhar/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/expertise/pozhar/model/article.ts b/src/views/expertise/pozhar/model/article.ts new file mode 100644 index 0000000..9cc0457 --- /dev/null +++ b/src/views/expertise/pozhar/model/article.ts @@ -0,0 +1,26 @@ +const documentsData = { + title: 'Для проведения экспертизы требуются следующие документы:', + description: '', + docs: [ + 'акт о случившемся пожаре, который выдает пожарная служба;', + 'поэтажный план здания;', + 'проектная документация (строительно-техническая);', + 'проект сетей слаботочных и электрических силовых, а также акты проведения монтажных работ;', + 'схема и проект пожарной системы сигнализации, а также противопожарной системы (полное описание с техническими выкладками).', + 'другие виды технической документации, которые могут прояснить ситуацию.', + ], +}; + +const howToData = { + title: 'Заказать экспертизу очень просто', + description: + 'Экспертное заключение, полученный от компании «ДИ ТРАСО», будет являться официальным документом, подтверждающим результат работы эксперта. В нем будет содержаться вся полная информация..', +}; + +const connectData = { + title: 'Как провести пожарно-техническую экспертизу', + description: + 'Для того, чтобы заказать выполнение пожарно-технической экспертизы, вы можете воспользоваться любым удобным способом.', +}; + +export { documentsData, howToData, connectData }; diff --git a/src/views/expertise/pozhar/model/breadcrums.ts b/src/views/expertise/pozhar/model/breadcrums.ts new file mode 100644 index 0000000..296853a --- /dev/null +++ b/src/views/expertise/pozhar/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Пожарно-техническая экспертиза'; + +export const breadcrumbData = [ + { + name: 'Экспертиза', + path: ROUTES.EXPERTIZA, + }, + { + name: PAGE_NAME, + path: '', + }, +]; diff --git a/src/views/expertise/pozhar/model/expert.ts b/src/views/expertise/pozhar/model/expert.ts new file mode 100644 index 0000000..ef321e9 --- /dev/null +++ b/src/views/expertise/pozhar/model/expert.ts @@ -0,0 +1,8 @@ +import { TExpert } from '@shared/types/expert'; +import expertPhoto from '@public/images/photo/empty-photo.jpg'; + +export const expertData: TExpert = { + name: 'Иван Иванов', + position: 'Эксперт', + photo: expertPhoto, +}; diff --git a/src/views/expertise/pozhar/model/related.ts b/src/views/expertise/pozhar/model/related.ts new file mode 100644 index 0000000..7489cf9 --- /dev/null +++ b/src/views/expertise/pozhar/model/related.ts @@ -0,0 +1,29 @@ +import { TRelatedArticles } from '@shared/types/relatedArticles'; +import { ROUTES } from '@shared/const/route'; + +export const relatedArticlesData: TRelatedArticles[] = [ + { + title: 'Оценочная экспертиза', + description: + 'Судебная оценочная (стоимостная) экспертиза представляет собой вид экспертизы, главной задачей которой является определение рыночной стоимости объектов оценки…', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Земле-устроительная экспертиза', + description: + 'Безусловно, принятие решения о продаже имущества в Сочи возникает не на пустом месте. Кто-то продает имущество, так как срочно нужны деньги. Кто-то решается на процедуру продажи…', + link: ROUTES.EXPERTIZA_ZEM_STROY, + }, + { + title: 'Рецензия (Проверка) экспертизы', + description: + 'Необходимость в составлении рецензии на судебную экспертизу появляется в ситуациях, когда выводы заключения являются не обоснованными, а квалификация и опыт эксперта не вызывают доверия. В ходе рецензирования экспертное заключение проверяется…', + link: ROUTES.EXPERTIZA_RECENZII, + }, + { + title: 'Кадастровая экспертиза', + description: + 'Кадастровая экспертиза выполняется в целях определения характеристик земельных участков, таких как: фактическая площадь, точное расположение и др. Все процессы, которые проводятся в рамках экспертизы, обусловлены …', + link: ROUTES.EXPERTIZA_KADASTR, + }, +]; diff --git a/src/views/expertise/pozhar/model/sidebar.ts b/src/views/expertise/pozhar/model/sidebar.ts new file mode 100644 index 0000000..9d2b31a --- /dev/null +++ b/src/views/expertise/pozhar/model/sidebar.ts @@ -0,0 +1,37 @@ +import { TSidebar } from '@/shared/types/sidebar'; +import { ROUTES } from '@shared/const/route'; + +const sidebarData: TSidebar = { + estimate: '3', + relatedTitle: 'Сопутствующие экспертизы', + related: [ + { + title: 'Оценочная', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Строительно-техническая', + link: ROUTES.EXPERTIZA_STROIT, + }, + { + title: 'Земле-устроительная', + link: ROUTES.EXPERTIZA_ZEM_STROY, + }, + { + title: 'Кадастровая', + link: ROUTES.EXPERTIZA_KADASTR, + }, + { + title: 'Рецензирование (проверка)', + link: ROUTES.EXPERTIZA_RECENZII, + }, + ], + warrantiesTitle: 'Наши гарантии', + warranties: [ + 'Эксперты компании являются членами Саморегулируемой организации судебных экспертов', + 'Деятельность компании застрахована на 60 000 000 рублей', + 'Экспертизы выполняются в соответствии с Федеральными Законодательными Актами', + ], +}; + +export { sidebarData }; diff --git a/src/views/expertise/pozhar/styles.module.scss b/src/views/expertise/pozhar/styles.module.scss new file mode 100644 index 0000000..12e439f --- /dev/null +++ b/src/views/expertise/pozhar/styles.module.scss @@ -0,0 +1,71 @@ +.Container { + margin: 0 auto; + max-width: rem(1540px); + display: grid; + grid-template-columns: auto; + gap: 0px; + padding: 0 10px; + + @include iftablet { + grid-template-columns: auto; + padding: 0 20px; + } + + @include iflaptop { + padding: 0 28px; + gap: 40px; + grid-template-columns: auto 300px; + } + + @include ifdesktop { + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } +} + +.Article { + display: flex; + flex-direction: column; + padding: rem(40px) 0; + + .Section { + display: block; + } + + .Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .List { + display: flex; + flex-direction: column; + list-style-type: disc; + margin-left: 16px; + margin-bottom: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + } + + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } +} + diff --git a/src/views/expertise/pozhar/ui.tsx b/src/views/expertise/pozhar/ui.tsx new file mode 100644 index 0000000..0e63ddb --- /dev/null +++ b/src/views/expertise/pozhar/ui.tsx @@ -0,0 +1,87 @@ +import s from './styles.module.scss'; +import { CallbackForm, Connect, OrderSchema } from '@/entities'; +import { + Consultation, + Documents, + Partners, + RelatedArticles, + Sidebar, +} from '@/feature/article'; +import { Breadcrumbs } from '@/widgets'; +import { sidebarData } from './model/sidebar'; +import { relatedArticlesData } from './model/related'; +import { expertData } from './model/expert'; +import { breadcrumbData, PAGE_NAME } from './model/breadcrums'; +import { connectData, documentsData, howToData } from './model/article'; + +function Pozhar() { + return ( + <> + +
    +
    +
    +

    + Пожарно-техническая экспертиза может понадобиться для частного + расследования, следствия и суда. Проведение исследования + подразумевает использование в работе обгоревших предметов быта, + частей строений, механизмов и любых других вещей с места + происшествия. Главная задача такого исследования – установление + всех условий, которые связаны с возникновением возгорания, + определение личности человека, совершившего преступные действия. + Заключение экспертов дает возможность применить уголовное + наказание к виновнику пожара и пострадавшим получить компенсацию + через страховую компанию или в частном порядке по постановлению + суда. +

    +

    + Проведение пожарно-технической экспертизы – сложный процесс, + особенно в тех случаях, когда объект или помещение полностью + уничтожены огнём. Следователи теряются, ведь улик нет, они + сгорели, поэтому и обращаются к специалистам, сталкивающимся с + подобной криминалистической задачей в своей каждодневной практике. +

    +

    + Процедура проведения пожарной технической экспертизы включает в + себя зачастую не только технические, технологические и + электротехнические исследования, но и психиатрические, + биологические и судебно-медицинские. Наличие горюче-смазочных + материалов, возраст древесины, если она участвовала в пожаре, + глубина прогара и прочее – всё это входит в методы проведения + пожарно-технической экспертизы. +

    +

    + Прежде чем приступить к исследованию, эксперты обязательно + запросят всю информацию и документы на объект недвижимости, + подвергшийся воздействию огня. +

    +

    Цели экспертизы:

    +
      +
    • + установление очага пожара и особенностей его развития; +
    • +
    • + установление непосредственной (технической) причины пожара; +
    • +
    • + установление условий и обстоятельств, способствовавших + возникновению и развитию пожара. +
    • +
    +
    + + + + +
    + +
    + + + + + + ); +} + +export { Pozhar }; diff --git a/src/views/expertise/recenzii/index.ts b/src/views/expertise/recenzii/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/expertise/recenzii/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/expertise/recenzii/model/article.ts b/src/views/expertise/recenzii/model/article.ts new file mode 100644 index 0000000..bc3cb71 --- /dev/null +++ b/src/views/expertise/recenzii/model/article.ts @@ -0,0 +1,26 @@ +const documentsData = { + title: 'Цели экспертизы:', + description: '', + docs: [ + 'Вам необходимо перепроверить выводы экспертизы;', + 'Вы хотите, чтобы суд назначил повторную экспертизу;', + 'Экспертиза имеет противоречия и неточности;', + 'Выводы экспертного заключения не в полной мере отвечают на поставленные судом вопросы;', + 'Заключение имеет нарушения в области действующего законодательства;', + 'Выводы экспертизы противоречат вашей позиции, и Вы хотите убрать экспертизу из числа доказательств.', + ], +}; + +const howToData = { + title: 'Заказать экспертизу очень просто', + description: + 'Экспертное заключение, полученный от компании «ДИ ТРАСО», будет являться официальным документом, подтверждающим результат работы эксперта. В нем будет содержаться вся полная информация..', +}; + +const connectData = { + title: 'Как провести рецензирование и проверку экспертизы', + description: + 'Для того, чтобы заказать выполнение рецензирования экспертизы, вы можете воспользоваться любым удобным способом.', +}; + +export { documentsData, howToData, connectData }; diff --git a/src/views/expertise/recenzii/model/breadcrums.ts b/src/views/expertise/recenzii/model/breadcrums.ts new file mode 100644 index 0000000..5d6e8ca --- /dev/null +++ b/src/views/expertise/recenzii/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Рецензирование экспертизы'; + +export const breadcrumbData = [ + { + name: 'Экспертиза', + path: ROUTES.EXPERTIZA, + }, + { + name: PAGE_NAME, + path: '', + }, +]; diff --git a/src/views/expertise/recenzii/model/expert.ts b/src/views/expertise/recenzii/model/expert.ts new file mode 100644 index 0000000..ef321e9 --- /dev/null +++ b/src/views/expertise/recenzii/model/expert.ts @@ -0,0 +1,8 @@ +import { TExpert } from '@shared/types/expert'; +import expertPhoto from '@public/images/photo/empty-photo.jpg'; + +export const expertData: TExpert = { + name: 'Иван Иванов', + position: 'Эксперт', + photo: expertPhoto, +}; diff --git a/src/views/expertise/recenzii/model/related.ts b/src/views/expertise/recenzii/model/related.ts new file mode 100644 index 0000000..1314fec --- /dev/null +++ b/src/views/expertise/recenzii/model/related.ts @@ -0,0 +1,29 @@ +import { TRelatedArticles } from '@shared/types/relatedArticles'; +import { ROUTES } from '@shared/const/route'; + +export const relatedArticlesData: TRelatedArticles[] = [ + { + title: 'Автотехническая экспертиза', + description: + 'При возникновении ситуаций, возникающих в результате ДТП (дорожно-транспортных происшествий), для решения наиболее сложных проблем, требуется проведение специальной автоэкспертизы, позволяющей реализовать право водителя на получение страховки …', + link: ROUTES.EXPERTIZA_TRASOLOGIA, + }, + { + title: 'Оценочная экспертиза', + description: + 'Судебная оценочная (стоимостная) экспертиза представляет собой вид экспертизы, главной задачей которой является определение рыночной стоимости объектов оценки…', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Товароведческая экспертиза', + description: + 'Судебная экспертиза товаров должна проводиться только специалистом, получившим узкопрофильную квалификацию. Если Вам необходима товароведческая экспертиза и для суда, мы готовы подробно исследовать любой товар. Результат работы…', + link: ROUTES.EXPERTIZA_TOVAR, + }, + { + title: 'Кадастровая экспертиза', + description: + 'Кадастровая экспертиза выполняется в целях определения характеристик земельных участков, таких как: фактическая площадь, точное расположение и др. Все процессы, которые проводятся в рамках экспертизы, обусловлены …', + link: ROUTES.EXPERTIZA_RECENZII, + }, +]; diff --git a/src/views/expertise/recenzii/model/sidebar.ts b/src/views/expertise/recenzii/model/sidebar.ts new file mode 100644 index 0000000..e9b6f32 --- /dev/null +++ b/src/views/expertise/recenzii/model/sidebar.ts @@ -0,0 +1,37 @@ +import { TSidebar } from '@/shared/types/sidebar'; +import { ROUTES } from '@shared/const/route'; + +const sidebarData: TSidebar = { + estimate: '3', + relatedTitle: 'Сопутствующие экспертизы', + related: [ + { + title: 'Автотехническая', + link: ROUTES.EXPERTIZA_AUTOTECH, + }, + { + title: 'Трасологическая', + link: ROUTES.EXPERTIZA_TRASOLOGIA, + }, + { + title: 'Оценочная', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Документарная', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, + { + title: 'Товароведческая', + link: ROUTES.EXPERTIZA_TOVAR, + }, + ], + warrantiesTitle: 'Наши гарантии', + warranties: [ + 'Эксперты компании являются членами Саморегулируемой организации судебных экспертов', + 'Деятельность компании застрахована на 60 000 000 рублей', + 'Экспертизы выполняются в соответствии с Федеральными Законодательными Актами', + ], +}; + +export { sidebarData }; diff --git a/src/views/expertise/recenzii/styles.module.scss b/src/views/expertise/recenzii/styles.module.scss new file mode 100644 index 0000000..12e439f --- /dev/null +++ b/src/views/expertise/recenzii/styles.module.scss @@ -0,0 +1,71 @@ +.Container { + margin: 0 auto; + max-width: rem(1540px); + display: grid; + grid-template-columns: auto; + gap: 0px; + padding: 0 10px; + + @include iftablet { + grid-template-columns: auto; + padding: 0 20px; + } + + @include iflaptop { + padding: 0 28px; + gap: 40px; + grid-template-columns: auto 300px; + } + + @include ifdesktop { + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } +} + +.Article { + display: flex; + flex-direction: column; + padding: rem(40px) 0; + + .Section { + display: block; + } + + .Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .List { + display: flex; + flex-direction: column; + list-style-type: disc; + margin-left: 16px; + margin-bottom: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + } + + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } +} + diff --git a/src/views/expertise/recenzii/ui.tsx b/src/views/expertise/recenzii/ui.tsx new file mode 100644 index 0000000..d0fc031 --- /dev/null +++ b/src/views/expertise/recenzii/ui.tsx @@ -0,0 +1,63 @@ +import s from './styles.module.scss'; +import { CallbackForm, Connect, OrderSchema } from '@/entities'; +import { + Consultation, + Documents, + Partners, + RelatedArticles, + Sidebar, +} from '@/feature/article'; +import { Breadcrumbs } from '@/widgets'; +import { sidebarData } from './model/sidebar'; +import { relatedArticlesData } from './model/related'; +import { expertData } from './model/expert'; +import { breadcrumbData, PAGE_NAME } from './model/breadcrums'; +import { connectData, documentsData, howToData } from './model/article'; + +function Recenzii() { + return ( + <> + +
    +
    +
    +

    + Необходимость в составлении рецензии на судебную экспертизу + появляется в ситуациях, когда выводы заключения являются не + обоснованными, а квалификация и опыт эксперта не вызывают доверия. +

    +

    + В ходе рецензирования экспертное заключение проверяется на + соответствие нормам российского законодательства в области + судебно-экспертной деятельности, а также положениям методик, + применяемых при проведении конкретного вида экспертизы. В нашей + компании работают специалисты имеющие богатый опыт как в написании + рецензий, так и в проведении экспертиз. +

    +

    + В связи с загруженностью работой и ограниченными сроками + рассмотрения дел суд неохотно удовлетворяет ходатайства о + назначении повторных или дополнительных экспертиз. Предоставление + рецензии на экспертизу поможет убедить суд удовлетворить данные + ходатайства. Поскольку судьи осознает, что в случае если они не + уделят должного внимания рецензии и примут решение на основании + порочного заключения, с большей долей вероятности их решение будет + отменено в суде высшей инстанции. +

    +
    + + + + +
    + +
    + + + + + + ); +} + +export { Recenzii }; diff --git a/src/views/expertise/stroit/index.ts b/src/views/expertise/stroit/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/expertise/stroit/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/expertise/stroit/model/article.ts b/src/views/expertise/stroit/model/article.ts new file mode 100644 index 0000000..a51c0f7 --- /dev/null +++ b/src/views/expertise/stroit/model/article.ts @@ -0,0 +1,26 @@ +const documentsData = { + title: 'Цели экспертизы:', + description: '', + docs: [ + 'Исследование разрушения объектов', + 'Обследование зданий и сооружений', + 'Экспертиза качества ремонта', + 'Экспертиза раздела недвижимости', + 'Экспертиза строительных проектов', + 'Экспертиза ущерба', + ], +}; + +const howToData = { + title: 'Заказать экспертизу очень просто', + description: + 'Экспертное заключение, полученный от компании «ДИ ТРАСО», будет являться официальным документом, подтверждающим результат работы эксперта. В нем будет содержаться вся полная информация..', +}; + +const connectData = { + title: 'Как провести строительно-техническую экспертизу', + description: + 'Для того, чтобы заказать выполнение строительно-техническую экспертизу, вы можете воспользоваться любым удобным способом.', +}; + +export { documentsData, howToData, connectData }; diff --git a/src/views/expertise/stroit/model/breadcrums.ts b/src/views/expertise/stroit/model/breadcrums.ts new file mode 100644 index 0000000..895f573 --- /dev/null +++ b/src/views/expertise/stroit/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Строительно-техническая экспертиза'; + +export const breadcrumbData = [ + { + name: 'Экспертиза', + path: ROUTES.EXPERTIZA, + }, + { + name: PAGE_NAME, + path: '', + }, +]; diff --git a/src/views/expertise/stroit/model/expert.ts b/src/views/expertise/stroit/model/expert.ts new file mode 100644 index 0000000..c9876d8 --- /dev/null +++ b/src/views/expertise/stroit/model/expert.ts @@ -0,0 +1,8 @@ +import { TExpert } from '@shared/types/expert'; +import expertPhoto from '@public/images/photo/kaminskiy-dmitriy.png'; + +export const expertData: TExpert = { + name: 'Каминский Дмитрий', + position: 'Строительный эксперт', + photo: expertPhoto, +}; diff --git a/src/views/expertise/stroit/model/related.ts b/src/views/expertise/stroit/model/related.ts new file mode 100644 index 0000000..61e8c98 --- /dev/null +++ b/src/views/expertise/stroit/model/related.ts @@ -0,0 +1,29 @@ +import { TRelatedArticles } from '@shared/types/relatedArticles'; +import { ROUTES } from '@shared/const/route'; + +export const relatedArticlesData: TRelatedArticles[] = [ + { + title: 'Земле-устроительная экспертиза', + description: + 'Безусловно, принятие решения о продаже имущества в Сочи возникает не на пустом месте. Кто-то продает имущество, так как срочно нужны деньги. Кто-то решается на процедуру продажи…', + link: ROUTES.EXPERTIZA_TRASOLOGIA, + }, + { + title: 'Оценочная экспертиза', + description: + 'Судебная оценочная (стоимостная) экспертиза представляет собой вид экспертизы, главной задачей которой является определение рыночной стоимости объектов оценки…', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Кадастровая экспертиза', + description: + 'Кадастровая экспертиза выполняется в целях определения характеристик земельных участков, таких как: фактическая площадь, точное расположение и др. Все процессы, которые проводятся в рамках экспертизы, обусловлены …', + link: ROUTES.EXPERTIZA_TOVAR, + }, + { + title: 'Рецензия (Проверка) экспертизы', + description: + 'Необходимость в составлении рецензии на судебную экспертизу появляется в ситуациях, когда выводы заключения являются не обоснованными, а квалификация и опыт эксперта не вызывают доверия. В ходе рецензирования экспертное заключение проверяется…', + link: ROUTES.EXPERTIZA_RECENZII, + }, +]; diff --git a/src/views/expertise/stroit/model/sidebar.ts b/src/views/expertise/stroit/model/sidebar.ts new file mode 100644 index 0000000..7e276b4 --- /dev/null +++ b/src/views/expertise/stroit/model/sidebar.ts @@ -0,0 +1,41 @@ +import { TSidebar } from '@/shared/types/sidebar'; +import { ROUTES } from '@shared/const/route'; + +const sidebarData: TSidebar = { + estimate: '3', + relatedTitle: 'Сопутствующие экспертизы', + related: [ + { + title: 'Строительно-техническая', + link: ROUTES.EXPERTIZA_STROIT, + }, + { + title: 'Земле-устроительная', + link: ROUTES.EXPERTIZA_ZEM_STROY, + }, + { + title: 'Кадастровая', + link: ROUTES.EXPERTIZA_KADASTR, + }, + { + title: 'Оценочная', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Документарная', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, + { + title: 'Рецензирование (проверка)', + link: ROUTES.EXPERTIZA_RECENZII, + }, + ], + warrantiesTitle: 'Наши гарантии', + warranties: [ + 'Эксперты компании являются членами Саморегулируемой организации судебных экспертов', + 'Деятельность компании застрахована на 60 000 000 рублей', + 'Экспертизы выполняются в соответствии с Федеральными Законодательными Актами', + ], +}; + +export { sidebarData }; diff --git a/src/views/expertise/stroit/styles.module.scss b/src/views/expertise/stroit/styles.module.scss new file mode 100644 index 0000000..12e439f --- /dev/null +++ b/src/views/expertise/stroit/styles.module.scss @@ -0,0 +1,71 @@ +.Container { + margin: 0 auto; + max-width: rem(1540px); + display: grid; + grid-template-columns: auto; + gap: 0px; + padding: 0 10px; + + @include iftablet { + grid-template-columns: auto; + padding: 0 20px; + } + + @include iflaptop { + padding: 0 28px; + gap: 40px; + grid-template-columns: auto 300px; + } + + @include ifdesktop { + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } +} + +.Article { + display: flex; + flex-direction: column; + padding: rem(40px) 0; + + .Section { + display: block; + } + + .Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .List { + display: flex; + flex-direction: column; + list-style-type: disc; + margin-left: 16px; + margin-bottom: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + } + + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } +} + diff --git a/src/views/expertise/stroit/ui.tsx b/src/views/expertise/stroit/ui.tsx new file mode 100644 index 0000000..c321c80 --- /dev/null +++ b/src/views/expertise/stroit/ui.tsx @@ -0,0 +1,59 @@ +import s from './styles.module.scss'; +import { CallbackForm, Connect, OrderSchema } from '@/entities'; +import { + Consultation, + Documents, + Partners, + RelatedArticles, + Sidebar, +} from '@/feature/article'; +import { Breadcrumbs } from '@/widgets'; +import { sidebarData } from './model/sidebar'; +import { relatedArticlesData } from './model/related'; +import { expertData } from './model/expert'; +import { breadcrumbData, PAGE_NAME } from './model/breadcrums'; +import { connectData, documentsData, howToData } from './model/article'; + +function Stroit() { + return ( + <> + +
    +
    +
    +

    + Строительная экспертиза – это услуга, которая позволяет + контролировать проведение строительных работ, а также улучшить + качество строительства, монтажа и ремонтных работ. Эксперты, + которые проводят такие работы, должны быть не заинтересованными + лицами, а также иметь определенную квалификацию и предоставлять + объективные результаты. Производится полный анализ как клиента, + так и осуществляемый технический надзор, за проведением + строительства на различных этапах, а также поддержание постоянного + контакта с работодателем на всех этапах работы. +

    +

    + После проведения строительно-технической экспертизы всегда есть + акт осмотра, рекомендации по устранению недостатков, если конечно + это является необходимым. Ответы на вопросы, которые были + поставлены заказчиком, имеющий вид технического задания, а также + развернутый вывод о недостатках, а также дефектах, которые были + замечены. +

    +
    + + + + +
    + +
    + + + + + + ); +} + +export { Stroit }; diff --git a/src/views/expertise/tech-crim/index.ts b/src/views/expertise/tech-crim/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/expertise/tech-crim/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/expertise/tech-crim/model/article.ts b/src/views/expertise/tech-crim/model/article.ts new file mode 100644 index 0000000..1f88409 --- /dev/null +++ b/src/views/expertise/tech-crim/model/article.ts @@ -0,0 +1,19 @@ +const documentsData = { + title: 'Цели экспертизы:', + description: 'определение подлинности рукописных документов, включая:', + docs: ['Завещания', 'Доверенности', 'Дарственные', 'Протокола', 'Документы'], +}; + +const howToData = { + title: 'Заказать экспертизу очень просто', + description: + 'Экспертное заключение, полученный от компании «ДИ ТРАСО», будет являться официальным документом, подтверждающим результат работы эксперта. В нем будет содержаться вся полная информация..', +}; + +const connectData = { + title: 'Как провести технико-криминалистическую экспертизу', + description: + 'Для того, чтобы заказать выполнение технико-криминалистической экспертизы, вы можете воспользоваться любым удобным способом.', +}; + +export { documentsData, howToData, connectData }; diff --git a/src/views/expertise/tech-crim/model/breadcrums.ts b/src/views/expertise/tech-crim/model/breadcrums.ts new file mode 100644 index 0000000..22da9f2 --- /dev/null +++ b/src/views/expertise/tech-crim/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Технико-криминалистическая экспертиза'; + +export const breadcrumbData = [ + { + name: 'Экспертиза', + path: ROUTES.EXPERTIZA, + }, + { + name: PAGE_NAME, + path: '', + }, +]; diff --git a/src/views/expertise/tech-crim/model/expert.ts b/src/views/expertise/tech-crim/model/expert.ts new file mode 100644 index 0000000..c7cdb5c --- /dev/null +++ b/src/views/expertise/tech-crim/model/expert.ts @@ -0,0 +1,8 @@ +import { TExpert } from '@shared/types/expert'; +import expertPhoto from '@public/images/photo/mikova-inna.png'; + +export const expertData: TExpert = { + name: 'Микова Инна', + position: 'Технический эксперт, Судебный эксперт', + photo: expertPhoto, +}; diff --git a/src/views/expertise/tech-crim/model/related.ts b/src/views/expertise/tech-crim/model/related.ts new file mode 100644 index 0000000..461a8e7 --- /dev/null +++ b/src/views/expertise/tech-crim/model/related.ts @@ -0,0 +1,29 @@ +import { TRelatedArticles } from '@shared/types/relatedArticles'; +import { ROUTES } from '@shared/const/route'; + +export const relatedArticlesData: TRelatedArticles[] = [ + { + title: 'Почерковедческая экспертиза', + description: + 'Почерковедческая экспертиза, т.е. исследование рукописных текстов и подписей, широко используется в криминалистике. Она востребована в судебной практике, поскольку рукописный текст может фигурировать в деле в качестве доказательства…', + link: ROUTES.EXPERTIZA_TRASOLOGIA, + }, + { + title: 'Оценочная экспертиза', + description: + 'Судебная оценочная (стоимостная) экспертиза представляет собой вид экспертизы, главной задачей которой является определение рыночной стоимости объектов оценки…', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Документарная экспертиза', + description: + 'Если возникают сомнения в подлинности документа, например, завещания или долговой расписки, если Вы не уверены в достоверности реквизитов или подписи на договоре, то Вы вправе обратиться за технической экспертизой документа…', + link: ROUTES.EXPERTIZA_TOVAR, + }, + { + title: 'Финансово-экономическая экспертиза', + description: + 'Зачастую, бухгалтерская экспертиза является информационной основой для финансово-экономической экспертизы, по причине необходимости исследования одних и тех же объектов. Основная цель – выявление фактов и обстоятельств…', + link: ROUTES.EXPERTIZA_RECENZII, + }, +]; diff --git a/src/views/expertise/tech-crim/model/sidebar.ts b/src/views/expertise/tech-crim/model/sidebar.ts new file mode 100644 index 0000000..4a612f9 --- /dev/null +++ b/src/views/expertise/tech-crim/model/sidebar.ts @@ -0,0 +1,41 @@ +import { TSidebar } from '@/shared/types/sidebar'; +import { ROUTES } from '@shared/const/route'; + +const sidebarData: TSidebar = { + estimate: '3', + relatedTitle: 'Сопутствующие экспертизы', + related: [ + { + title: 'Почерковедческая', + link: ROUTES.EXPERTIZA_POCHERK, + }, + { + title: 'Оценочная', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Документарная', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, + { + title: 'Бухгалтерская', + link: ROUTES.EXPERTIZA_BUHGALTER, + }, + { + title: 'Финансово-экономическая', + link: ROUTES.EXPERTIZA_FINANS, + }, + { + title: 'Рецензирование (проверка)', + link: ROUTES.EXPERTIZA_RECENZII, + }, + ], + warrantiesTitle: 'Наши гарантии', + warranties: [ + 'Эксперты компании являются членами Саморегулируемой организации судебных экспертов', + 'Деятельность компании застрахована на 60 000 000 рублей', + 'Экспертизы выполняются в соответствии с Федеральными Законодательными Актами', + ], +}; + +export { sidebarData }; diff --git a/src/views/expertise/tech-crim/styles.module.scss b/src/views/expertise/tech-crim/styles.module.scss new file mode 100644 index 0000000..12e439f --- /dev/null +++ b/src/views/expertise/tech-crim/styles.module.scss @@ -0,0 +1,71 @@ +.Container { + margin: 0 auto; + max-width: rem(1540px); + display: grid; + grid-template-columns: auto; + gap: 0px; + padding: 0 10px; + + @include iftablet { + grid-template-columns: auto; + padding: 0 20px; + } + + @include iflaptop { + padding: 0 28px; + gap: 40px; + grid-template-columns: auto 300px; + } + + @include ifdesktop { + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } +} + +.Article { + display: flex; + flex-direction: column; + padding: rem(40px) 0; + + .Section { + display: block; + } + + .Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .List { + display: flex; + flex-direction: column; + list-style-type: disc; + margin-left: 16px; + margin-bottom: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + } + + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } +} + diff --git a/src/views/expertise/tech-crim/ui.tsx b/src/views/expertise/tech-crim/ui.tsx new file mode 100644 index 0000000..a018891 --- /dev/null +++ b/src/views/expertise/tech-crim/ui.tsx @@ -0,0 +1,75 @@ +import s from './styles.module.scss'; +import { CallbackForm, Connect, OrderSchema } from '@/entities'; +import { + Consultation, + Documents, + Partners, + RelatedArticles, + Sidebar, +} from '@/feature/article'; +import { Breadcrumbs } from '@/widgets'; +import { sidebarData } from './model/sidebar'; +import { relatedArticlesData } from './model/related'; +import { expertData } from './model/expert'; +import { breadcrumbData, PAGE_NAME } from './model/breadcrums'; +import { connectData, documentsData, howToData } from './model/article'; + +function TechCrim() { + return ( + <> + +
    +
    +
    +

    + Если ваши имущественные или гражданские права были поставлены под + сомнение на основании поддельной документации, то + технико-криминалистическая экспертиза может оказаться единственным + реальным шансом оспорить необоснованные претензии. Проведение + судебной экспертизы нередко бывает недостаточным, а злоумышленники + могут не вносить поправки в реквизиты, что подвергаются + тщательному исследованию государственных экспертных служб. Это + может стать причиной упущений в заключении экспертов, которое + легко устранить, если обратиться к независимым экспертам, + работающим на коммерческих основаниях. +

    +

    + Важно помнить, что для техники, используемой при копировании или + печати документов, зачастую требуется особая разновидность + красящего материала. Зачастую это позволяет не только определить, + когда и с помощью чего был напечатана документация, но и доказать, + что данный принтер или ксерокс был использован для этих целей или + наоборот – не использовался. Получение экспертных заключений по + заведомо подложным бумагам встречается не так часто, как выявление + приписок и поправок, что способны кардинально изменить + первоначальный смысл документации. +

    +

    + Технико-криминалистическая экспертиза – это одна из тех услуг, + расходы на которую могут быть полностью возмещены. Такую + возможность россиянам предоставляет действующее федеральное + законодательство, где судебные издержки, понесенные истцом в + процессе сбора доказательств, могут быть взысканы с ответчика в + рамках исполнительного производства. Если приобретение продукции с + поддельными сертификатами, накладными или этикетками повлекло за + собой причинение имущественного ущерба, то для возмещения потерь + может оказаться достаточным приложить заключение экспертов к + исковому заявлению. +

    +
    + + + + +
    + +
    + + + + + + ); +} + +export { TechCrim }; diff --git a/src/views/expertise/tovar/index.ts b/src/views/expertise/tovar/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/expertise/tovar/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/expertise/tovar/model/article.ts b/src/views/expertise/tovar/model/article.ts new file mode 100644 index 0000000..32b3088 --- /dev/null +++ b/src/views/expertise/tovar/model/article.ts @@ -0,0 +1,37 @@ +const targetsData = { + title: 'Цели экспертизы:', + description: '', + docs: [ + 'разногласие между поставщиком (изготовителем) и получателем (подрядчиком) при оценке качества товара;', + 'нарушение свойств продукции, которое произошло из-за неправильной транспортировки или хранения;', + 'проверка качества и количества товара в определенной партии.', + 'невозможность производителя либо его официального представителя присутствовать при сдаче-приемке товара;', + 'заключение длительного договора на поставку товара с оговоренным уровнем качества;', + 'судебное разбирательство.', + ], +}; + +const documentsData = { + title: 'Документы, необходимые для экспертизы:', + description: '', + docs: [ + 'контракт/договор между покупателем и продавцом;', + 'товаросопроводительные документы, характеризующие качество товара (спецификации, товарно-транспортные накладные, счета-фактуры, упаковочные листы, чеки, ярлыки и т.д.);', + 'документы, подтверждающие качество (сертификат качества, сертификат соответствия ГОСТ Р, ТУ, санитарно-эпидемиологическое заключение, протокол испытания и т.д.);', + 'товар (образец товара), подлежащий экспертизе.', + ], +}; + +const howToData = { + title: 'Заказать экспертизу очень просто', + description: + 'Экспертное заключение, полученный от компании «ДИ ТРАСО», будет являться официальным документом, подтверждающим результат работы эксперта. В нем будет содержаться вся полная информация..', +}; + +const connectData = { + title: 'Как провести товароведческую экспертизу', + description: + 'Для того, чтобы заказать выполнение товароведческой экспертизы, вы можете воспользоваться любым удобным способом.', +}; + +export { targetsData, documentsData, howToData, connectData }; diff --git a/src/views/expertise/tovar/model/breadcrums.ts b/src/views/expertise/tovar/model/breadcrums.ts new file mode 100644 index 0000000..a5e7723 --- /dev/null +++ b/src/views/expertise/tovar/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Товароведческая экспертиза'; + +export const breadcrumbData = [ + { + name: 'Экспертиза', + path: ROUTES.EXPERTIZA, + }, + { + name: PAGE_NAME, + path: '', + }, +]; diff --git a/src/views/expertise/tovar/model/expert.ts b/src/views/expertise/tovar/model/expert.ts new file mode 100644 index 0000000..ef321e9 --- /dev/null +++ b/src/views/expertise/tovar/model/expert.ts @@ -0,0 +1,8 @@ +import { TExpert } from '@shared/types/expert'; +import expertPhoto from '@public/images/photo/empty-photo.jpg'; + +export const expertData: TExpert = { + name: 'Иван Иванов', + position: 'Эксперт', + photo: expertPhoto, +}; diff --git a/src/views/expertise/tovar/model/related.ts b/src/views/expertise/tovar/model/related.ts new file mode 100644 index 0000000..c57d981 --- /dev/null +++ b/src/views/expertise/tovar/model/related.ts @@ -0,0 +1,29 @@ +import { TRelatedArticles } from '@shared/types/relatedArticles'; +import { ROUTES } from '@shared/const/route'; + +export const relatedArticlesData: TRelatedArticles[] = [ + { + title: 'Оценочная экспертиза', + description: + 'Судебная оценочная (стоимостная) экспертиза представляет собой вид экспертизы, главной задачей которой является определение рыночной стоимости объектов оценки…', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Документарная экспертиза', + description: + 'Если возникают сомнения в подлинности документа, например, завещания или долговой расписки, если Вы не уверены в достоверности реквизитов или подписи на договоре, то Вы вправе обратиться за технической экспертизой документа…', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, + { + title: 'Почерковедческая экспертиза', + description: + 'Почерковедческая экспертиза, т.е. исследование рукописных текстов и подписей, широко используется в криминалистике. Она востребована в судебной практике, поскольку рукописный текст может фигурировать в деле в качестве доказательства…', + link: ROUTES.EXPERTIZA_POCHERK, + }, + { + title: 'Автотехническая экспертиза', + description: + 'При возникновении ситуаций, возникающих в результате ДТП (дорожно-транспортных происшествий), для решения наиболее сложных проблем, требуется проведение специальной автоэкспертизы, позволяющей реализовать право водителя на получение страховки …', + link: ROUTES.EXPERTIZA_AUTOTECH, + }, +]; diff --git a/src/views/expertise/tovar/model/sidebar.ts b/src/views/expertise/tovar/model/sidebar.ts new file mode 100644 index 0000000..4b1d2eb --- /dev/null +++ b/src/views/expertise/tovar/model/sidebar.ts @@ -0,0 +1,37 @@ +import { TSidebar } from '@/shared/types/sidebar'; +import { ROUTES } from '@shared/const/route'; + +const sidebarData: TSidebar = { + estimate: '3', + relatedTitle: 'Сопутствующие экспертизы', + related: [ + { + title: 'Оценочная', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Документарная', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, + { + title: 'Почерковедческая', + link: ROUTES.EXPERTIZA_POCHERK, + }, + { + title: 'Автотехническая', + link: ROUTES.EXPERTIZA_AUTOTECH, + }, + { + title: 'Рецензирование (проверка)', + link: ROUTES.EXPERTIZA_RECENZII, + }, + ], + warrantiesTitle: 'Наши гарантии', + warranties: [ + 'Эксперты компании являются членами Саморегулируемой организации судебных экспертов', + 'Деятельность компании застрахована на 60 000 000 рублей', + 'Экспертизы выполняются в соответствии с Федеральными Законодательными Актами', + ], +}; + +export { sidebarData }; diff --git a/src/views/expertise/tovar/styles.module.scss b/src/views/expertise/tovar/styles.module.scss new file mode 100644 index 0000000..12e439f --- /dev/null +++ b/src/views/expertise/tovar/styles.module.scss @@ -0,0 +1,71 @@ +.Container { + margin: 0 auto; + max-width: rem(1540px); + display: grid; + grid-template-columns: auto; + gap: 0px; + padding: 0 10px; + + @include iftablet { + grid-template-columns: auto; + padding: 0 20px; + } + + @include iflaptop { + padding: 0 28px; + gap: 40px; + grid-template-columns: auto 300px; + } + + @include ifdesktop { + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } +} + +.Article { + display: flex; + flex-direction: column; + padding: rem(40px) 0; + + .Section { + display: block; + } + + .Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .List { + display: flex; + flex-direction: column; + list-style-type: disc; + margin-left: 16px; + margin-bottom: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + } + + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } +} + diff --git a/src/views/expertise/tovar/ui.tsx b/src/views/expertise/tovar/ui.tsx new file mode 100644 index 0000000..3824e48 --- /dev/null +++ b/src/views/expertise/tovar/ui.tsx @@ -0,0 +1,71 @@ +import s from './styles.module.scss'; +import { CallbackForm, Connect, OrderSchema } from '@/entities'; +import { + Consultation, + Documents, + Partners, + RelatedArticles, + Sidebar, +} from '@/feature/article'; +import { Breadcrumbs } from '@/widgets'; +import { sidebarData } from './model/sidebar'; +import { relatedArticlesData } from './model/related'; +import { expertData } from './model/expert'; +import { breadcrumbData, PAGE_NAME } from './model/breadcrums'; +import { + connectData, + documentsData, + howToData, + targetsData, +} from './model/article'; + +function Tovar() { + return ( + <> + +
    +
    +
    +

    + На прилавках отечественных магазинов очень много продукции, + которая не всегда качественная, соответствует ГОСТам и + постановленным нормативам. Исследование качества товаров стоит на + страже потребителей и помогает обнаружить несоответствия. + Руководства предприятий заказывают такое исследование чтобы + выяснить: +

    +
      +
    • Причины товарных потерь.
    • +
    • Правильность ценообразования.
    • +
    • + Правильность списания позиций материально-ответственными лицами + (имеется ввиду просроченная продукция). +
    • +
    +

    + Судебная экспертиза товаров должна проводиться только + специалистом, получившим узкопрофильную квалификацию. Если Вам + необходима товароведческая экспертиза и для суда, мы готовы + подробно исследовать любой товар. Результат работы экспертов – + документальное заключение, включающее в себя общие характеристики + исследуемых объектов (одно или нескольких), поставленные задачи, + методики аналитики и научные обоснования. +

    +
    + + + + + +
    + +
    + + + + + + ); +} + +export { Tovar }; diff --git a/src/views/expertise/trasologia/index.ts b/src/views/expertise/trasologia/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/expertise/trasologia/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/expertise/trasologia/model/article.ts b/src/views/expertise/trasologia/model/article.ts new file mode 100644 index 0000000..8105564 --- /dev/null +++ b/src/views/expertise/trasologia/model/article.ts @@ -0,0 +1,27 @@ +const documentsData = { + title: 'Цели экспертизы:', + description: + 'Для начала работ по автомобильной экспертизе эксперту понадобятся основные документы:', + docs: [ + 'При разрешении спора о причине причинения ущерба транспортному средству (легковому автомобилю, грузовому транспорту, спецтехнике);', + 'При разрешении спора со страховой компанией относительно справедливости выплаты после ДТП;', + 'При разрешении спора об определении виновника ДТП;', + 'Для определения принадлежности пострадавшего элемента, отделенного от транспортного средства, определенному транспортному средству;', + 'Для определения точного места происхождения ДТП (по следам и внешним факторам);', + 'Для определения причинно-следственных связей между произошедшим ДТП и причиненным ущербом путем изучения картины происшествия и моделирования схемы ДТП по предоставленным материалам.', + ], +}; + +const howToData = { + title: 'Заказать экспертизу очень просто', + description: + 'Экспертное заключение, полученный от компании «ДИ ТРАСО», будет являться официальным документом, подтверждающим результат работы эксперта. В нем будет содержаться вся полная информация..', +}; + +const connectData = { + title: 'Как провести трасологическую экспертизу', + description: + 'Для того, чтобы заказать выполнение трасологической экспертизы, вы можете воспользоваться любым удобным способом.', +}; + +export { documentsData, howToData, connectData }; diff --git a/src/views/expertise/trasologia/model/breadcrums.ts b/src/views/expertise/trasologia/model/breadcrums.ts new file mode 100644 index 0000000..c1709aa --- /dev/null +++ b/src/views/expertise/trasologia/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Трасологическая экспертиза'; + +export const breadcrumbData = [ + { + name: 'Экспертиза', + path: ROUTES.EXPERTIZA, + }, + { + name: PAGE_NAME, + path: '', + }, +]; diff --git a/src/views/expertise/trasologia/model/expert.ts b/src/views/expertise/trasologia/model/expert.ts new file mode 100644 index 0000000..ef321e9 --- /dev/null +++ b/src/views/expertise/trasologia/model/expert.ts @@ -0,0 +1,8 @@ +import { TExpert } from '@shared/types/expert'; +import expertPhoto from '@public/images/photo/empty-photo.jpg'; + +export const expertData: TExpert = { + name: 'Иван Иванов', + position: 'Эксперт', + photo: expertPhoto, +}; diff --git a/src/views/expertise/trasologia/model/related.ts b/src/views/expertise/trasologia/model/related.ts new file mode 100644 index 0000000..ca1b770 --- /dev/null +++ b/src/views/expertise/trasologia/model/related.ts @@ -0,0 +1,29 @@ +import { TRelatedArticles } from '@shared/types/relatedArticles'; +import { ROUTES } from '@shared/const/route'; + +export const relatedArticlesData: TRelatedArticles[] = [ + { + title: 'Автотехническая экспертиза', + description: + 'При возникновении ситуаций, возникающих в результате ДТП (дорожно-транспортных происшествий), для решения наиболее сложных проблем, требуется проведение специальной автоэкспертизы, позволяющей реализовать право водителя на получение страховки …', + link: ROUTES.EXPERTIZA_TRASOLOGIA, + }, + { + title: 'Оценочная экспертиза', + description: + 'Судебная оценочная (стоимостная) экспертиза представляет собой вид экспертизы, главной задачей которой является определение рыночной стоимости объектов оценки…', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Товароведческая экспертиза', + description: + 'Судебная экспертиза товаров должна проводиться только специалистом, получившим узкопрофильную квалификацию. Если Вам необходима товароведческая экспертиза и для суда, мы готовы подробно исследовать любой товар. Результат работы…', + link: ROUTES.EXPERTIZA_TOVAR, + }, + { + title: 'Документарная экспертиза', + description: + 'Если возникают сомнения в подлинности документа, например, завещания или долговой расписки, если Вы не уверены в достоверности реквизитов или подписи на договоре, то Вы вправе обратиться за технической экспертизой документа…', + link: ROUTES.EXPERTIZA_RECENZII, + }, +]; diff --git a/src/views/expertise/trasologia/model/sidebar.ts b/src/views/expertise/trasologia/model/sidebar.ts new file mode 100644 index 0000000..bd653a0 --- /dev/null +++ b/src/views/expertise/trasologia/model/sidebar.ts @@ -0,0 +1,37 @@ +import { TSidebar } from '@/shared/types/sidebar'; +import { ROUTES } from '@shared/const/route'; + +const sidebarData: TSidebar = { + estimate: '3', + relatedTitle: 'Сопутствующие экспертизы', + related: [ + { + title: 'Автотехническая', + link: ROUTES.EXPERTIZA_AUTOTECH, + }, + { + title: 'Оценочная', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Товароведческая', + link: ROUTES.EXPERTIZA_TOVAR, + }, + { + title: 'Документарная', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, + { + title: 'Рецензирование (проверка)', + link: ROUTES.EXPERTIZA_RECENZII, + }, + ], + warrantiesTitle: 'Наши гарантии', + warranties: [ + 'Эксперты компании являются членами Саморегулируемой организации судебных экспертов', + 'Деятельность компании застрахована на 60 000 000 рублей', + 'Экспертизы выполняются в соответствии с Федеральными Законодательными Актами', + ], +}; + +export { sidebarData }; diff --git a/src/views/expertise/trasologia/styles.module.scss b/src/views/expertise/trasologia/styles.module.scss new file mode 100644 index 0000000..12e439f --- /dev/null +++ b/src/views/expertise/trasologia/styles.module.scss @@ -0,0 +1,71 @@ +.Container { + margin: 0 auto; + max-width: rem(1540px); + display: grid; + grid-template-columns: auto; + gap: 0px; + padding: 0 10px; + + @include iftablet { + grid-template-columns: auto; + padding: 0 20px; + } + + @include iflaptop { + padding: 0 28px; + gap: 40px; + grid-template-columns: auto 300px; + } + + @include ifdesktop { + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } +} + +.Article { + display: flex; + flex-direction: column; + padding: rem(40px) 0; + + .Section { + display: block; + } + + .Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .List { + display: flex; + flex-direction: column; + list-style-type: disc; + margin-left: 16px; + margin-bottom: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + } + + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } +} + diff --git a/src/views/expertise/trasologia/ui.tsx b/src/views/expertise/trasologia/ui.tsx new file mode 100644 index 0000000..33deedc --- /dev/null +++ b/src/views/expertise/trasologia/ui.tsx @@ -0,0 +1,78 @@ +import s from './styles.module.scss'; +import { CallbackForm, Connect, OrderSchema } from '@/entities'; +import { + Consultation, + Documents, + Partners, + RelatedArticles, + Sidebar, +} from '@/feature/article'; +import { Breadcrumbs } from '@/widgets'; +import { sidebarData } from './model/sidebar'; +import { relatedArticlesData } from './model/related'; +import { expertData } from './model/expert'; +import { breadcrumbData, PAGE_NAME } from './model/breadcrums'; +import { connectData, documentsData, howToData } from './model/article'; + +function Trasologia() { + return ( + <> + +
    +
    +
    +

    + Трасологическая экспертиза направленна на установление + причастности транспортного средства или прочего имущества/предмета + к происшествию. +

    +

    + Эксперты нашей компании быстро и точно восстановят картину + происшествия и дадут профессиональную оценку ситуации. Также во + время трасологической экспертизы изучаются имеющиеся повреждения и + следы на месте аварии. По результатам независимого расследования + удается воссоздать точную картину ДТП и подготовить заключение, на + основе которого можно будет доказать свою невиновность и + опровергнуть выдвинутые обвинения. Также независимая экспертиза + защищает человека от необоснованных штрафных санкций и помогает + получить от страховой компании возмещение ущерба по факту + наступления страхового случая. +

    +

    + На практике доказано, что многие страховые компании в желании + уклониться от страховых выплат утверждают, что полученные во время + аварии повреждения не относятся к страховым случаям или же их + характер не соответствует масштабам происшествия. Это не что + другое, как манипуляция, доказать которую поможет только + профессиональный эксперт по проведению трасологического + исследования. +

    +

    + В такой услуге возникает необходимость, когда правоохранительные + органы необоснованно обвиняют вас в аварии. Иногда для того чтобы + доказать вину человека, применяются подтасованные факты или ложные + свидетельства. В этих и других случаях поможет независимое + трасологическое расследование, которое защитит интересы + невиновного и оградит его от выплаты штрафных санкций. +

    +

    + Каждый участник ДТП имеет полное право самостоятельно выбирать + компанию, которая будет проводить независимое исследование. +

    +
    + + + + +
    + +
    + + + + + + ); +} + +export { Trasologia }; diff --git a/src/views/expertise/zem-stroy/index.ts b/src/views/expertise/zem-stroy/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/expertise/zem-stroy/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/expertise/zem-stroy/model/article.ts b/src/views/expertise/zem-stroy/model/article.ts new file mode 100644 index 0000000..0cef7d5 --- /dev/null +++ b/src/views/expertise/zem-stroy/model/article.ts @@ -0,0 +1,27 @@ +const documentsData = { + title: 'Цели экспертизы:', + description: '', + docs: [ + 'при наличии территориальных споров между владельцами соседствующих земель;', + 'при определении права пользования земельного участка собственниками;', + 'при разделе земли (земельных участков) между несколькими собственниками;', + 'при необходимости определить правомерность, законность возведения построек на участке или существующих объектов (комплексная землеустроительная строительно-техническая экспертиза);', + 'исследование земли (земельного участка) на предмет нарушения каких-либо правовых норм из области землеустройства;', + 'при наложении границ смежных участков друг на друга;', + 'при необходимости определить точные географические координаты участка;', + ], +}; + +const howToData = { + title: 'Заказать экспертизу очень просто', + description: + 'Экспертное заключение, полученный от компании «ДИ ТРАСО», будет являться официальным документом, подтверждающим результат работы эксперта. В нем будет содержаться вся полная информация..', +}; + +const connectData = { + title: 'Как провести земле-устроительную экспертизу', + description: + 'Для того, чтобы заказать выполнение земле-устроительной экспертизы, вы можете воспользоваться любым удобным способом.', +}; + +export { documentsData, howToData, connectData }; diff --git a/src/views/expertise/zem-stroy/model/breadcrums.ts b/src/views/expertise/zem-stroy/model/breadcrums.ts new file mode 100644 index 0000000..dc454a5 --- /dev/null +++ b/src/views/expertise/zem-stroy/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Земле-устроительная экспертиза'; + +export const breadcrumbData = [ + { + name: 'Экспертиза', + path: ROUTES.EXPERTIZA, + }, + { + name: PAGE_NAME, + path: '', + }, +]; diff --git a/src/views/expertise/zem-stroy/model/expert.ts b/src/views/expertise/zem-stroy/model/expert.ts new file mode 100644 index 0000000..c9876d8 --- /dev/null +++ b/src/views/expertise/zem-stroy/model/expert.ts @@ -0,0 +1,8 @@ +import { TExpert } from '@shared/types/expert'; +import expertPhoto from '@public/images/photo/kaminskiy-dmitriy.png'; + +export const expertData: TExpert = { + name: 'Каминский Дмитрий', + position: 'Строительный эксперт', + photo: expertPhoto, +}; diff --git a/src/views/expertise/zem-stroy/model/related.ts b/src/views/expertise/zem-stroy/model/related.ts new file mode 100644 index 0000000..196137a --- /dev/null +++ b/src/views/expertise/zem-stroy/model/related.ts @@ -0,0 +1,29 @@ +import { TRelatedArticles } from '@shared/types/relatedArticles'; +import { ROUTES } from '@shared/const/route'; + +export const relatedArticlesData: TRelatedArticles[] = [ + { + title: 'Кадастровая экспертиза', + description: + 'Кадастровая экспертиза выполняется в целях определения характеристик земельных участков, таких как: фактическая площадь, точное расположение и др. Все процессы, которые проводятся в рамках экспертизы, обусловлены …', + link: ROUTES.EXPERTIZA_KADASTR, + }, + { + title: 'Строительно-техническая экспертиза', + description: + 'Строительная экспертиза – это услуга, которая позволяет контролировать проведение строительных работ, а также улучшить качество строительства, монтажа и ремонтных работ…', + link: ROUTES.EXPERTIZA_STROIT, + }, + { + title: 'Финансово-экономическая экспертиза', + description: + 'Зачастую, бухгалтерская экспертиза является информационной основой для финансово-экономической экспертизы, по причине необходимости исследования одних и тех же объектов. Основная цель – выявление фактов и обстоятельств…', + link: ROUTES.EXPERTIZA_FINANS, + }, + { + title: 'Рецензия (Проверка) экспертизы', + description: + 'Необходимость в составлении рецензии на судебную экспертизу появляется в ситуациях, когда выводы заключения являются не обоснованными, а квалификация и опыт эксперта не вызывают доверия. В ходе рецензирования экспертное заключение проверяется…', + link: ROUTES.EXPERTIZA_RECENZII, + }, +]; diff --git a/src/views/expertise/zem-stroy/model/sidebar.ts b/src/views/expertise/zem-stroy/model/sidebar.ts new file mode 100644 index 0000000..2f6ef24 --- /dev/null +++ b/src/views/expertise/zem-stroy/model/sidebar.ts @@ -0,0 +1,41 @@ +import { TSidebar } from '@/shared/types/sidebar'; +import { ROUTES } from '@shared/const/route'; + +const sidebarData: TSidebar = { + estimate: '3', + relatedTitle: 'Сопутствующие экспертизы', + related: [ + { + title: 'Кадастровая', + link: ROUTES.EXPERTIZA_KADASTR, + }, + { + title: 'Строительно-техническая ', + link: ROUTES.EXPERTIZA_STROIT, + }, + { + title: 'Оценочная', + link: ROUTES.EXPERTIZA_OCENKI, + }, + { + title: 'Документарная', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, + { + title: 'Финансово-экономическая ', + link: ROUTES.EXPERTIZA_FINANS, + }, + { + title: 'Рецензирование (проверка)', + link: ROUTES.EXPERTIZA_RECENZII, + }, + ], + warrantiesTitle: 'Наши гарантии', + warranties: [ + 'Эксперты компании являются членами Саморегулируемой организации судебных экспертов', + 'Деятельность компании застрахована на 60 000 000 рублей', + 'Экспертизы выполняются в соответствии с Федеральными Законодательными Актами', + ], +}; + +export { sidebarData }; diff --git a/src/views/expertise/zem-stroy/styles.module.scss b/src/views/expertise/zem-stroy/styles.module.scss new file mode 100644 index 0000000..12e439f --- /dev/null +++ b/src/views/expertise/zem-stroy/styles.module.scss @@ -0,0 +1,71 @@ +.Container { + margin: 0 auto; + max-width: rem(1540px); + display: grid; + grid-template-columns: auto; + gap: 0px; + padding: 0 10px; + + @include iftablet { + grid-template-columns: auto; + padding: 0 20px; + } + + @include iflaptop { + padding: 0 28px; + gap: 40px; + grid-template-columns: auto 300px; + } + + @include ifdesktop { + grid-template-columns: auto 360px; + gap: 160px; + padding: 0 40px; + } +} + +.Article { + display: flex; + flex-direction: column; + padding: rem(40px) 0; + + .Section { + display: block; + } + + .Text { + font-family: $font-roboto; + font-weight: 400; + font-size: rem(16px); + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } + + .List { + display: flex; + flex-direction: column; + list-style-type: disc; + margin-left: 16px; + margin-bottom: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + } + + .Header { + font-family: $font-roboto; + font-weight: 300; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 16px; + } +} + diff --git a/src/views/expertise/zem-stroy/ui.tsx b/src/views/expertise/zem-stroy/ui.tsx new file mode 100644 index 0000000..1f82ed2 --- /dev/null +++ b/src/views/expertise/zem-stroy/ui.tsx @@ -0,0 +1,62 @@ +import s from './styles.module.scss'; +import { CallbackForm, Connect, OrderSchema } from '@/entities'; +import { + Consultation, + Documents, + Partners, + RelatedArticles, + Sidebar, +} from '@/feature/article'; +import { Breadcrumbs } from '@/widgets'; +import { sidebarData } from './model/sidebar'; +import { relatedArticlesData } from './model/related'; +import { expertData } from './model/expert'; +import { breadcrumbData, PAGE_NAME } from './model/breadcrums'; +import { connectData, documentsData, howToData } from './model/article'; + +function ZemStroy() { + return ( + <> + +
    +
    +
    +

    + Землеустроительная экспертиза выполняется в целях определения + характеристик земельных участков, таких как: фактическая площадь, + точное расположение и др. +

    +

    + Все процессы, которые проводятся в рамках экспертизы, обусловлены + необходимостью определения фактических границ земельного участка, + установления возможности разделения земельного участка на + несколько и определением их границ. +

    +

    + Внесудебное исследование проводится по инициативе + землепользователей, собственников и арендаторов участков, иных + заинтересованных лиц. Также судебная землеустроительная экспертиза + может быть назначена по ходатайству одной из сторон, участвующих в + рассмотрении дела. Исследование может быть проведено на любой + стадии процесса, но до вынесения решения по конкретному + разбирательству. Если суд удовлетворяет ходатайство, то копию + постановления необходимо направить в компанию, которая и будет + проводить экспертное исследование. +

    +
    + + + + +
    + +
    + + + + + + ); +} + +export { ZemStroy }; diff --git a/src/views/index.ts b/src/views/index.ts index 6efa6eb..6f8ffea 100644 --- a/src/views/index.ts +++ b/src/views/index.ts @@ -2,3 +2,16 @@ export * from './home'; //Expertise export * from './expertise/autotech'; +export * from './expertise/buhgalter'; +export * from './expertise/computer'; +export * from './expertise/document'; +export * from './expertise/finans'; +export * from './expertise/kadastr'; +export * from './expertise/pocherk'; +export * from './expertise/pozhar'; +export * from './expertise/recenzii'; +export * from './expertise/stroit'; +export * from './expertise/tech-crim'; +export * from './expertise/tovar'; +export * from './expertise/trasologia'; +export * from './expertise/zem-stroy'; diff --git a/src/widgets/index.ts b/src/widgets/index.ts index d6929da..05d68e2 100644 --- a/src/widgets/index.ts +++ b/src/widgets/index.ts @@ -1,4 +1,3 @@ export * from './header'; export * from './footer'; export * from './breadcrumbs'; -export * from './partners-slider'; -- 2.49.1 From 57db15e01a485f4b82191acaa6b867701bf63975 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Wed, 9 Jul 2025 08:53:58 +0300 Subject: [PATCH 30/65] fix: menu, move beauty phone icon to icons --- src/entities/base-menu/ui.tsx | 6 +++- src/entities/beauty-button/ui.tsx | 19 ++-------- src/shared/const/menu.ts | 1 + src/shared/ui/icon/ui.tsx | 60 ++++++++++++++++++++++--------- 4 files changed, 51 insertions(+), 35 deletions(-) diff --git a/src/entities/base-menu/ui.tsx b/src/entities/base-menu/ui.tsx index 8f6987d..0510faa 100644 --- a/src/entities/base-menu/ui.tsx +++ b/src/entities/base-menu/ui.tsx @@ -17,7 +17,11 @@ function BaseMenu() { return (
  • - {item.name} + {item.link ? ( + {item.name} + ) : ( + item.name + )}
      {nodeList(item.children)}
    diff --git a/src/entities/beauty-button/ui.tsx b/src/entities/beauty-button/ui.tsx index 6ac2b22..e43e8ad 100644 --- a/src/entities/beauty-button/ui.tsx +++ b/src/entities/beauty-button/ui.tsx @@ -4,6 +4,7 @@ import s from './styles.module.scss'; import type { ReactNode, SVGProps } from 'react'; import { useModal } from '@core/providers/modal-provider'; import { ConsultationModal } from '@/feature/article'; +import { Icons } from '@/shared/ui/icon'; type TBeautyButtonProps = { children?: ReactNode; @@ -17,7 +18,7 @@ function BeautyButton({ children, onClick }: TBeautyButtonProps) { return (

    @@ -27,20 +28,4 @@ function BeautyButton({ children, onClick }: TBeautyButtonProps) { ); } -//MagePhoneFill -const PhoneIcon = (props: SVGProps) => ( - - - -); - export { BeautyButton }; diff --git a/src/shared/const/menu.ts b/src/shared/const/menu.ts index 1a5c58d..9af04a4 100644 --- a/src/shared/const/menu.ts +++ b/src/shared/const/menu.ts @@ -4,6 +4,7 @@ import { ROUTES } from './route'; export const baseMenu: TMenu = [ { name: 'Экспертиза', + link: ROUTES.EXPERTIZA, children: [ { name: 'Автотехническая', diff --git a/src/shared/ui/icon/ui.tsx b/src/shared/ui/icon/ui.tsx index 54ec610..63dc370 100644 --- a/src/shared/ui/icon/ui.tsx +++ b/src/shared/ui/icon/ui.tsx @@ -6,7 +6,7 @@ import type { SVGProps } from 'react'; type SVGIcon = SVGProps; //RiMapPinLine -function Map(props: SVGIcon) { +const Map = (props: SVGIcon) => { return ( ); -} +}; //MynauiEnvelope -function Envelope(props: SVGIcon) { +const Envelope = (props: SVGIcon) => { return ( ); -} +}; //IcBaselineWhatsapp -function Whatsapp(props: SVGIcon) { +const Whatsapp = (props: SVGIcon) => { return ( ); -} +}; //IcBaselineTelegram -function Telegram(props: SVGIcon) { +const Telegram = (props: SVGIcon) => { return ( ); -} +}; // CiPhone -function Phone(props: SVGIcon) { +const Phone = (props: SVGIcon) => { return ( ); -} +}; //HugeiconsVk -function Vk(props: SVGIcon) { +const Vk = (props: SVGIcon) => { return ( ); -} +}; //MdiYoutube -function Youtube(props: SVGIcon) { +const Youtube = (props: SVGIcon) => { return ( ); -} +}; //WeuiArrowFilled -export function MenuArrow(props: SVGIcon) { +const MenuArrow = (props: SVGIcon) => { return ( ); -} +}; + +//MagePhoneFill +const BtnPhone = (props: SVGIcon) => ( + + + +); const Icons = Object.assign( {}, - { Map, Envelope, Whatsapp, Telegram, Phone, Vk, Youtube, MenuArrow }, + { + Map, + Envelope, + Whatsapp, + Telegram, + Phone, + Vk, + Youtube, + MenuArrow, + BtnPhone, + }, ); export { Icons }; -- 2.49.1 From 6c0a6f4a27adc72b141ab21693c23787239bfc0b Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Wed, 9 Jul 2025 09:43:37 +0300 Subject: [PATCH 31/65] feat: add expertise category page --- src/app/ekspertiza/page.tsx | 4 +- src/views/expertise/category/index.ts | 1 + .../expertise/category/model/breadcrums.ts | 14 ++++ src/views/expertise/category/model/links.ts | 30 ++++++++ .../expertise/category/styles.module.scss | 68 +++++++++++++++++++ src/views/expertise/category/ui.tsx | 49 +++++++++++++ src/views/index.ts | 1 + 7 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 src/views/expertise/category/index.ts create mode 100644 src/views/expertise/category/model/breadcrums.ts create mode 100644 src/views/expertise/category/model/links.ts create mode 100644 src/views/expertise/category/styles.module.scss create mode 100644 src/views/expertise/category/ui.tsx diff --git a/src/app/ekspertiza/page.tsx b/src/app/ekspertiza/page.tsx index e5a2d4e..4c98335 100644 --- a/src/app/ekspertiza/page.tsx +++ b/src/app/ekspertiza/page.tsx @@ -1,3 +1,5 @@ +import { ExpertiseCategory } from '@/views'; + export default function ExpertizaPage() { - return

    Expertiza
    ; + return ; } diff --git a/src/views/expertise/category/index.ts b/src/views/expertise/category/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/expertise/category/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/expertise/category/model/breadcrums.ts b/src/views/expertise/category/model/breadcrums.ts new file mode 100644 index 0000000..2c12d12 --- /dev/null +++ b/src/views/expertise/category/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Экспертиза'; + +export const breadcrumbData = [ + { + name: 'Экспертиза', + path: ROUTES.EXPERTIZA, + }, + { + name: PAGE_NAME, + path: '', + }, +]; diff --git a/src/views/expertise/category/model/links.ts b/src/views/expertise/category/model/links.ts new file mode 100644 index 0000000..8080d65 --- /dev/null +++ b/src/views/expertise/category/model/links.ts @@ -0,0 +1,30 @@ +import { ROUTES } from '@shared/const/route'; + +export const linksData = { + blockA: [ + { name: 'Автотехническая', link: ROUTES.EXPERTIZA_AUTOTECH }, + { name: 'Трасологическая', link: ROUTES.EXPERTIZA_TRASOLOGIA }, + { name: 'Оценочная', link: ROUTES.EXPERTIZA_OCENKI }, + { name: 'Пожарно-техническая', link: ROUTES.EXPERTIZA_POZHAR }, + { name: 'Товароведческая', link: ROUTES.EXPERTIZA_TOVAR }, + { + name: 'Рецензирование и проверка экспертизы', + link: ROUTES.EXPERTIZA_RECENZII, + }, + ], + blockB: [ + { name: 'Документарная', link: ROUTES.EXPERTIZA_DOCUMENT }, + { name: 'Бухгалтерская', link: ROUTES.EXPERTIZA_BUHGALTER }, + { name: 'Финансово-экономическая', link: ROUTES.EXPERTIZA_FINANS }, + { name: 'Земле-устроительная', link: ROUTES.EXPERTIZA_ZEM_STROY }, + { name: 'Кадастровая', link: ROUTES.EXPERTIZA_KADASTR }, + { name: 'Строительно-техническая', link: ROUTES.EXPERTIZA_STROIT }, + ], + blockC: [ + { name: 'Компьютерно-техническая', link: ROUTES.EXPERTIZA_COPMPUTER }, + { name: 'Почерковедческая', link: ROUTES.EXPERTIZA_POCHERK }, + { name: 'Судебно-биологическая', link: undefined }, + { name: 'Судебно-психологическая', link: undefined }, + { name: 'Технико-криминалистическая', link: ROUTES.EXPERTIZA_TECH_CRIM }, + ], +}; diff --git a/src/views/expertise/category/styles.module.scss b/src/views/expertise/category/styles.module.scss new file mode 100644 index 0000000..6f9a0db --- /dev/null +++ b/src/views/expertise/category/styles.module.scss @@ -0,0 +1,68 @@ +.Container { + margin: 0 auto; + max-width: rem(1540px); + display: flex; + flex-direction: column; + gap: 0px; + padding: 10px; + + @include iftablet { + padding: 20px; + } + + @include iflaptop { + padding: 28px; + } + + @include ifdesktop { + padding: 40px; + } +} + +.Header { + font-family: $font-roboto; + font-weight: 500; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 40px; +} + +.Grid { + display: grid; + grid-template-columns: auto; + + @include iftablet { + grid-template-columns: repeat(3, 1fr); + } +} + +.Block { + display: block; + + .List { + display: flex; + flex-direction: column; + gap: 10px; + list-style-type: disc; + margin-left: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 400; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + + a { + color: $color-green; + } + + a:hover { + color: $color-green-hover; + text-decoration: underline; + } + } +} diff --git a/src/views/expertise/category/ui.tsx b/src/views/expertise/category/ui.tsx new file mode 100644 index 0000000..f86f87c --- /dev/null +++ b/src/views/expertise/category/ui.tsx @@ -0,0 +1,49 @@ +import s from './styles.module.scss'; +import { breadcrumbData } from './model/breadcrums'; +import { Breadcrumbs } from '@/widgets'; +import Link from 'next/link'; +import { Partners } from '@/feature/article'; +import { linksData } from './model/links'; + +function ExpertiseCategory() { + return ( + <> + +
    +

    Судебная экспертиза

    +
    +
    +
      + {linksData.blockA.map(({ name, link }, index) => ( +
    • + {link ? {name} : name} +
    • + ))} +
    +
    +
    +
      + {linksData.blockB.map(({ name, link }, index) => ( +
    • + {link ? {name} : name} +
    • + ))} +
    +
    +
    +
      + {linksData.blockC.map(({ name, link }, index) => ( +
    • + {link ? {name} : name} +
    • + ))} +
    +
    +
    +
    + + + ); +} + +export { ExpertiseCategory }; diff --git a/src/views/index.ts b/src/views/index.ts index 6f8ffea..d4ab4c5 100644 --- a/src/views/index.ts +++ b/src/views/index.ts @@ -1,6 +1,7 @@ export * from './home'; //Expertise +export * from './expertise/category'; export * from './expertise/autotech'; export * from './expertise/buhgalter'; export * from './expertise/computer'; -- 2.49.1 From 6fbb3ffbfa878ff6012f07a526954aa38dd313fd Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Wed, 9 Jul 2025 10:40:47 +0300 Subject: [PATCH 32/65] feat: add category page to ocenka --- src/app/ocenka/page.tsx | 4 +- src/shared/const/menu.ts | 2 + src/views/expertise/category/model/links.ts | 62 +++++----- src/views/expertise/category/ui.tsx | 38 ++---- src/views/index.ts | 3 + src/views/ocenka/category/index.ts | 1 + src/views/ocenka/category/model/breadcrums.ts | 14 +++ src/views/ocenka/category/model/links.ts | 112 ++++++++++++++++++ src/views/ocenka/category/styles.module.scss | 78 ++++++++++++ src/views/ocenka/category/ui.tsx | 34 ++++++ 10 files changed, 292 insertions(+), 56 deletions(-) create mode 100644 src/views/ocenka/category/index.ts create mode 100644 src/views/ocenka/category/model/breadcrums.ts create mode 100644 src/views/ocenka/category/model/links.ts create mode 100644 src/views/ocenka/category/styles.module.scss create mode 100644 src/views/ocenka/category/ui.tsx diff --git a/src/app/ocenka/page.tsx b/src/app/ocenka/page.tsx index 30bf92f..641123a 100644 --- a/src/app/ocenka/page.tsx +++ b/src/app/ocenka/page.tsx @@ -1,3 +1,5 @@ +import { OcenkaCategory } from '@/views'; + export default function OcenkaPage() { - return
    Ocenka
    ; + return ; } diff --git a/src/shared/const/menu.ts b/src/shared/const/menu.ts index 9af04a4..8d88c5a 100644 --- a/src/shared/const/menu.ts +++ b/src/shared/const/menu.ts @@ -66,6 +66,7 @@ export const baseMenu: TMenu = [ }, { name: 'Оценка', + link: ROUTES.OCENKA, children: [ { name: 'По ситуации', @@ -269,6 +270,7 @@ export const baseMenu: TMenu = [ }, { name: 'Юрист', + link: ROUTES.JURIST, children: [ { name: 'Решение споров', diff --git a/src/views/expertise/category/model/links.ts b/src/views/expertise/category/model/links.ts index 8080d65..85d09c4 100644 --- a/src/views/expertise/category/model/links.ts +++ b/src/views/expertise/category/model/links.ts @@ -1,30 +1,36 @@ import { ROUTES } from '@shared/const/route'; -export const linksData = { - blockA: [ - { name: 'Автотехническая', link: ROUTES.EXPERTIZA_AUTOTECH }, - { name: 'Трасологическая', link: ROUTES.EXPERTIZA_TRASOLOGIA }, - { name: 'Оценочная', link: ROUTES.EXPERTIZA_OCENKI }, - { name: 'Пожарно-техническая', link: ROUTES.EXPERTIZA_POZHAR }, - { name: 'Товароведческая', link: ROUTES.EXPERTIZA_TOVAR }, - { - name: 'Рецензирование и проверка экспертизы', - link: ROUTES.EXPERTIZA_RECENZII, - }, - ], - blockB: [ - { name: 'Документарная', link: ROUTES.EXPERTIZA_DOCUMENT }, - { name: 'Бухгалтерская', link: ROUTES.EXPERTIZA_BUHGALTER }, - { name: 'Финансово-экономическая', link: ROUTES.EXPERTIZA_FINANS }, - { name: 'Земле-устроительная', link: ROUTES.EXPERTIZA_ZEM_STROY }, - { name: 'Кадастровая', link: ROUTES.EXPERTIZA_KADASTR }, - { name: 'Строительно-техническая', link: ROUTES.EXPERTIZA_STROIT }, - ], - blockC: [ - { name: 'Компьютерно-техническая', link: ROUTES.EXPERTIZA_COPMPUTER }, - { name: 'Почерковедческая', link: ROUTES.EXPERTIZA_POCHERK }, - { name: 'Судебно-биологическая', link: undefined }, - { name: 'Судебно-психологическая', link: undefined }, - { name: 'Технико-криминалистическая', link: ROUTES.EXPERTIZA_TECH_CRIM }, - ], -}; +export const linksData = [ + { + block: [ + { name: 'Автотехническая', link: ROUTES.EXPERTIZA_AUTOTECH }, + { name: 'Трасологическая', link: ROUTES.EXPERTIZA_TRASOLOGIA }, + { name: 'Оценочная', link: ROUTES.EXPERTIZA_OCENKI }, + { name: 'Пожарно-техническая', link: ROUTES.EXPERTIZA_POZHAR }, + { name: 'Товароведческая', link: ROUTES.EXPERTIZA_TOVAR }, + { + name: 'Рецензирование и проверка экспертизы', + link: ROUTES.EXPERTIZA_RECENZII, + }, + ], + }, + { + block: [ + { name: 'Документарная', link: ROUTES.EXPERTIZA_DOCUMENT }, + { name: 'Бухгалтерская', link: ROUTES.EXPERTIZA_BUHGALTER }, + { name: 'Финансово-экономическая', link: ROUTES.EXPERTIZA_FINANS }, + { name: 'Земле-устроительная', link: ROUTES.EXPERTIZA_ZEM_STROY }, + { name: 'Кадастровая', link: ROUTES.EXPERTIZA_KADASTR }, + { name: 'Строительно-техническая', link: ROUTES.EXPERTIZA_STROIT }, + ], + }, + { + block: [ + { name: 'Компьютерно-техническая', link: ROUTES.EXPERTIZA_COPMPUTER }, + { name: 'Почерковедческая', link: ROUTES.EXPERTIZA_POCHERK }, + { name: 'Судебно-биологическая', link: undefined }, + { name: 'Судебно-психологическая', link: undefined }, + { name: 'Технико-криминалистическая', link: ROUTES.EXPERTIZA_TECH_CRIM }, + ], + }, +]; diff --git a/src/views/expertise/category/ui.tsx b/src/views/expertise/category/ui.tsx index f86f87c..0ad665c 100644 --- a/src/views/expertise/category/ui.tsx +++ b/src/views/expertise/category/ui.tsx @@ -12,33 +12,17 @@ function ExpertiseCategory() {

    Судебная экспертиза

    -
    -
      - {linksData.blockA.map(({ name, link }, index) => ( -
    • - {link ? {name} : name} -
    • - ))} -
    -
    -
    -
      - {linksData.blockB.map(({ name, link }, index) => ( -
    • - {link ? {name} : name} -
    • - ))} -
    -
    -
    -
      - {linksData.blockC.map(({ name, link }, index) => ( -
    • - {link ? {name} : name} -
    • - ))} -
    -
    + {linksData.map(({ block }, index) => ( +
    +
      + {block.map(({ name, link }, idx) => ( +
    • + {link ? {name} : name} +
    • + ))} +
    +
    + ))}
    diff --git a/src/views/index.ts b/src/views/index.ts index d4ab4c5..d5a0c37 100644 --- a/src/views/index.ts +++ b/src/views/index.ts @@ -16,3 +16,6 @@ export * from './expertise/tech-crim'; export * from './expertise/tovar'; export * from './expertise/trasologia'; export * from './expertise/zem-stroy'; + +//Ocenka +export * from './ocenka/category'; diff --git a/src/views/ocenka/category/index.ts b/src/views/ocenka/category/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/views/ocenka/category/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/views/ocenka/category/model/breadcrums.ts b/src/views/ocenka/category/model/breadcrums.ts new file mode 100644 index 0000000..6574ed9 --- /dev/null +++ b/src/views/ocenka/category/model/breadcrums.ts @@ -0,0 +1,14 @@ +import { ROUTES } from '@shared/const/route'; + +export const PAGE_NAME = 'Оценка'; + +export const breadcrumbData = [ + { + name: 'Оценка', + path: ROUTES.EXPERTIZA, + }, + { + name: PAGE_NAME, + path: '', + }, +]; diff --git a/src/views/ocenka/category/model/links.ts b/src/views/ocenka/category/model/links.ts new file mode 100644 index 0000000..22d54c8 --- /dev/null +++ b/src/views/ocenka/category/model/links.ts @@ -0,0 +1,112 @@ +import { ROUTES } from '@shared/const/route'; + +export const linksData = [ + { + title: 'По ситуации', + block: [ + { name: 'Независимая оценка', link: ROUTES.OCENKA_NEZAVISIM }, + { name: 'Оценка для опеки', link: ROUTES.OCENKA_OPEKA }, + { name: 'Оценка для нотариуса', link: ROUTES.OCENKA_NOTARIUS }, + { + name: 'Оценка для вступления в наследство', + link: ROUTES.OCENKA_NASLEDSTVO, + }, + { name: 'Оценка для страхования', link: ROUTES.OCENKA_STRAHOVANIE }, + { + name: 'Оценка для определения стоимости ущерба', + link: ROUTES.OCENKA_USCHERB, + }, + { name: 'Оценка имущества при разводе', link: ROUTES.OCENKA_RAZVOD }, + { name: 'Оценка недвижимости для суда', link: ROUTES.OCENKA_SUD }, + { + name: 'Оценка для внесения в уставный капитал', + link: ROUTES.OCENKA_USTAV_KAPITAL, + }, + { name: 'Оценка для ипотеки', link: ROUTES.OCENKA_IPOTEKA }, + { name: 'Оценка для банка', link: ROUTES.OCENKA_BANK }, + { + name: 'Оценка имущества для банкротства', + link: ROUTES.OCENKA_BANKROTSTV, + }, + ], + }, + { + title: 'Жилая недвижимость', + block: [ + { name: 'Оценка квартиры', link: ROUTES.OCENKA_KVARTIRA }, + { name: 'Оценка жилого дома', link: ROUTES.OCENKA_DOM }, + { name: 'Оценка земельного участка', link: ROUTES.OCENKA_UCHASTOK }, + { name: 'Оценка гаража', link: ROUTES.OCENKA_GARAZH }, + { name: 'Оценка ущерба недвижимости', link: ROUTES.OCENKA_NEDVIGA }, + { name: 'Оценка ущерба от залива', link: ROUTES.OCENKA_ZATOPLENIE }, + { name: 'Оценка ущерба от пожара', link: ROUTES.OCENKA_POZHAR }, + ], + }, + { + title: 'Коммерческая недвижимость', + block: [ + { name: 'Оценка стоимости арендной ставки', link: ROUTES.OCENKA_ARENDA }, + { name: 'Оценка здания', link: ROUTES.OCENKA_ZDANIE }, + { name: 'Оценка земель', link: ROUTES.OCENKA_ZEMLYA }, + { name: 'Оценка нежилого помещения', link: ROUTES.OCENKA_POMESCHENIE }, + { name: 'Оценка офиса', link: ROUTES.OCENKA_OFFICE }, + { name: 'Оценка сооружений', link: ROUTES.OCENKA_SOORUZHENIE }, + { + name: 'Оценка незавершенного строительства', + link: ROUTES.OCENKA_NEZAV_STROIT, + }, + ], + }, + { + title: 'Имущество', + block: [ + { name: 'Оценка недвижимости', link: ROUTES.OCENKA_NEDVIGA }, + { name: 'Оценка машин и оборудования', link: ROUTES.OCENKA_MASHINES }, + { name: 'Оценка спецтехники', link: ROUTES.OCENKA_SPECTECHNIKA }, + { name: 'Оценка нематериальных активов', link: ROUTES.OCENKA_ACTIVES }, + { name: 'Оценка стоимости предприятия', link: ROUTES.OCENKA_BUSINESS }, + { name: 'Оценка ценных бумаг', link: ROUTES.OCENKA_CENN_BUMAGI }, + { + name: 'Экспертиза и рецензирование отчета об оценке', + link: ROUTES.OCENKA_RECINSIA_OTCHETA, + }, + ], + }, + { + title: 'Ипотека', + block: [ + { + name: 'Оценка для ипотеки в Сбербанке', + link: ROUTES.OCENKA_IPOTEKA_SBER, + }, + { + name: 'Оценка для ипотеки в банке ВТБ', + link: ROUTES.OCENKA_IPOTEKA_VTB, + }, + ], + }, + { + title: 'Транспорт', + block: [ + { name: 'Оценка ущерба в ДТП', link: ROUTES.OCENKA_DTP }, + { + name: 'Оценка УТС – утраты товарной стоимости', + link: ROUTES.OCENKA_UTS, + }, + { + name: 'Оценка рыночной стоимости автомобиля', + link: ROUTES.OCENKA_RYNOCHNAYA, + }, + { name: 'Оценка автомобиля для суда', link: ROUTES.OCENKA_AUTO_SUD }, + { name: 'Оценка мотоциклов и мототехники', link: ROUTES.OCENKA_MOTO }, + { + name: 'Оценка морских и речных судов', + link: ROUTES.OCENKA_PLAVSREDSTV, + }, + { + name: 'Оценка воздушных судов и летательных аппаратов', + link: ROUTES.OCENKA_VOZDUSHNYH_SUDOV, + }, + ], + }, +]; diff --git a/src/views/ocenka/category/styles.module.scss b/src/views/ocenka/category/styles.module.scss new file mode 100644 index 0000000..2fc39a8 --- /dev/null +++ b/src/views/ocenka/category/styles.module.scss @@ -0,0 +1,78 @@ +.Container { + margin: 0 auto; + max-width: rem(1540px); + display: flex; + flex-direction: column; + gap: 0px; + padding: 10px; + + @include iftablet { + padding: 20px; + } + + @include iflaptop { + padding: 28px; + } + + @include ifdesktop { + padding: 40px; + } +} + +.Header { + font-family: $font-roboto; + font-weight: 500; + font-size: 32px; + line-height: 130%; + color: $color-text; + margin-bottom: 40px; +} + +.Grid { + display: grid; + grid-template-columns: auto; + gap: 40px 0; + + @include iftablet { + grid-template-columns: repeat(3, 1fr); + } +} + +.Block { + display: block; + + .Title { + font-family: $font-roboto; + font-weight: 500; + font-size: 24px; + line-height: 130%; + color: $color-text; + margin-bottom: 20px; + } + + .List { + display: flex; + flex-direction: column; + gap: 10px; + list-style-type: disc; + margin-left: 16px; + } + + .ListItem { + font-family: $font-roboto; + font-weight: 400; + font-size: 16px; + line-height: 130%; + color: $color-text; + list-style: unset; + + a { + color: $color-green; + } + + a:hover { + color: $color-green-hover; + text-decoration: underline; + } + } +} diff --git a/src/views/ocenka/category/ui.tsx b/src/views/ocenka/category/ui.tsx new file mode 100644 index 0000000..f00c0ff --- /dev/null +++ b/src/views/ocenka/category/ui.tsx @@ -0,0 +1,34 @@ +import s from './styles.module.scss'; +import { breadcrumbData } from './model/breadcrums'; +import { Breadcrumbs } from '@/widgets'; +import Link from 'next/link'; +import { Partners } from '@/feature/article'; +import { linksData } from './model/links'; + +function OcenkaCategory() { + return ( + <> + +
    +

    Услуги оценки имущества и бизнеса

    +
    + {linksData.map(({ title, block }, index) => ( +
    +

    {title}

    +
      + {block.map(({ name, link }, idx) => ( +
    • + {link ? {name} : name} +
    • + ))} +
    +
    + ))} +
    +
    + + + ); +} + +export { OcenkaCategory }; -- 2.49.1 From f81e7978b637e00c2e21a3bef1cbab849d36176a Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Wed, 9 Jul 2025 11:26:18 +0300 Subject: [PATCH 33/65] fix: add ocenka template page --- public/images/domclick_logo.png | Bin 0 -> 3860 bytes public/images/sberbank_logo.png | Bin 0 -> 3550 bytes src/app/ocenka/avtomobilja-dlja-suda/page.tsx | 4 +- .../related-articles/styles.module.scss | 33 +++++++- src/feature/article/related-articles/ui.tsx | 11 ++- .../article/sidebar/styles.module.scss | 1 + src/feature/article/sidebar/ui.tsx | 6 +- src/shared/types/sidebar.ts | 1 + src/shared/ui/icon/ui.tsx | 21 +++++ src/views/expertise/autotech/model/sidebar.ts | 2 + .../expertise/buhgalter/model/sidebar.ts | 2 + src/views/expertise/computer/model/sidebar.ts | 2 + src/views/expertise/document/model/sidebar.ts | 2 + src/views/expertise/finans/model/sidebar.ts | 2 + src/views/expertise/kadastr/model/sidebar.ts | 2 + src/views/expertise/pocherk/model/sidebar.ts | 2 + src/views/expertise/pozhar/model/sidebar.ts | 2 + src/views/expertise/recenzii/model/sidebar.ts | 2 + src/views/expertise/stroit/model/sidebar.ts | 2 + .../expertise/tech-crim/model/sidebar.ts | 2 + src/views/expertise/tovar/model/sidebar.ts | 2 + .../expertise/trasologia/model/sidebar.ts | 2 + .../expertise/zem-stroy/model/sidebar.ts | 2 + src/views/index.ts | 1 + .../ocenka/avtomobilja-dlja-suda/index.ts | 1 + .../avtomobilja-dlja-suda/model/article.ts | 24 ++++++ .../avtomobilja-dlja-suda/model/breadcrums.ts | 14 ++++ .../avtomobilja-dlja-suda/model/expert.ts | 8 ++ .../avtomobilja-dlja-suda/model/related.ts | 29 +++++++ .../avtomobilja-dlja-suda/model/sidebar.ts | 38 +++++++++ .../avtomobilja-dlja-suda/styles.module.scss | 71 +++++++++++++++++ src/views/ocenka/avtomobilja-dlja-suda/ui.tsx | 73 ++++++++++++++++++ 32 files changed, 356 insertions(+), 8 deletions(-) create mode 100644 public/images/domclick_logo.png create mode 100644 public/images/sberbank_logo.png create mode 100644 src/views/ocenka/avtomobilja-dlja-suda/index.ts create mode 100644 src/views/ocenka/avtomobilja-dlja-suda/model/article.ts create mode 100644 src/views/ocenka/avtomobilja-dlja-suda/model/breadcrums.ts create mode 100644 src/views/ocenka/avtomobilja-dlja-suda/model/expert.ts create mode 100644 src/views/ocenka/avtomobilja-dlja-suda/model/related.ts create mode 100644 src/views/ocenka/avtomobilja-dlja-suda/model/sidebar.ts create mode 100644 src/views/ocenka/avtomobilja-dlja-suda/styles.module.scss create mode 100644 src/views/ocenka/avtomobilja-dlja-suda/ui.tsx diff --git a/public/images/domclick_logo.png b/public/images/domclick_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..97430051523492dd504ef783da0895f59f58ad85 GIT binary patch literal 3860 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 literal 0 HcmV?d00001 diff --git a/src/app/ocenka/avtomobilja-dlja-suda/page.tsx b/src/app/ocenka/avtomobilja-dlja-suda/page.tsx index e63b7c0..f8e630e 100644 --- a/src/app/ocenka/avtomobilja-dlja-suda/page.tsx +++ b/src/app/ocenka/avtomobilja-dlja-suda/page.tsx @@ -1,3 +1,5 @@ +import { AutoDlyaSuda } from '@/views'; + export default function Page() { - return
    Page
    ; + return ; } diff --git a/src/feature/article/related-articles/styles.module.scss b/src/feature/article/related-articles/styles.module.scss index 19f915e..0d3d928 100644 --- a/src/feature/article/related-articles/styles.module.scss +++ b/src/feature/article/related-articles/styles.module.scss @@ -11,7 +11,7 @@ padding: 0 20px; } @include iflaptop { - grid-template-columns: auto 300px; + grid-template-columns: auto 240px; gap: 40px; padding: 0 28px; } @@ -25,6 +25,35 @@ display: flex; flex-direction: column; } + + .Accreditation { + display: none; + + @include iflaptop { + display: flex; + flex-direction: column; + align-items: center; + } + + + .Title { + font-family: $font-roboto; + font-weight: 300; + font-size: 16px; + line-height: 130%; + color: $color-text-light; + margin-bottom: 20px; + } + + .Image { + width: 100%; + height: auto; + + @include ifdesktop{ + max-width: 260px; + } + } + } } .Header { @@ -42,7 +71,7 @@ gap: 16px; margin-bottom: 20px; - @include iftablet{ + @include iftablet { grid-template-columns: auto auto; } diff --git a/src/feature/article/related-articles/ui.tsx b/src/feature/article/related-articles/ui.tsx index 8e35540..369b17c 100644 --- a/src/feature/article/related-articles/ui.tsx +++ b/src/feature/article/related-articles/ui.tsx @@ -2,6 +2,10 @@ import s from './styles.module.scss'; import Link from 'next/link'; import { TRelatedArticles } from '@shared/types/relatedArticles'; import { CallbackForm } from '@/entities'; +import Image from 'next/image'; +import { Icons } from '@shared/ui/icon'; +import sberLogo from '@public/images/sberbank_logo.png'; +import domclickLogo from '@public/images/domclick_logo.png'; type RelatedArticlesProps = { related: TRelatedArticles[]; @@ -30,7 +34,12 @@ function RelatedArticles({ related, pageName }: RelatedArticlesProps) {
  • -
    +
    +

    Аккредитованный партнер

    + Сбербанк + + Домклик +
    ); diff --git a/src/feature/article/sidebar/styles.module.scss b/src/feature/article/sidebar/styles.module.scss index 5b60176..a3e4bfe 100644 --- a/src/feature/article/sidebar/styles.module.scss +++ b/src/feature/article/sidebar/styles.module.scss @@ -100,4 +100,5 @@ } } } + } \ No newline at end of file diff --git a/src/feature/article/sidebar/ui.tsx b/src/feature/article/sidebar/ui.tsx index 8aabd39..462ea99 100644 --- a/src/feature/article/sidebar/ui.tsx +++ b/src/feature/article/sidebar/ui.tsx @@ -12,6 +12,7 @@ type SidebarProps = { pageName?: string } & TSidebar; function Sidebar({ estimate = '3', + offer, relatedTitle, related, warrantiesTitle, @@ -29,10 +30,7 @@ function Sidebar({

    Срок выполнения:

    от {estimate} дней

    -

    - Наш эксперт свяжется с вами для уточнения обстоятельств дела и - определения точной стоимости. -

    +

    {offer}

    Оставьте заявку или позвоните по телефону

    + +
    + + +
    +

    Наши клиенты и партнеры

    + +
    + ); } diff --git a/src/widgets/header/styles.module.scss b/src/widgets/header/styles.module.scss index 5c8eb59..b7d8897 100644 --- a/src/widgets/header/styles.module.scss +++ b/src/widgets/header/styles.module.scss @@ -1,2 +1,3 @@ .Header { + background: $color-white; } \ No newline at end of file -- 2.49.1 From f27522db50afe3b3281827b2579ee70cf641473b Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Wed, 27 Aug 2025 15:03:43 +0300 Subject: [PATCH 44/65] refactor: nextjs up version to 15.5.2 --- .idea/compiler.xml | 6 + package-lock.json | 382 ++++++++++++++++++++++----------------------- package.json | 16 +- 3 files changed, 205 insertions(+), 199 deletions(-) create mode 100644 .idea/compiler.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..8ca546d --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 498579f..f621607 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,10 +13,10 @@ "@maskito/phone": "^3.9.1", "@maskito/react": "^3.9.1", "libphonenumber-js": "^1.12.9", - "next": "15.3.4", + "next": "15.5.2", "nodemailer": "^7.0.5", - "react": "^19.0.0", - "react-dom": "^19.0.0", + "react": "19.1.1", + "react-dom": "19.1.1", "react-hook-form": "^7.60.0", "react-hot-toast": "^2.5.2", "react-yandex-metrika": "^2.6.0", @@ -27,11 +27,11 @@ "@eslint/eslintrc": "^3", "@types/node": "^20", "@types/nodemailer": "^6.4.17", - "@types/react": "^19", - "@types/react-dom": "^19", + "@types/react": "19.1.11", + "@types/react-dom": "19.1.8", "clsx": "^2.1.1", "eslint": "^9", - "eslint-config-next": "15.3.4", + "eslint-config-next": "15.5.2", "husky": "^9.1.7", "lint-staged": "^16.1.2", "prettier": "3.6.0", @@ -52,9 +52,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", - "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", + "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", "license": "MIT", "optional": true, "dependencies": { @@ -305,9 +305,9 @@ } }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", - "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.3.tgz", + "integrity": "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==", "cpu": [ "arm64" ], @@ -323,13 +323,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.1.0" + "@img/sharp-libvips-darwin-arm64": "1.2.0" } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz", - "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.3.tgz", + "integrity": "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==", "cpu": [ "x64" ], @@ -345,13 +345,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.1.0" + "@img/sharp-libvips-darwin-x64": "1.2.0" } }, "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", - "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.0.tgz", + "integrity": "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==", "cpu": [ "arm64" ], @@ -365,9 +365,9 @@ } }, "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", - "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.0.tgz", + "integrity": "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==", "cpu": [ "x64" ], @@ -381,9 +381,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", - "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.0.tgz", + "integrity": "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==", "cpu": [ "arm" ], @@ -397,9 +397,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", - "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.0.tgz", + "integrity": "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==", "cpu": [ "arm64" ], @@ -413,9 +413,9 @@ } }, "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", - "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.0.tgz", + "integrity": "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==", "cpu": [ "ppc64" ], @@ -429,9 +429,9 @@ } }, "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", - "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.0.tgz", + "integrity": "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==", "cpu": [ "s390x" ], @@ -445,9 +445,9 @@ } }, "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", - "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.0.tgz", + "integrity": "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==", "cpu": [ "x64" ], @@ -461,9 +461,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", - "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.0.tgz", + "integrity": "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==", "cpu": [ "arm64" ], @@ -477,9 +477,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", - "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.0.tgz", + "integrity": "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==", "cpu": [ "x64" ], @@ -493,9 +493,9 @@ } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz", - "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.3.tgz", + "integrity": "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==", "cpu": [ "arm" ], @@ -511,13 +511,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.1.0" + "@img/sharp-libvips-linux-arm": "1.2.0" } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz", - "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.3.tgz", + "integrity": "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==", "cpu": [ "arm64" ], @@ -533,13 +533,35 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.1.0" + "@img/sharp-libvips-linux-arm64": "1.2.0" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.3.tgz", + "integrity": "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.0" } }, "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz", - "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.3.tgz", + "integrity": "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==", "cpu": [ "s390x" ], @@ -555,13 +577,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.1.0" + "@img/sharp-libvips-linux-s390x": "1.2.0" } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz", - "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.3.tgz", + "integrity": "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==", "cpu": [ "x64" ], @@ -577,13 +599,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.1.0" + "@img/sharp-libvips-linux-x64": "1.2.0" } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz", - "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.3.tgz", + "integrity": "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==", "cpu": [ "arm64" ], @@ -599,13 +621,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" + "@img/sharp-libvips-linuxmusl-arm64": "1.2.0" } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz", - "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.3.tgz", + "integrity": "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==", "cpu": [ "x64" ], @@ -621,20 +643,20 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.1.0" + "@img/sharp-libvips-linuxmusl-x64": "1.2.0" } }, "node_modules/@img/sharp-wasm32": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz", - "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.3.tgz", + "integrity": "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==", "cpu": [ "wasm32" ], "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.4.3" + "@emnapi/runtime": "^1.4.4" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -644,9 +666,9 @@ } }, "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz", - "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.3.tgz", + "integrity": "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==", "cpu": [ "arm64" ], @@ -663,9 +685,9 @@ } }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz", - "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.3.tgz", + "integrity": "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==", "cpu": [ "ia32" ], @@ -682,9 +704,9 @@ } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz", - "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.3.tgz", + "integrity": "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==", "cpu": [ "x64" ], @@ -752,15 +774,15 @@ } }, "node_modules/@next/env": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.4.tgz", - "integrity": "sha512-ZkdYzBseS6UjYzz6ylVKPOK+//zLWvD6Ta+vpoye8cW11AjiQjGYVibF0xuvT4L0iJfAPfZLFidaEzAOywyOAQ==", + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.2.tgz", + "integrity": "sha512-Qe06ew4zt12LeO6N7j8/nULSOe3fMXE4dM6xgpBQNvdzyK1sv5y4oAP3bq4LamrvGCZtmRYnW8URFCeX5nFgGg==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.4.tgz", - "integrity": "sha512-lBxYdj7TI8phbJcLSAqDt57nIcobEign5NYIKCiy0hXQhrUbTqLqOaSDi568U6vFg4hJfBdZYsG4iP/uKhCqgg==", + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.5.2.tgz", + "integrity": "sha512-lkLrRVxcftuOsJNhWatf1P2hNVfh98k/omQHrCEPPriUypR6RcS13IvLdIrEvkm9AH2Nu2YpR5vLqBuy6twH3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -768,9 +790,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.4.tgz", - "integrity": "sha512-z0qIYTONmPRbwHWvpyrFXJd5F9YWLCsw3Sjrzj2ZvMYy9NPQMPZ1NjOJh4ojr4oQzcGYwgJKfidzehaNa1BpEg==", + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.2.tgz", + "integrity": "sha512-8bGt577BXGSd4iqFygmzIfTYizHb0LGWqH+qgIF/2EDxS5JsSdERJKA8WgwDyNBZgTIIA4D8qUtoQHmxIIquoQ==", "cpu": [ "arm64" ], @@ -784,9 +806,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.4.tgz", - "integrity": "sha512-Z0FYJM8lritw5Wq+vpHYuCIzIlEMjewG2aRkc3Hi2rcbULknYL/xqfpBL23jQnCSrDUGAo/AEv0Z+s2bff9Zkw==", + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.2.tgz", + "integrity": "sha512-2DjnmR6JHK4X+dgTXt5/sOCu/7yPtqpYt8s8hLkHFK3MGkka2snTv3yRMdHvuRtJVkPwCGsvBSwmoQCHatauFQ==", "cpu": [ "x64" ], @@ -800,9 +822,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.4.tgz", - "integrity": "sha512-l8ZQOCCg7adwmsnFm8m5q9eIPAHdaB2F3cxhufYtVo84pymwKuWfpYTKcUiFcutJdp9xGHC+F1Uq3xnFU1B/7g==", + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.2.tgz", + "integrity": "sha512-3j7SWDBS2Wov/L9q0mFJtEvQ5miIqfO4l7d2m9Mo06ddsgUK8gWfHGgbjdFlCp2Ek7MmMQZSxpGFqcC8zGh2AA==", "cpu": [ "arm64" ], @@ -816,9 +838,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.4.tgz", - "integrity": "sha512-wFyZ7X470YJQtpKot4xCY3gpdn8lE9nTlldG07/kJYexCUpX1piX+MBfZdvulo+t1yADFVEuzFfVHfklfEx8kw==", + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.2.tgz", + "integrity": "sha512-s6N8k8dF9YGc5T01UPQ08yxsK6fUow5gG1/axWc1HVVBYQBgOjca4oUZF7s4p+kwhkB1bDSGR8QznWrFZ/Rt5g==", "cpu": [ "arm64" ], @@ -832,9 +854,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.4.tgz", - "integrity": "sha512-gEbH9rv9o7I12qPyvZNVTyP/PWKqOp8clvnoYZQiX800KkqsaJZuOXkWgMa7ANCCh/oEN2ZQheh3yH8/kWPSEg==", + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.2.tgz", + "integrity": "sha512-o1RV/KOODQh6dM6ZRJGZbc+MOAHww33Vbs5JC9Mp1gDk8cpEO+cYC/l7rweiEalkSm5/1WGa4zY7xrNwObN4+Q==", "cpu": [ "x64" ], @@ -848,9 +870,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.4.tgz", - "integrity": "sha512-Cf8sr0ufuC/nu/yQ76AnarbSAXcwG/wj+1xFPNbyNo8ltA6kw5d5YqO8kQuwVIxk13SBdtgXrNyom3ZosHAy4A==", + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.2.tgz", + "integrity": "sha512-/VUnh7w8RElYZ0IV83nUcP/J4KJ6LLYliiBIri3p3aW2giF+PAVgZb6mk8jbQSB3WlTai8gEmCAr7kptFa1H6g==", "cpu": [ "x64" ], @@ -864,9 +886,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.4.tgz", - "integrity": "sha512-ay5+qADDN3rwRbRpEhTOreOn1OyJIXS60tg9WMYTWCy3fB6rGoyjLVxc4dR9PYjEdR2iDYsaF5h03NA+XuYPQQ==", + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.2.tgz", + "integrity": "sha512-sMPyTvRcNKXseNQ/7qRfVRLa0VhR0esmQ29DD6pqvG71+JdVnESJaHPA8t7bc67KD5spP3+DOCNLhqlEI2ZgQg==", "cpu": [ "arm64" ], @@ -880,9 +902,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.4.tgz", - "integrity": "sha512-4kDt31Bc9DGyYs41FTL1/kNpDeHyha2TC0j5sRRoKCyrhNcfZ/nRQkAUlF27mETwm8QyHqIjHJitfcza2Iykfg==", + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.2.tgz", + "integrity": "sha512-W5VvyZHnxG/2ukhZF/9Ikdra5fdNftxI6ybeVKYvBPDtyx7x4jPPSNduUkfH5fo3zG0JQ0bPxgy41af2JX5D4Q==", "cpu": [ "x64" ], @@ -963,12 +985,6 @@ "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", "license": "MIT" }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "license": "Apache-2.0" - }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -1031,9 +1047,9 @@ } }, "node_modules/@types/react": { - "version": "19.1.8", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", - "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", + "version": "19.1.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.11.tgz", + "integrity": "sha512-lr3jdBw/BGj49Eps7EvqlUaoeA0xpj3pc0RoJkHpYaCHkVK7i28dKyImLQb3JVlqs3aYSXf7qYuWOW/fgZnTXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1041,9 +1057,9 @@ } }, "node_modules/@types/react-dom": { - "version": "19.1.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", - "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", + "version": "19.1.8", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.8.tgz", + "integrity": "sha512-xG7xaBMJCpcK0RpN8jDbAACQo54ycO6h4dSSmgv8+fu6ZIAdANkx/WsawASUjVXYfy+J9AbUpRMNNEsXCDfDBQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -1979,17 +1995,6 @@ "node": ">=8" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -2696,13 +2701,13 @@ } }, "node_modules/eslint-config-next": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.3.4.tgz", - "integrity": "sha512-WqeumCq57QcTP2lYlV6BRUySfGiBYEXlQ1L0mQ+u4N4X4ZhUVSSQ52WtjqHv60pJ6dD7jn+YZc0d1/ZSsxccvg==", + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.5.2.tgz", + "integrity": "sha512-3hPZghsLupMxxZ2ggjIIrat/bPniM2yRpsVPVM40rp8ZMzKWOJp2CGWn7+EzoV2ddkUr5fxNfHpF+wU1hGt/3g==", "dev": true, "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.3.4", + "@next/eslint-plugin-next": "15.5.2", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -4478,15 +4483,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/next/-/next-15.3.4.tgz", - "integrity": "sha512-mHKd50C+mCjam/gcnwqL1T1vPx/XQNFlXqFIVdgQdVAFY9iIQtY0IfaVflEYzKiqjeA7B0cYYMaCrmAYFjs4rA==", + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/next/-/next-15.5.2.tgz", + "integrity": "sha512-H8Otr7abj1glFhbGnvUt3gz++0AF1+QoCXEBmd/6aKbfdFwrn0LpA836Ed5+00va/7HQSDD+mOoVhn3tNy3e/Q==", "license": "MIT", "dependencies": { - "@next/env": "15.3.4", - "@swc/counter": "0.1.3", + "@next/env": "15.5.2", "@swc/helpers": "0.5.15", - "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" @@ -4498,19 +4501,19 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.3.4", - "@next/swc-darwin-x64": "15.3.4", - "@next/swc-linux-arm64-gnu": "15.3.4", - "@next/swc-linux-arm64-musl": "15.3.4", - "@next/swc-linux-x64-gnu": "15.3.4", - "@next/swc-linux-x64-musl": "15.3.4", - "@next/swc-win32-arm64-msvc": "15.3.4", - "@next/swc-win32-x64-msvc": "15.3.4", - "sharp": "^0.34.1" + "@next/swc-darwin-arm64": "15.5.2", + "@next/swc-darwin-x64": "15.5.2", + "@next/swc-linux-arm64-gnu": "15.5.2", + "@next/swc-linux-arm64-musl": "15.5.2", + "@next/swc-linux-x64-gnu": "15.5.2", + "@next/swc-linux-x64-musl": "15.5.2", + "@next/swc-win32-arm64-msvc": "15.5.2", + "@next/swc-win32-x64-msvc": "15.5.2", + "sharp": "^0.34.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.41.2", + "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", @@ -4935,24 +4938,24 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", + "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", + "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", "license": "MIT", "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { - "react": "^19.1.0" + "react": "^19.1.1" } }, "node_modules/react-hook-form": { @@ -5303,9 +5306,9 @@ } }, "node_modules/sharp": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz", - "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.3.tgz", + "integrity": "sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==", "hasInstallScript": true, "license": "Apache-2.0", "optional": true, @@ -5321,27 +5324,28 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.2", - "@img/sharp-darwin-x64": "0.34.2", - "@img/sharp-libvips-darwin-arm64": "1.1.0", - "@img/sharp-libvips-darwin-x64": "1.1.0", - "@img/sharp-libvips-linux-arm": "1.1.0", - "@img/sharp-libvips-linux-arm64": "1.1.0", - "@img/sharp-libvips-linux-ppc64": "1.1.0", - "@img/sharp-libvips-linux-s390x": "1.1.0", - "@img/sharp-libvips-linux-x64": "1.1.0", - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", - "@img/sharp-libvips-linuxmusl-x64": "1.1.0", - "@img/sharp-linux-arm": "0.34.2", - "@img/sharp-linux-arm64": "0.34.2", - "@img/sharp-linux-s390x": "0.34.2", - "@img/sharp-linux-x64": "0.34.2", - "@img/sharp-linuxmusl-arm64": "0.34.2", - "@img/sharp-linuxmusl-x64": "0.34.2", - "@img/sharp-wasm32": "0.34.2", - "@img/sharp-win32-arm64": "0.34.2", - "@img/sharp-win32-ia32": "0.34.2", - "@img/sharp-win32-x64": "0.34.2" + "@img/sharp-darwin-arm64": "0.34.3", + "@img/sharp-darwin-x64": "0.34.3", + "@img/sharp-libvips-darwin-arm64": "1.2.0", + "@img/sharp-libvips-darwin-x64": "1.2.0", + "@img/sharp-libvips-linux-arm": "1.2.0", + "@img/sharp-libvips-linux-arm64": "1.2.0", + "@img/sharp-libvips-linux-ppc64": "1.2.0", + "@img/sharp-libvips-linux-s390x": "1.2.0", + "@img/sharp-libvips-linux-x64": "1.2.0", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.0", + "@img/sharp-libvips-linuxmusl-x64": "1.2.0", + "@img/sharp-linux-arm": "0.34.3", + "@img/sharp-linux-arm64": "0.34.3", + "@img/sharp-linux-ppc64": "0.34.3", + "@img/sharp-linux-s390x": "0.34.3", + "@img/sharp-linux-x64": "0.34.3", + "@img/sharp-linuxmusl-arm64": "0.34.3", + "@img/sharp-linuxmusl-x64": "0.34.3", + "@img/sharp-wasm32": "0.34.3", + "@img/sharp-win32-arm64": "0.34.3", + "@img/sharp-win32-ia32": "0.34.3", + "@img/sharp-win32-x64": "0.34.3" } }, "node_modules/shebang-command": { @@ -5526,14 +5530,6 @@ "node": ">= 0.4" } }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/string-argv": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", diff --git a/package.json b/package.json index 5a16a1f..311e3aa 100644 --- a/package.json +++ b/package.json @@ -16,10 +16,10 @@ "@maskito/phone": "^3.9.1", "@maskito/react": "^3.9.1", "libphonenumber-js": "^1.12.9", - "next": "15.3.4", + "next": "15.5.2", "nodemailer": "^7.0.5", - "react": "^19.0.0", - "react-dom": "^19.0.0", + "react": "19.1.1", + "react-dom": "19.1.1", "react-hook-form": "^7.60.0", "react-hot-toast": "^2.5.2", "react-yandex-metrika": "^2.6.0", @@ -30,11 +30,11 @@ "@eslint/eslintrc": "^3", "@types/node": "^20", "@types/nodemailer": "^6.4.17", - "@types/react": "^19", - "@types/react-dom": "^19", + "@types/react": "19.1.11", + "@types/react-dom": "19.1.8", "clsx": "^2.1.1", "eslint": "^9", - "eslint-config-next": "15.3.4", + "eslint-config-next": "15.5.2", "husky": "^9.1.7", "lint-staged": "^16.1.2", "prettier": "3.6.0", @@ -46,5 +46,9 @@ "prettier --write", "eslint --fix" ] + }, + "overrides": { + "@types/react": "19.1.11", + "@types/react-dom": "19.1.8" } } -- 2.49.1 From 55c69f61c655129a4181e429f50e3eee40af14ec Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Thu, 20 Nov 2025 15:49:09 +0300 Subject: [PATCH 45/65] fix: update home - services section --- .idea/.gitignore | 8 -- .idea/compiler.xml | 6 -- .idea/prettier.xml | 6 ++ .idea/watcherTasks.xml | 4 - .idea/workspace.xml | 96 +++++++++++++++++ package-lock.json | 8 +- package.json | 2 +- src/views/home/styles.module.scss | 100 +++++++++++++++--- src/views/home/ui.tsx | 170 +++++++++++++++++++++++++++++- 9 files changed, 359 insertions(+), 41 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/compiler.xml create mode 100644 .idea/prettier.xml delete mode 100644 .idea/watcherTasks.xml create mode 100644 .idea/workspace.xml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b8..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 8ca546d..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/prettier.xml b/.idea/prettier.xml new file mode 100644 index 0000000..b0c1c68 --- /dev/null +++ b/.idea/prettier.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml deleted file mode 100644 index fb0d65a..0000000 --- a/.idea/watcherTasks.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..aaedc68 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + { + "customColor": "", + "associatedIndex": 4 +} + + + + + + + + + + + + +