diff --git a/.github/workflows/prod.yml b/.github/workflows/prod.yml index d742dbf6..5b55035e 100644 --- a/.github/workflows/prod.yml +++ b/.github/workflows/prod.yml @@ -2,7 +2,7 @@ name: git push into another repo to deploy to vercel on: push: - branches: [main] + branches: [dev] jobs: build: @@ -25,6 +25,6 @@ jobs: destination-repository-name: solitour-frontend user-email: ${{ secrets.PRIVATE_EMAIL }} commit-message: ${{ github.event.commits[0].message }} - target-branch: main + target-branch: dev - name: Test get variable exported by push-to-another-repository run: echo $DESTINATION_CLONED_DIRECTORY \ No newline at end of file diff --git a/next.config.mjs b/next.config.mjs index 4678774e..40b28e0d 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,4 +1,16 @@ /** @type {import('next').NextConfig} */ -const nextConfig = {}; +const nextConfig = { + reactStrictMode: true, + images: { + remotePatterns: [ + { + protocol: "https", + hostname: "s3.ap-northeast-2.amazonaws.com", + port: "", + pathname: "/solitour-bucket/**", + }, + ], + }, +}; export default nextConfig; diff --git a/package-lock.json b/package-lock.json index ca6a0026..3cc4b16b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,19 +9,39 @@ "version": "0.1.0", "dependencies": { "@date-io/date-fns": "^3.0.0", + "@hookform/resolvers": "^3.6.0", + "@types/uuid": "^10.0.0", "date-fns": "^3.6.0", - "next": "14.2.3", + "framer-motion": "^11.3.28", + "lottie-react": "^2.4.0", + "next": "14.2.10", + "node-html-parser": "^6.1.13", + "quill-image-drop-and-paste": "^2.0.1", + "quill-image-resize-module-ts": "^3.0.3", + "rc-slider": "^11.1.5", "react": "^18", "react-date-range": "^2.0.1", "react-dom": "^18", + "react-easy-crop": "^5.0.8", + "react-hook-form": "^7.52.0", "react-icons": "^5.2.1", + "react-quill": "^2.0.0", + "react-spinners": "^0.14.1", + "react-toastify": "^10.0.5", + "sanitize-html": "^2.13.0", + "sharp": "^0.33.4", + "use-debounce": "^10.0.1", + "uuid": "^10.0.0", + "zod": "^3.23.8", "zustand": "^4.5.2" }, "devDependencies": { "@types/node": "^20", + "@types/rc-slider": "^9.3.1", "@types/react": "^18", "@types/react-date-range": "^1.4.9", "@types/react-dom": "^18", + "@types/sanitize-html": "^2.11.0", "eslint": "^8", "eslint-config-next": "14.2.3", "postcss": "^8", @@ -46,7 +66,6 @@ "version": "7.24.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", - "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -75,6 +94,15 @@ } } }, + "node_modules/@emnapi/runtime": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", + "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -131,6 +159,14 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@hookform/resolvers": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.6.0.tgz", + "integrity": "sha512-UBcpyOX3+RR+dNnqBd0lchXpoL8p4xC21XP8H6Meb8uve5Br1GCnmg0PcBoKKqPKgGu9GHQ/oygcmPrQhetwqw==", + "peerDependencies": { + "react-hook-form": "^7.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -164,6 +200,437 @@ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", + "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.2" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", + "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "macos": ">=11", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", + "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "macos": ">=10.13", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", + "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", + "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", + "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", + "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", + "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", + "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", + "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.2" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", + "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.2" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", + "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.31", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.2" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", + "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", + "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", + "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", + "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.1.1" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", + "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", + "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -257,9 +724,9 @@ } }, "node_modules/@next/env": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz", - "integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==" + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.10.tgz", + "integrity": "sha512-dZIu93Bf5LUtluBXIv4woQw2cZVZ2DJTjax5/5DOs3lzEOeKLy7GxRSr4caK9/SCPdaW6bCgpye6+n4Dh9oJPw==" }, "node_modules/@next/eslint-plugin-next": { "version": "14.2.3", @@ -271,9 +738,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz", - "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.10.tgz", + "integrity": "sha512-V3z10NV+cvMAfxQUMhKgfQnPbjw+Ew3cnr64b0lr8MDiBJs3eLnM6RpGC46nhfMZsiXgQngCJKWGTC/yDcgrDQ==", "cpu": [ "arm64" ], @@ -286,9 +753,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz", - "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.10.tgz", + "integrity": "sha512-Y0TC+FXbFUQ2MQgimJ/7Ina2mXIKhE7F+GUe1SgnzRmwFY3hX2z8nyVCxE82I2RicspdkZnSWMn4oTjIKz4uzA==", "cpu": [ "x64" ], @@ -301,9 +768,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz", - "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.10.tgz", + "integrity": "sha512-ZfQ7yOy5zyskSj9rFpa0Yd7gkrBnJTkYVSya95hX3zeBG9E55Z6OTNPn1j2BTFWvOVVj65C3T+qsjOyVI9DQpA==", "cpu": [ "arm64" ], @@ -316,9 +783,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz", - "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.10.tgz", + "integrity": "sha512-n2i5o3y2jpBfXFRxDREr342BGIQCJbdAUi/K4q6Env3aSx8erM9VuKXHw5KNROK9ejFSPf0LhoSkU/ZiNdacpQ==", "cpu": [ "arm64" ], @@ -331,9 +798,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz", - "integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.10.tgz", + "integrity": "sha512-GXvajAWh2woTT0GKEDlkVhFNxhJS/XdDmrVHrPOA83pLzlGPQnixqxD8u3bBB9oATBKB//5e4vpACnx5Vaxdqg==", "cpu": [ "x64" ], @@ -346,9 +813,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz", - "integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.10.tgz", + "integrity": "sha512-opFFN5B0SnO+HTz4Wq4HaylXGFV+iHrVxd3YvREUX9K+xfc4ePbRrxqOuPOFjtSuiVouwe6uLeDtabjEIbkmDA==", "cpu": [ "x64" ], @@ -361,9 +828,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz", - "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.10.tgz", + "integrity": "sha512-9NUzZuR8WiXTvv+EiU/MXdcQ1XUvFixbLIMNQiVHuzs7ZIFrJDLJDaOF1KaqttoTujpcxljM/RNAOmw1GhPPQQ==", "cpu": [ "arm64" ], @@ -376,9 +843,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz", - "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.10.tgz", + "integrity": "sha512-fr3aEbSd1GeW3YUMBkWAu4hcdjZ6g4NBl1uku4gAn661tcxd1bHs1THWYzdsbTRLcCKLjrDZlNp6j2HTfrw+Bg==", "cpu": [ "ia32" ], @@ -391,9 +858,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz", - "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.10.tgz", + "integrity": "sha512-UjeVoRGKNL2zfbcQ6fscmgjBAS/inHBh63mjIlfPg/NG8Yn2ztqylXt5qilYb6hoHIwaU2ogHknHWWmahJjgZQ==", "cpu": [ "x64" ], @@ -491,6 +958,24 @@ "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", "devOptional": true }, + "node_modules/@types/quill": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/quill/-/quill-1.3.10.tgz", + "integrity": "sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==", + "dependencies": { + "parchment": "^1.1.2" + } + }, + "node_modules/@types/rc-slider": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@types/rc-slider/-/rc-slider-9.3.1.tgz", + "integrity": "sha512-apvhMnpQltIzLIvKfZGeI5uvBK4CoDAnqXlV7rtFRVn4Ecwe5Db32I4LF1sNlhAVevLjLJuE+7Fpi3OnG1mVbg==", + "deprecated": "This is a stub types definition. rc-slider provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "rc-slider": "*" + } + }, "node_modules/@types/react": { "version": "18.3.3", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", @@ -536,6 +1021,20 @@ "@types/react": "*" } }, + "node_modules/@types/sanitize-html": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@types/sanitize-html/-/sanitize-html-2.11.0.tgz", + "integrity": "sha512-7oxPGNQHXLHE48r/r/qjn7q0hlrs3kL7oZnGj0Wf/h9tj/6ibFyRkNbsDxaBBZ4XUZ0Dx5LGCyDJ04ytSofacQ==", + "dev": true, + "dependencies": { + "htmlparser2": "^8.0.0" + } + }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==" + }, "node_modules/@typescript-eslint/parser": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", @@ -995,6 +1494,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1032,7 +1536,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -1146,11 +1649,38 @@ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -1161,8 +1691,16 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } }, "node_modules/commander": { "version": "4.1.1", @@ -1190,7 +1728,33 @@ "which": "^2.0.1" }, "engines": { - "node": ">= 8" + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, "node_modules/cssesc": { @@ -1294,17 +1858,43 @@ } } }, + "node_modules/deep-equal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", + "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", + "dependencies": { + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.5.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -1321,7 +1911,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -1343,6 +1932,14 @@ "node": ">=6" } }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "engines": { + "node": ">=8" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -1379,6 +1976,57 @@ "node": ">=6.0.0" } }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -1404,6 +2052,17 @@ "node": ">=10.13.0" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/es-abstract": { "version": "1.23.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", @@ -1468,7 +2127,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -1480,7 +2138,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, "engines": { "node": ">= 0.4" } @@ -1566,7 +2223,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "engines": { "node": ">=10" }, @@ -1986,12 +2642,27 @@ "node": ">=0.10.0" } }, + "node_modules/eventemitter3": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", + "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-diff": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==" + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -2126,6 +2797,30 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/framer-motion": { + "version": "11.3.28", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.3.28.tgz", + "integrity": "sha512-dqhoawipEAjqdv32zbv72sOMJZjol7dROWn7t/FOq23WXJ40O4OUybgnO2ldnuS+3YquSn8xO/KKRavZ+TBVOQ==", + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2150,7 +2845,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2177,7 +2871,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2186,7 +2879,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -2343,7 +3035,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -2384,7 +3075,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, "dependencies": { "es-define-property": "^1.0.0" }, @@ -2396,7 +3086,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -2408,7 +3097,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -2420,7 +3108,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "dependencies": { "has-symbols": "^1.0.3" }, @@ -2435,7 +3122,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -2443,6 +3129,32 @@ "node": ">= 0.4" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -2508,6 +3220,21 @@ "node": ">= 0.4" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-array-buffer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", @@ -2524,6 +3251,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/is-async-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", @@ -2622,7 +3354,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -2747,11 +3478,18 @@ "node": ">=8" } }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -3059,6 +3797,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -3076,6 +3819,23 @@ "loose-envify": "cli.js" } }, + "node_modules/lottie-react": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/lottie-react/-/lottie-react-2.4.0.tgz", + "integrity": "sha512-pDJGj+AQlnlyHvOHFK7vLdsDcvbuqvwPZdMlJ360wrzGFurXeKPr8SiRCjLf3LrNYKANQtSsh5dz9UYQHuqx4w==", + "dependencies": { + "lottie-web": "^5.10.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/lottie-web": { + "version": "5.12.2", + "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.12.2.tgz", + "integrity": "sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg==" + }, "node_modules/lru-cache": { "version": "10.2.2", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", @@ -3178,11 +3938,11 @@ "dev": true }, "node_modules/next": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz", - "integrity": "sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.10.tgz", + "integrity": "sha512-sDDExXnh33cY3RkS9JuFEKaS4HmlWmDKP1VJioucCG6z5KuA008DPsDZOzi8UfqEk3Ii+2NCQSJrfbEWtZZfww==", "dependencies": { - "@next/env": "14.2.3", + "@next/env": "14.2.10", "@swc/helpers": "0.5.5", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", @@ -3197,15 +3957,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.3", - "@next/swc-darwin-x64": "14.2.3", - "@next/swc-linux-arm64-gnu": "14.2.3", - "@next/swc-linux-arm64-musl": "14.2.3", - "@next/swc-linux-x64-gnu": "14.2.3", - "@next/swc-linux-x64-musl": "14.2.3", - "@next/swc-win32-arm64-msvc": "14.2.3", - "@next/swc-win32-ia32-msvc": "14.2.3", - "@next/swc-win32-x64-msvc": "14.2.3" + "@next/swc-darwin-arm64": "14.2.10", + "@next/swc-darwin-x64": "14.2.10", + "@next/swc-linux-arm64-gnu": "14.2.10", + "@next/swc-linux-arm64-musl": "14.2.10", + "@next/swc-linux-x64-gnu": "14.2.10", + "@next/swc-linux-x64-musl": "14.2.10", + "@next/swc-win32-arm64-msvc": "14.2.10", + "@next/swc-win32-ia32-msvc": "14.2.10", + "@next/swc-win32-x64-msvc": "14.2.10" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -3253,6 +4013,15 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/node-html-parser": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -3262,6 +4031,22 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3288,11 +4073,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "engines": { "node": ">= 0.4" } @@ -3451,6 +4250,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parchment": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", + "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3463,6 +4267,11 @@ "node": ">=6" } }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -3569,7 +4378,6 @@ "version": "8.4.38", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "dev": true, "funding": [ { "type": "opencollective", @@ -3852,6 +4660,81 @@ } ] }, + "node_modules/quill": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", + "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", + "dependencies": { + "clone": "^2.1.1", + "deep-equal": "^1.0.1", + "eventemitter3": "^2.0.3", + "extend": "^3.0.2", + "parchment": "^1.1.4", + "quill-delta": "^3.6.2" + } + }, + "node_modules/quill-delta": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", + "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", + "dependencies": { + "deep-equal": "^1.0.1", + "extend": "^3.0.2", + "fast-diff": "1.1.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/quill-image-drop-and-paste": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/quill-image-drop-and-paste/-/quill-image-drop-and-paste-2.0.1.tgz", + "integrity": "sha512-Qs0v6kf0v4dsB0s9Tf8rAFQb6LVPjfZL1i1fgN7jaT81XqpoHMQIC+QZN3LEM5nQ8LT2NNe4nuNjdMN1r8BI+g==" + }, + "node_modules/quill-image-resize-module-ts": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/quill-image-resize-module-ts/-/quill-image-resize-module-ts-3.0.3.tgz", + "integrity": "sha512-NMWw67zCfGxE0AyPTVLWMTAs71eKerd+jJJqu9ZuPBGZl7vc+Jtb+tmfx33pC3h0deVYqgOMXYzbFBIRmu/WuQ==", + "dependencies": { + "lodash": "^4.17.4", + "quill": "^1.3.4" + } + }, + "node_modules/rc-slider": { + "version": "11.1.5", + "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-11.1.5.tgz", + "integrity": "sha512-b77H5PbjMKsvkYXAYIkn50QuFX6ICQmCTibDinI9q+BHx65/TV4TeU25+oadhSRzykxs0/vBWeKBwRyySOeWlg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.36.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-util": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.43.0.tgz", + "integrity": "sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "react-is": "^18.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-util/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", @@ -3890,6 +4773,34 @@ "react": "^18.3.1" } }, + "node_modules/react-easy-crop": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/react-easy-crop/-/react-easy-crop-5.0.8.tgz", + "integrity": "sha512-KjulxXhR5iM7+ATN2sGCum/IyDxGw7xT0dFoGcqUP+ysaPU5Ka7gnrDa2tUHFHUoMNyPrVZ05QA+uvMgC5ym/g==", + "dependencies": { + "normalize-wheel": "^1.0.1", + "tslib": "^2.0.1" + }, + "peerDependencies": { + "react": ">=16.4.0", + "react-dom": ">=16.4.0" + } + }, + "node_modules/react-hook-form": { + "version": "7.52.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.52.0.tgz", + "integrity": "sha512-mJX506Xc6mirzLsmXUJyqlAI3Kj9Ph2RhplYhUVffeOQSnubK2uVqBFOBJmvKikvbFV91pxVXmDiR+QMF19x6A==", + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, "node_modules/react-icons": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.2.1.tgz", @@ -3914,6 +4825,41 @@ "react": "0.14 || 15 - 18" } }, + "node_modules/react-quill": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-quill/-/react-quill-2.0.0.tgz", + "integrity": "sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==", + "dependencies": { + "@types/quill": "^1.3.10", + "lodash": "^4.17.4", + "quill": "^1.3.7" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18", + "react-dom": "^16 || ^17 || ^18" + } + }, + "node_modules/react-spinners": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.14.1.tgz", + "integrity": "sha512-2Izq+qgQ08HTofCVEdcAQCXFEYfqTDdfeDQJeo/HHQiQJD4imOicNLhkfN2eh1NYEWVOX4D9ok2lhuDB0z3Aag==", + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-toastify": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-10.0.5.tgz", + "integrity": "sha512-mNKt2jBXJg4O7pSdbNUfDdTsK9FIdikfsIE/yUCxbAEXl4HMyJaivrVFcn3Elvt5xvCQYhUZm+hqTIu1UXM3Pw==", + "dependencies": { + "clsx": "^2.1.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -3959,14 +4905,12 @@ "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dev": true, "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", @@ -4120,6 +5064,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sanitize-html": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.13.0.tgz", + "integrity": "sha512-Xff91Z+4Mz5QiNSLdLWwjgBDm5b1RU6xBT0+12rapjiaR7SwfRdjw8f+6Rir2MXKLrDicRFHdb51hGOAxmsUIA==", + "dependencies": { + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "htmlparser2": "^8.0.0", + "is-plain-object": "^5.0.0", + "parse-srcset": "^1.0.2", + "postcss": "^8.3.11" + } + }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -4132,7 +5089,6 @@ "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, "bin": { "semver": "bin/semver.js" }, @@ -4144,7 +5100,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -4161,7 +5116,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -4177,6 +5131,45 @@ "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" }, + "node_modules/sharp": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", + "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==", + "hasInstallScript": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.0" + }, + "engines": { + "libvips": ">=8.15.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.4", + "@img/sharp-darwin-x64": "0.33.4", + "@img/sharp-libvips-darwin-arm64": "1.0.2", + "@img/sharp-libvips-darwin-x64": "1.0.2", + "@img/sharp-libvips-linux-arm": "1.0.2", + "@img/sharp-libvips-linux-arm64": "1.0.2", + "@img/sharp-libvips-linux-s390x": "1.0.2", + "@img/sharp-libvips-linux-x64": "1.0.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", + "@img/sharp-libvips-linuxmusl-x64": "1.0.2", + "@img/sharp-linux-arm": "0.33.4", + "@img/sharp-linux-arm64": "0.33.4", + "@img/sharp-linux-s390x": "0.33.4", + "@img/sharp-linux-x64": "0.33.4", + "@img/sharp-linuxmusl-arm64": "0.33.4", + "@img/sharp-linuxmusl-x64": "0.33.4", + "@img/sharp-wasm32": "0.33.4", + "@img/sharp-win32-ia32": "0.33.4", + "@img/sharp-win32-x64": "0.33.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4228,6 +5221,14 @@ "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", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -4767,6 +5768,17 @@ "punycode": "^2.1.0" } }, + "node_modules/use-debounce": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-10.0.1.tgz", + "integrity": "sha512-0uUXjOfm44e6z4LZ/woZvkM8FwV1wiuoB6xnrrOmeAEjRDDzTLQNRFtYHvqUsJdrz1X37j0rVGIVp144GLHGKg==", + "engines": { + "node": ">= 16.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", @@ -4781,6 +5793,18 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -5008,6 +6032,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/zustand": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.2.tgz", diff --git a/package.json b/package.json index 6ab3354b..3de376c9 100644 --- a/package.json +++ b/package.json @@ -10,19 +10,39 @@ }, "dependencies": { "@date-io/date-fns": "^3.0.0", + "@hookform/resolvers": "^3.6.0", + "@types/uuid": "^10.0.0", "date-fns": "^3.6.0", - "next": "14.2.3", + "framer-motion": "^11.3.28", + "lottie-react": "^2.4.0", + "next": "14.2.10", + "node-html-parser": "^6.1.13", + "quill-image-drop-and-paste": "^2.0.1", + "quill-image-resize-module-ts": "^3.0.3", + "rc-slider": "^11.1.5", "react": "^18", "react-date-range": "^2.0.1", "react-dom": "^18", + "react-easy-crop": "^5.0.8", + "react-hook-form": "^7.52.0", "react-icons": "^5.2.1", + "react-quill": "^2.0.0", + "react-spinners": "^0.14.1", + "react-toastify": "^10.0.5", + "sanitize-html": "^2.13.0", + "sharp": "^0.33.4", + "use-debounce": "^10.0.1", + "uuid": "^10.0.0", + "zod": "^3.23.8", "zustand": "^4.5.2" }, "devDependencies": { "@types/node": "^20", + "@types/rc-slider": "^9.3.1", "@types/react": "^18", "@types/react-date-range": "^1.4.9", "@types/react-dom": "^18", + "@types/sanitize-html": "^2.11.0", "eslint": "^8", "eslint-config-next": "14.2.3", "postcss": "^8", diff --git a/public/PostImage.svg b/public/PostImage.svg deleted file mode 100644 index 96cfc4be..00000000 --- a/public/PostImage.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/public/PostImage2.svg b/public/PostImage2.svg deleted file mode 100644 index 876f69e5..00000000 --- a/public/PostImage2.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/public/PostImage3.svg b/public/PostImage3.svg deleted file mode 100644 index a58c9ae2..00000000 --- a/public/PostImage3.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/public/Trip-search-icon.svg b/public/Trip-search-icon.svg deleted file mode 100644 index a314d4d2..00000000 --- a/public/Trip-search-icon.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/background1.svg b/public/background1.svg deleted file mode 100644 index b4983f54..00000000 --- a/public/background1.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/public/background2.svg b/public/background2.svg deleted file mode 100644 index d90070e4..00000000 --- a/public/background2.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/public/background3.svg b/public/background3.svg deleted file mode 100644 index f5c4924b..00000000 --- a/public/background3.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/public/background4.png b/public/background4.png deleted file mode 100644 index 899a0e69..00000000 Binary files a/public/background4.png and /dev/null differ diff --git a/public/banner-image.png b/public/banner-image.png deleted file mode 100644 index a9efcf13..00000000 Binary files a/public/banner-image.png and /dev/null differ diff --git a/public/banner2-image.svg b/public/banner2-image.svg deleted file mode 100644 index 2d8491e3..00000000 --- a/public/banner2-image.svg +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/calendar-icon.svg b/public/calendar-icon.svg deleted file mode 100644 index 84bb1267..00000000 --- a/public/calendar-icon.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/public/calendar-next-arrow-icon.svg b/public/calendar-next-arrow-icon.svg new file mode 100644 index 00000000..98848c4e --- /dev/null +++ b/public/calendar-next-arrow-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/calendar-next-arrow-white-icon.svg b/public/calendar-next-arrow-white-icon.svg new file mode 100644 index 00000000..c4c9f6dc --- /dev/null +++ b/public/calendar-next-arrow-white-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/calendar-prev-arrow-icon.svg b/public/calendar-prev-arrow-icon.svg new file mode 100644 index 00000000..d5776b46 --- /dev/null +++ b/public/calendar-prev-arrow-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/calendar-prev-arrow-white-icon.svg b/public/calendar-prev-arrow-white-icon.svg new file mode 100644 index 00000000..d329f3ea --- /dev/null +++ b/public/calendar-prev-arrow-white-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/camera-icon.svg b/public/camera-icon.svg deleted file mode 100644 index 310af108..00000000 --- a/public/camera-icon.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/public/clock-icon.svg b/public/clock-icon.svg deleted file mode 100644 index 1772828b..00000000 --- a/public/clock-icon.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/public/common/bookmark-icon-marked.svg b/public/common/bookmark-icon-marked.svg new file mode 100644 index 00000000..58f0998d --- /dev/null +++ b/public/common/bookmark-icon-marked.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/common/bookmark-icon.svg b/public/common/bookmark-icon.svg new file mode 100644 index 00000000..6c09aa98 --- /dev/null +++ b/public/common/bookmark-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/common/calendar-icon.svg b/public/common/calendar-icon.svg new file mode 100644 index 00000000..b64a8812 --- /dev/null +++ b/public/common/calendar-icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/common/check-active-icon.svg b/public/common/check-active-icon.svg new file mode 100644 index 00000000..c02c7945 --- /dev/null +++ b/public/common/check-active-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/common/check-empty-icon.svg b/public/common/check-empty-icon.svg new file mode 100644 index 00000000..85f99205 --- /dev/null +++ b/public/common/check-empty-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/common/check-gray-icon.svg b/public/common/check-gray-icon.svg new file mode 100644 index 00000000..933a3a4c --- /dev/null +++ b/public/common/check-gray-icon.svg @@ -0,0 +1,12 @@ + + + \ No newline at end of file diff --git a/public/common/dropdown-down-arrow.svg b/public/common/dropdown-down-arrow.svg new file mode 100644 index 00000000..538183db --- /dev/null +++ b/public/common/dropdown-down-arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/common/eyes-icon.svg b/public/common/eyes-icon.svg new file mode 100644 index 00000000..e4a6a0dd --- /dev/null +++ b/public/common/eyes-icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/common/heart-active-icon.svg b/public/common/heart-active-icon.svg new file mode 100644 index 00000000..fd09894e --- /dev/null +++ b/public/common/heart-active-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/common/heart-empty-icon.svg b/public/common/heart-empty-icon.svg new file mode 100644 index 00000000..8d513562 --- /dev/null +++ b/public/common/heart-empty-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/home-icon.svg b/public/common/home-icon.svg similarity index 100% rename from public/home-icon.svg rename to public/common/home-icon.svg diff --git a/public/common/loading-icon.png b/public/common/loading-icon.png new file mode 100644 index 00000000..48470657 Binary files /dev/null and b/public/common/loading-icon.png differ diff --git a/public/common/pencil-icon.png b/public/common/pencil-icon.png new file mode 100644 index 00000000..a318b6bd Binary files /dev/null and b/public/common/pencil-icon.png differ diff --git a/public/search-icon.png b/public/common/search-icon.png similarity index 100% rename from public/search-icon.png rename to public/common/search-icon.png diff --git a/public/Solitour-logo.svg b/public/common/solitour-logo.svg similarity index 100% rename from public/Solitour-logo.svg rename to public/common/solitour-logo.svg diff --git a/public/diary/calendar-icon.svg b/public/diary/calendar-icon.svg new file mode 100644 index 00000000..cced35a9 --- /dev/null +++ b/public/diary/calendar-icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/diary/day-text.svg b/public/diary/day-text.svg new file mode 100644 index 00000000..e49097e2 --- /dev/null +++ b/public/diary/day-text.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/diary/mood-icon1.svg b/public/diary/mood-icon1.svg new file mode 100644 index 00000000..062685bd --- /dev/null +++ b/public/diary/mood-icon1.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/diary/mood-icon2.svg b/public/diary/mood-icon2.svg new file mode 100644 index 00000000..85ca7b8a --- /dev/null +++ b/public/diary/mood-icon2.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/diary/mood-icon3.svg b/public/diary/mood-icon3.svg new file mode 100644 index 00000000..aac58173 --- /dev/null +++ b/public/diary/mood-icon3.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/diary/mood-icon4.svg b/public/diary/mood-icon4.svg new file mode 100644 index 00000000..fc58f00b --- /dev/null +++ b/public/diary/mood-icon4.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/diary/mood-icon5.svg b/public/diary/mood-icon5.svg new file mode 100644 index 00000000..02413242 --- /dev/null +++ b/public/diary/mood-icon5.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/diary/pencil-green-icon.svg b/public/diary/pencil-green-icon.svg new file mode 100644 index 00000000..3cbf7544 --- /dev/null +++ b/public/diary/pencil-green-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/diary/season1.jpg b/public/diary/season1.jpg new file mode 100644 index 00000000..09ef649f Binary files /dev/null and b/public/diary/season1.jpg differ diff --git a/public/diary/season10.jpg b/public/diary/season10.jpg new file mode 100644 index 00000000..c981ea8c Binary files /dev/null and b/public/diary/season10.jpg differ diff --git a/public/diary/season11.jpg b/public/diary/season11.jpg new file mode 100644 index 00000000..dd9a7956 Binary files /dev/null and b/public/diary/season11.jpg differ diff --git a/public/diary/season12.jpg b/public/diary/season12.jpg new file mode 100644 index 00000000..16258193 Binary files /dev/null and b/public/diary/season12.jpg differ diff --git a/public/diary/season2.jpg b/public/diary/season2.jpg new file mode 100644 index 00000000..cbc393a0 Binary files /dev/null and b/public/diary/season2.jpg differ diff --git a/public/diary/season3.jpg b/public/diary/season3.jpg new file mode 100644 index 00000000..50fed090 Binary files /dev/null and b/public/diary/season3.jpg differ diff --git a/public/diary/season4.jpg b/public/diary/season4.jpg new file mode 100644 index 00000000..b85019a4 Binary files /dev/null and b/public/diary/season4.jpg differ diff --git a/public/diary/season5.jpg b/public/diary/season5.jpg new file mode 100644 index 00000000..c88133d8 Binary files /dev/null and b/public/diary/season5.jpg differ diff --git a/public/diary/season6.jpg b/public/diary/season6.jpg new file mode 100644 index 00000000..532b09b1 Binary files /dev/null and b/public/diary/season6.jpg differ diff --git a/public/diary/season7.jpg b/public/diary/season7.jpg new file mode 100644 index 00000000..a8b25699 Binary files /dev/null and b/public/diary/season7.jpg differ diff --git a/public/diary/season8.jpg b/public/diary/season8.jpg new file mode 100644 index 00000000..eb74643d Binary files /dev/null and b/public/diary/season8.jpg differ diff --git a/public/diary/season9.jpg b/public/diary/season9.jpg new file mode 100644 index 00000000..58a1d310 Binary files /dev/null and b/public/diary/season9.jpg differ diff --git a/public/edit-icon.svg b/public/edit-icon.svg deleted file mode 100644 index 50b046d0..00000000 --- a/public/edit-icon.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/public/error/error_sign.svg b/public/error/error_sign.svg new file mode 100644 index 00000000..e230533f --- /dev/null +++ b/public/error/error_sign.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/eyes-icon.svg b/public/eyes-icon.svg deleted file mode 100644 index 5e5066ea..00000000 --- a/public/eyes-icon.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/public/fonts/Karla-Regular.ttf b/public/fonts/Karla-Regular.ttf new file mode 100644 index 00000000..c164d004 Binary files /dev/null and b/public/fonts/Karla-Regular.ttf differ diff --git a/public/fonts/NotoSansKR-VariableFont_wght.ttf b/public/fonts/NotoSansKR-VariableFont_wght.ttf new file mode 100644 index 00000000..57016c27 Binary files /dev/null and b/public/fonts/NotoSansKR-VariableFont_wght.ttf differ diff --git a/public/fonts/PretendardVariable.ttf b/public/fonts/PretendardVariable.ttf new file mode 100644 index 00000000..32b0811e Binary files /dev/null and b/public/fonts/PretendardVariable.ttf differ diff --git a/public/fonts/Typo_HelloPOP_OutlineB.ttf b/public/fonts/Typo_HelloPOP_OutlineB.ttf new file mode 100644 index 00000000..33f334d5 Binary files /dev/null and b/public/fonts/Typo_HelloPOP_OutlineB.ttf differ diff --git a/public/gathering/bookmark-active-icon.svg b/public/gathering/bookmark-active-icon.svg new file mode 100644 index 00000000..064ccc61 --- /dev/null +++ b/public/gathering/bookmark-active-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/gathering/bookmark-empty-icon.svg b/public/gathering/bookmark-empty-icon.svg new file mode 100644 index 00000000..86c077bf --- /dev/null +++ b/public/gathering/bookmark-empty-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/gathering/calendar-gray-icon.svg b/public/gathering/calendar-gray-icon.svg new file mode 100644 index 00000000..65b56d6b --- /dev/null +++ b/public/gathering/calendar-gray-icon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/gathering/calendar-icon.svg b/public/gathering/calendar-icon.svg new file mode 100644 index 00000000..69009c64 --- /dev/null +++ b/public/gathering/calendar-icon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/gathering/clock-gray-icon.svg b/public/gathering/clock-gray-icon.svg new file mode 100644 index 00000000..97f9e57c --- /dev/null +++ b/public/gathering/clock-gray-icon.svg @@ -0,0 +1,28 @@ + + + + + + \ No newline at end of file diff --git a/public/gathering/clock-icon.svg b/public/gathering/clock-icon.svg new file mode 100644 index 00000000..5476f565 --- /dev/null +++ b/public/gathering/clock-icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/close-icon.svg b/public/gathering/close-icon.svg similarity index 100% rename from public/close-icon.svg rename to public/gathering/close-icon.svg diff --git a/public/gathering/green_pin.svg b/public/gathering/green_pin.svg new file mode 100644 index 00000000..e6721f1d --- /dev/null +++ b/public/gathering/green_pin.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/gathering/location-gray-icon.svg b/public/gathering/location-gray-icon.svg new file mode 100644 index 00000000..5c8d35db --- /dev/null +++ b/public/gathering/location-gray-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/gathering/location-icon.svg b/public/gathering/location-icon.svg new file mode 100644 index 00000000..42e71f4d --- /dev/null +++ b/public/gathering/location-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/gathering/minus-icon.svg b/public/gathering/minus-icon.svg new file mode 100644 index 00000000..b6deb6d0 --- /dev/null +++ b/public/gathering/minus-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/gathering/people-gray-icon.svg b/public/gathering/people-gray-icon.svg new file mode 100644 index 00000000..9d8f9c20 --- /dev/null +++ b/public/gathering/people-gray-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/gathering/people-icon.svg b/public/gathering/people-icon.svg new file mode 100644 index 00000000..e982dbe3 --- /dev/null +++ b/public/gathering/people-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/gathering/pin-gray-icon.svg b/public/gathering/pin-gray-icon.svg new file mode 100644 index 00000000..ca418ce1 --- /dev/null +++ b/public/gathering/pin-gray-icon.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/gathering/pin-icon.svg b/public/gathering/pin-icon.svg new file mode 100644 index 00000000..787bba4b --- /dev/null +++ b/public/gathering/pin-icon.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/gathering/plus-icon.svg b/public/gathering/plus-icon.svg new file mode 100644 index 00000000..52a81af9 --- /dev/null +++ b/public/gathering/plus-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/gathering/search-icon.svg b/public/gathering/search-icon.svg new file mode 100644 index 00000000..cab9881d --- /dev/null +++ b/public/gathering/search-icon.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/public/gathering/solitour_gathering_people.svg b/public/gathering/solitour_gathering_people.svg new file mode 100644 index 00000000..06b99111 --- /dev/null +++ b/public/gathering/solitour_gathering_people.svg @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/Meeting-search-icon.svg b/public/home/Gathering-search-icon.svg similarity index 100% rename from public/Meeting-search-icon.svg rename to public/home/Gathering-search-icon.svg diff --git a/public/home/background1.png b/public/home/background1.png new file mode 100644 index 00000000..5a0f5da0 Binary files /dev/null and b/public/home/background1.png differ diff --git a/public/home/background2.png b/public/home/background2.png new file mode 100644 index 00000000..4fcfaba1 Binary files /dev/null and b/public/home/background2.png differ diff --git a/public/home/background3.png b/public/home/background3.png new file mode 100644 index 00000000..5f953a55 Binary files /dev/null and b/public/home/background3.png differ diff --git a/public/home/background4.png b/public/home/background4.png new file mode 100644 index 00000000..1a7b9665 Binary files /dev/null and b/public/home/background4.png differ diff --git a/public/home/diary-icon-hover.svg b/public/home/diary-icon-hover.svg new file mode 100644 index 00000000..89622df4 --- /dev/null +++ b/public/home/diary-icon-hover.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/home/diary-icon.svg b/public/home/diary-icon.svg new file mode 100644 index 00000000..8b5ac1a6 --- /dev/null +++ b/public/home/diary-icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/home/gathering-icon-hover.svg b/public/home/gathering-icon-hover.svg new file mode 100644 index 00000000..ad4d9483 --- /dev/null +++ b/public/home/gathering-icon-hover.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/home/gathering-icon.svg b/public/home/gathering-icon.svg new file mode 100644 index 00000000..b98fb639 --- /dev/null +++ b/public/home/gathering-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/home/home-icon-hover.svg b/public/home/home-icon-hover.svg new file mode 100644 index 00000000..24e1904e --- /dev/null +++ b/public/home/home-icon-hover.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/home/home-icon.svg b/public/home/home-icon.svg new file mode 100644 index 00000000..41ec5f8c --- /dev/null +++ b/public/home/home-icon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/home/information-icon-hover.svg b/public/home/information-icon-hover.svg new file mode 100644 index 00000000..11f3b0b9 --- /dev/null +++ b/public/home/information-icon-hover.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/home/information-icon.svg b/public/home/information-icon.svg new file mode 100644 index 00000000..657f67d0 --- /dev/null +++ b/public/home/information-icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/home/logout-icon-hover.svg b/public/home/logout-icon-hover.svg new file mode 100644 index 00000000..d4d2e510 --- /dev/null +++ b/public/home/logout-icon-hover.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/home/logout-icon.svg b/public/home/logout-icon.svg new file mode 100644 index 00000000..87329abd --- /dev/null +++ b/public/home/logout-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/home/mypage-icon-hover.svg b/public/home/mypage-icon-hover.svg new file mode 100644 index 00000000..ec1f9173 --- /dev/null +++ b/public/home/mypage-icon-hover.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/home/mypage-icon.svg b/public/home/mypage-icon.svg new file mode 100644 index 00000000..c821573e --- /dev/null +++ b/public/home/mypage-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/home/signin-icon-hover.svg b/public/home/signin-icon-hover.svg new file mode 100644 index 00000000..1ee3780b --- /dev/null +++ b/public/home/signin-icon-hover.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/home/signin-icon.svg b/public/home/signin-icon.svg new file mode 100644 index 00000000..98c8b281 --- /dev/null +++ b/public/home/signin-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/home/support-icon-hover.svg b/public/home/support-icon-hover.svg new file mode 100644 index 00000000..aa43dd78 --- /dev/null +++ b/public/home/support-icon-hover.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/home/support-icon.svg b/public/home/support-icon.svg new file mode 100644 index 00000000..dfbc80cb --- /dev/null +++ b/public/home/support-icon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/home/trip-search-icon.svg b/public/home/trip-search-icon.svg new file mode 100644 index 00000000..de6798dd --- /dev/null +++ b/public/home/trip-search-icon.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/information/banner-image.png b/public/information/banner-image.png new file mode 100644 index 00000000..5e4396dd Binary files /dev/null and b/public/information/banner-image.png differ diff --git a/public/location-icon.svg b/public/location-icon.svg deleted file mode 100644 index bb453202..00000000 --- a/public/location-icon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/lottie/list-not-found.json b/public/lottie/list-not-found.json new file mode 100644 index 00000000..7e0d9a77 --- /dev/null +++ b/public/lottie/list-not-found.json @@ -0,0 +1,822 @@ +{ + "v": "5.8.0", + "fr": 60, + "ip": 0, + "op": 120, + "w": 1000, + "h": 1000, + "nm": "Comp 1", + "ddd": 0, + "assets": [], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 3, + "nm": "Null 1", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 0, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 0, + "s": [500, 490, 0], + "to": [0, 1.667, 0], + "ti": [0, 0, 0] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 60, + "s": [500, 510, 0], + "to": [0, 0, 0], + "ti": [0, 1.667, 0] + }, + { + "t": 120, + "s": [500, 490, 0] + } + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [0, 0, 0], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [200, 200, 100], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "ip": 0, + "op": 121, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "face", + "parent": 1, + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 50, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.748, + "y": 0 + }, + "t": 30, + "s": [0, 0, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { + "x": 0.352, + "y": 1 + }, + "o": { + "x": 0.178, + "y": 0 + }, + "t": 45, + "s": [8, 0, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { + "x": 0.491, + "y": 1 + }, + "o": { + "x": 0.077, + "y": 0 + }, + "t": 60, + "s": [-8, 0, 0], + "to": [0, 0, 0], + "ti": [-1.333, 0, 0] + }, + { + "i": { + "x": 0.491, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 73, + "s": [3, 0, 0], + "to": [1.333, 0, 0], + "ti": [0.5, 0, 0] + }, + { + "t": 84, + "s": [0, 0, 0] + } + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [250, 250, 0], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [100, 100, 100], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.964, 0], + [0.926, 1.269], + [-2.109, 1.537], + [-12.421, 0], + [-9.638, -6.507], + [1.46, -2.163], + [2.164, 1.463], + [9.78, 0], + [8.382, -6.108] + ], + "o": [ + [-1.46, 0], + [-1.537, -2.109], + [10.009, -7.294], + [11.67, 0], + [2.163, 1.46], + [-1.458, 2.163], + [-8.071, -5.448], + [-10.408, 0], + [-0.84, 0.612] + ], + "v": [ + [-30.712, 9.847], + [-34.536, 7.904], + [-33.499, 1.302], + [0.788, -9.847], + [33.361, 0.099], + [34.633, 6.66], + [28.073, 7.932], + [0.788, -0.396], + [-27.934, 8.941] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0, 0.706, 0.533], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [0, 0], + "ix": 2 + }, + "a": { + "a": 0, + "k": [0, 0], + "ix": 1 + }, + "s": { + "a": 0, + "k": [100, 100], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [250, 273.902], + "ix": 2 + }, + "a": { + "a": 0, + "k": [0, 0], + "ix": 1 + }, + "s": { + "a": 0, + "k": [100, 100], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 1, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, -5.22], + [5.22, 0], + [0, 5.22], + [-5.22, 0] + ], + "o": [ + [0, 5.22], + [-5.22, 0], + [0, -5.22], + [5.22, 0] + ], + "v": [ + [9.451, 0], + [0, 9.451], + [-9.451, 0], + [0, -9.451] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0, 0.706, 0.533], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [212.197, 225.702], + "ix": 2 + }, + "a": { + "a": 0, + "k": [0, 0], + "ix": 1 + }, + "s": { + "a": 0, + "k": [100, 100], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, -5.22], + [5.22, 0], + [0, 5.22], + [-5.22, 0] + ], + "o": [ + [0, 5.22], + [-5.22, 0], + [0, -5.22], + [5.22, 0] + ], + "v": [ + [9.451, 0], + [0, 9.451], + [-9.451, 0], + [0, -9.451] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0, 0.706, 0.533], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [287.803, 225.702], + "ix": 2 + }, + "a": { + "a": 0, + "k": [0, 0], + "ix": 1 + }, + "s": { + "a": 0, + "k": [100, 100], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [287.803, 225.702], + "ix": 2 + }, + "a": { + "a": 0, + "k": [287.803, 225.702], + "ix": 1 + }, + "s": { + "a": 0, + "k": [100, 100], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 121, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "magnification glass", + "parent": 1, + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 50, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [27, 24, 0], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [0, 0, 0], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [100, 100, 100], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [14.17, -15.84], + [0.87, -0.89], + [25.14, 0], + [0, 49.35], + [-49.35, 0], + [0, -49.35] + ], + "o": [ + [-0.82, 0.93], + [-16.27, 16.75], + [-49.35, 0], + [0, -49.35], + [49.35, 0], + [0, 22.88] + ], + "v": [ + [39.949, 35.36], + [37.419, 38.08], + [-26.751, 65.25], + [-116.251, -24.25], + [-26.751, -113.75], + [62.749, -24.25] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [4.11, 4.1], + [0, 0], + [0, 25.41], + [60.93, 0], + [0, -60.93], + [-60.93, 0], + [-19.48, 17.2], + [0, 0], + [-2.69, 0], + [-2.05, 2.05] + ], + "o": [ + [0, 0], + [14.48, -18.69], + [0, -60.93], + [-60.93, 0], + [0, 60.93], + [27.96, 0], + [0, 0], + [2.05, 2.05], + [2.69, 0], + [4.11, -4.1] + ], + "v": [ + [134.169, 116.83], + [60.639, 43.3], + [83.749, -24.25], + [-26.751, -134.75], + [-137.251, -24.25], + [-26.751, 86.25], + [46.269, 58.61], + [119.329, 131.67], + [126.749, 134.75], + [134.169, 131.67] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0, 0.706, 0.533], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [0, 0], + "ix": 2 + }, + "a": { + "a": 0, + "k": [0, 0], + "ix": 1 + }, + "s": { + "a": 0, + "k": [100, 100], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 121, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} diff --git a/public/lottie/loading-airplane.json b/public/lottie/loading-airplane.json new file mode 100644 index 00000000..9ad589ad --- /dev/null +++ b/public/lottie/loading-airplane.json @@ -0,0 +1 @@ +{"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.21","a":"","k":"","d":"","tc":""},"fr":30,"ip":30,"op":150,"w":800,"h":800,"nm":"plane2","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Avion2","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":55,"s":[-20]},{"t":120,"s":[20]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[320,400,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":55,"s":[480,400,0],"to":[0,0,0],"ti":[0,0,0]},{"t":120,"s":[320,400,0]}],"ix":2},"a":{"a":0,"k":[600,600,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":1200,"h":1200,"ip":0,"op":120,"st":-10,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"avion1","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[600,600,0],"ix":2},"a":{"a":0,"k":[1800,1800,0],"ix":1},"s":{"a":0,"k":[-25,25,100],"ix":6}},"ao":0,"w":3600,"h":3600,"ip":180,"op":240,"st":180,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"avion1","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[600,600,0],"ix":2},"a":{"a":0,"k":[1800,1800,0],"ix":1},"s":{"a":0,"k":[25,25,100],"ix":6}},"ao":0,"w":3600,"h":3600,"ip":120,"op":180,"st":120,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"avion1","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[600,600,0],"ix":2},"a":{"a":0,"k":[1800,1800,0],"ix":1},"s":{"a":0,"k":[-25,25,100],"ix":6}},"ao":0,"w":3600,"h":3600,"ip":60,"op":120,"st":60,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"avion1","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[600,600,0],"ix":2},"a":{"a":0,"k":[1800,1800,0],"ix":1},"s":{"a":0,"k":[25,25,100],"ix":6}},"ao":0,"w":3600,"h":3600,"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"Comp 7","refId":"comp_4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":120,"s":[631,520,0],"to":[-17.29,-3.705,0],"ti":[0,1.295,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":150,"s":[461,520,0],"to":[0,-5,0],"ti":[-28.333,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":210,"s":[731,520,0],"to":[28.333,0,0],"ti":[23.333,5,0]},{"t":240,"s":[631,520,0]}],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":120,"op":240,"st":120,"bm":0},{"ddd":0,"ind":6,"ty":0,"nm":"Comp 7","refId":"comp_4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[631,520,0],"to":[-17.29,-3.705,0],"ti":[0,1.295,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[461,520,0],"to":[0,-5,0],"ti":[-28.333,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":90,"s":[731,520,0],"to":[28.333,0,0],"ti":[23.333,5,0]},{"t":120,"s":[631,520,0]}],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":0,"op":120,"st":0,"bm":0}]},{"id":"comp_2","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"axe","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[1800,1800,0],"to":[71,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[2226,1800,0],"to":[0,0,0],"ti":[71,0,0]},{"t":60,"s":[1800,1800,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":30,"s":[80,100,100]},{"t":60,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[52,52],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.007843137719,0.160784319043,0.019607843831,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.419607877731,0.419607877731,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval Copy 11","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"helice Comp 1","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[1800,1800,0],"to":[62.333,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[2174,1800,0],"to":[0,0,0],"ti":[62.333,0,0]},{"t":60,"s":[1800,1800,0]}],"ix":2},"a":{"a":0,"k":[1800,1800,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":30,"s":[80,100,100]},{"t":60,"s":[100,100,100]}],"ix":6}},"ao":0,"w":3600,"h":3600,"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"trou","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[1800,1806,0],"to":[56.833,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[2141,1806,0],"to":[0,0,0],"ti":[56.833,0,0]},{"t":60,"s":[1800,1806,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":30,"s":[80,100,100]},{"t":60,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[104,104],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.007843137719,0.160784319043,0.019607843831,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.007843137719,0.160784319043,0.019607843831,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval Copy","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Aile 1dessus 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[1065.779,1832.344,0],"to":[26.667,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[1225.779,1832.344,0],"to":[0,0,0],"ti":[26.667,0,0]},{"t":60,"s":[1065.779,1832.344,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[-4.123,19.08],[-56.18,-30],[-98.74,0]],"o":[[-126.87,-0.81],[56.18,30],[-6.123,-17.253]],"v":[[136.53,-29.529],[-200.21,-19.779],[143.197,36.471]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[39.28,0.25],[-56.18,-30],[-98.74,0]],"o":[[-126.87,-0.81],[56.18,30],[39.3,0]],"v":[[134.863,-29.529],[-200.21,-19.779],[134.863,36.471]],"c":true}]},{"t":60,"s":[{"i":[[-4.123,19.08],[-56.18,-30],[-98.74,0]],"o":[[-126.87,-0.81],[56.18,30],[-6.123,-17.253]],"v":[[136.53,-29.529],[-200.21,-19.779],[143.197,36.471]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.007843137719,0.160784319043,0.019607843831,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.419607847929,0.419607847929,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path Copy 3","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":65,"st":4,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"aileron 1dessus","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[1510.931,1609.791,0],"to":[-46.667,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[1230.931,1609.791,0],"to":[0,0,0],"ti":[-46.667,0,0]},{"t":60,"s":[1510.931,1609.791,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-1.488,3.913],[7.9,0],[0.243,-35.764],[-7.928,-6.298]],"o":[[0.13,-49.07],[-6.483,0],[0.03,2.909],[7.928,6.298]],"v":[[14.899,39.968],[0.589,-49.832],[-14.896,15.937],[-3.502,29.81]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[-0.03,11.29],[7.9,0],[1.597,-31.175],[-1.254,-11.645]],"o":[[0.13,-49.07],[-5.866,0],[-0.554,10.807],[1.6,14.89]],"v":[[14.899,39.968],[0.589,-49.832],[-14.605,5.915],[-13.721,39.968]],"c":true}]},{"t":50,"s":[{"i":[[-1.488,3.913],[7.9,0],[0.243,-35.764],[-7.928,-6.298]],"o":[[0.13,-49.07],[-6.483,0],[0.03,2.909],[7.928,6.298]],"v":[[14.899,39.968],[0.589,-49.832],[-14.896,15.937],[-3.502,29.81]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.007843137719,0.160784319043,0.019607843831,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.419607847929,0.419607847929,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":-75,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval Copy 19","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":15,"op":50,"st":1,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"cockpit 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[1799.053,1542.234,0],"to":[6.667,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[1839.053,1542.234,0],"to":[0,0,0],"ti":[6.667,0,0]},{"t":60,"s":[1799.053,1542.234,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[-24.93,0],[0,23.49],[12.101,-2.547],[-0.762,-3.156]],"o":[[28.72,0],[-25.232,-6.714],[0,3.1],[5.014,20.76]],"v":[[0,36.749],[51.75,-13.708],[-51.75,-13.875],[-50.587,-4.455]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[-34.055,0.444],[-16.149,22.453],[43.351,-22.131],[-0.709,-1.964]],"o":[[38.684,-0.504],[-28.982,-14.881],[0.381,1.719],[5.219,14.447]],"v":[[-17.667,30.143],[73.667,-8.041],[-73.333,-8.791],[-71.71,-3.235]],"c":true}]},{"t":60,"s":[{"i":[[-24.93,0],[0,23.49],[12.101,-2.547],[-0.762,-3.156]],"o":[[28.72,0],[-25.232,-6.714],[0,3.1],[5.014,20.76]],"v":[[0,36.749],[51.75,-13.708],[-51.75,-13.875],[-50.587,-4.455]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.007843137719,0.160784319043,0.019607843831,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.784313738346,0.96862745285,0.952941179276,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":-180,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval Copy 2","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"fuselage","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1800,1851,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[-60.75,0],[0,60.75],[60.75,0],[0,-60.75]],"o":[[60.75,0],[0,-60.75],[-60.75,0],[0,60.75]],"v":[[0,95],[110,-15],[0,-95],[-110,-15]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[-60.75,0],[0,60.75],[60.75,0],[0,-60.75]],"o":[[60.75,0],[0,-60.75],[-60.75,0],[0,60.75]],"v":[[64,95],[174,-15],[64,-95],[-174,-47]],"c":true}]},{"t":60,"s":[{"i":[[-60.75,0],[0,60.75],[60.75,0],[0,-60.75]],"o":[[60.75,0],[0,-60.75],[-60.75,0],[0,60.75]],"v":[[0,95],[110,-15],[0,-95],[-110,-15]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.007843137719,0.160784319043,0.019607843831,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.772241175175,0.323599040508,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Gouv","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":30,"s":[0]},{"t":60,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[1803,1478.917,0],"to":[-66.667,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[1403,1478.917,0],"to":[0,0,0],"ti":[-66.667,0,0]},{"t":60,"s":[1803,1478.917,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,55.45],[10.56,0],[0,-55.46]],"o":[[0,-55.46],[-10.57,0],[0,55.45]],"v":[[19.124,29.41],[0.004,-71],[-19.126,29.41]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[0,55.45],[24.338,-0.694],[1.459,-85.382]],"o":[[0.209,-37.716],[-24.338,0.694],[0,55.45]],"v":[[32.458,29.41],[-26.662,-71],[-45.792,29.41]],"c":true}]},{"t":60,"s":[{"i":[[0,55.45],[10.56,0],[0,-55.46]],"o":[[0,-55.46],[-10.57,0],[0,55.45]],"v":[[19.124,29.41],[0.004,-71],[-19.126,29.41]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.007843137719,0.160784319043,0.019607843831,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.419607847929,0.419607847929,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Aile 2dessous 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[2533.779,1832.344,0],"to":[-46.667,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[2253.779,1832.344,0],"to":[0,0,0],"ti":[-46.667,0,0]},{"t":60,"s":[2533.779,1832.344,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[-100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-4.123,19.08],[-56.18,-30],[-98.74,0]],"o":[[-126.87,-0.81],[56.18,30],[-6.123,-17.253]],"v":[[136.53,-29.529],[-200.21,-19.779],[143.197,36.471]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.007843137719,0.160784319043,0.019607843831,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.419607847929,0.419607847929,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path Copy 3","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":65,"st":4,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Aile 1,2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1065.779,1832.344,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[39.28,0.25],[-56.18,-30],[-98.74,0]],"o":[[-126.87,-0.81],[56.18,30],[39.3,0]],"v":[[134.863,-29.529],[-200.21,-19.779],[134.863,36.471]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.007843137719,0.160784319043,0.019607843831,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.419607847929,0.419607847929,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path Copy 3","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":59,"op":60,"st":-1,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"aileron 1,2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[1510.931,1609.791,0],"to":[-46.667,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[1230.931,1609.791,0],"to":[0,0,0],"ti":[-46.667,0,0]},{"t":60,"s":[1510.931,1609.791,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.03,11.29],[7.9,0],[-4.87,-45.24]],"o":[[0.13,-49.07],[-7.9,0],[1.6,14.89]],"v":[[14.899,39.968],[0.589,-49.832],[-13.721,39.968]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.007843137719,0.160784319043,0.019607843831,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.419607847929,0.419607847929,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":-75,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval Copy 19","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":50,"op":60,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"aileron 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[1510.931,1609.791,0],"to":[-46.667,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[1230.931,1609.791,0],"to":[0,0,0],"ti":[-46.667,0,0]},{"t":60,"s":[1510.931,1609.791,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.03,11.29],[7.9,0],[-4.87,-45.24]],"o":[[0.13,-49.07],[-7.9,0],[1.6,14.89]],"v":[[14.899,39.968],[0.589,-49.832],[-13.721,39.968]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.007843137719,0.160784319043,0.019607843831,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.419607847929,0.419607847929,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":-75,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval Copy 19","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":15,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"aileron 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[2080.931,1609.791,0],"to":[-66.667,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":30,"s":[1680.931,1609.791,0],"to":[0,0,0],"ti":[-66.667,0,0]},{"t":60,"s":[2080.931,1609.791,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[-100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.03,11.29],[7.9,0],[-4.87,-45.24]],"o":[[0.13,-49.07],[-7.9,0],[1.6,14.89]],"v":[[14.899,39.968],[0.589,-49.832],[-13.721,39.968]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.007843137719,0.160784319043,0.019607843831,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.419607847929,0.419607847929,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":-75,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval Copy 20","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":60,"st":0,"bm":0}]},{"id":"comp_3","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"helice","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1800,1800,0],"ix":2},"a":{"a":0,"k":[-8,-4,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[979.501,979.501],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":20,"ix":4},"w":{"a":0,"k":30,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.588137149811,0.588137149811,0.588137149811,1],"ix":4},"o":{"a":0,"k":20,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-8,-4],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":60,"st":0,"bm":0}]},{"id":"comp_4","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[399.5,402.25,0],"ix":2},"a":{"a":0,"k":[1.991,-1.379,0],"ix":1},"s":{"a":0,"k":[89.498,80.267,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-113.289,-13.366],[0.68,-13.818],[89.937,-66.135],[50.83,37.722]],"o":[[-0.438,21.518],[-100.999,-13.818],[45.243,-54.923],[64.238,-61.946]],"v":[[177.589,-178.997],[175.354,-16.585],[-159.718,86.812],[-159.718,-86.812]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[-169.492,-11.894],[0.274,-14.27],[0.55,-106.002],[0.55,27.755]],"o":[[-0.641,26.718],[-158.724,-5.554],[1.667,-91.052],[0.55,-84.371]],"v":[[56.134,-191.682],[54.305,-31.078],[-159.718,86.812],[-159.718,-86.812]],"c":true}]},{"i":{"x":0.499,"y":1},"o":{"x":0.167,"y":0.167},"t":41,"s":[{"i":[[35.467,61.228],[-1.473,-25.74],[-77.664,-66.135],[-38.557,22.772]],"o":[[2.756,40.793],[27.678,69.634],[-45.261,-59.906],[-70.96,-55.717]],"v":[[-466.15,-195.036],[-467.299,-31.515],[-159.718,86.812],[-159.718,-86.812]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":60,"s":[{"i":[[82.246,-8.382],[-13.846,-33.751],[-78.782,-61.152],[-35.205,4.084]],"o":[[-3.79,27.747],[74.424,-6.343],[-51.965,-73.61],[-75.43,-73.158]],"v":[[-490.581,-182.735],[-491.699,-19.077],[-159.718,86.812],[-159.718,-86.812]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[178.337,-14.611],[-1.555,-16.309],[7.254,-123.444],[-0.568,29.001]],"o":[[-6.024,68.86],[154.873,-26.276],[-1.685,-110.986],[12.84,-85.617]],"v":[[-371.026,-192.701],[-371.026,-27.798],[-159.718,86.812],[-159.718,-86.812]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":101,"s":[{"i":[[-23.461,54.006],[0.508,-14.009],[97.758,-84.823],[54.182,31.493]],"o":[[-0.867,25.153],[-30.25,65.821],[45.243,-48.693],[103.345,-78.142]],"v":[[136.923,-191.551],[134.774,-28.948],[-159.718,86.812],[-159.718,-86.812]],"c":true}]},{"t":121,"s":[{"i":[[-113.289,-13.366],[0.68,-13.818],[89.937,-66.135],[50.83,37.722]],"o":[[-0.438,21.518],[-100.999,-13.818],[45.243,-54.923],[64.238,-61.946]],"v":[[177.589,-178.997],[175.354,-16.585],[-159.718,86.812],[-159.718,-86.812]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.305218984566,0.688471954944,0.234222995534,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.894239837048,0.894239837048,0.894239837048,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[161.718,-1.188],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1.75,-93.75],[-1,35.75],[-2.756,3.961],[-1.25,-67]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[6.25,-104.75],[3,32.25],[-1.506,-0.039],[-2.5,-68.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.5,-117.75],[10,17.75],[1.244,-11.289],[-3.5,-68.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[29.75,-128.5],[22.5,0.75],[2.494,-18.289],[-2.25,-69]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[50.5,-134.75],[43.25,-5.5],[4.244,-20.289],[0.75,-68]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[77.5,-137.75],[70,-8.75],[39.494,-17.539],[50.75,-140]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":94,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[111.5,-139.25],[104.5,-10.5],[83.994,-11.789],[97,-127.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":96,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[150,-142],[144.75,-12.75],[122.494,-14.539],[142,-131]],"c":true}]},{"t":97,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[171,-143],[168.75,-13.75],[143.494,-15.539],[166.5,-129.5]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.305218984566,0.688471954944,0.234222995534,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.894117712975,0.894117712975,0.894117712975,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":82,"op":98,"st":82,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-6,-116],[-6.5,33.5],[-2.506,3.961],[-1,-67]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-13.875,-126.5],[-11.875,12.375],[-2.394,-6.491],[-0.75,-77.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-32.292,-130.167],[-31.958,3.458],[-4.836,-10.061],[2.833,-71.167]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-41.5,-132],[-42,-1],[-6.058,-11.846],[-4,-84]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-56.5,-133.5],[-57,-2.5],[-24.558,-13.846],[-29,-105.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-75.25,-135.75],[-75.75,-4.75],[-48.808,-15.471],[-52.25,-116.875]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-94,-138],[-94.5,-7],[-73.058,-17.096],[-75.5,-123.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-131.5,-142.5],[-132,-11.5],[-121.558,-20.346],[-122,-129]],"c":true}]},{"t":36,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-153.25,-148.75],[-154.5,-16],[-144.058,-24.846],[-149.25,-135.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.305218984566,0.688471954944,0.234222995534,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.894117712975,0.894117712975,0.894117712975,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":26,"op":37,"st":26,"bm":0}]},{"id":"comp_5","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":260,"op":380,"st":260,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":250,"op":370,"st":250,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":240,"op":360,"st":240,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":230,"op":350,"st":230,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":220,"op":340,"st":220,"bm":0},{"ddd":0,"ind":6,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":210,"op":330,"st":210,"bm":0},{"ddd":0,"ind":7,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":200,"op":320,"st":200,"bm":0},{"ddd":0,"ind":8,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":190,"op":310,"st":190,"bm":0},{"ddd":0,"ind":9,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":180,"op":300,"st":180,"bm":0},{"ddd":0,"ind":10,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":170,"op":290,"st":170,"bm":0},{"ddd":0,"ind":11,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":160,"op":280,"st":160,"bm":0},{"ddd":0,"ind":12,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":150,"op":270,"st":150,"bm":0},{"ddd":0,"ind":13,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":140,"op":260,"st":140,"bm":0},{"ddd":0,"ind":14,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":130,"op":250,"st":130,"bm":0},{"ddd":0,"ind":15,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":120,"op":240,"st":120,"bm":0},{"ddd":0,"ind":16,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":110,"op":230,"st":110,"bm":0},{"ddd":0,"ind":17,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":100,"op":220,"st":100,"bm":0},{"ddd":0,"ind":18,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":90,"op":210,"st":90,"bm":0},{"ddd":0,"ind":19,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":80,"op":200,"st":80,"bm":0},{"ddd":0,"ind":20,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":70,"op":190,"st":70,"bm":0},{"ddd":0,"ind":21,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":60,"op":180,"st":60,"bm":0},{"ddd":0,"ind":22,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":50,"op":170,"st":50,"bm":0},{"ddd":0,"ind":23,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":40,"op":160,"st":40,"bm":0},{"ddd":0,"ind":24,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":30,"op":150,"st":30,"bm":0},{"ddd":0,"ind":25,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":20,"op":140,"st":20,"bm":0},{"ddd":0,"ind":26,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":10,"op":130,"st":10,"bm":0},{"ddd":0,"ind":27,"ty":0,"nm":"Comp 5","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":0,"op":120,"st":0,"bm":0}]},{"id":"comp_6","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[112.246,110.257,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[1,1,1],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":-114,"s":[98.768,103.754,100]},{"i":{"x":[0,0,0.833],"y":[1,1,10.871]},"o":{"x":[0.01,0.01,0],"y":[0.763,0.726,0]},"t":0,"s":[114.951,120.754,100]},{"t":120,"s":[240.608,252.754,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[332.491,316.513],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.305219014486,0.688472254136,0.234222995534,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-111,"s":[0.388235300779,0.72549021244,0.980392158031,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-110,"s":[0.127425000072,0.49490109086,0.772644639015,1]},{"i":{"x":[0.833],"y":[0.719]},"o":{"x":[0.167],"y":[0.281]},"t":0,"s":[0.110593900084,0.411896556616,0.639625310898,1]},{"t":120,"s":[0.482352942228,0.776470601559,0.988235294819,1]}],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[112.246,110.257],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Avion3bis","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,340,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":30,"op":150,"st":30,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 3","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[-10.253,104.16,0],"ix":1},"s":{"a":0,"k":[172.602,172.295,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-127.99,0],[-42.031,-58.918],[-4.397,-12.136],[-0.816,-3.38],[0,-18.878],[127.99,0],[0,128.218]],"o":[[77.799,0],[6.374,8.934],[3.324,9.175],[4.245,17.571],[0,128.218],[-127.99,0],[0,-128.218]],"v":[[0,-232.16],[188.675,-134.838],[218.297,-75.726],[225.253,-54.802],[231.747,0],[0,232.16],[-231.747,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.305219014486,0.688472254136,0.234222995534,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.481309718712,0.587909892961,0.470802127614,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-10.253,104.16],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[90,90],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":420,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"mer","tt":1,"refId":"comp_5","sr":1,"ks":{"o":{"a":0,"k":98,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,700,0],"ix":2},"a":{"a":0,"k":[400,80,0],"ix":1},"s":{"a":0,"k":[495,230,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":-85,"op":167,"st":-85,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 2","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[-10.253,104.16,0],"ix":1},"s":{"a":0,"k":[172.602,172.295,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[{"i":[[-127.99,0],[0,-128.218],[127.99,0],[0,128.218]],"o":[[127.99,0],[0,128.218],[-127.99,0],[0,-128.218]],"v":[[0,-232.16],[231.747,0],[0,232.16],[-231.747,0]],"c":true}]},{"t":80,"s":[{"i":[[-127.99,0],[0,-128.218],[127.99,0],[0,128.218]],"o":[[127.99,0],[0,128.218],[-127.99,0],[0,-128.218]],"v":[[0,-232.16],[231.747,0],[0,232.16],[-231.747,0]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.305219014486,0.688472254136,0.234222995534,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.481309718712,0.587909892961,0.470802127614,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-10.253,104.16],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[90,90],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":420,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"ciel","tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,293,0],"ix":2},"a":{"a":0,"k":[0.905,306.117,0],"ix":1},"s":{"a":0,"k":[104.324,268.768,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[801.81,192.235],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"gf","o":{"a":0,"k":100,"ix":10},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.231,0.573,0.855,0.38,0.46,0.71,0.917,0.759,0.688,0.848,0.979],"ix":9}},"s":{"a":0,"k":[0,-100],"ix":5},"e":{"a":0,"k":[0,100],"ix":6},"t":1,"nm":"Gradient Fill 1","mn":"ADBE Vector Graphic - G-Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0.905,306.117],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":450,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/public/lottie/solitour-auth-intro-image-prev.json b/public/lottie/solitour-auth-intro-image-prev.json new file mode 100644 index 00000000..da2b27f7 --- /dev/null +++ b/public/lottie/solitour-auth-intro-image-prev.json @@ -0,0 +1 @@ +{"nm":"Main Scene","ddd":0,"h":269,"w":312,"meta":{"g":"@lottiefiles/creator 1.21.0"},"layers":[{"ty":0,"nm":"Nested Scene 1","sr":1,"st":0,"op":60,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[156,36]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[156,36],"t":0},{"o":{"x":0,"y":0},"i":{"x":1,"y":1},"s":[156,76],"t":30},{"s":[156,36],"t":60}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"w":312,"h":269,"refId":"precomp_newScene_1734cac1-99d5-4d07-bcff-65e57acff008","ind":1},{"ty":4,"nm":"Shape Layer - SVG","sr":1,"st":0,"op":60,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[],"ind":2}],"v":"5.7.0","fr":30,"op":60,"ip":0,"assets":[{"nm":"Nested Scene 1","id":"precomp_newScene_1734cac1-99d5-4d07-bcff-65e57acff008","layers":[{"ty":4,"nm":"Shape Layer - SVG","sr":1,"st":0,"op":60,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[53.5,6.5]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[156.165,31.0907]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Group 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[1.668,-1.0200000000000014],[0,0],[0,1.8720000000000008],[0,0]],"o":[[0,0],[0,0],[0,2.3760000000000003],[0,0],[1.572,-0.9240000000000004],[0,0],[0,0]],"v":[[2.724,2.024],[3.696,2.024],[3.696,4.004],[1.176,9.704],[0.384,8.768],[2.724,4.004],[2.724,2.024]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[-1.4880000000000004,-0.8159999999999998],[0,0],[0,2.34],[0,0]],"o":[[0,0],[0,0],[0,1.8479999999999999],[0,0],[-1.6800000000000002,-0.9599999999999991],[0,0],[0,0]],"v":[[2.952,2.024],[3.936,2.024],[3.936,3.92],[6.12,8.408],[5.376,9.404],[2.952,3.92],[2.952,2.024]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 3","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[8.712,1.028],[9.912,1.028],[9.912,11.996],[8.712,11.996],[8.712,1.028]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 4","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[7.152,5.372],[9.132,5.372],[9.132,6.392],[7.152,6.392],[7.152,5.372]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 5","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[6.312,1.232],[7.5,1.232],[7.5,11.468],[6.312,11.468],[6.312,1.232]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 6","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[11.5911,9.68],[21.5271,9.68],[21.5271,10.712],[11.5911,10.712],[11.5911,9.68]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 7","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.9111,7.448],[17.1591,7.448],[17.1591,10.1],[15.9111,10.1],[15.9111,7.448]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 8","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[12.7551,1.796],[20.3391,1.796],[20.3391,5.264],[14.0271,5.264],[14.0271,7.304],[12.7791,7.304],[12.7791,4.268],[19.0911,4.268],[19.0911,2.804],[12.7551,2.804],[12.7551,1.796]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 9","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[12.7791,6.788],[20.5911,6.788],[20.5911,7.808],[12.7791,7.808],[12.7791,6.788]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 10","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[22.6181,6.488],[32.5541,6.488],[32.5541,7.496],[22.6181,7.496],[22.6181,6.488]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 11","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[27.0341,7.136],[28.3061,7.136],[28.3061,9.572],[27.0341,9.572],[27.0341,7.136]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 12","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[23.8421,10.748],[31.4621,10.748],[31.4621,11.78],[23.8421,11.78],[23.8421,10.748]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 13","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[23.8421,8.54],[25.1021,8.54],[25.1021,11.024],[23.8421,11.024],[23.8421,8.54]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 14","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-1.38],[2.34,0],[0,1.3679999999999999],[-2.34,0]],"o":[[2.34,0],[0,1.3679999999999999],[-2.34,0],[0,-1.38],[0,0]],"v":[[27.5741,1.268],[31.4621,3.512],[27.5741,5.744],[23.6861,3.512],[27.5741,1.268]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 15","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-0.7799999999999998],[-1.5360000000000014,0],[0,0.7680000000000002],[1.5479999999999983,0]],"o":[[-1.5360000000000014,0],[0,0.7680000000000002],[1.5479999999999983,0],[0,-0.7799999999999998],[0,0]],"v":[[27.5741,2.276],[25.0301,3.512],[27.5741,4.724],[30.1181,3.512],[27.5741,2.276]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 16","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[44.5245,5.3],[46.5045,5.3],[46.5045,6.344],[44.5245,6.344],[44.5245,5.3]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 17","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[43.6005,1.016],[44.8605,1.016],[44.8605,11.984],[43.6005,11.984],[43.6005,1.016]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 18","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[36.7485,2.084],[37.9965,2.084],[37.9965,8.888],[36.7485,8.888],[36.7485,2.084]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 19","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[-1.7879999999999967,0.3600000000000003],[0,0],[1.6439999999999984,0],[0,0],[0,0]],"o":[[0,0],[1.5960000000000036,0],[0,0],[-1.847999999999999,0.38399999999999856],[0,0],[0,0],[0,0]],"v":[[36.7485,8.204],[37.6485,8.204],[42.7125,7.736],[42.8565,8.768],[37.6485,9.26],[36.7485,9.26],[36.7485,8.204]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 20","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[47.3916,6.044],[57.3276,6.044],[57.3276,6.98],[47.3916,6.98],[47.3916,6.044]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 21","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[48.5436,7.712],[56.1156,7.712],[56.1156,10.172],[49.8156,10.172],[49.8156,11.3],[48.5676,11.3],[48.5676,9.344],[54.8796,9.344],[54.8796,8.588],[48.5436,8.588],[48.5436,7.712]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 22","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[48.5676,11],[56.4516,11],[56.4516,11.876],[48.5676,11.876],[48.5676,11]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 23","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[48.6396,1.292],[56.0796,1.292],[56.0796,3.704],[49.8996,3.704],[49.8996,4.76],[48.6516,4.76],[48.6516,2.888],[54.8436,2.888],[54.8436,2.156],[48.6396,2.156],[48.6396,1.292]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 24","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[48.6516,4.484],[56.2836,4.484],[56.2836,5.36],[48.6516,5.36],[48.6516,4.484]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 25","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[1.955999999999996,-0.5759999999999996],[0,0],[0,1.3200000000000003],[0,0]],"o":[[0,0],[0,0],[0,1.8600000000000003],[0,0],[1.6920000000000002,-0.47999999999999954],[0,0],[0,0]],"v":[[63.7419,2.84],[64.7619,2.84],[64.7619,3.284],[61.6779,7.292],[61.0899,6.308],[63.7419,3.284],[63.7419,2.84]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 26","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[-1.6800000000000068,-0.4559999999999995],[0,0],[0,1.7519999999999998],[0,0]],"o":[[0,0],[0,0],[0,1.2120000000000006],[0,0],[-1.9680000000000035,-0.5520000000000005],[0,0],[0,0]],"v":[[63.9699,2.84],[65.0019,2.84],[65.0019,3.284],[67.6059,6.116],[67.0419,7.088],[63.9699,3.284],[63.9699,2.84]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 27","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[61.4379,2.204],[67.3059,2.204],[67.3059,3.2],[61.4379,3.2],[61.4379,2.204]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 28","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[63.7419,0.98],[65.0019,0.98],[65.0019,2.648],[63.7419,2.648],[63.7419,0.98]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 29","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[68.4339,1.028],[69.6939,1.028],[69.6939,7.34],[68.4339,7.34],[68.4339,1.028]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 30","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[69.3459,3.62],[71.2419,3.62],[71.2419,4.664],[69.3459,4.664],[69.3459,3.62]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 31","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[2.3640000000000043,-0.3600000000000012],[0,0],[0,1.1039999999999992],[0,0]],"o":[[0,0],[0,0],[0,1.7159999999999993],[0,0],[2.064000000000007,-0.28800000000000026],[0,0],[0,0]],"v":[[65.5659,8.288],[66.6339,8.288],[66.6339,8.564],[62.6259,11.96],[62.1579,11],[65.5659,8.564],[65.5659,8.288]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 32","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[-2.0279999999999916,-0.3000000000000007],[0,0],[0,1.6799999999999997],[0,0]],"o":[[0,0],[0,0],[0,1.08],[0,0],[-2.3640000000000043,-0.347999999999999],[0,0],[0,0]],"v":[[65.8299,8.288],[66.8979,8.288],[66.8979,8.564],[70.2939,11.012],[69.8379,11.972],[65.8299,8.564],[65.8299,8.288]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 33","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[62.6019,7.88],[69.8619,7.88],[69.8619,8.876],[62.6019,8.876],[62.6019,7.88]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 34","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[73.461,4.172],[80.973,4.172],[80.973,5.18],[73.461,5.18],[73.461,4.172]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 35","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[72.165,6.5],[82.101,6.5],[82.101,7.52],[72.165,7.52],[72.165,6.5]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 36","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[73.461,1.424],[74.709,1.424],[74.709,4.676],[73.461,4.676],[73.461,1.424]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 37","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[73.377,10.724],[81.033,10.724],[81.033,11.744],[73.377,11.744],[73.377,10.724]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 38","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[73.377,8.516],[74.625,8.516],[74.625,11],[73.377,11],[73.377,8.516]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 39","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[90.8314,3.38],[93.9994,3.38],[93.9994,4.4],[90.8314,4.4],[90.8314,3.38]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 40","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[90.8314,6.824],[93.9994,6.824],[93.9994,7.844],[90.8314,7.844],[90.8314,6.824]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 41","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-2.364],[1.6200000000000045,0],[0,2.3640000000000008],[-1.6200000000000045,0]],"o":[[1.6200000000000045,0],[0,2.3640000000000008],[-1.6200000000000045,0],[0,-2.364],[0,0]],"v":[[88.8634,1.832],[91.6354,5.696],[88.8634,9.572],[86.0914,5.696],[88.8634,1.832]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 42","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-1.7039999999999997],[-0.9359999999999928,0],[0,1.7160000000000002],[0.9480000000000075,0]],"o":[[-0.9359999999999928,0],[0,1.7160000000000002],[0.9480000000000075,0],[0,-1.7039999999999997],[0,0]],"v":[[88.8634,2.972],[87.2794,5.696],[88.8634,8.444],[90.4474,5.696],[88.8634,2.972]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 43","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[93.7594,1.016],[95.0074,1.016],[95.0074,12.008],[93.7594,12.008],[93.7594,1.016]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 44","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[105.038,1.028],[106.226,1.028],[106.226,7.94],[105.038,7.94],[105.038,1.028]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 45","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[103.442,3.884],[105.374,3.884],[105.374,4.916],[103.442,4.916],[103.442,3.884]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 46","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[102.722,1.244],[103.898,1.244],[103.898,7.556],[102.722,7.556],[102.722,1.244]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 47","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[96.8904,2.252],[102.338,2.252],[102.338,3.236],[96.8904,3.236],[96.8904,2.252]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 48","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-1.1279999999999992],[1.3795999999999964,0],[0,1.1400000000000006],[-1.3680000000000092,0]],"o":[[1.3795999999999964,0],[0,1.1400000000000006],[-1.3680000000000092,0],[0,-1.1279999999999992],[0,0]],"v":[[99.6264,3.704],[101.978,5.6],[99.6264,7.496],[97.2744,5.6],[99.6264,3.704]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 49","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-0.5999999999999996],[-0.7319999999999993,0],[0,0.6120000000000001],[0.7316000000000003,0]],"o":[[-0.7319999999999993,0],[0,0.6120000000000001],[0.7316000000000003,0],[0,-0.5999999999999996],[0,0]],"v":[[99.6264,4.628],[98.4024,5.6],[99.6264,6.584],[100.85,5.6],[99.6264,4.628]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 50","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[99.0024,1.124],[100.238,1.124],[100.238,2.876],[99.0024,2.876],[99.0024,1.124]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 51","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-1.2479999999999993],[2.3160000000000025,0],[0,1.2360000000000007],[-2.3160000000000025,0]],"o":[[2.3160000000000025,0],[0,1.2360000000000007],[-2.3160000000000025,0],[0,-1.2479999999999993],[0,0]],"v":[[102.578,8.096],[106.286,10.04],[102.578,11.984],[98.8704,10.04],[102.578,8.096]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 52","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-0.6599999999999984],[-1.5840000000000032,0],[0,0.6480000000000015],[1.5720000000000027,0]],"o":[[-1.5840000000000032,0],[0,0.6480000000000015],[1.5720000000000027,0],[0,-0.6599999999999984],[0,0]],"v":[[102.578,9.044],[100.118,10.04],[102.578,11.036],[105.026,10.04],[102.578,9.044]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1},{"ty":4,"nm":"Shape Layer 1","sr":1,"st":0,"op":60,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[156,36]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[156,36]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Group 2","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 53","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-14.8966],[-14.897000000000006,0],[0,0],[0,0],[-0.28899999999998727,1.7348999999999961],[0,0],[0,0],[0,14.896500000000003],[14.89700000000002,0],[0,0]],"o":[[-14.897000000000006,0],[0,14.896500000000003],[0,0],[0,0],[1.0560000000000116,1.406499999999994],[0,0],[0,0],[14.89700000000002,0],[0,-14.8966],[0,0],[0,0]],"v":[[113.973,5],[87,31.9726],[113.973,58.9451],[156.75,58.9451],[162.196,66.1992],[165.768,65.3275],[166.833,58.9451],[197.027,58.9451],[224,31.9726],[197.027,5],[113.973,5]]}}},{"ty":"gf","bm":0,"hd":false,"nm":"Fill","e":{"a":0,"k":[268.847,67.2647]},"g":{"p":2,"k":{"a":0,"k":[0,0.6627450980392157,0.8980392156862745,0.8235294117647058,1,0,0.7058823529411765,0.5333333333333333]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":0,"k":[61.5,-16.4998]},"r":2,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2}]}]} \ No newline at end of file diff --git a/public/lottie/solitour-auth-intro-image.json b/public/lottie/solitour-auth-intro-image.json new file mode 100644 index 00000000..772b8557 --- /dev/null +++ b/public/lottie/solitour-auth-intro-image.json @@ -0,0 +1 @@ +{"nm":"Main Scene","ddd":0,"h":269,"w":312,"meta":{"g":"@lottiefiles/creator 1.25.0"},"layers":[{"ty":0,"nm":" Main Scene","sr":1,"st":0,"op":60,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[156,36]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[156.5,41]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"w":312,"h":269,"refId":"precomp_Main Scene_c18a37e8-5831-40da-afe0-b658a67d036d","ind":1}],"v":"5.7.0","fr":30,"op":60,"ip":0,"assets":[{"nm":"Nested Scene 1","id":"precomp_newScene_1734cac1-99d5-4d07-bcff-65e57acff008_2121754b-4d8a-469c-ab7f-5b9e8f103569","layers":[{"ty":4,"nm":"Shape Layer - SVG","sr":1,"st":0,"op":60,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[53.5,6.5]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[156.165,31.0907]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Group 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[1.668,-1.0200000000000014],[0,0],[0,1.8720000000000008],[0,0]],"o":[[0,0],[0,0],[0,2.3760000000000003],[0,0],[1.572,-0.9240000000000004],[0,0],[0,0]],"v":[[2.724,2.024],[3.696,2.024],[3.696,4.004],[1.176,9.704],[0.384,8.768],[2.724,4.004],[2.724,2.024]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[-1.4880000000000004,-0.8159999999999998],[0,0],[0,2.34],[0,0]],"o":[[0,0],[0,0],[0,1.8479999999999999],[0,0],[-1.6800000000000002,-0.9599999999999991],[0,0],[0,0]],"v":[[2.952,2.024],[3.936,2.024],[3.936,3.92],[6.12,8.408],[5.376,9.404],[2.952,3.92],[2.952,2.024]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 3","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[8.712,1.028],[9.912,1.028],[9.912,11.996],[8.712,11.996],[8.712,1.028]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 4","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[7.152,5.372],[9.132,5.372],[9.132,6.392],[7.152,6.392],[7.152,5.372]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 5","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[6.312,1.232],[7.5,1.232],[7.5,11.468],[6.312,11.468],[6.312,1.232]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 6","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[11.5911,9.68],[21.5271,9.68],[21.5271,10.712],[11.5911,10.712],[11.5911,9.68]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 7","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.9111,7.448],[17.1591,7.448],[17.1591,10.1],[15.9111,10.1],[15.9111,7.448]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 8","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[12.7551,1.796],[20.3391,1.796],[20.3391,5.264],[14.0271,5.264],[14.0271,7.304],[12.7791,7.304],[12.7791,4.268],[19.0911,4.268],[19.0911,2.804],[12.7551,2.804],[12.7551,1.796]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 9","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[12.7791,6.788],[20.5911,6.788],[20.5911,7.808],[12.7791,7.808],[12.7791,6.788]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 10","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[22.6181,6.488],[32.5541,6.488],[32.5541,7.496],[22.6181,7.496],[22.6181,6.488]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 11","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[27.0341,7.136],[28.3061,7.136],[28.3061,9.572],[27.0341,9.572],[27.0341,7.136]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 12","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[23.8421,10.748],[31.4621,10.748],[31.4621,11.78],[23.8421,11.78],[23.8421,10.748]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 13","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[23.8421,8.54],[25.1021,8.54],[25.1021,11.024],[23.8421,11.024],[23.8421,8.54]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 14","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-1.38],[2.34,0],[0,1.3679999999999999],[-2.34,0]],"o":[[2.34,0],[0,1.3679999999999999],[-2.34,0],[0,-1.38],[0,0]],"v":[[27.5741,1.268],[31.4621,3.512],[27.5741,5.744],[23.6861,3.512],[27.5741,1.268]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 15","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-0.7799999999999998],[-1.5360000000000014,0],[0,0.7680000000000002],[1.5479999999999983,0]],"o":[[-1.5360000000000014,0],[0,0.7680000000000002],[1.5479999999999983,0],[0,-0.7799999999999998],[0,0]],"v":[[27.5741,2.276],[25.0301,3.512],[27.5741,4.724],[30.1181,3.512],[27.5741,2.276]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 16","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[44.5245,5.3],[46.5045,5.3],[46.5045,6.344],[44.5245,6.344],[44.5245,5.3]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 17","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[43.6005,1.016],[44.8605,1.016],[44.8605,11.984],[43.6005,11.984],[43.6005,1.016]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 18","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[36.7485,2.084],[37.9965,2.084],[37.9965,8.888],[36.7485,8.888],[36.7485,2.084]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 19","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[-1.7879999999999967,0.3600000000000003],[0,0],[1.6439999999999984,0],[0,0],[0,0]],"o":[[0,0],[1.5960000000000036,0],[0,0],[-1.847999999999999,0.38399999999999856],[0,0],[0,0],[0,0]],"v":[[36.7485,8.204],[37.6485,8.204],[42.7125,7.736],[42.8565,8.768],[37.6485,9.26],[36.7485,9.26],[36.7485,8.204]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 20","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[47.3916,6.044],[57.3276,6.044],[57.3276,6.98],[47.3916,6.98],[47.3916,6.044]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 21","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[48.5436,7.712],[56.1156,7.712],[56.1156,10.172],[49.8156,10.172],[49.8156,11.3],[48.5676,11.3],[48.5676,9.344],[54.8796,9.344],[54.8796,8.588],[48.5436,8.588],[48.5436,7.712]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 22","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[48.5676,11],[56.4516,11],[56.4516,11.876],[48.5676,11.876],[48.5676,11]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 23","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[48.6396,1.292],[56.0796,1.292],[56.0796,3.704],[49.8996,3.704],[49.8996,4.76],[48.6516,4.76],[48.6516,2.888],[54.8436,2.888],[54.8436,2.156],[48.6396,2.156],[48.6396,1.292]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 24","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[48.6516,4.484],[56.2836,4.484],[56.2836,5.36],[48.6516,5.36],[48.6516,4.484]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 25","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[1.955999999999996,-0.5759999999999996],[0,0],[0,1.3200000000000003],[0,0]],"o":[[0,0],[0,0],[0,1.8600000000000003],[0,0],[1.6920000000000002,-0.47999999999999954],[0,0],[0,0]],"v":[[63.7419,2.84],[64.7619,2.84],[64.7619,3.284],[61.6779,7.292],[61.0899,6.308],[63.7419,3.284],[63.7419,2.84]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 26","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[-1.6800000000000068,-0.4559999999999995],[0,0],[0,1.7519999999999998],[0,0]],"o":[[0,0],[0,0],[0,1.2120000000000006],[0,0],[-1.9680000000000035,-0.5520000000000005],[0,0],[0,0]],"v":[[63.9699,2.84],[65.0019,2.84],[65.0019,3.284],[67.6059,6.116],[67.0419,7.088],[63.9699,3.284],[63.9699,2.84]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 27","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[61.4379,2.204],[67.3059,2.204],[67.3059,3.2],[61.4379,3.2],[61.4379,2.204]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 28","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[63.7419,0.98],[65.0019,0.98],[65.0019,2.648],[63.7419,2.648],[63.7419,0.98]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 29","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[68.4339,1.028],[69.6939,1.028],[69.6939,7.34],[68.4339,7.34],[68.4339,1.028]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 30","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[69.3459,3.62],[71.2419,3.62],[71.2419,4.664],[69.3459,4.664],[69.3459,3.62]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 31","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[2.3640000000000043,-0.3600000000000012],[0,0],[0,1.1039999999999992],[0,0]],"o":[[0,0],[0,0],[0,1.7159999999999993],[0,0],[2.064000000000007,-0.28800000000000026],[0,0],[0,0]],"v":[[65.5659,8.288],[66.6339,8.288],[66.6339,8.564],[62.6259,11.96],[62.1579,11],[65.5659,8.564],[65.5659,8.288]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 32","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[-2.0279999999999916,-0.3000000000000007],[0,0],[0,1.6799999999999997],[0,0]],"o":[[0,0],[0,0],[0,1.08],[0,0],[-2.3640000000000043,-0.347999999999999],[0,0],[0,0]],"v":[[65.8299,8.288],[66.8979,8.288],[66.8979,8.564],[70.2939,11.012],[69.8379,11.972],[65.8299,8.564],[65.8299,8.288]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 33","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[62.6019,7.88],[69.8619,7.88],[69.8619,8.876],[62.6019,8.876],[62.6019,7.88]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 34","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[73.461,4.172],[80.973,4.172],[80.973,5.18],[73.461,5.18],[73.461,4.172]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 35","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[72.165,6.5],[82.101,6.5],[82.101,7.52],[72.165,7.52],[72.165,6.5]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 36","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[73.461,1.424],[74.709,1.424],[74.709,4.676],[73.461,4.676],[73.461,1.424]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 37","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[73.377,10.724],[81.033,10.724],[81.033,11.744],[73.377,11.744],[73.377,10.724]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 38","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[73.377,8.516],[74.625,8.516],[74.625,11],[73.377,11],[73.377,8.516]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 39","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[90.8314,3.38],[93.9994,3.38],[93.9994,4.4],[90.8314,4.4],[90.8314,3.38]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 40","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[90.8314,6.824],[93.9994,6.824],[93.9994,7.844],[90.8314,7.844],[90.8314,6.824]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 41","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-2.364],[1.6200000000000045,0],[0,2.3640000000000008],[-1.6200000000000045,0]],"o":[[1.6200000000000045,0],[0,2.3640000000000008],[-1.6200000000000045,0],[0,-2.364],[0,0]],"v":[[88.8634,1.832],[91.6354,5.696],[88.8634,9.572],[86.0914,5.696],[88.8634,1.832]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 42","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-1.7039999999999997],[-0.9359999999999928,0],[0,1.7160000000000002],[0.9480000000000075,0]],"o":[[-0.9359999999999928,0],[0,1.7160000000000002],[0.9480000000000075,0],[0,-1.7039999999999997],[0,0]],"v":[[88.8634,2.972],[87.2794,5.696],[88.8634,8.444],[90.4474,5.696],[88.8634,2.972]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 43","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[93.7594,1.016],[95.0074,1.016],[95.0074,12.008],[93.7594,12.008],[93.7594,1.016]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 44","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[105.038,1.028],[106.226,1.028],[106.226,7.94],[105.038,7.94],[105.038,1.028]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 45","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[103.442,3.884],[105.374,3.884],[105.374,4.916],[103.442,4.916],[103.442,3.884]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 46","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[102.722,1.244],[103.898,1.244],[103.898,7.556],[102.722,7.556],[102.722,1.244]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 47","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[96.8904,2.252],[102.338,2.252],[102.338,3.236],[96.8904,3.236],[96.8904,2.252]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 48","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-1.1279999999999992],[1.3795999999999964,0],[0,1.1400000000000006],[-1.3680000000000092,0]],"o":[[1.3795999999999964,0],[0,1.1400000000000006],[-1.3680000000000092,0],[0,-1.1279999999999992],[0,0]],"v":[[99.6264,3.704],[101.978,5.6],[99.6264,7.496],[97.2744,5.6],[99.6264,3.704]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 49","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-0.5999999999999996],[-0.7319999999999993,0],[0,0.6120000000000001],[0.7316000000000003,0]],"o":[[-0.7319999999999993,0],[0,0.6120000000000001],[0.7316000000000003,0],[0,-0.5999999999999996],[0,0]],"v":[[99.6264,4.628],[98.4024,5.6],[99.6264,6.584],[100.85,5.6],[99.6264,4.628]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 50","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[99.0024,1.124],[100.238,1.124],[100.238,2.876],[99.0024,2.876],[99.0024,1.124]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 51","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-1.2479999999999993],[2.3160000000000025,0],[0,1.2360000000000007],[-2.3160000000000025,0]],"o":[[2.3160000000000025,0],[0,1.2360000000000007],[-2.3160000000000025,0],[0,-1.2479999999999993],[0,0]],"v":[[102.578,8.096],[106.286,10.04],[102.578,11.984],[98.8704,10.04],[102.578,8.096]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 52","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-0.6599999999999984],[-1.5840000000000032,0],[0,0.6480000000000015],[1.5720000000000027,0]],"o":[[-1.5840000000000032,0],[0,0.6480000000000015],[1.5720000000000027,0],[0,-0.6599999999999984],[0,0]],"v":[[102.578,9.044],[100.118,10.04],[102.578,11.036],[105.026,10.04],[102.578,9.044]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1},{"ty":4,"nm":"Shape Layer 1","sr":1,"st":0,"op":60,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[156,36]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[156,36]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Group 2","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 53","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-14.8966],[-14.897000000000006,0],[0,0],[0,0],[-0.28899999999998727,1.7348999999999961],[0,0],[0,0],[0,14.896500000000003],[14.89700000000002,0],[0,0]],"o":[[-14.897000000000006,0],[0,14.896500000000003],[0,0],[0,0],[1.0560000000000116,1.406499999999994],[0,0],[0,0],[14.89700000000002,0],[0,-14.8966],[0,0],[0,0]],"v":[[113.973,5],[87,31.9726],[113.973,58.9451],[156.75,58.9451],[162.196,66.1992],[165.768,65.3275],[166.833,58.9451],[197.027,58.9451],[224,31.9726],[197.027,5],[113.973,5]]}}},{"ty":"gf","bm":0,"hd":false,"nm":"Fill","e":{"a":0,"k":[268.847,67.2647]},"g":{"p":2,"k":{"a":0,"k":[0,0.6627450980392157,0.8980392156862745,0.8235294117647058,1,0,0.7058823529411765,0.5333333333333333]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":0,"k":[61.5,-16.4998]},"r":2,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2}]},{"nm":"Main Scene","id":"precomp_Main Scene_c18a37e8-5831-40da-afe0-b658a67d036d","layers":[{"ty":0,"nm":"Nested Scene 1","sr":1,"st":0,"op":60,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[156,36]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[156,36],"t":0},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[156,76],"t":30},{"s":[156,36],"t":60}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"w":312,"h":269,"refId":"precomp_newScene_1734cac1-99d5-4d07-bcff-65e57acff008_2121754b-4d8a-469c-ab7f-5b9e8f103569","ind":1},{"ty":4,"nm":"Shape Layer - SVG","sr":1,"st":0,"op":60,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[],"ind":2}]}]} \ No newline at end of file diff --git a/public/lottie/solitour-intro-image.json b/public/lottie/solitour-intro-image.json new file mode 100644 index 00000000..b966dcb2 --- /dev/null +++ b/public/lottie/solitour-intro-image.json @@ -0,0 +1 @@ +{"nm":"Main Scene","ddd":0,"h":245,"w":275,"meta":{"g":"@lottiefiles/creator 1.16.0"},"layers":[{"ty":0,"nm":"Nested Scene 1","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[162,62]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[162,67],"t":0},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[162,51],"t":72},{"s":[162,67],"t":149}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"w":275,"h":245,"refId":"precomp_newScene_ada9f6a6-4692-4647-90b2-0f1048dea5b1","ind":1}],"v":"5.7.0","fr":30,"op":150,"ip":0,"assets":[{"nm":"Nested Scene 1","id":"precomp_newScene_ada9f6a6-4692-4647-90b2-0f1048dea5b1","layers":[{"ty":4,"nm":"Shape Layer 1","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[68.5,27]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[162,57]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Group 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[1.6680000000000028,-1.0199999999999996],[0,0],[0,1.8719999999999999],[0,0]],"o":[[0,0],[0,0],[0,2.3759999999999977],[0,0],[1.5719999999999992,-0.9239999999999995],[0,0],[0,0]],"v":[[17.724,23.024],[18.696,23.024],[18.696,25.004],[16.176,30.704],[15.384,29.768],[17.724,25.004],[17.724,23.024]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[-1.4879999999999995,-0.8160000000000025],[0,0],[0,2.34],[0,0]],"o":[[0,0],[0,0],[0,1.847999999999999],[0,0],[-1.6799999999999997,-0.9600000000000009],[0,0],[0,0]],"v":[[17.952,23.024],[18.936,23.024],[18.936,24.92],[21.12,29.408],[20.376,30.404],[17.952,24.92],[17.952,23.024]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 3","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[23.712,22.028],[24.912,22.028],[24.912,32.996],[23.712,32.996],[23.712,22.028]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 4","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[22.152,26.372],[24.132,26.372],[24.132,27.392],[22.152,27.392],[22.152,26.372]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 5","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[21.312,22.232],[22.5,22.232],[22.5,32.468],[21.312,32.468],[21.312,22.232]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 6","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[26.5911,30.68],[36.5271,30.68],[36.5271,31.712],[26.5911,31.712],[26.5911,30.68]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 7","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[30.9111,28.448],[32.1591,28.448],[32.1591,31.1],[30.9111,31.1],[30.9111,28.448]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 8","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[27.7551,22.796],[35.3391,22.796],[35.3391,26.264],[29.0271,26.264],[29.0271,28.304],[27.7791,28.304],[27.7791,25.268],[34.0911,25.268],[34.0911,23.804],[27.7551,23.804],[27.7551,22.796]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 9","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[27.7791,27.788],[35.5911,27.788],[35.5911,28.808],[27.7791,28.808],[27.7791,27.788]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 10","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[37.6181,27.488],[47.5541,27.488],[47.5541,28.496],[37.6181,28.496],[37.6181,27.488]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 11","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[42.0341,28.136],[43.3061,28.136],[43.3061,30.572],[42.0341,30.572],[42.0341,28.136]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 12","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[38.8421,31.748],[46.4621,31.748],[46.4621,32.78],[38.8421,32.78],[38.8421,31.748]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 13","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[38.8421,29.54],[40.1021,29.54],[40.1021,32.024],[38.8421,32.024],[38.8421,29.54]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 14","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-1.379999999999999],[2.3399999999999963,0],[0,1.3679999999999986],[-2.3400000000000034,0]],"o":[[2.3399999999999963,0],[0,1.3679999999999986],[-2.3400000000000034,0],[0,-1.379999999999999],[0,0]],"v":[[42.5741,22.268],[46.4621,24.512],[42.5741,26.744],[38.6861,24.512],[42.5741,22.268]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 15","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-0.7800000000000011],[-1.5360000000000014,0],[0,0.7680000000000007],[1.5480000000000018,0]],"o":[[-1.5360000000000014,0],[0,0.7680000000000007],[1.5480000000000018,0],[0,-0.7800000000000011],[0,0]],"v":[[42.5741,23.276],[40.0301,24.512],[42.5741,25.724],[45.1181,24.512],[42.5741,23.276]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 16","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[59.5245,26.3],[61.5045,26.3],[61.5045,27.344],[59.5245,27.344],[59.5245,26.3]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 17","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[58.6005,22.016],[59.8605,22.016],[59.8605,32.984],[58.6005,32.984],[58.6005,22.016]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 18","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[51.7485,23.084],[52.9965,23.084],[52.9965,29.888],[51.7485,29.888],[51.7485,23.084]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 19","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[-1.7879999999999967,0.35999999999999943],[0,0],[1.6439999999999984,0],[0,0],[0,0]],"o":[[0,0],[1.5960000000000036,0],[0,0],[-1.847999999999999,0.38400000000000034],[0,0],[0,0],[0,0]],"v":[[51.7485,29.204],[52.6485,29.204],[57.7125,28.736],[57.8565,29.768],[52.6485,30.26],[51.7485,30.26],[51.7485,29.204]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 20","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[62.3916,27.044],[72.3276,27.044],[72.3276,27.98],[62.3916,27.98],[62.3916,27.044]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 21","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[63.5436,28.712],[71.1156,28.712],[71.1156,31.172],[64.8156,31.172],[64.8156,32.3],[63.5676,32.3],[63.5676,30.344],[69.8796,30.344],[69.8796,29.588],[63.5436,29.588],[63.5436,28.712]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 22","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[63.5676,32],[71.4516,32],[71.4516,32.876],[63.5676,32.876],[63.5676,32]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 23","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[63.6396,22.292],[71.0796,22.292],[71.0796,24.704],[64.8996,24.704],[64.8996,25.76],[63.6516,25.76],[63.6516,23.888],[69.8436,23.888],[69.8436,23.156],[63.6396,23.156],[63.6396,22.292]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 24","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[63.6516,25.484],[71.2836,25.484],[71.2836,26.36],[63.6516,26.36],[63.6516,25.484]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 25","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[1.956000000000003,-0.5760000000000005],[0,0],[0,1.3200000000000003],[0,0]],"o":[[0,0],[0,0],[0,1.8599999999999994],[0,0],[1.691999999999993,-0.4800000000000004],[0,0],[0,0]],"v":[[78.7419,23.84],[79.7619,23.84],[79.7619,24.284],[76.6779,28.292],[76.0899,27.308],[78.7419,24.284],[78.7419,23.84]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 26","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[-1.6800000000000068,-0.4559999999999995],[0,0],[0,1.7520000000000024],[0,0]],"o":[[0,0],[0,0],[0,1.2119999999999997],[0,0],[-1.9680000000000035,-0.5519999999999996],[0,0],[0,0]],"v":[[78.9699,23.84],[80.0019,23.84],[80.0019,24.284],[82.6059,27.116],[82.0419,28.088],[78.9699,24.284],[78.9699,23.84]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 27","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[76.4379,23.204],[82.3059,23.204],[82.3059,24.2],[76.4379,24.2],[76.4379,23.204]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 28","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[78.7419,21.98],[80.0019,21.98],[80.0019,23.648],[78.7419,23.648],[78.7419,21.98]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 29","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[83.4339,22.028],[84.6939,22.028],[84.6939,28.34],[83.4339,28.34],[83.4339,22.028]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 30","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[84.3459,24.62],[86.2419,24.62],[86.2419,25.664],[84.3459,25.664],[84.3459,24.62]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 31","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[2.3640000000000043,-0.35999999999999943],[0,0],[0,1.1039999999999992],[0,0]],"o":[[0,0],[0,0],[0,1.716000000000001],[0,0],[2.064000000000007,-0.28800000000000026],[0,0],[0,0]],"v":[[80.5659,29.288],[81.6339,29.288],[81.6339,29.564],[77.6259,32.96],[77.1579,32],[80.5659,29.564],[80.5659,29.288]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 32","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[-2.0279999999999916,-0.3000000000000007],[0,0],[0,1.6799999999999997],[0,0]],"o":[[0,0],[0,0],[0,1.0799999999999983],[0,0],[-2.3640000000000043,-0.347999999999999],[0,0],[0,0]],"v":[[80.8299,29.288],[81.8979,29.288],[81.8979,29.564],[85.2939,32.012],[84.8379,32.972],[80.8299,29.564],[80.8299,29.288]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 33","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[77.6019,28.88],[84.8619,28.88],[84.8619,29.876],[77.6019,29.876],[77.6019,28.88]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 34","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[88.461,25.172],[95.973,25.172],[95.973,26.18],[88.461,26.18],[88.461,25.172]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 35","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[87.165,27.5],[97.101,27.5],[97.101,28.52],[87.165,28.52],[87.165,27.5]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 36","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[88.461,22.424],[89.709,22.424],[89.709,25.676],[88.461,25.676],[88.461,22.424]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 37","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[88.377,31.724],[96.033,31.724],[96.033,32.744],[88.377,32.744],[88.377,31.724]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 38","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[88.377,29.516],[89.625,29.516],[89.625,32],[88.377,32],[88.377,29.516]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 39","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[105.831,24.38],[108.999,24.38],[108.999,25.4],[105.831,25.4],[105.831,24.38]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 40","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[105.831,27.824],[108.999,27.824],[108.999,28.844],[105.831,28.844],[105.831,27.824]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 41","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-2.3640000000000008],[1.6200000000000045,0],[0,2.363999999999997],[-1.6200000000000045,0]],"o":[[1.6200000000000045,0],[0,2.363999999999997],[-1.6200000000000045,0],[0,-2.3640000000000008],[0,0]],"v":[[103.863,22.832],[106.635,26.696],[103.863,30.572],[101.091,26.696],[103.863,22.832]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 42","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-1.7040000000000006],[-0.9359999999999928,0],[0,1.7159999999999975],[0.9480000000000075,0]],"o":[[-0.9359999999999928,0],[0,1.7159999999999975],[0.9480000000000075,0],[0,-1.7040000000000006],[0,0]],"v":[[103.863,23.972],[102.279,26.696],[103.863,29.444],[105.447,26.696],[103.863,23.972]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 43","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[108.759,22.016],[110.007,22.016],[110.007,33.008],[108.759,33.008],[108.759,22.016]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 44","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[120.038,22.028],[121.226,22.028],[121.226,28.94],[120.038,28.94],[120.038,22.028]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 45","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[118.442,24.884],[120.374,24.884],[120.374,25.916],[118.442,25.916],[118.442,24.884]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 46","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[117.722,22.244],[118.898,22.244],[118.898,28.556],[117.722,28.556],[117.722,22.244]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 47","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.89,23.252],[117.338,23.252],[117.338,24.236],[111.89,24.236],[111.89,23.252]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 48","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-1.1280000000000001],[1.3799999999999955,0],[0,1.139999999999997],[-1.3680000000000092,0]],"o":[[1.3799999999999955,0],[0,1.139999999999997],[-1.3680000000000092,0],[0,-1.1280000000000001],[0,0]],"v":[[114.626,24.704],[116.978,26.6],[114.626,28.496],[112.274,26.6],[114.626,24.704]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 49","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-0.6000000000000014],[-0.7319999999999993,0],[0,0.6119999999999983],[0.7319999999999993,0]],"o":[[-0.7319999999999993,0],[0,0.6119999999999983],[0.7319999999999993,0],[0,-0.6000000000000014],[0,0]],"v":[[114.626,25.628],[113.402,26.6],[114.626,27.584],[115.85,26.6],[114.626,25.628]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 50","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[114.002,22.124],[115.238,22.124],[115.238,23.876],[114.002,23.876],[114.002,22.124]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 51","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-1.2479999999999976],[2.3160000000000025,0],[0,1.2360000000000042],[-2.3160000000000025,0]],"o":[[2.3160000000000025,0],[0,1.2360000000000042],[-2.3160000000000025,0],[0,-1.2479999999999976],[0,0]],"v":[[117.578,29.096],[121.286,31.04],[117.578,32.984],[113.87,31.04],[117.578,29.096]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 52","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-0.6600000000000001],[-1.5840000000000032,0],[0,0.6479999999999997],[1.5720000000000027,0]],"o":[[-1.5840000000000032,0],[0,0.6479999999999997],[1.5720000000000027,0],[0,-0.6600000000000001],[0,0]],"v":[[117.578,30.044],[115.118,31.04],[117.578,32.036],[120.026,31.04],[117.578,30.044]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1},{"ty":4,"nm":"Shape Layer 2","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[69,31.5]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[162,62]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Group 2","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 53","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-14.8966],[-14.8965,0],[0,0],[0,0],[-0.28950000000000387,1.7349000000000032],[0,0],[0,0],[0,14.896500000000003],[14.897000000000006,0],[0,0]],"o":[[-14.8965,0],[0,14.896500000000003],[0,0],[0,0],[1.0560000000000116,1.4066000000000045],[0,0],[0,0],[14.897000000000006,0],[0,-14.8966],[0,0],[0,0]],"v":[[26.9725,0],[0,26.9726],[26.9725,53.9451],[69.7499,53.9451],[75.1963,61.1996],[78.7685,60.3279],[79.8334,53.9451],[110.027,53.9451],[137,26.9726],[110.027,0],[26.9725,0]]}}},{"ty":"gf","bm":0,"hd":false,"nm":"Fill","e":{"a":0,"k":[181.847,62.2641]},"g":{"p":2,"k":{"a":0,"k":[0,0.6627450980392157,0.8980392156862745,0.8235294117647058,1,0,0.7058823529411765,0.5333333333333333]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":0,"k":[-25.5,-21.5]},"r":2,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2}]}]} \ No newline at end of file diff --git a/public/lottie/solitour_gathering_animation.json b/public/lottie/solitour_gathering_animation.json new file mode 100644 index 00000000..95bd4503 --- /dev/null +++ b/public/lottie/solitour_gathering_animation.json @@ -0,0 +1 @@ +{"nm":"Main Scene","ddd":0,"h":282,"w":423,"meta":{"g":"@lottiefiles/creator 1.16.0"},"layers":[{"ty":4,"nm":"Shape Layer - SVG","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,-0.5]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[],"ind":1},{"ty":0,"nm":"Nested Scene 1","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[102,204]},"s":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[20,14],"t":0},{"s":[100,100],"t":52}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":0.36,"y":1},"s":[211.5,241],"t":0},{"s":[63.5,95],"t":52}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[10],"t":0},{"s":[100],"t":52}]}},"w":500,"h":500,"refId":"precomp_newScene_414d3be5-af8f-4882-8fbd-08b6bc630467_a14c2d36-45f2-459b-8aad-7d2f0c4034da","ind":2},{"ty":0,"nm":"Nested Scene 2","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[415,187]},"s":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[10,10],"t":0},{"s":[100,100],"t":52}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":0.36,"y":1},"s":[211.5,241],"t":0},{"s":[376.5,78],"t":52}]},"r":{"a":0,"k":1},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[10],"t":0},{"s":[100],"t":52}]}},"w":500,"h":500,"refId":"precomp_newScene_d6fab9dd-59a9-43a0-b481-a5c3154f9311_798b71c6-4ddb-4acc-b0c5-d0c73448a0ae","ind":3}],"v":"5.7.0","fr":30,"op":60,"ip":0,"assets":[{"nm":"Nested Scene 1","id":"precomp_newScene_414d3be5-af8f-4882-8fbd-08b6bc630467_a14c2d36-45f2-459b-8aad-7d2f0c4034da","layers":[{"ty":4,"nm":"Group 75","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[38.5,108.5]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Group 75","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 60","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0.0835999999999899,-0.2237999999999971],[0,0],[0,0],[0.21739999999999782,-0.0992999999999995],[0,0],[0,0],[0.2237999999999971,0.08420000000000272],[0,0],[0,0],[0.09890000000000043,0.217800000000004],[0,0],[0,0],[-0.0835000000000008,0.2237999999999971],[0,0],[0,0],[-0.2173000000000016,0.0992999999999995],[0,0],[0,0],[-0.22390000000000043,-0.08420000000000272],[0,0],[0,0],[-0.09900000000000375,-0.217800000000004],[0,0],[0,0]],"o":[[0.09890000000000043,-0.217800000000004],[0,0],[0,0],[0.2237999999999971,-0.08420000000000272],[0,0],[0,0],[0.21739999999999782,0.0992999999999995],[0,0],[0,0],[0.0835999999999899,0.2237999999999971],[0,0],[0,0],[-0.09900000000000375,0.217800000000004],[0,0],[0,0],[-0.22390000000000043,0.08420000000000272],[0,0],[0,0],[-0.2173000000000016,-0.0992999999999995],[0,0],[0,0],[-0.0835000000000008,-0.2237999999999971],[0,0],[0,0],[0,0]],"v":[[65.9972,51.1103],[66.3405,51.2515],[64.4513,56.3122],[69.5132,54.4116],[69.6559,54.7538],[64.7354,56.9999],[69.6559,59.2462],[69.5132,59.5884],[64.4513,57.6878],[66.3405,62.7485],[65.9972,62.8897],[63.7656,57.9727],[61.5341,62.8897],[61.1907,62.7485],[63.08,57.6878],[58.0181,59.5884],[57.8753,59.2462],[62.7958,56.9999],[57.8753,54.7538],[58.0181,54.4116],[63.08,56.3122],[61.1907,51.2515],[61.5341,51.1103],[63.7656,56.0273],[65.9972,51.1103]]}}},{"ty":"st","bm":0,"hd":false,"nm":"Stroke","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":1},"c":{"a":0,"k":[0.9843,0.6784,0.6784]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1},{"ty":4,"nm":"Group 76","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[83.5,175.5]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[122,284]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Group 76","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 61","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0.0835999999999899,-0.2230000000000132],[0,0],[0,0],[0.21739999999999782,-0.09999999999999432],[0,0],[0,0],[0.2237999999999971,0.08500000000000796],[0,0],[0,0],[0.09890000000000043,0.21700000000001296],[0,0],[0,0],[-0.0835000000000008,0.2230000000000132],[0,0],[0,0],[-0.2172999999999945,0.09999999999999432],[0,0],[0,0],[-0.22390000000000043,-0.08500000000000796],[0,0],[0,0],[-0.09899999999998954,-0.21700000000001296],[0,0],[0,0]],"o":[[0.09890000000000043,-0.21700000000001296],[0,0],[0,0],[0.2237999999999971,-0.08500000000000796],[0,0],[0,0],[0.21739999999999782,0.09999999999999432],[0,0],[0,0],[0.0835999999999899,0.2230000000000132],[0,0],[0,0],[-0.09899999999998954,0.21700000000001296],[0,0],[0,0],[-0.22390000000000043,0.08500000000000796],[0,0],[0,0],[-0.2172999999999945,-0.09999999999999432],[0,0],[0,0],[-0.0835000000000008,-0.2230000000000132],[0,0],[0,0],[0,0]],"v":[[85.9972,169.11],[86.3405,169.251],[84.4513,174.312],[89.5132,172.412],[89.6559,172.754],[84.7354,175],[89.6559,177.246],[89.5132,177.588],[84.4513,175.688],[86.3405,180.749],[85.9972,180.89],[83.7656,175.973],[81.5341,180.89],[81.1907,180.749],[83.08,175.688],[78.0181,177.588],[77.8753,177.246],[82.7958,175],[77.8753,172.754],[78.0181,172.412],[83.08,174.312],[81.1907,169.251],[81.5341,169.11],[83.7656,174.027],[85.9972,169.11]]}}},{"ty":"st","bm":0,"hd":false,"nm":"Stroke","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":1},"c":{"a":0,"k":[0.9333,0.7804,0.5451]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2},{"ty":4,"nm":"Group 77","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[101.5,16.5]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140,125]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Group 77","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 62","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0.08300000000001262,-0.22380000000000067],[0,0],[0,0],[0.21699999999999875,-0.0992999999999995],[0,0],[0,0],[0.22399999999998954,0.08419999999999916],[0,0],[0,0],[0.09900000000000375,0.21780000000000044],[0,0],[0,0],[-0.0835000000000008,0.22380000000000067],[0,0],[0,0],[-0.2172999999999945,0.0992999999999995],[0,0],[0,0],[-0.22390000000000043,-0.08419999999999916],[0,0],[0,0],[-0.09899999999998954,-0.2177699999999998],[0,0],[0,0]],"o":[[0.09900000000000375,-0.2177699999999998],[0,0],[0,0],[0.22399999999998954,-0.08419999999999916],[0,0],[0,0],[0.21699999999999875,0.0992999999999995],[0,0],[0,0],[0.08300000000001262,0.22380000000000067],[0,0],[0,0],[-0.09899999999998954,0.21780000000000044],[0,0],[0,0],[-0.22390000000000043,0.08419999999999916],[0,0],[0,0],[-0.2172999999999945,-0.0992999999999995],[0,0],[0,0],[-0.0835000000000008,-0.22380000000000067],[0,0],[0,0],[0,0]],"v":[[103.997,10.1103],[104.341,10.2515],[102.451,15.3122],[107.513,13.4116],[107.656,13.7538],[102.735,15.9999],[107.656,18.2462],[107.513,18.5884],[102.451,16.6878],[104.341,21.7485],[103.997,21.8897],[101.766,16.9727],[99.5341,21.8897],[99.1907,21.7485],[101.08,16.6878],[96.0181,18.5884],[95.8753,18.2462],[100.796,15.9999],[95.8753,13.7538],[96.0181,13.4116],[101.08,15.3122],[99.1907,10.2515],[99.5341,10.1103],[101.766,15.0273],[103.997,10.1103]]}}},{"ty":"st","bm":0,"hd":false,"nm":"Stroke","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":1},"c":{"a":0,"k":[0.9333,0.7804,0.5451]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":3},{"ty":4,"nm":"Group 79","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[38.5,108.5]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Group 79","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 64","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-6.551400000000001,5.396000000000015],[0,0],[-5.671000000000003,5.085000000000008],[0,0],[-6.0563,6.635999999999996]],"o":[[0,0],[6.298399999999997,-5.187999999999988],[0,0],[5.670199999999994,-5.084000000000003],[0,0],[0,0]],"v":[[19.8469,136.649],[25.2767,141.523],[30.4676,144.22],[35.904,146.964],[41.34,149.709],[48.5942,151.137]]}}},{"ty":"st","bm":0,"hd":false,"nm":"Stroke","lc":2,"lj":2,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":2},"c":{"a":0,"k":[0.5843,0.6,0.9804]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":4},{"ty":4,"nm":"Group 80","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[38.5,108.5]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Group 80","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 65","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-4.610100000000003,0.6796000000000006],[0,0],[-4.099899999999998,0.775500000000001],[0,0],[-4.6967,1.3744999999999976]],"o":[[0,0],[4.432900000000004,-0.6528999999999989],[0,0],[4.100300000000004,-0.775699999999997],[0,0],[0,0]],"v":[[51.7017,16.4995],[53.058,20.1699],[54.8734,22.7899],[56.7949,25.4976],[58.7165,28.205],[61.8701,30.8063]]}}},{"ty":"st","bm":0,"hd":false,"nm":"Stroke","lc":2,"lj":2,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":1},"c":{"a":0,"k":[0.3882,0.7451,1]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":5}]},{"nm":"Nested Scene 2","id":"precomp_newScene_d6fab9dd-59a9-43a0-b481-a5c3154f9311_798b71c6-4ddb-4acc-b0c5-d0c73448a0ae","layers":[{"ty":4,"nm":"Group 78","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[345.5,16.5]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[384,125]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Group 78","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 63","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0.08299999999996999,-0.22380000000000067],[0,0],[0,0],[0.21699999999998454,-0.0992999999999995],[0,0],[0,0],[0.22400000000004638,0.08419999999999916],[0,0],[0,0],[0.09899999999998954,0.21780000000000044],[0,0],[0,0],[-0.08399999999994634,0.22380000000000067],[0,0],[0,0],[-0.21699999999998454,0.0992999999999995],[0,0],[0,0],[-0.22399999999998954,-0.08419999999999916],[0,0],[0,0],[-0.09899999999998954,-0.2177699999999998],[0,0],[0,0]],"o":[[0.09899999999998954,-0.2177699999999998],[0,0],[0,0],[0.22400000000004638,-0.08419999999999916],[0,0],[0,0],[0.21699999999998454,0.0992999999999995],[0,0],[0,0],[0.08299999999996999,0.22380000000000067],[0,0],[0,0],[-0.09899999999998954,0.21780000000000044],[0,0],[0,0],[-0.22399999999998954,0.08419999999999916],[0,0],[0,0],[-0.21699999999998454,-0.0992999999999995],[0,0],[0,0],[-0.08399999999994634,-0.22380000000000067],[0,0],[0,0],[0,0]],"v":[[347.997,10.1103],[348.341,10.2515],[346.451,15.3122],[351.513,13.4116],[351.656,13.7538],[346.735,15.9999],[351.656,18.2462],[351.513,18.5884],[346.451,16.6878],[348.341,21.7485],[347.997,21.8897],[345.766,16.9727],[343.534,21.8897],[343.191,21.7485],[345.08,16.6878],[340.018,18.5884],[339.875,18.2462],[344.796,15.9999],[339.875,13.7538],[340.018,13.4116],[345.08,15.3122],[343.191,10.2515],[343.534,10.1103],[345.766,15.0273],[347.997,10.1103]]}}},{"ty":"st","bm":0,"hd":false,"nm":"Stroke","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":1},"c":{"a":0,"k":[0.9843,0.6784,0.6784]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1},{"ty":4,"nm":"Group 81","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[38.5,108.5]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Group 81","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 66","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[7.331999999999994,3.6993199999999993],[0,0],[6.44500000000005,3.6205000000000016],[0,0],[7.166999999999973,5.086600000000001]],"o":[[0,0],[-7.050999999999988,-3.5559800000000004],[0,0],[-6.444999999999993,-3.620799999999999],[0,0],[0,0]],"v":[[397.951,1],[394.077,7.38848],[389.908,11.5103],[385.525,15.7464],[381.142,19.9822],[374.766,23.3749]]}}},{"ty":"st","bm":0,"hd":false,"nm":"Stroke","lc":2,"lj":2,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":2},"c":{"a":0,"k":[0.5529,0.8196,0.9765]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2},{"ty":4,"nm":"Group 82","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[398.5,143.5]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[437,252]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Group 82","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 67","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-5.90500000000003,3.556999999999988],[4.5919999999999845,-2.759999999999991],[-6.8729999999999905,-4.340000000000003],[6.834000000000003,-3.209000000000003],[11.024000000000001,29.25999999999999]],"o":[[0,0],[5.409999999999968,-3.2580000000000098],[-2.3570000000000277,1.4170000000000016],[14.365999999999985,7.9339999999999975],[-7.092999999999961,4.009999999999991],[0,0]],"v":[[383.766,147.846],[396.908,155.292],[393.172,139.733],[398.01,151.006],[400.876,135.209],[411.195,132]]}}},{"ty":"st","bm":0,"hd":false,"nm":"Stroke","lc":2,"lj":2,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":2},"c":{"a":0,"k":[0.9843,0.6784,0.6784]}},{"ty":"tr","a":{"a":0,"k":[398.5,143.5]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[398.5,143.5]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":3}]}]} \ No newline at end of file diff --git a/public/meeting1.svg b/public/meeting1.svg deleted file mode 100644 index a5b3cd90..00000000 --- a/public/meeting1.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/public/mypage/camera-icon.svg b/public/mypage/camera-icon.svg new file mode 100644 index 00000000..85d1c1da --- /dev/null +++ b/public/mypage/camera-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/mypage/setting-icon.svg b/public/mypage/setting-icon.svg new file mode 100644 index 00000000..3138a4a2 --- /dev/null +++ b/public/mypage/setting-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/next.svg b/public/next.svg deleted file mode 100644 index 5174b28c..00000000 --- a/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/not-found/404.svg b/public/not-found/404.svg new file mode 100644 index 00000000..eef83932 --- /dev/null +++ b/public/not-found/404.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/people-icon.svg b/public/people-icon.svg deleted file mode 100644 index e8611a94..00000000 --- a/public/people-icon.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/public/restaurant1.svg b/public/restaurant1.svg deleted file mode 100644 index aecfdbde..00000000 --- a/public/restaurant1.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/public/restaurant2.svg b/public/restaurant2.svg deleted file mode 100644 index c16307c1..00000000 --- a/public/restaurant2.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/public/restaurant3.svg b/public/restaurant3.svg deleted file mode 100644 index e53e256f..00000000 --- a/public/restaurant3.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/public/restaurant4.svg b/public/restaurant4.svg deleted file mode 100644 index 98868de6..00000000 --- a/public/restaurant4.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/public/restaurant5.svg b/public/restaurant5.svg deleted file mode 100644 index 3929b4e7..00000000 --- a/public/restaurant5.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/public/restaurant6.svg b/public/restaurant6.svg deleted file mode 100644 index cc70e7ab..00000000 --- a/public/restaurant6.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/public/restaurant7.svg b/public/restaurant7.svg deleted file mode 100644 index 6223c8c4..00000000 --- a/public/restaurant7.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/public/restaurant8.svg b/public/restaurant8.svg deleted file mode 100644 index 58750d10..00000000 --- a/public/restaurant8.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 00000000..b7d8c4dd --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,8 @@ +User-agent: * +Allow: / + +# Host +Host: https://www.solitourist.com/ + +# Sitemaps +Sitemap: https://www.solitourist.com/sitemap.xml diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 00000000..ace48118 --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,382 @@ + + + + + + + https://www.solitourist.com/ + 2024-09-20T09:47:45+00:00 + 1.00 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1 + 2024-09-20T09:47:45+00:00 + 0.80 + + + https://www.solitourist.com/gathering + 2024-09-20T09:47:45+00:00 + 0.80 + + + https://www.solitourist.com/auth/signin + 2024-09-20T09:47:45+00:00 + 0.80 + + + https://www.solitourist.com/support?menu=about + 2024-09-20T09:47:45+00:00 + 0.80 + + + https://www.solitourist.com/support?menu=terms + 2024-09-20T09:47:45+00:00 + 0.80 + + + https://www.solitourist.com/informations/1 + 2024-09-20T09:47:45+00:00 + 0.80 + + + https://www.solitourist.com/informations/2 + 2024-09-20T09:47:45+00:00 + 0.80 + + + https://www.solitourist.com/informations/3 + 2024-09-20T09:47:45+00:00 + 0.80 + + + https://www.solitourist.com/informations/7 + 2024-09-20T09:47:45+00:00 + 0.80 + + + https://www.solitourist.com/informations/5 + 2024-09-20T09:47:45+00:00 + 0.80 + + + https://www.solitourist.com/informations/6 + 2024-09-20T09:47:45+00:00 + 0.80 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2 + 2024-09-20T09:47:45+00:00 + 0.64 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3 + 2024-09-20T09:47:45+00:00 + 0.64 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1&childCategoryId=4 + 2024-09-20T09:47:45+00:00 + 0.64 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1&childCategoryId=5 + 2024-09-20T09:47:45+00:00 + 0.64 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1&childCategoryId=6 + 2024-09-20T09:47:45+00:00 + 0.64 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1&order=latest + 2024-09-20T09:47:45+00:00 + 0.64 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1&order=likes + 2024-09-20T09:47:45+00:00 + 0.64 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1&order=views + 2024-09-20T09:47:45+00:00 + 0.64 + + + https://www.solitourist.com/auth/signup + 2024-09-20T09:47:45+00:00 + 0.64 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=7 + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=8 + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=9 + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=10 + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=11 + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&order=latest + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&order=likes + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&order=views + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/8 + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=12 + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=13 + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=14 + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=15 + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&order=latest + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&order=likes + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&order=views + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/9 + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1&childCategoryId=4&order=latest + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1&childCategoryId=4&order=likes + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1&childCategoryId=4&order=views + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1&childCategoryId=5&order=latest + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1&childCategoryId=5&order=likes + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1&childCategoryId=5&order=views + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1&childCategoryId=6&order=latest + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1&childCategoryId=6&order=likes + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=1&childCategoryId=6&order=views + 2024-09-20T09:47:45+00:00 + 0.51 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=7&order=latest + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=7&order=likes + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=7&order=views + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=8&order=latest + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=8&order=likes + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=8&order=views + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=9&order=latest + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=9&order=likes + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=9&order=views + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=10&order=latest + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=10&order=likes + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=10&order=views + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=11&order=latest + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=11&order=likes + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=2&childCategoryId=11&order=views + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=12&order=latest + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=12&order=likes + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=12&order=views + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=13&order=latest + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=13&order=likes + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=13&order=views + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=14&order=latest + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=14&order=likes + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=14&order=views + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=15&order=latest + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=15&order=likes + 2024-09-20T09:47:45+00:00 + 0.41 + + + https://www.solitourist.com/informations/list?page=1&parentCategoryId=3&childCategoryId=15&order=views + 2024-09-20T09:47:45+00:00 + 0.41 + + + + \ No newline at end of file diff --git a/public/user/default-female.svg b/public/user/default-female.svg new file mode 100644 index 00000000..1129dde0 --- /dev/null +++ b/public/user/default-female.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/user/default-male.svg b/public/user/default-male.svg new file mode 100644 index 00000000..73529871 --- /dev/null +++ b/public/user/default-male.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/user/default-user.svg b/public/user/default-user.svg new file mode 100644 index 00000000..5f67ddd6 --- /dev/null +++ b/public/user/default-user.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/google-icon.svg b/public/user/google-icon.svg similarity index 100% rename from public/google-icon.svg rename to public/user/google-icon.svg diff --git a/public/kakao-icon.svg b/public/user/kakao-icon.svg similarity index 100% rename from public/kakao-icon.svg rename to public/user/kakao-icon.svg diff --git a/public/user/solitour-auth-intro-image.svg b/public/user/solitour-auth-intro-image.svg new file mode 100644 index 00000000..f0e2dd6f --- /dev/null +++ b/public/user/solitour-auth-intro-image.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/user_sex_man_default_image.svg b/public/user_sex_man_default_image.svg deleted file mode 100644 index b73b3545..00000000 --- a/public/user_sex_man_default_image.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/user_sex_woman_default_image.svg b/public/user_sex_woman_default_image.svg deleted file mode 100644 index 0ed4814c..00000000 --- a/public/user_sex_woman_default_image.svg +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/vercel.svg b/public/vercel.svg deleted file mode 100644 index d2f84222..00000000 --- a/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx new file mode 100644 index 00000000..562a1bb0 --- /dev/null +++ b/src/app/about/page.tsx @@ -0,0 +1,10 @@ +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "서비스소개", + description: "Solitour의 서비스소개 페이지", +}; + +export default function page() { + return
; +} diff --git a/src/app/api/auth/google/getToken/route.ts b/src/app/api/auth/google/getToken/route.ts new file mode 100644 index 00000000..2cf8723d --- /dev/null +++ b/src/app/api/auth/google/getToken/route.ts @@ -0,0 +1,44 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(request: NextRequest) { + try { + // Query string 파싱 + const url = new URL(request.url); + const code = url.searchParams.get("code"); + + // 백엔드에 액세스 토큰 재요청 + const backendResponse = await fetch( + `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/auth/oauth2/login?type=google&redirectUrl=${process.env.NEXT_PUBLIC_GOOGLE_REDIRECT_URL}&code=${code}`, + { + method: "GET", + headers: { + "Content-Type": "application/json", + }, + cache: "no-store", + credentials: "include", + }, + ); + + const result = new NextResponse( + backendResponse.status == 200 ? "성공" : "실패", + { + status: backendResponse.status, + headers: { "Content-Type": "application/json" }, + }, + ); + + if (backendResponse.status == 200) { + const cookies = backendResponse.headers.get("set-cookie"); + if (cookies) { + // 받은 쿠키를 파싱하여 설정 + cookies.split(",").forEach((cookie) => { + result.headers.append("Set-Cookie", cookie.trim()); + }); + } + } + + return result; + } catch (error) { + return new NextResponse("서버 에러", { status: 500 }); + } +} diff --git a/src/app/api/auth/google/route.ts b/src/app/api/auth/google/route.ts new file mode 100644 index 00000000..0807029b --- /dev/null +++ b/src/app/api/auth/google/route.ts @@ -0,0 +1,31 @@ +import { NextResponse } from "next/server"; + +export function GET() { + const clientId = process.env.GOOGLE_CLIENT_ID; + const redirectUri = `${process.env.NEXT_PUBLIC_GOOGLE_REDIRECT_URL}`; + const scope = [ + "email", + "profile", + "https://www.googleapis.com/auth/user.phonenumbers.read", + "https://www.googleapis.com/auth/user.gender.read", + "https://www.googleapis.com/auth/user.birthday.read", + ].join(" "); + const responseType = "code"; + const state = generateRandomString(16); // CSRF 방지를 위한 임의 문자열 + + const googleAuthUrl = `https://accounts.google.com/o/oauth2/v2/auth?client_id=${clientId}&redirect_uri=${redirectUri}&scope=${scope}&response_type=${responseType}&state=${state}`; + + + return NextResponse.redirect(googleAuthUrl); +} + +function generateRandomString(length: number) { + const characters = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + let result = ""; + const charactersLength = characters.length; + for (let i = 0; i < length; i++) { + result += characters.charAt(Math.floor(Math.random() * charactersLength)); + } + return result; +} \ No newline at end of file diff --git a/src/app/api/auth/kakao/getToken/route.ts b/src/app/api/auth/kakao/getToken/route.ts new file mode 100644 index 00000000..200fc583 --- /dev/null +++ b/src/app/api/auth/kakao/getToken/route.ts @@ -0,0 +1,93 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(request: NextRequest) { + try { + // Query string 파싱 + const url = new URL(request.url); + const code = url.searchParams.get("code"); + + // 백엔드에 액세스 토큰 재요청 + const backendResponse = await fetch( + `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/auth/oauth2/login?type=kakao&redirectUrl=${process.env.NEXT_PUBLIC_KAKAO_REDIRECT_URL}&code=${code}`, + { + method: "GET", + headers: { + "Content-Type": "application/json", + }, + cache: "no-store", + credentials: "include", + }, + ); + + const result = new NextResponse( + backendResponse.status == 200 ? "성공" : "실패", + { + status: backendResponse.status, + headers: { "Content-Type": "application/json" }, + }, + ); + + if (backendResponse.status == 200) { + const cookies = backendResponse.headers.get("set-cookie"); + if (cookies) { + // 받은 쿠키를 파싱하여 설정 + cookies.split(",").forEach((cookie) => { + result.headers.append("Set-Cookie", cookie.trim()); + }); + } + } + + return result; + } catch (error) { + return new NextResponse("서버 에러", { status: 500 }); + } +} + +export async function POST(request: NextRequest) { + try { + // Query string 파싱 + const url = new URL(request.url); + const code = url.searchParams.get("code"); + const body = await request.json() + + // 백엔드에 액세스 토큰 재요청 + const backendResponse = await fetch( + `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/auth/oauth2/login/kakao?redirectUrl=${process.env.NEXT_PUBLIC_KAKAO_REDIRECT_URL}&code=${code}`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + createUserInfoRequest: { + ...body + } + }), + cache: "no-store", + credentials: "include", + }, + ); + + const result = new NextResponse( + backendResponse.status == 200 ? "성공" : "실패", + { + status: backendResponse.status, + headers: { "Content-Type": "application/json" }, + }, + ); + + if (backendResponse.status == 200) { + const cookies = backendResponse.headers.get("set-cookie"); + if (cookies) { + // 받은 쿠키를 파싱하여 설정 + cookies.split(",").forEach((cookie) => { + result.headers.append("Set-Cookie", cookie.trim()); + }); + } + } + + return result; + } catch (error) { + return new NextResponse("서버 에러", { status: 500 }); + } +} \ No newline at end of file diff --git a/src/app/api/auth/kakao/route.ts b/src/app/api/auth/kakao/route.ts new file mode 100644 index 00000000..18d195b7 --- /dev/null +++ b/src/app/api/auth/kakao/route.ts @@ -0,0 +1,18 @@ +import { NextResponse } from "next/server"; + +export function GET() { + try { + const clientId = process.env.KAKAO_REST_API_KEY; + const redirectUri = process.env.NEXT_PUBLIC_KAKAO_REDIRECT_URL; + const timestamp = new Date().toISOString(); // Get the current timestamp in ISO format + + if (!clientId || !redirectUri) { + return NextResponse.redirect("/auth/signin"); + } + + const kakaoAuthUrl = `https://kauth.kakao.com/oauth/authorize?response_type=code&client_id=${clientId}&redirect_uri=${redirectUri}×tamp=${timestamp}`; + return NextResponse.redirect(kakaoAuthUrl); + } catch (error) { + return NextResponse.redirect("/auth/signin"); + } +} diff --git a/src/app/api/auth/logout/route.ts b/src/app/api/auth/logout/route.ts new file mode 100644 index 00000000..ee624d55 --- /dev/null +++ b/src/app/api/auth/logout/route.ts @@ -0,0 +1,26 @@ +import { fetchWithAuth } from "@/utils/fetchWithAuth"; +import { cookies } from "next/headers"; +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(request: NextRequest) { + try { + const access_cookie = request.cookies.get("access_token"); + // 사용자 정보 조회 API + await fetchWithAuth(`${process.env.BACKEND_URL}/api/auth/oauth2/logout`, { + method: "POST", + headers: { + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + "Content-Type": "application/json", + "Access-Control-Allow-Origin": "*", + }, + }); + cookies().delete("access_token"); + cookies().delete("refresh_token"); + return new NextResponse("로그아웃", { status: 200 }); + } catch (error) { + console.error(error); + cookies().delete("access_token"); + cookies().delete("refresh_token"); + return new NextResponse("Internal Server Error", { status: 500 }); + } +} diff --git a/src/app/api/auth/refresh-access-token/route.ts b/src/app/api/auth/refresh-access-token/route.ts new file mode 100644 index 00000000..7d1df686 --- /dev/null +++ b/src/app/api/auth/refresh-access-token/route.ts @@ -0,0 +1,37 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(request: NextRequest) { + try { + const cookie = request.cookies.get("refresh_token"); + if (!cookie) { + return new NextResponse("Access token not found", { status: 401 }); + } + // 액세스 토큰 재요청 + const backendResponse = await fetch( + `${process.env.BACKEND_URL}/api/auth/oauth2/token/refresh`, + { + method: "POST", + headers: { + Cookie: `${cookie?.name}=${cookie?.value}`, + "Content-Type": "application/json", + "Access-Control-Allow-Origin": "*", + }, + cache: "no-store", + }, + ); + const result = new NextResponse( + backendResponse.status == 200 ? "성공" : "실패", + { + status: backendResponse.status, + headers: { "Content-Type": "application/json" }, + }, + ); + if (backendResponse.status == 200) { + const accessToken = backendResponse.headers.get("set-cookie"); + result.headers.set("set-cookie", accessToken as string); + } + return result; + } catch (error) { + return new NextResponse("서버 에러", { status: 500 }); + } +} diff --git a/src/app/api/auth/user-image/route.ts b/src/app/api/auth/user-image/route.ts new file mode 100644 index 00000000..65877683 --- /dev/null +++ b/src/app/api/auth/user-image/route.ts @@ -0,0 +1,30 @@ +import { NextRequest, NextResponse } from "next/server"; + +// 사용자 이미지 삭제 API +export async function DELETE(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + + const response = await fetch(`${process.env.BACKEND_URL}/api/users/profile`, { + method: "DELETE", + headers: { + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + "Content-Type": "application/json", + }, + cache: "no-store", + }); + + if (!response.ok) { + return new NextResponse(`${response.statusText}`, { status: response.status }); + } + + return response; +} diff --git a/src/app/api/auth/user/route.ts b/src/app/api/auth/user/route.ts new file mode 100644 index 00000000..f20100bc --- /dev/null +++ b/src/app/api/auth/user/route.ts @@ -0,0 +1,119 @@ +import { fetchWithAuth } from "@/utils/fetchWithAuth"; +import { cookies } from "next/headers"; +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + + // 사용자 정보 조회 API + const response = await fetch(`${process.env.BACKEND_URL}/api/users/info`, { + method: "GET", + headers: { + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + "Content-Type": "application/json", + "Access-Control-Allow-Origin": "*", + }, + cache: "no-store", + }); + + if (response.ok) { + const data = await response.json(); + return new NextResponse(JSON.stringify(data), { + status: 200, + }); + } + + if (response.status == 401) { + return new NextResponse("토큰 만료", { + status: 401, + }); + } + + cookies().delete("access_token"); + cookies().delete("refresh_token"); + return new NextResponse("서버 에러", { + status: 500, + }); +} + +export async function PUT(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + + const requestData = await request.json(); + console.log("route.ts 파일1 : ",requestData); + + // 사용자 정보 조회 API + const response = await fetch(`${process.env.BACKEND_URL}/api/users/info`, { + method: "PUT", + headers: { + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + "Content-Type": "application/json", + }, + body: JSON.stringify(requestData), + cache: "no-store", + }); + + if(response.ok) { + return response; + } + + return new NextResponse("서버 에러", { + status: 500, + }); +} + +export async function DELETE(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + + const url = new URL(request.url); + + // 사용자 삭제 + const response = await fetchWithAuth( + `${process.env.BACKEND_URL}/api/auth/oauth2?type=${url.searchParams.get("type")}`, + { + method: "DELETE", + headers: { + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + "Content-Type": "application/json", + }, + cache: "no-store", + }, + ); + + if (!response.ok) { + return new NextResponse(`${response.statusText}`, { status: response.status }); + } + + cookies().delete("access_token"); + cookies().delete("refresh_token"); + return new NextResponse("회원 탈퇴 성공", { + status: 200, + }); +} diff --git a/src/app/api/bookmark/gathering/route.ts b/src/app/api/bookmark/gathering/route.ts new file mode 100644 index 00000000..a08ab95e --- /dev/null +++ b/src/app/api/bookmark/gathering/route.ts @@ -0,0 +1,73 @@ +import { revalidatePath, revalidateTag } from "next/cache"; +import { NextRequest, NextResponse } from "next/server"; + +/** + * 정보 북마크 등록 + */ +export async function POST(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + + const cookie = request.cookies.get("access_token"); + const url = new URL(request.url); + const id = url.searchParams.get("gatheringId"); + + const response = await fetch( + `${process.env.BACKEND_URL}/api/bookmark/gathering?gatheringId=${id}`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + cache: "no-store", + }, + ); + + revalidateTag("getBestGatheringList"); + revalidatePath("/gatherings", "layout"); + return response; +} + +/** + * 정보 북마크 취소 + */ +export async function DELETE(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + const cookie = request.cookies.get("access_token"); + const url = new URL(request.url); + const id = url.searchParams.get("gatheringId"); + + const response = await fetch( + `${process.env.BACKEND_URL}/api/bookmark/gathering?gatheringId=${id}`, + { + method: "DELETE", + headers: { + "Content-Type": "application/json", + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + cache: "no-store", + }, + ); + + revalidateTag("getBestGatheringList"); + revalidatePath("/gatherings", "layout"); + return response; +} diff --git a/src/app/api/bookmark/information/route.ts b/src/app/api/bookmark/information/route.ts new file mode 100644 index 00000000..6209d2a0 --- /dev/null +++ b/src/app/api/bookmark/information/route.ts @@ -0,0 +1,58 @@ +import { revalidatePath, revalidateTag } from "next/cache"; +import { NextRequest } from "next/server"; + +/** + * 정보 북마크 등록 + */ +export async function POST(request: NextRequest) { + const cookie = request.cookies.get("access_token"); + const body = await request.formData(); + + const data = new URLSearchParams(); + data.append("infoId", body.get("infoId")?.toString() ?? "0"); + + const response = await fetch( + `${process.env.BACKEND_URL}/api/bookmark/information`, + { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + body: data.toString(), + cache: "no-store", + }, + ); + + revalidateTag("getBestInformationList"); + revalidatePath("/informations", "layout"); + return response; +} + +/** + * 정보 북마크 취소 + */ +export async function DELETE(request: NextRequest) { + const cookie = request.cookies.get("access_token"); + const body = await request.formData(); + + const data = new URLSearchParams(); + data.append("infoId", body.get("infoId")?.toString() ?? "0"); + + const response = await fetch( + `${process.env.BACKEND_URL}/api/bookmark/information`, + { + method: "DELETE", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + body: data.toString(), + cache: "no-store", + }, + ); + + revalidateTag("getBestInformationList"); + revalidatePath("/informations", "layout"); + return response; +} diff --git a/src/app/api/categories/route.ts b/src/app/api/categories/route.ts new file mode 100644 index 00000000..af2c4913 --- /dev/null +++ b/src/app/api/categories/route.ts @@ -0,0 +1,9 @@ +// 카테고리 목록 조회 +export async function GET() { + const response = await fetch(`${process.env.BACKEND_URL}/api/categories`, { + method: "GET", + next: { revalidate: 60, tags: ["getCategoryList"] }, + }); + + return response; +} diff --git a/src/app/api/diary/[id]/route.ts b/src/app/api/diary/[id]/route.ts new file mode 100644 index 00000000..e7e14095 --- /dev/null +++ b/src/app/api/diary/[id]/route.ts @@ -0,0 +1,55 @@ +import { UpdateDiaryRequestDto } from "@/types/DiaryDto"; +import { revalidateTag } from "next/cache"; +import { NextRequest } from "next/server"; + +/** + * 일기 수정 + */ +export async function PUT( + request: NextRequest, + { params }: { params: { id: string } }, +) { + const cookie = request.cookies.get("access_token"); + const body: UpdateDiaryRequestDto = await request.json(); + + const response = await fetch( + `${process.env.BACKEND_URL}/api/diary/${params.id}`, + { + method: "PUT", + headers: { + "Content-Type": "application/json", + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + body: JSON.stringify(body), + cache: "no-store", + }, + ); + + revalidateTag("getDiaryList"); + revalidateTag(`getDiary/${params.id}`); + return response; +} + +/** + * 일기 삭제 + */ +export async function DELETE( + request: NextRequest, + { params }: { params: { id: string } }, +) { + const cookie = request.cookies.get("access_token"); + const response = await fetch( + `${process.env.BACKEND_URL}/api/diary/${params.id}`, + { + method: "DELETE", + headers: { + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + cache: "no-store", + }, + ); + + revalidateTag("getDiaryList"); + revalidateTag(`getDiary/${params.id}`); + return response; +} diff --git a/src/app/api/diary/route.ts b/src/app/api/diary/route.ts new file mode 100644 index 00000000..d5103dcf --- /dev/null +++ b/src/app/api/diary/route.ts @@ -0,0 +1,22 @@ +import { CreateDiaryRequestDto } from "@/types/DiaryDto"; +import { revalidateTag } from "next/cache"; +import { NextRequest } from "next/server"; + +// 일기 작성 +export async function POST(request: NextRequest) { + const cookie = request.cookies.get("access_token"); + const body: CreateDiaryRequestDto = await request.json(); + + const response = await fetch(`${process.env.BACKEND_URL}/api/diary`, { + method: "POST", + headers: { + "Content-Type": "application/json", + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + body: JSON.stringify(body), + cache: "no-store", + }); + + revalidateTag("getDiaryList"); + return response; +} diff --git a/src/app/api/gathering/[id]/route.ts b/src/app/api/gathering/[id]/route.ts new file mode 100644 index 00000000..83108c4b --- /dev/null +++ b/src/app/api/gathering/[id]/route.ts @@ -0,0 +1,73 @@ +import { revalidatePath } from "next/cache"; +import { NextRequest } from "next/server"; + +export async function GET( + request: NextRequest, + { params }: { params: { id: string } }, +) { + try { + const cookie = request.cookies.get("access_token"); + + const response = await fetch( + `${process.env.BACKEND_URL}/api/gatherings/${params.id}`, + { + method: "GET", + headers: { + Cookie: `${cookie?.name}=${cookie?.value}`, + "Content-Type": "application/json", + }, + cache: "no-store", + }, + ); + + if (!response.ok) { + throw new Error(response.statusText); + } + return response; + } catch (e) { + return new Response(JSON.stringify({ error: "Failed to update data." }), { + status: 500, + headers: { + "Content-Type": "application/json", + }, + }); + } +} + +export async function PUT( + request: NextRequest, + { params }: { params: { id: string } }, +) { + try { + const cookie = request.cookies.get("access_token"); + const bodyData = await request.json(); + + const response = await fetch( + `${process.env.BACKEND_URL}/api/gatherings/${params.id}`, + { + method: "PUT", + headers: { + Cookie: `${cookie?.name}=${cookie?.value}`, + "Content-Type": "application/json", + }, + body: JSON.stringify(bodyData), + cache: "no-store", + }, + ); + + if (!response.ok) { + throw new Error(response.statusText); + } + revalidatePath(`/gathering/${params.id}`); + revalidatePath("/mypage"); + revalidatePath("/gathering"); + return response; + } catch (e) { + return new Response(JSON.stringify({ error: "Failed to update data." }), { + status: 500, + headers: { + "Content-Type": "application/json", + }, + }); + } +} diff --git a/src/app/api/gathering/apply/route.ts b/src/app/api/gathering/apply/route.ts new file mode 100644 index 00000000..0efbc3a2 --- /dev/null +++ b/src/app/api/gathering/apply/route.ts @@ -0,0 +1,111 @@ +import { NextRequest } from "next/server"; + +// 모임 신청 등록 +export async function POST( + request: NextRequest, +) { + try { + const cookie = request.cookies.get("access_token"); + const url = new URL(request.url); + const id = url.searchParams.get("id"); + + const response = await fetch( + `${process.env.BACKEND_URL}/api/gatherings/applicants/${id}`, + { + method: "POST", + headers: { + Cookie: `${cookie?.name}=${cookie?.value}`, + "Content-Type": "application/json", + }, + cache: "no-store", + }, + ); + + if (!response.ok) { + throw new Error(response.statusText); + } + return response; + } catch (e) { + return new Response(JSON.stringify({ error: "Failed to update data." }), { + status: 500, + headers: { + "Content-Type": "application/json", + }, + }); + } +} + +// 모임 신청 수정 +export async function PUT( + request: NextRequest, +) { + try { + const cookie = request.cookies.get("access_token"); + const data = await request.json(); + + const response = await fetch( + `${process.env.BACKEND_URL}/api/gatherings/applicants/${data.applyId}`, + { + method: "PUT", + headers: { + Cookie: `${cookie?.name}=${cookie?.value}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + userId: data.userId, + gatheringStatus: data.gatheringStatus, + }), + cache: "no-store", + }, + ); + + if (!response.ok) { + throw new Error(response.statusText); + } + return response; + } catch (e) { + return new Response(JSON.stringify({ error: "Failed to update data." }), { + status: 500, + headers: { + "Content-Type": "application/json", + }, + }); + } +} + +// * 모임 신청 취소 +export async function DELETE( + request: NextRequest, + { params }: { params: { id: string } }, +) { + try { + const cookie = request.cookies.get("access_token"); + const url = new URL(request.url); + const id = url.searchParams.get("id"); + + // Back-end API 호출 + const response = await fetch( + `${process.env.BACKEND_URL}/api/gatherings/applicants/${id}`, + { + method: "DELETE", + headers: { + Cookie: `${cookie?.name}=${cookie?.value}`, + "Content-Type": "application/json", + }, + cache: "no-store", + }, + ); + + if (!response.ok) { + throw new Error(response.statusText); + } + return response; + } catch (e) { + return new Response(JSON.stringify({ error: "Failed to update data." }), { + status: 500, + headers: { + "Content-Type": "application/json", + }, + }); + } +} diff --git a/src/app/api/gathering/bookmark/route.ts b/src/app/api/gathering/bookmark/route.ts new file mode 100644 index 00000000..f470f416 --- /dev/null +++ b/src/app/api/gathering/bookmark/route.ts @@ -0,0 +1,39 @@ +import { NextRequest, NextResponse } from 'next/server'; + +interface BookmarkRequestBody { + isBookmarked: boolean; +} + +// POST 요청을 처리하는 함수 +export async function POST(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Unauthorized", { status: 401 }); + } + + try { + // 요청 바디 파싱 + const { isBookmarked }: BookmarkRequestBody = await request.json(); + + const response = await fetch(`${process.env.BACKEND_URL}/api/gatherings/bookmark`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ isBookmarked }) + }); + + if (!response.ok) { + throw new Error('Network response was not ok'); + } + + return NextResponse.json({ message: 'Bookmark status updated successfully' }, { status: 200 }); + } catch (error) { + // 에러 응답 반환 + return NextResponse.json({ message: 'Internal Server Error' }, { status: 500 }); + } +} diff --git a/src/app/api/gathering/category/route.ts b/src/app/api/gathering/category/route.ts new file mode 100644 index 00000000..59815a91 --- /dev/null +++ b/src/app/api/gathering/category/route.ts @@ -0,0 +1,27 @@ +import { NextResponse } from "next/server"; + +export async function GET(request: Request) { + try { + const response = await fetch( + `${process.env.BACKEND_URL}/api/categories/gathering`, + { + headers: { + "Content-Type": "application/json", + }, + cache: "no-store", + }, + ); + + if (!response.ok) { + throw new Error("Network response was not ok"); + } + + const data = await response.json(); + return NextResponse.json(data); + } catch (err) { + return NextResponse.json( + { error: "Internal Server Error" }, + { status: 500 }, + ); + } +} diff --git a/src/app/api/gathering/detail/route.ts b/src/app/api/gathering/detail/route.ts new file mode 100644 index 00000000..66b6fc99 --- /dev/null +++ b/src/app/api/gathering/detail/route.ts @@ -0,0 +1,42 @@ +import { NextRequest, NextResponse } from 'next/server'; + +export async function GET(request: NextRequest) { + const url = new URL(request.url); + const id = url.searchParams.get('id'); + + if (!id) { + return NextResponse.json({ error: 'ID가 제공되지 않았습니다.' }, { status: 400 }); + } + + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + + + try { + const response = await fetch(`${process.env.BACKEND_URL}/api/gatherings/${id}`, { + method: "GET", + headers: { + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + "Content-Type": "application/json", + }, + }); + + if (response.status === 200) { + const data = await response.json(); + return new NextResponse(JSON.stringify(data), { + status: 200, + }); + } + } catch (error) { + console.error('서버에서 데이터 처리 중 오류 발생:', error); + return NextResponse.json({ error: '서버 오류' }, { status: 500 }); + } +} diff --git a/src/app/api/gathering/finish/route.ts b/src/app/api/gathering/finish/route.ts new file mode 100644 index 00000000..50f7ced3 --- /dev/null +++ b/src/app/api/gathering/finish/route.ts @@ -0,0 +1,37 @@ +import { NextRequest } from "next/server"; + + +// 모임 신청 종료 및 재활성화 +export async function PUT( + request: NextRequest, +) { + try { + const cookie = request.cookies.get("access_token"); + const url = new URL(request.url); + const params = url.searchParams; + const response = await fetch( + `${process.env.BACKEND_URL}/api/gatherings/${params.get("isFinish") == "false" ? "finish" : "not-finish"}/${params.get("id")}`, + { + method: "PUT", + headers: { + Cookie: `${cookie?.name}=${cookie?.value}`, + "Content-Type": "application/json", + }, + cache: "no-store", + }, + ); + + if (!response.ok) { + throw new Error(response.statusText); + } + return response; + } catch (e) { + return new Response(JSON.stringify({ error: "Failed to update data." }), { + status: 500, + headers: { + "Content-Type": "application/json", + }, + }); + } +} + diff --git a/src/app/api/gathering/like/route.ts b/src/app/api/gathering/like/route.ts new file mode 100644 index 00000000..ba73338c --- /dev/null +++ b/src/app/api/gathering/like/route.ts @@ -0,0 +1,84 @@ +import { NextRequest, NextResponse } from 'next/server'; + +interface LikeRequestBody { + isLike: boolean; +} + +// 좋아요 추가 함수 +export async function POST(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + + const url = new URL(request.url); + + try { + const response = await fetch( + `${process.env.BACKEND_URL}/api/gathering/great?gatheringId=${url.searchParams.get("id")}`, + { + method: "POST", + headers: { + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + "Content-Type": "application/json", + }, + }, + ); + + if (!response.ok) { + throw new Error('Network response was not ok'); + } + + return response; + } catch (error) { + // 에러 응답 반환 + return NextResponse.json({ message: 'Internal Server Error' }, { status: 500 }); + } +} + +// 좋아요 제거 함수 +export async function DELETE(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + + const url = new URL(request.url); + + try { + const response = await fetch( + `${process.env.BACKEND_URL}/api/gathering/great?gatheringId=${url.searchParams.get("id")}`, + { + method: "DELETE", + headers: { + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + "Content-Type": "application/json", + }, + }, + ); + + if (!response.ok) { + throw new Error("Network response was not ok"); + } + + return response; + } catch (error) { + // 에러 응답 반환 + return NextResponse.json( + { message: "Internal Server Error" }, + { status: 500 }, + ); + } +} \ No newline at end of file diff --git a/src/app/api/gathering/route.ts b/src/app/api/gathering/route.ts new file mode 100644 index 00000000..9b507cb5 --- /dev/null +++ b/src/app/api/gathering/route.ts @@ -0,0 +1,99 @@ +import { revalidatePath, revalidateTag } from "next/cache"; +import { NextRequest, NextResponse } from "next/server"; +import { URLSearchParams } from "url"; + +export async function POST(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + + try { + const requestData = await request.json(); + + const response = await fetch(`${process.env.BACKEND_URL}/api/gatherings`, { + method: "POST", + headers: { + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + "Content-Type": "application/json", + }, + body: JSON.stringify(requestData), + }); + // TODO : 에러처리 작업 필요함 + if (!response.ok) { + const errorData = await response.json(); + throw new Error(`Error: ${errorData.error || "Unknown error occurred"}`); + } + const resultData = await response.json(); + // 생성시 홈 화면에 new모임 최신화 + revalidateTag("getNewGatheringList"); + return NextResponse.json( + { data: resultData, message: "데이터가 성공적으로 처리되었습니다." }, + { status: 200 }, + ); + } catch (error: unknown) { + if (error instanceof Error) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } else { + return NextResponse.json( + { error: "알 수 없는 오류가 발생했습니다." }, + { status: 500 }, + ); + } + } +} + +// 모임 검색 조회 +export async function GET(request: NextRequest) { + const url = new URL(request.url); + const params = new URLSearchParams(url.search); + const access_cookie = request.cookies.get("access_token"); + + const response = await fetch( + `${process.env.BACKEND_URL}/api/gatherings${params.get("tagName") ? "/tag/search" : ""}` + + url.search, + { + method: "GET", + headers: { + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + "Content-Type": "application/json", + }, + cache: "no-store", + }, + ); + + return response; +} + +// 모임 제거 +export async function DELETE(request: NextRequest) { + const url = new URL(request.url); + const params = new URLSearchParams(url.search); + const access_cookie = request.cookies.get("access_token"); + + const response = await fetch( + `${process.env.BACKEND_URL}/api/gatherings/${params.get("id")}`, + { + method: "DELETE", + headers: { + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + "Content-Type": "application/json", + }, + cache: "no-store", + }, + ); + if (!response.ok) { + return NextResponse.json({ error: "서버 오류" }, { status: 500 }); + } + + revalidateTag("getNewGatheringList"); + revalidatePath("/gathering", "layout"); + revalidatePath("/mypage"); + return response; +} diff --git a/src/app/api/gathering/searchAddress/route.ts b/src/app/api/gathering/searchAddress/route.ts new file mode 100644 index 00000000..dee6728e --- /dev/null +++ b/src/app/api/gathering/searchAddress/route.ts @@ -0,0 +1,36 @@ +import { NextResponse } from "next/server"; + +export async function GET(request: Request) { + const { searchParams } = new URL(request.url); + const address = searchParams.get("address"); + + if (!address) { + return NextResponse.json( + { error: "Bad Request: address parameter is missing" }, + { status: 400 }, + ); + } + + try { + const response = await fetch( + `https://dapi.kakao.com/v2/local/search/address.json?query=${encodeURIComponent(address)}`, + { + headers: { + Authorization: `KakaoAK ${process.env.KAKAO_REST_API_KEY}`, + }, + }, + ); + + if (!response.ok) { + throw new Error("Network response was not ok"); + } + + const data = await response.json(); + return NextResponse.json(data); + } catch (err) { + return NextResponse.json( + { error: "Internal Server Error" }, + { status: 500 }, + ); + } +} diff --git a/src/app/api/gathering/searchPlace/route.ts b/src/app/api/gathering/searchPlace/route.ts new file mode 100644 index 00000000..de699d8c --- /dev/null +++ b/src/app/api/gathering/searchPlace/route.ts @@ -0,0 +1,36 @@ +import { NextResponse } from "next/server"; + +export async function GET(request: Request) { + const { searchParams } = new URL(request.url); + const keyword = searchParams.get("keyword"); + + if (!keyword) { + return NextResponse.json( + { error: "Bad Request: address parameter is missing" }, + { status: 400 }, + ); + } + + try { + const response = await fetch( + `https://dapi.kakao.com/v2/local/search/keyword.json?query=${keyword}`, + { + headers: { + Authorization: `KakaoAK ${process.env.KAKAO_REST_API_KEY}`, + }, + }, + ); + + if (!response.ok) { + throw new Error("Network response was not ok"); + } + + const data = await response.json(); + return NextResponse.json(data); + } catch (err) { + return NextResponse.json( + { error: "Internal Server Error" }, + { status: 500 }, + ); + } +} diff --git a/src/app/api/image/upload/route.ts b/src/app/api/image/upload/route.ts new file mode 100644 index 00000000..5feaebee --- /dev/null +++ b/src/app/api/image/upload/route.ts @@ -0,0 +1,18 @@ +import { NextRequest } from "next/server"; + +// 이미지 업로드 +export async function POST(request: NextRequest) { + const cookie = request.cookies.get("access_token"); + const formData = await request.formData(); + + const response = await fetch(`${process.env.BACKEND_URL}/api/image`, { + method: "POST", + headers: { + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + body: formData, + cache: "no-store", + }); + + return response; +} diff --git a/src/app/api/informations/[id]/route.ts b/src/app/api/informations/[id]/route.ts new file mode 100644 index 00000000..df013129 --- /dev/null +++ b/src/app/api/informations/[id]/route.ts @@ -0,0 +1,87 @@ +import { UpdateInformationRequestDto } from "@/types/InformationDto"; +import { revalidatePath, revalidateTag } from "next/cache"; +import { NextRequest } from "next/server"; + +/** + * 정보 글 가져오기 + * + * 이 API는 정보 글 수정 목적으로 데이터를 + * 클라이언트 사이드에서 요청할 때 사용됩니다. + * + * 정보 상세 페이지에서 데이터를 가져올 때 + * 사용되지 않습니다. + * + * @param request + */ +export async function GET( + request: NextRequest, + { params }: { params: { id: string } }, +) { + const response = await fetch( + `${process.env.BACKEND_URL}/api/informations/${params.id}`, + { + method: "GET", + next: { revalidate: 60, tags: [`getInformation/${params.id}`] }, + }, + ); + + return response; +} + +/** + * 정보 글 수정 + * + * @param request + * @param params + * @returns + */ +export async function PUT( + request: NextRequest, + { params }: { params: { id: string } }, +) { + const cookie = request.cookies.get("access_token"); + const body: UpdateInformationRequestDto = await request.json(); + + // Back-end API 호출 + const response = await fetch( + `${process.env.BACKEND_URL}/api/informations/${params.id}`, + { + method: "PUT", + headers: { + "Content-Type": "application/json", + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + body: JSON.stringify(body), + cache: "no-store", + }, + ); + + // Revalidate the cache + revalidateTag("getBestInformationList"); + revalidatePath("/informations", "layout"); + return response; +} + +/** + * 정보 글 삭제 + */ +export async function DELETE( + request: NextRequest, + { params }: { params: { id: string } }, +) { + const cookie = request.cookies.get("access_token"); + const response = await fetch( + `${process.env.BACKEND_URL}/api/informations/${params.id}`, + { + method: "DELETE", + headers: { + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + cache: "no-store", + }, + ); + + revalidateTag("getBestInformationList"); + revalidatePath("/informations", "layout"); + return response; +} diff --git a/src/app/api/informations/great/route.ts b/src/app/api/informations/great/route.ts new file mode 100644 index 00000000..b16e2899 --- /dev/null +++ b/src/app/api/informations/great/route.ts @@ -0,0 +1,58 @@ +import { revalidatePath, revalidateTag } from "next/cache"; +import { NextRequest } from "next/server"; + +/** + * 정보 좋아요 등록 + */ +export async function POST(request: NextRequest) { + const cookie = request.cookies.get("access_token"); + const body = await request.formData(); + + const data = new URLSearchParams(); + data.append("infoId", body.get("infoId")?.toString() ?? "0"); + + const response = await fetch( + `${process.env.BACKEND_URL}/api/information/great`, + { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + body: data.toString(), + cache: "no-store", + }, + ); + + revalidateTag("getBestInformationList"); + revalidatePath("/informations", "layout"); + return response; +} + +/** + * 정보 좋아요 취소 + */ +export async function DELETE(request: NextRequest) { + const cookie = request.cookies.get("access_token"); + const body = await request.formData(); + + const data = new URLSearchParams(); + data.append("infoId", body.get("infoId")?.toString() ?? "0"); + + const response = await fetch( + `${process.env.BACKEND_URL}/api/information/great`, + { + method: "DELETE", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + body: data.toString(), + cache: "no-store", + }, + ); + + revalidateTag("getBestInformationList"); + revalidatePath("/informations", "layout"); + return response; +} diff --git a/src/app/api/informations/route.ts b/src/app/api/informations/route.ts new file mode 100644 index 00000000..9783c7b3 --- /dev/null +++ b/src/app/api/informations/route.ts @@ -0,0 +1,25 @@ +import { CreateInformationRequestDto } from "@/types/InformationDto"; +import { revalidatePath, revalidateTag } from "next/cache"; +import { NextRequest } from "next/server"; + +// 정보 글 작성 +export async function POST(request: NextRequest) { + const cookie = request.cookies.get("access_token"); + const body: CreateInformationRequestDto = await request.json(); + + // Back-end API 호출 + const response = await fetch(`${process.env.BACKEND_URL}/api/informations`, { + method: "POST", + headers: { + "Content-Type": "application/json", + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + body: JSON.stringify(body), + cache: "no-store", + }); + + // Revalidate the cache + revalidateTag("getBestInformationList"); + revalidatePath("/informations", "layout"); + return response; +} diff --git a/src/app/api/kakao-map/route.ts b/src/app/api/kakao-map/route.ts new file mode 100644 index 00000000..806be0f3 --- /dev/null +++ b/src/app/api/kakao-map/route.ts @@ -0,0 +1,28 @@ +import { NextRequest, NextResponse } from "next/server"; + +const apiKey = process.env.KAKAO_MAPS_API_KEY; // 환경 변수에서 API 키 가져오기 + +export async function GET(req: NextRequest) { + if (!apiKey) { + return NextResponse.json( + { error: "API 키가 설정되어 있지 않습니다." }, + { status: 500 }, + ); + } + + const url = `https://dapi.kakao.com/v2/maps/sdk.js?appkey=${apiKey}&autoload=false`; + + try { + const response = await fetch(url); + if (!response.ok) { + throw new Error("네트워크 응답이 올바르지 않습니다."); + } + const data = await response.text(); // 원시 스크립트 콘텐츠 얻기 + return new NextResponse(data, { + status: 200, + headers: { "Content-Type": "application/javascript" }, + }); + } catch (error) { + return NextResponse.json({ error: "에러" }, { status: 500 }); + } +} diff --git a/src/app/api/mypage/change-nickname/route.ts b/src/app/api/mypage/change-nickname/route.ts new file mode 100644 index 00000000..80bb9ec5 --- /dev/null +++ b/src/app/api/mypage/change-nickname/route.ts @@ -0,0 +1,34 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function PUT(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + + const data = await request.json(); + try { + const response = await fetch(`${process.env.BACKEND_URL}/api/users/nickname`, { + method: "PUT", + headers: { + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + "Content-Type": "application/json", + }, + body: JSON.stringify(data), + }); + + if (!response.ok) { + throw new Error(response.statusText); + } + + return NextResponse.json({ status: 200, message: "닉네임 변경 성공" }); + } catch (err) { + return new Response("Internal Server Error", { status: 500 }); + } +} diff --git a/src/app/api/mypage/gathering/route.ts b/src/app/api/mypage/gathering/route.ts new file mode 100644 index 00000000..870320f4 --- /dev/null +++ b/src/app/api/mypage/gathering/route.ts @@ -0,0 +1,48 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + + const url = new URL(request.url); + const params = new URLSearchParams(url.search); + const category = params.get("category"); + const page = Number(params.get("page")); + if (page < 0 || !Number.isSafeInteger(page)) { + throw new Error("Invalid Page Number"); + } + params.delete("category"); + url.search = params.toString(); + + try { + const response = await fetch( + `${process.env.BACKEND_URL}/api/users/mypage/gathering/${category}` + + url.search, + { + method: "GET", + headers: { + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + "Content-Type": "application/json", + }, + cache: "no-store", + }, + ); + + if (!response.ok) { + throw new Error(response.statusText); + } + + return response; + // return NextResponse.json({ status: 200, message: "마이페이지 게시물 조회 성공" }); + } catch (err) { + return new Response("Internal Server Error", { status: 500 }); + } +} diff --git a/src/app/api/mypage/information/route.ts b/src/app/api/mypage/information/route.ts new file mode 100644 index 00000000..b5184136 --- /dev/null +++ b/src/app/api/mypage/information/route.ts @@ -0,0 +1,47 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + + const url = new URL(request.url); + const params = new URLSearchParams(url.search); + const category = params.get("category"); + const page = Number(params.get("page")); + if (page < 0 || !Number.isSafeInteger(page)) { + throw new Error("Invalid Page Number"); + } + params.delete("category"); + url.search = params.toString(); + + try { + const response = await fetch( + `${process.env.BACKEND_URL}/api/users/mypage/information/${category}` +url.search, + { + method: "GET", + headers: { + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + "Content-Type": "application/json", + }, + cache: "no-store", + }, + ); + + if (!response.ok) { + throw new Error(response.statusText); + } + + return response; + // return NextResponse.json({ status: 200, message: "마이페이지 게시물 조회 성공" }); + } catch (err) { + return new Response("Internal Server Error", { status: 500 }); + } +} diff --git a/src/app/api/mypage/user-image/route.ts b/src/app/api/mypage/user-image/route.ts new file mode 100644 index 00000000..fb561e2a --- /dev/null +++ b/src/app/api/mypage/user-image/route.ts @@ -0,0 +1,34 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function PUT(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + + const formData = await request.formData(); + // formData.append("request", JSON.stringify({ userId: 11 })); + try { + const response = await fetch(`${process.env.BACKEND_URL}/api/users/profile`, { + method: "PUT", + headers: { + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + }, + body: formData, + }); + + if (response.status != 201) { + throw new Error(response.statusText); + } + + return NextResponse.json(await response.json()); + } catch (err) { + return new Response("Internal Server Error", { status: 500 }); + } +} diff --git a/src/app/api/support/notice/route.ts b/src/app/api/support/notice/route.ts new file mode 100644 index 00000000..6158a1af --- /dev/null +++ b/src/app/api/support/notice/route.ts @@ -0,0 +1,25 @@ +import { NextRequest } from "next/server"; + +/** + * 공지사항 목록 조회 + */ +export async function GET(request: NextRequest) { + const url = new URL(request.url); + const page = url.searchParams.get("page") || "1"; + + // 페이지 번호를 0 기반으로 조정합니다. + const zeroBasedPage = Number(page) - 1; + + const apiUrl = `${process.env.BACKEND_URL}/api/notice${zeroBasedPage > 0 ? `?page=${zeroBasedPage}` : ""}`; + + // 백엔드 API 호출 + const response = await fetch(apiUrl, { + method: "GET", + headers: { + "Content-Type": "application/json", + }, + cache: "no-store", + }); + + return response; +} diff --git a/src/app/api/support/qna/route.ts b/src/app/api/support/qna/route.ts new file mode 100644 index 00000000..a17b9191 --- /dev/null +++ b/src/app/api/support/qna/route.ts @@ -0,0 +1,102 @@ +import { NextRequest, NextResponse } from "next/server"; + +/** + * qna 등록 + */ +export async function POST(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + const bodyData = await request.json(); + + const response = await fetch(`${process.env.BACKEND_URL}/api/qna`, { + method: "POST", + headers: { + "Content-Type": "application/json", + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + }, + body: JSON.stringify(bodyData), + cache: "no-store", + }); + + return response; +} + +/** + * qna 리스트 페이지네이션 + */ +export async function GET(request: NextRequest) { + // 요청에서 access_token을 가져옵니다. + const access_cookie = request.cookies.get("access_token"); + + if (!access_cookie) { + // access_token이 없으면 refresh_token이 있는지 확인합니다. + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // refresh_token이 없는 경우 요청을 중단하고 403 응답을 보냅니다. + return new NextResponse("Refresh token not found", { status: 403 }); + } + // refresh_token만으로는 유효하지 않으므로 401 응답을 보냅니다. + return new NextResponse("Access token not found", { status: 401 }); + } + + // 요청 URL에서 쿼리 파라미터를 가져옵니다. + const url = new URL(request.url); + const page = url.searchParams.get("page") || "1"; // 페이지가 없으면 기본값으로 1을 사용합니다. + + // 페이지 번호를 0 기반으로 조정합니다. + const zeroBasedPage = Number(page) - 1; + + // URL을 페이지 번호에 맞게 수정합니다. 페이지 번호가 0보다 큰 경우에만 쿼리 파라미터를 추가합니다. + const apiUrl = `${process.env.BACKEND_URL}/api/qna${zeroBasedPage > 0 ? `?page=${zeroBasedPage}` : ""}`; + + // 백엔드 API 호출 + const response = await fetch(apiUrl, { + method: "GET", + headers: { + "Content-Type": "application/json", + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + }, + cache: "no-store", + }); + + return response; +} + +/** + * qna 삭제 + */ +export async function DELETE(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + const url = new URL(request.url); + + const response = await fetch( + `${process.env.BACKEND_URL}/api/qna/${url.searchParams.get("id")}`, + { + method: "DELETE", + headers: { + "Content-Type": "application/json", + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + }, + cache: "no-store", + }, + ); + + return response; +} diff --git a/src/app/api/support/question/route.ts b/src/app/api/support/question/route.ts new file mode 100644 index 00000000..941879fb --- /dev/null +++ b/src/app/api/support/question/route.ts @@ -0,0 +1,31 @@ +import { NextRequest, NextResponse } from "next/server"; + +/** + * qna 질문 등록 + */ +export async function POST(request: NextRequest) { + const access_cookie = request.cookies.get("access_token"); + if (!access_cookie) { + const refresh_cookie = request.cookies.get("refresh_token"); + if (!refresh_cookie) { + // 리프레시 토큰이 없으므로 요청 중단 + return new NextResponse("Refresh token not found", { status: 403 }); + } + // 리프레시 토큰으로 재발급 받아 재요청 보내기 위한 응답 + return new NextResponse("Refresh token not found", { status: 401 }); + } + + const bodyData = await request.json(); + + const response = await fetch(`${process.env.BACKEND_URL}/api/qna/question`, { + method: "POST", + headers: { + "Content-Type": "application/json", + Cookie: `${access_cookie?.name}=${access_cookie?.value}`, + }, + body: JSON.stringify(bodyData), + cache: "no-store", + }); + + return response; +} diff --git a/src/app/auth/layout.tsx b/src/app/auth/layout.tsx index a0547f78..1eaaa881 100644 --- a/src/app/auth/layout.tsx +++ b/src/app/auth/layout.tsx @@ -1,4 +1,3 @@ -import HeaderContainer from "@/containers/common/HeaderContainer"; export default function RootLayout({ children, @@ -6,8 +5,7 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( -
- +
{children}
); diff --git a/src/app/auth/loading/google/page.tsx b/src/app/auth/loading/google/page.tsx new file mode 100644 index 00000000..67f2c5f2 --- /dev/null +++ b/src/app/auth/loading/google/page.tsx @@ -0,0 +1,9 @@ +import AuthGoogleContainer from "@/containers/auth/AuthGoogleContainer"; + +const Page = () => { + + return ( + + ); +}; +export default Page diff --git a/src/app/auth/loading/kakao/page.tsx b/src/app/auth/loading/kakao/page.tsx new file mode 100644 index 00000000..85c8822b --- /dev/null +++ b/src/app/auth/loading/kakao/page.tsx @@ -0,0 +1,9 @@ +import AuthKaKaoContainer from "@/containers/auth/AuthKaKaoContainer"; + +const Page = () => { + + return ( + + ); +}; +export default Page diff --git a/src/app/auth/signin/page.tsx b/src/app/auth/signin/page.tsx index 829a472f..a486ef32 100644 --- a/src/app/auth/signin/page.tsx +++ b/src/app/auth/signin/page.tsx @@ -1,6 +1,5 @@ +import SignInContainer from "@/containers/auth/SignInContainer"; import { Metadata } from "next"; -import Image from "next/image"; -import Link from "next/link"; export const metadata: Metadata = { title: "로그인 페이지", @@ -9,44 +8,12 @@ export const metadata: Metadata = { export default function page() { return ( -
-
-

로그인

-

SNS로 솔리투어에 로그인하고 더 많은 서비스를 즐겨보세요!

- - -
-
-
- 1초만의 빠른 회원가입 -
-
-
-

- 아직 계정이 없으신가요? 회원가입

-
-
+
+
); } - \ No newline at end of file diff --git a/src/app/auth/signup/page.tsx b/src/app/auth/signup/page.tsx index 1f547501..ee5113ca 100644 --- a/src/app/auth/signup/page.tsx +++ b/src/app/auth/signup/page.tsx @@ -1,6 +1,5 @@ +import SignUpContainer from "@/containers/auth/SignUpContainer"; import { Metadata } from "next"; -import Image from "next/image"; -import Link from "next/link"; export const metadata: Metadata = { title: "회원가입 페이지", @@ -9,36 +8,12 @@ export const metadata: Metadata = { export default function page() { return ( -
-
-

회원가입

-

1초 회원가입으로 입력없이 간편하게 솔리투어를 시작해보세요!

- - -

- 이미 계정이 있으신가요? 로그인

-
+
+
); } - \ No newline at end of file diff --git a/src/app/diary/[id]/loading.tsx b/src/app/diary/[id]/loading.tsx new file mode 100644 index 00000000..b743ff66 --- /dev/null +++ b/src/app/diary/[id]/loading.tsx @@ -0,0 +1,16 @@ +import Breadcrumbs from "@/components/common/Breadcrumb"; +import DiaryViewerSkeleton from "@/components/skeleton/diary/detail/DiaryViewerSkeleton"; + +export default function Loading() { + return ( +
+ + +
+ ); +} diff --git a/src/app/diary/[id]/page.tsx b/src/app/diary/[id]/page.tsx new file mode 100644 index 00000000..638a1ecb --- /dev/null +++ b/src/app/diary/[id]/page.tsx @@ -0,0 +1,58 @@ +import Breadcrumbs from "@/components/common/Breadcrumb"; +import DiaryViewerContainer from "@/containers/diary/detail/DiaryViewerContainer"; +import { GetDiaryResponseDto } from "@/types/DiaryDto"; +import { cookies } from "next/headers"; + +async function getDiary(id: number) { + const cookie = cookies().get("access_token"); + const response = await fetch(`${process.env.BACKEND_URL}/api/diary/${id}`, { + method: "GET", + headers: { + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + next: { revalidate: 60, tags: [`getDiary/${id}`] }, + }); + + if (!response.ok) { + throw new Error(response.statusText); + } + + return response.json() as Promise; +} + +interface Props { + params: { id: string }; +} + +export async function generateMetadata({ params: { id } }: Props) { + const diaryId = Number(id); + if (diaryId <= 0 || !Number.isSafeInteger(diaryId)) { + throw Error("Not Found"); + } + + return { + title: `여행 일기 - ${diaryId}`, + description: "Solitour의 여행 일기 상세 페이지", + }; +} + +export default async function page({ params: { id } }: Props) { + const diaryId = Number(id); + if (diaryId <= 0 || !Number.isSafeInteger(diaryId)) { + throw Error("Not Found"); + } + + const data = await getDiary(diaryId); + + return ( +
+ + +
+ ); +} diff --git a/src/app/diary/edit/[id]/page.tsx b/src/app/diary/edit/[id]/page.tsx new file mode 100644 index 00000000..a8104025 --- /dev/null +++ b/src/app/diary/edit/[id]/page.tsx @@ -0,0 +1,58 @@ +import Breadcrumbs from "@/components/common/Breadcrumb"; +import DiaryEditorContainer from "@/containers/diary/edit/DiaryEditorContainer"; +import { GetDiaryResponseDto } from "@/types/DiaryDto"; +import { cookies } from "next/headers"; + +async function getDiary(id: number) { + const cookie = cookies().get("access_token"); + const response = await fetch(`${process.env.BACKEND_URL}/api/diary/${id}`, { + method: "GET", + headers: { + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + next: { revalidate: 60, tags: [`getDiary/${id}`] }, + }); + + if (!response.ok) { + throw new Error(response.statusText); + } + + return response.json() as Promise; +} + +interface Props { + params: { id: string }; +} + +export async function generateMetadata({ params: { id } }: Props) { + const diaryId = Number(id); + if (diaryId <= 0 || !Number.isSafeInteger(diaryId)) { + throw new Error("Not Found"); + } + + return { + title: `일기 수정하기 - ${diaryId}`, + description: "Solitour의 여행 일기 수정 페이지", + }; +} + +export default async function page({ params: { id } }: Props) { + const diaryId = Number(id); + if (diaryId <= 0 || !Number.isSafeInteger(diaryId)) { + throw new Error("Not Found"); + } + + const data = await getDiary(diaryId); + + return ( +
+ + +
+ ); +} diff --git a/src/app/diary/list/page.tsx b/src/app/diary/list/page.tsx new file mode 100644 index 00000000..b96a1901 --- /dev/null +++ b/src/app/diary/list/page.tsx @@ -0,0 +1,28 @@ +import DiaryList from "@/components/diary/list/DiaryList"; +import DiaryListSkeleton from "@/components/skeleton/diary/list/DiaryListSkeleton"; +import { Metadata } from "next"; +import { Suspense } from "react"; + +interface Props { + searchParams: { [key: string]: string | undefined }; +} + +export const metadata: Metadata = { + title: "여행 일기", + description: "Solitour 여행 일기 목록 페이지", +}; + +export default function page({ searchParams }: Props) { + const page = Number(searchParams["page"]); + if (page <= 0 || !Number.isSafeInteger(page)) { + throw new Error("Invalid Page Number"); + } + + return ( +
+ }> + + +
+ ); +} diff --git a/src/app/diary/write/page.tsx b/src/app/diary/write/page.tsx new file mode 100644 index 00000000..01e56902 --- /dev/null +++ b/src/app/diary/write/page.tsx @@ -0,0 +1,22 @@ +import Breadcrumbs from "@/components/common/Breadcrumb"; +import DiaryEditorContainer from "@/containers/diary/write/DiaryEditorContainer"; +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "일기 등록하기", + description: "Solitour의 여행 일기 등록 페이지", +}; + +export default function page() { + return ( +
+ + +
+ ); +} diff --git a/src/app/error.tsx b/src/app/error.tsx new file mode 100644 index 00000000..843eb8ee --- /dev/null +++ b/src/app/error.tsx @@ -0,0 +1,50 @@ +"use client"; // Error components must be Client Components + +import BackButtonContainer from "@/containers/common/BackButtonContainer"; +import { Metadata } from "next"; +import Image from "next/image"; +import Link from "next/link"; + +export const metadata: Metadata = { + title: "error", + description: "Solitour의 error 페이지", +}; + +const Error = () => { + return ( +
+
+
+

+ 앗..오류가 발생하였습니다. +

+
+

시스템에 오류가 발생하였습니다.

+

잠시 후에 다시 시도해 주세요.

+
+
+ + 홈으로 + + +
+
+
+
+ error_sign +
+
+
+
+ ); +}; + +export default Error; diff --git a/src/app/gathering/[id]/page.tsx b/src/app/gathering/[id]/page.tsx new file mode 100644 index 00000000..341c801a --- /dev/null +++ b/src/app/gathering/[id]/page.tsx @@ -0,0 +1,134 @@ +import Breadcrumbs from "@/components/common/Breadcrumb"; +import GatheringRecommendationList from "@/components/gathering/read/GatheringRecommendationList"; +import GatheringViewerContainer from "@/containers/gathering/read/detail/GatheringViewerContainer"; +import { cookies } from "next/headers"; +import { redirect } from "next/navigation"; +import { NextResponse } from "next/server"; +interface PageProps { + params: { id: string }; +} + +const categories = [ + { label: "모임", href: "/gathering" }, + { label: "모임 상세", href: "" }, +]; + + +async function getNewAccessToken(refreshToken: string): Promise { + try { + const response = await fetch( + `${process.env.BACKEND_URL}/api/auth/oauth2/token/refresh`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + Cookie: `refresh_token=${refreshToken}`, + }, + }, + ); + + if (!response.ok) { + throw new Error("리프레시 토큰을 사용한 액세스 토큰 갱신 실패"); + } + const accessToken = response.headers.get("set-cookie"); + return accessToken; + } catch (error) { + console.error("액세스 토큰 갱신 중 오류 발생:", error); + return null; + } +} + +async function getGathering(id: number) { + let accessToken = cookies().get("access_token")?.value; + const refreshToken = cookies().get("refresh_token")?.value; + + if (!accessToken && !refreshToken) { + redirect("/auth/signin"); + } + + if (!accessToken) { + const newAccessToken= await getNewAccessToken(refreshToken as string); + accessToken = newAccessToken as string; + } + + let response = await fetch( + `${process.env.BACKEND_URL}/api/gatherings/${id}`, + { + method: "GET", + headers: { + "Content-Type": "application/json", + Cookie: `access_token=${accessToken}`, + }, + cache: "no-store", + }, + ); + + if (response.status != 401 && !response.ok) { + throw new Error("서버 에러"); + } + + // 액세스 토큰이 만료된 경우 + if (response.status === 401 && refreshToken) { + const newAccessToken = await getNewAccessToken(refreshToken); + + if (newAccessToken) { + // 새로 발급받은 액세스 토큰으로 다시 요청 + response = await fetch( + `${process.env.BACKEND_URL}/api/gatherings/${id}`, + { + method: "GET", + headers: { + "Content-Type": "application/json", + Cookie: `access_token=${newAccessToken}`, + }, + cache: "no-store", + }, + ); + + } else { + throw new Error("새로운 액세스 토큰 발급 실패"); + } + + if (!response.ok) { + throw new Error("네트워크 응답이 좋지 않습니다."); + } + } + return await response.json(); +} + +export async function generateMetadata({ params: { id } }: PageProps) { + const postId = Number(id); + if (postId <= 0 || !Number.isSafeInteger(postId)) { + throw new Error("페이지를 찾을 수 없습니다."); + } + + return { + title: `모임 상세페이지`, + description: "Solitour의 모임 상세 페이지", + }; +} + + +export default async function Page({ params: { id } }: PageProps) { + const postId = Number(id); + if (postId <= 0 || !Number.isSafeInteger(postId)) { + return NextResponse.json( + { message: "페이지를 찾을 수 없습니다." }, + { status: 404 }, + ); + } + const data = await getGathering(postId); + + return ( +
+ {/* 제일 상단 */} + + + +
+ ); +} diff --git a/src/app/gathering/edit/[id]/page.tsx b/src/app/gathering/edit/[id]/page.tsx new file mode 100644 index 00000000..5e15e3bf --- /dev/null +++ b/src/app/gathering/edit/[id]/page.tsx @@ -0,0 +1,64 @@ +import GatheringUpdateContainer from "@/containers/gathering/createUpdate/GatheringUpdateContainer"; +import { GatheringDetailResponseDto } from "@/types/GatheringDto"; +import { NextResponse } from "next/server"; + +interface PageProps { + params: { id: string }; +} + +async function fetchGatheringData(id: number): Promise { + try { + const response = await fetch(`${process.env.BACKEND_URL}/api/gatherings/${id}`, { + headers: { 'Content-Type': 'application/json' }, + credentials: "include", + cache: "no-store", + }); + + if (!response.ok) { + throw new Error('네트워크 응답이 좋지 않습니다.'); + } + + return await response.json(); + } catch (error) { + console.error('데이터를 가져오는 중 오류 발생:', error); + throw error; + } +} + +export async function generateMetadata({ params: { id } }: PageProps) { + const postId = Number(id); + if (postId <= 0 || !Number.isSafeInteger(postId)) { + throw new Error("페이지를 찾을 수 없습니다."); + } + + return { + title: `모임 수정`, + description: "Solitour의 모임 수정 페이지", + }; +} + +export default async function Page({ params: { id } }: PageProps) { + const postId = Number(id); + + if (postId <= 0 || !Number.isSafeInteger(postId)) { + return NextResponse.json({ message: "페이지를 찾을 수 없습니다." }, { status: 404 }); + } + + try { + const gatheringData = await fetchGatheringData(postId); + return ( +
+ +
+ ); + } catch (error) { + // 데이터 로딩 실패 시 처리 + return ( +
+

데이터를 가져오는 중 오류가 발생했습니다.

+
+ ); + } +} diff --git a/src/app/gathering/page.tsx b/src/app/gathering/page.tsx new file mode 100644 index 00000000..d8a7c03b --- /dev/null +++ b/src/app/gathering/page.tsx @@ -0,0 +1,55 @@ +import Banner from "@/components/common/Banner"; +import TopList from "@/components/common/TopList"; +import GatheringListContainer from "@/containers/gathering/read/GatheringListContainer"; +import { Metadata } from "next"; + +type MyProps = { + searchParams: { [key: string]: string | undefined }; +}; + +export const metadata: Metadata = { + title: "모임", + description: "Solitour의 모임(탭)", +}; + +async function getData() { + const res = await fetch( + `${process.env.BACKEND_URL}/api/categories/gathering`, + { + cache: "no-store", + }, + ); + + if (!res.ok) { + throw new Error("Failed to fetch data"); + } + + return res.json(); +} + +export default async function Page({ + searchParams, +}: { + searchParams: { [key: string]: string | undefined }; +}) { + const gatheringCategoryList = await getData(); + + return ( +
+
+ 직접 내 모임을`, "만들어보세요!"]} + buttonText="모임 등록하기" + category={"모임"} + /> +
+
+
+ +
+ +
+ ); +} diff --git a/src/app/gathering/write/page.tsx b/src/app/gathering/write/page.tsx new file mode 100644 index 00000000..25baec95 --- /dev/null +++ b/src/app/gathering/write/page.tsx @@ -0,0 +1,15 @@ +import GatheringCreateContainer from "@/containers/gathering/createUpdate/GatheringCreateContainer"; +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "모임 등록하기", + description: "Solitour의 모임 등록하기 페이지", +}; + +export default function page() { + return ( +
+ +
+ ); +} diff --git a/src/app/informations/(detail)/[id]/loading.tsx b/src/app/informations/(detail)/[id]/loading.tsx new file mode 100644 index 00000000..8a9a51a1 --- /dev/null +++ b/src/app/informations/(detail)/[id]/loading.tsx @@ -0,0 +1,21 @@ +import Breadcrumbs from "@/components/common/Breadcrumb"; +import InformationViewerSkeleton from "@/components/skeleton/informations/detail/InformationViewerSkeleton"; +import RecommendationListSkeleton from "@/components/skeleton/informations/detail/RecommendationListSkeleton"; + +export default function Loading() { + return ( +
+ + + +
+ ); +} diff --git a/src/app/informations/(detail)/[id]/page.tsx b/src/app/informations/(detail)/[id]/page.tsx new file mode 100644 index 00000000..621aab36 --- /dev/null +++ b/src/app/informations/(detail)/[id]/page.tsx @@ -0,0 +1,67 @@ +import Breadcrumbs from "@/components/common/Breadcrumb"; +import InformationViewer from "@/components/informations/detail/InformationViewer"; +import RecommendationList from "@/components/informations/detail/RecommendationList"; +import { InformationDetailDto } from "@/types/InformationDto"; +import { cookies } from "next/headers"; + +async function getInformation(id: number) { + const cookie = cookies().get("access_token"); + const response = await fetch( + `${process.env.BACKEND_URL}/api/informations/${id}`, + { + method: "GET", + headers: { + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + next: { revalidate: 60, tags: [`getInformation/${id}`] }, + }, + ); + + if (!response.ok) { + // This will activate the closest 'error.tsx' Error Boundary. + throw new Error(response.statusText); + } + + return response.json() as Promise; +} + +interface Props { + params: { id: string }; +} + +export async function generateMetadata({ params: { id } }: Props) { + const informationId = Number(id); + if (informationId <= 0 || !Number.isSafeInteger(informationId)) { + throw Error("Not Found"); + } + + return { + title: `정보 - ${informationId}`, + description: "Solitour의 정보 상세 페이지", + }; +} + +export default async function page({ params: { id } }: Props) { + const informationId = Number(id); + if (informationId < 1 || !Number.isSafeInteger(informationId)) { + throw Error("Not Found"); + } + + const data = await getInformation(informationId); + + return ( +
+ + + +
+ ); +} diff --git a/src/app/informations/accommondation/[id]/page.tsx b/src/app/informations/accommondation/[id]/page.tsx deleted file mode 100644 index c8535dda..00000000 --- a/src/app/informations/accommondation/[id]/page.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import RecommendationList from "@/components/informations/RecommendationList"; -import InformationViewerContainer from "@/containers/informations/InformationViewerContainer"; - -type MyProps = { - params: { id: string }; -}; - -// TODO -export async function generateMetadata({ params: { id } }: MyProps) { - const postId = Number(id); - if (postId <= 0 || !Number.isSafeInteger(postId)) { - throw Error("Not Found"); - } - - //const response = await getPost(postId); - //const post: Post = await response.json(); - - return { - title: `정보 - 숙박 - ${postId}`, - description: "Solitour의 숙박 정보글 조회 페이지", - }; -} - -export default function page({ params: { id } }: MyProps) { - const postId = Number(id); - if (postId < 1 || !Number.isSafeInteger(postId)) { - throw Error("Not Found"); - } - - return ( -
- - -
- ); -} diff --git a/src/app/informations/accommondation/page.tsx b/src/app/informations/accommondation/page.tsx deleted file mode 100644 index 516fb875..00000000 --- a/src/app/informations/accommondation/page.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import CategoryLinks from "@/components/informations/CategoryLinks"; -import BannerContainer from "@/containers/common/BannerContainer"; -import InformationListContainer from "@/containers/informations/InformationListContainer"; -import TopListContainer from "@/containers/informations/TopListContainer"; -import { Metadata } from "next"; - -type MyProps = { - searchParams: { [key: string]: string | undefined }; -}; - -export const metadata: Metadata = { - title: "정보 - 숙박", - description: "Solitour의 정보(탭)", -}; - -export default function page({ searchParams }: MyProps) { - return ( -
- - - - -
- ); -} diff --git a/src/app/informations/activity/[id]/page.tsx b/src/app/informations/activity/[id]/page.tsx deleted file mode 100644 index c2ae3e6d..00000000 --- a/src/app/informations/activity/[id]/page.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import RecommendationList from "@/components/informations/RecommendationList"; -import InformationViewerContainer from "@/containers/informations/InformationViewerContainer"; - -type MyProps = { - params: { id: string }; -}; - -// TODO -export async function generateMetadata({ params: { id } }: MyProps) { - const postId = Number(id); - if (postId <= 0 || !Number.isSafeInteger(postId)) { - throw Error("Not Found"); - } - - //const response = await getPost(postId); - //const post: Post = await response.json(); - - return { - title: `정보 - 액티비티 - ${postId}`, - description: "Solitour의 액티비티 정보글 조회 페이지", - }; -} - -export default function page({ params: { id } }: MyProps) { - const postId = Number(id); - if (postId < 1 || !Number.isSafeInteger(postId)) { - throw Error("Not Found"); - } - - return ( -
- - -
- ); -} diff --git a/src/app/informations/activity/page.tsx b/src/app/informations/activity/page.tsx deleted file mode 100644 index 0dfe7da1..00000000 --- a/src/app/informations/activity/page.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import CategoryLinks from "@/components/informations/CategoryLinks"; -import BannerContainer from "@/containers/common/BannerContainer"; -import InformationListContainer from "@/containers/informations/InformationListContainer"; -import TopListContainer from "@/containers/informations/TopListContainer"; -import { Metadata } from "next"; - -type MyProps = { - searchParams: { [key: string]: string | undefined }; -}; - -export const metadata: Metadata = { - title: "정보 - 액티비티", - description: "Solitour의 정보(탭)", -}; - -export default function page({ searchParams }: MyProps) { - return ( -
- - - - -
- ); -} diff --git a/src/app/informations/edit/[id]/page.tsx b/src/app/informations/edit/[id]/page.tsx new file mode 100644 index 00000000..a0b0306f --- /dev/null +++ b/src/app/informations/edit/[id]/page.tsx @@ -0,0 +1,65 @@ +import Breadcrumbs from "@/components/common/Breadcrumb"; +import InformationEditorContainer from "@/containers/informations/edit/InformationEditorContainer"; +import { InformationDetailDto } from "@/types/InformationDto"; +import { cookies } from "next/headers"; + +async function getInformation(id: number) { + const cookie = cookies().get("access_token"); + const response = await fetch( + `${process.env.BACKEND_URL}/api/informations/${id}`, + { + method: "GET", + headers: { + Cookie: `${cookie?.name}=${cookie?.value}`, + }, + next: { revalidate: 60, tags: [`getInformation/${id}`] }, + }, + ); + + if (!response.ok) { + // This will activate the closest 'error.tsx' Error Boundary. + throw new Error(response.statusText); + } + + return response.json() as Promise; +} + +interface Props { + params: { id: string }; +} + +export async function generateMetadata({ params: { id } }: Props) { + const informationId = Number(id); + if (informationId <= 0 || !Number.isSafeInteger(informationId)) { + throw new Error("Not Found"); + } + + return { + title: `정보 수정하기 - ${informationId}`, + description: "Solitour의 정보 수정하기 페이지", + }; +} + +export default async function page({ params: { id } }: Props) { + const informationId = Number(id); + if (informationId <= 0 || !Number.isSafeInteger(informationId)) { + throw Error("Not Found"); + } + + const data = await getInformation(informationId); + + return ( +
+ + +
+ ); +} diff --git a/src/app/informations/layout.tsx b/src/app/informations/layout.tsx deleted file mode 100644 index df1b7b04..00000000 --- a/src/app/informations/layout.tsx +++ /dev/null @@ -1,7 +0,0 @@ -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return
{children}
; -} diff --git a/src/app/informations/list/layout.tsx b/src/app/informations/list/layout.tsx new file mode 100644 index 00000000..77ccff73 --- /dev/null +++ b/src/app/informations/list/layout.tsx @@ -0,0 +1,31 @@ +import Banner from "@/components/common/Banner"; +import TopList from "@/components/common/TopList"; +import TopListSkeleton from "@/components/skeleton/common/TopListSkeleton"; +import { Metadata } from "next"; +import { Suspense } from "react"; + +export const metadata: Metadata = { + title: "정보", + description: "Solitour의 정보 목록 페이지", +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( +
+ 여행 정보를`, "공유해보세요!"]} + buttonText={`정보 등록하기`} + category="정보" + /> +
+ }> + + + {children} +
+ ); +} diff --git a/src/app/informations/list/page.tsx b/src/app/informations/list/page.tsx new file mode 100644 index 00000000..d90c745a --- /dev/null +++ b/src/app/informations/list/page.tsx @@ -0,0 +1,48 @@ +import CategoryList from "@/components/informations/list/CategoryList"; +import InformationList from "@/components/informations/list/InformationList"; +import CategoryListSkeleton from "@/components/skeleton/informations/list/CategoryListSkeleton"; +import InformationListSkeleton from "@/components/skeleton/informations/list/InformationListSkeleton"; +import { Suspense } from "react"; + +interface Props { + searchParams: { [key: string]: string | undefined }; +} + +export default function page({ searchParams }: Props) { + const page = Number(searchParams["page"]); + if (page <= 0 || !Number.isSafeInteger(page)) { + throw new Error("Invalid Page Number"); + } + + const parentCategoryId = Number(searchParams["parentCategoryId"]); + if (parentCategoryId <= 0 || !Number.isSafeInteger(parentCategoryId)) { + throw new Error("Invalid ParentCategoryId"); + } + + const childCategoryId = Number(searchParams["childCategoryId"] || 0); + if (childCategoryId < 0 || !Number.isSafeInteger(childCategoryId)) { + throw new Error("Invalid ChildCategoryId"); + } + + return ( +
+ }> + + + }> + + +
+ ); +} diff --git a/src/app/informations/restaurant/[id]/page.tsx b/src/app/informations/restaurant/[id]/page.tsx deleted file mode 100644 index 80af2cdf..00000000 --- a/src/app/informations/restaurant/[id]/page.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import RecommendationList from "@/components/informations/RecommendationList"; -import InformationViewerContainer from "@/containers/informations/InformationViewerContainer"; - -type MyProps = { - params: { id: string }; -}; - -// TODO -export async function generateMetadata({ params: { id } }: MyProps) { - const postId = Number(id); - if (postId <= 0 || !Number.isSafeInteger(postId)) { - throw Error("Not Found"); - } - - //const response = await getPost(postId); - //const post: Post = await response.json(); - - return { - title: `정보 - 맛집 - ${postId}`, - description: "Solitour의 맛집 정보글 조회 페이지", - }; -} - -export default function page({ params: { id } }: MyProps) { - const postId = Number(id); - if (postId < 1 || !Number.isSafeInteger(postId)) { - throw Error("Not Found"); - } - - return ( -
- - -
- ); -} diff --git a/src/app/informations/restaurant/page.tsx b/src/app/informations/restaurant/page.tsx deleted file mode 100644 index 050d7220..00000000 --- a/src/app/informations/restaurant/page.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import CategoryLinks from "@/components/informations/CategoryLinks"; -import BannerContainer from "@/containers/common/BannerContainer"; -import InformationListContainer from "@/containers/informations/InformationListContainer"; -import TopListContainer from "@/containers/informations/TopListContainer"; -import { Metadata } from "next"; - -type MyProps = { - searchParams: { [key: string]: string | undefined }; -}; - -export const metadata: Metadata = { - title: "정보 - 맛집", - description: "Solitour의 정보(탭)", -}; - -export default function page({ searchParams }: MyProps) { - return ( -
- - - - -
- ); -} diff --git a/src/app/informations/write/page.tsx b/src/app/informations/write/page.tsx index 87d3f460..07ece1d8 100644 --- a/src/app/informations/write/page.tsx +++ b/src/app/informations/write/page.tsx @@ -1,3 +1,4 @@ +import Breadcrumbs from "@/components/common/Breadcrumb"; import InformationEditorContainer from "@/containers/informations/write/InformationEditorContainer"; import { Metadata } from "next"; @@ -8,7 +9,16 @@ export const metadata: Metadata = { export default function page() { return ( -
+
+
); diff --git a/src/app/layout.tsx b/src/app/layout.tsx index f04399c3..fc230b40 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -3,17 +3,43 @@ import FloatingButtonContainer from "@/containers/common/FloatingButtonContainer import HeaderContainer from "@/containers/common/HeaderContainer"; import "@/styles/globals.css"; import type { Metadata } from "next"; -import { Noto_Sans_KR } from "next/font/google"; import Script from "next/script"; -const notoSansKr = Noto_Sans_KR({ weight: "400", subsets: ["latin"] }); - export const metadata: Metadata = { + metadataBase: new URL("https://www.solitourist.com"), title: { template: "Solitour | %s", default: "Solitour - 새로운 나를 찾는 여행", }, - description: "Solitour", + description: + "Solitour(솔리투어)는 사용자들이 여행한 정보를 기록하고 공유하여 정보나 팁 같은 것들을 이미지와 함께 제공하거나, 사용자들이 모임 기간, 모임 마감일, 성별, 나이, 장소, 참여 인원 등을 설정하여 모임을 등록하고, 모임에 신청할 수 있는 서비스를 제공합니다. 또한 본인의 여행 기록을 남길 수 있는 서비스도 제공합니다.", + keywords: [ + "Solitour", + "Solitourist", + "솔리투어", + "여행", + "정보", + "모임", + "일기", + "여행일기", + ], + openGraph: { + title: "Solitour - 새로운 나를 찾는 여행", + description: + "Solitour(솔리투어)는 사용자들이 여행한 정보를 기록하고 공유하여 정보나 팁 같은 것들을 이미지와 함께 제공하거나, 사용자들이 모임 기간, 모임 마감일, 성별, 나이, 장소, 참여 인원 등을 설정하여 모임을 등록하고, 모임에 신청할 수 있는 서비스를 제공합니다. 또한 본인의 여행 기록을 남길 수 있는 서비스도 제공합니다.", + url: "https://www.solitourist.com/", + siteName: "솔리투어", + images: [ + { + url: "/home/background1.png", + width: 1440, + height: 600, + alt: "솔리투어 메인 이미지", + }, + ], + locale: "ko_KR", + type: "website", + }, }; declare global { @@ -28,10 +54,23 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - - + + + + - {children} +
+
+ {children} +
+
+