Compare commits

...

5 Commits

Author SHA1 Message Date
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
6 changed files with 186 additions and 153 deletions

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

@@ -27,7 +27,7 @@
"dependencies": {
"@tanstack/react-query": "^5.63.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,13 +36,13 @@
"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",
"gh-pages": "^6.3.0",

261
pnpm-lock.yaml generated
View File

@@ -15,8 +15,8 @@ importers:
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))
version: 0.4.16(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':
@@ -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==}
@@ -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': {}
@@ -3570,24 +3571,24 @@ snapshots:
'@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.16(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
},
};

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>
);
}