commit c41ed37b330ac732460f4fc4426370eb3fc29da5 Author: иосиф брыков Date: Tue Mar 12 10:57:01 2024 +0500 Почти готовый проект diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fd3dbb5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/README.md b/README.md new file mode 100644 index 0000000..c403366 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/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/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. + +## 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/deployment) for more details. diff --git a/next.config.mjs b/next.config.mjs new file mode 100644 index 0000000..b6a20b9 --- /dev/null +++ b/next.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + compiler: { + styledComponents: true + } +} + +export default nextConfig diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..9454b28 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,868 @@ +{ + "name": "memorial", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "memorial", + "version": "0.1.0", + "dependencies": { + "@pbe/react-yandex-maps": "^1.2.5", + "next": "14.1.0", + "react": "^18", + "react-dom": "^18", + "react-slick": "^0.30.2", + "slick-carousel": "^1.8.1", + "styled-components": "^6.1.8" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "@types/react-slick": "^0.23.13", + "typescript": "^5" + } + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz", + "integrity": "sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz", + "integrity": "sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz", + "integrity": "sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz", + "integrity": "sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz", + "integrity": "sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz", + "integrity": "sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz", + "integrity": "sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz", + "integrity": "sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.8.0", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@pbe/react-yandex-maps": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@pbe/react-yandex-maps/-/react-yandex-maps-1.2.5.tgz", + "integrity": "sha512-cBojin5e1fPx9XVCAqHQJsCnHGMeBNsP0TrNfpWCrPFfxb30ye+JgcGr2mn767Gbr1d+RufBLRiUcX2kaiAwjQ==", + "dependencies": { + "@types/yandex-maps": "2.1.29" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x" + } + }, + "node_modules/@types/node": { + "version": "20.11.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", + "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.61", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.61.tgz", + "integrity": "sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz", + "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-slick": { + "version": "0.23.13", + "resolved": "https://registry.npmjs.org/@types/react-slick/-/react-slick-0.23.13.tgz", + "integrity": "sha512-bNZfDhe/L8t5OQzIyhrRhBr/61pfBcWaYJoq6UDqFtv5LMwfg4NsVDD2J8N01JqdAdxLjOt66OZEp6PX+dGs/A==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "dev": true + }, + "node_modules/@types/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw==" + }, + "node_modules/@types/yandex-maps": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/@types/yandex-maps/-/yandex-maps-2.1.29.tgz", + "integrity": "sha512-nuibRWj3RU/9KXlCzTrRtDE+n6V9l7NbT9JakicqZ5OXIdwyb6blvV2Uwn6lB58WYm3DSUDP2I2AWlnWMc8z2w==" + }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001591", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz", + "integrity": "sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/enquire.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz", + "integrity": "sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==" + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "peer": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "dependencies": { + "string-convert": "^0.2.0" + } + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/next": { + "version": "14.1.0", + "license": "MIT", + "dependencies": { + "@next/env": "14.1.0", + "@swc/helpers": "0.5.2", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "graceful-fs": "^4.2.11", + "postcss": "8.4.31", + "styled-jsx": "5.1.1" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.17.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "14.1.0", + "@next/swc-darwin-x64": "14.1.0", + "@next/swc-linux-arm64-gnu": "14.1.0", + "@next/swc-linux-arm64-musl": "14.1.0", + "@next/swc-linux-x64-gnu": "14.1.0", + "@next/swc-linux-x64-musl": "14.1.0", + "@next/swc-win32-arm64-msvc": "14.1.0", + "@next/swc-win32-ia32-msvc": "14.1.0", + "@next/swc-win32-x64-msvc": "14.1.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/@next/env": { + "version": "14.1.0", + "license": "MIT" + }, + "node_modules/next/node_modules/@next/swc-win32-x64-msvc": { + "version": "14.1.0", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/next/node_modules/@swc/helpers": { + "version": "0.5.2", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/next/node_modules/@swc/helpers/node_modules/tslib": { + "version": "2.6.2", + "license": "0BSD" + }, + "node_modules/next/node_modules/busboy": { + "version": "1.6.0", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/next/node_modules/busboy/node_modules/streamsearch": { + "version": "1.1.0", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/next/node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/next/node_modules/styled-jsx": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/next/node_modules/styled-jsx/node_modules/client-only": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "optional": true, + "peer": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/react": { + "version": "18.2.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-dom/node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/react-dom/node_modules/scheduler": { + "version": "0.23.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/react-slick": { + "version": "0.30.2", + "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.30.2.tgz", + "integrity": "sha512-XvQJi7mRHuiU3b9irsqS9SGIgftIfdV5/tNcURTb5LdIokRA5kIIx3l4rlq2XYHfxcSntXapoRg/GxaVOM1yfg==", + "dependencies": { + "classnames": "^2.2.5", + "enquire.js": "^2.1.6", + "json2mq": "^0.2.0", + "lodash.debounce": "^4.0.8", + "resize-observer-polyfill": "^1.5.0" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react/node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/sass": { + "version": "1.71.1", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass/node_modules/chokidar": { + "version": "3.6.0", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "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": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/sass/node_modules/chokidar/node_modules/anymatch": { + "version": "3.1.3", + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/sass/node_modules/chokidar/node_modules/braces": { + "version": "3.0.2", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sass/node_modules/chokidar/node_modules/braces/node_modules/fill-range": { + "version": "7.0.1", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sass/node_modules/chokidar/node_modules/braces/node_modules/fill-range/node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/sass/node_modules/chokidar/node_modules/braces/node_modules/fill-range/node_modules/to-regex-range/node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/sass/node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sass/node_modules/chokidar/node_modules/is-binary-path": { + "version": "2.1.0", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sass/node_modules/chokidar/node_modules/is-binary-path/node_modules/binary-extensions": { + "version": "2.2.0", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sass/node_modules/chokidar/node_modules/is-glob": { + "version": "4.0.3", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass/node_modules/chokidar/node_modules/is-glob/node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass/node_modules/chokidar/node_modules/normalize-path": { + "version": "3.0.0", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass/node_modules/chokidar/node_modules/readdirp": { + "version": "3.6.0", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/sass/node_modules/immutable": { + "version": "4.3.5", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "node_modules/slick-carousel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz", + "integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==", + "peerDependencies": { + "jquery": ">=1.8.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" + }, + "node_modules/styled-components": { + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.8.tgz", + "integrity": "sha512-PQ6Dn+QxlWyEGCKDS71NGsXoVLKfE1c3vApkvDYS5KAK+V8fNWGhbSUEo9Gg2iaID2tjLXegEW3bZDUGpofRWw==", + "dependencies": { + "@emotion/is-prop-valid": "1.2.1", + "@emotion/unitless": "0.8.0", + "@types/stylis": "4.2.0", + "css-to-react-native": "3.2.0", + "csstype": "3.1.2", + "postcss": "8.4.31", + "shallowequal": "1.1.0", + "stylis": "4.3.1", + "tslib": "2.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/stylis": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz", + "integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==" + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/typescript": { + "version": "5.3.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz", + "integrity": "sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..da2cc67 --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "memorial", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@pbe/react-yandex-maps": "^1.2.5", + "next": "14.1.0", + "react": "^18", + "react-dom": "^18", + "react-slick": "^0.30.2", + "slick-carousel": "^1.8.1", + "styled-components": "^6.1.8" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "@types/react-slick": "^0.23.13", + "typescript": "^5" + } +} diff --git a/public/agreement.svg b/public/agreement.svg new file mode 100644 index 0000000..85328ab --- /dev/null +++ b/public/agreement.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/public/ambulance.svg b/public/ambulance.svg new file mode 100644 index 0000000..208b52a --- /dev/null +++ b/public/ambulance.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/applications.svg b/public/applications.svg new file mode 100644 index 0000000..a0f1ad6 --- /dev/null +++ b/public/applications.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/burger-menu.svg b/public/burger-menu.svg new file mode 100644 index 0000000..9284fb2 --- /dev/null +++ b/public/burger-menu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/cemetery.svg b/public/cemetery.svg new file mode 100644 index 0000000..c56e294 --- /dev/null +++ b/public/cemetery.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/close-black.svg b/public/close-black.svg new file mode 100644 index 0000000..1a149df --- /dev/null +++ b/public/close-black.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/close-menu.svg b/public/close-menu.svg new file mode 100644 index 0000000..20b518e --- /dev/null +++ b/public/close-menu.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/deal.svg b/public/deal.svg new file mode 100644 index 0000000..0980484 --- /dev/null +++ b/public/deal.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/grave.svg b/public/grave.svg new file mode 100644 index 0000000..a62882f --- /dev/null +++ b/public/grave.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/hospital.svg b/public/hospital.svg new file mode 100644 index 0000000..baad7a2 --- /dev/null +++ b/public/hospital.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/image 1.png b/public/image 1.png new file mode 100644 index 0000000..52a1d9f Binary files /dev/null and b/public/image 1.png differ diff --git a/public/image 11.png b/public/image 11.png new file mode 100644 index 0000000..9fca39a Binary files /dev/null and b/public/image 11.png differ diff --git a/public/image 12.png b/public/image 12.png new file mode 100644 index 0000000..0db3de0 Binary files /dev/null and b/public/image 12.png differ diff --git a/public/image 3.png b/public/image 3.png new file mode 100644 index 0000000..28839fe Binary files /dev/null and b/public/image 3.png differ diff --git a/public/image 4.png b/public/image 4.png new file mode 100644 index 0000000..ce09c09 Binary files /dev/null and b/public/image 4.png differ diff --git a/public/image 6.png b/public/image 6.png new file mode 100644 index 0000000..e493d59 Binary files /dev/null and b/public/image 6.png differ diff --git a/public/image 7.png b/public/image 7.png new file mode 100644 index 0000000..14816a7 Binary files /dev/null and b/public/image 7.png differ diff --git a/public/image.png b/public/image.png new file mode 100644 index 0000000..52a1d9f Binary files /dev/null and b/public/image.png differ diff --git a/public/left arrow.svg b/public/left arrow.svg new file mode 100644 index 0000000..ff06388 --- /dev/null +++ b/public/left arrow.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/left-arrow.svg b/public/left-arrow.svg new file mode 100644 index 0000000..751c776 --- /dev/null +++ b/public/left-arrow.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/log-out.svg b/public/log-out.svg new file mode 100644 index 0000000..8a8a79c --- /dev/null +++ b/public/log-out.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/logo.svg b/public/logo.svg new file mode 100644 index 0000000..df7c857 --- /dev/null +++ b/public/logo.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/public/no.svg b/public/no.svg new file mode 100644 index 0000000..7b86767 --- /dev/null +++ b/public/no.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/ok.svg b/public/ok.svg new file mode 100644 index 0000000..65731de --- /dev/null +++ b/public/ok.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/old men.png b/public/old men.png new file mode 100644 index 0000000..36630a0 Binary files /dev/null and b/public/old men.png differ diff --git a/public/operator.svg b/public/operator.svg new file mode 100644 index 0000000..55f3bb8 --- /dev/null +++ b/public/operator.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/phone.svg b/public/phone.svg new file mode 100644 index 0000000..b834dd8 --- /dev/null +++ b/public/phone.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/search.svg b/public/search.svg new file mode 100644 index 0000000..6b4ea89 --- /dev/null +++ b/public/search.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/services.svg b/public/services.svg new file mode 100644 index 0000000..b2574d6 --- /dev/null +++ b/public/services.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/telephone.svg b/public/telephone.svg new file mode 100644 index 0000000..52a231a --- /dev/null +++ b/public/telephone.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/trash.svg b/public/trash.svg new file mode 100644 index 0000000..54d3a4e --- /dev/null +++ b/public/trash.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/app/GlobalStyles.ts b/src/app/GlobalStyles.ts new file mode 100644 index 0000000..764b006 --- /dev/null +++ b/src/app/GlobalStyles.ts @@ -0,0 +1,56 @@ +import styled, { createGlobalStyle } from 'styled-components' + +export const GlobalStyles = createGlobalStyle` + * { + margin: 0; + padding: 0; + box-sizing: border-box; + } + + body { + min-height: 100vh; + position: relative; + padding-bottom: 260px; + + ${props => props.theme.mediaQueries.tabletLandscape} { + padding-bottom: 210px; + } + ${props => props.theme.mediaQueries.tabletPortrait} { + padding-bottom: 380px; + } + ${props => props.theme.mediaQueries.mobile} { + padding-bottom: 690px; + } + } + + h1 { + ${(props) => props.theme.typography.h1} + } + + h2 { + ${(props) => props.theme.typography.h2} + } + + h3 { + ${(props) => props.theme.typography.h3} + } + + p { + ${(props) => props.theme.typography.paragraph} + } + + a { + text-decoration: none; + color: ${(props) => props.theme.colors.black} + } +` + +export const Container = styled.div` + width: 90%; + max-width: 1250px; + margin: 0 auto; +` + +export const AdminContainer = styled.div` + padding-left: 260px; +` \ No newline at end of file diff --git a/src/app/Providers.tsx b/src/app/Providers.tsx new file mode 100644 index 0000000..d953be1 --- /dev/null +++ b/src/app/Providers.tsx @@ -0,0 +1,22 @@ +'use client' + +import StyledComponentsRegistry from '@/lib/StyledComponentsRegistry' +import React from 'react' +import { ThemeProvider } from 'styled-components' +import { GlobalStyles } from './GlobalStyles' +import { theme } from './theme' + +type Props = { + children: React.ReactNode +} + +export default function Providers({ children }: Props) { + return ( + + + + {children} + + + ) +} diff --git a/src/app/aboutUs/page.tsx b/src/app/aboutUs/page.tsx new file mode 100644 index 0000000..72fd27d --- /dev/null +++ b/src/app/aboutUs/page.tsx @@ -0,0 +1,147 @@ +'use client' + +import styled from 'styled-components' +import { Container } from '../GlobalStyles' + +type Props = {} + +const AboutUsSection = styled.div` + padding-bottom: 50px; + + h1 { + text-align: center; + margin: 50px 0; + } + + .first-block { + display: grid; + gap: 40px; + grid-template-areas: 'a a c' 'b b c'; + + .item:nth-child(1) { + grid-area: a; + } + + .item:nth-child(2) { + grid-area: b; + } + + .item:nth-child(3) { + grid-area: c; + } + + img { + object-fit: cover; + min-height: 100px; + min-width: 150px; + height: 100%; + width: 100%; + } + } + + p { + text-align: justify; + } + + h3 { + margin: 25px 0 15px; + + &:first-child { + margin-top: 0; + } + } + + ${(props) => props.theme.mediaQueries.tabletLandscape} { + .first-block { + grid-template-areas: 'a a a' 'b b c'; + } + } + + ${(props) => props.theme.mediaQueries.tabletPortrait} { + .first-block { + grid-template-areas: 'a a a' 'b b b' 'c c c'; + } + } +` + +export default function page({}: Props) { + return ( + + +

О нас

+
+
+

Профессиональная команда с опытом

+

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

+
+
+

Разнообразные похоронные услуги

+

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

+
+ +
+
+

Принципы прозрачности и заботы о клиентах

+

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

+

Круглосуточная поддержка и помощь

+

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

+
+
+
+ ) +} diff --git a/src/app/admin/applications/page.tsx b/src/app/admin/applications/page.tsx new file mode 100644 index 0000000..26e156a --- /dev/null +++ b/src/app/admin/applications/page.tsx @@ -0,0 +1,107 @@ +'use client' + +import { AdminContainer } from '@/app/GlobalStyles' +import styled from 'styled-components' + +type Props = {} + +const AppSection = styled.div` + padding: 35px; + display: flex; + flex-direction: column; + gap: 30px; + +.block { + display: flex; + flex-direction: column; + gap: 20px; +} + + .title { + display: flex; + justify-content: space-between; + align-items: center; + + button { + padding: 10px 25px; + background: ${(props) => props.theme.colors.green}; + color: ${(props) => props.theme.colors.white}; + border-radius: 12px; + font-size: 18px; + border: none; + font-weight: 500; + cursor: pointer; + } + } + + .list { + display: flex; + flex-direction: column; + gap: 15px; + width: 100%; + + .item { + padding: 15px; + display: flex; + justify-content: space-between; + + box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.2); + border-radius: 12px; + + .data { + display: flex; + align-items: center; + gap: 25px; + } + + input[type='checkbox'] { + cursor: pointer; + width: 20px; + height: 20px; + accent-color: ${(props) => props.theme.colors.black}; + } + } + } +` + +export default function page({}: Props) { + return ( + + +
+

Заявки

+
+ {[...Array(4)].map((_, index) => ( +
+
+ +

Имя клиента: Виктор

+

Номер клиента: +7 (000) 00-00-00

+
+

14:37 20 февраля 2024

+
+ ))} +
+
+
+
+

Отмеченные заявки

+ +
+
+ {[...Array(4)].map((_, index) => ( +
+
+ +

Имя клиента: Виктор

+

Номер клиента: +7 (000) 00-00-00

+
+

14:37 20 февраля 2024

+
+ ))} +
+
+
+
+ ) +} diff --git a/src/app/admin/auth/page.tsx b/src/app/admin/auth/page.tsx new file mode 100644 index 0000000..b7d225e --- /dev/null +++ b/src/app/admin/auth/page.tsx @@ -0,0 +1,67 @@ +'use client' + +import MainButton from '@/components/UI/button/MainButton' +import FormInput from '@/components/UI/input/FormInput' +import { ChangeEvent, useState } from 'react' +import styled from 'styled-components' + +type Props = {} + +const Container = styled.div` + width: 100%; + height: 100vh; + background-image: url('/image 12.png'); + background-position: center; + background-size: cover; + + display: flex; + align-items: center; + justify-content: center; + position: absolute; + top: 0; + left: 0; + + .form { + width: 440px; + padding: 20px; + text-align: center; + display: flex; + justify-content: center; + flex-direction: column; + gap: 20px; + backdrop-filter: blur(4px); + background: rgba(129, 129, 129, 0.4); + color: ${(props) => props.theme.colors.white}; + border-radius: 12px; + } +` + +export default function page({}: Props) { + const [admin, setAdmin] = useState({ + login: '', + password: '' + }) + + return ( + +
+

Админ панель

+ ) => + setAdmin({ ...admin, login: e.target.value }) + } + placeholder='Логин' + /> + ) => + setAdmin({ ...admin, password: e.target.value }) + } + placeholder='Пароль' + /> + Войти +
+
+ ) +} diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx new file mode 100644 index 0000000..783df4c --- /dev/null +++ b/src/app/admin/page.tsx @@ -0,0 +1,16 @@ +'use client' + +import { useRouter } from 'next/navigation' +import { useEffect } from 'react' + +type Props = {} + +export default function page({}: Props) { + const router = useRouter() + + useEffect(() => { + router.push('/admin/applications') + }, []) + + return <> +} diff --git a/src/app/admin/services/page.tsx b/src/app/admin/services/page.tsx new file mode 100644 index 0000000..2e0397d --- /dev/null +++ b/src/app/admin/services/page.tsx @@ -0,0 +1,109 @@ +'use client' + +import { AdminContainer } from '@/app/GlobalStyles' +import MainButton from '@/components/UI/button/MainButton' +import FormInput from '@/components/UI/input/FormInput' +import Modal from '@/components/UI/modal/Modal' +import { ChangeEvent, useState } from 'react' +import styled from 'styled-components' + +type Props = {} + +const Container = styled.div` + padding: 35px; + + .search-block { + display: flex; + gap: 20px; + margin: 20px 0; + + .input-block { + display: flex; + align-items: center; + width: 100%; + + img { + margin-left: -40px; + } + } + } + + .list { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + justify-items: center; + gap: 20px; + + .cart { + display: flex; + flex-direction: column; + align-items: start; + width: 280px; + gap: 10px; + position: relative; + + .delete-button { + position: absolute; + top: 10px; + right: 10px; + background: ${(props) => props.theme.colors.white}; + width: 30px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50px; + cursor: pointer; + } + } + } +` + +export default function page({}: Props) { + const [searchQuery, setSearchQuery] = useState('') + + const [deleteModal, setDeleteModal] = useState(false) + const [newServiceModal, setNewServiceModal] = useState(false) + + return ( + <> + + +

Услуги

+
+
+ ) => + setSearchQuery(e.target.value) + } + placeholder='Введите название услуги' + /> + +
+ Добавить +
+
+ {[...Array(5)].map((_, index) => ( +
+ +

Организация похорон

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna aliqua. +

+

От 25 000 руб.

+ Редактировать +
+ +
+
+ ))} +
+
+
+ {/* + */} + + ) +} diff --git a/src/app/admin/virtualCemetery/[id]/page.tsx b/src/app/admin/virtualCemetery/[id]/page.tsx new file mode 100644 index 0000000..4f045f5 --- /dev/null +++ b/src/app/admin/virtualCemetery/[id]/page.tsx @@ -0,0 +1,149 @@ +'use client' + +import { AdminContainer } from '@/app/GlobalStyles' +import MainButton from '@/components/UI/button/MainButton' +import Link from 'next/link' +import styled from 'styled-components' + +type Props = { + params: { id: number } +} + +const Container = styled.div` + padding: 35px; + + .back { + padding: 5px; + display: flex; + align-items: center; + gap: 10px; + justify-content: center; + box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.2); + padding: 10px; + border-radius: 12px; + width: 190px; + margin-bottom: 20px; + font-weight: 600; + font-size: 18px; + cursor: pointer; + + img { + width: 20px; + } + } + + .title { + display: flex; + justify-content: space-between; + } + + h2 { + margin: 20px 0; + } + + .list { + display: flex; + flex-direction: column; + gap: 20px; + + .item { + box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.2); + padding: 10px; + border-radius: 12px; + text-align: justify; + + img { + width: 25px; + cursor: pointer; + transition: 300ms; + + &:hover { + transform: scale(1.1); + } + } + + .item-title { + display: flex; + justify-content: space-between; + margin-bottom: 10px; + + .title-block { + display: flex; + gap: 10px; + + p:first-child { + font-weight: 600; + } + } + } + } + } +` + +export default function page({ params }: Props) { + return ( + + + +
+ + Назад к списку +
+ +
+

Иванов Иван Иванович

+ Редактировать +
+

Новые слова памяти

+
+ {[...Array(3)].map((_, index) => ( +
+
+
+

Имя Фамилия Отчество

+

27 декабря 2023

+
+
+ + +
+
+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris + nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor + in reprehenderit in voluptate velit esse cillum dolore eu fugiat + nulla pariatur. Excepteur sint occaecat cupidatat non proident, + sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+ ))} +
+

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

+
+ {[...Array(3)].map((_, index) => ( +
+
+
+

Имя Фамилия Отчество

+

27 декабря 2023

+
+ +
+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris + nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor + in reprehenderit in voluptate velit esse cillum dolore eu fugiat + nulla pariatur. Excepteur sint occaecat cupidatat non proident, + sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+ ))} +
+
+
+ ) +} diff --git a/src/app/admin/virtualCemetery/page.tsx b/src/app/admin/virtualCemetery/page.tsx new file mode 100644 index 0000000..d02a849 --- /dev/null +++ b/src/app/admin/virtualCemetery/page.tsx @@ -0,0 +1,119 @@ +'use client' + +import { AdminContainer } from '@/app/GlobalStyles' +import MainButton from '@/components/UI/button/MainButton' +import FormInput from '@/components/UI/input/FormInput' +import Link from 'next/link' +import { ChangeEvent, useState } from 'react' +import styled from 'styled-components' + +type Props = {} + +const Container = styled.div` + padding: 35px; + + h1 { + margin-bottom: 20px; + } + + .search-block { + display: flex; + width: 100%; + gap: 20px; + + .input-block { + position: relative; + width: 100%; + + img { + position: absolute; + right: 15px; + top: 50%; + transform: translateY(-50%); + } + } + } + + .list { + margin-top: 20px; + display: flex; + flex-direction: column; + gap: 20px; + } + + .item { + width: 100%; + display: flex; + box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.2); + border-radius: 12px; + overflow: hidden; + height: 100%; + + img { + width: 120px; + height: 120px; + object-fit: cover; + } + + .content { + width: 100%; + display: flex; + justify-content: space-between; + align-items: end; + padding: 10px; + + .data { + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + } + } + } +` + +export default function page({}: Props) { + const [searchQuery, setSearchQuery] = useState('') + + const handleClick = (event: React.MouseEvent) => { + event.preventDefault(); // Отменяем стандартное поведение ссылки + }; + + return ( + + +

Вечная память

+
+
+ ) => + setSearchQuery(e.target.value) + } + placeholder='Введите название услуги' + /> + +
+ Добавить +
+
+ {[...Array(4)].map((_, index) => ( + +
+ +
+
+

Иванов Иван Иванович

+

12.12.1912-12.12.2012

+

Кладбище: Градское, Квартал: 7, Участок: 32453

+
+ handleClick(e)}>Редактировать +
+
+ + ))} +
+
+
+ ) +} diff --git a/src/app/everlastingMemory/deceased/[id]/page.tsx b/src/app/everlastingMemory/deceased/[id]/page.tsx new file mode 100644 index 0000000..86a6064 --- /dev/null +++ b/src/app/everlastingMemory/deceased/[id]/page.tsx @@ -0,0 +1,239 @@ +'use client' + +import { Container } from '@/app/GlobalStyles' +import MainButton from '@/components/UI/button/MainButton' +import FormInput from '@/components/UI/input/FormInput' +import MainTextarea from '@/components/UI/textarea/MainTextarea' +import { Map, Placemark, YMaps } from '@pbe/react-yandex-maps' +import { ChangeEvent, useState } from 'react' +import styled from 'styled-components' + +type Props = { + params: { id: string } +} + +const Section = styled.div` + margin-top: 50px; + h1 { + margin: 50px 0; + text-align: center; + } + + .user-section { + display: flex; + gap: 30px; + + img { + border-radius: 12px; + width: 470px; + height: 337px; + } + + h1 { + margin: 0 0 30px; + } + + .information { + display: flex; + flex-direction: column; + gap: 10px; + } + } + + .description-section { + h3 { + text-align: justify; + } + } + + .review-section { + .title { + display: flex; + gap: 30px; + margin-bottom: 20px; + } + + .name { + font-weight: 600; + } + + p { + text-align: justify; + } + + .list { + display: flex; + flex-direction: column; + gap: 35px; + } + + .form { + display: flex; + flex-direction: column; + align-items: end; + gap: 20px; + } + + span { + color: ${(props) => props.theme.colors.green}; + font-size: 18px; + font-weight: 600; + cursor: pointer; + margin-top: 5px; + } + } +` + +const MapSection = styled.div` + position: relative; + margin-bottom: 50px; + + h1 { + text-align: center; + margin: 50px 0; + } + + .content { + padding: 15px; + display: flex; + flex-direction: column; + gap: 10px; + background: ${(props) => props.theme.colors.white}; + border-radius: 12px; + position: absolute; + top: 50%; + left: 10%; + transform: translateY(-20%); + z-index: 1; + } + + .map { + width: 100%; + height: 450px; + } +` + +export default function page({ params }: Props) { + const [newReview, setNewReview] = useState({ + name: '', + message: '' + }) + + return ( + <> + +
+
+ +
+

Иванов Иван Иванович

+
+

12.12.1912-12.12.2012

+

Кладбище: Градское

+

Квартал: 7

+

Участок: 32453

+
+
+
+
+

Описание жизни

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris + nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat + nulla pariatur. Excepteur sint occaecat cupidatat non proident, + sunt in culpa qui officia deserunt mollit anim id est + laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris + nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat + nulla pariatur. Lorem ipsum dolor sit amet, consectetur adipiscing + elit, sed do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco + laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure + dolor in reprehenderit in voluptate velit esse cillum dolore eu + fugiat nulla pariatur. Excepteur sint occaecat cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id est + laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris + nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat + nulla pariatur. +

+
+
+

Слова памяти

+
+ ) => + setNewReview({ ...newReview, name: e.target.value }) + } + value={newReview.name} + placeholder='Ваши Имя и Фамилия' + /> + ) => + setNewReview({ ...newReview, message: e.target.value }) + } + value={newReview.message} + placeholder='Оставте пару слов об Иване' + /> + Оставить +
+
+ {[...Array(3)].map((_, index) => ( +
+
+

Имя Пользователя

+

27 декабря 2023

+
+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit + esse cillum dolore eu fugiat nulla pariatur. Excepteur sint + occaecat cupidatat non proident, sunt in culpa qui officia + deserunt mollit anim id est laborum. +

+ Показать полностью... +
+ ))} +
+
+
+
+ +

Расположение участка захоронения

+ +
+

Расположение участка

+

Кладбище: Градское

+

Квартал: 7

+

Участок: 32453

+
+ + + +
+
+ + ) +} diff --git a/src/app/everlastingMemory/deceased/page.tsx b/src/app/everlastingMemory/deceased/page.tsx new file mode 100644 index 0000000..f020281 --- /dev/null +++ b/src/app/everlastingMemory/deceased/page.tsx @@ -0,0 +1,177 @@ +'use client' + +import { Container } from '@/app/GlobalStyles' +import MainButton from '@/components/UI/button/MainButton' +import Link from 'next/link' +import Slider from 'react-slick' +import styled from 'styled-components' + +type Props = {} + +const Section = styled.div` + .title { + display: flex; + align-items: center; + justify-content: center; + gap: 20px; + margin: 50px 0; + } + + .slider { + display: none; + } + + .list { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + justify-items: center; + gap: 20px 0; + } + + .item { + display: flex; + justify-content: space-between; + flex-direction: column; + gap: 15px; + + .data { + display: flex; + flex-direction: column; + gap: 5px; + } + + img { + cursor: pointer; + height: 273px; + width: 381px; + object-fit: cover; + border-radius: 12px; + } + } + + ${(props) => props.theme.mediaQueries.tabletLandscape} { + .item { + img { + height: 200px; + width: 300px; + } + } + } + + @media only screen and (max-width: 1000px) { + .list { + grid-template-columns: 1fr 1fr; + } + } + + ${(props) => props.theme.mediaQueries.tabletPortrait} { + .list { + grid-template-columns: 1fr; + } + + .user-logo { + display: none; + } + + .slider { + display: block; + max-width: 470px; + max-height: 340px; + border-radius: 12px; + overflow: hidden; + + img { + border-radius: 0; + height: 100%; + width: 100%; + max-width: 470px; + max-height: 340px; + object-fit: cover; + } + } + } + + ${(props) => props.theme.mediaQueries.mobile} { + } +` + +interface man { + images: string[] +} + +const some_cool_mans = [ + { images: ['/old men.png', '/image 7.png'] }, + { images: ['/old men.png', '/image 7.png'] }, + { images: ['/old men.png', '/image 7.png'] }, + { images: ['/old men.png', '/image 7.png'] } +] as man[] + +export default function Page({}: Props) { + const setting = { + infinite: true, + slidesToShow: 1, + slidesToScroll: 1, + speed: 500, + arrows: false, + dots: false + } + + const onEnterMouse = + (some_man: man) => + (event: React.MouseEvent): void => { + if (event.target instanceof HTMLImageElement) { + event.target.src = some_man.images[1] + } + } + + const onLeaveMouse = + (some_man: man) => + (event: React.MouseEvent): void => { + if (event.target instanceof HTMLImageElement) { + event.target.src = some_man.images[0] + } + } + + return ( + +
+
+

Иванов Иван Иванович 12.12.1912-12.12.2012, Градское кладбище

+ Изменить +
+
+ {some_cool_mans.map((item, index) => ( +
+ + +
+ +
+ +
+
+ +
+
+
+ +

Иванов Иван Иванович

+
+

12.12.1912-12.12.2012

+

Кладбище: Градское

+

Квартал: 7

+

Участок: 32453

+
+
+ ))} +
+
+
+ ) +} diff --git a/src/app/everlastingMemory/page.tsx b/src/app/everlastingMemory/page.tsx new file mode 100644 index 0000000..8ca1811 --- /dev/null +++ b/src/app/everlastingMemory/page.tsx @@ -0,0 +1,121 @@ +'use client' + +import MainButton from '@/components/UI/button/MainButton' +import FormInput from '@/components/UI/input/FormInput' +import Link from 'next/link' +import { ChangeEvent, useState } from 'react' +import styled from 'styled-components' + +type Props = {} + +const FormSection = styled.div` + height: 90vh; + width: 100%; + background-image: url('/image 11.png'); + background-position: center; + background-size: cover; + display: flex; + align-items: center; + justify-content: center; +` + +const Form = styled.div` + backdrop-filter: blur(4px); + background: rgba(129, 129, 129, 0.4); + border-radius: 12px; + padding: 20px; + display: flex; + flex-direction: column; + gap: 30px; + margin: 20px; + + .form { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 30px; + } + + h2 { + text-align: center; + color: ${(props) => props.theme.colors.white}; + } + + ${(props) => props.theme.mediaQueries.mobile} { + width: 100%; + + + .form { + width: 100%; + grid-template-columns: 1fr; + gap: 20px; + } + } +` + +export default function page({}: Props) { + const [deceased, setDeceased] = useState({ + firstName: '', + lastName: '', + patronymic: '', + dateBirth: '', + dateDeath: '', + cemetery: '' + }) + + return ( + +
+

Поиск усопшего

+
+ ) => + setDeceased({ ...deceased, firstName: e.target.value }) + } + placeholder='Имя' + /> + ) => + setDeceased({ ...deceased, dateBirth: e.target.value }) + } + placeholder='Дата рождения' + /> + + ) => + setDeceased({ ...deceased, lastName: e.target.value }) + } + placeholder='Фамилия' + /> + + ) => + setDeceased({ ...deceased, dateDeath: e.target.value }) + } + placeholder='Дата смерти' + /> + ) => + setDeceased({ ...deceased, patronymic: e.target.value }) + } + placeholder='Отчество' + /> + ) => + setDeceased({ ...deceased, cemetery: e.target.value }) + } + placeholder='Кладбище' + /> +
+ + Искать + +
+
+ ) +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx new file mode 100644 index 0000000..617f002 --- /dev/null +++ b/src/app/layout.tsx @@ -0,0 +1,32 @@ +import AdminSideBar from '@/components/layout/AdminSideBar' +import Header from '@/components/layout/Header/Header' +import Footer from '@/components/layout/footer/Footer' +import type { Metadata } from 'next' +import { Roboto_Flex } from 'next/font/google' +import Providers from './Providers' + +const robotoFlex = Roboto_Flex({ subsets: ['latin', 'cyrillic'] }) + +export const metadata: Metadata = { + title: 'Create Next App', + description: 'Generated by create next app' +} + +export default function RootLayout({ + children +}: Readonly<{ + children: React.ReactNode +}>) { + return ( + + + +
+ + {children} +