diff --git a/ACTION_CHECKLIST.md b/ACTION_CHECKLIST.md new file mode 100644 index 0000000..6560e6e --- /dev/null +++ b/ACTION_CHECKLIST.md @@ -0,0 +1,327 @@ +# ✅ GitHub Profile Enhancement - Action Checklist + +This checklist will guide you through setting up and optimizing your enhanced GitHub profile. + +--- + +## 🎯 Immediate Actions (5 minutes) + +### Step 1: Create Your Profile Repository +- [ ] Go to [GitHub](https://github.com) and log in +- [ ] Click the **+** icon → **New repository** +- [ ] Name it **`amar-295`** (exactly matching your username) +- [ ] Set to **Public** +- [ ] Check "Add a README file" +- [ ] Click **Create repository** + +### Step 2: Add the Enhanced README +- [ ] Open your new `amar-295` repository +- [ ] Click on `README.md` → Click the **✏️ edit icon** +- [ ] Open `GITHUB_PROFILE_README.md` from this repo +- [ ] Copy the entire content +- [ ] Paste into your profile README (replace existing content) +- [ ] Commit changes with message: "✨ Add enhanced profile README" + +### Step 3: Verify Your Profile +- [ ] Visit your profile: `https://github.com/amar-295` +- [ ] Confirm the enhanced README is displayed +- [ ] Check that all badges, stats, and animations are working +- [ ] View on mobile to ensure responsive design + +--- + +## 🎨 Quick Customizations (10 minutes) + +### Update Links +- [ ] Replace `#` placeholder links with actual project demo URLs +- [ ] Verify all social media links are correct +- [ ] Update portfolio link if different from current + +### Adjust Content +- [ ] Review the "About Me" code block - update if needed +- [ ] Check featured projects - add/remove as needed +- [ ] Verify tech stack badges match your skills +- [ ] Update location, education, or other personal info + +### Fine-tune Appearance +- [ ] Test different stat card themes (see `BADGES_QUICK_REFERENCE.md`) +- [ ] Adjust typing animation text in header if desired +- [ ] Consider adding/removing sections based on preference + +--- + +## 🚀 Repository Enhancements (30 minutes) + +### For Each Project Repository + +#### Express Authentication Backend +- [ ] Create comprehensive README with: + - [ ] Project overview and motivation + - [ ] Features list + - [ ] Tech stack with rationale + - [ ] Installation & setup instructions + - [ ] API endpoints documentation + - [ ] Environment variables needed + - [ ] Security best practices implemented + - [ ] Future improvements +- [ ] Add relevant badges (Node.js, Express, MongoDB, JWT) +- [ ] Create CONTRIBUTING.md if open to contributions +- [ ] Add LICENSE file if not present + +#### React Password Generator +- [ ] Enhance README with: + - [ ] Live demo link (prominently displayed) + - [ ] Screenshot or GIF of the tool + - [ ] Feature highlights + - [ ] How to use locally + - [ ] Customization options + - [ ] Technical implementation details +- [ ] Add Lighthouse performance scores +- [ ] Include badges for React, Vite, Tailwind + +#### React Portfolio (This Repository) +- [x] Enhanced README with GitHub profile section ✅ +- [ ] Consider adding: + - [ ] Screenshots of different themes (light/dark) + - [ ] Lighthouse scores + - [ ] Deployment guide + - [ ] Browser compatibility matrix + +--- + +## 📊 GitHub Activity Optimization (Ongoing) + +### Consistent Contribution Pattern +- [ ] Set up GitHub Actions for automated tasks +- [ ] Commit regularly (aim for consistent activity) +- [ ] Contribute to at least 1 open source project +- [ ] Create meaningful commit messages + +### Repository Quality +- [ ] Ensure all repos have descriptions +- [ ] Add topics/tags to each repository (helps discoverability) +- [ ] Set appropriate repository visibility (public for showcase) +- [ ] Archive or delete unused/experimental repos + +### Documentation Standards +- [ ] Every repo should have a README +- [ ] Include setup instructions in all repos +- [ ] Add code comments for complex logic +- [ ] Document any environment setup needed + +--- + +## 🏆 Advanced Enhancements (Optional) + +### GitHub Actions & CI/CD +- [ ] Add CI/CD workflows to projects +- [ ] Display build status badges +- [ ] Set up automated testing +- [ ] Add code quality checks (ESLint, Prettier) + +### Portfolio Additions +- [ ] Add a blog section (if you write articles) +- [ ] Include certification badges +- [ ] Showcase open source contributions +- [ ] Add Wakatime stats (coding time tracker) +- [ ] Integrate Spotify "Now Playing" widget + +### Social Proof +- [ ] Ask colleagues for recommendations on LinkedIn +- [ ] Share your projects on dev.to, Hashnode, or Medium +- [ ] Participate in Hacktoberfest or similar events +- [ ] Contribute to trending open source projects + +### Profile Optimization +- [ ] Pin your 6 best repositories to profile +- [ ] Update profile bio with clear value proposition +- [ ] Add profile picture (professional or avatar) +- [ ] Set GitHub status with current availability +- [ ] Fill out profile fields (company, location, website) + +--- + +## 📈 Continuous Improvement (Monthly) + +### Content Updates +- [ ] Review and update profile README monthly +- [ ] Add new projects as completed +- [ ] Update "Currently Learning" section +- [ ] Refresh project descriptions and links +- [ ] Check that all links are working + +### Stats Monitoring +- [ ] Monitor GitHub contribution graph +- [ ] Track profile views (via counter) +- [ ] Review most popular repositories +- [ ] Analyze which content gets most attention + +### Community Engagement +- [ ] Respond to issues on your repositories +- [ ] Review and merge pull requests +- [ ] Help others by answering questions +- [ ] Share knowledge through discussions + +--- + +## 🔍 Quality Checklist + +Before considering your profile "complete", verify: + +### Content Quality +- [ ] No spelling or grammar errors +- [ ] All links work correctly +- [ ] Contact information is current +- [ ] Professional tone throughout +- [ ] Consistent formatting + +### Visual Appeal +- [ ] Consistent color scheme +- [ ] Good use of whitespace +- [ ] Readable on mobile devices +- [ ] Images load properly +- [ ] Badges display correctly + +### Technical Quality +- [ ] All stats cards work +- [ ] No broken images +- [ ] Fast loading times +- [ ] Accessibility considerations +- [ ] Works across browsers + +--- + +## 📚 Resources to Explore + +### Learning & Growth +- [ ] [GitHub Learning Lab](https://lab.github.com/) - Free courses +- [ ] [First Timers Only](https://www.firsttimersonly.com/) - Beginner-friendly open source +- [ ] [Good First Issues](https://goodfirstissues.com/) - Find projects to contribute to + +### Inspiration +- [ ] [Awesome GitHub Profile README](https://github.com/abhisheknaiidu/awesome-github-profile-readme) +- [ ] Browse top developers' profiles for ideas +- [ ] Check trending repositories in your tech stack + +### Tools +- [ ] [GitHub Profile README Generator](https://rahuldkjain.github.io/gh-profile-readme-generator/) +- [ ] [Shields.io](https://shields.io/) - Badge maker +- [ ] [Carbon](https://carbon.now.sh/) - Beautiful code screenshots +- [ ] [Ray.so](https://ray.so/) - Code snippet images + +--- + +## 🎯 Success Metrics + +Track these over time to measure improvement: + +### Quantitative +- [ ] Profile views increase +- [ ] Repository stars increase +- [ ] Follower count grows +- [ ] Consistent contribution streak +- [ ] Issues/PRs engaged with + +### Qualitative +- [ ] Profile appears professional +- [ ] Content accurately represents skills +- [ ] Easy for recruiters to contact you +- [ ] Projects demonstrate your expertise +- [ ] Documentation is clear and helpful + +--- + +## 💼 Job Search Optimization + +### When Actively Looking for Work +- [ ] Update profile status: "Open to work" or "Available for hire" +- [ ] Add specific role types you're seeking +- [ ] Highlight most relevant projects at top +- [ ] Include keywords relevant to target roles +- [ ] Ensure contact information is prominent +- [ ] Link to resume/CV if appropriate + +### For Freelance Work +- [ ] Add "Available for freelance" badge +- [ ] Showcase client work (with permission) +- [ ] Include hourly rate or project pricing if comfortable +- [ ] Link to Upwork, Fiverr, or other freelance profiles +- [ ] Display testimonials if available + +--- + +## 🤝 Collaboration & Networking + +### Building Your Network +- [ ] Follow developers you admire +- [ ] Star repositories you find useful +- [ ] Engage in discussions on projects +- [ ] Share your projects on social media +- [ ] Join developer communities (Discord, Reddit, etc.) + +### Open Source Contribution +- [ ] Find projects aligned with your interests +- [ ] Start with documentation improvements +- [ ] Fix good first issues +- [ ] Propose features thoughtfully +- [ ] Be respectful and patient with maintainers + +--- + +## 📝 Notes & Ideas + +Use this space to track ideas for future improvements: + +``` +Ideas for new projects: +- +- + +Skills to learn next: +- +- + +Profile improvements to make: +- +- + +Repositories to contribute to: +- +- +``` + +--- + +## 🎉 Completion Status + +Track your overall progress: + +- [ ] Phase 1: Basic Profile Setup (Day 1) +- [ ] Phase 2: Content Customization (Week 1) +- [ ] Phase 3: Repository Enhancement (Week 2) +- [ ] Phase 4: Continuous Optimization (Ongoing) + +--- + +

+ Remember: Your GitHub profile is a living document. Update it regularly! +

+ +

+ Good luck with your enhanced GitHub profile! 🚀 +

+ +--- + +## 📞 Need Help? + +If you encounter any issues: +1. Check the `PROFILE_SETUP_GUIDE.md` for detailed instructions +2. Refer to `BADGES_QUICK_REFERENCE.md` for customization options +3. Open an issue in this repository +4. Contact: 612amar@gmail.com + +--- + +**Last Updated**: March 2026 +**Version**: 1.0 diff --git a/BADGES_QUICK_REFERENCE.md b/BADGES_QUICK_REFERENCE.md new file mode 100644 index 0000000..0af4f98 --- /dev/null +++ b/BADGES_QUICK_REFERENCE.md @@ -0,0 +1,415 @@ +# 🎨 Quick Reference: GitHub Profile Badges & Stats + +A handy cheat sheet for customizing your GitHub profile README with badges, stats, and widgets. + +--- + +## 📌 Table of Contents + +- [Technology Badges](#-technology-badges) +- [GitHub Stats Cards](#-github-stats-cards) +- [Social Badges](#-social-badges) +- [Custom Badges](#-custom-badges) +- [Dynamic Content](#-dynamic-content) +- [Color Schemes](#-color-schemes) + +--- + +## 💻 Technology Badges + +### Format +```markdown +![Badge Name](https://img.shields.io/badge/Label-Message-COLOR?style=STYLE&logo=LOGO&logoColor=LOGOCOLOR) +``` + +### Common Technologies + +#### Frontend +```markdown +![React](https://img.shields.io/badge/React-61DAFB?style=for-the-badge&logo=react&logoColor=black) +![Vue.js](https://img.shields.io/badge/Vue.js-4FC08D?style=for-the-badge&logo=vue.js&logoColor=white) +![Angular](https://img.shields.io/badge/Angular-DD0031?style=for-the-badge&logo=angular&logoColor=white) +![Svelte](https://img.shields.io/badge/Svelte-FF3E00?style=for-the-badge&logo=svelte&logoColor=white) +![Next.js](https://img.shields.io/badge/Next.js-000000?style=for-the-badge&logo=next.js&logoColor=white) +![Nuxt.js](https://img.shields.io/badge/Nuxt.js-00DC82?style=for-the-badge&logo=nuxt.js&logoColor=white) +``` + +#### CSS Frameworks +```markdown +![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-38B2AC?style=for-the-badge&logo=tailwind-css&logoColor=white) +![Bootstrap](https://img.shields.io/badge/Bootstrap-7952B3?style=for-the-badge&logo=bootstrap&logoColor=white) +![Material UI](https://img.shields.io/badge/Material_UI-007FFF?style=for-the-badge&logo=mui&logoColor=white) +![Sass](https://img.shields.io/badge/Sass-CC6699?style=for-the-badge&logo=sass&logoColor=white) +![Styled Components](https://img.shields.io/badge/styled--components-DB7093?style=for-the-badge&logo=styled-components&logoColor=white) +``` + +#### Backend +```markdown +![Node.js](https://img.shields.io/badge/Node.js-339933?style=for-the-badge&logo=node.js&logoColor=white) +![Express](https://img.shields.io/badge/Express-000000?style=for-the-badge&logo=express&logoColor=white) +![Django](https://img.shields.io/badge/Django-092E20?style=for-the-badge&logo=django&logoColor=white) +![Flask](https://img.shields.io/badge/Flask-000000?style=for-the-badge&logo=flask&logoColor=white) +![FastAPI](https://img.shields.io/badge/FastAPI-009688?style=for-the-badge&logo=fastapi&logoColor=white) +![Spring Boot](https://img.shields.io/badge/Spring_Boot-6DB33F?style=for-the-badge&logo=spring-boot&logoColor=white) +``` + +#### Databases +```markdown +![MongoDB](https://img.shields.io/badge/MongoDB-47A248?style=for-the-badge&logo=mongodb&logoColor=white) +![PostgreSQL](https://img.shields.io/badge/PostgreSQL-4169E1?style=for-the-badge&logo=postgresql&logoColor=white) +![MySQL](https://img.shields.io/badge/MySQL-4479A1?style=for-the-badge&logo=mysql&logoColor=white) +![Redis](https://img.shields.io/badge/Redis-DC382D?style=for-the-badge&logo=redis&logoColor=white) +![SQLite](https://img.shields.io/badge/SQLite-003B57?style=for-the-badge&logo=sqlite&logoColor=white) +![Firebase](https://img.shields.io/badge/Firebase-FFCA28?style=for-the-badge&logo=firebase&logoColor=black) +``` + +#### Languages +```markdown +![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black) +![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white) +![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white) +![Java](https://img.shields.io/badge/Java-007396?style=for-the-badge&logo=java&logoColor=white) +![C++](https://img.shields.io/badge/C++-00599C?style=for-the-badge&logo=c%2B%2B&logoColor=white) +![Go](https://img.shields.io/badge/Go-00ADD8?style=for-the-badge&logo=go&logoColor=white) +![Rust](https://img.shields.io/badge/Rust-000000?style=for-the-badge&logo=rust&logoColor=white) +![PHP](https://img.shields.io/badge/PHP-777BB4?style=for-the-badge&logo=php&logoColor=white) +``` + +#### Tools & Platforms +```markdown +![Git](https://img.shields.io/badge/Git-F05032?style=for-the-badge&logo=git&logoColor=white) +![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white) +![Kubernetes](https://img.shields.io/badge/Kubernetes-326CE5?style=for-the-badge&logo=kubernetes&logoColor=white) +![AWS](https://img.shields.io/badge/AWS-232F3E?style=for-the-badge&logo=amazon-aws&logoColor=white) +![Vercel](https://img.shields.io/badge/Vercel-000000?style=for-the-badge&logo=vercel&logoColor=white) +![Netlify](https://img.shields.io/badge/Netlify-00C7B7?style=for-the-badge&logo=netlify&logoColor=white) +![Heroku](https://img.shields.io/badge/Heroku-430098?style=for-the-badge&logo=heroku&logoColor=white) +``` + +--- + +## 📊 GitHub Stats Cards + +### 1. Basic Stats Card +```markdown +![GitHub Stats](https://github-readme-stats.vercel.app/api?username=YOUR_USERNAME&show_icons=true&theme=THEME) +``` + +**Parameters**: +- `username` - Your GitHub username (required) +- `show_icons` - Show icons (true/false) +- `theme` - Color theme (see themes below) +- `hide_border` - Hide border (true/false) +- `include_all_commits` - Count all commits (true/false) +- `count_private` - Include private contributions (true/false) +- `hide` - Hide specific stats (comma-separated: stars,commits,prs,issues,contribs) +- `show` - Show specific stats (reviews,discussions_started,discussions_answered,prs_merged,prs_merged_percentage) + +**Example**: +```markdown +![GitHub Stats](https://github-readme-stats.vercel.app/api?username=amar-295&show_icons=true&theme=react&hide_border=true&include_all_commits=true&count_private=true) +``` + +### 2. GitHub Streak Stats +```markdown +![GitHub Streak](https://github-readme-streak-stats.herokuapp.com/?user=YOUR_USERNAME&theme=THEME) +``` + +**Parameters**: +- `user` - Your GitHub username (required) +- `theme` - Color theme +- `hide_border` - Remove border +- `background` - Background color (hex without #) +- `stroke` - Border color +- `ring` - Ring color around current streak +- `fire` - Fire emoji color +- `currStreakNum` - Current streak number color +- `currStreakLabel` - Current streak label color + +**Example**: +```markdown +![GitHub Streak](https://github-readme-streak-stats.herokuapp.com/?user=amar-295&theme=react&hide_border=true&background=0D1117) +``` + +### 3. Top Languages Card +```markdown +![Top Languages](https://github-readme-stats.vercel.app/api/top-langs/?username=YOUR_USERNAME&layout=compact&theme=THEME) +``` + +**Parameters**: +- `username` - Your GitHub username (required) +- `layout` - Layout style (compact/default) +- `theme` - Color theme +- `hide` - Hide languages (comma-separated: html,css) +- `langs_count` - Number of languages to show (default: 5, max: 10) +- `exclude_repo` - Exclude specific repos (comma-separated) + +**Example**: +```markdown +![Top Languages](https://github-readme-stats.vercel.app/api/top-langs/?username=amar-295&layout=compact&theme=react&hide_border=true&langs_count=8) +``` + +### 4. GitHub Trophies +```markdown +![GitHub Trophies](https://github-profile-trophy.vercel.app/?username=YOUR_USERNAME&theme=THEME&no-frame=true&row=1) +``` + +**Parameters**: +- `username` - Your GitHub username (required) +- `theme` - Color theme +- `no-frame` - Remove frame +- `no-bg` - Transparent background +- `row` - Number of rows (1-3) +- `column` - Number of columns (1-7) +- `margin-w` - Horizontal margin +- `margin-h` - Vertical margin +- `rank` - Filter by rank (SECRET,SSS,SS,S,AAA,AA,A,B,C) + +**Example**: +```markdown +![GitHub Trophies](https://github-profile-trophy.vercel.app/?username=amar-295&theme=nord&no-frame=true&no-bg=true&row=2&column=6) +``` + +### 5. Contribution Activity Graph +```markdown +![Activity Graph](https://github-readme-activity-graph.vercel.app/graph?username=YOUR_USERNAME&theme=THEME) +``` + +**Parameters**: +- `username` - Your GitHub username (required) +- `theme` - Color theme +- `bg_color` - Background color (hex without #) +- `color` - Graph line color +- `line` - Gradient line color +- `point` - Point color +- `area` - Show area under graph (true/false) +- `hide_border` - Hide border + +**Example**: +```markdown +![Activity Graph](https://github-readme-activity-graph.vercel.app/graph?username=amar-295&theme=react-dark&bg_color=0D1117&color=61DAFB&line=61DAFB&point=61DAFB&area=true&hide_border=true) +``` + +--- + +## 📱 Social Badges + +### Format +```markdown +[![Badge Name](BADGE_URL)](LINK_URL) +``` + +### Common Social Platforms +```markdown + +[![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://linkedin.com/in/YOUR_PROFILE) + + +[![Twitter](https://img.shields.io/badge/Twitter-1DA1F2?style=for-the-badge&logo=twitter&logoColor=white)](https://twitter.com/YOUR_HANDLE) + + +[![Email](https://img.shields.io/badge/Email-D14836?style=for-the-badge&logo=gmail&logoColor=white)](mailto:your@email.com) + + +[![Portfolio](https://img.shields.io/badge/Portfolio-000000?style=for-the-badge&logo=About.me&logoColor=white)](https://your-portfolio.com) + + +[![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/YOUR_INVITE) + + +[![YouTube](https://img.shields.io/badge/YouTube-FF0000?style=for-the-badge&logo=youtube&logoColor=white)](https://youtube.com/@YOUR_CHANNEL) + + +[![Dev.to](https://img.shields.io/badge/dev.to-0A0A0A?style=for-the-badge&logo=dev.to&logoColor=white)](https://dev.to/YOUR_USERNAME) + + +[![Medium](https://img.shields.io/badge/Medium-12100E?style=for-the-badge&logo=medium&logoColor=white)](https://medium.com/@YOUR_USERNAME) + + +[![Stack Overflow](https://img.shields.io/badge/Stack_Overflow-FE7A16?style=for-the-badge&logo=stack-overflow&logoColor=white)](https://stackoverflow.com/users/YOUR_ID) + + +[![CodePen](https://img.shields.io/badge/CodePen-000000?style=for-the-badge&logo=codepen&logoColor=white)](https://codepen.io/YOUR_USERNAME) +``` + +--- + +## 🎨 Custom Badges + +### Create Your Own Badge +```markdown +![Badge Name](https://img.shields.io/badge/YOUR_TEXT-YOUR_MESSAGE-COLOR?style=STYLE&logo=LOGO&logoColor=LOGOCOLOR) +``` + +### Badge Styles +- `flat` - Flat style (default) +- `flat-square` - Flat with square edges +- `plastic` - Plastic 3D style +- `for-the-badge` - Large badge with uppercase text +- `social` - Social media style + +### Examples +```markdown + +![Status](https://img.shields.io/badge/Status-Active-success?style=for-the-badge) + + +![Version](https://img.shields.io/badge/Version-2.0.0-blue?style=for-the-badge) + + +![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge) + + +![Open to Work](https://img.shields.io/badge/Open_To_Work-YES-brightgreen?style=for-the-badge) + + +![Location](https://img.shields.io/badge/Location-India-orange?style=for-the-badge) +``` + +--- + +## 🎯 Dynamic Content + +### 1. Typing Animation +```markdown +![Typing SVG](https://readme-typing-svg.herokuapp.com?font=Fira+Code&size=24&pause=1000&color=F75C7E&width=435&lines=First+Line+of+Text;Second+Line+of+Text;Third+Line+of+Text) +``` + +**Parameters**: +- `font` - Font family (URL encoded) +- `size` - Font size +- `duration` - Animation duration per character (ms) +- `pause` - Pause between lines (ms) +- `color` - Text color (hex without #) +- `width` - Width of SVG +- `height` - Height of SVG +- `lines` - Lines of text (semicolon-separated) +- `center` - Center text (true/false) +- `vCenter` - Vertical center (true/false) +- `multiline` - Show multiple lines at once (true/false) +- `repeat` - Repeat animation (true/false) + +### 2. Profile Views Counter +```markdown +![Profile Views](https://komarev.com/ghpvc/?username=YOUR_USERNAME&label=Profile%20Views&color=blueviolet&style=for-the-badge) +``` + +**Colors**: `brightgreen`, `green`, `yellowgreen`, `yellow`, `orange`, `red`, `lightgrey`, `blue`, `blueviolet` + +### 3. Wakatime Stats +```markdown +![Wakatime Stats](https://github-readme-stats.vercel.app/api/wakatime?username=YOUR_WAKATIME_USERNAME&theme=THEME) +``` + +### 4. Latest Blog Posts (with GitHub Actions) +```markdown +## 📝 Latest Blog Posts + + +``` + +Requires [blog-post-workflow](https://github.com/gautamkrishnar/blog-post-workflow) GitHub Action. + +### 5. Spotify Now Playing +```markdown +[![Spotify](https://spotify-github-profile.vercel.app/api/view?uid=YOUR_SPOTIFY_ID&cover_image=true&theme=default)](https://spotify-github-profile.vercel.app/api/view?uid=YOUR_SPOTIFY_ID&redirect=true) +``` + +--- + +## 🌈 Color Schemes + +### Stats Card Themes +- `default`, `transparent`, `shadow_red`, `shadow_green`, `shadow_blue` +- `dark`, `radical`, `merko`, `gruvbox`, `gruvbox_light`, `tokyonight` +- `onedark`, `cobalt`, `synthwave`, `highcontrast`, `dracula` +- `prussian`, `monokai`, `vue`, `vue-dark`, `shades-of-purple` +- `nightowl`, `buefy`, `blue-green`, `algolia`, `great-gatsby` +- `darcula`, `bear`, `solarized-dark`, `solarized-light` +- `chartreuse-dark`, `nord`, `gotham`, `material-palenight` +- `graywhite`, `vision-friendly-dark`, `ayu-mirage` +- `midnight-purple`, `calm`, `flag-india`, `omni`, `react`, `jolly` +- `maroongold`, `yeblu`, `blueberry`, `slateorange`, `kacho_ga` + +### Hex Color Codes (Common) +- React Blue: `61DAFB` +- GitHub Dark: `0D1117` +- Success Green: `28A745` +- Warning Yellow: `FFC107` +- Danger Red: `DC3545` +- Info Blue: `17A2B8` +- Primary Purple: `6F42C1` + +### Popular Color Combinations + +#### React Theme (Current) +``` +Background: 0D1117 +Title: 61DAFB +Icon: 61DAFB +Text: FFFFFF +``` + +#### Dracula Theme +``` +Background: 282A36 +Title: FF79C6 +Icon: BD93F9 +Text: F8F8F2 +``` + +#### Nord Theme +``` +Background: 2E3440 +Title: 88C0D0 +Icon: 81A1C1 +Text: ECEFF4 +``` + +--- + +## 🔍 Finding Logos + +**Simple Icons**: https://simpleicons.org/ +- Search for brand names to find logo slugs +- Use the slug in `logo=` parameter +- Check color codes for brand colors + +**Example**: For React logo +1. Go to simpleicons.org +2. Search "React" +3. Logo slug: `react` +4. Brand color: `#61DAFB` + +--- + +## 📚 Useful Resources + +- **Shields.io**: https://shields.io/ - Badge generator +- **GitHub Readme Stats**: https://github.com/anuraghazra/github-readme-stats +- **GitHub Readme Streak Stats**: https://github.com/DenverCoder1/github-readme-streak-stats +- **GitHub Profile Trophy**: https://github.com/ryo-ma/github-profile-trophy +- **Readme Typing SVG**: https://github.com/DenverCoder1/readme-typing-svg +- **Simple Icons**: https://simpleicons.org/ - Brand icons and colors +- **Awesome GitHub Profile README**: https://github.com/abhisheknaiidu/awesome-github-profile-readme + +--- + +## 💡 Pro Tips + +1. **Consistency**: Use the same theme across all stat cards +2. **Color Harmony**: Match badge colors with your stats theme +3. **Mobile Friendly**: Test how your profile looks on mobile +4. **Performance**: Don't overload with too many dynamic widgets +5. **Links**: Make badges clickable by wrapping in `[![]()]()` format +6. **Alignment**: Use `

` for centered content +7. **Spacing**: Add `---` for horizontal rules between sections +8. **Updates**: Keep your profile updated with latest projects +9. **Accessibility**: Use descriptive alt text for all images +10. **Testing**: Preview changes before committing + +--- + +

+ Made with ❤️ for developers who love beautiful profiles! +

diff --git a/ENHANCEMENT_SUMMARY.md b/ENHANCEMENT_SUMMARY.md new file mode 100644 index 0000000..e6b4d7e --- /dev/null +++ b/ENHANCEMENT_SUMMARY.md @@ -0,0 +1,379 @@ +# 🎉 GitHub Profile Enhancement - Complete Package + +## 📦 What Was Created + +Your GitHub profile enhancement package is complete! Here's everything included: + +--- + +## 📄 Files Created + +### 1. **GITHUB_PROFILE_README.md** (8.1 KB) +**Purpose**: Your complete GitHub profile README - ready to copy and paste! + +**Features**: +- 🎯 Animated typing header with rotating messages +- 📊 Live GitHub stats (contributions, repos, languages) +- 🔥 GitHub streak counter +- 🏆 Achievement trophies +- 📈 Contribution activity graph +- 💻 Complete tech stack with badges +- 🚀 Featured projects showcase +- 📫 Contact information and social links +- 👀 Profile views counter + +**What to do**: Copy this entire file to your `amar-295/amar-295` repository README.md + +--- + +### 2. **PROFILE_SETUP_GUIDE.md** (11 KB) +**Purpose**: Step-by-step instructions for setting up and customizing your profile + +**Contents**: +- ✅ How to create your profile repository +- ✅ How to add the README content +- ✅ Customization options for every component +- ✅ Troubleshooting common issues +- ✅ Additional enhancement ideas +- ✅ Best practices and resources + +**What to do**: Read this guide while setting up your profile + +--- + +### 3. **BADGES_QUICK_REFERENCE.md** (16 KB) +**Purpose**: Comprehensive cheat sheet for customizing badges and stats + +**Contents**: +- 💻 Technology badges (Frontend, Backend, Databases, Languages) +- 📊 GitHub stats cards (configuration options) +- 📱 Social media badges (LinkedIn, Twitter, Email, etc.) +- 🎨 Custom badge creation +- 🎯 Dynamic content (animations, counters, etc.) +- 🌈 Color schemes and themes +- 🔍 How to find logos and icons + +**What to do**: Keep this as reference when customizing your profile + +--- + +### 4. **ACTION_CHECKLIST.md** (New!) +**Purpose**: Organized checklist to track your profile enhancement progress + +**Contents**: +- ✅ Immediate actions (5 minutes) +- ✅ Quick customizations (10 minutes) +- ✅ Repository enhancements (30 minutes) +- ✅ Ongoing optimization tasks +- ✅ Advanced enhancements (optional) +- ✅ Quality checklist +- ✅ Success metrics to track + +**What to do**: Use this to systematically enhance your profile + +--- + +### 5. **README.md** (Updated) +**Purpose**: Enhanced repository README with links to profile enhancement resources + +**Changes**: +- Added notice about GitHub profile enhancement files +- Added new section explaining what's included +- Updated table of contents +- Added quick start guide + +--- + +## 🚀 Quick Start Guide + +### Immediate Next Steps (5 minutes): + +1. **Create Profile Repository** + ``` + 1. Go to github.com + 2. Click + → New repository + 3. Name: amar-295 + 4. Set to Public + 5. Check "Add a README file" + 6. Create repository + ``` + +2. **Add Enhanced README** + ``` + 1. Open your new amar-295 repository + 2. Click README.md → Edit (✏️ icon) + 3. Open GITHUB_PROFILE_README.md from this repo + 4. Copy everything + 5. Paste into your profile README + 6. Commit changes + ``` + +3. **View Your Profile** + ``` + Visit: https://github.com/amar-295 + Your enhanced profile should now be live! + ``` + +--- + +## 🎨 What Your Profile Includes + +### Header Section +``` +🎯 Animated greeting: "Hi 👋 I'm Amarnath" +💼 Rotating titles: "Frontend Developer | Open to Opportunities | Building Accessible Web Apps" +🔗 Portfolio, Email, and LinkedIn badges +``` + +### About Me Section +```javascript +const amarnath = { + location: "Faridabad, India 🇮🇳", + education: "BCA Student (2024-2027)", + currentFocus: ["React.js", "Tailwind CSS", "Accessibility"], + learning: ["Node.js", "Express", "MongoDB"], + workMode: "Remote Friendly 🌍", + specialization: "Frontend Development", + openTo: ["Frontend Developer Roles", "Freelance Projects", "Open Source Collaboration"] +}; +``` + +### Featured Projects +- ✅ Personal Portfolio Website (Live) +- ✅ Express Authentication Backend (Production Ready) +- ✅ React Password Generator (Live) + +### Tech Stack Badges +- Frontend: React, JavaScript, Tailwind CSS, HTML5, CSS3 +- Tools: Vite, Git, GitHub, ESLint, Prettier +- Learning: Node.js, Express, MongoDB + +### Live Statistics +- GitHub contribution stats +- Coding streak counter +- Top programming languages +- Achievement trophies +- Activity contribution graph + +--- + +## 📊 Visual Preview + +Your profile will display: + +``` +┌─────────────────────────────────────────────────────────┐ +│ Hi 👋 I'm Amarnath [Animated] │ +│ [Portfolio] [Email] [LinkedIn] │ +├─────────────────────────────────────────────────────────┤ +│ 👨‍💻 About Me │ +│ Frontend Developer | BCA Student | Remote Friendly │ +├─────────────────────────────────────────────────────────┤ +│ 🚀 Featured Projects │ +│ → Portfolio (Live) ⚡ React 19, Tailwind v4 │ +│ → Express Auth API 🔒 JWT, bcrypt, MongoDB │ +│ → Password Generator 🎲 React, Vite │ +├─────────────────────────────────────────────────────────┤ +│ 🛠️ Tech Stack │ +│ [React] [JavaScript] [Tailwind] [Vite] [Git]... │ +├─────────────────────────────────────────────────────────┤ +│ 📊 GitHub Stats │ +│ [Stats Card] [Streak] [Top Languages] [Trophies] │ +├─────────────────────────────────────────────────────────┤ +│ 📫 Let's Connect │ +│ [Portfolio] [Email] [LinkedIn] [GitHub] │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## 🎯 Customization Options + +### Change Colors +- Default: React Blue (#61DAFB) +- See `BADGES_QUICK_REFERENCE.md` for 40+ themes + +### Update Content +- Modify the JavaScript object in "About Me" +- Add/remove projects in "Featured Projects" +- Update tech stack badges as you learn new skills + +### Adjust Stats +- Hide certain stats (commits, issues, etc.) +- Change graph themes +- Show private contributions +- Filter specific languages + +--- + +## 📈 Expected Impact + +After implementing this profile enhancement: + +### Visibility +- ✅ Professional first impression +- ✅ Clear demonstration of skills +- ✅ Easy navigation to projects +- ✅ Prominent contact information + +### Engagement +- ✅ Higher profile views +- ✅ More repository stars +- ✅ Better recruiter reach +- ✅ Increased networking opportunities + +### Career Benefits +- ✅ Stand out in job applications +- ✅ Showcase technical expertise +- ✅ Demonstrate attention to detail +- ✅ Build personal brand + +--- + +## 🔧 Maintenance + +### Weekly +- Check that all links work +- Update "Currently Learning" if changed + +### Monthly +- Add new projects as completed +- Update featured projects list +- Review and refresh project descriptions + +### Quarterly +- Update tech stack with new skills +- Add achievements or certifications +- Refresh profile bio if needed + +--- + +## 📚 Support Resources + +### Documentation +- `PROFILE_SETUP_GUIDE.md` - Detailed setup instructions +- `BADGES_QUICK_REFERENCE.md` - Customization reference +- `ACTION_CHECKLIST.md` - Progress tracking + +### External Resources +- [GitHub Readme Stats](https://github.com/anuraghazra/github-readme-stats) +- [Shields.io](https://shields.io/) +- [Simple Icons](https://simpleicons.org/) + +### Need Help? +- 📧 Email: 612amar@gmail.com +- 🐛 Open an issue in this repository +- 💬 Check troubleshooting in PROFILE_SETUP_GUIDE.md + +--- + +## ✅ Success Checklist + +Quick verification that everything is set up correctly: + +- [ ] Profile repository created (amar-295/amar-295) +- [ ] README content copied from GITHUB_PROFILE_README.md +- [ ] Profile displays at github.com/amar-295 +- [ ] All stats cards loading correctly +- [ ] Animated header working +- [ ] Links to projects functional +- [ ] Contact information correct +- [ ] Mobile responsive (check on phone) +- [ ] No broken images or badges + +--- + +## 🎉 What Makes This Profile Stand Out + +### Professional Design +- Clean, modern layout +- Consistent color scheme (React blue theme) +- Professional typography and spacing +- Mobile-responsive design + +### Technical Showcase +- Live GitHub statistics +- Real-time contribution tracking +- Technology proficiency display +- Featured project highlights + +### Accessibility +- Clear navigation +- Readable on all devices +- Descriptive alt text +- Professional tone + +### Completeness +- Contact information prominent +- Work availability status clear +- Skills comprehensively listed +- Projects well-documented + +--- + +## 🚀 Next Steps + +1. **Immediate** (Today) + - Set up profile repository + - Add enhanced README + - Verify everything displays correctly + +2. **This Week** + - Customize content to match your preferences + - Update project links and descriptions + - Pin best repositories to profile + +3. **Ongoing** + - Keep profile updated with new projects + - Maintain consistent GitHub activity + - Engage with developer community + +--- + +## 💡 Pro Tips + +1. **First Impression**: Your profile README is often the first thing people see +2. **Keep Updated**: Stale profiles suggest inactive developers +3. **Be Authentic**: Only list skills you're comfortable discussing +4. **Show Projects**: Demos are more impressive than descriptions +5. **Make Contact Easy**: Don't hide your email or social links +6. **Quality > Quantity**: Better to have 3 polished projects than 10 unfinished ones +7. **Tell a Story**: Your profile should convey your journey and growth +8. **Stand Out**: But remain professional and avoid gimmicks + +--- + +## 📞 Final Notes + +Your GitHub profile enhancement package is complete and ready to use! This comprehensive solution includes: + +✅ Professional profile README with dynamic content +✅ Complete setup and customization guide +✅ Badge and stats reference guide +✅ Action checklist for systematic implementation +✅ Enhanced repository documentation + +**Total Time Investment**: +- Setup: 5-10 minutes +- Customization: 10-30 minutes +- Full implementation: 1-2 hours + +**Expected Results**: +- Professional, eye-catching profile +- Clear demonstration of skills +- Better visibility to recruiters +- Increased networking opportunities + +--- + +

+ 🎯 Your GitHub profile is now ready to impress! +

+ +

+ Built with ❤️ for your success +

+ +

+ Created: March 2026 | Version: 1.0 +

diff --git a/GITHUB_PROFILE_README.md b/GITHUB_PROFILE_README.md new file mode 100644 index 0000000..dd791d8 --- /dev/null +++ b/GITHUB_PROFILE_README.md @@ -0,0 +1,192 @@ +

+ Typing SVG +

+ +

+ + Portfolio + + + Email + + + LinkedIn + +

+ +--- + +## 👨‍💻 About Me + +I'm a **Frontend Developer** specializing in building modern, accessible, and high-performance web applications. Currently pursuing my **BCA at DAV Centenary College** (2024-2027), I'm passionate about creating beautiful user experiences with clean, maintainable code. + +```javascript +const amarnath = { + location: "Faridabad, India 🇮🇳", + education: "BCA Student (2024-2027)", + currentFocus: ["React.js", "Tailwind CSS", "Accessibility"], + learning: ["Node.js", "Express", "MongoDB"], + workMode: "Remote Friendly 🌍", + specialization: "Frontend Development", + openTo: ["Frontend Developer Roles", "Freelance Projects", "Open Source Collaboration"] +}; +``` + +### 🎯 What I Bring to the Table + +- **🎨 Modern UI Development**: Expert in React 19, Tailwind CSS v4, and responsive design principles +- **♿ Accessibility First**: Building WCAG-compliant applications with semantic HTML and ARIA best practices +- **⚡ Performance Obsessed**: Optimizing for Core Web Vitals, lazy loading, and efficient bundle sizes +- **🌓 Design Systems**: Creating consistent, theme-aware components with dark/light mode support +- **📱 Mobile-First Approach**: Ensuring perfect experiences across all devices + +--- + +## 🚀 Featured Projects + +### 🌟 [Personal Portfolio Website](https://react-portfolio-lilac-nine.vercel.app/) • **Live** +> A modern, high-performance portfolio showcasing technical proficiency and creative design + +**Tech Stack**: React 19 • Tailwind CSS v4 • Vite 7 • Formspree +**Highlights**: +- ⚡ Blazing fast with Vite and optimized production builds +- 🎨 Dynamic theme system with glassmorphism effects +- ♿ WCAG-compliant with semantic HTML and keyboard navigation +- 📱 Fully responsive mobile-first design + +**Links**: [Live Demo](https://react-portfolio-lilac-nine.vercel.app/) • [Source Code](https://github.com/amar-295/react-portfolio) + +--- + +### 🔒 Express Authentication Backend • **Production Ready** +> RESTful API with JWT-based authentication, user management, and secure password handling + +**Tech Stack**: Node.js • Express • MongoDB • JWT • bcrypt +**Highlights**: +- 🔐 Secure JWT authentication with refresh tokens +- 🛡️ Password hashing with bcrypt +- 📝 User registration, login, and profile management +- ✅ Input validation and error handling + +--- + +### 🎲 [React Password Generator](https://github.com/amar-295/react-password-generator) • **Live** +> Interactive tool for generating secure, customizable passwords + +**Tech Stack**: React • Vite • Tailwind CSS +**Highlights**: +- 🔢 Customizable length and character sets +- 📋 One-click copy to clipboard +- 🎨 Clean, intuitive interface +- ⚡ Real-time password generation + +**Links**: [Live Demo](#) • [Source Code](https://github.com/amar-295/react-password-generator) + +--- + +## 🛠️ Tech Stack + +### Core Technologies +

+ React + JavaScript + Tailwind CSS + HTML5 + CSS3 +

+ +### Tools & Technologies +

+ Vite + Git + GitHub + ESLint + Prettier +

+ +### Currently Learning +

+ Node.js + Express + MongoDB +

+ +--- + +## 📊 GitHub Stats + +

+ GitHub Stats +

+ +

+ GitHub Streak +

+ +

+ Top Languages +

+ +--- + +## 🏆 GitHub Trophies + +

+ GitHub Trophies +

+ +--- + +## 📈 Contribution Activity + +

+ Contribution Graph +

+ +--- + +## 💼 What I'm Looking For + +I'm actively seeking opportunities where I can contribute my frontend expertise and continue growing as a developer: + +✅ **Frontend Developer Roles** - Full-time or contract positions +✅ **Freelance Projects** - Web development and UI/UX implementation +✅ **Open Source Collaboration** - Contributing to meaningful projects +✅ **Remote Work** - Open to working with global teams + +--- + +## 📫 Let's Connect + +I'm always excited to connect with fellow developers, potential collaborators, and hiring managers! + +

+ + Portfolio + + + Email + + + LinkedIn + + + GitHub + +

+ +--- + +

+ Profile Views +

+ +

+ ⚡ "Building the web, one component at a time" ⚡ +

+ +--- + +

+ Built with ❤️ by Amarnath • Last updated: March 2026 +

diff --git a/PROFILE_SETUP_GUIDE.md b/PROFILE_SETUP_GUIDE.md new file mode 100644 index 0000000..0e96d19 --- /dev/null +++ b/PROFILE_SETUP_GUIDE.md @@ -0,0 +1,327 @@ +# 🚀 GitHub Profile README Setup Guide + +This guide will help you set up the enhanced GitHub profile README that was created for your account. + +## 📋 Table of Contents + +- [Creating Your Profile Repository](#creating-your-profile-repository) +- [Adding the README Content](#adding-the-readme-content) +- [Customizing Your Profile](#customizing-your-profile) +- [Troubleshooting](#troubleshooting) +- [Additional Enhancements](#additional-enhancements) + +--- + +## 🎯 Creating Your Profile Repository + +GitHub allows you to create a special repository that displays a README on your profile page. Here's how to set it up: + +### Step 1: Create a New Repository + +1. Go to [GitHub](https://github.com) and sign in to your account +2. Click the **+** icon in the top-right corner +3. Select **"New repository"** +4. Name the repository exactly as your username: **`amar-295`** + - ⚠️ **Important**: The repository name must match your GitHub username exactly +5. Make sure the repository is set to **Public** +6. Check the box "Add a README file" +7. Click **"Create repository"** + +### Step 2: Add the README Content + +1. In your new `amar-295` repository, click on the `README.md` file +2. Click the **pencil icon** (✏️) to edit the file +3. **Delete** the default content +4. **Copy** the entire content from `GITHUB_PROFILE_README.md` file (created in this PR) +5. **Paste** it into the README.md editor +6. Scroll to the bottom and click **"Commit changes"** +7. Add a commit message like "✨ Add enhanced profile README" +8. Click **"Commit changes"** to save + +### Step 3: Verify Your Profile + +1. Go to your GitHub profile: `https://github.com/amar-295` +2. You should now see your enhanced README displayed on your profile page! +3. All the badges, stats, and animations should be working automatically + +--- + +## 🎨 Customizing Your Profile + +The README uses several third-party services to generate dynamic content. Here's how to customize each section: + +### 1. Animated Typing Header + +The header uses [Readme Typing SVG](https://readme-typing-svg.herokuapp.com/): + +```markdown + +``` + +**To customize:** +- Change `lines=` parameter to add/edit the rotating text +- Separate multiple lines with `;` (semicolon) +- Adjust `color=` to change text color (use hex codes without #) +- Modify `size=` to change font size + +### 2. GitHub Stats Cards + +The stats use [GitHub Readme Stats](https://github.com/anuraghazra/github-readme-stats): + +```markdown +![GitHub Stats](https://github-readme-stats.vercel.app/api?username=amar-295&show_icons=true&theme=react&hide_border=true&bg_color=0D1117&title_color=61DAFB&icon_color=61DAFB) +``` + +**Available themes**: `dark`, `radical`, `merko`, `gruvbox`, `tokyonight`, `onedark`, `cobalt`, `synthwave`, `highcontrast`, `dracula`, `prussian`, `monokai`, `vue`, `vue-dark`, `shades-of-purple`, `nightowl`, `buefy`, `blue-green`, `algolia`, `great-gatsby`, `darcula`, `bear`, `solarized-dark`, `solarized-light`, `chartreuse-dark`, `nord`, `gotham`, `material-palenight`, `graywhite`, `vision-friendly-dark`, `ayu-mirage`, `midnight-purple`, `calm`, `flag-india`, `omni`, `react`, `jolly`, `maroongold`, `yeblu`, `blueberry`, `slateorange`, `kacho_ga` + +**To hide certain stats**: +```markdown +&hide=stars,commits,prs,issues,contribs +``` + +### 3. GitHub Streak Stats + +The streak counter uses [GitHub Readme Streak Stats](https://github.com/DenverCoder1/github-readme-streak-stats): + +```markdown +![GitHub Streak](https://github-readme-streak-stats.herokuapp.com/?user=amar-295&theme=react&hide_border=true&background=0D1117) +``` + +**Themes match the stats card** - use same theme name for consistency. + +### 4. Top Languages Card + +Shows your most-used programming languages: + +```markdown +![Top Languages](https://github-readme-stats.vercel.app/api/top-langs/?username=amar-295&layout=compact&theme=react) +``` + +**Layout options**: +- `layout=compact` - Compact view (current) +- `layout=default` - Default view +- Remove `layout` parameter for vertical list + +**To hide certain languages**: +```markdown +&hide=html,css +``` + +### 5. GitHub Trophies + +Achievement badges using [GitHub Profile Trophy](https://github.com/ryo-ma/github-profile-trophy): + +```markdown +![Trophies](https://github-profile-trophy.vercel.app/?username=amar-295&theme=nord&no-frame=true&no-bg=true&margin-w=4&row=1) +``` + +**Available themes**: `flat`, `onedark`, `gruvbox`, `dracula`, `monokai`, `chalk`, `nord`, `alduin`, `darkhub`, `juicyfresh`, `buddhism`, `oldie`, `radical`, `onestar`, `discord`, `algolia`, `gitdimmed`, `tokyonight`, `matrix`, `apprentice`, `dark_dimmed`, `dark_lover` + +**To show multiple rows**: +```markdown +&row=2 // Shows 2 rows of trophies +``` + +### 6. Contribution Activity Graph + +Visual graph of your contributions using [GitHub Readme Activity Graph](https://github.com/Ashutosh00710/github-readme-activity-graph): + +```markdown +![Activity Graph](https://github-readme-activity-graph.vercel.app/graph?username=amar-295&theme=react-dark) +``` + +**Available themes**: `minimal`, `github`, `github-dark`, `github-compact`, `xcode`, `rogue`, `merko`, `vue`, `tokyo-night`, `high-contrast`, `chartreuse-dark`, `react-dark`, `dracula` + +### 7. Profile Views Counter + +Tracks profile visits using [Profile Views Counter](https://github.com/antonkomarev/github-profile-views-counter): + +```markdown +![Profile Views](https://komarev.com/ghpvc/?username=amar-295&label=Profile%20Views&color=61DAFB&style=for-the-badge) +``` + +**Style options**: `flat`, `flat-square`, `plastic`, `for-the-badge` + +--- + +## 🔧 Updating Project Information + +### Adding New Projects + +To add more projects to your profile README, follow this structure: + +```markdown +### 🎯 [Project Name](project-link) • **Status** +> Brief description of what the project does + +**Tech Stack**: Tech1 • Tech2 • Tech3 +**Highlights**: +- 📌 Feature 1 +- 📌 Feature 2 +- 📌 Feature 3 + +**Links**: [Live Demo](demo-link) • [Source Code](repo-link) + +--- +``` + +### Updating "About Me" Code Block + +Edit the JavaScript object in the About Me section: + +```javascript +const amarnath = { + location: "Your Location", + education: "Your Education", + currentFocus: ["Tech1", "Tech2", "Tech3"], + learning: ["Learning1", "Learning2"], + workMode: "Your Work Mode", + specialization: "Your Specialization", + openTo: ["Opportunity1", "Opportunity2"] +}; +``` + +### Updating Tech Stack Badges + +Add new technology badges using shields.io format: + +```markdown +Tech Name +``` + +**Find logo names**: https://simpleicons.org/ +**Color codes**: Use hex color without the `#` symbol + +Example: +```markdown +TypeScript +``` + +--- + +## 🐛 Troubleshooting + +### Stats Not Showing? + +1. **Make sure your repository is public** - Stats only work for public repos +2. **Wait a few minutes** - Stats cards may take time to generate on first load +3. **Check username spelling** - Ensure `username=amar-295` is correct in all URLs +4. **Clear browser cache** - Force refresh with Ctrl+F5 (Windows) or Cmd+Shift+R (Mac) + +### Images Broken? + +1. Verify all URLs are using `https://` not `http://` +2. Check that external services (vercel.app, herokuapp.com) are accessible +3. Some corporate networks may block external image services + +### Profile Not Updating? + +1. Make sure you committed your changes to the `README.md` file +2. Wait up to 5 minutes for GitHub to update your profile +3. Try opening your profile in an incognito/private window +4. Clear GitHub's cache by adding `?v=1` to your profile URL: `https://github.com/amar-295?v=1` + +### Stats Show "Not Found"? + +- Double-check that your username `amar-295` is spelled correctly in all stat URLs +- Ensure your GitHub account is public and not suspended +- Some stats require you to have public repositories + +--- + +## ✨ Additional Enhancements + +### 1. Add a Pinned Repositories Section + +You can manually pin your best repositories on GitHub: +1. Go to your profile page +2. Click "Customize your pins" +3. Select up to 6 repositories to showcase + +### 2. Enable GitHub Achievements + +Earn badges by: +- Contributing to open source projects +- Participating in events like Hacktoberfest +- Completing GitHub Learning Lab courses +- Getting stars on your repositories + +### 3. Add a Blog Section + +If you write technical articles: +```markdown +## 📝 Latest Blog Posts + +- [Article Title 1](link) +- [Article Title 2](link) + +``` + +You can automate this with [GitHub Actions](https://github.com/gautamkrishnar/blog-post-workflow). + +### 4. Add Spotify Now Playing + +Show what you're listening to: +```markdown +[![Spotify](https://spotify-github-profile.vercel.app/api/view?uid=YOUR_SPOTIFY_ID&cover_image=true&theme=default)](https://spotify-github-profile.vercel.app/api/view?uid=YOUR_SPOTIFY_ID&redirect=true) +``` + +Get your Spotify ID from: https://www.spotify.com/account/profile/ + +### 5. Add Wakatime Stats + +Track your coding time with [Wakatime](https://wakatime.com/): +```markdown +![Wakatime Stats](https://github-readme-stats.vercel.app/api/wakatime?username=YOUR_USERNAME&theme=react) +``` + +### 6. Add Social Badges + +More social platform badges: +```markdown + + + + + + + + +``` + +--- + +## 🎯 Best Practices + +1. **Keep it updated** - Review and update your README every few months +2. **Add real links** - Make sure all project links work and demos are live +3. **Be authentic** - Only list technologies you're comfortable with +4. **Use consistent theming** - Stick to one color scheme (currently using React blue #61DAFB) +5. **Mobile friendly** - The README should look good on mobile devices too +6. **Accessible** - Use descriptive alt text for images +7. **Professional** - Keep language professional and error-free + +--- + +## 📚 Resources + +- [Awesome GitHub Profile README](https://github.com/abhisheknaiidu/awesome-github-profile-readme) - Collection of awesome READMEs +- [GitHub Profile README Generator](https://rahuldkjain.github.io/gh-profile-readme-generator/) - Interactive generator +- [Shields.io](https://shields.io/) - Badge generator +- [Simple Icons](https://simpleicons.org/) - SVG icons for badges +- [GitHub Readme Stats](https://github.com/anuraghazra/github-readme-stats) - Stats cards documentation + +--- + +## 🤝 Need Help? + +If you encounter any issues or want to customize further: +1. Check the documentation of each service linked above +2. Open an issue in this repository +3. Contact me via email: 612amar@gmail.com + +--- + +

+ Happy coding! 🚀 +

diff --git a/PR_MANAGEMENT_REPORT.md b/PR_MANAGEMENT_REPORT.md new file mode 100644 index 0000000..c47e9f4 --- /dev/null +++ b/PR_MANAGEMENT_REPORT.md @@ -0,0 +1,427 @@ +# Pull Request Management Report +**Generated**: March 17, 2026 +**Repository**: amar-295/react-portfolio + +--- + +## Executive Summary + +This repository currently has **9 open pull requests** (8 ready for review, 1 draft) and **27 closed/merged PRs**. All open PRs are experiencing Vercel deployment failures that need to be addressed before merging. + +### Quick Stats +- 🟢 **Merged PRs**: 27 +- 🟡 **Open PRs**: 9 (8 ready, 1 draft) +- 🔴 **Failing Checks**: All 9 open PRs have Vercel deployment failures +- ⏱️ **Oldest Open PR**: #88 (March 11, 2026 - 6 days old) +- 🆕 **Newest Open PR**: #95 (March 17, 2026 - today) + +--- + +## Open Pull Requests Status + +### 🚨 High Priority - Draft PRs + +#### PR #95: GitHub Profile Enhancement Package ⭐ **Current Branch** +- **Branch**: `claude/enhance-github-profile` +- **Status**: Draft (NOT ready for review) +- **Created**: March 17, 2026 (today) +- **Author**: Claude (AI agent) +- **Checks**: ❌ Vercel deployment failed +- **Files Changed**: 5 files (GITHUB_PROFILE_README.md, PROFILE_SETUP_GUIDE.md, BADGES_QUICK_REFERENCE.md, ACTION_CHECKLIST.md, ENHANCEMENT_SUMMARY.md, README.md) + +**Description**: Complete GitHub profile enhancement solution with ready-to-use content, setup documentation, and customization references. + +**Action Required**: +1. Fix Vercel deployment failure +2. Review and test all documentation +3. Mark as ready for review when complete +4. This is the PR you're currently working on! + +--- + +#### PR #90: Scope ProjectCard glow to image container (Sub-PR) +- **Branch**: `copilot/sub-pr-89` +- **Status**: Draft (NOT ready for review) +- **Created**: March 12, 2026 (5 days ago) +- **Author**: Copilot +- **Base Branch**: `aurora-project-card-glow-3706439520198146184` (PR #89) +- **Checks**: Not applicable (sub-PR of another open PR) + +**Description**: Fixes glow element positioning that was blocking mobile buttons. + +**Action Required**: +1. This is a sub-PR of #89, should be merged into #89 first +2. Consider squashing into parent PR #89 +3. Resolve parent PR #89 first before handling this + +--- + +### 🟡 Medium Priority - Accessibility Improvements (Similar Changes) + +These PRs all improve alt text accessibility - there's overlap and potential conflicts: + +#### PR #93: Improve About Image Alt Text +- **Branch**: `palette-about-alt-text-13972328420027707570` +- **Created**: March 13, 2026 (4 days ago) +- **Author**: @amar-295 (Jules) +- **Checks**: ❌ Vercel deployment failed, ✅ CodeRabbit review passed +- **Changes**: Alt text from `"PROFILE_PICTURE"` to `"Amarnath"` + +#### PR #91: Improve Screen Reader Experience for Profile Picture +- **Branch**: `palette-alt-text-improvement-1818449705510043824` +- **Created**: March 12, 2026 (5 days ago) +- **Author**: @amar-295 (Jules) +- **Checks**: ❌ Vercel deployment failed, ✅ CodeRabbit review passed +- **Changes**: Alt text from `PROFILE_PICTURE` to `Profile picture of Amarnath` +- **Additional**: Added guidance to `.Jules/palette.md` + +#### PR #88: Improve Alt Text on Profile Picture +- **Branch**: `palette-profile-pic-alt-text-7630681974151242554` +- **Created**: March 11, 2026 (6 days ago) +- **Author**: @amar-295 (Jules) +- **Checks**: ❌ Vercel deployment failed, ✅ CodeRabbit review passed +- **Changes**: Alt text from `"PROFILE_PICTURE"` to `"Profile picture"` +- **Additional**: Added JSX accessibility linting + +**⚠️ CONFLICT ALERT**: These three PRs (#88, #91, #93) are all changing the same alt text! You need to: +1. Choose ONE approach (recommendation: #91 - most descriptive) +2. Close the other two as duplicates +3. Ensure `.Jules/palette.md` guidance is included + +--- + +### 🟢 Low Priority - UI Enhancement PRs + +#### PR #94: Add Glassmorphic Glow to ContactInfoCard +- **Branch**: `aurora-contact-card-glow-13606082035047715654` +- **Created**: March 14, 2026 (3 days ago) +- **Author**: @amar-295 (Jules) +- **Checks**: ❌ Vercel deployment failed, ✅ CodeRabbit review passed +- **Changes**: Premium glassmorphic hover effect on contact cards + +**Action**: Fix Vercel deployment, then ready to merge + +--- + +#### PR #92: Enhance TechTag with Subtle Hover Interaction +- **Branch**: `aurora-techtag-hover-8273217808774143383` +- **Created**: March 13, 2026 (4 days ago) +- **Author**: @amar-295 (Jules) +- **Checks**: ❌ Vercel deployment failed, ✅ CodeRabbit review passed +- **Changes**: Added hover background transition to TechTag component + +**Action**: Fix Vercel deployment, then ready to merge + +--- + +#### PR #89: Add Glassmorphic Glow to ProjectCard +- **Branch**: `aurora-project-card-glow-3706439520198146184` +- **Created**: March 12, 2026 (5 days ago) +- **Author**: @amar-295 (Jules) +- **Checks**: ❌ Vercel deployment failed, ✅ CodeRabbit review passed +- **Changes**: Animated gradient blur behind ProjectCard images +- **Note**: Has sub-PR #90 that should be merged into this branch + +**Action**: +1. Merge sub-PR #90 into this branch +2. Fix Vercel deployment +3. Then ready to merge to main + +--- + +## Critical Issues + +### 🔥 Issue #1: Vercel Deployment Failures (All Open PRs) +**Problem**: Every single open PR is failing Vercel deployment checks. + +**Likely Causes**: +1. Build errors in the codebase +2. Missing environment variables (e.g., `VITE_FORMSPREE_PROJECT_ID`) +3. Vercel configuration issues +4. Node version mismatch + +**Resolution Steps**: +1. Check main branch deployment status +2. Review Vercel deployment logs for each failed PR +3. Fix underlying build issues +4. Ensure all required environment variables are set in Vercel +5. Re-trigger deployments for all PRs + +--- + +### 🔥 Issue #2: Duplicate Alt Text PRs (#88, #91, #93) +**Problem**: Three different PRs are trying to fix the same alt text issue with different approaches. + +**Impact**: Creates confusion and potential merge conflicts. + +**Resolution**: +1. **Choose PR #91** (most descriptive: "Profile picture of Amarnath") +2. Close PR #93 with comment: "Closing in favor of #91 which provides more descriptive alt text" +3. Close PR #88 with comment: "Closing in favor of #91 which includes both linting setup and better alt text" +4. Merge #91 after fixing Vercel deployment + +--- + +### 🔥 Issue #3: Sub-PR #90 Not Properly Integrated +**Problem**: PR #90 is a sub-PR targeting another open PR (#89) rather than main. + +**Resolution**: +1. Merge #90 into #89's branch +2. Close #90 +3. Continue with #89 review process + +--- + +## Recommended Action Plan + +### Phase 1: Fix Infrastructure (Priority 1) 🔴 + +1. **Investigate Vercel Failures** + ```bash + # Check if main branch builds successfully + npm install + npm run build + ``` + +2. **Review Vercel Logs** for each PR: + - PR #95: https://vercel.com/amar-295s-projects/react-portfolio/DmY6YtgZjVg6znTfUDSPGGHjDysh + - PR #94: https://vercel.com/amar-295s-projects/react-portfolio/CNMwur498ADEM2SwKak46mCqkEmK + - PR #93: https://vercel.com/amar-295s-projects/react-portfolio/GEyGJGpcN45zAeThdgZXW1n8mbvF + +3. **Fix Build Issues** identified in logs + +4. **Re-trigger All Deployments** + +--- + +### Phase 2: Resolve Duplicate PRs (Priority 2) 🟡 + +1. **Keep PR #91** - Most complete solution +2. **Close PR #93** with comment: + ``` + Closing this PR in favor of #91, which provides more descriptive alt text + ("Profile picture of Amarnath" vs just "Amarnath"). + ``` + +3. **Close PR #88** with comment: + ``` + Closing this PR in favor of #91, which includes both the JSX accessibility + linting setup and better alt text description. + ``` + +--- + +### Phase 3: Handle Sub-PR (Priority 2) 🟡 + +1. **Merge PR #90 into PR #89's branch**: + ```bash + git checkout aurora-project-card-glow-3706439520198146184 + git merge copilot/sub-pr-89 + git push + ``` + +2. **Close PR #90** with comment: + ``` + Changes merged into parent PR #89. This sub-PR is no longer needed. + ``` + +--- + +### Phase 4: Merge Ready PRs (Priority 3) 🟢 + +After fixing Vercel deployments, merge in this order: + +1. **PR #91** - Alt text improvement (foundational accessibility fix) +2. **PR #92** - TechTag hover (small, isolated change) +3. **PR #94** - ContactInfoCard glow (isolated component) +4. **PR #89** - ProjectCard glow (after merging sub-PR #90) + +--- + +### Phase 5: Complete Draft PRs (Priority 4) ⚪ + +1. **PR #95** - GitHub profile enhancement (current work) + - Review all files + - Test documentation + - Fix Vercel deployment + - Mark as ready for review + - Merge after approval + +--- + +## PR Merge Strategy + +### Recommended Merge Order (After Fixing Vercel) + +``` +1. PR #91 (Alt text - foundation) + ↓ +2. PR #92 (TechTag hover - simple) + ↓ +3. PR #94 (ContactInfo glow - isolated) + ↓ +4. PR #89 (ProjectCard glow - with sub-PR #90 merged) + ↓ +5. PR #95 (GitHub profile - after draft complete) +``` + +### Why This Order? + +1. **Accessibility First**: Alt text fix (#91) improves core accessibility +2. **Simple → Complex**: Start with small, isolated changes +3. **Visual Enhancements**: Group related UI improvements together +4. **Documentation Last**: Complete feature work before documentation + +--- + +## Maintenance Recommendations + +### 1. Establish PR Guidelines + +Create `.github/PULL_REQUEST_TEMPLATE.md`: +```markdown +## Description + + +## Type of Change +- [ ] Bug fix +- [ ] New feature +- [ ] Accessibility improvement +- [ ] UI enhancement +- [ ] Documentation +- [ ] Refactor + +## Checklist +- [ ] Builds successfully locally +- [ ] All tests pass +- [ ] No console errors +- [ ] Accessibility tested (if applicable) +- [ ] Mobile responsive (if UI change) +- [ ] Dark mode works (if UI change) + +## Screenshots (if applicable) + +``` + +--- + +### 2. Prevent Duplicate PRs + +**Process**: +1. Check open PRs before creating new ones +2. Use GitHub Projects to track work in progress +3. Add labels: `accessibility`, `ui-enhancement`, `aurora`, `palette` +4. Close stale PRs after 7 days of inactivity + +--- + +### 3. Fix CI/CD Pipeline + +**Vercel Configuration**: +1. Verify build command: `npm run build` or `vite build` +2. Check Node version in `package.json` engines field +3. Set required environment variables in Vercel dashboard +4. Enable automatic deployments for PRs + +**Add GitHub Actions** (optional): +```yaml +# .github/workflows/ci.yml +name: CI +on: [pull_request] +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - run: npm install + - run: npm run lint + - run: npm run test + - run: npm run build +``` + +--- + +### 4. PR Review Process + +**Before Merging**, ensure: +- ✅ All CI checks pass (especially Vercel deployment) +- ✅ Code review completed +- ✅ No merge conflicts +- ✅ Tests pass locally +- ✅ Visually tested in browser (for UI changes) +- ✅ Accessibility tested (for a11y changes) + +--- + +## Quick Action Commands + +### Check Build Locally +```bash +cd /home/runner/work/react-portfolio/react-portfolio +npm install +npm run build +``` + +### View PR Diff +```bash +gh pr diff +``` + +### Close Duplicate PRs +```bash +gh pr close 88 -c "Closing in favor of #91" +gh pr close 93 -c "Closing in favor of #91" +``` + +### Merge Sub-PR into Parent +```bash +git checkout aurora-project-card-glow-3706439520198146184 +git merge copilot/sub-pr-89 +git push origin aurora-project-card-glow-3706439520198146184 +gh pr close 90 -c "Merged into parent PR #89" +``` + +### Merge PR After Approval +```bash +gh pr merge --squash --delete-branch +``` + +--- + +## Summary of Actions Needed + +### Immediate (Do Now) 🔴 +- [ ] Fix Vercel deployment failures (investigate build errors) +- [ ] Choose one alt text PR (#91 recommended) +- [ ] Close duplicate PRs (#88, #93) + +### Soon (This Week) 🟡 +- [ ] Merge sub-PR #90 into PR #89 +- [ ] Complete PR #95 (GitHub profile enhancement) +- [ ] Merge ready PRs in recommended order + +### Later (Ongoing) 🟢 +- [ ] Establish PR guidelines and templates +- [ ] Add CI/CD automation with GitHub Actions +- [ ] Implement PR labels and project tracking +- [ ] Set up automatic stale PR closure + +--- + +## Contact & Resources + +**Repository**: https://github.com/amar-295/react-portfolio +**Open PRs**: https://github.com/amar-295/react-portfolio/pulls +**Issues**: https://github.com/amar-295/react-portfolio/issues + +**For Questions**: +- Email: 612amar@gmail.com +- GitHub: @amar-295 + +--- + +*Report generated by Claude Code Assistant* +*Last updated: March 17, 2026* diff --git a/README.md b/README.md index 8aac089..f424bfb 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ > **A modern, high-performance frontend developer portfolio built to showcase technical proficiency and creative design.** +> 💡 **New!** Looking to enhance your GitHub profile? Check out the [GitHub Profile README](./GITHUB_PROFILE_README.md) and [Setup Guide](./PROFILE_SETUP_GUIDE.md) included in this repository! + --- ## 🚀 Live Demo @@ -23,7 +25,8 @@ - [Project Structure](#-project-structure) - [Getting Started](#-getting-started) - [Deployment](#-deployment) -- [Performance & Accessibility](#-performance-&-accessibility) +- [Performance & Accessibility](#-performance--accessibility) +- [GitHub Profile Enhancement](#-github-profile-enhancement) - [Contact](#-contact) --- @@ -143,6 +146,39 @@ This project is optimized for high performance and accessibility: --- +## 🎨 GitHub Profile Enhancement + +This repository includes a comprehensive GitHub profile README and setup guide to help you create an impressive GitHub profile! + +### 📄 What's Included + +1. **[GITHUB_PROFILE_README.md](./GITHUB_PROFILE_README.md)** - A complete, ready-to-use GitHub profile README featuring: + - 🎯 Animated typing header with dynamic greeting + - 📊 Live GitHub stats, streak counters, and contribution graphs + - 🏆 GitHub trophies and achievements + - 🛠️ Comprehensive tech stack with badges + - 🚀 Featured projects showcase + - 📫 Contact information and social links + - 👀 Profile views counter + +2. **[PROFILE_SETUP_GUIDE.md](./PROFILE_SETUP_GUIDE.md)** - Complete setup instructions including: + - Step-by-step profile repository creation + - Customization options for all components + - Troubleshooting common issues + - Additional enhancement ideas + - Best practices and resources + +### 🚀 Quick Start + +1. Create a repository named `amar-295` (matching your GitHub username) +2. Copy the content from [GITHUB_PROFILE_README.md](./GITHUB_PROFILE_README.md) +3. Paste it into your profile repository's README.md +4. Visit your profile at `https://github.com/amar-295` to see the enhanced profile! + +For detailed instructions and customization options, see the [Setup Guide](./PROFILE_SETUP_GUIDE.md). + +--- + ## 📬 Contact I am open to **Frontend Developer** roles and interesting freelance projects. diff --git a/close-merged-prs.sh b/close-merged-prs.sh new file mode 100755 index 0000000..8e2bbf9 --- /dev/null +++ b/close-merged-prs.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# Script to close remaining PRs after successful merges +# Run this after verifying all merges are successful + +echo "Closing duplicate and merged PRs..." +echo "" + +# Close PR #88 (duplicate of #91) +echo "Closing PR #88 (duplicate alt-text PR)..." +gh pr close 88 --comment "Closing in favor of #91, which includes both JSX accessibility linting and more descriptive alt text ('Profile picture of Amarnath'). Thank you for the contribution!" + +# Close PR #93 (duplicate of #91) +echo "Closing PR #93 (duplicate alt-text PR)..." +gh pr close 93 --comment "Closing in favor of #91, which provides more descriptive alt text ('Profile picture of Amarnath' vs just 'Amarnath'). Thank you for the contribution!" + +# Close PR #90 (sub-PR merged into #89) +echo "Closing PR #90 (sub-PR)..." +gh pr close 90 --comment "Changes from this sub-PR have been merged into parent PR #89, which has now been successfully merged to main. Thank you for the fix!" + +echo "" +echo "✅ All duplicate and merged PRs closed successfully!" +echo "" +echo "Remaining open PRs:" +gh pr list --state open diff --git a/manage-prs.sh b/manage-prs.sh new file mode 100755 index 0000000..591e3aa --- /dev/null +++ b/manage-prs.sh @@ -0,0 +1,323 @@ +#!/bin/bash + +# PR Management Quick Actions Script +# Repository: amar-295/react-portfolio +# This script helps manage all open pull requests efficiently + +set -e + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +echo -e "${BLUE}========================================${NC}" +echo -e "${BLUE} PR Management Quick Actions${NC}" +echo -e "${BLUE} Repository: amar-295/react-portfolio${NC}" +echo -e "${BLUE}========================================${NC}" +echo "" + +# Function to display menu +show_menu() { + echo "Select an action:" + echo "" + echo " ${GREEN}Infrastructure Fixes:${NC}" + echo " 1. Check local build (verify no build errors)" + echo " 2. Run tests locally" + echo " 3. Check Vercel deployment status for all PRs" + echo "" + echo " ${YELLOW}PR Management:${NC}" + echo " 4. Close duplicate alt-text PRs (#88, #93)" + echo " 5. Merge sub-PR #90 into parent PR #89" + echo " 6. List all open PRs with status" + echo " 7. View specific PR details" + echo "" + echo " ${BLUE}Merge Operations:${NC}" + echo " 8. Merge PR (with checks)" + echo " 9. Merge PRs in recommended order (batch)" + echo "" + echo " ${RED}Other:${NC}" + echo " 10. Create PR management report" + echo " 11. Exit" + echo "" + read -p "Enter choice [1-11]: " choice + echo "" +} + +# Function to check local build +check_build() { + echo -e "${BLUE}Checking local build...${NC}" + if npm run build; then + echo -e "${GREEN}✓ Build successful!${NC}" + return 0 + else + echo -e "${RED}✗ Build failed! Fix errors before merging PRs.${NC}" + return 1 + fi +} + +# Function to run tests +run_tests() { + echo -e "${BLUE}Running tests...${NC}" + if npm test; then + echo -e "${GREEN}✓ All tests passed!${NC}" + return 0 + else + echo -e "${RED}✗ Tests failed!${NC}" + return 1 + fi +} + +# Function to check Vercel status +check_vercel_status() { + echo -e "${BLUE}Checking Vercel deployment status...${NC}" + echo "" + + declare -a prs=(95 94 93 92 91 90 89 88) + + for pr in "${prs[@]}"; do + echo -e "${YELLOW}PR #$pr:${NC}" + gh pr view "$pr" --json statusCheckRollup --jq '.statusCheckRollup[] | select(.context == "Vercel") | " Status: \(.state) - \(.description)"' || echo " Could not fetch status" + echo "" + done +} + +# Function to close duplicate PRs +close_duplicates() { + echo -e "${YELLOW}Closing duplicate alt-text PRs...${NC}" + echo "" + + read -p "This will close PRs #88 and #93 in favor of #91. Continue? (y/n): " confirm + if [ "$confirm" != "y" ]; then + echo "Cancelled." + return + fi + + echo "Closing PR #88..." + gh pr close 88 --comment "Closing this PR in favor of #91, which includes both the JSX accessibility linting setup and better alt text description ('Profile picture of Amarnath')." || true + + echo "Closing PR #93..." + gh pr close 93 --comment "Closing this PR in favor of #91, which provides more descriptive alt text ('Profile picture of Amarnath' vs just 'Amarnath')." || true + + echo -e "${GREEN}✓ Duplicate PRs closed successfully!${NC}" +} + +# Function to merge sub-PR into parent +merge_sub_pr() { + echo -e "${YELLOW}Merging sub-PR #90 into parent PR #89...${NC}" + echo "" + + read -p "This will merge copilot/sub-pr-89 into aurora-project-card-glow-3706439520198146184. Continue? (y/n): " confirm + if [ "$confirm" != "y" ]; then + echo "Cancelled." + return + fi + + # Save current branch + CURRENT_BRANCH=$(git branch --show-current) + + echo "Fetching latest changes..." + git fetch origin + + echo "Checking out parent PR branch..." + git checkout aurora-project-card-glow-3706439520198146184 + + echo "Merging sub-PR branch..." + if git merge origin/copilot/sub-pr-89 --no-ff -m "Merge sub-PR #90: Scope ProjectCard glow to image container"; then + echo "Pushing changes..." + git push origin aurora-project-card-glow-3706439520198146184 + + echo "Closing sub-PR #90..." + gh pr close 90 --comment "Changes merged into parent PR #89. This sub-PR is no longer needed." || true + + echo -e "${GREEN}✓ Sub-PR merged and closed successfully!${NC}" + else + echo -e "${RED}✗ Merge failed! Please resolve conflicts manually.${NC}" + fi + + # Return to original branch + git checkout "$CURRENT_BRANCH" +} + +# Function to list open PRs +list_open_prs() { + echo -e "${BLUE}Open Pull Requests:${NC}" + echo "" + gh pr list --state open --json number,title,headRefName,isDraft,createdAt,author --template '{{range .}}{{printf "#%v" .number}} - {{.title}} + Branch: {{.headRefName}} + Author: {{.author.login}} + Created: {{timeago .createdAt}} + Draft: {{.isDraft}} + +{{end}}' +} + +# Function to view PR details +view_pr_details() { + read -p "Enter PR number: " pr_num + echo "" + gh pr view "$pr_num" +} + +# Function to merge PR with checks +merge_pr() { + read -p "Enter PR number to merge: " pr_num + echo "" + + echo -e "${BLUE}Checking PR #$pr_num status...${NC}" + + # Check if PR is mergeable + MERGEABLE=$(gh pr view "$pr_num" --json mergeable --jq '.mergeable') + STATE=$(gh pr view "$pr_num" --json state --jq '.state') + + if [ "$STATE" != "OPEN" ]; then + echo -e "${RED}✗ PR #$pr_num is not open (state: $STATE)${NC}" + return 1 + fi + + if [ "$MERGEABLE" != "MERGEABLE" ]; then + echo -e "${RED}✗ PR #$pr_num is not mergeable (status: $MERGEABLE)${NC}" + echo " Please resolve conflicts or wait for checks to complete." + return 1 + fi + + echo -e "${GREEN}✓ PR #$pr_num is ready to merge${NC}" + echo "" + + read -p "Merge strategy? (s=squash, m=merge, r=rebase) [s]: " strategy + strategy=${strategy:-s} + + case $strategy in + s) + echo "Merging with squash..." + gh pr merge "$pr_num" --squash --delete-branch + ;; + m) + echo "Merging with merge commit..." + gh pr merge "$pr_num" --merge --delete-branch + ;; + r) + echo "Merging with rebase..." + gh pr merge "$pr_num" --rebase --delete-branch + ;; + *) + echo "Invalid strategy. Cancelled." + return 1 + ;; + esac + + echo -e "${GREEN}✓ PR #$pr_num merged successfully!${NC}" +} + +# Function to merge PRs in recommended order +batch_merge() { + echo -e "${YELLOW}Batch merge PRs in recommended order${NC}" + echo "" + echo "This will merge PRs in this order:" + echo " 1. PR #91 (Alt text - foundation)" + echo " 2. PR #92 (TechTag hover)" + echo " 3. PR #94 (ContactInfo glow)" + echo " 4. PR #89 (ProjectCard glow)" + echo "" + + read -p "Continue with batch merge? (y/n): " confirm + if [ "$confirm" != "y" ]; then + echo "Cancelled." + return + fi + + declare -a prs_to_merge=(91 92 94 89) + + for pr in "${prs_to_merge[@]}"; do + echo "" + echo -e "${BLUE}Processing PR #$pr...${NC}" + + # Check if mergeable + MERGEABLE=$(gh pr view "$pr" --json mergeable --jq '.mergeable') + + if [ "$MERGEABLE" == "MERGEABLE" ]; then + echo -e "${GREEN}✓ PR #$pr is mergeable${NC}" + read -p "Merge PR #$pr now? (y/n/q to quit): " merge_confirm + + if [ "$merge_confirm" == "q" ]; then + echo "Batch merge cancelled." + return + elif [ "$merge_confirm" == "y" ]; then + gh pr merge "$pr" --squash --delete-branch + echo -e "${GREEN}✓ PR #$pr merged!${NC}" + sleep 2 # Wait a bit between merges + else + echo "Skipping PR #$pr" + fi + else + echo -e "${RED}✗ PR #$pr is not mergeable (status: $MERGEABLE)${NC}" + echo " Stopping batch merge. Please fix this PR first." + return 1 + fi + done + + echo "" + echo -e "${GREEN}✓ Batch merge completed!${NC}" +} + +# Function to create report +create_report() { + echo -e "${BLUE}PR Management Report already exists:${NC}" + echo " Location: PR_MANAGEMENT_REPORT.md" + echo "" + read -p "Open in editor? (y/n): " open_editor + if [ "$open_editor" == "y" ]; then + ${EDITOR:-nano} PR_MANAGEMENT_REPORT.md + fi +} + +# Main loop +while true; do + show_menu + + case $choice in + 1) + check_build + ;; + 2) + run_tests + ;; + 3) + check_vercel_status + ;; + 4) + close_duplicates + ;; + 5) + merge_sub_pr + ;; + 6) + list_open_prs + ;; + 7) + view_pr_details + ;; + 8) + merge_pr + ;; + 9) + batch_merge + ;; + 10) + create_report + ;; + 11) + echo -e "${GREEN}Goodbye!${NC}" + exit 0 + ;; + *) + echo -e "${RED}Invalid option. Please try again.${NC}" + ;; + esac + + echo "" + read -p "Press Enter to continue..." + echo "" +done diff --git a/package-lock.json b/package-lock.json index 0283a07..66e0996 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,9 @@ "version": "0.0.0", "dependencies": { "@formspree/react": "^3.0.0", + "@playwright/test": "^1.58.2", "@tailwindcss/vite": "^4.1.18", + "playwright": "^1.58.2", "prop-types": "^15.8.1", "react": "^19.2.0", "react-dom": "^19.2.0", @@ -18,6 +20,9 @@ }, "devDependencies": { "@eslint/js": "^9.39.1", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.2.0", + "@testing-library/user-event": "^14.6.1", "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.1.1", @@ -25,12 +30,42 @@ "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.24", "globals": "^16.5.0", + "jsdom": "^26.0.0", "vite": "^7.3.1", "vite-plugin-compression": "^0.5.1", "vite-plugin-html-inline-sources": "^0.0.4", - "vite-plugin-webfont-dl": "^3.12.0" + "vite-plugin-webfont-dl": "^3.12.0", + "vitest": "^3.0.5" } }, + "node_modules/@adobe/css-tools": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", + "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/@babel/code-frame": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", @@ -62,7 +97,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -266,6 +300,16 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", @@ -350,7 +394,6 @@ "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@keyv/serialize": "^1.1.1" } @@ -376,6 +419,121 @@ "@keyv/serialize": "^1.1.1" } }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.27.3", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", @@ -1077,6 +1235,21 @@ "dev": true, "license": "MIT" }, + "node_modules/@playwright/test": { + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", + "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.58.2" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-rc.3", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", @@ -1428,7 +1601,6 @@ "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-5.10.0.tgz", "integrity": "sha512-PTigkxMdMUP6B5ISS7jMqJAKhgrhZwjprDqR1eATtFfh0OpKVNp110xiH+goeVdrJ29/4LeZJR4FaHHWstsu0A==", "license": "MIT", - "peer": true, "engines": { "node": ">=12.16" } @@ -1690,6 +1862,104 @@ "vite": "^5.2.0 || ^6 || ^7" } }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", + "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/react": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.2.tgz", + "integrity": "sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -1735,6 +2005,24 @@ "@babel/types": "^7.28.2" } }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -1754,7 +2042,6 @@ "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -1790,13 +2077,127 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, + "node_modules/@vitest/expect": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1814,6 +2215,16 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1831,6 +2242,17 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -1854,6 +2276,26 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1921,7 +2363,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -1936,6 +2377,16 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cacheable": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.2.tgz", @@ -2005,7 +2456,24 @@ ], "license": "CC-BY-4.0" }, - "node_modules/chalk": { + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -2022,6 +2490,16 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/check-error": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, "node_modules/clean-css": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", @@ -2097,6 +2575,27 @@ "node": ">= 8" } }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", @@ -2104,6 +2603,20 @@ "dev": true, "license": "MIT" }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -2122,6 +2635,23 @@ } } }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2139,6 +2669,16 @@ "node": ">=0.4.0" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -2148,6 +2688,14 @@ "node": ">=8" } }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -2216,6 +2764,13 @@ "node": ">= 0.4" } }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", @@ -2315,7 +2870,6 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -2484,6 +3038,16 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -2494,6 +3058,16 @@ "node": ">=0.10.0" } }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2843,6 +3417,60 @@ "dev": true, "license": "MIT" }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -2880,6 +3508,16 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2903,6 +3541,13 @@ "node": ">=0.10.0" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2938,6 +3583,46 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -3306,6 +3991,13 @@ "loose-envify": "cli.js" } }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true, + "license": "MIT" + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -3316,6 +4008,17 @@ "yallist": "^3.0.2" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -3358,6 +4061,16 @@ "node": ">= 0.6" } }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3410,6 +4123,13 @@ "dev": true, "license": "MIT" }, + "node_modules/nwsapi": { + "version": "2.2.23", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz", + "integrity": "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3515,6 +4235,23 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -3526,7 +4263,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3534,6 +4270,50 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/playwright": { + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", + "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.58.2" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", + "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -3572,6 +4352,44 @@ "node": ">= 0.8.0" } }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -3618,7 +4436,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -3628,7 +4445,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -3661,6 +4477,20 @@ "node": ">=0.10.0" } }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3715,6 +4545,33 @@ "fsevents": "~2.3.2" } }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/scheduler": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", @@ -3754,6 +4611,13 @@ "node": ">=8" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3773,6 +4637,33 @@ "node": ">=0.10.0" } }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -3786,6 +4677,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-literal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3799,6 +4710,13 @@ "node": ">=8" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, "node_modules/tailwindcss": { "version": "4.1.18", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", @@ -3818,6 +4736,20 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -3834,6 +4766,82 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -3903,7 +4911,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -3973,6 +4980,29 @@ } } }, + "node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/vite-plugin-compression": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz", @@ -4494,6 +5524,140 @@ "hookified": "^1.15.0" } }, + "node_modules/vitest": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.4", + "@vitest/ui": "3.2.4", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4510,6 +5674,23 @@ "node": ">= 8" } }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -4520,6 +5701,45 @@ "node": ">=0.10.0" } }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -4546,7 +5766,6 @@ "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" }