Compare commits

...

29 Commits

Author SHA1 Message Date
eshanized
b383fd495b 🚀 feat: add a toast notification
Some checks failed
Check Conventional Commit / check-commit-message (push) Has been cancelled
Deploy React to cPanel via FTP / deploy (push) Has been cancelled
2025-01-16 06:48:31 +05:30
eshanized
276854adc0 🚀 feat: insert copy option 2025-01-16 06:42:25 +05:30
eshanized
8351fd5e42 🛠 refactor: written full command 2025-01-16 06:40:55 +05:30
eshanized
58460bb434 style: add search icon in the bar 2025-01-16 06:37:00 +05:30
eshanized
e211ef2a3d style: minor changes in ui* 2025-01-16 06:35:47 +05:30
eshanized
f97fe74ebb 🐛 fix: team members 2025-01-16 06:31:51 +05:30
eshanized
df8a833380 style: add gnome ui 2025-01-16 06:23:29 +05:30
eshanized
ed1000433e style: make it center 2025-01-16 06:13:53 +05:30
eshanized
526e2a9329 style: remove background grad 2025-01-16 06:10:50 +05:30
eshanized
85e88bb012 style: reduce animation 2025-01-16 06:09:21 +05:30
eshanized
bb19932a46 🛠 refactor: rename chunks
Some checks are pending
Check Conventional Commit / check-commit-message (push) Waiting to run
2025-01-16 01:37:26 +05:30
eshanized
0baeb57cdd 🐛 fix: dev to master
Some checks failed
Check Conventional Commit / check-commit-message (push) Has been cancelled
2025-01-13 14:17:14 +05:30
eshanized
340545c708 🐛 fix: add sitemap 2025-01-13 14:13:49 +05:30
eshanized
ffab675b39 revert: head^1 2025-01-13 14:11:06 +05:30
eshanized
11e5f53b2b 📝 docs: add badges 2025-01-13 14:10:27 +05:30
eshanized
591db54a99 🧹 chore: update dependencies 2025-01-13 14:04:01 +05:30
eshanized
2a35172f8d 🧹 chore: optimize vite config 2025-01-13 14:02:56 +05:30
eshanized
14f89ed2c2 🤖 ci: add conventional commit checker 2025-01-13 13:56:21 +05:30
eshanized
73a21163fc 📝 docs: add manual testimonial 2025-01-13 13:54:03 +05:30
eshanized
ed3ad3025b 📝 docs: proper description added 2025-01-13 13:51:45 +05:30
eshanized
d23735ae75 style: added gradient 2025-01-13 13:48:52 +05:30
eshanized
b2759b3222 style: added icon befor link 2025-01-13 13:47:53 +05:30
eshanized
9d53b218aa 🐛 fix: maintain consistency 2025-01-13 13:41:36 +05:30
eshanized
90f0809697 🚀 feat: add @XlebyllleK as key developer 2025-01-12 22:34:31 +05:30
eshanized
aa1bbe44b4 style: minor changes in animation 2025-01-11 22:57:03 +05:30
eshanized
995740c287 🧹 chore: bump dependencies 2025-01-11 22:55:12 +05:30
eshanized
70c826f5cc ️ perf: improve url fetch logic 2025-01-11 22:54:32 +05:30
eshanized
ee9c807cf6 📝 docs: remove dev* 2025-01-11 22:49:36 +05:30
eshanized
51df6597e7 📝 docs: add slots 2025-01-11 22:49:05 +05:30
29 changed files with 569 additions and 358 deletions

38
.github/workflows/cz.yml vendored Normal file
View File

@@ -0,0 +1,38 @@
name: Check Conventional Commit
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
check-commit-message:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Check Conventional Commit
run: |
# Define the conventional commit types with emojis
TYPES=("🚀 feat" "🐛 fix" "📝 docs" "✨ style" "🛠 refactor" "⚡️ perf" "🔬 test" "🔧 build" "🤖 ci" "🧹 chore" "⏪ revert")
# Extract the commit type and emoji from the commit message
COMMIT_MSG=$(git log --format=%B -n 1)
for type in "${TYPES[@]}"; do
type_emoji=${type}
type=${type_emoji#* }
emoji=${type_emoji% *}
if [[ $COMMIT_MSG == $emoji* ]]; then
echo "Commit message is a conventional commit"
exit 0
fi
done
# If we reach here, the commit message is not a conventional commit
echo "Commit message is not a conventional commit"
exit 1

View File

@@ -1,6 +1,6 @@
# Snigdha OS Web Dev - Code of Conduct
# Snigdha OS Web - Code of Conduct
Welcome to the Snigdha OS Web Dev project! 🤗 We are thrilled to have you here and want to make sure that everyone feels welcome and respected. Please read through our Code of Conduct to ensure we create a positive environment for all contributors.
Welcome to the Snigdha OS Web project! 🤗 We are thrilled to have you here and want to make sure that everyone feels welcome and respected. Please read through our Code of Conduct to ensure we create a positive environment for all contributors.
## 1. Be Respectful 🫶
Treat others the way you want to be treated. Be kind, inclusive, and open-minded. Respect different perspectives and experiences. 🌍

View File

@@ -1,27 +1,27 @@
# Contributing to Snigdha OS Web Dev 🌐
# Contributing to Snigdha OS Web 🌐
Thank you for your interest in contributing to the Snigdha OS Web Dev project! We're excited to have you help us improve the web presence of Snigdha OS. Whether you're fixing a bug, adding a feature, or improving the documentation, your contributions are highly valued.
Thank you for your interest in contributing to the **Snigdha OS Web** project! Were excited to have you help us enhance the web presence of Snigdha OS. Whether you're fixing bugs, adding features, or improving documentation, your contributions are highly appreciated!
## 🛠 How to Contribute
### 1. **Fork the Repository** 🍴
Start by forking the Snigdha OS Web Dev repository to your own GitHub account. This creates a personal copy of the project where you can make changes without affecting the original project.
To begin, fork the Snigdha OS Web repository to your GitHub account. This creates your personal copy of the project, where you can freely make changes without affecting the original repository.
- Navigate to the [Snigdha OS Web Dev repository](https://github.com/Snigdha-OS/snigdhaos-web-dev).
- Click on the "Fork" button at the top right of the page.
- Navigate to the [Snigdha OS Web repository](https://github.com/Snigdha-OS/Snigdha-OS.github.io).
- Click the "Fork" button at the top right corner of the page.
### 2. **Clone Your Fork** 🚀
Clone the forked repository to your local machine:
Next, clone the forked repository to your local machine:
```bash
git clone https://github.com/your-username/snigdhaos-web-dev.git
git clone https://github.com/your-username/Snigdha-OS.github.io.git
```
### 3. **Create a New Branch** 🧑‍💻
Once you have the repository cloned, create a new branch for your work. This helps keep your contributions organized.
Before you start making changes, create a new branch to keep your work organized and separate from the main codebase.
```bash
git checkout -b feature/your-branch-name
@@ -29,14 +29,15 @@ git checkout -b feature/your-branch-name
### 4. **Make Your Changes** ✏️
Now you can make changes! Whether you're fixing a bug, adding a feature, or improving documentation, make sure to follow the guidelines for code style and project structure.
Now youre ready to make changes! Whether you're fixing bugs, adding a new feature, or improving documentation, follow these guidelines:
- **For Code**: Ensure that your code follows the project's coding standards and is well-documented.
- **For Documentation**: Follow the formatting guidelines and be clear with your explanations.
- **For Code**: Ensure your code follows the project's coding standards and is well-commented.
- **For Documentation**: Use the correct formatting and provide clear, concise explanations.
- **For Styles/Design**: Make sure any design improvements align with the project's visual identity.
### 5. **Commit Your Changes** 💾
Commit your changes with a clear and descriptive message.
Commit your changes with a clear, descriptive message that explains what you've done.
```bash
git add .
@@ -45,7 +46,7 @@ git commit -m "Add/modify [brief description of changes]"
### 6. **Push Your Changes** 🔼
Push your branch to your forked repository:
Push your new branch with your changes to your forked repository:
```bash
git push origin feature/your-branch-name
@@ -53,58 +54,58 @@ git push origin feature/your-branch-name
### 7. **Open a Pull Request (PR)** 🔄
Once your changes are ready, open a pull request to merge your work back into the original repository.
Once youve made your changes and pushed them to your fork, open a pull request (PR) to merge them back into the original repository.
- Go to your fork on GitHub and click the "New Pull Request" button.
- Select your branch and the base branch (usually `master` or `develop`).
- Provide a clear description of the changes in the PR, explaining the problem it solves or the feature it adds.
- Go to your fork on GitHub and click the New Pull Request button.
- Choose your branch and compare it with the base branch (usually `master` or `develop`).
- Write a detailed description of your changes and the issue they address (if any).
### 8. **Address Feedback** 💬
After opening the PR, maintainers may review your changes and provide feedback. Be prepared to make additional changes based on their suggestions.
After opening the PR, the maintainers will review your changes and may provide feedback. Be ready to make further updates based on their suggestions.
### 9. **Celebrate** 🎉
Once your pull request is merged, celebrate! You've just contributed to Snigdha OS Web Dev and made the web experience better for everyone!
### 9. **Celebrate!** 🎉
Once your PR is merged, congratulations! You've contributed to Snigdha OS Web and made the web experience better for everyone.
Snigdha OS Web
## 📝 Code of Conduct
Please follow the [Snigdha OS Code of Conduct](https://github.com/Snigdha-OS/snigdhaos-web-dev/blob/master/CODE_OF_CONDUCT.md) when contributing to this repository. We want to foster a welcoming and inclusive environment for all contributors.
Please adhere to the [Snigdha OS Code of Conduct](https://github.com/Snigdha-OS/Snigdha-OS.github.io/blob/master/CODE_OF_CONDUCT.md) when contributing to this repository. We strive to maintain a welcoming and inclusive environment for all contributors.
Snigdha OS Web
## 🚨 Reporting Issues
If you find any issues or bugs, please follow the steps below to report them:
1. Check if the issue has already been reported.
2. If not, open an issue in the [Issues section](https://github.com/Snigdha-OS/snigdhaos-web-dev/issues).
3. Provide as much detail as possible:
- Describe the issue clearly.
- Include steps to reproduce the issue.
- If possible, attach logs or screenshots.
If you encounter any issues or bugs, please follow the steps below to report them:
1. **Search for Existing Issues**: Check if the issue has already been reported before opening a new one.
2. **Open a New Issue**: If the issue hasnt been reported, go to the [Issues section](https://github.com/Snigdha-OS/Snigdha-OS.github.io/issues) and create a new issue.
3. **Provide Detailed Information**: Include as much detail as possible:
- A clear description of the issue.
- Steps to reproduce the issue.
- Any relevant logs or screenshots that can help maintainers understand the problem.
Snigdha OS Web
## 💡 Ideas for Contribution
You can contribute in various ways:
- **Bug Fixes**: Help us by identifying and fixing issues in the web app.
- **Feature Requests**: Have an idea for a new feature? Open an issue or a pull request!
- **Documentation**: Contribute to improving the documentation by clarifying instructions or adding new information.
- **Styling/Design**: Help us make the website look better by improving the UI and UX.
There are many ways you can contribute to the Snigdha OS Web project:
- **Bug Fixes**: Help us identify and resolve bugs in the web app.
- **New Features**: Got an idea for a new feature? Feel free to open an issue or submit a PR!
- **Documentation Improvements**: Enhance the documentation by clarifying instructions, adding examples, or updating outdated content.
- **UI/UX Improvements**: Contribute to making the website visually appealing and easy to use by improving its design.
Snigdha OS Web
## 📜 License
By contributing, you agree that your contributions will be licensed under the [MIT License](https://github.com/Snigdha-OS/snigdhaos-web-dev/blob/master/LICENSE).
By contributing to this repository, you agree that your contributions will be licensed under the [MIT License](https://github.com/Snigdha-OS/Snigdha-OS.github.io/blob/master/LICENSE).
Snigdha OS Web
## 🤝 Thank You!
Thank you for being a part of the Snigdha OS Web Dev community! Every contribution helps us make Snigdha OS better for everyone. We look forward to your contributions!
Thank you for being a part of the Snigdha OS Web community! Every contribution, no matter how big or small, helps make Snigdha OS better for everyone. We look forward to your contributions!

View File

@@ -32,6 +32,8 @@
<!-- Canonical Link to prevent duplicate content issues -->
<link rel="canonical" href="https://snigdha-os.github.io/" />
<link rel="sitemap" type="application/xml" href="/sitemap.xml" />
<!-- Structured Data: JSON-LD for better understanding of page content -->
<script type="application/ld+json">
{

View File

@@ -25,9 +25,9 @@
"validate": "npm run lint && npm run type-check && npm run test"
},
"dependencies": {
"@tanstack/react-query": "^5.63.0",
"@tanstack/react-query": "^5.64.0",
"clsx": "^2.1.1",
"framer-motion": "^11.16.3",
"framer-motion": "^11.17.0",
"lucide-react": "^0.344.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
@@ -36,15 +36,15 @@
"tailwind-merge": "^2.6.0"
},
"devDependencies": {
"@eslint/js": "^9.17.0",
"@eslint/js": "^9.18.0",
"@types/node": "^22.10.5",
"@types/react": "^18.3.18",
"@types/react-dom": "^18.3.5",
"@vitejs/plugin-react": "^4.3.4",
"autoprefixer": "^10.4.20",
"eslint": "^9.17.0",
"eslint": "^9.18.0",
"eslint-plugin-react-hooks": "^5.1.0",
"eslint-plugin-react-refresh": "^0.4.16",
"eslint-plugin-react-refresh": "^0.4.18",
"gh-pages": "^6.3.0",
"globals": "^15.14.0",
"husky": "^8.0.3",

285
pnpm-lock.yaml generated
View File

@@ -9,14 +9,14 @@ importers:
.:
dependencies:
'@tanstack/react-query':
specifier: ^5.63.0
version: 5.63.0(react@18.3.1)
specifier: ^5.64.0
version: 5.64.0(react@18.3.1)
clsx:
specifier: ^2.1.1
version: 2.1.1
framer-motion:
specifier: ^11.16.3
version: 11.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: ^11.17.0
version: 11.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
lucide-react:
specifier: ^0.344.0
version: 0.344.0(react@18.3.1)
@@ -37,8 +37,8 @@ importers:
version: 2.6.0
devDependencies:
'@eslint/js':
specifier: ^9.17.0
version: 9.17.0
specifier: ^9.18.0
version: 9.18.0
'@types/node':
specifier: ^22.10.5
version: 22.10.5
@@ -55,14 +55,14 @@ importers:
specifier: ^10.4.20
version: 10.4.20(postcss@8.4.49)
eslint:
specifier: ^9.17.0
version: 9.17.0(jiti@1.21.7)
specifier: ^9.18.0
version: 9.18.0(jiti@1.21.7)
eslint-plugin-react-hooks:
specifier: ^5.1.0
version: 5.1.0(eslint@9.17.0(jiti@1.21.7))
version: 5.1.0(eslint@9.18.0(jiti@1.21.7))
eslint-plugin-react-refresh:
specifier: ^0.4.16
version: 0.4.16(eslint@9.17.0(jiti@1.21.7))
specifier: ^0.4.18
version: 0.4.18(eslint@9.18.0(jiti@1.21.7))
gh-pages:
specifier: ^6.3.0
version: 6.3.0
@@ -92,7 +92,7 @@ importers:
version: 5.7.3
typescript-eslint:
specifier: ^8.19.1
version: 8.19.1(eslint@9.17.0(jiti@1.21.7))(typescript@5.7.3)
version: 8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
vite:
specifier: ^5.4.11
version: 5.4.11(@types/node@22.10.5)
@@ -117,20 +117,20 @@ packages:
resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
engines: {node: '>=6.9.0'}
'@babel/compat-data@7.26.3':
resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==}
'@babel/compat-data@7.26.5':
resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==}
engines: {node: '>=6.9.0'}
'@babel/core@7.26.0':
resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==}
engines: {node: '>=6.9.0'}
'@babel/generator@7.26.3':
resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==}
'@babel/generator@7.26.5':
resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==}
engines: {node: '>=6.9.0'}
'@babel/helper-compilation-targets@7.25.9':
resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==}
'@babel/helper-compilation-targets@7.26.5':
resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==}
engines: {node: '>=6.9.0'}
'@babel/helper-module-imports@7.25.9':
@@ -143,8 +143,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
'@babel/helper-plugin-utils@7.25.9':
resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==}
'@babel/helper-plugin-utils@7.26.5':
resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==}
engines: {node: '>=6.9.0'}
'@babel/helper-string-parser@7.25.9':
@@ -163,8 +163,8 @@ packages:
resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==}
engines: {node: '>=6.9.0'}
'@babel/parser@7.26.3':
resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==}
'@babel/parser@7.26.5':
resolution: {integrity: sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -279,12 +279,12 @@ packages:
resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==}
engines: {node: '>=6.9.0'}
'@babel/traverse@7.26.4':
resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==}
'@babel/traverse@7.26.5':
resolution: {integrity: sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==}
engines: {node: '>=6.9.0'}
'@babel/types@7.26.3':
resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==}
'@babel/types@7.26.5':
resolution: {integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==}
engines: {node: '>=6.9.0'}
'@bcoe/v8-coverage@0.2.3':
@@ -694,24 +694,24 @@ packages:
resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.9.1':
resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==}
'@eslint/core@0.10.0':
resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.2.0':
resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.17.0':
resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==}
'@eslint/js@9.18.0':
resolution: {integrity: sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.5':
resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/plugin-kit@0.2.4':
resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==}
'@eslint/plugin-kit@0.2.5':
resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@humanfs/core@0.19.1':
@@ -954,11 +954,11 @@ packages:
'@sinonjs/fake-timers@10.3.0':
resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
'@tanstack/query-core@5.62.16':
resolution: {integrity: sha512-9Sgft7Qavcd+sN0V25xVyo0nfmcZXBuODy3FVG7BMWTg1HMLm8wwG5tNlLlmSic1u7l1v786oavn+STiFaPH2g==}
'@tanstack/query-core@5.64.0':
resolution: {integrity: sha512-/MPJt/AaaMzdWJZTafgMyYhEX/lGjQrNz8+NDQSk8fNoU5PHqh05FhQaBrEQafW2PeBHsRbefEf//qKMiSAbQQ==}
'@tanstack/react-query@5.63.0':
resolution: {integrity: sha512-QWizLzSiog8xqIRYmuJRok9VELlXVBAwtINgVCgW1SNvamQwWDO5R0XFSkjoBEj53x9Of1KAthLRBUC5xmtVLQ==}
'@tanstack/react-query@5.64.0':
resolution: {integrity: sha512-tBMzlROROUcTDMpDt1NC3n9ndKnJHPB3RCpa6Bf9f31TFvqhLz879x8jldtKU+6IwMSw1Pn4K1AKA+2SYyA6TA==}
peerDependencies:
react: ^18 || ^19
@@ -1348,8 +1348,8 @@ packages:
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
electron-to-chromium@1.5.79:
resolution: {integrity: sha512-nYOxJNxQ9Om4EC88BE4pPoNI8xwSFf8pU/BAeOl4Hh/b/i6V4biTAzwV7pXi3ARKeoYO5JZKMIXTryXSVer5RA==}
electron-to-chromium@1.5.80:
resolution: {integrity: sha512-LTrKpW0AqIuHwmlVNV+cjFYTnXtM9K37OGhpe0ZI10ScPSxqVSryZHIY3WnCS5NSYbBODRTZyhRMS2h5FAEqAw==}
email-addresses@5.0.0:
resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==}
@@ -1394,8 +1394,8 @@ packages:
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
eslint-plugin-react-refresh@0.4.16:
resolution: {integrity: sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ==}
eslint-plugin-react-refresh@0.4.18:
resolution: {integrity: sha512-IRGEoFn3OKalm3hjfolEWGqoF/jPqeEYFp+C8B0WMzwGwBMvlRDQd06kghDhF0C61uJ6WfSDhEZE/sAQjduKgw==}
peerDependencies:
eslint: '>=8.40'
@@ -1411,8 +1411,8 @@ packages:
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@9.17.0:
resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==}
eslint@9.18.0:
resolution: {integrity: sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -1519,8 +1519,8 @@ packages:
fraction.js@4.3.7:
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
framer-motion@11.16.3:
resolution: {integrity: sha512-4TN2TRKfc/t3WC7QJF349Oa2UVnMmIC+IOzb1jt4JMoqjmI7TO6ATnjlKs+hpMxCkDDwt7q5V8azMidm4UYtRg==}
framer-motion@11.17.0:
resolution: {integrity: sha512-uTNLH9JPMD3ad14WBt3KYRTR+If4tGPLgKTKTIIPaEBMkvazs6EkWNcmCh65qA/tyinOqIbQiuCorXX0qQsNoQ==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@@ -1974,8 +1974,8 @@ packages:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
motion-dom@11.16.3:
resolution: {integrity: sha512-v9Xf2bknUWW7WQajIVo2limfcKlxYv/dcGfB2Vx5h8cswOzP4IvJK21UXz4P37e8G0HstDoW4XRkrPIm737lfw==}
motion-dom@11.16.4:
resolution: {integrity: sha512-2wuCie206pCiP2K23uvwJeci4pMFfyQKpWI0Vy6HrCTDzDCer4TsYtT7IVnuGbDeoIV37UuZiUr6SZMHEc1Vww==}
motion-utils@11.16.0:
resolution: {integrity: sha512-ngdWPjg31rD4WGXFi0eZ00DQQqKKu04QExyv/ymlC+3k+WIgYVFbt6gS5JsFPbJODTF/r8XiE/X+SsoT9c0ocw==}
@@ -2709,20 +2709,20 @@ snapshots:
js-tokens: 4.0.0
picocolors: 1.1.1
'@babel/compat-data@7.26.3': {}
'@babel/compat-data@7.26.5': {}
'@babel/core@7.26.0':
dependencies:
'@ampproject/remapping': 2.3.0
'@babel/code-frame': 7.26.2
'@babel/generator': 7.26.3
'@babel/helper-compilation-targets': 7.25.9
'@babel/generator': 7.26.5
'@babel/helper-compilation-targets': 7.26.5
'@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
'@babel/helpers': 7.26.0
'@babel/parser': 7.26.3
'@babel/parser': 7.26.5
'@babel/template': 7.25.9
'@babel/traverse': 7.26.4
'@babel/types': 7.26.3
'@babel/traverse': 7.26.5
'@babel/types': 7.26.5
convert-source-map: 2.0.0
debug: 4.4.0
gensync: 1.0.0-beta.2
@@ -2731,17 +2731,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@babel/generator@7.26.3':
'@babel/generator@7.26.5':
dependencies:
'@babel/parser': 7.26.3
'@babel/types': 7.26.3
'@babel/parser': 7.26.5
'@babel/types': 7.26.5
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
jsesc: 3.1.0
'@babel/helper-compilation-targets@7.25.9':
'@babel/helper-compilation-targets@7.26.5':
dependencies:
'@babel/compat-data': 7.26.3
'@babel/compat-data': 7.26.5
'@babel/helper-validator-option': 7.25.9
browserslist: 4.24.4
lru-cache: 5.1.1
@@ -2749,8 +2749,8 @@ snapshots:
'@babel/helper-module-imports@7.25.9':
dependencies:
'@babel/traverse': 7.26.4
'@babel/types': 7.26.3
'@babel/traverse': 7.26.5
'@babel/types': 7.26.5
transitivePeerDependencies:
- supports-color
@@ -2759,11 +2759,11 @@ snapshots:
'@babel/core': 7.26.0
'@babel/helper-module-imports': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
'@babel/traverse': 7.26.4
'@babel/traverse': 7.26.5
transitivePeerDependencies:
- supports-color
'@babel/helper-plugin-utils@7.25.9': {}
'@babel/helper-plugin-utils@7.26.5': {}
'@babel/helper-string-parser@7.25.9': {}
@@ -2774,106 +2774,106 @@ snapshots:
'@babel/helpers@7.26.0':
dependencies:
'@babel/template': 7.25.9
'@babel/types': 7.26.3
'@babel/types': 7.26.5
'@babel/parser@7.26.3':
'@babel/parser@7.26.5':
dependencies:
'@babel/types': 7.26.3
'@babel/types': 7.26.5
'@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@babel/runtime@7.26.0':
dependencies:
@@ -2882,22 +2882,22 @@ snapshots:
'@babel/template@7.25.9':
dependencies:
'@babel/code-frame': 7.26.2
'@babel/parser': 7.26.3
'@babel/types': 7.26.3
'@babel/parser': 7.26.5
'@babel/types': 7.26.5
'@babel/traverse@7.26.4':
'@babel/traverse@7.26.5':
dependencies:
'@babel/code-frame': 7.26.2
'@babel/generator': 7.26.3
'@babel/parser': 7.26.3
'@babel/generator': 7.26.5
'@babel/parser': 7.26.5
'@babel/template': 7.25.9
'@babel/types': 7.26.3
'@babel/types': 7.26.5
debug: 4.4.0
globals: 11.12.0
transitivePeerDependencies:
- supports-color
'@babel/types@7.26.3':
'@babel/types@7.26.5':
dependencies:
'@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
@@ -3225,9 +3225,9 @@ snapshots:
'@esbuild/win32-x64@0.21.5':
optional: true
'@eslint-community/eslint-utils@4.4.1(eslint@9.17.0(jiti@1.21.7))':
'@eslint-community/eslint-utils@4.4.1(eslint@9.18.0(jiti@1.21.7))':
dependencies:
eslint: 9.17.0(jiti@1.21.7)
eslint: 9.18.0(jiti@1.21.7)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
@@ -3240,7 +3240,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@eslint/core@0.9.1':
'@eslint/core@0.10.0':
dependencies:
'@types/json-schema': 7.0.15
@@ -3258,12 +3258,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@eslint/js@9.17.0': {}
'@eslint/js@9.18.0': {}
'@eslint/object-schema@2.1.5': {}
'@eslint/plugin-kit@0.2.4':
'@eslint/plugin-kit@0.2.5':
dependencies:
'@eslint/core': 0.10.0
levn: 0.4.1
'@humanfs/core@0.19.1': {}
@@ -3561,33 +3562,33 @@ snapshots:
dependencies:
'@sinonjs/commons': 3.0.1
'@tanstack/query-core@5.62.16': {}
'@tanstack/query-core@5.64.0': {}
'@tanstack/react-query@5.63.0(react@18.3.1)':
'@tanstack/react-query@5.64.0(react@18.3.1)':
dependencies:
'@tanstack/query-core': 5.62.16
'@tanstack/query-core': 5.64.0
react: 18.3.1
'@types/babel__core@7.20.5':
dependencies:
'@babel/parser': 7.26.3
'@babel/types': 7.26.3
'@babel/parser': 7.26.5
'@babel/types': 7.26.5
'@types/babel__generator': 7.6.8
'@types/babel__template': 7.4.4
'@types/babel__traverse': 7.20.6
'@types/babel__generator@7.6.8':
dependencies:
'@babel/types': 7.26.3
'@babel/types': 7.26.5
'@types/babel__template@7.4.4':
dependencies:
'@babel/parser': 7.26.3
'@babel/types': 7.26.3
'@babel/parser': 7.26.5
'@babel/types': 7.26.5
'@types/babel__traverse@7.20.6':
dependencies:
'@babel/types': 7.26.3
'@babel/types': 7.26.5
'@types/estree@1.0.6': {}
@@ -3630,15 +3631,15 @@ snapshots:
dependencies:
'@types/yargs-parser': 21.0.3
'@typescript-eslint/eslint-plugin@8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.17.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.17.0(jiti@1.21.7))(typescript@5.7.3)':
'@typescript-eslint/eslint-plugin@8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.19.1(eslint@9.17.0(jiti@1.21.7))(typescript@5.7.3)
'@typescript-eslint/parser': 8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
'@typescript-eslint/scope-manager': 8.19.1
'@typescript-eslint/type-utils': 8.19.1(eslint@9.17.0(jiti@1.21.7))(typescript@5.7.3)
'@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@1.21.7))(typescript@5.7.3)
'@typescript-eslint/type-utils': 8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
'@typescript-eslint/utils': 8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
'@typescript-eslint/visitor-keys': 8.19.1
eslint: 9.17.0(jiti@1.21.7)
eslint: 9.18.0(jiti@1.21.7)
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
@@ -3647,14 +3648,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.19.1(eslint@9.17.0(jiti@1.21.7))(typescript@5.7.3)':
'@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)':
dependencies:
'@typescript-eslint/scope-manager': 8.19.1
'@typescript-eslint/types': 8.19.1
'@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.3)
'@typescript-eslint/visitor-keys': 8.19.1
debug: 4.4.0
eslint: 9.17.0(jiti@1.21.7)
eslint: 9.18.0(jiti@1.21.7)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
@@ -3664,12 +3665,12 @@ snapshots:
'@typescript-eslint/types': 8.19.1
'@typescript-eslint/visitor-keys': 8.19.1
'@typescript-eslint/type-utils@8.19.1(eslint@9.17.0(jiti@1.21.7))(typescript@5.7.3)':
'@typescript-eslint/type-utils@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)':
dependencies:
'@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.3)
'@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@1.21.7))(typescript@5.7.3)
'@typescript-eslint/utils': 8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
debug: 4.4.0
eslint: 9.17.0(jiti@1.21.7)
eslint: 9.18.0(jiti@1.21.7)
ts-api-utils: 2.0.0(typescript@5.7.3)
typescript: 5.7.3
transitivePeerDependencies:
@@ -3691,13 +3692,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.19.1(eslint@9.17.0(jiti@1.21.7))(typescript@5.7.3)':
'@typescript-eslint/utils@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)':
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@1.21.7))
'@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@1.21.7))
'@typescript-eslint/scope-manager': 8.19.1
'@typescript-eslint/types': 8.19.1
'@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.3)
eslint: 9.17.0(jiti@1.21.7)
eslint: 9.18.0(jiti@1.21.7)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
@@ -3791,7 +3792,7 @@ snapshots:
babel-plugin-istanbul@6.1.1:
dependencies:
'@babel/helper-plugin-utils': 7.25.9
'@babel/helper-plugin-utils': 7.26.5
'@istanbuljs/load-nyc-config': 1.1.0
'@istanbuljs/schema': 0.1.3
istanbul-lib-instrument: 5.2.1
@@ -3802,7 +3803,7 @@ snapshots:
babel-plugin-jest-hoist@29.6.3:
dependencies:
'@babel/template': 7.25.9
'@babel/types': 7.26.3
'@babel/types': 7.26.5
'@types/babel__core': 7.20.5
'@types/babel__traverse': 7.20.6
@@ -3851,7 +3852,7 @@ snapshots:
browserslist@4.24.4:
dependencies:
caniuse-lite: 1.0.30001692
electron-to-chromium: 1.5.79
electron-to-chromium: 1.5.80
node-releases: 2.0.19
update-browserslist-db: 1.1.2(browserslist@4.24.4)
@@ -3989,7 +3990,7 @@ snapshots:
eastasianwidth@0.2.0: {}
electron-to-chromium@1.5.79: {}
electron-to-chromium@1.5.80: {}
email-addresses@5.0.0: {}
@@ -4037,13 +4038,13 @@ snapshots:
escape-string-regexp@4.0.0: {}
eslint-plugin-react-hooks@5.1.0(eslint@9.17.0(jiti@1.21.7)):
eslint-plugin-react-hooks@5.1.0(eslint@9.18.0(jiti@1.21.7)):
dependencies:
eslint: 9.17.0(jiti@1.21.7)
eslint: 9.18.0(jiti@1.21.7)
eslint-plugin-react-refresh@0.4.16(eslint@9.17.0(jiti@1.21.7)):
eslint-plugin-react-refresh@0.4.18(eslint@9.18.0(jiti@1.21.7)):
dependencies:
eslint: 9.17.0(jiti@1.21.7)
eslint: 9.18.0(jiti@1.21.7)
eslint-scope@8.2.0:
dependencies:
@@ -4054,15 +4055,15 @@ snapshots:
eslint-visitor-keys@4.2.0: {}
eslint@9.17.0(jiti@1.21.7):
eslint@9.18.0(jiti@1.21.7):
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@1.21.7))
'@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@1.21.7))
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.19.1
'@eslint/core': 0.9.1
'@eslint/core': 0.10.0
'@eslint/eslintrc': 3.2.0
'@eslint/js': 9.17.0
'@eslint/plugin-kit': 0.2.4
'@eslint/js': 9.18.0
'@eslint/plugin-kit': 0.2.5
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.1
@@ -4205,9 +4206,9 @@ snapshots:
fraction.js@4.3.7: {}
framer-motion@11.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
framer-motion@11.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
motion-dom: 11.16.3
motion-dom: 11.16.4
motion-utils: 11.16.0
tslib: 2.8.1
optionalDependencies:
@@ -4360,7 +4361,7 @@ snapshots:
istanbul-lib-instrument@5.2.1:
dependencies:
'@babel/core': 7.26.0
'@babel/parser': 7.26.3
'@babel/parser': 7.26.5
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
semver: 6.3.1
@@ -4370,7 +4371,7 @@ snapshots:
istanbul-lib-instrument@6.0.3:
dependencies:
'@babel/core': 7.26.0
'@babel/parser': 7.26.3
'@babel/parser': 7.26.5
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
semver: 7.6.3
@@ -4640,10 +4641,10 @@ snapshots:
jest-snapshot@29.7.0:
dependencies:
'@babel/core': 7.26.0
'@babel/generator': 7.26.3
'@babel/generator': 7.26.5
'@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
'@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0)
'@babel/types': 7.26.3
'@babel/types': 7.26.5
'@jest/expect-utils': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
@@ -4815,7 +4816,7 @@ snapshots:
minipass@7.1.2: {}
motion-dom@11.16.3:
motion-dom@11.16.4:
dependencies:
motion-utils: 11.16.0
@@ -5450,12 +5451,12 @@ snapshots:
type-fest@0.21.3: {}
typescript-eslint@8.19.1(eslint@9.17.0(jiti@1.21.7))(typescript@5.7.3):
typescript-eslint@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3):
dependencies:
'@typescript-eslint/eslint-plugin': 8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.17.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.17.0(jiti@1.21.7))(typescript@5.7.3)
'@typescript-eslint/parser': 8.19.1(eslint@9.17.0(jiti@1.21.7))(typescript@5.7.3)
'@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@1.21.7))(typescript@5.7.3)
eslint: 9.17.0(jiti@1.21.7)
'@typescript-eslint/eslint-plugin': 8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
'@typescript-eslint/parser': 8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
'@typescript-eslint/utils': 8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
eslint: 9.18.0(jiti@1.21.7)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color

View File

@@ -1,6 +1,11 @@
export default {
plugins: {
// Tailwind CSS plugin for utility-first styling
tailwindcss: {},
// Autoprefixer plugin to add vendor prefixes automatically for cross-browser compatibility
autoprefixer: {},
// Additional plugins can be added here as needed
},
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

View File

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

57
push.sh
View File

@@ -6,77 +6,72 @@
# Define the conventional commit types with new emojis
TYPES=("🚀 feat" "🐛 fix" "📝 docs" "✨ style" "🛠 refactor" "⚡️ perf" "🔬 test" "🔧 build" "🤖 ci" "🧹 chore" "⏪ revert")
# Function to display an error and exit
# Function to display an error and exit and
error_exit() {
echo -e "\033[1;31m[ERROR]\033[0m $1" # Prints the error message in red color
exit 1 # Exits the script with a non-zero status
echo -e "\033[1;31m[ERROR]\033[0m $1"
exit 1
}
# Ensure the script is run in a Git repository
git rev-parse --is-inside-work-tree > /dev/null 2>&1 || error_exit "This is not a Git repository."
# Get the current branch name using Git
# Get the current branch name
branch=$(git rev-parse --abbrev-ref HEAD)
# Pull the latest changes from the remote repository to stay up-to-date
# Pull the latest changes from the remote repository
echo "Pulling latest changes from remote branch '$branch'..."
git pull origin "$branch" || error_exit "Failed to pull changes from the remote repository. Please resolve any conflicts manually."
# Check if there are any changes to commit (both staged and unstaged)
if git diff --quiet && git diff --cached --quiet; then
error_exit "No changes detected to commit." # If no changes, exit the script
fi
# Prompt the user to select a commit type from the predefined list of types
# Prompt the user to select a commit type
echo "Select a commit type:"
select type in "${TYPES[@]}"; do
if [[ -n "$type" ]]; then # If a valid selection is made, break the loop
if [[ -n "$type" ]]; then
break
else
echo "Invalid selection. Please try again." # If invalid, prompt again
echo "Invalid selection. Please try again."
fi
done
# Extract the commit type (e.g., "feat") and emoji (e.g., "🚀") from the selected type
type_emoji=${type} # The full emoji and type (e.g., "🚀 feat")
type=${type_emoji#* } # Extract the commit type (e.g., "feat") by removing the emoji
emoji=${type_emoji% *} # Extract the emoji (e.g., "🚀") by removing the type
# Extract the commit type and emoji from the selection
type_emoji=${type}
type=${type_emoji#* }
emoji=${type_emoji% *}
# Prompt the user to enter a short description for the commit
# Prompt the user to enter a short description
read -p "Enter a short description: " desc
if [ -z "$desc" ]; then # If the description is empty, exit with an error
if [ -z "$desc" ]; then
error_exit "A short description is required!"
fi
# Prompt the user to enter a longer description (optional)
read -p "Enter a longer description (optional): " long_desc
# Create the commit message using the emoji, type, and description
# Create the commit message
commit_msg="$emoji $type: $desc"
# If the user provided a longer description, append it to the commit message
# If a longer description was provided, add it to the commit message
if [ -n "$long_desc" ]; then
commit_msg+="\n\n$long_desc" # Adds the longer description to the commit message
commit_msg+="\n\n$long_desc"
fi
# Print the commit message to the console for review
# Print the commit message to the console
echo -e "\nCommit message:"
echo -e "\033[1;36m$commit_msg\033[0m" # Prints the commit message in cyan color
echo -e "\033[1;36m$commit_msg\033[0m"
# Stage all changes for commit
# Stage all changes
git add .
# Commit the changes with the constructed commit message
# Commit the changes with the conventional commit message
if git commit -m "$commit_msg"; then
echo -e "\033[1;32mCommit successful!\033[0m" # If commit is successful, print success message in green
echo -e "\033[1;32mCommit successful!\033[0m"
else
error_exit "Commit failed. Please check your changes and try again." # If commit fails, show error and exit
error_exit "Commit failed."
fi
# Push the changes to the remote repository
echo "Pushing changes to remote branch '$branch'..."
if git push origin "$branch"; then
echo -e "\033[1;32mChanges pushed to remote branch '$branch'.\033[0m" # If push is successful, print success message in green
echo -e "\033[1;32mChanges pushed to remote branch '$branch'.\033[0m"
else
error_exit "Push failed. Please check your connection or branch permissions." # If push fails, show error and exit
fi
error_exit "Push failed. Please check your connection or branch permissions."
fi

View File

@@ -7,11 +7,11 @@ export function MissionSection() {
initial={{ opacity: 0 }}
whileInView={{ opacity: 1 }}
transition={{ duration: 0.6 }}
className="bg-gradient-to-r from-cornflower-blue/10 to-white p-10 rounded-lg shadow-xl"
className="p-10 rounded-lg"
>
<div className="flex items-center gap-4 mb-6">
<div className="flex items-center gap-4 mb-6 justify-center text-center">
<Target className="h-8 w-8 text-cornflower-blue" />
<h2 className="text-3xl font-extrabold text-gray-900">Our Mission</h2>
<h2 className="text-3xl font-extrabold text-gray-900">Our Mission</h2>
</div>
<div className="max-w-3xl mx-auto">

View File

@@ -11,33 +11,34 @@ interface ContributorCardProps {
export function ContributorCard({ login, avatarUrl, contributions, profileUrl }: ContributorCardProps) {
return (
<motion.div
whileHover={{ y: -5 }}
className="bg-white/80 backdrop-blur-sm p-6 rounded-lg border border-gray-200"
whileHover={{ y: -5, scale: 1.02 }}
whileTap={{ scale: 0.98 }}
className="bg-white/80 backdrop-blur-sm p-6 rounded-lg border border-gray-200 shadow-md w-72 h-48 transition-all flex flex-col justify-between"
>
<div className="flex items-center gap-4">
<img
src={avatarUrl}
alt={`${login}'s avatar`}
className="w-24 h-24 rounded-full"
className="w-20 h-20 rounded-full object-cover"
/>
<div>
<h3 className="font-semibold text-gray-900">{login}</h3>
<h3 className="font-semibold text-gray-900 text-lg truncate">{login}</h3>
<div className="flex items-center gap-2 text-sm text-gray-600">
<GitCommit className="h-4 w-4" />
<span>{contributions} contributions</span>
</div>
</div>
</div>
<a
<motion.a
href={profileUrl}
target="_blank"
rel="noopener noreferrer"
className="mt-4 flex items-center gap-2 text-sm text-cornflower-blue hover:underline"
whileHover={{ x: 5 }}
className="mt-4 flex items-center gap-2 text-sm text-blue-600 hover:underline"
>
<Github className="h-4 w-4" />
View Profile
</a>
</motion.a>
</motion.div>
);
}
}

View File

@@ -1,9 +1,9 @@
import { motion } from 'framer-motion';
import { MapPin, Users, Book } from 'lucide-react';
import type { GithubUser } from '../../lib/github';
import { MapPin, Users, Book, Github } from 'lucide-react'; // Added Github icon
import type { GithubUser } from '../../lib/github';
interface TeamMemberCardProps {
user: GithubUser ;
user: GithubUser;
role: string;
description: string;
}
@@ -13,7 +13,7 @@ export function TeamMemberCard({ user, role, description }: TeamMemberCardProps)
<motion.div
whileHover={{ scale: 1.05 }}
transition={{ type: 'spring', stiffness: 300 }}
className="bg-white shadow-lg rounded-lg p-6 border border-gray-200 flex flex-col justify-between"
className="bg-gradient-to-r from-white to-blue-50 shadow-lg rounded-lg p-6 border border-gray-200 flex flex-col justify-between"
>
<div className="flex items-start gap-4">
<img
@@ -33,9 +33,23 @@ export function TeamMemberCard({ user, role, description }: TeamMemberCardProps)
</div>
</div>
<p className="mt-4 text-gray-600 flex-grow">{description}</p>
<div className="mt-4 flex items-center gap-4 text-sm text-gray-500">
{/* Show full description on hover */}
<motion.p
className="mt-4 text-gray-600 flex-grow line-clamp-2"
whileHover={{ opacity: 1 }}
initial={{ opacity: 0.7 }}
transition={{ duration: 0.3 }}
>
{description}
</motion.p>
{/* Additional information shown when hovering */}
<motion.div
className="mt-4 flex items-center gap-4 text-sm text-gray-500"
whileHover={{ opacity: 1 }}
initial={{ opacity: 0.5 }}
transition={{ duration: 0.3 }}
>
<div className="flex items-center gap-1">
<Users className="h-4 w-4" />
<span>{user.followers.toLocaleString()} followers</span>
@@ -44,16 +58,17 @@ export function TeamMemberCard({ user, role, description }: TeamMemberCardProps)
<Book className="h-4 w-4" />
<span>{user.public_repos} repos</span>
</div>
</div>
</motion.div>
<a
href={user.html_url}
target="_blank"
rel="noopener noreferrer"
className="mt-4 inline-flex items-center text-sm text-cornflower-blue hover:underline transition-colors duration-200"
>
<Github className="h-4 w-4 mr-2" /> {/* Added spacing after the icon */}
View GitHub Profile
</a>
</motion.div>
);
}
}

View File

@@ -9,7 +9,6 @@ interface SearchBarProps {
export function SearchBar({ value, onChange }: SearchBarProps) {
return (
<div className="relative">
<Search className="absolute left-4 top-1/2 -translate-y-1/2 h-5 w-5 text-gray-400 transition-all" />
<input
type="text"
value={value}
@@ -17,6 +16,7 @@ export function SearchBar({ value, onChange }: SearchBarProps) {
placeholder="Search tools..."
className="w-full pl-12 pr-6 py-3 bg-white/80 backdrop-blur-sm border border-gray-200 rounded-lg focus:ring-2 focus:ring-cornflower-blue focus:border-cornflower-blue outline-none transition-all duration-300 ease-in-out hover:border-gray-300 hover:bg-white/90"
/>
<Search className="absolute left-4 top-1/2 -translate-y-1/2 h-5 w-5 text-gray-400 transition-all" />
</div>
);
}

View File

@@ -0,0 +1,28 @@
// Toast.tsx
import { motion } from 'framer-motion';
interface ToastProps {
message: string;
onClose: () => void;
}
export const Toast = ({ message, onClose }: ToastProps) => (
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
exit={{ opacity: 0, y: 20 }}
transition={{ duration: 0.3 }}
className="fixed bottom-4 left-1/2 transform -translate-x-1/2 bg-cornflower-blue text-white px-4 py-2 rounded-lg shadow-lg"
>
<div className="flex items-center gap-2">
<span>{message}</span>
</div>
<button
onClick={onClose}
className="absolute top-0 right-0 p-1 text-white hover:bg-cornflower-blue/80 rounded-full"
aria-label="Close toast"
>
&times;
</button>
</motion.div>
);

View File

@@ -1,5 +1,7 @@
import { motion } from 'framer-motion';
import { Terminal } from 'lucide-react';
import { Terminal, Clipboard } from 'lucide-react';
import { useState } from 'react';
import { Toast } from './Toast'; // Make sure to import the Toast component
interface ToolCardProps {
name: string;
@@ -9,27 +11,63 @@ interface ToolCardProps {
}
export function ToolCard({ name, description, category, command }: ToolCardProps) {
const [copied, setCopied] = useState(false);
const [showToast, setShowToast] = useState(false);
const handleCopyClick = () => {
navigator.clipboard.writeText(command)
.then(() => {
setCopied(true);
setShowToast(true);
setTimeout(() => {
setCopied(false);
setShowToast(false);
}, 3000); // Hide toast after 3 seconds
})
.catch((error) => console.error('Failed to copy: ', error));
};
return (
<motion.div
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
whileHover={{ scale: 1.05, y: -5 }}
transition={{ duration: 0.3 }}
className="bg-gradient-to-r from-cornflower-blue/10 to-white p-6 rounded-lg shadow-lg border border-gray-100 transform hover:shadow-2xl transition-all"
className="bg-white p-6 rounded-lg shadow-xl border border-gray-100 transform hover:shadow-2xl transition-all"
>
<div className="flex items-center gap-4 mb-4">
<div className="p-3 bg-cornflower-blue/20 rounded-full">
<Terminal className="h-6 w-6 text-cornflower-blue" />
<div className="p-4 bg-cornflower-blue/20 rounded-full">
<Terminal className="h-7 w-7 text-cornflower-blue" />
</div>
<h3 className="text-2xl font-semibold text-gray-900">{name}</h3>
</div>
<p className="text-gray-600 text-lg mb-4">{description}</p>
<div className="flex items-center justify-between">
<div className="flex items-center justify-between mt-4">
<span className="text-sm font-medium text-cornflower-blue">{category}</span>
<code className="text-sm bg-gray-100 px-3 py-1 rounded">{command}</code>
<div className="flex items-center gap-2">
<code className="text-sm bg-gray-100 px-3 py-1 rounded text-gray-800">{command}</code>
<button
onClick={handleCopyClick}
className="p-2 bg-cornflower-blue/20 rounded-full hover:bg-cornflower-blue/30 transition-all"
aria-label="Copy command"
>
{copied ? (
<span className="text-sm text-cornflower-blue">Copied!</span>
) : (
<Clipboard className="h-5 w-5 text-cornflower-blue" />
)}
</button>
</div>
</div>
{showToast && (
<Toast
message="Command copied! Paste it in your terminal with Ctrl + Shift + V (Cmd + Shift + V on Mac)"
onClose={() => setShowToast(false)}
/>
)}
</motion.div>
);
}

View File

@@ -14,14 +14,18 @@ export function StatsSection() {
{ label: "Security Tools", value: "Loading...", icon: Wrench },
{ label: "GitHub Stars", value: "Loading...", icon: Star },
]);
const [error, setError] = useState(false);
const [loading, setLoading] = useState(true); // Loading state
const [error, setError] = useState<string | null>(null); // Error message
const fetchGitHubStats = async (username: string) => {
try {
const userResponse = await fetch(`https://api.github.com/users/${username}`);
const userData = await userResponse.json();
// Check for invalid response
if (userData.message) throw new Error("User not found");
const repos = [];
let page = 1;
@@ -43,14 +47,16 @@ export function StatsSection() {
{ label: "Repositories", value: `${repos.length}`, icon: Wrench },
{ label: "Stars", value: `${starsCount}`, icon: Star },
]);
setLoading(false);
} catch (error) {
console.error("Error fetching GitHub data:", error);
setError(true);
setError("Unable to fetch GitHub data. Please try again later.");
setLoading(false);
}
};
useEffect(() => {
const username = "Snigdha-OS"; // Replace with the desired GitHub username
const username = "Snigdha-OS"; // Replace with desired GitHub username
fetchGitHubStats(username);
}, []);
@@ -78,10 +84,10 @@ export function StatsSection() {
</div>
{/* Stats Grid */}
{error ? (
<div className="text-center text-red-500 font-medium">
Unable to fetch data. Please try again later.
</div>
{loading ? (
<div className="text-center text-gray-500 font-medium">Loading data...</div>
) : error ? (
<div className="text-center text-red-500 font-medium">{error}</div>
) : (
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-12">
{stats.map((stat, index) => (
@@ -95,8 +101,8 @@ export function StatsSection() {
ease: "easeOut",
}}
whileHover={{
scale: 1.1,
boxShadow: "0px 20px 40px rgba(0, 0, 0, 0.2)",
scale: 1.05,
boxShadow: "0px 20px 40px rgba(0, 0, 0, 0.1)",
}}
className="flex flex-col items-center p-8 bg-white rounded-xl shadow-lg hover:shadow-2xl transition-transform duration-300"
>

View File

@@ -13,33 +13,54 @@ export function TestimonialCard({ content, author, role, delay = 0 }: Testimonia
<motion.div
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
transition={{ delay, duration: 0.6, ease: "easeOut" }}
transition={{ delay, duration: 0.8, ease: "easeOut" }}
whileHover={{
scale: 1.05,
boxShadow: "0 12px 24px rgba(0, 0, 0, 0.15)",
rotate: 2, // Add subtle rotation effect on hover
}}
className="relative bg-white rounded-xl shadow-lg p-8 transition-transform duration-300 group"
>
{/* Floating quote icon */}
<div className="absolute -top-4 -right-4 bg-cornflower-blue/10 p-3 rounded-full">
<motion.div
className="absolute -top-4 -right-4 bg-cornflower-blue/10 p-3 rounded-full"
initial={{ scale: 0 }}
whileInView={{ scale: 1 }}
transition={{ delay: 0.3, duration: 0.5, ease: "easeOut" }}
>
<Quote className="h-10 w-10 text-cornflower-blue/40 group-hover:scale-110 transition-transform duration-300" />
</div>
</motion.div>
{/* Testimonial content */}
<p className="text-gray-600 text-lg leading-relaxed mb-6">
<motion.p
className="text-gray-600 text-lg leading-relaxed mb-6"
initial={{ opacity: 0 }}
whileInView={{ opacity: 1 }}
transition={{ delay: 0.2 + delay, duration: 0.8 }}
>
<span className="italic text-cornflower-blue/80 font-medium"></span>
{content}
<span className="italic text-cornflower-blue/80 font-medium"></span>
</p>
</motion.p>
{/* Author details */}
<div className="flex flex-col items-start">
<motion.div
className="flex flex-col items-start"
initial={{ opacity: 0, y: 10 }}
whileInView={{ opacity: 1, y: 0 }}
transition={{ delay: 0.4 + delay, duration: 0.6 }}
>
<p className="text-gray-900 font-semibold text-lg">{author}</p>
<p className="text-sm text-gray-500">{role}</p>
</div>
</motion.div>
{/* Subtle background gradient */}
<div className="absolute inset-0 bg-gradient-to-br from-cornflower-blue/5 via-cornflower-blue/10 to-cornflower-blue/20 opacity-0 group-hover:opacity-100 transition-opacity duration-300 blur-lg" />
<motion.div
className="absolute inset-0 bg-gradient-to-br from-cornflower-blue/5 via-cornflower-blue/10 to-cornflower-blue/20 opacity-0 group-hover:opacity-100 transition-opacity duration-300 blur-lg"
initial={{ opacity: 0 }}
whileInView={{ opacity: 1 }}
transition={{ delay: 0.5 + delay, duration: 0.6 }}
/>
</motion.div>
);
}

View File

@@ -1,6 +1,6 @@
export const galleryImages = [
{
src: '/images/snigdhaos-plama-01.png',
src: '/images/snigdhaos-plasma-01.png',
alt: 'Snigdha OS Plasma 6 - Application Dashbord',
category: 'Plasma',
},
@@ -29,6 +29,36 @@ export const galleryImages = [
alt: 'Snigdha OS Plasma 6 - Control Hub',
category: 'Plasma',
},
{
src: '/images/snigdhaos-gnome-01.png',
alt: 'Snigdha OS Gnome Desktop - Main',
category: 'Gnome',
},
{
src: '/images/snigdhaos-gnome-02.png',
alt: 'Snigdha OS Gnome Desktop - Menu',
category: 'Gnome',
},
{
src: '/images/snigdhaos-gnome-03.png',
alt: 'Snigdha OS Gnome Desktop - Control',
category: 'Gnome',
},
{
src: '/images/snigdhaos-gnome-04.png',
alt: 'Snigdha OS Gnome Desktop - Folders',
category: 'Gnome',
},
{
src: '/images/snigdhaos-gnome-05.png',
alt: 'Snigdha OS Gnome Desktop - All Apps',
category: 'Gnome',
},
{
src: '/images/snigdhaos-gnome-06.png',
alt: 'Snigdha OS Gnome Desktop - Terminal',
category: 'Gnome',
},
];
export const categories = ['All', 'Plasma'];
export const categories = ['All', 'Plasma', 'Gnome'];

View File

@@ -9,6 +9,11 @@ export const teamMembers = [
role: 'Co-Maintainer & Tools Developer',
description: 'Specializes in integrating security tools and maintaining critical packages for enhanced system functionality.',
},
{
username: 'XlebyllleK',
role: 'Key Developer',
description: 'Plays a pivotal role in core development, focusing on innovative solutions and system optimizations to enhance functionality.',
},
{
username: 'iconized',
role: 'Co-Maintainer & Server Designer',

View File

@@ -13,5 +13,10 @@ export const testimonials = [
content: "साइबर सुरक्षा के क्षेत्र में शुरुआती और पेशेवर दोनों के लिए आदर्श। व्यापक दस्तावेज़ीकरण एक बेहतरीन संसाधन है।",
author: "विक्रम अय्यर",
role: "साइबर सुरक्षा सलाहकार"
},
{
content: "স্নিগ্ধা ওএস আমাদের সাইবার নিরাপত্তার কাজে বিপ্লব এনেছে। এর সহজ ইন্টারফেস এবং শক্তিশালী টুলগুলি অসাধারণ।",
author: "সুব্রত ঘোষ",
role: "সাইবার নিরাপত্তা বিশেষজ্ঞ"
}
];

View File

@@ -12,315 +12,315 @@ export const tools: Tool[] = [
name: 'Nmap',
description: 'Network exploration tool and security scanner',
category: 'Information Gathering',
command: 'nmap',
command: 'sudo pacman -S nmap',
},
{
id: '2',
name: 'Wireshark',
description: 'Network protocol analyzer for real-time packet capture',
category: 'Sniffing & Spoofing',
command: 'wireshark',
command: 'sudo pacman -S wireshark',
},
{
id: '3',
name: 'Metasploit',
description: 'Penetration testing framework',
category: 'Exploitation Tools',
command: 'msfconsole',
command: 'sudo pacman -S metasploit',
},
{
id: '4',
name: 'Burp Suite',
description: 'Web vulnerability scanner and proxy tool',
category: 'Web Applications',
command: 'burpsuite',
command: 'sudo pacman -S burpsuite',
},
{
id: '5',
name: 'Aircrack-ng',
description: 'Complete suite for wireless network security assessment',
category: 'Wireless Attacks',
command: 'aircrack-ng',
command: 'sudo pacman -S aircrack-ng',
},
{
id: '6',
name: 'John the Ripper',
description: 'Password cracker and hash analyzer',
category: 'Password Attacks',
command: 'john',
command: 'sudo pacman -S john',
},
{
id: '7',
name: 'Hydra',
description: 'Brute-force password cracking tool',
category: 'Password Attacks',
command: 'hydra',
command: 'sudo pacman -S hydra',
},
{
id: '8',
name: 'Nikto',
description: 'Web server scanner for vulnerabilities',
category: 'Web Applications',
command: 'nikto',
command: 'sudo pacman -S nikto',
},
{
id: '9',
name: 'Airgeddon',
description: 'Multi-use bash script for wireless pentesting',
category: 'Wireless Attacks',
command: 'airgeddon',
command: 'sudo pacman -S airgeddon',
},
{
id: '10',
name: 'OWASP ZAP',
description: 'Open-source web application security scanner',
category: 'Web Applications',
command: 'zap',
command: 'sudo pacman -S zap',
},
{
id: '11',
name: 'Ettercap',
description: 'Comprehensive suite for man-in-the-middle attacks',
category: 'Sniffing & Spoofing',
command: 'ettercap',
command: 'sudo pacman -S ettercap',
},
{
id: '12',
name: 'Kali Linux',
description: 'Linux distribution with pre-installed security tools',
category: 'All',
command: 'kali',
command: 'sudo pacman -S kali-linux',
},
{
id: '13',
name: 'Netcat',
description: 'Network utility for reading/writing network connections',
category: 'Information Gathering',
command: 'nc',
command: 'sudo pacman -S netcat',
},
{
id: '14',
name: 'Netdiscover',
description: 'Network discovery tool for locating devices on a network',
category: 'Information Gathering',
command: 'netdiscover',
command: 'sudo pacman -S netdiscover',
},
{
id: '15',
name: 'SQLmap',
description: 'Automated SQL injection and database takeover tool',
category: 'Exploitation Tools',
command: 'sqlmap',
command: 'sudo pacman -S sqlmap',
},
{
id: '16',
name: 'Gobuster',
description: 'Directory and DNS busting tool for web enumeration',
category: 'Information Gathering',
command: 'gobuster',
command: 'sudo pacman -S gobuster',
},
{
id: '17',
name: 'Nikto2',
description: 'Web scanner for vulnerabilities, similar to Nikto',
category: 'Web Applications',
command: 'nikto2',
command: 'sudo pacman -S nikto2',
},
{
id: '18',
name: 'The Harvester',
description: 'Information gathering tool for open-source intelligence (OSINT)',
category: 'Information Gathering',
command: 'theharvester',
command: 'sudo pacman -S theharvester',
},
{
id: '19',
name: 'Social-Engineer Toolkit (SET)',
description: 'Penetration testing framework for social engineering',
category: 'Exploitation Tools',
command: 'setoolkit',
command: 'sudo pacman -S setoolkit',
},
{
id: '20',
name: 'Burp Suite Pro',
description: 'Advanced web vulnerability scanner with additional features',
category: 'Web Applications',
command: 'burpsuite_pro',
command: 'sudo pacman -S burpsuite_pro',
},
{
id: '21',
name: 'Beef',
description: 'The Browser Exploitation Framework for testing browser security',
category: 'Exploitation Tools',
command: 'beef',
command: 'sudo pacman -S beef',
},
{
id: '22',
name: 'Sn1per',
description: 'Automated pentesting tool for information gathering',
category: 'Information Gathering',
command: 'sn1per',
command: 'sudo pacman -S sn1per',
},
{
id: '23',
name: 'Responder',
description: 'Lateral movement tool for exploiting network protocols',
category: 'Sniffing & Spoofing',
command: 'responder',
command: 'sudo pacman -S responder',
},
{
id: '24',
name: 'Sublist3r',
description: 'Subdomain enumeration tool for information gathering',
category: 'Information Gathering',
command: 'sublist3r',
command: 'sudo pacman -S sublist3r',
},
{
id: '25',
name: 'Hashcat',
description: 'Advanced password cracking tool',
category: 'Password Attacks',
command: 'hashcat',
command: 'sudo pacman -S hashcat',
},
{
id: '26',
name: 'Mimikatz',
description: 'Windows credential dumper for obtaining passwords',
category: 'Exploitation Tools',
command: 'mimikatz',
command: 'sudo pacman -S mimikatz',
},
{
id: '27',
name: 'HashID',
description: 'Hash identifier tool for identifying hash types',
category: 'Password Attacks',
command: 'hashid',
command: 'sudo pacman -S hashid',
},
{
id: '28',
name: 'BloodHound',
description: 'Active Directory enumeration tool for post-exploitation',
category: 'Exploitation Tools',
command: 'bloodhound',
command: 'sudo pacman -S bloodhound',
},
{
id: '29',
name: 'Lynis',
description: 'Security auditing tool for Unix-based systems',
category: 'Information Gathering',
command: 'lynis',
command: 'sudo pacman -S lynis',
},
{
id: '30',
name: 'Wfuzz',
description: 'Web fuzzing tool for finding vulnerabilities in web apps',
category: 'Web Applications',
command: 'wfuzz',
command: 'sudo pacman -S wfuzz',
},
{
id: '31',
name: 'Cobalt Strike',
description: 'Adversary simulation software for penetration testers',
category: 'Exploitation Tools',
command: 'cobaltstrike',
command: 'sudo pacman -S cobaltstrike',
},
{
id: '32',
name: 'Shodan',
description: 'Search engine for Internet-connected devices',
category: 'Information Gathering',
command: 'shodan',
command: 'sudo pacman -S shodan',
},
{
id: '33',
name: 'CloudBrute',
description: 'Brute force cloud storage services',
category: 'Password Attacks',
command: 'cloudbrute',
command: 'sudo pacman -S cloudbrute',
},
{
id: '34',
name: 'FuzzBunch',
description: 'A penetration testing framework developed by the NSA',
category: 'Exploitation Tools',
command: 'fuzzbunch',
command: 'sudo pacman -S fuzzbunch',
},
{
id: '35',
name: 'PowerSploit',
description: 'A PowerShell-based exploitation framework',
category: 'Exploitation Tools',
command: 'powersploit',
command: 'sudo pacman -S powersploit',
},
{
id: '36',
name: 'Powershell Empire',
description: 'Post-exploitation and agent-based framework',
category: 'Exploitation Tools',
command: 'empire',
command: 'sudo pacman -S empire',
},
{
id: '37',
name: 'Reaver',
description: 'Wi-Fi Protected Setup (WPS) attack tool',
category: 'Wireless Attacks',
command: 'reaver',
command: 'sudo pacman -S reaver',
},
{
id: '38',
name: 'Kismet',
description: 'Wireless network detector, sniffer, and intrusion detection system',
category: 'Wireless Attacks',
command: 'kismet',
command: 'sudo pacman -S kismet',
},
{
id: '39',
name: 'Nikto3',
description: 'Web server scanner that identifies vulnerabilities',
category: 'Web Applications',
command: 'nikto3',
command: 'sudo pacman -S nikto3',
},
{
id: '40',
name: 'Scapy',
description: 'Network manipulation tool for penetration testing',
category: 'Sniffing & Spoofing',
command: 'scapy',
command: 'sudo pacman -S scapy',
},
{
id: '41',
name: 'SSLScan',
description: 'SSL scanner for finding vulnerabilities in SSL implementations',
category: 'Web Applications',
command: 'sslscan',
command: 'sudo pacman -S sslscan',
},
{
id: '42',
name: 'Gophish',
description: 'Open-source phishing framework for social engineering testing',
category: 'Social Engineering',
command: 'gophish',
command: 'sudo pacman -S gophish',
},
{
id: '43',
name: 'Empire',
description: 'Post-exploitation framework with PowerShell agents',
category: 'Exploitation Tools',
command: 'empire',
command: 'sudo pacman -S empire',
},
{
id: '44',
name: 'Pipal',
description: 'Password analysis tool to identify weak passwords',
category: 'Password Attacks',
command: 'pipal',
command: 'sudo pacman -S pipal',
},
{
id: '45',
name: 'Rekall',
description: 'Forensic memory analysis tool for investigating malware',
category: 'Forensics',
command: 'rekall',
command: 'sudo pacman -S rekall',
},
];

View File

@@ -5,46 +5,46 @@ import { MissionSection } from '../components/about/MissionSection';
export default function About() {
return (
<div className="py-16 bg-gradient-to-b from-gray-50 via-white to-gray-100">
<div className="py-16 bg-gray-50">
<div className="max-w-7xl mx-auto px-6 sm:px-8 lg:px-12">
{/* Hero Section */}
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.8 }}
className="text-center mb-16"
className="text-center mb-12"
>
<h1 className="text-5xl font-extrabold text-gray-900">
<h1 className="text-4xl font-bold text-gray-900">
About Snigdha OS
</h1>
<p className="mt-4 text-xl text-gray-600 max-w-2xl mx-auto">
The most advanced penetration testing distribution, made for security professionals.
<p className="mt-4 text-lg text-gray-600 max-w-2xl mx-auto">
The most advanced penetration testing distribution, crafted for security professionals.
</p>
</motion.div>
{/* Content Sections */}
<div className="space-y-20">
<div className="space-y-16">
{/* Mission Section */}
<section className="bg-cornflower-blue/5 rounded-2xl p-8 shadow-lg">
<section className="bg-white rounded-lg p-6 shadow-sm">
<MissionSection />
</section>
{/* Team Section */}
<section>
<h2 className="text-3xl font-bold text-gray-900 text-center mb-12">
<h2 className="text-2xl font-semibold text-gray-900 text-center mb-8">
Our Team Structure
</h2>
<div className="overflow-hidden rounded-xl shadow-md bg-white p-6">
<div className="rounded-lg shadow-sm bg-white p-6">
<TeamSection />
</div>
</section>
{/* Timeline Section */}
<section>
<h2 className="text-3xl font-bold text-gray-900 text-center mb-12">
<h2 className="text-2xl font-semibold text-gray-900 text-center mb-8">
Release Timeline
</h2>
<div className="bg-gray-50 p-6 rounded-lg shadow-lg">
<div className="bg-white p-6 rounded-lg shadow-sm">
<Timeline />
</div>
</section>

View File

@@ -3,39 +3,59 @@ import react from '@vitejs/plugin-react';
import { resolve } from 'path';
import ViteSitemap from 'vite-plugin-sitemap';
export default defineConfig({
plugins: [
react(),
ViteSitemap({
hostname: 'https://www.snigdhaos.org',
outDir: './dist',
changefreq: 'daily',
priority: 0.7,
// lastmod: true,
}),
],
resolve: {
alias: {
'@': resolve(__dirname, './src'),
export default defineConfig(({ mode }) => {
const isProduction = mode === 'production';
return {
plugins: [
react(),
ViteSitemap({
hostname: process.env.VITE_SITE_URL || 'https://www.snigdhaos.org',
outDir: './dist',
changefreq: 'daily',
priority: 0.7,
}),
],
resolve: {
alias: {
'@': resolve(__dirname, './src'),
},
},
},
build: {
rollupOptions: {
output: {
entryFileNames: 'script.js',
assetFileNames: ({ name }) => {
if (name && name.endsWith('.css')) {
return 'style.css';
}
return 'assets/[name]-[hash][extname]';
css: {
preprocessorOptions: {
scss: {
additionalData: `@import "@/styles/global.scss";`, // Import global SCSS
},
},
},
},
optimizeDeps: {
exclude: ['lucide-react'],
},
server: {
open: true, // Automatically open the browser when running the development server
},
build: {
rollupOptions: {
output: {
entryFileNames: 'script.js',
chunkFileNames: '[name].js',
assetFileNames: ({ name }) => {
if (name && name.endsWith('.css')) {
return 'style.css';
}
return 'assets/[name]-[hash][extname]';
},
},
},
terserOptions: {
compress: {
drop_console: isProduction, // Remove console logs in production
drop_debugger: isProduction, // Remove debugger in production
},
},
},
optimizeDeps: {
exclude: ['lucide-react'],
},
server: {
open: true,
port: 5173, // Default port
strictPort: false, // Allow using a different port if 5173 is taken
},
envDir: './env', // Define directory for environment variables
};
});