diff --git a/.env.example b/.env.example index 1076838..5327e3c 100644 --- a/.env.example +++ b/.env.example @@ -4,3 +4,4 @@ GOOGLE_SECRET= GITHUB_ID= GITHUB_SECRET= NEXTAUTH_SECRET= + diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 0000000..ae218f8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,26 @@ +name: "🐞 Bug Report" +description: "Create a report to help us improve" +title: "BUG:" +labels: ["Bug"] +body: + - type: checkboxes + attributes: + label: "Is there an existing issue for this?" + description: "Please search to see if an issue already exists for the bug you encountered." + options: + - label: "I have searched the existing issues" + required: true + - type: textarea + attributes: + label: "What happened?" + description: "A concise description of what you're experiencing." + validations: + required: true + - type: checkboxes + attributes: + label: "Record" + options: + - label: "I agree to follow this project's Code of Conduct" + required: true + - label: "I'm a GSSOC'24 contributor" + - label: "I want to work on this issue" \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/documentation.yml b/.github/ISSUE_TEMPLATE/documentation.yml new file mode 100644 index 0000000..636ab47 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.yml @@ -0,0 +1,26 @@ +name: "📑 Documentation Update" +description: "Improve Documentation" +title: "DOC:" +labels: [DOC, Needs Triage] +body: + - type: textarea + attributes: + label: "What's wrong with the existing documentation" + description: "Which things do we need to add or delete" + validations: + required: true + - type: textarea + attributes: + label: "Add ScreenShots" + description: "Add sufficient SS to explain your issue." + validations: + required: false + + - type: checkboxes + attributes: + label: "Record" + options: + - label: "I agree to follow this project's Code of Conduct" + required: true + - label: "I'm a GSSOC'24 contributor" + - label: "I want to work on this issue" \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml new file mode 100644 index 0000000..afbb1f3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature.yml @@ -0,0 +1,25 @@ +name: "✨ Feature Request" +description: "Suggest an idea for this project " +title: "Feat:" +labels: [Feat, Needs Triage] +body: + - type: textarea + attributes: + label: "Describe the feature" + description: + validations: + required: true + - type: textarea + attributes: + label: "Add ScreenShots" + description: "Add sufficient SS to explain your issue." + validations: + required: true + - type: checkboxes + attributes: + label: "Record" + options: + - label: "I agree to follow this project's Code of Conduct" + required: true + - label: "I'm a GSSOC'24 contributor" + - label: "I want to work on this issue" \ No newline at end of file diff --git a/.github/Issue Template/bug-report.md b/.github/Issue Template/bug-report.md deleted file mode 100644 index 3983f43..0000000 --- a/.github/Issue Template/bug-report.md +++ /dev/null @@ -1,29 +0,0 @@ -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] - -**Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] - -**Additional context** -Add any other context about the problem here. diff --git a/.github/Issue Template/feature-request.md b/.github/Issue Template/feature-request.md deleted file mode 100644 index b85212c..0000000 --- a/.github/Issue Template/feature-request.md +++ /dev/null @@ -1,15 +0,0 @@ -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. - -What problem is this feature trying to solve? - -How do we know when the feature is complete? diff --git a/.github/workflows/auto-assign.yml b/.github/workflows/auto-assign.yml index 437ad32..6381cea 100644 --- a/.github/workflows/auto-assign.yml +++ b/.github/workflows/auto-assign.yml @@ -1,8 +1,30 @@ - - name: Auto assign PR - # You may pin to the exact commit or the version. - # uses: li-sumup/actions-assigner@964e42cd4fe645e3ea169ce3887db85e8bb128c3 - uses: li-sumup/actions-assigner@v1.0.2 - with: - # GitHub token - token: # optional, default is ${{ github.token }} - +name: Assign Issue to Self + +on: + issue_comment: + types: [created] + +permissions: + issues: write # Ensure the workflow has write permissions for issues + +jobs: + assign: + runs-on: ubuntu-latest + + steps: + - name: Assign issue to commenter if they comment "self" + uses: actions/github-script@v6 + with: + script: | + const issueNumber = context.issue.number; + const commentBody = context.payload.comment.body.trim().toLowerCase(); + const commenter = context.payload.comment.user.login; + + if (commentBody === 'self') { + await github.rest.issues.addAssignees({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + assignees: [commenter] + }); + } diff --git a/.github/workflows/autocomment-iss-close.yml b/.github/workflows/autocomment-iss-close.yml new file mode 100644 index 0000000..3acbe0a --- /dev/null +++ b/.github/workflows/autocomment-iss-close.yml @@ -0,0 +1,29 @@ +name: Comment on Issue Close + +on: + issues: + types: [closed] + +jobs: + greet-on-close: + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - name: Greet User + uses: actions/github-script@v5 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const issue = context.payload.issue; + const issueCreator = issue.user.login; + const issueNumber = issue.number; + + const greetingMessage = `Hello @${issueCreator}! Your issue #${issueNumber} has been closed. Thank you for your contribution!`; + + github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + body: greetingMessage + }); \ No newline at end of file diff --git a/.github/workflows/autocomment-issue.yml b/.github/workflows/autocomment-issue.yml new file mode 100644 index 0000000..6e6df37 --- /dev/null +++ b/.github/workflows/autocomment-issue.yml @@ -0,0 +1,36 @@ +name: Auto Comment on Issue + +on: + issues: + types: [opened] + +permissions: + issues: write + +jobs: + comment: + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - name: Add Comment to Issue + run: | + COMMENT=$(cat < + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..03d9549 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..61dbe7f --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/mystory.iml b/.idea/mystory.iml new file mode 100644 index 0000000..24643cc --- /dev/null +++ b/.idea/mystory.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cc00949..f03ab8a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -67,10 +67,12 @@ Got it! The information has been stored. If you need anything else, feel free to Launch GitHub Desktop and log in to your GitHub account if you haven't already. 2. **Clone the Repository:** + - If you haven't cloned the mystory repository yet, you can do so by clicking on the "File" menu and selecting "Clone Repository." - Choose the mystory repository from the list of repositories on GitHub and clone it to your local machine. 3. **Switch to the Correct Branch:** + - Ensure you are on the branch that you want to submit a pull request for. - If you need to switch branches, you can do so by clicking on the "Current Branch" dropdown menu and selecting the desired branch. @@ -78,6 +80,7 @@ Got it! The information has been stored. If you need anything else, feel free to Make your changes to the code or files in the repository using your preferred code editor. 5. **Commit Changes:** + - In GitHub Desktop, you'll see a list of the files you've changed. Check the box next to each file you want to include in the commit. - Enter a summary and description for your changes in the "Summary" and "Description" fields, respectively. Click the "Commit to " button to commit your changes to the local branch. @@ -85,15 +88,17 @@ Got it! The information has been stored. If you need anything else, feel free to After committing your changes, click the "Push origin" button in the top right corner of GitHub Desktop to push your changes to your forked repository on GitHub. 7. **Create a Pull Request:** - - Go to the GitHub website and navigate to your fork of the mystory repository. - - You should see a button to "Compare & pull request" between your fork and the original repository. Click on it. + +- Go to the GitHub website and navigate to your fork of the mystory repository. +- You should see a button to "Compare & pull request" between your fork and the original repository. Click on it. 8. **Review and Submit:** + - On the pull request page, review your changes and add any additional information, such as a title and description, that you want to include with your pull request. - Once you're satisfied, click the "Create pull request" button to submit your pull request. 9. **Wait for Review:** - Your pull request will now be available for review by the project maintainers. They may provide feedback or ask for changes before merging your pull request into the main branch of the mystory repository. + Your pull request will now be available for review by the project maintainers. They may provide feedback or ask for changes before merging your pull request into the main branch of the mystory repository. ⭐️ Support the Project If you find this project helpful, please consider giving it a star on GitHub! Your support helps to grow the project and reach more contributors. diff --git a/README.md b/README.md index be24c96..9fc4558 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,16 @@ docker-compose -f docker-compose.dev.yaml up --build Open your browser and navigate to [http://localhost:3000](http://localhost:3000) to view your project. + ## Contributors + +To add your profile to the contributors page, please follow these steps: + +1. Navigate to src/app/(routes)/contributors/ContributorsData.ts. + +2. Add Only Your Information: You are allowed to add your own details to the ContributorsData.ts file to ensure accurate attribution of your contributions. + +3. Respect Existing Information: Do not alter or modify the details of other contributors. Unauthorized changes may result in your pull request being rejected or not merged. + ## Maintainers - [xenotron](https://github.com/Sayak-Bhunia) diff --git a/Settings/README.md b/Settings/README.md new file mode 100644 index 0000000..6bf6869 --- /dev/null +++ b/Settings/README.md @@ -0,0 +1,27 @@ +# Account Settings Page + +This project is a simple account settings page built with HTML, CSS, and JavaScript. It includes options to update the user's email, phone number, and two-step verification settings. Additionally, it provides an option to delete the account with a confirmation prompt. + +## Features + +- **Update Email**: Change the user's email address. +- **Update Phone Number**: Change the user's phone number. +- **Two-Step Verification**: Enable or disable two-step verification for added security. +- **Save Changes**: Save updates to the user's account with a confirmation feedback message. +- **Delete Account**: Permanently delete the user's account after a confirmation prompt. + +## Technologies Used + +- HTML +- CSS +- JavaScript + +## Getting Started + +To get a local copy up and running, follow these simple steps. + +### Prerequisites + +You need a modern web browser to view and interact with the page. + + diff --git a/Settings/index.html b/Settings/index.html new file mode 100644 index 0000000..517da0d --- /dev/null +++ b/Settings/index.html @@ -0,0 +1,207 @@ + + + +Account Settings + + + +
+

Account Settings

+
+ + + + + + + + + + + + +
+
+ + + diff --git a/helpers/session.js b/helpers/session.js index 6fa71d8..74f8a66 100644 --- a/helpers/session.js +++ b/helpers/session.js @@ -1,5 +1,5 @@ -import { options } from '@/app/api/auth/[...nextauth]/options'; import User from '@/models/userModel'; +import { options } from '@/app/api/auth/[...nextauth]/options'; import { getServerSession } from 'next-auth'; export async function getUserId() { const session = await getServerSession(options); @@ -7,3 +7,8 @@ export async function getUserId() { const id = user._id; return id.toString(); } +export async function getCurrentUser() { + const session = await getServerSession(options); + const user = await User.findOne({ email: session.user.email }).lean().exec(); + return user; +} diff --git a/next.config.mjs b/next.config.mjs index 095e212..2a419b2 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,7 +1,17 @@ /** @type {import('next').NextConfig} */ const nextConfig = { images: { - domains: ['cdn.buymeacoffee.com', 'cdn.dribbble.com'], + domains: [ + 'cdn.buymeacoffee.com', + 'cdn.dribbble.com', + 'lh3.googleusercontent.com', + ], + remotePatterns: [ + { + protocol: 'https', + hostname: '*', + } + ] }, }; diff --git a/package-lock.json b/package-lock.json index fb7b07a..cbe3cc3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,15 +9,19 @@ "version": "0.1.0", "dependencies": { "@gsap/react": "^2.1.1", + "@radix-ui/react-avatar": "^1.0.4", + "@studio-freight/lenis": "^1.0.42", "aos": "^2.3.4", "axios": "^1.6.8", "bcrypt": "^5.1.1", + "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "date-fns": "^3.6.0", "framer-motion": "^11.1.9", "gsap": "^3.12.5", "jsonwebtoken": "^9.0.2", "locomotive-scroll": "^5.0.0-beta.12", + "lucide-react": "^0.381.0", "mini-svg-data-uri": "^1.4.4", "mongoose": "^8.3.4", "next": "14.2.3", @@ -32,12 +36,16 @@ "sass": "^1.77.0", "shadcn-ui": "^0.2.3", "tailwind-merge": "^2.3.0", + "vanilla-tilt": "^1.8.1", "zod": "^3.23.8" }, "devDependencies": { + "@types/node": "20.12.12", + "@types/react": "18.3.2", "eslint": "^8.57.0", "eslint-config-next": "14.2.3", "eslint-plugin-next": "^0.0.0", + "html-loader": "^5.0.0", "husky": "^9.0.11", "lint-staged": "^15.2.2", "postcss": "^8", @@ -72,11 +80,11 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", + "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==", "dependencies": { - "@babel/highlight": "^7.24.2", + "@babel/highlight": "^7.24.6", "picocolors": "^1.0.0" }, "engines": { @@ -84,19 +92,19 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", - "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", + "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", - "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz", + "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.6", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -170,9 +178,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", - "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", + "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -201,9 +209,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -359,6 +367,16 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", @@ -601,12 +619,153 @@ "node": ">=14" } }, + "node_modules/@radix-ui/react-avatar": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.0.4.tgz", + "integrity": "sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@rushstack/eslint-patch": { "version": "1.10.3", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz", "integrity": "sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==", "dev": true }, + "node_modules/@studio-freight/lenis": { + "version": "1.0.42", + "resolved": "https://registry.npmjs.org/@studio-freight/lenis/-/lenis-1.0.42.tgz", + "integrity": "sha512-HJAGf2DeM+BTvKzHv752z6Z7zy6bA643nZM7W88Ft9tnw2GsJSp6iJ+3cekjyMIWH+cloL2U9X82dKXgdU8kPg==", + "deprecated": "'@studio-freight/lenis' has been renamed to just 'lenis', run 'npx @darkroom.engineering/codemods' to update your dependecies accordingly." + }, "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", @@ -668,12 +827,73 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "peer": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "peer": true + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/node": { + "version": "20.12.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", + "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "devOptional": true + }, + "node_modules/@types/react": { + "version": "18.3.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.2.tgz", + "integrity": "sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==", + "devOptional": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, "node_modules/@types/webidl-conversions": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", @@ -820,6 +1040,181 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -837,6 +1232,16 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -873,6 +1278,16 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/ansi-escapes": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", @@ -1108,16 +1523,19 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", - "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.1.0", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/arraybuffer.prototype.slice": { @@ -1274,6 +1692,39 @@ "node": ">=8" } }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/bson": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/bson/-/bson-6.7.0.tgz", @@ -1310,6 +1761,12 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -1348,6 +1805,16 @@ "node": ">=6" } }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, "node_modules/camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", @@ -1358,9 +1825,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001621", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz", - "integrity": "sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==", + "version": "1.0.30001627", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001627.tgz", + "integrity": "sha512-4zgNiB8nTyV/tHhwZrFs88ryjls/lHiqFhrxCW4qSTeuRByBVnPYpDInchOIySWknznucaf31Z4KYqjfbrecVw==", "funding": [ { "type": "opencollective", @@ -1434,11 +1901,52 @@ "node": ">=10" } }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", + "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "dependencies": { + "clsx": "2.0.0" + }, + "funding": { + "url": "https://joebell.co.uk" + } + }, + "node_modules/class-variance-authority/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/classlist-polyfill": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/classlist-polyfill/-/classlist-polyfill-1.2.0.tgz", "integrity": "sha512-GzIjNdcEtH4ieA2S8NmrSxv7DfEV5fmixQeyTmqmRmRJPGpRBaSnA2a0VrCjyT8iW8JjEdMbKzDotAJf+ajgaQ==" }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, "node_modules/cli-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", @@ -1600,12 +2108,11 @@ } }, "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "engines": { - "node": ">=18" + "node": ">=14" } }, "node_modules/concat-map": { @@ -1679,8 +2186,7 @@ "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "peer": true + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -1757,9 +2263,9 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dependencies": { "ms": "2.1.2" }, @@ -1897,6 +2403,16 @@ "node": ">=6.0.0" } }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -1911,6 +2427,13 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/electron-to-chromium": { + "version": "1.4.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.788.tgz", + "integrity": "sha512-ubp5+Ev/VV8KuRoWnfP2QF2Bg+O2ZFdb49DiiNbz2VmgkIqrnyYaqIOqj8A6K/3p1xV0QcU5hBQ1+BmB6ot1OA==", + "dev": true, + "peer": true + }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -1930,6 +2453,18 @@ "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==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2044,6 +2579,13 @@ "node": ">= 0.4" } }, + "node_modules/es-module-lexer": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", + "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==", + "dev": true, + "peer": true + }, "node_modules/es-object-atoms": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", @@ -2096,6 +2638,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -2358,29 +2910,29 @@ "dev": true }, "node_modules/eslint-plugin-react": { - "version": "7.34.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", - "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", + "version": "7.34.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz", + "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==", "dev": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlast": "^1.2.4", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.2", "array.prototype.toreversed": "^1.1.2", "array.prototype.tosorted": "^1.1.3", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.17", + "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7", - "object.hasown": "^1.1.3", - "object.values": "^1.1.7", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.10" + "string.prototype.matchall": "^4.0.11" }, "engines": { "node": ">=4" @@ -2532,6 +3084,16 @@ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -2757,9 +3319,9 @@ } }, "node_modules/framer-motion": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.2.6.tgz", - "integrity": "sha512-XUrjjBt57e5YoHQtjwc3eNchFBuHvIgN/cS8SC4oIaAn2J/0+bLanUxXizidJKZVeHJam/JrmMnPRjYMglVn5g==", + "version": "11.2.10", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.2.10.tgz", + "integrity": "sha512-/gr3PLZUVFCc86a9MqCUboVrALscrdluzTb3yew+2/qKBU8CX6nzs918/SRBRCqaPbx0TZP10CB6yFgK2C5cYQ==", "dependencies": { "tslib": "^2.4.0" }, @@ -3026,6 +3588,13 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, "node_modules/glob/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -3223,6 +3792,47 @@ "node": ">= 0.4" } }, + "node_modules/html-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-5.0.0.tgz", + "integrity": "sha512-puaGKdjdVVIFRtgIC2n5dt5bt0N5j6heXlAQZ4Do1MLjHmOT1gCE1Ogg7XZNeJlnOVHHsrZKGs5dfh+XwZ3XPw==", + "dev": true, + "dependencies": { + "html-minifier-terser": "^7.2.0", + "parse5": "^7.1.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -3320,6 +3930,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3790,6 +4401,37 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/jiti": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", @@ -4023,21 +4665,21 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/lint-staged": { - "version": "15.2.4", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.4.tgz", - "integrity": "sha512-3F9KRQIS2fVDGtCkBp4Bx0jswjX7zUcKx6OF0ZeY1prksUyKPRIIUqZhIUYAstJfvj6i48VFs4dwVIbCYwvTYQ==", - "dev": true, - "dependencies": { - "chalk": "5.3.0", - "commander": "12.1.0", - "debug": "4.3.4", - "execa": "8.0.1", - "lilconfig": "3.1.1", - "listr2": "8.2.1", - "micromatch": "4.0.6", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.4.2" + "version": "15.2.5", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.5.tgz", + "integrity": "sha512-j+DfX7W9YUvdzEZl3Rk47FhDF6xwDBV5wwsCPw6BwWZVPYJemusQmvb9bRsW23Sqsaa+vRloAWogbK4BUuU2zA==", + "dev": true, + "dependencies": { + "chalk": "~5.3.0", + "commander": "~12.1.0", + "debug": "~4.3.4", + "execa": "~8.0.1", + "lilconfig": "~3.1.1", + "listr2": "~8.2.1", + "micromatch": "~4.0.7", + "pidtree": "~0.6.0", + "string-argv": "~0.3.2", + "yaml": "~2.4.2" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -4061,29 +4703,13 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/lint-staged/node_modules/micromatch": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.6.tgz", - "integrity": "sha512-Y4Ypn3oujJYxJcMacVgcs92wofTHxp9FzfDpQON4msDefoC0lb3ETvQLOdLcbhSwU1bz8HrL/1sygfBIHudrkQ==", - "dev": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/lint-staged/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "node_modules/lint-staged/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=18" } }, "node_modules/listr2": { @@ -4182,6 +4808,16 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -4198,11 +4834,11 @@ } }, "node_modules/locomotive-scroll": { - "version": "5.0.0-beta.12", - "resolved": "https://registry.npmjs.org/locomotive-scroll/-/locomotive-scroll-5.0.0-beta.12.tgz", - "integrity": "sha512-xtfgWBGzBGp1i3cY/12i07m/3OkOo/LyAv5ceiy4OkZuk+cNiM7APzgWwyOw4VppDH1P3DlZOCZrA7fhvnqXUA==", + "version": "5.0.0-beta.13", + "resolved": "https://registry.npmjs.org/locomotive-scroll/-/locomotive-scroll-5.0.0-beta.13.tgz", + "integrity": "sha512-zA4E6jbakBVwakb8KzTF6kVhdql1HCZbWCY0BzZ2LNNm9G5uWlZc9+Q5Lcxl7DmygY+5Yt1EfT5p3l3JLG8RPg==", "dependencies": { - "lenis": "^1.0.45" + "lenis": "1.0.45" }, "engines": { "node": ">=17" @@ -4425,6 +5061,15 @@ "loose-envify": "cli.js" } }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -4436,6 +5081,14 @@ "node": ">=10" } }, + "node_modules/lucide-react": { + "version": "0.381.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.381.0.tgz", + "integrity": "sha512-cft0ywFfHkGprX5pwKyS9jme/ksh9eYAHSZqFRKN0XGp70kia4uqZOTPB+i+O51cqiJlvGLqzMGWnMHaeJTs3g==", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -4546,9 +5199,9 @@ } }, "node_modules/minipass": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", - "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -4662,9 +5315,9 @@ } }, "node_modules/mongoose": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.0.tgz", - "integrity": "sha512-fgqRMwVEP1qgRYfh+tUe2YBBFnPO35FIg2lfFH+w9IhRGg1/ataWGIqvf/MjwM29cZ60D5vSnqtN2b8Qp0sOZA==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.1.tgz", + "integrity": "sha512-odQ2WEWGL3hb0Qex+QMN4eH6D34WdMEw7F1If2MGABApSDmG9cMmqv/G1H6WsXmuaH9mkuuadW/WbLE5+tHJwA==", "dependencies": { "bson": "^6.7.0", "kareem": "2.6.3", @@ -4745,6 +5398,13 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "peer": true + }, "node_modules/next": { "version": "14.2.3", "resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz", @@ -4859,6 +5519,16 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node_modules/node-addon-api": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", @@ -4920,6 +5590,13 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true, + "peer": true + }, "node_modules/nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -5265,6 +5942,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -5293,6 +5980,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -5536,9 +6245,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", - "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -5584,9 +6293,9 @@ } }, "node_modules/prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.0.tgz", + "integrity": "sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -5657,6 +6366,16 @@ } ] }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", @@ -5718,9 +6437,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-live-clock": { - "version": "6.1.20", - "resolved": "https://registry.npmjs.org/react-live-clock/-/react-live-clock-6.1.20.tgz", - "integrity": "sha512-CxB77yU1Rq3UHzs6kJwa9yFGogrFBnqOmKS0WJ8bboAgmq9S0eTYVRRosJMTS95Mrw8E/BtCg+R48l1ESlSIcA==", + "version": "6.1.22", + "resolved": "https://registry.npmjs.org/react-live-clock/-/react-live-clock-6.1.22.tgz", + "integrity": "sha512-k+dvmsYcJiLbC84CxwXpdr2gD6/nDePoqdVROGSiBafRgcMAi066mVlrMr2q8rwqZ9TZ9s0LPzRBHwll/awfQA==", "dependencies": { "moment": "^2.29.1", "moment-timezone": "^0.5.33" @@ -5818,6 +6537,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -5913,6 +6641,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -5927,6 +6656,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6019,9 +6749,9 @@ } }, "node_modules/sass": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.2.tgz", - "integrity": "sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA==", + "version": "1.77.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.4.tgz", + "integrity": "sha512-vcF3Ckow6g939GMA4PeU7b2K/9FALXk2KF9J87txdHzXbUF9XRQRwSxcAs/fGaTnJeBFd7UoV22j3lzMLdM0Pw==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -6042,6 +6772,25 @@ "loose-envify": "^1.1.0" } }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", @@ -6053,6 +6802,16 @@ "node": ">=10" } }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -6136,14 +6895,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/shadcn-ui/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "engines": { - "node": ">=14" - } - }, "node_modules/shadcn-ui/node_modules/execa": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", @@ -6339,6 +7090,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", @@ -6347,6 +7107,16 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/sparse-bitfield": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", @@ -6775,6 +7545,65 @@ "node": ">=8" } }, + "node_modules/terser": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", + "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -6994,6 +7823,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -7002,6 +7837,37 @@ "node": ">= 10.0.0" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -7024,6 +7890,25 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/vanilla-tilt": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/vanilla-tilt/-/vanilla-tilt-1.8.1.tgz", + "integrity": "sha512-hPB1XUsnh+SIeVSW2beb5RnuFxz4ZNgxjGD78o52F49gS4xaoLeEMh9qrQnJrnEn/vjjBI7IlxrrXmz4tGV0Kw==" + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -7048,6 +7933,88 @@ "node": ">=12" } }, + "node_modules/webpack": { + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.16.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/whatwg-url": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", @@ -7310,9 +8277,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", - "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.3.tgz", + "integrity": "sha512-sntgmxj8o7DE7g/Qi60cqpLBA3HG3STcDA0kO+WfB05jEKhZMbY7umNm2rBpQvsmZ16/lPXCJGW2672dgOUkrg==", "dev": true, "bin": { "yaml": "bin.mjs" diff --git a/package.json b/package.json index 9143a3d..60ffca8 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "next dev", "build": "next build", - "start": "next start", + "start": "set PORT=3008 && next start", "lint": "eslint . --ext .js,.jsx,.ts,.tsx", "lint:fix": "eslint . --ext .js,.jsx,.ts,.tsx --fix", "format:check": "prettier --check .", @@ -24,15 +24,19 @@ }, "dependencies": { "@gsap/react": "^2.1.1", + "@radix-ui/react-avatar": "^1.0.4", + "@studio-freight/lenis": "^1.0.42", "aos": "^2.3.4", "axios": "^1.6.8", "bcrypt": "^5.1.1", + "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "date-fns": "^3.6.0", "framer-motion": "^11.1.9", "gsap": "^3.12.5", "jsonwebtoken": "^9.0.2", "locomotive-scroll": "^5.0.0-beta.12", + "lucide-react": "^0.381.0", "mini-svg-data-uri": "^1.4.4", "mongoose": "^8.3.4", "next": "14.2.3", @@ -47,12 +51,16 @@ "sass": "^1.77.0", "shadcn-ui": "^0.2.3", "tailwind-merge": "^2.3.0", + "vanilla-tilt": "^1.8.1", "zod": "^3.23.8" }, "devDependencies": { + "@types/node": "20.12.12", + "@types/react": "18.3.2", "eslint": "^8.57.0", "eslint-config-next": "14.2.3", "eslint-plugin-next": "^0.0.0", + "html-loader": "^5.0.0", "husky": "^9.0.11", "lint-staged": "^15.2.2", "postcss": "^8", diff --git a/public/404p.png b/public/404p.png new file mode 100644 index 0000000..70044ec Binary files /dev/null and b/public/404p.png differ diff --git a/public/Productlandingpage/main.png b/public/Productlandingpage/main.png new file mode 100644 index 0000000..13e22b7 Binary files /dev/null and b/public/Productlandingpage/main.png differ diff --git a/public/image/sayakbunia.webp b/public/image/sayakbunia.webp new file mode 100644 index 0000000..e9df19e Binary files /dev/null and b/public/image/sayakbunia.webp differ diff --git a/public/mystory-new-logo/mystory-logo.svg b/public/mystory-new-logo/mystory-logo.svg new file mode 100644 index 0000000..c8377be --- /dev/null +++ b/public/mystory-new-logo/mystory-logo.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/(auth)/signin/page.jsx b/src/app/(auth)/signin/page.jsx index 7dce9c1..54bd64b 100644 --- a/src/app/(auth)/signin/page.jsx +++ b/src/app/(auth)/signin/page.jsx @@ -3,7 +3,7 @@ import UserForm from '@/components/UserForm'; export default function Page() { return ( -
+
{' '}
); diff --git a/src/app/(auth)/signup/page.jsx b/src/app/(auth)/signup/page.jsx index e03459f..bcb3a08 100644 --- a/src/app/(auth)/signup/page.jsx +++ b/src/app/(auth)/signup/page.jsx @@ -1,7 +1,7 @@ import UserForm from '@/components/UserForm'; export default function Page() { return ( -
+
); diff --git a/src/app/(routes)/about/page.jsx b/src/app/(routes)/about/page.jsx index d5e9bbc..f8f9106 100644 --- a/src/app/(routes)/about/page.jsx +++ b/src/app/(routes)/about/page.jsx @@ -2,6 +2,7 @@ import { options } from '@/app/api/auth/[...nextauth]/options'; import { getServerSession } from 'next-auth'; import React from 'react'; +import { ThreeDCardDemo } from '../../../components/about/page'; export default async function Page() { // const session = await getServerSession(options); diff --git a/src/app/(routes)/admin/page.tsx b/src/app/(routes)/admin/page.tsx new file mode 100644 index 0000000..69eddef --- /dev/null +++ b/src/app/(routes)/admin/page.tsx @@ -0,0 +1,7 @@ +import { AdminPage } from '@/components/Admin'; + +const Admin = () => { + return ; +}; + +export default Admin; diff --git a/src/app/(routes)/confess/page.jsx b/src/app/(routes)/confess/page.jsx index f870c49..e34fc29 100644 --- a/src/app/(routes)/confess/page.jsx +++ b/src/app/(routes)/confess/page.jsx @@ -1,14 +1,24 @@ 'use client'; -import { useState } from 'react'; +import { useState, useEffect } from 'react'; import { RiSendPlaneFill } from 'react-icons/ri'; import axios from 'axios'; import toast, { Toaster } from 'react-hot-toast'; import Image from 'next/image'; +import VanillaTilt from "vanilla-tilt"; const Confess = () => { const [confessContent, setConfessContent] = useState(''); const [isSubmitting, setIsSubmitting] = useState(false); +useEffect(() => { + VanillaTilt.init(document.querySelectorAll("[data-tilt]"), { + max: 25, + speed: 400, + glare: true, + "max-glare": 0.5, + }); + }, []); + const handleSubmit = async (e) => { e.preventDefault(); setIsSubmitting(true); @@ -19,7 +29,6 @@ const Confess = () => { confessionContent: confessContent, }); - // console.log('Response:', response.data); toast.dismiss(); toast.success('Confession submitted successfully 🎉'); } catch (error) { @@ -34,15 +43,33 @@ const Confess = () => { }; return ( -
- - + + +
+ Girl in thoughts +

Confess Anonymously

diff --git a/src/app/(routes)/contributors/ContributorsData.ts b/src/app/(routes)/contributors/ContributorsData.ts new file mode 100644 index 0000000..fac1fee --- /dev/null +++ b/src/app/(routes)/contributors/ContributorsData.ts @@ -0,0 +1,107 @@ +export const ContributorsData = [ + { + name: 'Vaibhav Gangurde', + github: 'https://github.com/Vaibhavsg17', + imageUrl: 'https://avatars.githubusercontent.com/u/66477893?v=4', + }, + { + name: 'Aksshay ', + github: 'https://github.com/Aksshay88', + imageUrl: 'https://avatars.githubusercontent.com/u/119944779?v=4', + }, + { + name: 'Philkhana Sidharth', + github: 'https://github.com/psidh', + imageUrl: 'https://avatars.githubusercontent.com/u/116720762?v=4', + }, + { + name: 'TenzDelek', + github: 'https://github.com/TenzDelek', + imageUrl: 'https://avatars.githubusercontent.com/u/122612557?v=4', + }, + { + name: 'Siddheya Kulkarni', + github: 'https://github.com/Asymtode712', + imageUrl: 'https://avatars.githubusercontent.com/u/115717746?v=4', + }, + { + name: 'Mohan Ram Sridhar', + github: 'https://github.com/MohanRamSridhar', + imageUrl: 'https://avatars.githubusercontent.com/u/142170808?v=4', + }, + { + name: 'KAPIL BADOKAR', + github: 'https://github.com/Kapil619', + imageUrl: 'https://avatars.githubusercontent.com/u/84692375?v=4', + }, + { + name: 'Harsh Mishra', + github: 'https://github.com/harshmishra19', + imageUrl: 'https://avatars.githubusercontent.com/u/115486960?v=4', + }, + { + name: 'Ayushmaan Agarwal', + github: 'https://github.com/Ayushmaanagarwal1211', + imageUrl: 'https://avatars.githubusercontent.com/u/118350936?v=4', + }, + { + name: 'Suhani Singh Paliwal', + github: 'https://github.com/suhanipaliwal', + imageUrl: 'https://avatars.githubusercontent.com/u/161575955?v=4', + }, + { + name: 'Ramakrushna Biswal', + github: 'https://github.com/RamakrushnaBiswal', + imageUrl: 'https://avatars.githubusercontent.com/u/125277258?v=4', + }, + { + name: 'RISHIRAJ MUKHERJEE', + github: 'https://github.com/rishyym0927', + imageUrl: 'https://avatars.githubusercontent.com/u/136720020?v=4', + }, + { + name: 'Anuj Kumar Singh', + github: 'https://github.com/anujsingh4545', + imageUrl: 'https://avatars.githubusercontent.com/u/76861751?v=4', + }, + { + name: 'Tanishq Mishra', + github: 'https://github.com/MishraTanishq619', + imageUrl: 'https://avatars.githubusercontent.com/u/127047332?v=4', + }, + { + name: 'Pradnya Gaitonde', + github: 'https://github.com/PradnyaGaitonde', + imageUrl: 'https://avatars.githubusercontent.com/u/116059908?v=4', + }, + { + name: 'Sivaprasath', + github: 'https://github.com/sivaprasath2004', + imageUrl: 'https://avatars.githubusercontent.com/u/121082414?v=4', + }, + { + name: 'SHRESTHA PANDIT', + github: 'https://github.com/shresthaPandit', + imageUrl: 'https://avatars.githubusercontent.com/u/145762326?v=4', + }, + { + name: 'Chetan karande', + github: 'https://github.com/Che140401', + imageUrl: 'https://avatars.githubusercontent.com/u/109230049?v=4', + }, + { + name: 'prachita singh', + github: 'https://github.com/prachita0504', + imageUrl: 'https://avatars.githubusercontent.com/u/139040702?v=4', + }, + { + name: 'Akhila Sunesh', + github: 'AkhilaSunesh', + imageUrl: 'https://avatars.githubusercontent.com/u/140897461?v=4', + }, + { + name: 'GUNUPURU SURAJ', + github: 'suraj-9849', + imageUrl: 'https://avatars.githubusercontent.com/u/146669517?v=4', + }, +]; diff --git a/src/app/(routes)/contributors/page.tsx b/src/app/(routes)/contributors/page.tsx new file mode 100644 index 0000000..212f91c --- /dev/null +++ b/src/app/(routes)/contributors/page.tsx @@ -0,0 +1,125 @@ +'use client'; + +import React from 'react'; +import { CardBody, CardContainer, CardItem } from '@/components/ui/3D-cards'; +import { Github } from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import Image from "next/image"; +import { ContributorsData } from "./ContributorsData"; + + + + + +const page = () => { + return ( + <> + {/*
*/} + +
+
+
+

+ Creator +

+ + + + Sayak Bhunia + + + Web Dev 🌐 | Open Source ⭐ | CP 📈 | Cloud ☁️ | Web3💲 | Hackathons + 💻 | Community 🍀 + + + thumbnail + + + + +
+ +
+ +
+

+ Meet Our Contributors +

+
+
+ {ContributorsData.map((data, index) => ( + +
+ {data.name} +
+
+

{data.name}

+
+
+ ))} +
+
+ +
+ + ); +}; + +export default page; diff --git a/src/app/(routes)/faqs/page.css b/src/app/(routes)/faqs/page.css new file mode 100644 index 0000000..9aa1590 --- /dev/null +++ b/src/app/(routes)/faqs/page.css @@ -0,0 +1,23 @@ +.close { + animation: close-animation 1s forwards; +} +.open { + animation: open-animation 1s forwards; +} +@keyframes open-animation { + from { + height: 55px; + } + to { + height: 140px; + } +} + +@keyframes close-animation { + from { + height: 140px; + } + to { + height: 55px; + } +} diff --git a/src/app/(routes)/faqs/page.jsx b/src/app/(routes)/faqs/page.jsx index 06a644a..4f656c4 100644 --- a/src/app/(routes)/faqs/page.jsx +++ b/src/app/(routes)/faqs/page.jsx @@ -9,13 +9,16 @@ import { AccordionItemPanel, AccordionItemState, } from 'react-accessible-accordion'; +import styles from './page.css'; + import data from '@/utils/accordion'; import 'react-accessible-accordion/dist/fancy-example.css'; export default function Page() { const [className, setClassName] = useState(null); + let [index, setIndex] = useState(null); return ( -
-
+
+
Our Value @@ -34,7 +37,7 @@ export default function Page() { {data.map((item, i) => { return ( @@ -47,7 +50,7 @@ export default function Page() { : setClassName('collapsed') } -
+
{item.icon}
@@ -58,6 +61,9 @@ export default function Page() { { + setIndex(i); + }} />
diff --git a/src/app/(routes)/loading.jsx b/src/app/(routes)/loading.jsx index 24de219..9bca964 100644 --- a/src/app/(routes)/loading.jsx +++ b/src/app/(routes)/loading.jsx @@ -1,7 +1,7 @@ export default function Loading() { return (
-
+
); } diff --git a/src/app/(routes)/profile/page.jsx b/src/app/(routes)/profile/page.jsx new file mode 100644 index 0000000..059c804 --- /dev/null +++ b/src/app/(routes)/profile/page.jsx @@ -0,0 +1,135 @@ +import { Avatar, AvatarImage, AvatarFallback } from '@/components/avatar.tsx'; +import { getCurrentUser } from '../../../../helpers/session'; +import { getServerSession } from 'next-auth'; +import { options } from '@/app/api/auth/[...nextauth]/options'; + +export default async function Page() { + const user = await getCurrentUser(); + const session = await getServerSession(options); + + // console.log(session.user); + const av = user.username; + const initials = av + .split(' ') + .map((word) => word[0]) + .join(''); + + return ( +
+
+ + + {initials} + +
+ +
+
+
+
{user.username}
+
+ {user.email} +
+
+
+
+
+ Location +
+
+ + + {session.user.location ? session.user.location : 'India'} + +
+
+
+
+ Bio +
+
+ I'm a software engineer and I love to code! In my free time, I + enjoy hiking and exploring the great outdoors. +
+
+
+
+ Joined +
+
+ + To be added +
+
+
+
+ ); +} + +function CalendarDaysIcon(props) { + return ( + + + + + + + + + + + + + ); +} + +function CameraIcon(props) { + return ( + + + + + ); +} + +function MapPinIcon(props) { + return ( + + + + + ); +} diff --git a/src/app/(routes)/search/advanced/page.jsx b/src/app/(routes)/search/advanced/page.jsx index c79d8ba..702ac14 100644 --- a/src/app/(routes)/search/advanced/page.jsx +++ b/src/app/(routes)/search/advanced/page.jsx @@ -79,7 +79,7 @@ const Confess = () => { }; return ( -
+

Confess Anonymously

diff --git a/src/app/(routes)/search/loading.jsx b/src/app/(routes)/search/loading.jsx index 24de219..9bca964 100644 --- a/src/app/(routes)/search/loading.jsx +++ b/src/app/(routes)/search/loading.jsx @@ -1,7 +1,7 @@ export default function Loading() { return (
-
+
); } diff --git a/src/app/(routes)/search/page.jsx b/src/app/(routes)/search/page.jsx index 75d1e07..3e08de5 100644 --- a/src/app/(routes)/search/page.jsx +++ b/src/app/(routes)/search/page.jsx @@ -46,9 +46,9 @@ const Confess = () => { }; return ( -
+
-
+

Search

@@ -59,9 +59,10 @@ const Confess = () => { setUsername(e.target.value)} - className="w-full px-3 py-2 bg-neutral-200 dark:bg-neutral-700 rounded-lg focus:outline-none focus:ring focus:border-neutral-400" + className="w-full px-3 py-2 border-neutral-200 dark:bg-[#030303] dark:border-neutral-700 border-[1px] rounded-lg focus:outline-none focus:ring focus:border-neutral-400" required />
@@ -76,32 +77,32 @@ const Confess = () => { -
- {confessions.length !== 0 && ( -
-

Confessions by {username}:

-
- {confessions.map((confession, index) => ( -
-

- {confession.content} -

-
-

{confession.date}

+ {confessions.length !== 0 && ( +
+

Confessions

+
+ {confessions.map((confession, index) => ( +
+

+ {confession.content} +

+
+

{confession.date}

+
-
- ))} + ))} +
-
- )} + )} +
); }; diff --git a/src/app/(routes)/settings/page.jsx b/src/app/(routes)/settings/page.jsx new file mode 100644 index 0000000..42aac25 --- /dev/null +++ b/src/app/(routes)/settings/page.jsx @@ -0,0 +1,11 @@ +import Settings from '@/components/Settings'; +import SignInForm from '@/components/signInForm'; +import UserForm from '@/components/UserForm'; + +export default function Page() { + return ( +
+ +
+ ); +} \ No newline at end of file diff --git a/src/app/api/auth/[...nextauth]/options.js b/src/app/api/auth/[...nextauth]/options.js index 7b80dca..dbab4c6 100644 --- a/src/app/api/auth/[...nextauth]/options.js +++ b/src/app/api/auth/[...nextauth]/options.js @@ -18,11 +18,10 @@ export const options = { providers: [ GitHubProvider({ async profile(profile) { - connect(); + await connect(); // console.log('Profile GitHub: ', profile); - - let userRole = 'GitHub User'; - if (profile?.email == 'jake@claritycoders.com') { + let userRole = 'user'; + if (profile?.email == 'mohdjamikhann@gmail.com') { userRole = 'admin'; } //Check if the user with this email exists. @@ -36,15 +35,17 @@ export const options = { email: profile.email, username: profile.name, password: hpassword, + role: userRole, + image: profile.avatar_url, + location: profile.location, }); } - //If not exist then create a User with that email id. - - //If exists do nothing return { ...profile, role: userRole, + image: profile.avatar_url, + location: profile.location, }; }, clientId: process.env.GITHUB_ID, @@ -52,10 +53,12 @@ export const options = { }), GoogleProvider({ async profile(profile) { - connect(); + await connect(); // console.log('Profile Google: ', profile); - - let userRole = 'Google User'; + let userRole = 'user'; + if (profile?.email == 'mohdjamikhann@gmail.com') { + userRole = 'admin'; + } //Check if the user with this email exists. const userFound = await User.findOne({ email: profile?.email }) .lean() @@ -68,7 +71,10 @@ export const options = { email: profile.email, username: profile.name, password: hpassword, + role: userRole, + image: profile.picture, }); + console.log('user from google', user); var userid = user._id.toString(); } return { @@ -76,6 +82,8 @@ export const options = { id: profile.sub, userId: userid, role: userRole, + image: profile.picture, + location: profile.location, }; }, clientId: process.env.GOOGLE_ID, @@ -96,7 +104,7 @@ export const options = { }, }, async authorize(credentials) { - connect(); + await connect(); try { const foundUser = await User.findOne({ email: credentials.email }) .lean() @@ -109,8 +117,6 @@ export const options = { if (match) { delete foundUser.password; - - foundUser['role'] = 'Unverified Email'; return foundUser; } } @@ -127,6 +133,7 @@ export const options = { if (user) { token.role = user.role; token.id = user._id; + token.image = user.image; } return token; }, @@ -136,6 +143,7 @@ export const options = { if (session?.user) { session.user.role = token.role; session.user.id = token.id; + session.user.image = token.image; } return session; }, diff --git a/src/app/api/confession/route.js b/src/app/api/confession/route.js index d4ad1cc..e1d3077 100644 --- a/src/app/api/confession/route.js +++ b/src/app/api/confession/route.js @@ -5,8 +5,9 @@ import Confession from '@/models/confessionModel'; import { getUserId } from '../../../../helpers/session'; connect(); - export async function POST(req) { + connect(); + console.log('POST request made to /api/confession'); try { const userId = await getUserId(); @@ -22,6 +23,7 @@ export async function POST(req) { const confession = new Confession({ content: confessionContent, + username: username, author: userId, }); diff --git a/src/app/api/get-confessions/route.js b/src/app/api/get-confessions/route.js new file mode 100644 index 0000000..d27b232 --- /dev/null +++ b/src/app/api/get-confessions/route.js @@ -0,0 +1,14 @@ +import { getServerSession } from 'next-auth'; +import { getUserId } from '../../../../helpers/session'; +import { NextResponse } from 'next/server'; +import { options } from '../auth/[...nextauth]/options'; +import Confession from '@/models/confessionModel'; +export async function GET(req) { + const userId = await getUserId(); + const session = await getServerSession(options); + const user = session.user; + + const confessions = await Confession.find(); + + return NextResponse.json({ message: confessions }); +} diff --git a/src/app/api/settings/route.js b/src/app/api/settings/route.js new file mode 100644 index 0000000..f8a0e56 --- /dev/null +++ b/src/app/api/settings/route.js @@ -0,0 +1,20 @@ +import { getServerSession } from 'next-auth'; +import { NextResponse } from 'next/server'; +import { getCurrentUser } from '../../../../helpers/session'; +import User from '@/models/userModel'; +export async function POST(req) { + try { + const username = await req.json(); + const user = await getCurrentUser(); + console.log(user); + if (!user) return NextResponse.json({ message: 'You need to sign in!' }); + await User.updateOne( + { username: user.username }, + { $set: { username: username } }, + ); + return NextResponse.json({ message: 'Updated Succesfully' }); + } catch (error) { + console.log(error); + return NextResponse.json({ message: 'Something Went Wrong', status: 404 }); + } +} diff --git a/src/app/loading.jsx b/src/app/loading.jsx index 24de219..9bca964 100644 --- a/src/app/loading.jsx +++ b/src/app/loading.jsx @@ -1,7 +1,7 @@ export default function Loading() { return (
-
+
); } diff --git a/src/app/not-found.js b/src/app/not-found.js index 19a1324..e1ac484 100644 --- a/src/app/not-found.js +++ b/src/app/not-found.js @@ -3,18 +3,13 @@ import { IoArrowBackCircleOutline } from 'react-icons/io5'; function NotFound() { return (
-

- Oopsie Daisy! 404 Error 🚧 -

-

- Page Not Found 😢 -

+ 404 - + Take Me Home
diff --git a/src/app/page.js b/src/app/page.js index 01b70ad..606a61b 100644 --- a/src/app/page.js +++ b/src/app/page.js @@ -1,3 +1,4 @@ +'use client'; import Footer from '@/components/Footer/Footer'; import HeroScrollDemo from '@/components/Hero/HeroScrollDemo'; import TitleSpecial from '@/components/Features/TitleSpecial'; @@ -5,7 +6,21 @@ import Features from '@/components/Features/Features'; import CallToAction from '@/components/CallToAction'; import BuyMeACoffee from '@/components/BuyMeACoffee'; import Background from '@/components/Background'; + +import Lenis from '@studio-freight/lenis'; +import { useEffect } from 'react'; +import { InfiniteMovingCardsDemo } from '../components/Testimonials'; + +import { CardHoverEffectDemo } from '../components/importance'; export default function Home() { + useEffect(() => { + const lenis = new Lenis(); + function raf(time) { + lenis.raf(time); + requestAnimationFrame(raf); + } + requestAnimationFrame(raf); + }, []); return (
@@ -13,6 +28,9 @@ export default function Home() { + + +
diff --git a/src/components/Admin.jsx b/src/components/Admin.jsx new file mode 100644 index 0000000..ed3f047 --- /dev/null +++ b/src/components/Admin.jsx @@ -0,0 +1,56 @@ +'use client'; +import React from 'react'; +import { useState, useEffect } from 'react'; +import toast from 'react-hot-toast'; + +export const AdminPage = () => { + const [confessions, setConfessions] = useState([]); + const [loading, setLoading] = useState(false); + const fetchData = async () => { + try { + setLoading(true); + const response = await fetch('api/get-confessions'); + const data = await response.json(); + const confessions = data.message; + console.log(confessions); + setConfessions(confessions); + setLoading(false); + } catch (error) { + setLoading(false); + toast.error('Something went wrong'); + console.error('Error fetching confessions:', error); + } + }; + + return ( +
+ {confessions.length !== 0 && ( +
+

Confessions

+
+ {confessions.map((confession, index) => ( +
+

+ {confession.content} +

+
+

{confession.date}

+
+
+ ))} +
+
+ )} + +
+ ); +}; diff --git a/src/components/Footer/Footer.jsx b/src/components/Footer/Footer.jsx index 35255a6..872ddbf 100644 --- a/src/components/Footer/Footer.jsx +++ b/src/components/Footer/Footer.jsx @@ -15,31 +15,26 @@ const Sample = () => {

- mystory + MyStory Logo

+

A way to share stories anonymously.

- + {

- © {new Date().getFullYear()} mystory | All rights reserved. + © {new Date().getFullYear()} mystory | All rights reserved.

diff --git a/src/components/Hero/HeroScrollDemo.jsx b/src/components/Hero/HeroScrollDemo.jsx index da7f90f..cee1df4 100644 --- a/src/components/Hero/HeroScrollDemo.jsx +++ b/src/components/Hero/HeroScrollDemo.jsx @@ -1,5 +1,6 @@ import { ContainerScroll } from '@/components/ui/container-scroll-animation'; import Image from 'next/image'; +import Link from 'next/link'; export default function HeroScrollDemo() { return ( @@ -8,6 +9,7 @@ export default function HeroScrollDemo() { titleComponent={ <>

+

Unleash the power of Anonymity

@@ -20,13 +22,33 @@ export default function HeroScrollDemo() { > A way to share stories anonymously. + + +
+
+ + +
} > hero { const [isNavOpen, setIsNavOpen] = useState(false); @@ -15,54 +16,88 @@ const NavBar = () => { const toggleNav = () => { setIsNavOpen(!isNavOpen); // Toggle the value of isNavOpen }; - - const smNavClass = `py-1 px-2 w-full rounded-full border - border-[#616161] hover:border-[#191919] text-center - hover:bg-[#F1F5F9] hover:text-black transform transition-all duration-300 font-semibold - my-2 hover:w-[90%] `; + const smNavClass = `py-1 px-2 w-full rounded-lg transition + text-center + hover:bg-[#F1F5F9] hover:text-black font-semibold + my-2 `; const navClass = `py-1 rounded-full border border-[#616161] hover:border-[#191919] hover:bg-[#F1F5F9] hover:text-black transform transition-all duration-300 font-semibold - my-2 px-10 hover:px-6`; + my-2 px-6 hover:px-5`; return (
+ + -
- - mystory - +
+ +
+ +
+
- - Home - - - About - - - FAQs - - - Search - + + + Home + + + + About + + + + Contributors + + + + FAQs + + + + Search + + + + Settings + + {session ? ( - - Logout - + <> + {session.user.role === 'admin' ? ( + + Admin + + ) : ( + <> + )} + + Profile + + + Logout + + ) : ( - + // + // Login/Signup + // + Login/Signup - + )} -

Confess

-
+
{!isNavOpen ? ( { {isNavOpen && ( // Render the navigation links if isNavOpen is true )} diff --git a/src/components/Settings.jsx b/src/components/Settings.jsx new file mode 100644 index 0000000..ec78947 --- /dev/null +++ b/src/components/Settings.jsx @@ -0,0 +1,101 @@ +'use client'; +import toast, { Toaster } from 'react-hot-toast'; +import { useRouter } from 'next/navigation'; +import React, { useState } from 'react'; +import { z } from 'zod'; +const FormSchema = z.object({ + username: z.string(), +}); +const Settings = () => { + const router = useRouter(); + const [formData, setFormData] = useState({}); + const [loading, setLoading] = useState(false); + const [errorMessage, setErrorMessage] = useState(''); + const handleChange = (e) => { + const value = e.target.value; + const name = e.target.name; + setFormData((prevState) => ({ + ...prevState, + [name]: value, + })); + }; + + const handleSubmit = async (e) => { + e.preventDefault(); + setErrorMessage(''); + try { + setLoading(true); + const validatedData = FormSchema.parse(formData); + console.log(validatedData); + const res = await fetch('api/settings', { + method: 'POST', + body: JSON.stringify(validatedData.username), + }); + + const data = await res.json(); + + if (!res.ok) { + setErrorMessage(data.message); + setLoading(false); + } else { + setLoading(false); + router.refresh(); + formData.username = ''; + toast.success(data.message); + } + } catch (error) { + setLoading(false); + const errorMessages = JSON.parse(error.message).map((err) => err.message); + toast.error(errorMessages.join(', ')); + console.log(error); + } + }; + + return ( + <> +
+
+

Settings

+
+
+ + Change username + +
+ +
+ +
+ + + + {errorMessage && ( +

+ {errorMessage} +

+ )} +
+
+ + ); +}; + +export default Settings; \ No newline at end of file diff --git a/src/components/Testimonials.jsx b/src/components/Testimonials.jsx new file mode 100644 index 0000000..40f5410 --- /dev/null +++ b/src/components/Testimonials.jsx @@ -0,0 +1,49 @@ +'use client'; + +import React, { useEffect, useState } from 'react'; +import { InfiniteMovingCards } from '../components/ui/infinite-moving-cards'; + +export const InfiniteMovingCardsDemo = () => { + return ( +
+ +
+ ); +}; + +const testimonials = [ + { + quote: + 'I cannot BELIEVE how simple the mystory is to use ,and how amazing the customer support is.I also love the clean, beautiful design of the website.', + name: 'Dina S.', + title: 'VP of Marketing, RedShelf', + }, + { + quote: + 'We LOVE the product .I love the new interactive blog confession and new modes that come out.There is a cool variety of blogs and having multiple features is great.', + name: 'Dustin Pelletier', + title: 'Franchise owner, Big Air Trampoline Park', + }, + { + quote: + 'There is absolutely no doubt in my mind that without Mystory. I would not have been able to make the jump to a major blog story.', + name: 'Edgar M.', + title: 'CEO, The Story', + }, + { + quote: + 'Sayak-Bhunia has NAILED the "how to make a blog" process. I am so happy with the results! I would like to personally thank you for your outstanding product.', + name: 'Aksshay', + title: 'Open Source Developer', + }, + { + quote: + 'The competitive Playbook is an ideal blend of both strategic and tactical guidance to help you kickstart or revamp your blogs.Awesome.', + name: 'Jarvis Karel', + title: 'AVP , Zeindesk', + }, +]; diff --git a/src/components/UserForm.jsx b/src/components/UserForm.jsx index 7e4ee34..79736d9 100644 --- a/src/components/UserForm.jsx +++ b/src/components/UserForm.jsx @@ -3,7 +3,7 @@ import { useRouter } from 'next/navigation'; import React, { useState } from 'react'; import toast, { Toaster } from 'react-hot-toast'; -import { FaGithub ,FaEye , FaEyeSlash } from 'react-icons/fa'; +import { FaGithub, FaEye, FaEyeSlash } from 'react-icons/fa'; import { FcGoogle } from 'react-icons/fc'; import { z } from 'zod'; const FormSchema = z.object({ @@ -22,8 +22,8 @@ const UserForm = () => { const router = useRouter(); const [formData, setFormData] = useState({}); const [errorMessage, setErrorMessage] = useState(''); - const [showEye,setShowEye] = useState(true) - const [showPass,setShowPass]=useState(false) + const [showEye, setShowEye] = useState(true); + const [showPass, setShowPass] = useState(false); const handleChange = (e) => { const value = e.target.value; @@ -58,18 +58,18 @@ const UserForm = () => { } }; - const eyeToggle=()=>{ - showPass?setShowPass(false):setShowPass(true) - showEye?setShowEye(false):setShowEye(true) - } + const eyeToggle = () => { + showPass ? setShowPass(false) : setShowPass(true); + showEye ? setShowEye(false) : setShowEye(true); + }; return ( <> -
-
-
+
+
+
-
-
- +
+

OR

- + Sign in with credentials
@@ -96,48 +95,52 @@ const UserForm = () => { className="flex flex-col gap-4" >
-
-
- - { - !showEye? - : - } + {!showEye ? ( + + ) : ( + + )}
+ + + + Github + + +
+ + +
+ ); +} diff --git a/src/components/avatar.tsx b/src/components/avatar.tsx new file mode 100644 index 0000000..e545a6a --- /dev/null +++ b/src/components/avatar.tsx @@ -0,0 +1,49 @@ +'use client'; + +import * as React from 'react'; +import * as AvatarPrimitive from '@radix-ui/react-avatar'; +import { cn } from '@/utils/cn'; + +const Avatar = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +Avatar.displayName = AvatarPrimitive.Root.displayName; + +const AvatarImage = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AvatarImage.displayName = AvatarPrimitive.Image.displayName; + +const AvatarFallback = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName; + +export { Avatar, AvatarImage, AvatarFallback }; diff --git a/src/components/importance.jsx b/src/components/importance.jsx new file mode 100644 index 0000000..4e68e8a --- /dev/null +++ b/src/components/importance.jsx @@ -0,0 +1,56 @@ +'use client'; +import React from 'react'; +import { HoverEffect } from '../components/ui/hover-effect.jsx'; + +const CardHoverEffectDemo = () => { + return ( +
+

+ Top Confessions +

+ +
+ ); +}; + +const projects = [ + { + title: 'Anonymous Love', + description: + 'I have been secretly in love with my best friend for years.Every time they talk about their crushes, my heart breaks a little more.', + link: '/confession/anonymous-love', + }, + { + title: 'The Secret Regret', + description: + 'In college, I made a mistake that still haunts me. I cheated on an exam to get a better grade. I regret it every day.', + link: 'confession/secret-regret', + }, + { + title: 'Family Expectations', + description: + 'I pursued a career in medicine because my parents always wanted me to. But my true passion lies in music', + link: '/confession/family-expectations', + }, + { + title: 'Unspoken Apologies', + description: + 'I had a falling out with my childhood friend over something trivial. We have not spoken in years, and I wish I could turn back time and make things right.', + link: '/confession/unspoken-apologies', + }, + { + title: 'The Forgotten Passion', + description: + 'As a child I loved Painting.But life got in the way, and now I cannot remember the last time I picked up a brush.', + + link: '/confession/forgotten-passion', + }, + { + title: 'Lost Opportunities', + description: + 'There was the job opportunity abroad that I turned down because I was too scared to leave my comfort zone. I often think about how different my life would be if I had taken that leap.', + link: '/confession/lost-opportunities', + }, +]; + +export { CardHoverEffectDemo, projects }; diff --git a/src/components/signInForm.jsx b/src/components/signInForm.jsx index 5b57491..0c50396 100644 --- a/src/components/signInForm.jsx +++ b/src/components/signInForm.jsx @@ -1,5 +1,5 @@ 'use client'; -import { FaGithub , FaEye , FaEyeSlash } from 'react-icons/fa'; +import { FaGithub, FaEye, FaEyeSlash } from 'react-icons/fa'; import { FcGoogle } from 'react-icons/fc'; import toast, { Toaster } from 'react-hot-toast'; import { useRouter } from 'next/navigation'; @@ -22,8 +22,8 @@ const SignInForm = () => { const router = useRouter(); const [formData, setFormData] = useState({}); const [errorMessage, setErrorMessage] = useState(''); - const [showEye,setShowEye] = useState(true) - const [showPass,setShowPass]=useState(false) + const [showEye, setShowEye] = useState(true); + const [showPass, setShowPass] = useState(false); const handleChange = (e) => { const value = e.target.value; const name = e.target.name; @@ -59,20 +59,18 @@ const SignInForm = () => { } }; - - - const eyeToggle=()=>{ - showPass?setShowPass(false):setShowPass(true) - showEye?setShowEye(false):setShowEye(true) - } + const eyeToggle = () => { + showPass ? setShowPass(false) : setShowPass(true); + showEye ? setShowEye(false) : setShowEye(true); + }; return ( <> -
-
-
+
+
+
-
-
- +
+

OR

- + Sign in with credentials
@@ -106,7 +103,7 @@ const SignInForm = () => { onChange={handleChange} required={true} value={formData.email} - className="w-full px-3 py-2 bg-white border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-400 dark:bg-[#505050] dark:text-white dark:border-gray-600 dark:focus:ring-purple-600" + className="w-full px-3 py-2 bg-white border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-400 dark:bg-[#000000] dark:text-white dark:border-gray-600 dark:focus:ring-purple-600" />
@@ -115,16 +112,23 @@ const SignInForm = () => { placeholder="Password" id="password" name="password" - type={showPass?"text":"password"} + type={showPass ? 'text' : 'password'} onChange={handleChange} required={true} value={formData.password} - className="w-full px-3 py-2 bg-white border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-400 dark:bg-[#505050] dark:text-white dark:border-gray-600 dark:focus:ring-purple-600" + className="w-full px-3 py-2 bg-white border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-400 dark:bg-[#000000] dark:text-white dark:border-gray-600 dark:focus:ring-purple-600" /> - { - !showEye? - : - } + {!showEye ? ( + + ) : ( + + )}